Fixed various scrolling issues

This commit is contained in:
thepaperpilot 2021-06-22 03:34:59 -05:00
parent 136be9282b
commit ae9578ad3a
37 changed files with 626 additions and 312 deletions

797
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,7 @@
"core-js": "^3.6.5", "core-js": "^3.6.5",
"lodash.clonedeep": "^4.5.0", "lodash.clonedeep": "^4.5.0",
"portal-vue": "^2.1.7", "portal-vue": "^2.1.7",
"simplebar-vue": "^1.6.4",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-frag": "^1.1.5", "vue-frag": "^1.1.5",
"vue-reactive-provide": "^0.3.0", "vue-reactive-provide": "^0.3.0",
@ -18,7 +19,6 @@
"vue-sortable": "github:Netbel/vue-sortable#master-fix", "vue-sortable": "github:Netbel/vue-sortable#master-fix",
"vue-textarea-autosize": "^1.1.1", "vue-textarea-autosize": "^1.1.1",
"vue-transition-expand": "^0.1.0", "vue-transition-expand": "^0.1.0",
"vue2-perfect-scrollbar": "^1.5.0",
"vuex": "^3.4.0" "vuex": "^3.4.0"
}, },
"devDependencies": { "devDependencies": {

View file

@ -1,5 +1,5 @@
<template> <template>
<div id="app" @mousemove="updateMouse" :style="theme"> <div id="app" @mousemove="updateMouse" :style="theme" :class="{ useHeader }">
<Nav /> <Nav />
<Tabs /> <Tabs />
<TPS v-if="showTPS" /> <TPS v-if="showTPS" />
@ -16,6 +16,7 @@ import TPS from './components/system/TPS';
import themes from './data/themes'; import themes from './data/themes';
import { mapState } from 'vuex'; import { mapState } from 'vuex';
import { player } from './store/proxies'; import { player } from './store/proxies';
import modInfo from './data/modInfo.json';
import './main.css'; import './main.css';
export default { export default {
@ -23,6 +24,9 @@ export default {
components: { components: {
Nav, Tabs, TPS Nav, Tabs, TPS
}, },
data() {
return { useHeader: modInfo.useHeader };
},
computed: { computed: {
...mapState([ 'showTPS' ]), ...mapState([ 'showTPS' ]),
theme() { theme() {

View file

@ -0,0 +1,11 @@
#app .simplebar-scrollbar:before {
background: #eee;
}
.simplebar-horizontal.simplebar-hover,
.simplebar-horizontal.simplebar-hover .simplebar-scrollbar {
height: 22px;
}
.simplebar-vertical.simplebar-hover {
width: 22px;
}

View file

@ -12,7 +12,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'achievement', name: 'achievement',

View file

@ -16,7 +16,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { getFiltered } from '../../util/vue'; import { getFiltered } from '../../util/vue';
import './table.css';
export default { export default {
name: 'achievements', name: 'achievements',

View file

@ -30,7 +30,6 @@
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { player } from '../../store/proxies'; import { player } from '../../store/proxies';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'buyable', name: 'buyable',

View file

@ -21,7 +21,6 @@
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { player } from '../../store/proxies'; import { player } from '../../store/proxies';
import { getFiltered } from '../../util/vue'; import { getFiltered } from '../../util/vue';
import './table.css';
export default { export default {
name: 'buyables', name: 'buyables',

View file

@ -22,7 +22,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'challenge', name: 'challenge',

View file

@ -16,7 +16,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { getFiltered } from '../../util/vue'; import { getFiltered } from '../../util/vue';
import './table.css';
export default { export default {
name: 'challenges', name: 'challenges',

View file

@ -16,7 +16,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'clickable', name: 'clickable',

View file

@ -19,7 +19,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { getFiltered } from '../../util/vue'; import { getFiltered } from '../../util/vue';
import './table.css';
export default { export default {
name: 'clickables', name: 'clickables',

View file

@ -2,7 +2,7 @@
<span> <span>
{{ resetDescription }}<b>{{ resetGain }}</b> {{ resetDescription }}<b>{{ resetGain }}</b>
{{ resource }} {{ resource }}
<br/><br/> <br v-if="nextAt"/><br v-if="nextAt"/>
{{ nextAt }} {{ nextAt }}
</span> </span>
</template> </template>

View file

@ -10,7 +10,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import './table.css';
export default { export default {
name: 'grid', name: 'grid',

View file

@ -11,7 +11,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'gridable', name: 'gridable',

View file

@ -10,7 +10,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'milestone', name: 'milestone',

View file

@ -7,7 +7,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { getFiltered } from '../../util/vue'; import { getFiltered } from '../../util/vue';
import './table.css';
export default { export default {
name: 'milestones', name: 'milestones',

View file

@ -10,7 +10,6 @@
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { resetLayer } from '../../util/layers'; import { resetLayer } from '../../util/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css'
export default { export default {
name: 'prestige-button', name: 'prestige-button',

View file

@ -33,7 +33,6 @@
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { player } from '../../store/proxies'; import { player } from '../../store/proxies';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'respec-button', name: 'respec-button',

View file

@ -17,7 +17,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { coerceComponent } from '../../util/vue'; import { coerceComponent } from '../../util/vue';
import './features.css';
export default { export default {
name: 'upgrade', name: 'upgrade',

View file

@ -16,7 +16,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { getFiltered } from '../../util/vue'; import { getFiltered } from '../../util/vue';
import './table.css';
export default { export default {
name: 'upgrades', name: 'upgrades',

View file

@ -7,7 +7,6 @@
<script> <script>
import vSelect from 'vue-select'; import vSelect from 'vue-select';
import './fields.css';
import 'vue-select/dist/vue-select.css'; import 'vue-select/dist/vue-select.css';
export default { export default {

View file

@ -8,8 +8,6 @@
</template> </template>
<script> <script>
import './fields.css';
export default { export default {
name: 'Slider', name: 'Slider',
props: { props: {

View file

@ -11,8 +11,6 @@
</template> </template>
<script> <script>
import './fields.css';
export default { export default {
name: 'TextField', name: 'TextField',
props: { props: {

View file

@ -6,8 +6,6 @@
</template> </template>
<script> <script>
import './fields.css';
// Reference: https://codepen.io/finnhvman/pen/pOeyjE // Reference: https://codepen.io/finnhvman/pen/pOeyjE
export default { export default {
name: 'Toggle', name: 'Toggle',

View file

@ -18,12 +18,12 @@ Vue.directive('frag', frag);
import TransitionExpand from 'vue-transition-expand'; import TransitionExpand from 'vue-transition-expand';
import 'vue-transition-expand/dist/vue-transition-expand.css'; import 'vue-transition-expand/dist/vue-transition-expand.css';
Vue.use(TransitionExpand); Vue.use(TransitionExpand);
import PerfectScrollbar from 'vue2-perfect-scrollbar';
import 'vue2-perfect-scrollbar/dist/vue2-perfect-scrollbar.css';
Vue.use(PerfectScrollbar);
import VueTextareaAutosize from 'vue-textarea-autosize'; import VueTextareaAutosize from 'vue-textarea-autosize';
Vue.use(VueTextareaAutosize); Vue.use(VueTextareaAutosize);
import PortalVue from 'portal-vue'; import PortalVue from 'portal-vue';
Vue.use(PortalVue); Vue.use(PortalVue);
import Sortable from 'vue-sortable'; import Sortable from 'vue-sortable';
Vue.use(Sortable); Vue.use(Sortable);
import simplebar from 'simplebar-vue';
import 'simplebar/dist/simplebar.min.css';
Vue.component('simplebar', simplebar);

View file

@ -7,8 +7,6 @@
</template> </template>
<script> <script>
import '../features/table.css';
export default { export default {
name: 'column' name: 'column'
}; };

View file

@ -56,7 +56,6 @@ export default {
if (layers[this.layer].activeSubtab?.style) { if (layers[this.layer].activeSubtab?.style) {
style.push(layers[this.layer].activeSubtab.style); style.push(layers[this.layer].activeSubtab.style);
} }
style.push({ minWidth: `${layers[this.layer].minWidth}px` });
return style; return style;
}, },
display() { display() {
@ -100,11 +99,13 @@ export default {
tab.style.flexGrow = 0; tab.style.flexGrow = 0;
tab.style.flexShrink = 0; tab.style.flexShrink = 0;
tab.style.width = "60px"; tab.style.width = "60px";
tab.style.minWidth = null;
tab.style.margin = 0; tab.style.margin = 0;
} else { } else {
tab.style.flexGrow = null; tab.style.flexGrow = null;
tab.style.flexShrink = null; tab.style.flexShrink = null;
tab.style.width = null; tab.style.width = null;
tab.style.minWidth = `${layers[this.layer].minWidth}px`;
tab.style.margin = null; tab.style.margin = null;
} }
} }
@ -120,11 +121,13 @@ export default {
tab.style.flexGrow = 0; tab.style.flexGrow = 0;
tab.style.flexShrink = 0; tab.style.flexShrink = 0;
tab.style.width = "60px"; tab.style.width = "60px";
tab.style.minWidth = null;
tab.style.margin = 0; tab.style.margin = 0;
} else { } else {
tab.style.flexGrow = null; tab.style.flexGrow = null;
tab.style.flexShrink = null; tab.style.flexShrink = null;
tab.style.width = null; tab.style.width = null;
tab.style.minWidth = `${layers[this.layer].minWidth}px`;
tab.style.margin = null; tab.style.margin = null;
} }
} else { } else {

View file

@ -9,13 +9,13 @@
default header default header
</slot> </slot>
</div> </div>
<perfect-scrollbar class="modal-body"> <simplebar class="modal-body">
<branches> <branches>
<slot name="body"> <slot name="body">
default body default body
</slot> </slot>
</branches> </branches>
</perfect-scrollbar> </simplebar>
<div class="modal-footer"> <div class="modal-footer">
<slot name="footer"> <slot name="footer">
<div class="modal-default-footer"> <div class="modal-default-footer">
@ -81,8 +81,11 @@ export default {
} }
.modal-body { .modal-body {
display: flex;
margin: 20px 0; margin: 20px 0;
width: 100%; width: 100%;
overflow-y: auto;
overflow-x: hidden;
} }
.modal-footer { .modal-footer {
@ -111,9 +114,3 @@ export default {
transform: scale(1.1); transform: scale(1.1);
} }
</style> </style>
<style>
.modal-body > .ps__rail-y {
z-index: 100;
}
</style>

View file

@ -7,8 +7,6 @@
</template> </template>
<script> <script>
import '../features/table.css';
export default { export default {
name: 'row' name: 'row'
}; };

View file

@ -33,7 +33,6 @@ import Vue from 'vue';
import { newSave, getUniqueID, loadSave, save } from '../../util/save'; import { newSave, getUniqueID, loadSave, save } from '../../util/save';
import { player } from '../../store/proxies'; import { player } from '../../store/proxies';
import modInfo from '../../data/modInfo.json'; import modInfo from '../../data/modInfo.json';
import '../fields/fields.css';
export default { export default {
name: 'SavesManager', name: 'SavesManager',

View file

@ -9,7 +9,6 @@
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import { player } from '../../store/proxies'; import { player } from '../../store/proxies';
import themes from '../../data/themes'; import themes from '../../data/themes';
import '../common/notify.css';
export default { export default {
name: 'tab-button', name: 'tab-button',

View file

@ -1,21 +1,19 @@
<template> <template>
<perfect-scrollbar class="tabs-container"> <simplebar class="tabs-container">
<div class="tabs"> <div v-for="(tab, index) in tabs" :key="index" class="tab" :ref="`tab-${index}`">
<div v-for="(tab, index) in tabs" :key="index" class="tab" :ref="`tab-${index}`"> <simplebar>
<perfect-scrollbar> <div class="inner-tab">
<div class="inner-tab"> <LayerProvider :layer="tab" :index="index" v-if="tab in components && components[tab]">
<LayerProvider :layer="tab" :index="index" v-if="tab in components && components[tab]"> <component :is="components[tab]" />
<component :is="components[tab]" /> </LayerProvider>
</LayerProvider> <layer-tab :layer="tab" :index="index" v-else-if="tab in components" :minimizable="true"
<layer-tab :layer="tab" :index="index" v-else-if="tab in components" :minimizable="true" :tab="() => $refs[`tab-${index}`] && $refs[`tab-${index}`][0]" />
:tab="() => $refs[`tab-${index}`] && $refs[`tab-${index}`][0]" /> <component :is="tab" :index="index" v-else />
<component :is="tab" :index="index" v-else /> </div>
</div> </simplebar>
</perfect-scrollbar> <div class="separator" v-if="index !== tabs.length - 1"></div>
<div class="separator" v-if="index !== tabs.length - 1"></div>
</div>
</div> </div>
</perfect-scrollbar> </simplebar>
</template> </template>
<script> <script>
@ -40,6 +38,8 @@ export default {
.tabs-container { .tabs-container {
width: 100vw; width: 100vw;
flex-grow: 1; flex-grow: 1;
overflow-x: auto;
overflow-y: hidden;
} }
.tabs { .tabs {
@ -54,11 +54,6 @@ export default {
transition-duration: 0s; transition-duration: 0s;
} }
.tab .ps {
height: 100%;
z-index: 0;
}
.inner-tab { .inner-tab {
padding: 50px 10px; padding: 50px 10px;
min-height: calc(100% - 100px); min-height: calc(100% - 100px);
@ -75,13 +70,14 @@ export default {
background: var(--separator); background: var(--separator);
z-index: 1; z-index: 1;
} }
.tab > [data-simplebar] {
height: 100%;
overflow-x: hidden;
}
</style> </style>
<style> <style>
.tabs-container > .ps__rail-x {
z-index: 120;
}
.tab hr { .tab hr {
height: 4px; height: 4px;
border: none; border: none;
@ -93,8 +89,22 @@ export default {
margin: 7px 0; margin: 7px 0;
} }
.tab > .ps > .ps__rail-y { .tabs-container > .simplebar-wrapper,
margin-right: 6px; .simplebar-content-wrapper,
z-index: 10; .simplebar-content {
min-height: 100%;
}
.tabs-container > .simplebar-wrapper > .simplebar-mask > .simplebar-offset > .simplebar-content-wrapper > .simplebar-content {
display: flex;
height: 100vh;
}
.useHeader .tabs-container > .simplebar-wrapper > .simplebar-mask > .simplebar-offset > .simplebar-content-wrapper > .simplebar-content {
height: calc(100vh - 50px);
}
.tab > [data-simplebar] > .simplebar-wrapper > .simplebar-mask > .simplebar-offset > .simplebar-content-wrapper {
position: static;
} }
</style> </style>

View file

@ -15,7 +15,6 @@
<script> <script>
import { layers } from '../../store/layers'; import { layers } from '../../store/layers';
import '../features/table.css';
export default { export default {
name: 'tree', name: 'tree',