misc improvements 2

This commit is contained in:
Yeicor
2024-02-10 16:52:02 +01:00
parent f8ee906f45
commit 21947d3cef
9 changed files with 107 additions and 30 deletions

View File

@@ -22,6 +22,7 @@
"@parcel/transformer-inline-string": "2.11.0",
"@parcel/transformer-sass": "^2.11.0",
"@parcel/transformer-vue": "2.11.0",
"@types/node": "^20.11.17",
"@types/three": "^0.160.0",
"buffer": "^5.5.0||^6.0.0",
"parcel": "^2.11.0"

View File

@@ -1,35 +1,62 @@
<script setup lang="ts">
import ModelViewer from './ModelViewer.vue'
import {ref} from "vue";
import {defineAsyncComponent, ref} from "vue";
import Sidebar from "./Sidebar.vue";
import Loading from "./Loading.vue";
import ModelViewerOverlay from "./ModelViewerOverlay.vue";
// NOTE: The ModelViewer library is big, so we split it and import it asynchronously
const ModelViewerWrapper = defineAsyncComponent({
loader: () => import('./ModelViewerWrapper.vue'),
loadingComponent: Loading,
delay: 0,
});
// Open models by default on wide screens
let modelsOpened = ref(window.innerWidth > 600);
let openSidebars = ref(window.innerWidth > 1200);
</script>
<template>
<v-layout full-height>
<v-btn icon="$menu" @click="modelsOpened = !modelsOpened" style="position: absolute; z-index: 1"/>
<v-navigation-drawer v-model="modelsOpened" permanent>
<v-toolbar>
<v-toolbar-title>Models</v-toolbar-title>
<v-toolbar-items>
<v-btn icon="$close" @click="modelsOpened = !modelsOpened"/>
</v-toolbar-items>
</v-toolbar>
<v-list density="compact" nav> <!-- TODO: Accordion -->
<v-list-item><Loading/></v-list-item>
</v-list>
</v-navigation-drawer>
<v-main >
<ModelViewer/>
<!-- The main content of the app is the model-viewer with the SVG "2D" overlay -->
<v-main id="main">
<model-viewer-wrapper/>
<model-viewer-overlay/>
</v-main>
<!-- The left collapsible sidebar has the list of models -->
<sidebar :opened-init="openSidebars" side="left">
<template #toolbar>
<v-toolbar-title>Models</v-toolbar-title>
</template>
<v-expansion-panels>
<v-expansion-panel key="model-id">
<v-expansion-panel-title>? F ? E ? V | Model Name</v-expansion-panel-title>
<v-expansion-panel-text>
Content
</v-expansion-panel-text>
</v-expansion-panel>
</v-expansion-panels>
</sidebar>
<!-- The right collapsible sidebar has the list of tools -->
<sidebar :opened-init="openSidebars" side="right" width="150">
<template #toolbar>
<v-toolbar-title>Tools</v-toolbar-title>
</template>
<v-btn>Camera</v-btn>
</sidebar>
</v-layout>
</template>
<!--suppress CssUnusedSymbol -->
<style>
html, body {
html, body, #app, #main {
height: 100%;
}
</style>
<!--suppress CssUnusedSymbol -->
<style scoped>
/* Fix bug in hidden expansion panel text next to active expansion panel */
.v-expansion-panel-title--active + .v-expansion-panel-text {
display: flex !important;
}
</style>

View File

@@ -1,5 +1,5 @@
<template>
<v-container style="height: 100%">
<v-container>
<v-row justify="center" style="height: 100%">
<v-col align-self="center">
<v-progress-circular indeterminate style="display: block; margin: 0 auto;"/>

View File

@@ -12,8 +12,6 @@ const ModelViewerWrapper = defineAsyncComponent({
</script>
<template>
<model-viewer-wrapper/>
<model-viewer-overlay/>
</template>
<style scoped>

40
src/Sidebar.vue Normal file
View File

@@ -0,0 +1,40 @@
<script setup lang="ts">
import {ref} from "vue";
const props = defineProps({
openedInit: Boolean,
side: String,
width: Number
});
let opened = ref(props.openedInit);
const openIcon = props.side === 'left' ? '$next' : '$prev';
</script>
<template>
<v-btn :icon="openIcon" @click="opened = !opened" class="open-button" :class="side"/>
<v-navigation-drawer v-model="opened" permanent :location="side" :width="props.width">
<v-toolbar density="compact">
<slot name="toolbar"></slot>
<v-toolbar-items>
<slot name="toolbar-items"></slot>
<v-btn icon="$close" @click="opened = !opened"/>
</v-toolbar-items>
</v-toolbar>
<slot/>
</v-navigation-drawer>
</template>
<style scoped>
.open-button {
position: absolute;
bottom: 0;
/*z-index: 1;*/
border-radius: 0;
}
.open-button.right {
right: 0;
}
</style>

View File

@@ -1,14 +1,10 @@
// @ts-ignore
globalThis.__VUE_OPTIONS_API__ = process.env.NODE_ENV === "development"
// @ts-ignore
globalThis.__VUE_PROD_DEVTOOLS__ = process.env.NODE_ENV === "development"
// @ts-ignore
globalThis.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = process.env.NODE_ENV === "development"
// import {createApp} from 'vue/dist/vue.esm-browser.prod.js'
// import {createApp} from 'vue/dist/vue.esm-browser.js'
import {createApp} from 'vue'
// @ts-ignore
import App from './App.vue'

View File

@@ -1,6 +1,3 @@
// @ts-ignore
// import logo from "url:../assets/fox.glb";
// These are the default values for the settings, which are overridden below
export const settings = {
// @ts-ignore
@@ -26,7 +23,7 @@ function parseSetting(name: string, value: string): any {
} else {
toExtend = prevValue;
}
toExtend.push(parseSetting(name+".0", value));
toExtend.push(parseSetting(name + ".0", value));
return toExtend;
}
switch (typeof prevValue) {

6
src/shims.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
// Avoids typescript error when importing files
declare module '*.vue'
declare module 'import.meta' {
const url: string
export default url
}

View File

@@ -949,6 +949,13 @@
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
"@types/node@^20.11.17":
version "20.11.17"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292"
integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==
dependencies:
undici-types "~5.26.4"
"@types/stats.js@*":
version "0.17.3"
resolved "https://registry.yarnpkg.com/@types/stats.js/-/stats.js-0.17.3.tgz#705446e12ce0fad618557dd88236f51148b7a935"
@@ -2025,6 +2032,11 @@ type-fest@^0.20.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
undici-types@~5.26.4:
version "5.26.5"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
update-browserslist-db@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"