forked from Qortal/qortal-ui
AlphaX-Projects
2 years ago
38 changed files with 7909 additions and 240 deletions
After Width: | Height: | Size: 13 KiB |
@ -1,48 +1,48 @@
|
||||
{ |
||||
"name": "qortal-ui", |
||||
"version": "2.1.1", |
||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet", |
||||
"keywords": [ |
||||
"QORT", |
||||
"QORTAL", |
||||
"DECENTRALIZED" |
||||
], |
||||
"main": "electron.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git+https://github.com/Qortal/qortal-ui.git" |
||||
}, |
||||
"homepage": "https://qortal.org", |
||||
"author": "QORTAL <[email protected]>", |
||||
"license": "GPL-3.0", |
||||
"scripts": { |
||||
"install_link:all": "(cd qortal-ui-core && yarn install && yarn link) && (cd qortal-ui-plugins && yarn install && yarn link) && (cd qortal-ui-crypto && yarn install && yarn link) && (yarn link qortal-ui-core && yarn link qortal-ui-plugins && yarn link qortal-ui-crypto)", |
||||
"dev": "node server.js", |
||||
"prebuild": "node -p \"'export const UI_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > qortal-ui-core/src/redux/app/version.js", |
||||
"build-dev": "node build.js", |
||||
"build": "NODE_ENV=production node build.js", |
||||
"server": "NODE_ENV=production node server.js", |
||||
"watch": "node watch.js", |
||||
"watch-inline": "node watch-inline.js", |
||||
"start-electron": "NODE_ENV=production electron .", |
||||
"build-electron": "electron-builder build --publish never", |
||||
"deploy-electron": "electron-builder build --win --publish never", |
||||
"release": "NODE_ENV=production electron-builder build --publish never", |
||||
"update-package-json": "node update-package-json.js", |
||||
"publish": "electron-builder -p always" |
||||
}, |
||||
"dependencies": { |
||||
"electron-log": "4.4.8", |
||||
"electron-updater": "5.2.1" |
||||
}, |
||||
"devDependencies": { |
||||
"electron": "21.1.1", |
||||
"electron-builder": "23.3.3", |
||||
"electron-notarize": "1.2.1", |
||||
"electron-packager": "16.0.0", |
||||
"shelljs": "0.8.5" |
||||
}, |
||||
"engines": { |
||||
"node": ">=16.15.0" |
||||
} |
||||
} |
||||
"name": "qortal-ui", |
||||
"version": "2.1.1", |
||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet", |
||||
"keywords": [ |
||||
"QORT", |
||||
"QORTAL", |
||||
"DECENTRALIZED" |
||||
], |
||||
"main": "electron.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git+https://github.com/Qortal/qortal-ui.git" |
||||
}, |
||||
"homepage": "https://qortal.org", |
||||
"author": "QORTAL <[email protected]>", |
||||
"license": "GPL-3.0", |
||||
"scripts": { |
||||
"install_link:all": "(cd qortal-ui-core && yarn install && yarn link) && (cd qortal-ui-plugins && yarn install && yarn link) && (cd qortal-ui-crypto && yarn install && yarn link) && (yarn link qortal-ui-core && yarn link qortal-ui-plugins && yarn link qortal-ui-crypto)", |
||||
"dev": "node server.js", |
||||
"prebuild": "node -p \"'export const UI_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > qortal-ui-core/src/redux/app/version.js", |
||||
"build-dev": "node build.js", |
||||
"build": "NODE_ENV=production node build.js", |
||||
"server": "NODE_ENV=production node server.js", |
||||
"watch": "node watch.js", |
||||
"watch-inline": "node watch-inline.js", |
||||
"start-electron": "NODE_ENV=production electron .", |
||||
"build-electron": "electron-builder build --publish never", |
||||
"deploy-electron": "electron-builder build --win --publish never", |
||||
"release": "NODE_ENV=production electron-builder build --publish never", |
||||
"update-package-json": "node update-package-json.js", |
||||
"publish": "electron-builder -p always" |
||||
}, |
||||
"dependencies": { |
||||
"electron-log": "4.4.8", |
||||
"electron-updater": "5.3.0" |
||||
}, |
||||
"devDependencies": { |
||||
"electron": "21.2.3", |
||||
"electron-builder": "23.6.0", |
||||
"electron-packager": "17.1.1", |
||||
"@electron/notarize": "1.2.3", |
||||
"shelljs": "^0.8.5" |
||||
}, |
||||
"engines": { |
||||
"node": ">=16.15.0" |
||||
} |
||||
} |
@ -1,6 +1,6 @@
|
||||
{ |
||||
"name": "qortal-ui-core", |
||||
"version": "2.2.3", |
||||
"version": "2.2.4", |
||||
"description": "QORTAL-UI Core", |
||||
"keywords": [ |
||||
"QORT", |
||||
@ -17,12 +17,12 @@
|
||||
"author": "QORTAL <[email protected]>", |
||||
"license": "GPL-3.0", |
||||
"dependencies": { |
||||
"@hapi/hapi": "20.2.2", |
||||
"@hapi/hapi": "21.0.0", |
||||
"@hapi/inert": "7.0.0", |
||||
"sass": "1.55.0" |
||||
"sass": "1.56.1" |
||||
}, |
||||
"devDependencies": { |
||||
"@babel/core": "7.19.3", |
||||
"@babel/core": "7.20.2", |
||||
"@material/mwc-button": "0.27.0", |
||||
"@material/mwc-checkbox": "0.27.0", |
||||
"@material/mwc-dialog": "0.27.0", |
||||
@ -53,25 +53,25 @@
|
||||
"@polymer/paper-spinner": "3.0.2", |
||||
"@polymer/paper-toast": "3.0.1", |
||||
"@polymer/paper-tooltip": "3.0.1", |
||||
"@rollup/plugin-alias": "4.0.0", |
||||
"@rollup/plugin-babel": "6.0.0", |
||||
"@rollup/plugin-commonjs": "23.0.0", |
||||
"@rollup/plugin-node-resolve": "15.0.0", |
||||
"@rollup/plugin-replace": "5.0.0", |
||||
"@vaadin/grid": "23.2.5", |
||||
"@vaadin/icons": "23.2.5", |
||||
"@vaadin/password-field": "23.2.5", |
||||
"@rollup/plugin-alias": "4.0.2", |
||||
"@rollup/plugin-babel": "6.0.2", |
||||
"@rollup/plugin-commonjs": "23.0.2", |
||||
"@rollup/plugin-node-resolve": "15.0.1", |
||||
"@rollup/plugin-replace": "5.0.1", |
||||
"@vaadin/grid": "23.2.8", |
||||
"@vaadin/icons": "23.2.8", |
||||
"@vaadin/password-field": "23.2.8", |
||||
"asmcrypto.js": "2.3.2", |
||||
"bcryptjs": "2.4.3", |
||||
"epml": "0.3.3", |
||||
"file-saver": "2.0.5", |
||||
"lit": "2.4.0", |
||||
"lit": "2.4.1", |
||||
"lit-translate": "2.0.1", |
||||
"postcss": "8.4.18", |
||||
"pwa-helpers": "0.9.1", |
||||
"random-sentence-generator": "0.0.8", |
||||
"redux": "4.2.0", |
||||
"redux-thunk": "2.4.1", |
||||
"redux-thunk": "2.4.2", |
||||
"rollup": "2.79.1", |
||||
"rollup-plugin-node-globals": "1.4.0", |
||||
"rollup-plugin-postcss": "4.0.2", |
||||
|
@ -0,0 +1,320 @@
|
||||
import { LitElement, html, css } from 'lit' |
||||
import { connect } from 'pwa-helpers' |
||||
import { store } from '../../store.js' |
||||
import { doLogout } from '../../redux/app/app-actions.js' |
||||
import { translate, translateUnsafeHTML } from 'lit-translate' |
||||
|
||||
import '@polymer/paper-dialog/paper-dialog.js' |
||||
import '@material/mwc-button' |
||||
|
||||
class UserInfoView extends connect(store)(LitElement) { |
||||
static get properties() { |
||||
return { |
||||
theme: { type: String, reflect: true }, |
||||
infoAccountName: { type: String }, |
||||
imageUrl: { type: String }, |
||||
addressResult: { type: Array }, |
||||
nameAddressResult: { type: Array }, |
||||
displayAddress: { type: String }, |
||||
displayLevel: { type: String }, |
||||
displayBalance: { type: String } |
||||
} |
||||
} |
||||
|
||||
static get styles() { |
||||
return css` |
||||
* { |
||||
--mdc-theme-primary: rgb(3, 169, 244); |
||||
--mdc-theme-secondary: var(--mdc-theme-primary); |
||||
--mdc-theme-surface: var(--white); |
||||
--mdc-dialog-content-ink-color: var(--black); |
||||
box-sizing: border-box; |
||||
} |
||||
|
||||
h2 { |
||||
margin: 10px 0; |
||||
} |
||||
|
||||
h4 { |
||||
margin: 5px 0; |
||||
} |
||||
|
||||
p { |
||||
font-size: 14px; |
||||
line-height: 21px; |
||||
} |
||||
|
||||
.card-body { |
||||
background-color: var(--white); |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
flex-direction: column; |
||||
min-height: 100vh; |
||||
margin: 0; |
||||
} |
||||
|
||||
.card-container { |
||||
background-color: var(--white); |
||||
border-radius: 5px; |
||||
color: var(--black); |
||||
padding-top: 30px; |
||||
position: relative; |
||||
width: 350px; |
||||
max-width: 100%; |
||||
text-align: center; |
||||
} |
||||
|
||||
.card-container .level { |
||||
color: #ffffff; |
||||
background-color: #03a9f4; |
||||
border-radius: 3px; |
||||
font-size: 14px; |
||||
font-weight: bold; |
||||
padding: 3px 7px; |
||||
position: absolute; |
||||
top: 30px; |
||||
left: 30px; |
||||
} |
||||
|
||||
.card-container .founder { |
||||
color: #ffffff; |
||||
background-color: #03a9f4; |
||||
border-radius: 3px; |
||||
font-size: 14px; |
||||
font-weight: bold; |
||||
padding: 3px 7px; |
||||
position: absolute; |
||||
top: 30px; |
||||
right: 30px; |
||||
} |
||||
|
||||
.card-container .round { |
||||
width: 96px; |
||||
height: 96px; |
||||
border: 1px solid #03a9f4; |
||||
border-radius: 50%; |
||||
padding: 2px; |
||||
} |
||||
|
||||
.card-container .badge { |
||||
width: 200px; |
||||
height: 135px; |
||||
border: 1px solid transparent; |
||||
border-radius: 10%; |
||||
padding: 2px; |
||||
} |
||||
|
||||
.userdata { |
||||
background-color: #1F1A36; |
||||
text-align: left; |
||||
padding: 15px; |
||||
margin-top: 30px; |
||||
} |
||||
|
||||
.userdata ul { |
||||
list-style-type: none; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
.userdata ul li { |
||||
border: 1px solid #2D2747; |
||||
border-radius: 2px; |
||||
display: inline-block; |
||||
font-size: 12px; |
||||
margin: 0 7px 7px 0; |
||||
padding: 7px; |
||||
} |
||||
|
||||
.decline { |
||||
--mdc-theme-primary: var(--mdc-theme-error) |
||||
} |
||||
|
||||
.buttons { |
||||
text-align:right; |
||||
} |
||||
|
||||
` |
||||
} |
||||
|
||||
constructor() { |
||||
super() |
||||
this.infoAccountName = '' |
||||
this.imageUrl = '' |
||||
this.addressResult = [] |
||||
this.nameAddressResult = [] |
||||
this.displayAddress = '' |
||||
this.displayLevel = '' |
||||
this.displayBalance = '' |
||||
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' |
||||
} |
||||
|
||||
render() { |
||||
return html` |
||||
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userInfoDialog" modal> |
||||
<div class="card-container"> |
||||
<span class="level">${translate("mintingpage.mchange27")} ${this.displayLevel}</span> |
||||
${this.founderBadge()} |
||||
${this.avatarImage()} |
||||
<h2>${this.infoAccountName}</h2> |
||||
<h4>${this.displayAddress}</h4> |
||||
<p>${translate("explorerpage.exp2")}: ${this.displayBalance} QORT</p> |
||||
</div> |
||||
<div class="buttons"> |
||||
<mwc-button @click=${() => this.openMoreInfoDialog()}>${translate("explorerpage.exp3")}</mwc-button> |
||||
<mwc-button class='decline' @click=${() => this.closeInfoDialog()} dialog-dismiss>${translate("general.close")}</mwc-button> |
||||
</div> |
||||
</paper-dialog> |
||||
|
||||
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userErrorDialog" modal> |
||||
<div class="card-container"> |
||||
<img class="badge" src="/img/notfound.png" /> |
||||
<h2>${translate("explorerpage.exp4")}</h2> |
||||
<h4>${translate("explorerpage.exp5")}</h4> |
||||
</div> |
||||
<div class="buttons"> |
||||
<mwc-button class='decline' @click=${() => this.closeErrorDialog()} dialog-dismiss>${translate("general.close")}</mwc-button> |
||||
</div> |
||||
</paper-dialog> |
||||
` |
||||
} |
||||
|
||||
openUserInfo(userData) { |
||||
if (userData.startsWith('Q') && userData.length == 34) { |
||||
this.getAddressUserResult(userData) |
||||
} else { |
||||
this.getNameUserResult(userData) |
||||
} |
||||
} |
||||
|
||||
async getAddressUserResult(resultAddress) { |
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const addressUrl = `${nodeUrl}/addresses/${resultAddress}` |
||||
|
||||
await fetch(addressUrl).then(res => { |
||||
if (res.status === 400) { |
||||
this.shadowRoot.getElementById('userErrorDialog').open() |
||||
} else { |
||||
this.getAllWithAddress(resultAddress) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
async getNameUserResult(resultName) { |
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const nameUrl = `${nodeUrl}/names/${resultName}` |
||||
|
||||
await fetch(nameUrl).then(res => { |
||||
if (res.status === 404) { |
||||
this.shadowRoot.getElementById('userErrorDialog').open() |
||||
} else { |
||||
this.getAddressFromName(resultName) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
async getAddressFromName(fromName) { |
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const fromNameUrl = `${nodeUrl}/names/${fromName}` |
||||
|
||||
const qortalNameInfo = await fetch(fromNameUrl).then(response => { |
||||
return response.json() |
||||
}) |
||||
|
||||
this.nameAddressResult = qortalNameInfo |
||||
const nameAddress = this.nameAddressResult.owner |
||||
this.getAllWithAddress(nameAddress) |
||||
} |
||||
|
||||
async getAllWithAddress(myAddress) { |
||||
await this.getAddressUserInfo(myAddress) |
||||
await this.getAddressUserAvatar(myAddress) |
||||
await this.getAddressUserBalance(myAddress) |
||||
this.displayAddress = this.addressResult.address |
||||
this.displayLevel = this.addressResult.level |
||||
this.shadowRoot.getElementById('userInfoDialog').open() |
||||
} |
||||
|
||||
async getAddressUserInfo(infoAddress) { |
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const infoAddressUrl = `${nodeUrl}/addresses/${infoAddress}` |
||||
|
||||
const qortalAddressInfo = await fetch(infoAddressUrl).then(response => { |
||||
return response.json() |
||||
}) |
||||
|
||||
this.addressResult = qortalAddressInfo |
||||
} |
||||
|
||||
async getAddressUserAvatar(avatarAddress) { |
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const nameUrl = `${nodeUrl}/names/address/${avatarAddress}?limit=0&reverse=true` |
||||
|
||||
await fetch(nameUrl).then(res => { |
||||
return res.json() |
||||
}).then(jsonRes => { |
||||
if(jsonRes.length) { |
||||
jsonRes.map (item => { |
||||
this.infoAccountName = item.name |
||||
this.imageName = item.name |
||||
}) |
||||
} else { |
||||
this.infoAccountName = "No registered name" |
||||
this.imageName = avatarAddress |
||||
} |
||||
}) |
||||
|
||||
const myImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` |
||||
this.imageUrl = myImageUrl |
||||
} |
||||
|
||||
async getAddressUserBalance(balanceAddress) { |
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const balanceAddressUrl = `${nodeUrl}/addresses/balance/${balanceAddress}` |
||||
|
||||
const qortalBalanceInfo = await fetch(balanceAddressUrl).then(res => { |
||||
return res.json() |
||||
}) |
||||
|
||||
this.displayBalance = qortalBalanceInfo |
||||
} |
||||
|
||||
avatarImage() { |
||||
return html`<img class="round" src="${this.imageUrl}" onerror="this.src='/img/incognito.png';" />` |
||||
} |
||||
|
||||
founderBadge() { |
||||
if (this.addressResult.flags === 1) { |
||||
return html`<span class="founder">${translate("explorerpage.exp6")}</span>` |
||||
} else { |
||||
return html`` |
||||
} |
||||
} |
||||
|
||||
openMoreInfoDialog() { |
||||
this.shadowRoot.getElementById('userErrorDialog').open() |
||||
} |
||||
|
||||
closeInfoDialog() { |
||||
this.shadowRoot.getElementById('userInfoDialog').close() |
||||
} |
||||
|
||||
closeErrorDialog() { |
||||
this.shadowRoot.getElementById('userErrorDialog').close() |
||||
} |
||||
|
||||
getApiKey() { |
||||
const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]; |
||||
let apiKey = apiNode.apiKey; |
||||
return apiKey; |
||||
} |
||||
} |
||||
|
||||
window.customElements.define('user-info-view', UserInfoView) |
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html> |
||||
<html> |
||||
|
||||
<head> |
||||
<link rel="stylesheet" href="/font/material-icons.css"> |
||||
<link rel="stylesheet" href="/font/switch-theme.css"> |
||||
<script> |
||||
const checkBack = localStorage.getItem('qortalTheme') |
||||
if (checkBack === 'dark') { |
||||
newtheme = 'dark'; |
||||
} else { |
||||
newtheme = 'light'; |
||||
} |
||||
document.querySelector('html').setAttribute('theme', newtheme); |
||||
</script> |
||||
<style> |
||||
html { |
||||
--scrollbarBG: #a1a1a1; |
||||
--thumbBG: #6a6c75; |
||||
} |
||||
|
||||
*::-webkit-scrollbar { |
||||
width: 11px; |
||||
} |
||||
|
||||
* { |
||||
scrollbar-width: thin; |
||||
scrollbar-color: var(--thumbBG) var(--scrollbarBG); |
||||
} |
||||
|
||||
*::-webkit-scrollbar-track { |
||||
background: var(--scrollbarBG); |
||||
} |
||||
|
||||
*::-webkit-scrollbar-thumb { |
||||
background-color: var(--thumbBG); |
||||
border-radius: 6px; |
||||
border: 3px solid var(--scrollbarBG); |
||||
} |
||||
|
||||
html, |
||||
body { |
||||
margin: 0; |
||||
font-family: "Roboto", sans-serif; |
||||
background: var(--plugback); |
||||
} |
||||
</style> |
||||
</head> |
||||
|
||||
<body> |
||||
<trade-bot-btc></trade-bot-btc> |
||||
<script src="trade-bot-btc.js"></script> |
||||
</body> |
||||
|
||||
</html> |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html> |
||||
<html> |
||||
|
||||
<head> |
||||
<link rel="stylesheet" href="/font/material-icons.css"> |
||||
<link rel="stylesheet" href="/font/switch-theme.css"> |
||||
<script> |
||||
const checkBack = localStorage.getItem('qortalTheme') |
||||
if (checkBack === 'dark') { |
||||
newtheme = 'dark'; |
||||
} else { |
||||
newtheme = 'light'; |
||||
} |
||||
document.querySelector('html').setAttribute('theme', newtheme); |
||||
</script> |
||||
<style> |
||||
html { |
||||
--scrollbarBG: #a1a1a1; |
||||
--thumbBG: #6a6c75; |
||||
} |
||||
|
||||
*::-webkit-scrollbar { |
||||
width: 11px; |
||||
} |
||||
|
||||
* { |
||||
scrollbar-width: thin; |
||||
scrollbar-color: var(--thumbBG) var(--scrollbarBG); |
||||
} |
||||
|
||||
*::-webkit-scrollbar-track { |
||||
background: var(--scrollbarBG); |
||||
} |
||||
|
||||
*::-webkit-scrollbar-thumb { |
||||
background-color: var(--thumbBG); |
||||
border-radius: 6px; |
||||
border: 3px solid var(--scrollbarBG); |
||||
} |
||||
|
||||
html, |
||||
body { |
||||
margin: 0; |
||||
font-family: "Roboto", sans-serif; |
||||
background: var(--plugback); |
||||
} |
||||
</style> |
||||
</head> |
||||
|
||||
<body> |
||||
<trade-bot-doge></trade-bot-doge> |
||||
<script src="trade-bot-doge.js"></script> |
||||
</body> |
||||
|
||||
</html> |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html> |
||||
<html> |
||||
|
||||
<head> |
||||
<link rel="stylesheet" href="/font/material-icons.css"> |
||||
<link rel="stylesheet" href="/font/switch-theme.css"> |
||||
<script> |
||||
const checkBack = localStorage.getItem('qortalTheme') |
||||
if (checkBack === 'dark') { |
||||
newtheme = 'dark'; |
||||
} else { |
||||
newtheme = 'light'; |
||||
} |
||||
document.querySelector('html').setAttribute('theme', newtheme); |
||||
</script> |
||||
<style> |
||||
html { |
||||
--scrollbarBG: #a1a1a1; |
||||
--thumbBG: #6a6c75; |
||||
} |
||||
|
||||
*::-webkit-scrollbar { |
||||
width: 11px; |
||||
} |
||||
|
||||
* { |
||||
scrollbar-width: thin; |
||||
scrollbar-color: var(--thumbBG) var(--scrollbarBG); |
||||
} |
||||
|
||||
*::-webkit-scrollbar-track { |
||||
background: var(--scrollbarBG); |
||||
} |
||||
|
||||
*::-webkit-scrollbar-thumb { |
||||
background-color: var(--thumbBG); |
||||
border-radius: 6px; |
||||
border: 3px solid var(--scrollbarBG); |
||||
} |
||||
|
||||
html, |
||||
body { |
||||
margin: 0; |
||||
font-family: "Roboto", sans-serif; |
||||
background: var(--plugback); |
||||
} |
||||
</style> |
||||
</head> |
||||
|
||||
<body> |
||||
<trade-bot-ltc></trade-bot-ltc> |
||||
<script src="trade-bot-ltc.js"></script> |
||||
</body> |
||||
|
||||
</html> |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue