ViewerCanvas.vue 867 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <script setup lang="ts">
  2. import { ref } from 'vue'
  3. import { useThreeViewer } from '../composables/useThreeViewer'
  4. import { useModelStore } from '../stores/model'
  5. const container = ref<HTMLElement | null>(null)
  6. const modelStore = useModelStore()
  7. useThreeViewer(container)
  8. </script>
  9. <template>
  10. <div class="stage">
  11. <div ref="container" class="canvas-host" />
  12. <div v-if="modelStore.loadingText" class="loading-overlay">{{ modelStore.loadingText }}</div>
  13. <slot />
  14. </div>
  15. </template>
  16. <style scoped>
  17. .stage {
  18. position: relative;
  19. flex: 1;
  20. min-width: 0;
  21. min-height: 0;
  22. background: #0f1115;
  23. overflow: hidden;
  24. }
  25. .canvas-host {
  26. position: absolute;
  27. inset: 0;
  28. }
  29. .loading-overlay {
  30. position: absolute;
  31. inset: 0;
  32. display: flex;
  33. align-items: center;
  34. justify-content: center;
  35. color: #8b93a1;
  36. font-size: 14px;
  37. z-index: 5;
  38. }
  39. </style>