forked from cerc-io/cosmos-explorer
initial project
This commit is contained in:
commit
98c009d4fb
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
**/.vscode
|
5
lerna.json
Normal file
5
lerna.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||
"useWorkspaces": true,
|
||||
"version": "0.0.0"
|
||||
}
|
10471
package-lock.json
generated
Normal file
10471
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
11
package.json
Normal file
11
package.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "dashboard",
|
||||
"private": true,
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^4.0.0",
|
||||
"lerna": "^6.4.1"
|
||||
}
|
||||
}
|
20
packages/dashboard/.eslintrc.cjs
Normal file
20
packages/dashboard/.eslintrc.cjs
Normal file
@ -0,0 +1,20 @@
|
||||
const { off } = require("process");
|
||||
|
||||
/* eslint-env node */
|
||||
require("@rushstack/eslint-patch/modern-module-resolution");
|
||||
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: [
|
||||
"plugin:vue/vue3-essential",
|
||||
"eslint:recommended",
|
||||
"@vue/eslint-config-typescript",
|
||||
"@vue/eslint-config-prettier",
|
||||
],
|
||||
rules: {
|
||||
"vue/multi-word-component-names": off,
|
||||
},
|
||||
parserOptions: {
|
||||
ecmaVersion: "latest",
|
||||
},
|
||||
};
|
28
packages/dashboard/.gitignore
vendored
Normal file
28
packages/dashboard/.gitignore
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
coverage
|
||||
*.local
|
||||
|
||||
/cypress/videos/
|
||||
/cypress/screenshots/
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
1
packages/dashboard/.prettierrc.json
Normal file
1
packages/dashboard/.prettierrc.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
46
packages/dashboard/README.md
Normal file
46
packages/dashboard/README.md
Normal file
@ -0,0 +1,46 @@
|
||||
# framework
|
||||
|
||||
This template should help get you started developing with Vue 3 in Vite.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
|
||||
|
||||
## Type Support for `.vue` Imports in TS
|
||||
|
||||
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
|
||||
|
||||
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
|
||||
|
||||
1. Disable the built-in TypeScript Extension
|
||||
1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette
|
||||
2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
|
||||
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
|
||||
|
||||
## Customize configuration
|
||||
|
||||
See [Vite Configuration Reference](https://vitejs.dev/config/).
|
||||
|
||||
## Project Setup
|
||||
|
||||
```sh
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compile and Hot-Reload for Development
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Type-Check, Compile and Minify for Production
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Lint with [ESLint](https://eslint.org/)
|
||||
|
||||
```sh
|
||||
npm run lint
|
||||
```
|
1
packages/dashboard/env.d.ts
vendored
Normal file
1
packages/dashboard/env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
/// <reference types="vite/client" />
|
26
packages/dashboard/index.html
Normal file
26
packages/dashboard/index.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!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>Ping Dashboard</title>
|
||||
<meta name="description" content="Ping Dashboard 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="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>
|
||||
</body>
|
||||
</html>
|
35
packages/dashboard/package.json
Normal file
35
packages/dashboard/package.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "framework",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "run-p type-check build-only",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
|
||||
},
|
||||
"dependencies": {
|
||||
"pinia": "^2.0.28",
|
||||
"vue": "^3.2.45",
|
||||
"vue-router": "^4.1.6",
|
||||
"vuetify": "^3.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rushstack/eslint-patch": "^1.1.4",
|
||||
"@types/node": "^18.11.12",
|
||||
"@vitejs/plugin-vue": "^4.0.0",
|
||||
"@vue/eslint-config-prettier": "^7.0.0",
|
||||
"@vue/eslint-config-typescript": "^11.0.0",
|
||||
"@vue/tsconfig": "^0.1.3",
|
||||
"eslint": "^8.22.0",
|
||||
"eslint-plugin-vue": "^9.3.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^2.7.1",
|
||||
"sass": "^1.58.0",
|
||||
"typescript": "~4.9.5",
|
||||
"vite": "^4.0.0",
|
||||
"vue-tsc": "^1.0.12"
|
||||
}
|
||||
}
|
BIN
packages/dashboard/public/favicon.ico
Normal file
BIN
packages/dashboard/public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
70
packages/dashboard/public/loader.css
Normal file
70
packages/dashboard/public/loader.css
Normal file
@ -0,0 +1,70 @@
|
||||
#loading-bg {
|
||||
background: var(--initial-loader-bg, #fff);
|
||||
}
|
||||
|
||||
.loading-logo {
|
||||
position: absolute;
|
||||
inset-block-start: 40%;
|
||||
inset-inline-start: calc(50% - 75px);
|
||||
}
|
||||
|
||||
.loading {
|
||||
position: absolute;
|
||||
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);
|
||||
}
|
||||
|
||||
.loading .effect-1,
|
||||
.loading .effect-2,
|
||||
.loading .effect-3 {
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
border: 3px solid transparent;
|
||||
block-size: 100%;
|
||||
border-inline-start: 3px solid var(--initial-loader-color, #eee);
|
||||
border-radius: 50%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.loading .effect-1 {
|
||||
animation: rotate 1s ease infinite;
|
||||
}
|
||||
|
||||
.loading .effect-2 {
|
||||
animation: rotate-opacity 1s ease infinite 0.1s;
|
||||
}
|
||||
|
||||
.loading .effect-3 {
|
||||
animation: rotate-opacity 1s ease infinite 0.2s;
|
||||
}
|
||||
|
||||
.loading .effects {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate-opacity {
|
||||
0% {
|
||||
opacity: 0.1;
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
158
packages/dashboard/public/logo.svg
Normal file
158
packages/dashboard/public/logo.svg
Normal file
@ -0,0 +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,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" />
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
8
packages/dashboard/src/App.vue
Normal file
8
packages/dashboard/src/App.vue
Normal file
@ -0,0 +1,8 @@
|
||||
<script setup lang="ts">
|
||||
import { RouterLink, RouterView } from 'vue-router'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<RouterView />
|
||||
</template>
|
||||
|
74
packages/dashboard/src/assets/base.css
Normal file
74
packages/dashboard/src/assets/base.css
Normal file
@ -0,0 +1,74 @@
|
||||
/* color palette from <https://github.com/vuejs/theme> */
|
||||
:root {
|
||||
--vt-c-white: #ffffff;
|
||||
--vt-c-white-soft: #f8f8f8;
|
||||
--vt-c-white-mute: #f2f2f2;
|
||||
|
||||
--vt-c-black: #181818;
|
||||
--vt-c-black-soft: #222222;
|
||||
--vt-c-black-mute: #282828;
|
||||
|
||||
--vt-c-indigo: #2c3e50;
|
||||
|
||||
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
|
||||
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
|
||||
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
|
||||
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
|
||||
|
||||
--vt-c-text-light-1: var(--vt-c-indigo);
|
||||
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
|
||||
--vt-c-text-dark-1: var(--vt-c-white);
|
||||
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
|
||||
}
|
||||
|
||||
/* semantic color variables for this project */
|
||||
:root {
|
||||
--color-background: var(--vt-c-white);
|
||||
--color-background-soft: var(--vt-c-white-soft);
|
||||
--color-background-mute: var(--vt-c-white-mute);
|
||||
|
||||
--color-border: var(--vt-c-divider-light-2);
|
||||
--color-border-hover: var(--vt-c-divider-light-1);
|
||||
|
||||
--color-heading: var(--vt-c-text-light-1);
|
||||
--color-text: var(--vt-c-text-light-1);
|
||||
|
||||
--section-gap: 160px;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--color-background: var(--vt-c-black);
|
||||
--color-background-soft: var(--vt-c-black-soft);
|
||||
--color-background-mute: var(--vt-c-black-mute);
|
||||
|
||||
--color-border: var(--vt-c-divider-dark-2);
|
||||
--color-border-hover: var(--vt-c-divider-dark-1);
|
||||
|
||||
--color-heading: var(--vt-c-text-dark-1);
|
||||
--color-text: var(--vt-c-text-dark-2);
|
||||
}
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
body {
|
||||
min-height: 100vh;
|
||||
color: var(--color-text);
|
||||
background: var(--color-background);
|
||||
transition: color 0.5s, background-color 0.5s;
|
||||
line-height: 1.6;
|
||||
font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
|
||||
Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
||||
font-size: 15px;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
35
packages/dashboard/src/assets/main.css
Normal file
35
packages/dashboard/src/assets/main.css
Normal file
@ -0,0 +1,35 @@
|
||||
@import './base.css';
|
||||
|
||||
#app {
|
||||
max-width: 1280px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
a,
|
||||
.green {
|
||||
text-decoration: none;
|
||||
color: hsla(160, 100%, 37%, 1);
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
@media (hover: hover) {
|
||||
a:hover {
|
||||
background-color: hsla(160, 100%, 37%, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
body {
|
||||
display: flex;
|
||||
place-items: center;
|
||||
}
|
||||
|
||||
#app {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
padding: 0 2rem;
|
||||
}
|
||||
}
|
40
packages/dashboard/src/components/HelloWorld.vue
Normal file
40
packages/dashboard/src/components/HelloWorld.vue
Normal file
@ -0,0 +1,40 @@
|
||||
<script setup lang="ts">
|
||||
defineProps<{
|
||||
msg: string
|
||||
}>()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="greetings">
|
||||
<h1 class="green">{{ msg }}</h1>
|
||||
<h3>
|
||||
You’ve successfully created a project with
|
||||
<a href="https://vitejs.dev/" target="_blank" rel="noopener">Vite</a> +
|
||||
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>. What's next?
|
||||
</h3>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
h1 {
|
||||
font-weight: 500;
|
||||
font-size: 2.6rem;
|
||||
top: -10px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.greetings h1,
|
||||
.greetings h3 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.greetings h1,
|
||||
.greetings h3 {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
</style>
|
86
packages/dashboard/src/components/TheWelcome.vue
Normal file
86
packages/dashboard/src/components/TheWelcome.vue
Normal file
@ -0,0 +1,86 @@
|
||||
<script setup lang="ts">
|
||||
import WelcomeItem from './WelcomeItem.vue'
|
||||
import DocumentationIcon from './icons/IconDocumentation.vue'
|
||||
import ToolingIcon from './icons/IconTooling.vue'
|
||||
import EcosystemIcon from './icons/IconEcosystem.vue'
|
||||
import CommunityIcon from './icons/IconCommunity.vue'
|
||||
import SupportIcon from './icons/IconSupport.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<WelcomeItem>
|
||||
<template #icon>
|
||||
<DocumentationIcon />
|
||||
</template>
|
||||
<template #heading>Documentation</template>
|
||||
|
||||
Vue’s
|
||||
<a href="https://vuejs.org/" target="_blank" rel="noopener">official documentation</a>
|
||||
provides you with all information you need to get started.
|
||||
</WelcomeItem>
|
||||
|
||||
<WelcomeItem>
|
||||
<template #icon>
|
||||
<ToolingIcon />
|
||||
</template>
|
||||
<template #heading>Tooling</template>
|
||||
|
||||
This project is served and bundled with
|
||||
<a href="https://vitejs.dev/guide/features.html" target="_blank" rel="noopener">Vite</a>. The
|
||||
recommended IDE setup is
|
||||
<a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a> +
|
||||
<a href="https://github.com/johnsoncodehk/volar" target="_blank" rel="noopener">Volar</a>. If
|
||||
you need to test your components and web pages, check out
|
||||
<a href="https://www.cypress.io/" target="_blank" rel="noopener">Cypress</a> and
|
||||
<a href="https://on.cypress.io/component" target="_blank">Cypress Component Testing</a>.
|
||||
|
||||
<br />
|
||||
|
||||
More instructions are available in <code>README.md</code>.
|
||||
</WelcomeItem>
|
||||
|
||||
<WelcomeItem>
|
||||
<template #icon>
|
||||
<EcosystemIcon />
|
||||
</template>
|
||||
<template #heading>Ecosystem</template>
|
||||
|
||||
Get official tools and libraries for your project:
|
||||
<a href="https://pinia.vuejs.org/" target="_blank" rel="noopener">Pinia</a>,
|
||||
<a href="https://router.vuejs.org/" target="_blank" rel="noopener">Vue Router</a>,
|
||||
<a href="https://test-utils.vuejs.org/" target="_blank" rel="noopener">Vue Test Utils</a>, and
|
||||
<a href="https://github.com/vuejs/devtools" target="_blank" rel="noopener">Vue Dev Tools</a>. If
|
||||
you need more resources, we suggest paying
|
||||
<a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">Awesome Vue</a>
|
||||
a visit.
|
||||
</WelcomeItem>
|
||||
|
||||
<WelcomeItem>
|
||||
<template #icon>
|
||||
<CommunityIcon />
|
||||
</template>
|
||||
<template #heading>Community</template>
|
||||
|
||||
Got stuck? Ask your question on
|
||||
<a href="https://chat.vuejs.org" target="_blank" rel="noopener">Vue Land</a>, our official
|
||||
Discord server, or
|
||||
<a href="https://stackoverflow.com/questions/tagged/vue.js" target="_blank" rel="noopener"
|
||||
>StackOverflow</a
|
||||
>. You should also subscribe to
|
||||
<a href="https://news.vuejs.org" target="_blank" rel="noopener">our mailing list</a> and follow
|
||||
the official
|
||||
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener">@vuejs</a>
|
||||
twitter account for latest news in the Vue world.
|
||||
</WelcomeItem>
|
||||
|
||||
<WelcomeItem>
|
||||
<template #icon>
|
||||
<SupportIcon />
|
||||
</template>
|
||||
<template #heading>Support Vue</template>
|
||||
|
||||
As an independent project, Vue relies on community backing for its sustainability. You can help
|
||||
us by
|
||||
<a href="https://vuejs.org/sponsor/" target="_blank" rel="noopener">becoming a sponsor</a>.
|
||||
</WelcomeItem>
|
||||
</template>
|
86
packages/dashboard/src/components/WelcomeItem.vue
Normal file
86
packages/dashboard/src/components/WelcomeItem.vue
Normal file
@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div class="item">
|
||||
<i>
|
||||
<slot name="icon"></slot>
|
||||
</i>
|
||||
<div class="details">
|
||||
<h3>
|
||||
<slot name="heading"></slot>
|
||||
</h3>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.item {
|
||||
margin-top: 2rem;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.details {
|
||||
flex: 1;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
i {
|
||||
display: flex;
|
||||
place-items: center;
|
||||
place-content: center;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.4rem;
|
||||
color: var(--color-heading);
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.item {
|
||||
margin-top: 0;
|
||||
padding: 0.4rem 0 1rem calc(var(--section-gap) / 2);
|
||||
}
|
||||
|
||||
i {
|
||||
top: calc(50% - 25px);
|
||||
left: -26px;
|
||||
position: absolute;
|
||||
border: 1px solid var(--color-border);
|
||||
background: var(--color-background);
|
||||
border-radius: 8px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.item:before {
|
||||
content: ' ';
|
||||
border-left: 1px solid var(--color-border);
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: calc(50% + 25px);
|
||||
height: calc(50% - 25px);
|
||||
}
|
||||
|
||||
.item:after {
|
||||
content: ' ';
|
||||
border-left: 1px solid var(--color-border);
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: calc(50% + 25px);
|
||||
height: calc(50% - 25px);
|
||||
}
|
||||
|
||||
.item:first-of-type:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.item:last-of-type:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
|
||||
<path
|
||||
d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor">
|
||||
<path
|
||||
d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor">
|
||||
<path
|
||||
d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
7
packages/dashboard/src/components/icons/IconSupport.vue
Normal file
7
packages/dashboard/src/components/icons/IconSupport.vue
Normal file
@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
|
||||
<path
|
||||
d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
19
packages/dashboard/src/components/icons/IconTooling.vue
Normal file
19
packages/dashboard/src/components/icons/IconTooling.vue
Normal file
@ -0,0 +1,19 @@
|
||||
<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
|
||||
<template>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
aria-hidden="true"
|
||||
role="img"
|
||||
class="iconify iconify--mdi"
|
||||
width="24"
|
||||
height="24"
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</svg>
|
||||
</template>
|
20
packages/dashboard/src/main.ts
Normal file
20
packages/dashboard/src/main.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import { createApp } from "vue";
|
||||
import { createPinia } from "pinia";
|
||||
|
||||
import App from "./App.vue";
|
||||
import router from "./router";
|
||||
|
||||
import { createVuetify } from "vuetify";
|
||||
import * as components from 'vuetify/components'
|
||||
import * as directives from 'vuetify/directives'
|
||||
|
||||
const app = createApp(App);
|
||||
|
||||
app.use(createPinia());
|
||||
app.use(router);
|
||||
app.use(createVuetify({
|
||||
components,
|
||||
directives,
|
||||
}));
|
||||
|
||||
app.mount("#app");
|
3
packages/dashboard/src/modules/dashboard/View.vue
Normal file
3
packages/dashboard/src/modules/dashboard/View.vue
Normal file
@ -0,0 +1,3 @@
|
||||
<template>
|
||||
<div> Hello, Dashboard</div>
|
||||
</template>
|
9
packages/dashboard/src/modules/dashboard/router.ts
Normal file
9
packages/dashboard/src/modules/dashboard/router.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import type { RouteRecordRaw } from "vue-router";
|
||||
|
||||
export const routes: RouteRecordRaw[] = [
|
||||
{
|
||||
path: '',
|
||||
alias: ['dashboard'],
|
||||
component: () => import("./View.vue"),
|
||||
},
|
||||
]
|
0
packages/dashboard/src/modules/index.ts
Normal file
0
packages/dashboard/src/modules/index.ts
Normal file
36
packages/dashboard/src/router/index.ts
Normal file
36
packages/dashboard/src/router/index.ts
Normal file
@ -0,0 +1,36 @@
|
||||
import { createRouter, createWebHistory, type RouteRecordRaw } from "vue-router";
|
||||
import HomeView from "../views/HomeView.vue";
|
||||
import DashboardLayout from "../views/DashboardLayout.vue";
|
||||
|
||||
const modules: Record<string, {routes: RouteRecordRaw[]} > = import.meta.glob('../modules/*/router.ts', {eager: true})
|
||||
let children: RouteRecordRaw[] = []
|
||||
|
||||
for(const path in modules) {
|
||||
children = children.concat(modules[path].routes)
|
||||
}
|
||||
|
||||
console.log(children)
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(import.meta.env.BASE_URL),
|
||||
routes: [
|
||||
{
|
||||
path: "/",
|
||||
name: "home",
|
||||
component: HomeView,
|
||||
},
|
||||
{
|
||||
path: "/about",
|
||||
name: "about",
|
||||
component: () => import("../views/AboutView.vue"),
|
||||
},
|
||||
// setup all modules here.
|
||||
{
|
||||
path: '/:chain',
|
||||
component: DashboardLayout,
|
||||
children,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
export default router;
|
4
packages/dashboard/src/scss/index.scss
Normal file
4
packages/dashboard/src/scss/index.scss
Normal file
@ -0,0 +1,4 @@
|
||||
@use 'vuetify' with (
|
||||
$utilities: true,
|
||||
$color-pack: true,
|
||||
);
|
12
packages/dashboard/src/stores/counter.ts
Normal file
12
packages/dashboard/src/stores/counter.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { ref, computed } from "vue";
|
||||
import { defineStore } from "pinia";
|
||||
|
||||
export const useCounterStore = defineStore("counter", () => {
|
||||
const count = ref(0);
|
||||
const doubleCount = computed(() => count.value * 2);
|
||||
function increment() {
|
||||
count.value++;
|
||||
}
|
||||
|
||||
return { count, doubleCount, increment };
|
||||
});
|
15
packages/dashboard/src/views/AboutView.vue
Normal file
15
packages/dashboard/src/views/AboutView.vue
Normal file
@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<div class="about">
|
||||
<h1>This is an about page</h1>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
@media (min-width: 1024px) {
|
||||
.about {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
</style>
|
15
packages/dashboard/src/views/DashboardLayout.vue
Normal file
15
packages/dashboard/src/views/DashboardLayout.vue
Normal file
@ -0,0 +1,15 @@
|
||||
<script lang="ts" setup>
|
||||
const theme = 'dark'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<v-app :theme="theme">
|
||||
<v-navigation-drawer>...</v-navigation-drawer>
|
||||
<v-app-bar>pp
|
||||
</v-app-bar>
|
||||
<v-main>
|
||||
<v-container><router-view/></v-container>
|
||||
</v-main>
|
||||
<v-footer> footer </v-footer>
|
||||
</v-app>
|
||||
</template>
|
9
packages/dashboard/src/views/HomeView.vue
Normal file
9
packages/dashboard/src/views/HomeView.vue
Normal file
@ -0,0 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
import TheWelcome from '../components/TheWelcome.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main>
|
||||
<TheWelcome />
|
||||
</main>
|
||||
</template>
|
8
packages/dashboard/tsconfig.config.json
Normal file
8
packages/dashboard/tsconfig.config.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.node.json",
|
||||
"include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"],
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"types": ["node"]
|
||||
}
|
||||
}
|
16
packages/dashboard/tsconfig.json
Normal file
16
packages/dashboard/tsconfig.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.web.json",
|
||||
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.config.json"
|
||||
}
|
||||
]
|
||||
}
|
14
packages/dashboard/vite.config.ts
Normal file
14
packages/dashboard/vite.config.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { fileURLToPath, URL } from "node:url";
|
||||
|
||||
import { defineConfig } from "vite";
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": fileURLToPath(new URL("./src", import.meta.url)),
|
||||
},
|
||||
},
|
||||
});
|
Loading…
Reference in New Issue
Block a user