BitBurner settings.react.common.js
unknown
javascript
2 years ago
6.2 kB
17
Indexable
import { HostElement, ClientElementBase, html } from "react.common.js" export class SettingsDomElement extends ClientElementBase { static create(settings, labelOverride = undefined) { return HostElement.create(SettingsDomElement, { settings, labelOverride }); }; static tmpl = html` <style> :host { display: flex; flex-direction: column; padding-left: 0.5em; padding-right: 0.5em; font-family: "Lucida Console", "Lucida Sans Unicode", "Fira Mono", Consolas, "Courier New", Courier, monospace, "Times New Roman"; font-weight: 400; font-size: 1rem; --terminal-green: rgb(0, 204, 0); --terminal-light-dark-green: rgb(0, 180, 0); --terminal-dark-green: rgb(0, 120, 0); --terminal-very-dark-green: rgb(0, 60, 0); --terminal-very-very-dark-green: rgb(0, 30, 0); --terminal-light-green: rgb(0, 255, 0); } .container { display: grid; grid-template-columns: auto 1fr; overflow: hidden; } .container > .control:not(.object) { display: grid; grid-column: 1 / 3; grid-template-columns: subgrid; border-bottom: 1px solid var(--terminal-very-very-dark-green); } .container > .control:not(.object):has(> *:nth-child(1):empty) > *:nth-child(2) { grid-column: span 2; } .container > .control.button > *:nth-child(1) { grid-column: span 2 !important; } .container > .control:not(.object) > *:nth-child(1):not(:empty) { grid-column: span 1; } .container > .control:not(.object) > *:nth-child(2) { grid-column: span 1; } .valueContainer { display: flex; justify-content: center; } .valueContainer > *:nth-child(1) { flex: 1; } .valueContainer > .description { text-align: center; } input[type="range"] + .description { min-width: 4em; margin-left: 0.5em; } div.control[disabled], details.control[disabled] > .control.value { pointer-events: none; opacity: 0.5; } .control { align-items: center; } details[open].control { padding: 0.5em; } .control > label { margin-right: 0.5em; } .control > *:not(input, select):empty { display: none; } .control > span:not(:nth-child(2n)) { margin-left: 0.5em; } summary { cursor: pointer; } details.control { border: 1px solid rgb(0, 204, 0); padding: 0.5em 0.5em 0; margin: 0.25em 0; } details.control summary { font-weight: bold; margin: -0.5em -0.5em 0; padding: 0.5em; } details[open].control summary { border-bottom: 1px solid var(--terminal-dark-green); margin-bottom: 0.5em; } button, select { cursor: pointer; appearance: none; border: 2px solid var(--terminal-dark-green); background: black; color: var(--terminal-green); line-height: 1.5; padding: 0.25em; margin: 0.25em 0; } .control.select > .valueContainer { position: relative; display: flex; overflow: hidden; } .control.select > .valueContainer select { flex: 1; cursor: pointer; outline: 0; background: black; } .control.select > .valueContainer::after { content: "▼"; position: relative; right: 1.5rem; top: 0.4em; pointer-events: none; } input { margin: 0; } input[type="checkbox"] { cursor: pointer; -webkit-appearance: none; -moz-appearance: none; appearance: none; width: 1.5em; height: 1.5em; border: 2px solid var(--terminal-dark-green); border-radius: 3px; outline: none; background-color: black; color: var(--terminal-green); flex: unset !important; } input[type="checkbox"]:checked { background-color: var(--terminal-very-dark-green); } input[type="checkbox"]:checked::after { content: '✓'; position: relative; display: block; text-align: center; font-size: 1em; line-height: 1em; top: 10%; } input[type="number"] { appearance: none; border: 2px solid var(--terminal-dark-green); border-radius: 3px; outline: none; height: 2em; background-color: black; color: var(--terminal-green); padding-left: 0.5em; padding-right: 0.5em; } input[type="number"]:hover::-webkit-inner-spin-button, input[type="number"]:hover::-webkit-outer-spin-button, input[type="number"]:focus::-webkit-inner-spin-button, input[type="number"]:focus::-webkit-outer-spin-button { -webkit-appearance: inner-spin-button !important; opacity: 1 !important; width: 50px; position: absolute; top: 0; right: 0; height: calc(100% - 3px); border: 2px solid var(--terminal-green) !important; } input[type="range"] { accent-color: var(--terminal-light-dark-green); } /*input[type="range"]:focus, //input[type="range"]:active,*/ input[type="range"]:hover { accent-color: var(--terminal-green); } /*select:focus, button:focus, input:focus, */ select:hover, button:hover, input:hover { background: var(--terminal-very-dark-green) !important; border-color: var(--terminal-light-green) !important; } </style>`; constructor(host, props) { super(host, props, SettingsDomElement.tmpl); } onTemplateApplied(domContent) { super.onTemplateApplied(domContent); this._settings = this.props.settings; this._settingsDom = this._settings.createDom(this.props.labelOverride); } connectedCallback() { super.connectedCallback(); this.host.shadowRoot.appendChild(this._settingsDom); } disconnectedCallback() { this.host.shadowRoot.removeChild(this._settingsDom); super.disconnectedCallback(); } }
Editor is loading...
Leave a Comment