Compare commits

...

No commits in common. "master" and "check" have entirely different histories.

856 changed files with 170415 additions and 22122 deletions

4
.prettierignore Normal file
View File

@ -0,0 +1,4 @@
dist
dev/assets/vendor
node_modules
src/node_modules

2
.browserslistrc Normal file
View File

@ -0,0 +1,2 @@
> 1%
last 2 versions

1
.eslintignore Normal file
View File

@ -0,0 +1 @@
charting_library

48
.eslintrc.js Normal file
View File

@ -0,0 +1,48 @@
module.exports = {
root: true,
env: {
node: true,
},
extends: [
'@vue/airbnb',
'plugin:vue/recommended',
'plugin:import/typescript',
// 'prettier/@typescript-eslint',
'plugin:@typescript-eslint/recommended',
// "plugin:prettier/recommended",
],
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser',
ecmaVersion: 6,
sourceType: 'module',
ecmaFeatures: {
jsx: false,
modules: true,
experimentalObjectRestSpread: true,
},
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
semi: ['error', 'never'],
'max-len': 'off',
'linebreak-style': 'off',
// camelcase: ['error', { properties: 'never', ignoreDestructuring: true, ignoreImports: true }],
'arrow-parens': ['error', 'as-needed'],
'vue/new-line-between-multi-line-property': 0,
'vue/multiline-html-element-content-newline': 0,
'vue/multi-word-component-names': 0,
'vue/no-mutating-props': 0,
'vue/v-slot-style': 0,
'@typescript-eslint/no-empty-function': 1,
camelcase: 0,
'vuejs-accessibility/click-events-have-key-events': 'off',
'vuejs-accessibility/mouse-events-have-key-events': 'off',
'vuejs-accessibility/anchor-has-content': 'off',
'no-unsafe-optional-chaining': 1,
'vuejs-accessibility/label-has-for': 1,
'import/extensions': 'off',
},
}

2
.github/FUNDING.yml vendored
View File

@ -1,5 +1,5 @@
# These are supported funding model platforms
github: ping-pub
# github: liangping
issuehunt: ping-pub # Replace with a single IssueHunt username

View File

@ -1,14 +1,11 @@
name: Config Checker
name: Deploy to ping.pub
on:
# push:
# branches: [ master ]
pull_request:
# branches: [ master ]
paths:
- 'chains/mainnet/**'
- 'chains/testnet/**'
branches: [ master ]
jobs:
deploy:

View File

@ -3,7 +3,7 @@ name: Deploy to ping.pub
on:
push:
branches: [ master2 ]
branches: [ master ]
# pull_request:
# branches: [ master ]
@ -12,17 +12,16 @@ jobs:
name: Ping deploy
runs-on: mainnet
steps:
- name: Environment
run: export NODE_OPTIONS="--max_old_space_size=4096"
- name: print
run: echo ${GITHUB_REF#refs/heads/}
- name: Git Checkout Latest
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Install
run: yarn install --ignore-engines
run: yarn install
- name: Build
run: yarn build
run: yarn run vue-cli-service build
- name: Deploy
run: cp -rf ./dist/* /var/www/html/

View File

@ -1,5 +1,5 @@
name: Testnet Deploy
name: Ping Deploy
on:
push:

39
.gitignore vendored
View File

@ -1,5 +1,34 @@
node_modules/
**/.vscode
yarn-error.log
dist
.idea
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode/*
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
!.vscode/*.code-snippets
# script
/vuexy-scripts
# Docs
/docs/.temp
# Yarn
.yarn/
.yarnrc.yml
package-lock.json

View File

@ -1,9 +0,0 @@
{
"tabWidth": 2,
"singleQuote": true,
"semi": true,
"endOfLine": "auto",
"bracketSpacing": true,
"TrailingCooma": true,
"arrowParens": "always"
}

45
.yarnclean Normal file
View File

@ -0,0 +1,45 @@
# test directories
__tests__
test
tests
powered-test
# asset directories
docs
doc
website
images
assets
# examples
example
examples
# code coverage directories
coverage
.nyc_output
# build scripts
Makefile
Gulpfile.js
Gruntfile.js
# configs
appveyor.yml
circle.yml
codeship-services.yml
codeship-steps.yml
wercker.yml
.tern-project
.gitattributes
.editorconfig
.*ignore
.eslintrc
.jshintrc
.flowconfig
.documentup.json
.yarn-metadata.json
.travis.yml
# misc
*.md

3
Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM nginx:alpine
COPY ping.conf /etc/nginx/conf.d/default.conf
COPY dist /usr/share/nginx/html

View File

@ -8,27 +8,30 @@
[![version](https://img.shields.io/github/tag/ping-pub/explorer.svg)](https://github.com/ping-pub/explorer/releases/latest)
[![GitHub](https://img.shields.io/github/license/ping-pub/explorer.svg)](https://github.com/ping-pub/explorer/blob/master/LICENSE)
[![Ping Deploy](https://github.com/ping-pub/explorer/actions/workflows/mainnet-deploy.yaml/badge.svg)](https://github.com/ping-pub/explorer/actions/workflows/mainnet-deploy.yaml)
[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/bukotsunikki.svg?style=social&label=Follow%20%40ping_pub)](https://twitter.com/ping_pub)
[![https://discord.gg/CmjYVSr6GW](https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat)](https://discord.gg/CmjYVSr6GW)
</div>
`Ping Dashboard` is a light explorer for Cosmos-based Blockchains. https://ping.pub .
Ping Explorer is a light explorer for Cosmos-based Blockchains. https://ping.pub .
## What sets Ping Dashboard apart from other explorers?
**Ping Dashboard** stands out by providing a real-time exploration of blockchain data without relying on caching or pre-processing. It exclusively fetches data from the Cosmos full node via LCD/RPC endpoints, ensuring a truly authentic experience. This approach is referred to as the "Light Explorer."
## What is the difference between Ping explorer and other explorers?
## Are you interested in listing your blockchain on https://ping.pub?
Ping Explorer is designed to explore blockchain data as real as possible, therefore there is no cache, no pre-processing. Ping Explorer does not cache/save blockchain data on its server. Ping Explorer only fetch data from Cosmos full node via LCD/RPC endpoints. We call it "Light Explorer".
To make this repository clean, please submit your request to https://github.com/ping-pub/ping.pub.git
## Do you want to list your blockchain on ping.pub?
Pull your request [here](./src/chains), We will add your chains as soon as possible. It is **FREE** (You must have 10+ independent validators on your chain).
## Why does Ping Dashboard rely on official/trusted third-party public LCD/RPC servers?
There are two primary reasons for this choice:
## Why Ping explorer use official/trusted third party public LCD/rpc server?
We have two considerations:
- Trust, In decentralize system, everything controlled by one single team/organization could be risks. So we decided to co-build with the community.
- Limited Resources: ` Ping Dashboard ` will list hundreds cosmos-based blockchains in the future, it's impossible for our team to run validators or fullnodes for all of those chains.
- Trust: In a decentralized system, it is crucial to avoid relying solely on a single entity. By utilizing official/trusted third-party public LCD/RPC servers, Ping Dashboard ensures that the data is sourced from a network of trusted participants.
- Limited Resources: As Ping Dashboard plans to list hundreds of Cosmos-based blockchains in the future, it is impractical for the Ping team to operate validators or full nodes for all of them. Leveraging trusted third-party servers allows for more efficient resource allocation.
## Donation
@ -39,6 +42,10 @@ Your donation will help us make better products. Thanks in advance.
0x88BFec573Dd3E4b7d2E6BfD4D0D6B11F843F8aa1
```
- You can donate any token in the Cosmos ecosystem: [here](https://ping.pub/coffee)
> If you are an individual please do not donate more than $10, a cup of coffee means a lot to us.
#### Donations from project
- Point Network: 1000USDC and $1000 worth of POINT
@ -47,7 +54,7 @@ Your donation will help us make better products. Thanks in advance.
## Hire us
You can hire us by submitting an issue and fund the issue on [IssueHunter](https://issuehunt.io/r/ping-pub/explorer)
You can hire us by submiting an issue and fund the issue on [IssueHunter](https://issuehunt.io/r/ping-pub/explorer)
## Contributors

606
auto-imports.d.ts vendored
View File

@ -1,606 +0,0 @@
// Generated by 'unplugin-auto-import'
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
const computed: typeof import('vue')['computed']
const computedAsync: typeof import('@vueuse/core')['computedAsync']
const computedEager: typeof import('@vueuse/core')['computedEager']
const computedInject: typeof import('@vueuse/core')['computedInject']
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
const controlledRef: typeof import('@vueuse/core')['controlledRef']
const createApp: typeof import('vue')['createApp']
const createEventHook: typeof import('@vueuse/core')['createEventHook']
const createGenericProjection: typeof import('@vueuse/math')['createGenericProjection']
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
const createPinia: typeof import('pinia')['createPinia']
const createProjection: typeof import('@vueuse/math')['createProjection']
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
const customRef: typeof import('vue')['customRef']
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const defineStore: typeof import('pinia')['defineStore']
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
const effectScope: typeof import('vue')['effectScope']
const extendRef: typeof import('@vueuse/core')['extendRef']
const getActivePinia: typeof import('pinia')['getActivePinia']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const h: typeof import('vue')['h']
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
const inject: typeof import('vue')['inject']
const isDefined: typeof import('@vueuse/core')['isDefined']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
const logicAnd: typeof import('@vueuse/math')['logicAnd']
const logicNot: typeof import('@vueuse/math')['logicNot']
const logicOr: typeof import('@vueuse/math')['logicOr']
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
const mapActions: typeof import('pinia')['mapActions']
const mapGetters: typeof import('pinia')['mapGetters']
const mapState: typeof import('pinia')['mapState']
const mapStores: typeof import('pinia')['mapStores']
const mapWritableState: typeof import('pinia')['mapWritableState']
const markRaw: typeof import('vue')['markRaw']
const nextTick: typeof import('vue')['nextTick']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
const onDeactivated: typeof import('vue')['onDeactivated']
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
const onLongPress: typeof import('@vueuse/core')['onLongPress']
const onMounted: typeof import('vue')['onMounted']
const onRenderTracked: typeof import('vue')['onRenderTracked']
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
const onScopeDispose: typeof import('vue')['onScopeDispose']
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
const onUnmounted: typeof import('vue')['onUnmounted']
const onUpdated: typeof import('vue')['onUpdated']
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
const provide: typeof import('vue')['provide']
const reactify: typeof import('@vueuse/core')['reactify']
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
const reactive: typeof import('vue')['reactive']
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
const reactivePick: typeof import('@vueuse/core')['reactivePick']
const readonly: typeof import('vue')['readonly']
const ref: typeof import('vue')['ref']
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
const refDebounced: typeof import('@vueuse/core')['refDebounced']
const refDefault: typeof import('@vueuse/core')['refDefault']
const refThrottled: typeof import('@vueuse/core')['refThrottled']
const refWithControl: typeof import('@vueuse/core')['refWithControl']
const resolveComponent: typeof import('vue')['resolveComponent']
const resolveDirective: typeof import('vue')['resolveDirective']
const resolveRef: typeof import('@vueuse/core')['resolveRef']
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
const setActivePinia: typeof import('pinia')['setActivePinia']
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
const shallowReactive: typeof import('vue')['shallowReactive']
const shallowReadonly: typeof import('vue')['shallowReadonly']
const shallowRef: typeof import('vue')['shallowRef']
const storeToRefs: typeof import('pinia')['storeToRefs']
const syncRef: typeof import('@vueuse/core')['syncRef']
const syncRefs: typeof import('@vueuse/core')['syncRefs']
const templateRef: typeof import('@vueuse/core')['templateRef']
const throttledRef: typeof import('@vueuse/core')['throttledRef']
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
const toRaw: typeof import('vue')['toRaw']
const toReactive: typeof import('@vueuse/core')['toReactive']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
const triggerRef: typeof import('vue')['triggerRef']
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
const unref: typeof import('vue')['unref']
const unrefElement: typeof import('@vueuse/core')['unrefElement']
const until: typeof import('@vueuse/core')['until']
const useAbs: typeof import('@vueuse/math')['useAbs']
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
const useArraySome: typeof import('@vueuse/core')['useArraySome']
const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
const useAttrs: typeof import('vue')['useAttrs']
const useAverage: typeof import('@vueuse/math')['useAverage']
const useBase64: typeof import('@vueuse/core')['useBase64']
const useBattery: typeof import('@vueuse/core')['useBattery']
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
const useCached: typeof import('@vueuse/core')['useCached']
const useCeil: typeof import('@vueuse/math')['useCeil']
const useClamp: typeof import('@vueuse/math')['useClamp']
const useClipboard: typeof import('@vueuse/core')['useClipboard']
const useCloned: typeof import('@vueuse/core')['useCloned']
const useColorMode: typeof import('@vueuse/core')['useColorMode']
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
const useCounter: typeof import('@vueuse/core')['useCounter']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVar: typeof import('@vueuse/core')['useCssVar']
const useCssVars: typeof import('vue')['useCssVars']
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
const useCycleList: typeof import('@vueuse/core')['useCycleList']
const useDark: typeof import('@vueuse/core')['useDark']
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
const useDebounce: typeof import('@vueuse/core')['useDebounce']
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
const useDraggable: typeof import('@vueuse/core')['useDraggable']
const useDropZone: typeof import('@vueuse/core')['useDropZone']
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
const useElementHover: typeof import('@vueuse/core')['useElementHover']
const useElementSize: typeof import('@vueuse/core')['useElementSize']
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
const useEventBus: typeof import('@vueuse/core')['useEventBus']
const useEventListener: typeof import('@vueuse/core')['useEventListener']
const useEventSource: typeof import('@vueuse/core')['useEventSource']
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
const useFavicon: typeof import('@vueuse/core')['useFavicon']
const useFetch: typeof import('@vueuse/core')['useFetch']
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
const useFloor: typeof import('@vueuse/math')['useFloor']
const useFocus: typeof import('@vueuse/core')['useFocus']
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
const useFps: typeof import('@vueuse/core')['useFps']
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
const useGamepad: typeof import('@vueuse/core')['useGamepad']
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
const useI18n: typeof import('vue-i18n')['useI18n']
const useIdle: typeof import('@vueuse/core')['useIdle']
const useImage: typeof import('@vueuse/core')['useImage']
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
const useInterval: typeof import('@vueuse/core')['useInterval']
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
const useLink: typeof import('vue-router')['useLink']
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
const useMath: typeof import('@vueuse/math')['useMath']
const useMax: typeof import('@vueuse/math')['useMax']
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
const useMemoize: typeof import('@vueuse/core')['useMemoize']
const useMemory: typeof import('@vueuse/core')['useMemory']
const useMin: typeof import('@vueuse/math')['useMin']
const useMounted: typeof import('@vueuse/core')['useMounted']
const useMouse: typeof import('@vueuse/core')['useMouse']
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
const useNetwork: typeof import('@vueuse/core')['useNetwork']
const useNow: typeof import('@vueuse/core')['useNow']
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
const useOnline: typeof import('@vueuse/core')['useOnline']
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
const useParallax: typeof import('@vueuse/core')['useParallax']
const usePermission: typeof import('@vueuse/core')['usePermission']
const usePointer: typeof import('@vueuse/core')['usePointer']
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
const usePrecision: typeof import('@vueuse/math')['usePrecision']
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
const usePrevious: typeof import('@vueuse/core')['usePrevious']
const useProjection: typeof import('@vueuse/math')['useProjection']
const useRafFn: typeof import('@vueuse/core')['useRafFn']
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
const useRound: typeof import('@vueuse/math')['useRound']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
const useScroll: typeof import('@vueuse/core')['useScroll']
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
const useShare: typeof import('@vueuse/core')['useShare']
const useSlots: typeof import('vue')['useSlots']
const useSorted: typeof import('@vueuse/core')['useSorted']
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
const useStepper: typeof import('@vueuse/core')['useStepper']
const useStorage: typeof import('@vueuse/core')['useStorage']
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
const useSum: typeof import('@vueuse/math')['useSum']
const useSupported: typeof import('@vueuse/core')['useSupported']
const useSwipe: typeof import('@vueuse/core')['useSwipe']
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
const useThrottle: typeof import('@vueuse/core')['useThrottle']
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
const useTimeout: typeof import('@vueuse/core')['useTimeout']
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
const useTitle: typeof import('@vueuse/core')['useTitle']
const useToFixed: typeof import('@vueuse/math')['useToFixed']
const useToNumber: typeof import('@vueuse/core')['useToNumber']
const useToString: typeof import('@vueuse/core')['useToString']
const useToggle: typeof import('@vueuse/core')['useToggle']
const useTransition: typeof import('@vueuse/core')['useTransition']
const useTrunc: typeof import('@vueuse/math')['useTrunc']
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
const useVModel: typeof import('@vueuse/core')['useVModel']
const useVModels: typeof import('@vueuse/core')['useVModels']
const useVibrate: typeof import('@vueuse/core')['useVibrate']
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
const watch: typeof import('vue')['watch']
const watchArray: typeof import('@vueuse/core')['watchArray']
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
const watchEffect: typeof import('vue')['watchEffect']
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
const watchOnce: typeof import('@vueuse/core')['watchOnce']
const watchPausable: typeof import('@vueuse/core')['watchPausable']
const watchPostEffect: typeof import('vue')['watchPostEffect']
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
const whenever: typeof import('@vueuse/core')['whenever']
}
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
interface ComponentCustomProperties {
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
readonly acceptHMRUpdate: UnwrapRef<typeof import('pinia')['acceptHMRUpdate']>
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
readonly computed: UnwrapRef<typeof import('vue')['computed']>
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
readonly createGenericProjection: UnwrapRef<typeof import('@vueuse/math')['createGenericProjection']>
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
readonly createPinia: UnwrapRef<typeof import('pinia')['createPinia']>
readonly createProjection: UnwrapRef<typeof import('@vueuse/math')['createProjection']>
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
readonly defineStore: UnwrapRef<typeof import('pinia')['defineStore']>
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
readonly getActivePinia: UnwrapRef<typeof import('pinia')['getActivePinia']>
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
readonly h: UnwrapRef<typeof import('vue')['h']>
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
readonly inject: UnwrapRef<typeof import('vue')['inject']>
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
readonly logicAnd: UnwrapRef<typeof import('@vueuse/math')['logicAnd']>
readonly logicNot: UnwrapRef<typeof import('@vueuse/math')['logicNot']>
readonly logicOr: UnwrapRef<typeof import('@vueuse/math')['logicOr']>
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
readonly mapActions: UnwrapRef<typeof import('pinia')['mapActions']>
readonly mapGetters: UnwrapRef<typeof import('pinia')['mapGetters']>
readonly mapState: UnwrapRef<typeof import('pinia')['mapState']>
readonly mapStores: UnwrapRef<typeof import('pinia')['mapStores']>
readonly mapWritableState: UnwrapRef<typeof import('pinia')['mapWritableState']>
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
readonly ref: UnwrapRef<typeof import('vue')['ref']>
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
readonly resolveDirective: UnwrapRef<typeof import('vue')['resolveDirective']>
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
readonly setActivePinia: UnwrapRef<typeof import('pinia')['setActivePinia']>
readonly setMapStoreSuffix: UnwrapRef<typeof import('pinia')['setMapStoreSuffix']>
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
readonly storeToRefs: UnwrapRef<typeof import('pinia')['storeToRefs']>
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
readonly unref: UnwrapRef<typeof import('vue')['unref']>
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
readonly useAbs: UnwrapRef<typeof import('@vueuse/math')['useAbs']>
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
readonly useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
readonly useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
readonly useAverage: UnwrapRef<typeof import('@vueuse/math')['useAverage']>
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
readonly useCeil: UnwrapRef<typeof import('@vueuse/math')['useCeil']>
readonly useClamp: UnwrapRef<typeof import('@vueuse/math')['useClamp']>
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
readonly useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
readonly useFloor: UnwrapRef<typeof import('@vueuse/math')['useFloor']>
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
readonly useMath: UnwrapRef<typeof import('@vueuse/math')['useMath']>
readonly useMax: UnwrapRef<typeof import('@vueuse/math')['useMax']>
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
readonly useMin: UnwrapRef<typeof import('@vueuse/math')['useMin']>
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
readonly usePrecision: UnwrapRef<typeof import('@vueuse/math')['usePrecision']>
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
readonly usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
readonly useProjection: UnwrapRef<typeof import('@vueuse/math')['useProjection']>
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
readonly useRound: UnwrapRef<typeof import('@vueuse/math')['useRound']>
readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']>
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']>
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
readonly useSum: UnwrapRef<typeof import('@vueuse/math')['useSum']>
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
readonly useToFixed: UnwrapRef<typeof import('@vueuse/math')['useToFixed']>
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
readonly useTrunc: UnwrapRef<typeof import('@vueuse/math')['useTrunc']>
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
readonly watch: UnwrapRef<typeof import('vue')['watch']>
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
}
}

5
babel.config.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset',
],
}

View File

@ -1,108 +0,0 @@
# Directory Layout
Note: the host name used in the user's browser (displayed in the address bar) to load the explorer app determines which of the chain configuration directories is used.
If the host name contains the substring "testnet" (for example: "https://mytestnetwork.example.com") then chain configuration files in the `testnet` directory (only) are loaded. Conversely if the host name does not contain that substring then chain configuration files in the `mainnet` directory (only) are loaded.
Remember to bear this behavior in mind when selecting a DNS host name for self hosting the explorer.
** if you want to list your blockchain on ping.pub, please submit your configuration on https://github.com/ping-pub/ping.pub.git **
- Submit configs for mainnet, go to https://github.com/ping-pub/explorer/tree/master/chains/mainnet
- Submit configs for testnet, go to https://github.com/ping-pub/explorer/tree/master/chains/testnet, these configs will be enabled when you visit the domain that starts with `testnet.*`, for example `https://testnet.ping.pub`
# Sample of Config
```json
{
"chain_name": "cosmos",
"api": [
{
"address": "https://cosmos.api.ping.pub",
"provider": "Ping"
}
],
"rpc": [
{
"address": "https://cosmos.api.ping.pub",
"provider": "Ping"
}
],
"sdk_version": "0.42.6",
"coin_type": "118",
"min_tx_fee": "800",
"assets": [{
"base": "uatom",
"symbol": "ATOM",
"exponent": "6",
"coingecko_id": "cosmos",
"logo": "https://dl.airtable.com/.attachments/e54f814bba8c0f9af8a3056020210de0/2d1155fb/cosmos-hub.svg"
}],
"addr_prefix": "cosmos",
"theme_color": "#ce4747",
"logo": "https://dl.airtable.com/.attachments/e54f814bba8c0f9af8a3056020210de0/2d1155fb/cosmos-hub.svg"
}
```
- **chain_name** the name to identify the chain on ping.pub, would be better to use the same one as registry
- **api** the rest api endpoint.(make sure that CORS is enabled: `Allow-Control-Allow-Origin: *`)
- **rpc** the rpc endpoint, make sure that the port is added. rpc endpoint is only used for state sync. it's optional.
- **assets** Native Assets on blockchain.
Endpoint providers will be listed in the "Popular" tab of the staking.
# Token Unit conversion
We have two methods to load token metadata for token unit conversion:
## Loading from a REST endpoint (recommended).
you can define the metadata in the `bank` -> `metadata` section of the blockchain's genesis file. if you don't define, the `[]` will return.
```json
{
"name": "atom",
"description": "The native staking token of the Cosmos Hub.",
"denom_units": [
{
"denom": "uatom",
"exponent": 0,
"aliases": [
"microatom"
],
},
{
"denom": "matom",
"exponent": 3,
"aliases": [
"milliatom"
]
},
{
"denom": "atom",
"exponent": 6,
}
],
"base": "uatom",
"display": "atom",
}
```
you can see more details here:
https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-024-coin-metadata.md
## Loading from Cosmos Registry:
https://github.com/cosmos/chain-registry
# Test
please add these check points in comments with your PR, and adding your test result by clicking the checkbox of each line
```
Test Result:
- [ ] Connect wallet, check if address is correct?
- [ ] Transfer
- [ ] Delegate
- [ ] Redelegate
- [ ] Unbond
- [ ] withdraw Validator's Commission
- [ ] withdraw Rewards
```
Test is very important for us and our users.

View File

@ -1,74 +0,0 @@
{
"chain_name": "axelar",
"api": [
"https://rest.axelar.lava.build/lava-referer-97409c72-1a82-4861-8651-119c15151cbe"
],
"rpc": [
"https://tm.axelar.lava.build/lava-referer-97409c72-1a82-4861-8651-119c15151cbe"
],
"snapshot_provider": "",
"sdk_version": "0.45.6",
"coin_type": "118",
"min_tx_fee": "800",
"addr_prefix": "axelar",
"logo": "/logos/axelar.svg",
"theme_color": "#161723",
"assets": [
{
"base": "uaxl",
"symbol": "AXL",
"exponent": "6",
"coingecko_id": "axelar",
"logo": "/logos/axelar.svg"
},
{
"base": "uusdc",
"symbol": "axlUSDC",
"exponent": "6",
"coingecko_id": "usd-coin",
"logo": "/logos/usdc.svg"
},
{
"base": "uusdt",
"symbol": "axlUSDT",
"exponent": "6",
"coingecko_id": "tether",
"logo": "/logos/usdt.svg"
},
{
"base": "dai-wei",
"symbol": "axlDAI",
"exponent": "18",
"coingecko_id": "dai",
"logo": "/logos/dai.svg"
},
{
"base": "weth-wei",
"symbol": "axlWETH",
"exponent": "18",
"coingecko_id": "ethereum",
"logo": "/logos/weth.svg"
},
{
"base": "wmatic-wei",
"symbol": "axlWMATIC",
"exponent": "18",
"coingecko_id": "matic-network",
"logo": "/logos/wmatic.svg"
},
{
"base": "wavax-wei",
"symbol": "axlWAVAX",
"exponent": "18",
"coingecko_id": "avalanche-2",
"logo": "/logos/wavax.svg"
},
{
"base": "dot-planck",
"symbol": "axlDOT",
"exponent": "10",
"coingecko_id": "polkadot",
"logo": "/logos/dot.svg"
}
]
}

View File

@ -1,31 +0,0 @@
{
"chain_name": "cosmos",
"registry_name": "cosmoshub",
"api": [
{"provider": "notional", "address": "https://api-cosmoshub-ia.cosmosia.notional.ventures"},
{"provider": "blockapsis", "address": "https://lcd-cosmoshub.blockapsis.com:443"},
{"provider": "WhisperNode🤐", "address": "https://lcd-cosmoshub.whispernode.com:443"},
{"provider": "pupmos", "address": "https://api-cosmoshub.pupmos.network"},
{"provider": "publicnode", "address": "https://cosmos-rest.publicnode.com"},
{"provider": "staketab", "address": "https://cosmos-rest.staketab.org"},
{"provider": "nodestake", "address": "https://api.cosmos.nodestake.top"},
{"provider": "Golden Ratio Staking", "address": "https://rest-cosmoshub.goldenratiostaking.net"}
],
"rpc": [
{"provider": "icycro", "address": "https://cosmos-rpc.icycro.org"},
{"provider": "dragonstake", "address": "https://rpc.cosmos.dragonstake.io"},
{"provider": "Golden Ratio Staking", "address": "https://rpc-cosmoshub.goldenratiostaking.net"}
],
"sdk_version": "0.45.1",
"coin_type": "118",
"min_tx_fee": "800",
"addr_prefix": "cosmos",
"logo": "/logos/cosmos.svg",
"assets": [{
"base": "uatom",
"symbol": "ATOM",
"exponent": "6",
"coingecko_id": "cosmos",
"logo": "/logos/cosmos.svg"
}]
}

View File

@ -1,30 +0,0 @@
{
"chain_name": "neutron",
"api": [
{"provider": "Polkachu", "address": "https://neutron-api.polkachu.com"},
{"provider": "NodeStake", "address": "https://api.neutron.nodestake.top"},
{"provider": "Allnodes", "address": "https://neutron-rest.publicnode.com"}
],
"rpc": [
{"provider": "Polkachu", "address": "https://neutron-rpc.polkachu.com"},
{"provider": "NodeStake", "address": "https://rpc.neutron.nodestake.top"},
{"provider": "Allnodes", "address": "https://neutron-rpc.publicnode.com:443"}
],
"provider_chain": {
"api": ["https://api-cosmoshub-ia.cosmosia.notional.ventures"]
},
"features": ["dashboard", "blocks", "ibc", "cosmwasm", "uptime", "parameters", "state-sync", "consensus", "supply", "widget"],
"sdk_version": "0.45.1",
"coin_type": "118",
"min_tx_fee": "8000",
"assets": [{
"base": "untrn",
"symbol": "NTRN",
"exponent": "6",
"coingecko_id": "neutron",
"logo": "/logos/neutron.svg"
}],
"addr_prefix": "neutron",
"theme_color": "#161723",
"logo": "/logos/neutron.svg"
}

View File

@ -1,27 +0,0 @@
{
"chain_name": "nolus",
"coingecko": "nolus",
"api": [
{"provider": "Nolus", "address": "https://pirin-cl.nolus.network:1317"},
{"provider": "LavenderFive", "address": "https://nolus-api.lavenderfive.com:443"},
{"provider": "Allnodes", "address": "https://nolus-rest.publicnode.com"}
],
"rpc": [
{"provider": "Nolus", "address": "https://pirin-cl.nolus.network:26657"},
{"provider": "LavenderFive", "address": "https://nolus-rpc.lavenderfive.com:443"},
{"provider": "Allnodes", "address": "https://nolus-rpc.publicnode.com:443"}
],
"snapshot_provider": "",
"sdk_version": "v0.47.6",
"coin_type": "118",
"min_tx_fee": "0",
"addr_prefix": "nolus",
"logo": "/logos/nolus.svg",
"assets": [{
"base": "unls",
"symbol": "NLS",
"exponent": "6",
"coingecko_id": "nolus",
"logo": "/logos/nolus.svg"
}]
}

View File

@ -1,11 +0,0 @@
{
"chain_name": "crossfi-testnet-1",
"api": ["https://crossfi-testnet-api.forpeaky.xyz"],
"rpc": ["https://crossfi-testnet-rpc.forpeaky.xyz"],
"coingecko": "",
"snapshot_provider": "",
"sdk_version": "0.47.1",
"coin_type": "118",
"min_tx_fee": "500",
"addr_prefix": "crossfi"
}

13
components.d.ts vendored
View File

@ -1,13 +0,0 @@
// generated by unplugin-vue-components
// We suggest you to commit this file into source control
// Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core';
export {};
declare module '@vue/runtime-core' {
export interface GlobalComponents {
RouterLink: typeof import('vue-router')['RouterLink'];
RouterView: typeof import('vue-router')['RouterView'];
}
}

3
env.d.ts vendored
View File

@ -1,3 +0,0 @@
/// <reference types="vite/client" />
declare module '@personaxyz/ad-sdk';

View File

@ -1,44 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Laconic Blockchain Explorer And Web Wallet</title>
<meta name="description" content="Laconic Explorer is a block explorer/web wallet for blockchains built on Cosmos SDK, Cosmoshub, Osmosis, Juno, Evmos, Injective, Canto and 70+ blockchains listed on ping.pub" />
<link rel="stylesheet" type="text/css" href="/loader.css" />
</head>
<body>
<div id="app">
<div id="loading-bg">
<div class="loading-logo">
<img src="/logo.svg" alt="Logo" />
</div>
<div class="pre-loading">
<div class="effect-1 effects"></div>
<div class="effect-2 effects"></div>
<div class="effect-3 effects"></div>
</div>
</div>
</div>
<script type="module" src="/src/main.ts"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-SSBKVF3GMX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
// Set default consent to 'denied' as a placeholder
// Determine actual values based on your own requirements
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied'
});
gtag('config', 'G-SSBKVF3GMX');
</script>
<script type="module" src="https://cdn.jsdelivr.net/npm/ping-widget@v0.3.8/dist/ping-widget.min.js"></script>
</body>
</html>

View File

@ -1,43 +1,14 @@
# Prerequisites
1. Node and Yarn - Acquired using Node Version Manager (https://github.com/nvm-sh/nvm)
# Quick Install for Prerequisites
1. Install Node Version Manager
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
```
2. Install the latest version of NodeJS
```sh
nvm install node # "node" is an alias for the latest version
```
3. Install the latest version of NPM for Node
```sh
nvm install-latest-npm # get the latest supported npm version on the current node version
```
4. Install Yarn
```sh
npm install --global yarn
```
# Installation:
1. Running with yarn
```sh
yarn --ignore-engines && yarn serve
```
yarn && yarn serve
```
2. Building for web servers, like nginx, apache
```sh
yarn --ignore-engines && yarn build
cp -r ./dist/* <ROOT_OF_WEB_SERVER>
```
3. Running with docker
```sh
./docker.sh
docker run -d -p 8088:80 ping.pub/dashboard
yarn && yarn build
cp -r ./dist/* <ROOT_OF_WEB_SERVER>
```
# Enable LCD for Ping.pub (do this on the config for your chain)

9
jsconfig.json Normal file
View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@core/*": ["src/@core/*"],
}
}
}

View File

@ -1,79 +1,126 @@
{
"name": "ping.pub",
"version": "3.0.0",
"private": true,
"target": "",
"name": "ping-wallet",
"license": "GPL-2.0",
"version": "0.1.0",
"author": {
"name": "ping.pub"
},
"scripts": {
"dev": "vite",
"serve": "vite",
"build": "run-p type-check build-only",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --noEmit"
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"analyz": "vue-cli-service build --report"
},
"dependencies": {
"@chenfengyuan/vue-countdown": "2",
"@cosmjs/crypto": "^0.32.3",
"@cosmjs/amino": "^0.32.3",
"@cosmjs/encoding": "^0.32.3",
"@cosmjs/stargate": "^0.32.3",
"@iconify/vue": "^4.1.0",
"@intlify/unplugin-vue-i18n": "^0.8.2",
"@leapwallet/cosmos-snap-provider": "^0.1.20",
"@leapwallet/name-matcha": "^1.1.0",
"@osmonauts/lcd": "^0.8.0",
"@personaxyz/ad-sdk": "0.0.25",
"@ping-pub/chain-registry-client": "^0.0.25",
"@vitejs/plugin-vue-jsx": "^3.0.0",
"@vueuse/core": "^9.12.0",
"@vueuse/integrations": "^10.1.2",
"@vueuse/math": "^9.12.0",
"apexcharts": "^3.37.1",
"autoprefixer": "^10.4.14",
"axios": "^1.3.2",
"buffer": "^6.0.3",
"build": "^0.1.4",
"cross-fetch": "^3.1.5",
"daisyui": "^3.1.0",
"dayjs": "^1.11.7",
"lazy-load-vue3": "^1.3.0",
"long": "^5.2.1",
"md-editor-v3": "^2.8.1",
"numeral": "^2.0.6",
"osmojs": "^14.0.0-rc.0",
"pinia": "^2.0.28",
"postcss": "^8.4.23",
"qrcode": "^1.5.3",
"tailwindcss": "^3.3.1",
"theme-change": "^2.5.0",
"vite-plugin-vue-layouts": "^0.7.0",
"vue": "^3.2.45",
"vue-i18n": "^9.2.2",
"vue-prism-component": "^2.0.0",
"vue-router": "^4.1.6",
"vue3-apexcharts": "^1.4.1",
"vue3-json-viewer": "^2.2.2",
"vue3-perfect-scrollbar": "^1.6.1"
"@casl/ability": "4.1.6",
"@casl/vue": "1.1.1",
"@cosmjs/amino": "^0.28.4",
"@cosmjs/crypto": "^0.28.4",
"@cosmjs/encoding": "^0.28.4",
"@cosmjs/launchpad": "^0.27.1",
"@cosmjs/ledger-amino": "^0.28.4",
"@cosmjs/math": "^0.28.4",
"@cosmjs/proto-signing": "^0.28.4",
"@cosmjs/stargate": "0.28.4",
"@hanchon/signature-to-pubkey": "^1.0.0",
"@intlify/vue-i18n-loader": "^2.1.2",
"@ledgerhq/hw-app-eth": "^6.28.2",
"@ledgerhq/hw-transport": "6.27.2",
"@ledgerhq/hw-transport-web-ble": "^6.27.1",
"@ledgerhq/hw-transport-webusb": "^6.27.1",
"@metamask/eth-sig-util": "^4.0.1",
"@tharsis/address-converter": "^0.1.8",
"@tharsis/eip712": "0.2.4",
"@tharsis/proto": "0.1.19",
"@tharsis/transactions": "^0.2.5",
"@vue/composition-api": "^1.4.9",
"@vueuse/core": "4.0.0",
"animate.css": "4.1.1",
"apexcharts": "3.2.0",
"babel-runtime": "^6.26.0",
"bootstrap": "4.6.0",
"bootstrap-vue": "2.21.1",
"chart.js": "2.9.4",
"compare-versions": "^3.6.0",
"core-js": "^3.22.5",
"cosmjs-types": "^0.2.0",
"dayjs": "^1.10.6",
"echarts": "5.3.0",
"eth-crypto": "^2.3.0",
"ethers": "^5.6.8",
"leaflet": "1.6.0",
"ledger-cosmos-js": "2.1.8",
"long": "^5.2.0",
"node-fetch": "^2.6.5",
"node-polyfill-webpack-plugin": "^1.1.4",
"pako": "^1.0.11",
"portal-vue": "2.1.7",
"prismjs": "1.25.0",
"protobufjs-cli-dbx": "^7.0.7",
"protobufjs-dbx": "^7.0.0",
"ripemd160": "^2.0.2",
"swiper": "6.5.1",
"trading-vue-js": "^1.0.2",
"uuid": "8.3.2",
"vee-validate": "3.4.5",
"vue": "2.x",
"vue-apexcharts": "1.6.0",
"vue-autosuggest": "2.2.0",
"vue-awesome-swiper": "4.1.1",
"vue-chartjs": "3.5.0",
"vue-cleave-component": "2.1.3",
"vue-clipboard2": "0.3.1",
"vue-context": "6.0.0",
"vue-echarts": "^6.0.2",
"vue-feather-icons": "5.1.0",
"vue-flatpickr-component": "8.1.6",
"vue-flex-waterfall": "^1.0.7",
"vue-form-wizard": "0.8.4",
"vue-i18n": "8.22.2",
"vue-json-excel": "^0.3.0",
"vue-loader": "^15.9.6",
"vue-markdown": "^2.2.4",
"vue-observe-visibility": "^1.0.0",
"vue-perfect-scrollbar": "0.2.1",
"vue-prism-component": "1.1.1",
"vue-qr": "^2.5.0",
"vue-ripple-directive": "2.0.1",
"vue-router": "3.4.9",
"vue-select": "3.11.2",
"vue-slider-component": "3.2.11",
"vue-sweetalert2": "4.1.1",
"vue-toastification": "1.7.8",
"vue-tour": "1.5.0",
"vue-tree-halower": "1.8.3",
"vue2-flip-countdown": "^0.12.1",
"vue2-leaflet": "2.5.2",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
},
"devDependencies": {
"@osmonauts/telescope": "^0.88.2",
"@types/marked": "^4.0.8",
"@types/node": "^18.11.12",
"@types/numeral": "^2.0.2",
"@types/semver": "7.5.0",
"@vitejs/plugin-vue": "^4.0.0",
"@vue/tsconfig": "^0.1.3",
"npm-run-all": "^4.1.5",
"prettier": "^2.7.1",
"sass": "^1.58.0",
"shiki": "^1.0.0-beta.0",
"typescript": "~4.9.5",
"unplugin-auto-import": "^0.13.0",
"unplugin-vue-components": "^0.23.0",
"unplugin-vue-define-options": "1.1.4",
"vite": "^4.4.9",
"vite-plugin-pages": "^0.28.0",
"vue-json-viewer": "3",
"vue-tsc": "^1.0.12"
"@babel/eslint-parser": "^7.5.4",
"@protobufs/osmosis": "^0.0.8",
"@typescript-eslint/eslint-plugin": "^5.25.0",
"@typescript-eslint/parser": "^5.25.0",
"@vue/cli-plugin-babel": "~5.0.4",
"@vue/cli-plugin-eslint": "~5.0.4",
"@vue/cli-plugin-router": "~5.0.4",
"@vue/cli-plugin-vuex": "~5.0.4",
"@vue/cli-service": "~5.0.4",
"@vue/eslint-config-airbnb": "^6.0.0",
"@vue/eslint-config-standard": "6.1.0",
"@vue/eslint-config-typescript": "11.0.0",
"@vuepress/plugin-medium-zoom": "^1.7.1",
"compression-webpack-plugin": "6.1.1",
"eslint": "^8.15.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-vue": "9.0.1",
"eslint-plugin-vuejs-accessibility": "^1.1.1",
"sass": "1.32.*",
"sass-loader": "^10.1.0",
"ts-loader": "8.2.0",
"typescript": "^4.6.4",
"vue-template-compiler": "2.x",
"webpack-bundle-analyzer": "^4.5.0"
}
}

32
ping.conf Normal file
View File

@ -0,0 +1,32 @@
server {
listen 80;
listen [::]:80;
server_name _;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
gzip on;
gzip_proxied any;
gzip_static on;
gzip_min_length 1024;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
}

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

47
public/index.html Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1" />
<!-- Splash Screen/Loader Styles -->
<link rel="stylesheet" type="text/css" href="/loader.css" />
<link rel="icon" href="/favicon.ico" />
<link
href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap"
rel="stylesheet"
/>
<title>Ping Dashboard</title>
</head>
<body>
<noscript>
<strong
>We're sorry but Ping Dashboard doesn't work properly without JavaScript enabled. Please
enable it to continue.</strong
>
</noscript>
<div id="loading-bg">
<div class="loading-logo">
<img src="/logo.svg" alt="Logo" width="80"/>
</div>
<div class="loading">
<div class="effect-1 effects"></div>
<div class="effect-2 effects"></div>
<div class="effect-3 effects"></div>
</div>
</div>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-238887-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-238887-1');
</script>
</body>
</html>

View File

@ -1,70 +1,84 @@
#loading-bg {
background: var(--initial-loader-bg, #fff);
body {
margin: 0;
}
#loading-bg {
width: 100%;
height: 100%;
background: #fff;
display: block;
position: absolute;
}
.loading-logo {
position: absolute;
inset-block-start: 40%;
inset-inline-start: calc(50% - 75px);
left: calc(50% - 45px);
top: 40%;
}
.pre-loading {
.loading {
position: absolute;
left: calc(50% - 35px);
top: 50%;
width: 55px;
height: 55px;
border-radius: 50%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border: 3px solid transparent;
block-size: 55px;
border-radius: 50%;
inline-size: 55px;
inset-block-start: calc(40% + 35px);
inset-inline-start: calc(50% - 27.5px);
}
.pre-loading .effect-1,
.pre-loading .effect-2,
.pre-loading .effect-3 {
.loading .effect-1,
.loading .effect-2 {
position: absolute;
box-sizing: border-box;
width: 100%;
height: 100%;
border: 3px solid transparent;
block-size: 100%;
border-inline-start: 3px solid var(--initial-loader-color, #eee);
border-left: 3px solid rgba(121, 97, 249, 1);
border-radius: 50%;
inline-size: 100%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.pre-loading .effect-1 {
.loading .effect-1 {
animation: rotate 1s ease infinite;
}
.pre-loading .effect-2 {
animation: rotate-opacity 1s ease infinite 0.1s;
.loading .effect-2 {
animation: rotateOpacity 1s ease infinite 0.1s;
}
.loading .effect-3 {
position: absolute;
width: 100%;
height: 100%;
border: 3px solid transparent;
border-left: 3px solid rgba(121, 97, 249, 1);
-webkit-animation: rotateOpacity 1s ease infinite 0.2s;
animation: rotateOpacity 1s ease infinite 0.2s;
border-radius: 50%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.pre-loading .effect-3 {
animation: rotate-opacity 1s ease infinite 0.2s;
}
.pre-loading .effects {
.loading .effects {
transition: all 0.3s ease;
}
@keyframes rotate {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(1turn);
transform: rotate(1turn);
}
}
@keyframes rotate-opacity {
@keyframes rotateOpacity {
0% {
opacity: 0.1;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
opacity: 0.1;
}
100% {
opacity: 1;
-webkit-transform: rotate(1turn);
transform: rotate(1turn);
opacity: 1;
}
}

BIN
public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@ -1,82 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="150px" height="132px" viewBox="0 0 150 132" enable-background="new 0 0 150 132" xml:space="preserve"> <image id="image0" width="150" height="132" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACECAMAAABFwSJAAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACuFBMVEVmbP////9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP+Znf+Xm/+Wmv+UmP+T
l/+Rlv+QlP+Ok/+Mkf+LkP+Jjv+Ijf/a2//////S1P+ztv+mqf+coP/l5v/d3v+7vv+ytf+hpP/2
9v/v8P+qrf+prP+nqv+kp/+bn//g4f/u7//Hyf+2uf/9/f++wf+Gi//y8//c3f+sr/+eov/R0/+w
s//U1f/Jy//p6v/6+v/BxP/P0f/Ex/+fo//8/P+5vP/3+P/s7f/m5//09f/o6f+Fiv/f4P/j5P/X
2P+1uP/Dxf/5+f+vsv/i4//Mzv/GyP+tsP+8v//KzP/O0P+ipv/x8v+/wv/r7P+4u//Z2v/V1/+N
hj37AAAAl3RSTlMAAIXd6u7y4Qgo+nu08xhGnQTU/TFrvxDrUY7bByZzsu8VRZUD0/sraLhJjNYl
+Wyw7EPRZg5Ci9Ak+GSu50GGz/cgquj+PInLASFerOQKP4ACzvUcY6I1xFbfPXnM8WGbDOb8L4S9
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" />
href="data:image/png;base64,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" />
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/logos/DWS.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
public/logos/VDL.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#EE2F51;}
.st1{fill:#C32942;}
.st2{fill:#7D1729;}
</style>
<g>
<polygon class="st0" points="17.28,52.24 100,100 182.72,52.24 100,4.48 "/>
<polygon class="st1" points="17.28,52.24 100,100 100,195.52 17.28,147.76 "/>
<polygon class="st2" points="182.72,52.24 100,100 100,195.52 182.72,147.76 "/>
<polygon class="st0" points="44.87,131.84 72.44,115.92 72.44,147.76 "/>
<polygon class="st2" points="72.43,115.92 44.85,100 44.85,131.84 "/>
<polygon class="st0" points="155.13,131.84 127.56,115.92 127.56,147.76 "/>
<polygon class="st1" points="127.57,115.92 155.15,100 155.15,131.84 "/>
<polygon class="st2" points="72.43,52.24 100,36.32 100,68.16 "/>
<polygon class="st1" points="127.57,52.24 100,36.32 100,68.16 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/logos/agoric.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
public/logos/androma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
public/logos/aura.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

15
public/logos/axelar.svg Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="b" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" width="141.596" height="140.816" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 141.596 140.816">
<defs>
<filter id="d" data-name="drop-shadow-1" filterUnits="userSpaceOnUse">
<feOffset dx="0" dy="0"/>
<feGaussianBlur result="e" stdDeviation="1.491"/>
<feFlood flood-color="#000" flood-opacity=".13"/>
<feComposite in2="e" operator="in"/>
<feComposite in="SourceGraphic"/>
</filter>
</defs>
<g id="c" data-name="Layer 1">
<path d="M79.026,59.29L122.249,16.306,105.851,0l-35.023,34.83L35.805,0,19.408,16.306,62.63,59.29c2.264,2.251,5.231,3.377,8.198,3.377s5.934-1.125,8.198-3.377Zm62.57,45.919l-35.023-34.83,35.023-34.831-16.397-16.306-43.221,42.984c-4.527,4.503-4.527,11.803,0,16.306l43.221,42.984,16.397-16.306h0Zm-70.828,.777l35.023,34.83,16.396-16.306-43.221-42.984c-4.529-4.503-11.868-4.503-16.397,0L19.348,124.51l16.397,16.306,35.023-34.83h0Zm-11.15-27.395c2.175-2.163,3.396-5.095,3.396-8.153s-1.221-5.991-3.396-8.153L16.397,19.301,0,35.608l35.023,34.83L0,105.269l16.397,16.306,43.222-42.984h0Z" filter="url(#d)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="172px" height="172px" viewBox="0 0 172 172" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>D09EECB6-251A-416B-B21C-25832F33D878</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="BandWebsite_Desktop_UI_BrandAsset" transform="translate(-634.000000, -915.000000)">
<g id="Logo2-Copy" transform="translate(634.000000, 915.000000)">
<path d="M10,171.866248 L161.866248,171.866248 C167.389095,171.866248 171.866248,167.389095 171.866248,161.866248 L171.866248,10 C171.866248,4.4771525 167.389095,-1.01453063e-15 161.866248,0 L10,0 C4.4771525,1.01453063e-15 -6.76353751e-16,4.4771525 0,10 L0,161.866248 C-1.40394681e-14,167.389095 4.4771525,171.866248 10,171.866248 Z" id="Fill-1" fill="#4520E6"></path>
<path d="M108.602889,100.635307 C108.602889,107.35148 103.139711,112.814658 96.4235377,112.814658 L73.0720578,112.814658 L97.3402044,88.5473925 C103.622093,89.0257223 108.602889,94.2329105 108.602889,100.635307 L108.602889,100.635307 Z M69.6284355,87.4487315 L69.6284355,59.22463 L96.4235377,59.22463 C96.8812544,59.22463 97.332981,59.2498238 97.7776603,59.2996829 L69.6284355,87.4487315 Z M113.472868,71.4053911 C113.472868,65.7198732 110.676357,60.6763566 106.386716,57.5769908 L117.963707,46 L111.037879,46.0394644 L101.840204,55.2369626 C100.137773,54.665081 98.3162438,54.3550035 96.4235377,54.3550035 L64.7586328,54.3550035 L64.7586328,99.205074 L102.881783,61.0817477 C106.315363,63.2385483 108.602889,67.0599013 108.602889,71.4053911 C108.602889,78.1215645 103.139711,83.5847428 96.4235377,83.5847428 L95.4152572,83.5847428 L53,126 L59.8863636,126 L68.2020789,117.684461 L96.4235377,117.684461 C105.824348,117.684461 113.472868,110.036117 113.472868,100.635307 C113.472868,94.4353418 110.135835,89.0142706 105.174947,86.0299507 C110.141121,83.0463354 113.472868,77.608351 113.472868,71.4053911 L113.472868,71.4053911 Z" id="Fill-2" fill="#FFFFFF"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
public/logos/beezee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 1000 1000" xml:space="preserve" style="enable-background:new 0 0 1000 1000"><style type="text/css">.st0{fill:#3cc194}.st1{fill:#fff}</style><g><circle cx="500.5" cy="499.5" r="479.5" class="st0"/></g><g id="Group_5" transform="translate(-91.385 -97.772)"><g id="Group_4" transform="translate(91.385 97.772)"><g id="Group_3"><g id="Laag_1"><g id="Group_2"><g id="Group_1"><path id="Path_1" d="M724.8,589.4l-1.4,1.5c-8.6,8.7-19,15.6-30.4,20.1h-0.6c-10.5,4.1-21.7,6.2-32.9,6.2 c-16.5,0.3-32.8-3.2-47.7-10.3h-0.9l-2.2-1.1l-0.6-0.3c-13.8-7.4-25.1-18.7-32.6-32.5l-1.4-2.5l-30.5,32.7 c0,0-6.1,31.3-8.8,46.6v1l0.7,0.7l0,0l0.4,0.5c31,34,74.9,53.3,120.9,53.3l2.5,0.1l2,0.1c30.1,0,59.7-7.7,86-22.3l0.8-0.4 c14.5-8.2,27.8-18.4,39.4-30.3l1.4-1.5L724.8,589.4z" class="st1"/><path id="Path_2" d="M294.4,438v0.6l12.4,46.5l2.5-4c13.4-19.4,33.8-32.9,56.9-37.4h1c8.1-1.7,16.4-2.3,24.7-1.9 c12.5,0.8,24.6,4.4,35.6,10.4l0.9,0.5c15.1,8.5,28.5,19.8,39.4,33.3l1.8,2.3l29.2-41.1l0,0l9.3-43.4l-1-0.8l-3.3-2.9 c-19.1-17.6-41.7-30.8-66.4-38.9c-13.3-4-27.1-6.2-40.9-6.4h-0.6c-31.3,0.1-62,8-89.5,22.9l-0.9,0.5l-12.3,55.1L294.4,438z" class="st1"/><path id="Path_3" d="M567.7,556.5v-0.8c0.2-3.4-0.6-16.8-0.8-24.6l0.2-2.1c-0.4-20.7,6.3-40.9,19.2-57.1l0.4-0.6 c1.9-2.4,3.8-4.6,5.9-6.8c16.8-17.3,39.8-27.1,63.9-27.1c3.8,0,7.7,0.2,11.5,0.6h0.6c19.8,2.6,38.2,11.6,52.5,25.5l1.5,1.5 l61.7-62.2l-1.5-1.5c-31.2-30.3-72.2-48.3-115.6-51h-0.6l-11.7-0.6c-26.1-0.2-51.9,4.8-76,14.7c-15.9,6.8-30.6,16.3-43.2,28.1 l-0.7,0.6h-0.8v0.4l-0.5,0.4l0,0l-0.7,0.6c-4.4,4.3-8.5,8.9-12.2,13.8v0.4l-10,43.5l-32.9,45.4v31.7 c-0.3,35.1-20.5,66.9-52.2,82l-0.6,0.3c-11.6,5.2-24.1,7.9-36.8,8c-50,0.4-91.1-39.2-92.5-89.2l-0.4-29.6l0.1-1.9l-16.2-63.5 l13.7-58.9l-1.5-92.5l-89.4-31.6l3.4,204.6v0.9l1.2,72.8c0,2.5,0.1,5,0.3,7.5c-0.1,0.4-0.1,0.9-0.1,1.3 c3.5,50,28,96.2,67.4,127.2l0.6,0.5c32.5,25.8,72.9,39.7,114.4,39.5l6.5-0.1l1.4,0.1c41.6-0.1,81.6-15.7,112.3-43.8l0.5-0.5 c4.2-4,8.2-8.3,12.1-12.8l0.3-0.4l9.6-51.1l35.3-40.5L567.7,556.5z" class="st1"/></g></g></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

20
public/logos/bitsong.svg Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="BACKGROUND" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#FC1D31;}
</style>
<ellipse class="st0" cx="256" cy="256" rx="254.8" ry="251.9"/>
<g id="g24">
<g id="g22">
<path id="path20" class="st1" d="M255.5,4.1c-19.1,0-38.2,1.9-57.4,6.7c0,1,0,1.9,0,2.9v310.7c0,6.7-5.7,11.5-11.5,11.5h-22.9
c-4.8,0-8.6-3.8-8.6-8.6V24.2C64.3,62.4,1.2,152.3,1.2,255.5c0,139.6,113.8,252.4,255.3,252.4s254.3-112.8,254.3-251.4
S396.1,4.1,255.5,4.1z M250.7,360.7c0,5.7-4.8,10.5-10.5,10.5h-22.9c-5.7,0-10.5-4.8-10.5-10.5V201c0-5.7,4.8-10.5,10.5-10.5h22.9
c5.7,0,10.5,4.8,10.5,10.5V360.7z M302.4,376c0,5.7-4.8,10.5-10.5,10.5h-22.9c-5.7,0-10.5-4.8-10.5-10.5V185.7
c0-5.7,4.8-10.5,10.5-10.5h22.9c5.7,0,10.5,4.8,10.5,10.5V376z M354,347.3c0,5.7-4.8,10.5-10.5,10.5h-22.9
c-5.7,0-10.5-4.8-10.5-10.5v-131c0-5.7,4.8-10.5,10.5-10.5h22.9c5.7,0,10.5,4.8,10.5,10.5L354,347.3z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
public/logos/bostrom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
public/logos/canto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

91
public/logos/carbon.svg Normal file
View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 400 400" style="enable-background:new 0 0 400 400;" xml:space="preserve">
<circle style="fill:#161515;" cx="200" cy="200" r="200"/>
<circle style="fill:#063C4F;" cx="200" cy="200" r="200"/>
<radialGradient id="SVGID_SWTH_1_" cx="-105.0925" cy="597.0593" r="1" gradientTransform="matrix(-1132.6895 1.028 2.9871 3291.1685 -120471.2891 -1964605.625)" gradientUnits="userSpaceOnUse">
<stop offset="0.1042" style="stop-color:#24537E"/>
<stop offset="0.5203" style="stop-color:#4FC1C0"/>
<stop offset="1" style="stop-color:#DAFFF4"/>
</radialGradient>
<path style="fill:url(#SVGID_SWTH_1_);" d="M50.6,230.9c1.5,0,3,0.1,4.4,0.1c30.5,0,59-8.8,83-23.9c9.8,50.7,54.4,88.9,108,88.9
c43.8,0,81.6-25.6,99.3-62.7c1.4-0.7,2.7-1.5,4.1-2.3C330.1,295.2,270.5,342,200,342C129.5,342,69.9,295.2,50.6,230.9z"/>
<path style="fill:#04171E;fill-opacity:0.88;" d="M50.6,230.9c1.5,0,3,0.1,4.4,0.1c30.5,0,59-8.8,83-23.9
c9.8,50.7,54.4,88.9,108,88.9c43.8,0,81.6-25.6,99.3-62.7c1.4-0.7,2.7-1.5,4.1-2.3C330.1,295.2,270.5,342,200,342
C129.5,342,69.9,295.2,50.6,230.9z"/>
<radialGradient id="SVGID_SWTH_2_" cx="-105.0925" cy="597.0593" r="1" gradientTransform="matrix(-1132.6895 1.028 2.9871 3291.1685 -120471.2891 -1964605.625)" gradientUnits="userSpaceOnUse">
<stop offset="0.1042" style="stop-color:#24537E"/>
<stop offset="0.5203" style="stop-color:#4FC1C0"/>
<stop offset="1" style="stop-color:#DAFFF4"/>
</radialGradient>
<path style="fill:url(#SVGID_SWTH_2_);" d="M51.3,233.4c1.2,0,2.5,0,3.7,0c30.7,0,59.3-8.9,83.5-24.2C149.1,258.8,193.2,296,246,296
c43.8,0,81.6-25.6,99.3-62.7c1.4-0.7,2.7-1.5,4.1-2.3C330.1,295.2,270.5,342,200,342C130.3,342,71.4,296.4,51.3,233.4z"/>
<path style="fill:#04171E;fill-opacity:0.4;" d="M51.3,233.4c1.2,0,2.5,0,3.7,0c30.7,0,59.3-8.9,83.5-24.2
C149.1,258.8,193.2,296,246,296c43.8,0,81.6-25.6,99.3-62.7c1.4-0.7,2.7-1.5,4.1-2.3C330.1,295.2,270.5,342,200,342
C130.3,342,71.4,296.4,51.3,233.4z"/>
<linearGradient id="SVGID_SWTH_3_" gradientUnits="userSpaceOnUse" x1="190.2592" y1="43.1118" x2="138.7952" y2="310.7999" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#04171E"/>
<stop offset="1" style="stop-color:#04171E;stop-opacity:0"/>
</linearGradient>
<path style="fill:url(#SVGID_SWTH_3_);fill-opacity:0.64;" d="M273.8,292.5C251.6,310.9,223.1,322,192,322c-58.1,0-107.1-38.7-122.8-91.6
c25.1-2.3,48.5-10.5,68.8-23.3c9.8,50.7,54.4,88.9,108,88.9C255.6,296,264.9,294.8,273.8,292.5z"/>
<radialGradient id="SVGID_SWTH_4_" cx="-105.4798" cy="596.9409" r="1" gradientTransform="matrix(121.0179 -190.2545 -2756.8948 -1753.6176 1658574.375 1027024)" gradientUnits="userSpaceOnUse">
<stop offset="0.1042" style="stop-color:#3A78B1"/>
<stop offset="0.5203" style="stop-color:#4FC1C0"/>
<stop offset="1" style="stop-color:#8CF2FD"/>
</radialGradient>
<path style="fill:url(#SVGID_SWTH_4_);" d="M328,186c0,70.7-57.3,128-128,128S72,256.7,72,186S129.3,58,200,58S328,115.3,328,186z"/>
<radialGradient id="SVGID_SWTH_5_" cx="-104.8708" cy="597.9974" r="1" gradientTransform="matrix(-180.0001 129.5005 128.5812 178.7224 -95449.0078 -93222.7266)" gradientUnits="userSpaceOnUse">
<stop offset="0.2165" style="stop-color:#FFFFFF"/>
<stop offset="0.9063" style="stop-color:#FFFFFF;stop-opacity:0"/>
</radialGradient>
<path style="fill:url(#SVGID_SWTH_5_);fill-opacity:0.6;" d="M319.5,162c0,49.7-40.3,90-90,90s-90-40.3-90-90c0-49.7,40.3-90,90-90
S319.5,112.3,319.5,162z"/>
<linearGradient id="SVGID_SWTH_6_" gradientUnits="userSpaceOnUse" x1="250.7183" y1="349.5163" x2="118.7183" y2="292.0163" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="0.7324" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path style="fill:url(#SVGID_SWTH_6_);fill-opacity:0.64;" d="M208.4,72.1c-2-0.1-4-0.2-6.1-0.2c-19.1,0-37.2,4.8-52.9,13.3
c8.4-1.9,17.2-2.8,26.2-2.8c9.2,0,18.1,1,26.6,2.9L208.4,72.1z"/>
<linearGradient id="SVGID_SWTH_7_" gradientUnits="userSpaceOnUse" x1="293.3822" y1="251.5749" x2="161.3822" y2="194.0749" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="0.7324" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path style="fill:url(#SVGID_SWTH_7_);fill-opacity:0.64;" d="M215.8,89.3c47.1,16.6,80.8,61.4,80.8,114.2c0,21.7-5.7,42-15.7,59.6
c20.5-20.2,33.1-48.3,33.1-79.4C314,129,274.8,83.6,223,73.9L215.8,89.3z"/>
<linearGradient id="SVGID_SWTH_8_" gradientUnits="userSpaceOnUse" x1="598.7853" y1="466.1639" x2="58.9142" y2="16.378" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#04171E"/>
<stop offset="1" style="stop-color:#04171E;stop-opacity:0"/>
</linearGradient>
<path style="fill:url(#SVGID_SWTH_8_);fill-opacity:0.64;" d="M268.4,294.2C248.6,306.7,225.2,314,200,314c-39.9,0-75.5-18.2-99-46.8
c6.5,1.2,13.1,1.8,20,1.8c49.5,0,91.3-32.7,105.2-77.6c4.6,0.4,9.2,0.6,13.8,0.6c32,0,61.7-9.6,86.4-26.1c1,6.6,1.6,13.3,1.6,20.1
c0,4.2-0.2,8.4-0.6,12.6C320.2,237.4,298.6,271.2,268.4,294.2z"/>
<linearGradient id="SVGID_SWTH_9_" gradientUnits="userSpaceOnUse" x1="306.3591" y1="174.6578" x2="103.8583" y2="103.1578" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#0E6585"/>
<stop offset="1" style="stop-color:#04171E"/>
</linearGradient>
<path style="fill:url(#SVGID_SWTH_9_);" d="M50.6,231.1c19.3,64.2,78.9,111,149.4,111c85.8,0,155.5-69.3,156-155
c-8.6-0.1-17-0.8-25.1-2.2c-19.2,8.5-40.5,13.2-62.9,13.2c-7.8,0-15.4-0.6-22.8-1.7c-13.8,45-55.7,77.7-105.2,77.7
c-34.5,0-65.3-15.9-85.5-40.8C53.2,232.5,51.9,231.8,50.6,231.1z"/>
<radialGradient id="SVGID_SWTH_10_" cx="-105.2137" cy="596.9243" r="1" gradientTransform="matrix(144.3669 -115.0948 -1795.1154 -2251.6665 1086829 1332290)" gradientUnits="userSpaceOnUse">
<stop offset="0.1042" style="stop-color:#3A78B1"/>
<stop offset="0.5203" style="stop-color:#4FC1C0"/>
<stop offset="1" style="stop-color:#8CF2FD"/>
</radialGradient>
<path style="fill:url(#SVGID_SWTH_10_);" d="M356,187.1c-22.9,13.3-49.6,20.9-78,20.9c-5.4,0-10.8-0.3-16-0.8
c-9.9,50.6-54.5,88.8-108,88.8c-43.8,0-81.6-25.6-99.3-62.7c-1.4-0.7-2.7-1.5-4.1-2.3C69.9,295.2,129.5,342,200,342
C285.8,342,355.4,272.8,356,187.1z"/>
<linearGradient id="SVGID_SWTH_11_" gradientUnits="userSpaceOnUse" x1="342.7867" y1="210.4602" x2="264.9107" y2="92.4192" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.64"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path style="display:none;fill:url(#SVGID_SWTH_11_);fill-opacity:0.64;" d="M344.6,193.1c-9.4,4.4-19.3,8-29.6,10.5
c-1.3,11.4-3.9,22.8-7.8,34.1c-9.5,27.5-25.6,50.9-46,68.8c34.8-16.8,63.2-46.9,76.8-86.3C341.1,211.2,343.3,202.2,344.6,193.1z"/>
<linearGradient id="SVGID_SWTH_12_" gradientUnits="userSpaceOnUse" x1="262.7789" y1="193.9802" x2="237.4619" y2="209.6302" gradientTransform="matrix(1 0 0 -1 0 402)">
<stop offset="0" style="stop-color:#8CF2FD"/>
<stop offset="1" style="stop-color:#8CF2FD;stop-opacity:0"/>
</linearGradient>
<path style="opacity:0.2;fill-rule:evenodd;clip-rule:evenodd;fill:url(#SVGID_SWTH_12_);enable-background:new ;" d="M245.1,196.6
c0.2-0.2,0.5-0.3,0.7-0.1c5.2,4.1,10.8,7.8,16.9,10.9c0.3,0.1,0.4,0.5,0.2,0.7s-0.4,0.4-0.7,0.2c-6.1-3.1-11.8-6.8-17-11
C245,197.2,244.9,196.8,245.1,196.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
public/logos/ccc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
public/logos/celestia.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
public/logos/cerberus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

BIN
public/logos/cheqd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
public/logos/chihuahua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

1527
public/logos/com.png Normal file

File diff suppressed because one or more lines are too long

BIN
public/logos/comdex.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

1
public/logos/cosmos.svg Normal file
View File

@ -0,0 +1 @@
<svg fill="none" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="256" x2="256.28" y1="32" y2="480"><stop offset=".0479894" stop-color="#c01aea"/><stop offset="1" stop-color="#4251fa"/></linearGradient><g fill="url(#a)"><path clip-rule="evenodd" d="m255.867 118.278c-23.771 0-43.108-19.351-43.108-43.139 0-23.787 19.337-43.139 43.108-43.139s43.11 19.352 43.11 43.139c0 23.788-19.339 43.139-43.11 43.139zm0-62.7731c-10.819 0-19.62 8.808-19.62 19.6341 0 10.8262 8.801 19.6341 19.62 19.6341s19.622-8.8079 19.622-19.6341c0-10.8261-8.803-19.6341-19.622-19.6341z" fill-rule="evenodd"/><path d="m244.759 125.414c3.704.854 7.56 1.306 11.519 1.306 3.961 0 7.817-.452 11.521-1.307v80.694c-3.704-.855-7.561-1.307-11.521-1.307-3.959 0-7.815.452-11.519 1.306z"/><path d="m218.856 221.092-69.908-40.362c-1.112 3.635-2.649 7.201-4.629 10.631-1.98 3.429-4.299 6.542-6.891 9.322l69.883 40.347c2.306-7.527 6.302-14.321 11.545-19.938z"/><path d="m207.311 270.97-69.883 40.347c2.593 2.78 4.912 5.894 6.892 9.324 1.98 3.429 3.517 6.994 4.628 10.629l69.908-40.361c-5.243-5.618-9.24-12.412-11.545-19.939z"/><path d="m244.759 305.894v80.693c3.705-.855 7.561-1.307 11.522-1.307 3.959 0 7.815.452 11.518 1.306v-80.693c-3.704.855-7.561 1.307-11.521 1.307-3.959 0-7.815-.452-11.519-1.306z"/><path d="m293.702 290.908 69.909 40.362c1.112-3.635 2.649-7.201 4.629-10.631 1.98-3.429 4.299-6.542 6.891-9.322l-69.883-40.347c-2.306 7.526-6.303 14.321-11.546 19.938z"/><path d="m305.248 241.031 69.883-40.348c-2.592-2.78-4.912-5.894-6.892-9.324-1.98-3.429-3.517-6.994-4.628-10.629l-69.909 40.362c5.243 5.617 9.24 12.412 11.546 19.939z"/><g clip-rule="evenodd" fill-rule="evenodd"><path d="m136.802 187.496c-11.885 20.586-38.3117 27.657-58.9127 15.763-20.6001-11.894-27.6911-38.316-15.8058-58.902 11.8854-20.586 38.3145-27.658 58.9145-15.764 20.601 11.894 27.69 38.317 15.804 58.903zm-54.3626-31.386c-5.4097 9.369-2.182 21.395 7.1938 26.808 9.3757 5.413 21.4038 2.196 26.8138-7.174 5.409-9.37 2.183-21.397-7.193-26.81-9.3758-5.413-21.405-2.194-26.8146 7.176z"/><path d="m137.215 325.218c11.885 20.586 4.795 47.008-15.806 58.902-20.6 11.893-47.0276 4.823-58.9129-15.763s-4.7954-47.01 15.8047-58.903c20.601-11.894 47.0292-4.822 58.9142 15.764zm-54.363 31.387c5.4096 9.37 17.438 12.587 26.813 7.174 9.376-5.413 12.604-17.439 7.194-26.808-5.409-9.37-17.4386-12.589-26.8143-7.176-9.3758 5.413-12.6024 17.44-7.1927 26.81z"/><path d="m256.692 393.722c23.771 0 43.107 19.351 43.107 43.139 0 23.787-19.336 43.139-43.107 43.139s-43.11-19.352-43.11-43.139c0-23.788 19.339-43.139 43.11-43.139zm0 62.773c10.819 0 19.62-8.808 19.62-19.634s-8.801-19.634-19.62-19.634-19.622 8.808-19.622 19.634 8.803 19.634 19.622 19.634z"/><path d="m375.757 324.504c11.885-20.586 38.312-27.657 58.913-15.763 20.6 11.894 27.691 38.316 15.805 58.902-11.885 20.586-38.314 27.658-58.914 15.764-20.601-11.894-27.69-38.317-15.804-58.903zm54.363 31.386c5.409-9.369 2.182-21.395-7.194-26.808s-21.404-2.196-26.814 7.174c-5.409 9.37-2.183 21.397 7.193 26.81s21.405 2.194 26.815-7.176z"/><path d="m375.344 186.782c-11.885-20.586-4.795-47.008 15.806-58.902 20.6-11.893 47.028-4.823 58.913 15.763s4.795 47.01-15.805 58.903c-20.601 11.894-47.029 4.822-58.914-15.764zm54.363-31.387c-5.41-9.37-17.438-12.587-26.813-7.174-9.376 5.413-12.604 17.439-7.194 26.808 5.409 9.37 17.439 12.589 26.814 7.176 9.376-5.413 12.603-17.44 7.193-26.81z"/><path d="m255.867 235.985c-10.819 0-19.62 8.808-19.62 19.634s8.801 19.634 19.62 19.634 19.622-8.808 19.622-19.634-8.803-19.634-19.622-19.634zm0 62.773c-23.771 0-43.108-19.351-43.108-43.139 0-23.787 19.337-43.139 43.108-43.139s43.109 19.352 43.109 43.139c0 23.788-19.338 43.139-43.109 43.139z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
public/logos/craft.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/logos/cre.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

11
public/logos/dai.svg Normal file
View File

@ -0,0 +1,11 @@
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_438_970)">
<path d="M14.8247 0C23.0129 0 29.6493 6.71632 29.6493 15C29.6493 23.285 23.0129 30 14.8247 30C6.63781 30 0 23.2844 0 15C0 6.71632 6.63781 0 14.8247 0Z" fill="#F5AC37"/>
<path d="M15.3709 16.0591H21.0041C21.1241 16.0591 21.1809 16.0591 21.1895 15.8998C21.2356 15.32 21.2356 14.7367 21.1895 14.1562C21.1895 14.0435 21.1342 13.9969 21.0134 13.9969H9.80251C9.66375 13.9969 9.62639 14.0435 9.62639 14.1751V15.8438C9.62639 16.0591 9.62639 16.0591 9.84854 16.0591H15.3709ZM20.5604 12.0468C20.5764 12.0043 20.5764 11.9577 20.5604 11.9159C20.4664 11.7087 20.355 11.5109 20.2255 11.3253C20.0307 11.008 19.8013 10.7157 19.5397 10.4532C19.4163 10.2945 19.2736 10.1521 19.1135 10.0313C18.3116 9.34074 17.3583 8.85204 16.3336 8.60634C15.8166 8.48889 15.2882 8.43286 14.7585 8.43759H9.78316C9.6444 8.43759 9.62573 8.49361 9.62573 8.61579V11.9436C9.62573 12.084 9.62573 12.1218 9.80184 12.1218H20.4937C20.4937 12.1218 20.5864 12.1029 20.6051 12.0468H20.5598H20.5604ZM20.5604 18.0092C20.403 17.9916 20.2442 17.9916 20.0868 18.0092H9.81185C9.67309 18.0092 9.62639 18.0092 9.62639 18.1968V21.4504C9.62639 21.6002 9.62639 21.638 9.81185 21.638H14.5557C14.7825 21.6556 15.0094 21.6394 15.2315 21.5914C15.92 21.5415 16.5971 21.3903 17.2429 21.1412C17.4777 21.0589 17.7045 20.9515 17.9187 20.8226H17.9834C19.0954 20.2374 19.9987 19.318 20.5684 18.1894C20.5684 18.1894 20.6331 18.0477 20.5604 18.0105V18.0092ZM7.76447 23.3249V23.2688V21.0845V20.344V18.1408C7.76447 18.0186 7.76447 18.0004 7.61637 18.0004H5.60568C5.49427 18.0004 5.44824 18.0004 5.44824 17.8506V16.0692H7.59769C7.71777 16.0692 7.76447 16.0692 7.76447 15.9099V14.1475C7.76447 14.0347 7.76447 14.0071 7.61637 14.0071H5.60568C5.49427 14.0071 5.44824 14.0071 5.44824 13.8572V12.2075C5.44824 12.1042 5.44824 12.0765 5.59634 12.0765H7.58835C7.72711 12.0765 7.76447 12.0765 7.76447 11.8983V6.84525C7.76447 6.69539 7.76447 6.65759 7.94993 6.65759H14.8986C15.403 6.67784 15.904 6.73387 16.3996 6.82634C17.421 7.01737 18.4023 7.3866 19.2996 7.91378C19.8946 8.26816 20.4424 8.69611 20.93 9.18887C21.2969 9.5743 21.6278 9.99145 21.9214 10.4356C22.2129 10.8858 22.455 11.3671 22.6452 11.87C22.6685 12.0009 22.7926 12.0894 22.922 12.0671H24.5805C24.7933 12.0671 24.7933 12.0671 24.8026 12.2736V13.8113C24.8026 13.9612 24.7473 13.999 24.5985 13.999H23.3196C23.1902 13.999 23.1528 13.999 23.1622 14.1677C23.2129 14.7388 23.2129 15.3119 23.1622 15.8829C23.1622 16.0422 23.1622 16.0611 23.339 16.0611H24.802C24.8667 16.1455 24.802 16.2299 24.802 16.3149C24.8113 16.4236 24.8113 16.5336 24.802 16.6423V17.777C24.802 17.9363 24.7559 17.9835 24.6165 17.9835H22.8653C22.7432 17.9599 22.6245 18.0389 22.5965 18.1617C22.1795 19.2586 21.5124 20.2421 20.6505 21.0305C20.3356 21.3174 20.0047 21.5874 19.6592 21.8365C19.2882 22.0525 18.9273 22.2773 18.5471 22.4555C17.8473 22.7741 17.1134 23.009 16.3603 23.1581C15.6451 23.2877 14.92 23.3465 14.1921 23.3363H7.7618V23.3269L7.76447 23.3249Z" fill="#FEFEFD"/>
</g>
<defs>
<clipPath id="clip0_438_970">
<rect width="29.6493" height="30" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
public/logos/decentr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 KiB

BIN
public/logos/desmos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

BIN
public/logos/dig1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

15
public/logos/dot.svg Normal file
View File

@ -0,0 +1,15 @@
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_438_968)">
<path d="M14.8236 6.29228C17.7762 6.29228 20.1698 4.8837 20.1698 3.14614C20.1698 1.40857 17.7762 0 14.8236 0C11.8709 0 9.47729 1.40857 9.47729 3.14614C9.47729 4.8837 11.8709 6.29228 14.8236 6.29228Z" fill="#E6007A"/>
<path d="M14.8236 29.9978C17.7762 29.9978 20.1698 28.5893 20.1698 26.8517C20.1698 25.1141 17.7762 23.7056 14.8236 23.7056C11.8709 23.7056 9.47729 25.1141 9.47729 26.8517C9.47729 28.5893 11.8709 29.9978 14.8236 29.9978Z" fill="#E6007A"/>
<path d="M7.37322 10.6473C8.84955 8.06006 8.83997 5.25793 7.35182 4.38856C5.86367 3.51919 3.46049 4.9118 1.98416 7.49904C0.507835 10.0863 0.517417 12.8884 2.00556 13.7578C3.49371 14.6272 5.89689 13.2345 7.37322 10.6473Z" fill="#E6007A"/>
<path d="M27.6608 22.4986C29.1372 19.9114 29.1284 17.1097 27.6413 16.2409C26.1541 15.3722 23.7518 16.7653 22.2754 19.3525C20.7991 21.9397 20.8079 24.7414 22.295 25.6102C23.7821 26.479 26.1845 25.0859 27.6608 22.4986Z" fill="#E6007A"/>
<path d="M7.35255 25.6095C8.8407 24.7401 8.85028 21.938 7.37395 19.3507C5.89763 16.7635 3.49444 15.3709 2.0063 16.2403C0.51815 17.1096 0.508568 19.9118 1.9849 22.499C3.46122 25.0863 5.86441 26.4789 7.35255 25.6095Z" fill="#E6007A"/>
<path d="M27.6425 13.7584C29.1296 12.8897 29.1384 10.088 27.6621 7.50076C26.1857 4.91352 23.7834 3.52043 22.2962 4.38921C20.8091 5.25799 20.8003 8.05965 22.2766 10.6469C23.753 13.2341 26.1553 14.6272 27.6425 13.7584Z" fill="#E6007A"/>
</g>
<defs>
<clipPath id="clip0_438_968">
<rect width="29.6493" height="30" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
public/logos/e-money.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
public/logos/echelon.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 MiB

BIN
public/logos/empower.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

BIN
public/logos/ethereum.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
public/logos/evmos.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
public/logos/evmos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
public/logos/fetchhub.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
public/logos/genesisl1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
public/logos/haqq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

14
public/logos/haqq.svg Normal file
View File

@ -0,0 +1,14 @@
<svg
width="52"
height="52"
viewBox="0 0 52 52"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M7.494 18.6773L0 26.4139L7.73637 33.9078L7.90782 44.6775L18.677 44.506L26.4138 52L33.9073 44.2636L44.6778 44.0922L44.5065 33.3227L52 25.5864L44.2632 18.0922L44.0919 7.32266L33.323 7.49404L25.5862 0L18.0927 7.73639L7.32271 7.90778L7.494 18.6773Z"
fill="#5BABCD"
/>
</svg>

After

Width:  |  Height:  |  Size: 447 B

BIN
public/logos/injective.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="BACKGROUND" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_2_);}
.st2{fill:url(#SVGID_3_);}
.st3{fill:url(#SVGID_4_);}
.st4{fill:url(#SVGID_5_);}
.st5{fill:url(#SVGID_6_);}
.st6{fill:url(#SVGID_7_);}
</style>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="66.6866" y1="286.9367" x2="432.2715" y2="-78.6481" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st0" d="M163.9,361.7L56.4,373.8l63.1-145.7L54.9,140L212,122.1l42.7-98.2l93.6,127.2L455.8,139l-62.9,145l64.2,87.5
l-156.4,17.8l-43.4,99.6L163.9,361.7z M208.6,352.1c-4.1,2-8.5,3.7-13.1,5l-4.1,1.1l60.6,82.4l21.5-49.5l-3.9-0.5
c-21.2-2.7-40.4-14.1-52.9-31.3l-6-8.3L208.6,352.1z M187.5,277.3l48.9,67.6c9.9,13.7,26,21.9,43,21.9c2,0,3.9-0.1,5.9-0.3
l127.6-14.5L362,282.7c-2.5-3.4-5.4-6.5-8.7-9.2l-3-2.5l-36.4,82.2l-63.3-83.8L187.5,277.3z M189.6,195c-18.9,2-35.4,14.2-43,31.7
L95.3,344.9l85.1-9.6c4.2-0.5,8.3-1.5,12.3-2.9l3.7-1.4l-52.7-72.7l103.9-13.2l24.7-59L189.6,195z M270,254.7l38.5,50.9l23.5-53
l10.3-23.3c7.7-17.5,5.5-37.9-5.8-53.2L260.2,72.2l-34.3,78.8c-1.7,3.9-2.9,8-3.7,12.2l-0.7,3.8l89-9.4L270,254.7z M363.5,173.8
l1.5,3.6c8.2,19.7,8.1,42.2-0.6,61.7l-4.2,9.4l2,1.4c3.8,2.6,7.5,5.6,10.8,8.9l3,3l40.7-94L363.5,173.8z M99.2,159.4l32.4,44.2
l2.4-3.1c12.9-16.7,32.2-27.6,53-29.8l10.2-1.1l0.2-2.5c0.3-5.1,1.2-10.2,2.6-15.2l1.2-4.2L99.2,159.4z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="106.5738" y1="326.8241" x2="472.1588" y2="-38.7609" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st1" d="M233.3,490.7c-67.5-6.5-128.1-41.6-167.8-97.3l27.2-3c4.5,5.5,9.3,10.8,14.2,15.8
c29.5,29.6,66.4,49.6,106.8,57.8L233.3,490.7z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="210.8757" y1="431.1259" x2="576.4606" y2="65.541" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st2" d="M289.9,465.6c43.8-7.1,83.6-27.6,115.2-59.3c2.8-2.9,5.7-5.9,8.5-9.1l33-3.7C407.1,449,346.5,484.1,279,490.7
L289.9,465.6z"/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="173.7284" y1="393.9785" x2="539.3133" y2="28.3937" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st3" d="M453.3,331.5c9-24,13.6-49.2,13.6-75.1c0-22.9-3.6-45.4-10.7-66.8l13.2-30.5c13.9,30.6,20.9,63.3,20.9,97.3
c0,33.9-7,66.6-20.9,97.2L453.3,331.5z"/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-39.7225" y1="180.5277" x2="325.8625" y2="-185.0571" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st4" d="M42.6,353.9c-13.9-30.7-21-63.5-21-97.5c0-34.3,7.1-67.2,21.2-98l16.1,22c-9.2,24.2-13.9,49.7-13.9,76
c0,23,3.6,45.5,10.7,67.1L42.6,353.9z"/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-76.7926" y1="143.4576" x2="288.7922" y2="-222.1274" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st5" d="M66.5,117.9c39.7-54.7,99.8-89.4,166.7-95.9l-10.9,25.1c-43.8,7-83.7,27.6-115.4,59.4c-2.4,2.4-4.8,5-7.2,7.6
L66.5,117.9z"/>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="27.5023" y1="247.7525" x2="393.0872" y2="-117.8323" gradientTransform="matrix(1 0 0 1 0 158.1102)">
<stop offset="0" style="stop-color:#009DDE"/>
<stop offset="0.5" style="stop-color:#694D9F"/>
<stop offset="1" style="stop-color:#ED3554"/>
</linearGradient>
<path class="st6" d="M419.4,122.3c-4.5-5.5-9.3-10.8-14.2-15.8C375.7,77,338.9,57,298.5,48.8L278.9,22
c67.4,6.6,128,41.7,167.7,97.3L419.4,122.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
public/logos/islm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

14
public/logos/islm.svg Normal file
View File

@ -0,0 +1,14 @@
<svg
width="34"
height="34"
viewBox="0 0 34 34"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M16.9999 0C21.6942 0 25.9445 1.90288 29.0208 4.97915C32.0607 8.01904 33.9545 12.2051 33.9989 16.8328V16.8425L33.9995 16.9056L34 16.9992L33.9989 17.1558V17.1661C33.9545 21.7938 32.0607 25.9793 29.0208 29.0192C25.9445 32.0955 21.6947 33.9983 16.9999 33.9983C12.3058 33.9983 8.05556 32.0955 4.97923 29.0192C1.90291 25.9429 0 21.6927 0 16.9986C0 12.3046 1.90291 8.05488 4.97923 4.97862C8.05556 1.90235 12.3058 0 16.9999 0ZM26.7707 9.77002C27.4152 9.77002 28.0404 9.85509 28.6357 10.0129C26.8825 8.31159 24.4918 7.26389 21.8557 7.26389C19.1671 7.26389 16.7331 8.35331 14.9719 10.115C13.2102 11.8766 12.1208 14.3107 12.1208 16.9992C12.1208 19.6877 13.2102 22.1217 14.9719 23.8828C16.7337 25.6445 19.1676 26.7339 21.8557 26.7339C24.4918 26.7339 26.883 25.6862 28.6357 23.9849C28.041 24.1432 27.4158 24.2278 26.7712 24.2278C24.7753 24.2278 22.9676 23.4186 21.6599 22.1104C20.3517 20.8022 19.5426 18.9946 19.5426 16.9986C19.5426 15.0027 20.3517 13.195 21.6599 11.8869C22.9671 10.5797 24.7742 9.77002 26.7707 9.77002ZM30.1786 13.5913C29.3063 12.7195 28.1014 12.1799 26.7702 12.1799C25.439 12.1799 24.2341 12.7195 23.3618 13.5913C22.4895 14.4636 21.9503 15.6685 21.9503 16.9997C21.9503 18.3309 22.49 19.5358 23.3618 20.4081C24.2341 21.2799 25.439 21.8194 26.7702 21.8194C28.1014 21.8194 29.3063 21.2799 30.1786 20.4081C31.0504 19.5358 31.5901 18.3309 31.5901 16.9997L31.5895 16.9377C31.5735 15.6305 31.037 14.4497 30.1786 13.5913ZM21.8552 4.85454C23.3692 4.85454 24.8181 5.13157 26.1551 5.63805C23.6516 3.61858 20.4668 2.40935 16.9999 2.40935C12.9712 2.40935 9.32307 4.04269 6.68266 6.68254C4.04275 9.3224 2.40939 12.9704 2.40939 16.9992C2.40939 21.0285 4.04221 24.6759 6.68266 27.3163C9.32307 29.9562 12.9706 31.5896 16.9999 31.5896C20.4673 31.5896 23.6516 30.3803 26.1551 28.3603C24.8181 28.8668 23.3692 29.1438 21.8552 29.1438C18.5017 29.1438 15.465 27.7843 13.2679 25.5867C11.0704 23.3891 9.71085 20.353 9.71085 16.9997C9.71085 13.6464 11.0704 10.6097 13.2679 8.41214C15.465 6.21405 18.5017 4.85454 21.8552 4.85454Z"
fill="#04D484"
/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

24
public/logos/ixo.svg Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="BACKGROUND" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#00D2FF;}
</style>
<path d="M369.3,459.5H142.7c-49.6,0-90.2-40.6-90.2-90.2V142.7c0-49.6,40.6-90.2,90.2-90.2h226.5c49.6,0,90.2,40.6,90.2,90.2v226.5
C459.5,418.9,418.9,459.5,369.3,459.5z"/>
<g id="Symbols">
<g id="Header-Singed-In-Final" transform="translate(-27.000000, -14.000000)">
<g id="ixo-logo" transform="translate(27.000000, 14.000000)">
<path id="Fill-2" class="st0" d="M361.3,305.8c-12.4,0-22.5-10.1-22.5-22.5s10.1-22.5,22.5-22.5c12.4,0,22.5,10.1,22.5,22.5
S373.7,305.8,361.3,305.8 M361.3,219.6c-35.2,0-63.7,28.5-63.7,63.7c0,35.2,28.5,63.7,63.7,63.7s63.7-28.5,63.7-63.7
C425,248.1,396.5,219.6,361.3,219.6"/>
<polygon id="Fill-4" class="st0" points="111,219.6 111,347 156.5,347 156.5,219.6 156.4,219.6 "/>
<polygon id="Fill-6" class="st0" points="229.3,251.4 197.5,219.6 165.6,219.6 165.6,251.4 197.5,283.3 165.6,315.2 165.6,347
197.5,347 229.3,315.2 261.2,347 261.2,347 261.2,347 293,347 293,315.2 261.2,283.3 293,251.4 293,219.6 261.2,219.6 "/>
<path id="Fill-8" class="st0" d="M133.8,210.5c-12.6,0-22.8-10.2-22.8-22.8c0-12.6,10.2-22.8,22.8-22.8s22.8,10.2,22.8,22.8
C156.5,200.3,146.3,210.5,133.8,210.5"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
public/logos/jackal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

BIN
public/logos/juno.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
public/logos/juno.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
public/logos/kava.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
public/logos/kichain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
public/logos/kujira.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
public/logos/likecoin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
public/logos/lumen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

13
public/logos/meme.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1920 1920" style="enable-background:new 0 0 1920 1920;" xml:space="preserve">
<g>
<circle style="fill:#F5D2FF;" cx="960.06" cy="959.53" r="959.94"/>
<g>
<path d="M1160.36,344.05H585.94v340.88h501.95V826.7H789.62v340.88h340.88V869.31h298.27V612.46
C1428.77,464.22,1308.6,344.05,1160.36,344.05z"/>
<circle cx="960.06" cy="1451.52" r="213.05"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 644 B

BIN
public/logos/microtick.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

68
public/logos/nois.svg Normal file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="500"
height="500"
viewBox="0 0 500 500"
fill="none"
version="1.1"
id="svg15029"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs15033" />
<rect
style="fill:#1c1c1c;fill-opacity:1;stroke:none;stroke-width:6.21721;stroke-linecap:round"
id="rect13428"
width="500"
height="500"
x="0"
y="0" />
<path
d="M152.395 363.823L110.593 112.61C108.954 102.763 121.17 96.8571 127.87 104.257L236.781 224.535C244.958 233.565 232.944 246.597 223.28 239.18L198.088 219.847C191.51 214.799 182 219.488 182 227.78V291.213C182 301.086 194.788 304.986 200.298 296.794L220 267.5L171.232 366.597C166.941 375.316 153.99 373.409 152.395 363.823Z"
fill="white"
id="path15013" />
<path
d="M318.267 153.892L383.815 382.918C386.69 392.966 374.169 400.134 366.961 392.568L250.731 270.565C242.233 261.644 254.243 248.243 264.038 255.717L290.934 276.24C297.515 281.263 307 276.569 307 268.29V193.91C307 183.782 293.674 180.071 288.439 188.741L259 237.5L299.628 152.338C303.593 144.027 315.733 145.039 318.267 153.892Z"
fill="white"
id="path15015" />
<circle
cx="244"
cy="247"
r="12"
fill="white"
id="circle15017" />
<circle
cx="259"
cy="243"
r="2"
fill="white"
id="circle15019" />
<circle
cx="246"
cy="228"
r="4"
fill="white"
id="circle15021" />
<circle
cx="227"
cy="252"
r="2"
fill="white"
id="circle15023" />
<ellipse
cx="258.73"
cy="216.767"
rx="1"
ry="23.5"
transform="rotate(24.7044 258.73 216.767)"
fill="white"
id="ellipse15025" />
<ellipse
cx="229.46"
cy="274.44"
rx="1"
ry="23.5"
transform="rotate(26.7214 229.46 274.44)"
fill="white"
id="ellipse15027" />
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
public/logos/nym.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/logos/odin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="BACKGROUND" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0B1638;}
.st1{fill:#FFFFFF;}
.st2{opacity:0.5;}
</style>
<path class="st0" d="M369.3,459.5H142.7c-49.6,0-90.2-40.6-90.2-90.2V142.7c0-49.6,40.6-90.2,90.2-90.2h226.5
c49.6,0,90.2,40.6,90.2,90.2v226.5C459.5,418.9,418.9,459.5,369.3,459.5z"/>
<g>
<g>
<path class="st1" d="M271.7,271.7c-5.1-1.2-10.3-1.8-15.7-1.8c-5.4,0-10.7,0.6-15.7,1.8c-6,25.9-26.3,46.3-52.3,52.3
c-1.2,5.1-1.8,10.3-1.8,15.7c0,38.5,31.2,69.8,69.8,69.8c38.5,0,69.8-31.2,69.8-69.8c0-5.4-0.6-10.7-1.8-15.7
C298.1,318,277.7,297.6,271.7,271.7z"/>
<path class="st1" d="M339.7,186.2c-5.4,0-10.7,0.6-15.7,1.8c-6,25.9-26.3,46.3-52.3,52.3c-1.2,5.1-1.8,10.3-1.8,15.7
c0,5.4,0.6,10.7,1.8,15.7c25.9,6,46.3,26.3,52.3,52.3c5.1,1.2,10.3,1.8,15.7,1.8c38.5,0,69.8-31.2,69.8-69.8
S378.3,186.2,339.7,186.2z"/>
<path class="st1" d="M240.3,240.3c5.1,1.2,10.3,1.8,15.7,1.8c5.4,0,10.7-0.6,15.7-1.8c6-25.9,26.3-46.3,52.3-52.3
c1.2-5.1,1.8-10.3,1.8-15.7c0-38.5-31.2-69.8-69.8-69.8c-38.5,0-69.8,31.2-69.8,69.8c0,5.4,0.6,10.7,1.8,15.7
C213.9,194,234.3,214.4,240.3,240.3z"/>
<path class="st1" d="M240.3,271.7c1.2-5.1,1.8-10.3,1.8-15.7c0-5.4-0.6-10.7-1.8-15.7c-25.9-6-46.3-26.3-52.3-52.3
c-5.1-1.2-10.3-1.8-15.7-1.8c-38.5,0-69.8,31.2-69.8,69.8s31.2,69.8,69.8,69.8c5.4,0,10.7-0.6,15.7-1.8
C194,298.1,214.4,277.7,240.3,271.7z"/>
</g>
<g class="st2">
<path class="st1" d="M324,324c-6-25.9-26.3-46.3-52.3-52.3C277.7,297.6,298.1,318,324,324z"/>
<path class="st1" d="M240.3,240.3c-6-25.9-26.3-46.3-52.3-52.3C194,213.9,214.4,234.3,240.3,240.3z"/>
<path class="st1" d="M324,188c-25.9,6-46.3,26.3-52.3,52.3C297.6,234.3,318,213.9,324,188z"/>
<path class="st1" d="M240.3,271.7c-25.9,6-46.3,26.3-52.3,52.3C213.9,318,234.3,297.6,240.3,271.7z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

2
public/logos/okp4.svg Normal file
View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="uuid-7c4dac6b-fee9-4a31-84a7-3dedb7527f8e" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 313.61 231.9"><polygon points="114.88 231.9 0 115.49 116.11 .92 143.14 28.26 127.78 43.31 116.11 31.33 30.41 115.8 114.88 201.5 125.93 190.74 140.99 206.1 114.88 231.9" style="fill:#181c49;"/><polygon points="199.35 160.64 184.29 145.29 212.86 117.03 183.37 86.93 198.42 71.87 243.27 117.33 199.35 160.64" style="fill:#cecece;"/><path d="M197.5,230.68L82.93,114.57,170.17,28.57h0L199.04,0l114.57,116.41-116.11,114.26ZM113.34,114.88l84.47,85.7,85.39-84.47L198.73,30.41,113.34,114.88h0Z" style="fill:#181c49;"/></svg>

After

Width:  |  Height:  |  Size: 654 B

Some files were not shown because too many files have changed in this diff Show More