bx-1480-constructor #68

Merged
ksenia_mikhailova merged 3 commits from bx-1480-constructor into dev 2024-09-23 14:19:31 +03:00
7 changed files with 332 additions and 142 deletions
Showing only changes of commit e81e0ad34c - Show all commits

View File

@ -1,13 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { TresCanvas } from '@tresjs/core' import { TresCanvas } from '@tresjs/core'
import { OrbitControls } from '@tresjs/cientos' import { Stats, OrbitControls } from '@tresjs/cientos'
//@ts-ignore
import { useGLTF, Stats } from '@tresjs/cientos'
import { degToRad } from 'three/src/math/MathUtils.js'; import { degToRad } from 'three/src/math/MathUtils.js';
const section_count = use_section_count() const section_count = use_section_count()
const extra_section = use_extra_section() const extra_section = use_extra_section()
const max_size = use_max_size()
const controlsState = reactive({ const controlsState = reactive({
distance: section_count.value, distance: section_count.value,
@ -16,39 +13,16 @@ const controlsState = reactive({
position: { x: 0, y: 0, z: 0 }, position: { x: 0, y: 0, z: 0 },
enablePan: false, enablePan: false,
enableZoom: false, enableZoom: false,
minPolarAngle: degToRad(45), minPolarAngle: degToRad(60),
maxPolarAngle: degToRad(45), maxPolarAngle: degToRad(60),
}) })
const cameraStat = reactive({ const cameraStat = reactive({
position: [-5, 7, 5],
aspect: 1920 / 600, aspect: 1920 / 600,
// fov: 40, // fov: 40,
}) })
const pointLight = ref()
const loadAll = async () => {
const { scene: light } = await useGLTF('/models_light/zabor_so_svetom.glb')
pointLight.value = light.children[2].clone()
pointLight.value.intensity = pointLight.value.intensity * 0.05
pointLight.value.shadow.bias = -0.002
const j = 4
pointLight.value.shadow.mapSize.x = 512 * j
pointLight.value.shadow.mapSize.y = 512 * j
const k = 1
// pointLight.value.position.x = pointLight.value.position.x * k
// pointLight.value.position.y = pointLight.value.position.y * k
// pointLight.value.position.z = pointLight.value.position.z * k
pointLight.value.position.x = pointLight.value.position.x * k
pointLight.value.position.y = pointLight.value.position.z * k
pointLight.value.position.z = pointLight.value.position.z * k
}
const camera = ref("camera") const camera = ref("camera")
onMounted(() => {
cameraStat.aspect = window.innerWidth / (window.innerHeight * 0.5)
loadAll()
})
watch([section_count, extra_section], () => { watch([section_count, extra_section], () => {
let v = (section_count.value + ~~(!!extra_section.value)); let v = (section_count.value + ~~(!!extra_section.value));
if (v <= 10) v = 10 if (v <= 10) v = 10
@ -75,16 +49,7 @@ watch([section_count, extra_section], () => {
<ModelParametric /> <ModelParametric />
</Suspense> </Suspense>
</TresGroup> </TresGroup>
<TresMesh receive-shadow name="ground">
<TresCircleGeometry :args="[50, 32]" :rotate-x="-Math.PI * 0.5" />
<TresShadowMaterial :opacity="0.2" />
</TresMesh>
<template v-if="pointLight">
<TresPointLight v-bind="pointLight.clone()" cast-shadow />
<TresPointLight v-bind="pointLight.clone()" :position-x="pointLight.position.x * -1"
:position-z="pointLight.position.z * -1" cast-shadow />
</template>
<TresAmbientLight intensity="10" /> <TresAmbientLight intensity="10" />
</TresCanvas> </TresCanvas>
</ClientOnly> </ClientOnly>

View File

@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { Box3, Vector3 } from 'three'; import { useLoop, useTresContext } from '@tresjs/core';
import { Box3, Object3D, Vector3 } from 'three';
import { degToRad } from 'three/src/math/MathUtils.js'; import { degToRad } from 'three/src/math/MathUtils.js';
const props = defineProps(['number', 'count', 'models']) const props = defineProps(['number', 'count', 'models'])
@ -16,15 +17,34 @@ const rotate = () => {
} }
} }
const { seekByName } = useSeek() const { seekByName } = useSeek()
const { scene } = useTresContext() const { scene, camera } = useTresContext()
const section_count = use_section_count() const section_count = use_section_count()
const extra_section = use_extra_section() const extra_section = use_extra_section()
const fence_section = use_fence_section() const fence_section = use_fence_section()
const max_size = use_max_size() const max_size = use_max_size()
const lamelle_count = use_lamelles_count()
const lamelle_height = use_lamelle_height()
const total = ref((section_count.value + ~~(!!extra_section.value))) const total = ref((section_count.value + ~~(!!extra_section.value)))
const position = ref(new Vector3()) const position = ref(new Vector3())
const clickable_positions = reactive({
'top': [position.value.x, (lamelle_count.value + 1) * lamelle_height.value, 0],
'lam': [position.value.x, position.value.y * 0.5, 0]
})
const clickable_pointers = ref<any[]>([])
const clickable_refs = ref<any>([])
Object.entries(clickable_positions).map(el => {
const p = props.models.pointer.clone()
p.position.set(...el[1])
p.updateMatrixWorld()
p.name = `clickable_${props.number}_${el[0]}`
clickable_pointers.value.push(p)
clickable_refs.value.push(ref(p.name))
})
const count_pos = () => { const count_pos = () => {
total.value = (section_count.value + ~~(!!extra_section.value)) total.value = (section_count.value + ~~(!!extra_section.value))
@ -37,7 +57,7 @@ const count_pos = () => {
new Box3().expandByObject(line).getSize(line_size) new Box3().expandByObject(line).getSize(line_size)
line.getWorldPosition(line_pos) line.getWorldPosition(line_pos)
} }
const line1 = seekByName(scene.value, `line_1`); const line1 = seekByName(scene.value, `line_1_inner`);
const line1_size = new Vector3() const line1_size = new Vector3()
const line1_pos = new Vector3() const line1_pos = new Vector3()
if (line1) { if (line1) {
@ -60,22 +80,67 @@ const count_pos = () => {
position.value.x = line1_size.x - k position.value.x = line1_size.x - k
break; break;
} }
line?.updateMatrixWorld()
clickable_positions.top = [position.value.x, (lamelle_count.value + 1) * lamelle_height.value, 0];
clickable_positions.lam = [position.value.x, position.value.y * 0.5, 0];
} }
watch(clickable_positions, () => {
clickable_refs.value.map((el: Ref<Object3D[]>) => {
const name = el.value[0].name.replace(`clickable_${props.number}_`, '')
if (name in clickable_positions) {
const p = clickable_positions[name as keyof typeof clickable_positions];
console.log(props.number, p, el.value[0].name)
el.value[0].position.set(p[0], p[1], p[2])
el.value[0].children[0].position.set(p[0], p[1], p[2])
el.value[0].updateMatrixWorld()
}
})
}, { deep: true })
onMounted(() => { onMounted(() => {
count_pos() count_pos()
}) })
watch(() => [props.count, fence_section.value, section_count.value, extra_section.value], count_pos) watch(() => [props.count, fence_section.value, section_count.value, extra_section.value, lamelle_count.value],
count_pos,
{ flush: 'post' }
)
const { onBeforeRender } = useLoop()
onBeforeRender(() => {
clickable_refs.value.map((el: any) => {
if (el.value[0] && el.value[0].children) {
el.value[0].children[0].lookAt(camera.value?.position);
el.value[0].children[0].rotateX(degToRad(90));
el.value[0].children[0].rotateZ(degToRad(15));
const dis_to_cam = camera.value?.position.distanceTo(el.value[0].position);
if (dis_to_cam) {
const scaling = (0.66 * dis_to_cam) / 100
el.value[0].children[0].scale.set(scaling, scaling, scaling);
el.value[0].updateMatrixWorld()
}
}
})
})
</script> </script>
<template> <template>
<TresGroup :name="`line_${props.number}`" :rotate-y="rotate()" :position-x="position.x" :position-y="position.y" <TresGroup :name="`line_${props.number}`" :rotate-y="rotate()" :position-x="position.x" :position-y="position.y"
:position-z="position.z"> :position-z="position.z">
<template v-for="i in props.count"> <TresGroup :name="`line_${props.number}_inner`">
<template v-if="(i + (props.number - 1) * props.count) <= total" <template v-for="i in props.count">
:key="(i + (props.number - 1) * props.count)"> <template v-if="(i + (props.number - 1) * props.count) <= total"
<ModelFence :index="i" :models="props.models" :key="(i + (props.number - 1) * props.count)">
:last_element="(i + (props.number - 1) * props.count) == total" <ModelFence :index="i" :models="props.models"
:first_element="i == 1 && props.count == 1" /> :last_element="(i + (props.number - 1) * props.count) == total"
:first_element="i == 1 && props.number == 1" />
</template>
</template> </template>
</template> </TresGroup>
<TresGroup name="pointer">
<template v-for="(p, i) in clickable_pointers">
<TresObject3D v-bind="p.clone()" :ref="clickable_refs[i]" />
</template>
</TresGroup>
</TresGroup> </TresGroup>
</template> </template>

View File

@ -29,6 +29,7 @@ const { scene: model_fence_bottom } = await useGLTF('/fence_one/bottom.glb')
const { scene: model_fence_inner } = await useGLTF('/fence_one/inner.glb') const { scene: model_fence_inner } = await useGLTF('/fence_one/inner.glb')
const { scene: fastening_model } = await useGLTF('/models_one/krepleniye_planok (1).glb', { draco: true }); const { scene: fastening_model } = await useGLTF('/models_one/krepleniye_planok (1).glb', { draco: true });
const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { draco: true }); const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { draco: true });
const { scene: point_model } = await useGLTF('/models_one/pointer.glb');
[model_fence_top, model_fence_bottom].map((sc: Object3D) => [model_fence_top, model_fence_bottom].map((sc: Object3D) =>
sc.traverse((child: Object3D) => { sc.traverse((child: Object3D) => {
@ -37,6 +38,7 @@ const { scene: lamelle_model } = await useGLTF('/models_one/lamel_100.glb', { dr
} }
}) })
) )
point_model.traverse((el: Object3D) => el.position.set(0, 0, 0))
const top = ref(top_model) const top = ref(top_model)
const fence = ref(model_fence_center) const fence = ref(model_fence_center)
@ -45,6 +47,7 @@ const fence_bottom = ref(model_fence_bottom)
const fence_inner = ref(model_fence_inner) const fence_inner = ref(model_fence_inner)
const fastening = ref(fastening_model) const fastening = ref(fastening_model)
const lamelle = ref(lamelle_model) const lamelle = ref(lamelle_model)
const pointer = ref(point_model)
if (!pillar_color.value) { if (!pillar_color.value) {
const r = Math.floor(Math.random() * predefPillarColors.length) const r = Math.floor(Math.random() * predefPillarColors.length)
@ -59,6 +62,8 @@ set_material(lamelle.value, getColorHexFromRal(lamelle_color.value));
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value)) }); (el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value)) });
[fence_inner].map( [fence_inner].map(
(el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value), lamelle_count.value) }); (el: Ref) => { set_material(el.value, getColorHexFromRal(pillar_color.value), lamelle_count.value) });
set_material(pointer.value, getColorHexFromRal('5012'));
const { seek, seekAll } = useSeek() const { seek, seekAll } = useSeek()
watch(lamelle_color, () => { watch(lamelle_color, () => {
@ -113,8 +118,9 @@ watch(() => [section_count.value, extra_section.value], () => {
n = 0 n = 0
} }
} }
if (line?.children && n < line?.children.length) { const inner = seek(line, 'name', line.name + '_inner');
line.children = [...line?.children.slice(0, n)] if (inner?.children && n < inner?.children.length) {
inner.children = [...inner?.children.slice(0, n)]
} }
}); });
}) })
@ -128,8 +134,8 @@ watch(lamelle_count, () => {
<template> <template>
<TresGroup name="base"> <TresGroup name="base">
<template v-for="line in (total >= 4) ? 4 : 1" :key="`${line}_${count}`"> <template v-for="line in (total >= 4) ? 4 : 1" :key="`${line}_${count}`">
<ModelLine :models="{ top, fence, fence_top, fence_bottom, fence_inner, fastening, lamelle }" :number="line" <ModelLine :models="{ top, fence, fence_top, fence_bottom, fence_inner, fastening, lamelle, pointer }"
:count="count" /> :number="line" :count="count" />
</template> </template>
</TresGroup> </TresGroup>
</template> </template>

View File

@ -3,8 +3,8 @@ import type { ralTypes } from '@/components/ral'
export const predefPillarColors = ['3004', '7043', '6028', '5013', '8016', '1020', '3005', '4009'] export const predefPillarColors = ['3004', '7043', '6028', '5013', '8016', '1020', '3005', '4009']
export const predefLamelleColors = ['3009', '9003', '6027', '5024', '9001', '1012', '3007', '4007'] export const predefLamelleColors = ['3009', '9003', '6027', '5024', '9001', '1012', '3007', '4007']
const n = 2 const n = 4
const min = 1300 const min = 1370
export const use_lamelle_height = () => useState<number>('lamelle_height', () => 0.115) export const use_lamelle_height = () => useState<number>('lamelle_height', () => 0.115)
export const use_lamelles_count = () => useState('lamelles_count', () => 14) export const use_lamelles_count = () => useState('lamelles_count', () => 14)

327
package-lock.json generated
View File

@ -10,13 +10,14 @@
"@artmizu/yandex-metrika-nuxt": "^1.0.4", "@artmizu/yandex-metrika-nuxt": "^1.0.4",
"@monogrid/gainmap-js": "^3.0.5", "@monogrid/gainmap-js": "^3.0.5",
"@nuxt/image": "^1.7.0", "@nuxt/image": "^1.7.0",
"@nuxtjs/robots": "^3.0.0", "@nuxtjs/robots": "^4.0.0",
"@nuxtjs/sitemap": "^5.3.5", "@nuxtjs/sitemap": "^5.3.5",
"@nuxtjs/tailwindcss": "^6.12.0", "@nuxtjs/tailwindcss": "^6.12.0",
"@tailwindcss/typography": "^0.5.13", "@tailwindcss/typography": "^0.5.13",
"@tresjs/cientos": "^3.9.0", "@tresjs/cientos": "^3.9.0",
"@tresjs/core": "^4.0.2", "@tresjs/core": "^4.0.2",
"@tresjs/nuxt": "^2.1.2", "@tresjs/nuxt": "^2.1.2",
"@tresjs/post-processing": "^0.7.1",
"consola": "^3.2.3", "consola": "^3.2.3",
"marked": "^12.0.2", "marked": "^12.0.2",
"nuxt": "^3.11.2", "nuxt": "^3.11.2",
@ -1379,9 +1380,10 @@
} }
}, },
"node_modules/@jridgewell/sourcemap-codec": { "node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"license": "MIT"
}, },
"node_modules/@jridgewell/trace-mapping": { "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25", "version": "0.3.25",
@ -2029,12 +2031,93 @@
} }
}, },
"node_modules/@nuxtjs/robots": { "node_modules/@nuxtjs/robots": {
"version": "3.0.0", "version": "4.1.7",
"resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-4.1.7.tgz",
"integrity": "sha512-qsHGW1KXBvV5Kq7u3huPnFCUTbHS4Fk8Za2mNPgmUXcwLgp3exvhPtdZfIdjrCF/aZk3A8OZONNmGghs6CecBA==", "integrity": "sha512-1rz2oyBNmpfIzqNG9LfGft+H8Wpp1BMmPyNhkm7BuG/jUXTBFaCh6HDeK6Otx2y53Z9JtCDhiIs/JHj/L4WLPw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/kit": "^3.0.0", "@nuxt/devtools-kit": "^1.4.1",
"h3": "^1.0.1" "@nuxt/kit": "^3.13.1",
"consola": "^3.2.3",
"defu": "^6.1.4",
"nuxt-site-config": "^2.2.16",
"nuxt-site-config-kit": "^2.2.16",
"pathe": "^1.1.2",
"pkg-types": "^1.2.0",
"sirv": "^2.0.4",
"std-env": "^3.7.0",
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/devtools-kit": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.5.0.tgz",
"integrity": "sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==",
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.13.2",
"@nuxt/schema": "^3.13.2",
"execa": "^7.2.0"
},
"peerDependencies": {
"vite": "*"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/kit": {
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
"integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
"license": "MIT",
"dependencies": {
"@nuxt/schema": "3.13.2",
"c12": "^1.11.2",
"consola": "^3.2.3",
"defu": "^6.1.4",
"destr": "^2.0.3",
"globby": "^14.0.2",
"hash-sum": "^2.0.0",
"ignore": "^5.3.2",
"jiti": "^1.21.6",
"klona": "^2.0.6",
"knitwork": "^1.1.0",
"mlly": "^1.7.1",
"pathe": "^1.1.2",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"semver": "^7.6.3",
"ufo": "^1.5.4",
"unctx": "^2.3.1",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
"node": "^14.18.0 || >=16.10.0"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/schema": {
"version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
"integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
"license": "MIT",
"dependencies": {
"compatx": "^0.1.8",
"consola": "^3.2.3",
"defu": "^6.1.4",
"hookable": "^5.5.3",
"pathe": "^1.1.2",
"pkg-types": "^1.2.0",
"scule": "^1.3.0",
"std-env": "^3.7.0",
"ufo": "^1.5.4",
"uncrypto": "^0.1.3",
"unimport": "^3.12.0",
"untyped": "^1.4.2"
},
"engines": {
"node": "^14.18.0 || >=16.10.0"
} }
}, },
"node_modules/@nuxtjs/sitemap": { "node_modules/@nuxtjs/sitemap": {
@ -3991,6 +4074,47 @@
} }
} }
}, },
"node_modules/@tresjs/post-processing": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/@tresjs/post-processing/-/post-processing-0.7.1.tgz",
"integrity": "sha512-MLrjxR4rJ55MOYFKMEZ8aqh5no2/sOG1fdYk2B49Ntx2p2etyuVpI6e9BBAvrc4M/wktRHkQ2JNDbgMaCiJoMg==",
"license": "MIT",
"dependencies": {
"@tresjs/core": "^3.5.1",
"@unocss/core": "^0.58.0",
"@vueuse/core": "^10.6.1",
"postprocessing": "^6.33.4",
"three-stdlib": "^2.28.7"
},
"peerDependencies": {
"three": ">=0.133",
"vue": ">=3.3"
}
},
"node_modules/@tresjs/post-processing/node_modules/@tresjs/core": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/@tresjs/core/-/core-3.9.0.tgz",
"integrity": "sha512-6el70oXSduTvSA3XCI8/rQV2GzcgCLceZKA443CTU/MBPmRDULJ12q/UYl18Ij4CJ68rTqgVi0Da+WNMrs784A==",
"license": "MIT",
"dependencies": {
"@alvarosabu/utils": "^3.1.1",
"@vue/devtools-api": "^6.6.1",
"@vueuse/core": "^10.7.0"
},
"peerDependencies": {
"three": ">=0.133",
"vue": ">=3.3"
}
},
"node_modules/@tresjs/post-processing/node_modules/@unocss/core": {
"version": "0.58.9",
"resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.58.9.tgz",
"integrity": "sha512-wYpPIPPsOIbIoMIDuH8ihehJk5pAZmyFKXIYO/Kro98GEOFhz6lJoLsy6/PZuitlgp2/TSlubUuWGjHWvp5osw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@trysound/sax": { "node_modules/@trysound/sax": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
@ -6457,9 +6581,10 @@
} }
}, },
"node_modules/c12": { "node_modules/c12": {
"version": "1.11.1", "version": "1.11.2",
"resolved": "https://registry.npmjs.org/c12/-/c12-1.11.1.tgz", "resolved": "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz",
"integrity": "sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==", "integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==",
"license": "MIT",
"dependencies": { "dependencies": {
"chokidar": "^3.6.0", "chokidar": "^3.6.0",
"confbox": "^0.1.7", "confbox": "^0.1.7",
@ -6471,7 +6596,7 @@
"ohash": "^1.1.3", "ohash": "^1.1.3",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"perfect-debounce": "^1.0.0", "perfect-debounce": "^1.0.0",
"pkg-types": "^1.1.1", "pkg-types": "^1.2.0",
"rc9": "^2.1.2" "rc9": "^2.1.2"
}, },
"peerDependencies": { "peerDependencies": {
@ -8585,9 +8710,10 @@
] ]
}, },
"node_modules/ignore": { "node_modules/ignore": {
"version": "5.3.1", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"license": "MIT",
"engines": { "engines": {
"node": ">= 4" "node": ">= 4"
} }
@ -9510,11 +9636,12 @@
} }
}, },
"node_modules/magic-string": { "node_modules/magic-string": {
"version": "0.30.10", "version": "0.30.11",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
"integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
"license": "MIT",
"dependencies": { "dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15" "@jridgewell/sourcemap-codec": "^1.5.0"
} }
}, },
"node_modules/magic-string-ast": { "node_modules/magic-string-ast": {
@ -10666,64 +10793,67 @@
} }
}, },
"node_modules/nuxt-site-config": { "node_modules/nuxt-site-config": {
"version": "2.2.15", "version": "2.2.18",
"resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.15.tgz", "resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.18.tgz",
"integrity": "sha512-V/gsWAeSWQi7FGoy6vicf6DXaaNJ/akail54dMWnrkcBre4PpBSwP7arZqmZZzj1mc0v7LoYqISr9qeXhcT1NA==", "integrity": "sha512-NU39ANP1kvRBzpEWV496y/lf9PKVv3t1VKX3zmQ1POcbzAXU4gm0Mh5NKOaLEcoXj6bQnziFNqjzHX3DAA8Aog==",
"license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/devtools-kit": "^1.3.9", "@nuxt/devtools-kit": "^1.4.2",
"@nuxt/kit": "^3.12.3", "@nuxt/kit": "^3.13.1",
"@nuxt/schema": "^3.12.3", "@nuxt/schema": "^3.13.1",
"nuxt-site-config-kit": "2.2.15", "nuxt-site-config-kit": "2.2.18",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"sirv": "^2.0.4", "sirv": "^2.0.4",
"site-config-stack": "2.2.15", "site-config-stack": "2.2.18",
"ufo": "^1.5.3" "ufo": "^1.5.4"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/harlan-zw" "url": "https://github.com/sponsors/harlan-zw"
} }
}, },
"node_modules/nuxt-site-config-kit": { "node_modules/nuxt-site-config-kit": {
"version": "2.2.15", "version": "2.2.18",
"resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.15.tgz", "resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.18.tgz",
"integrity": "sha512-uN+JOijDt0u35rBhI3GhRHvPKncm2Nu/P3QMRIi+mwt4F/tQtlvLa1XUANkeEy8InTnPTVgs6dSDSqHP4sBXzg==", "integrity": "sha512-iPtf2X1fvI9m9VV04edSqNGC2EzQ1aLB7F2/AOxYRktCJxHeTdBGifuNPc90EaEIOfWx+gf3lmRd4EppGoAMSA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/kit": "^3.12.3", "@nuxt/kit": "^3.13.1",
"@nuxt/schema": "^3.12.3", "@nuxt/schema": "^3.13.1",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"site-config-stack": "2.2.15", "site-config-stack": "2.2.18",
"std-env": "^3.7.0", "std-env": "^3.7.0",
"ufo": "^1.5.3" "ufo": "^1.5.4"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/harlan-zw" "url": "https://github.com/sponsors/harlan-zw"
} }
}, },
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/kit": { "node_modules/nuxt-site-config-kit/node_modules/@nuxt/kit": {
"version": "3.12.4", "version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz", "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
"integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==", "integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/schema": "3.12.4", "@nuxt/schema": "3.13.2",
"c12": "^1.11.1", "c12": "^1.11.2",
"consola": "^3.2.3", "consola": "^3.2.3",
"defu": "^6.1.4", "defu": "^6.1.4",
"destr": "^2.0.3", "destr": "^2.0.3",
"globby": "^14.0.2", "globby": "^14.0.2",
"hash-sum": "^2.0.0", "hash-sum": "^2.0.0",
"ignore": "^5.3.1", "ignore": "^5.3.2",
"jiti": "^1.21.6", "jiti": "^1.21.6",
"klona": "^2.0.6", "klona": "^2.0.6",
"knitwork": "^1.1.0", "knitwork": "^1.1.0",
"mlly": "^1.7.1", "mlly": "^1.7.1",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"scule": "^1.3.0", "scule": "^1.3.0",
"semver": "^7.6.3", "semver": "^7.6.3",
"ufo": "^1.5.4", "ufo": "^1.5.4",
"unctx": "^2.3.1", "unctx": "^2.3.1",
"unimport": "^3.9.0", "unimport": "^3.12.0",
"untyped": "^1.4.2" "untyped": "^1.4.2"
}, },
"engines": { "engines": {
@ -10731,21 +10861,22 @@
} }
}, },
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/schema": { "node_modules/nuxt-site-config-kit/node_modules/@nuxt/schema": {
"version": "3.12.4", "version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz", "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
"integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==", "integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
"license": "MIT",
"dependencies": { "dependencies": {
"compatx": "^0.1.8", "compatx": "^0.1.8",
"consola": "^3.2.3", "consola": "^3.2.3",
"defu": "^6.1.4", "defu": "^6.1.4",
"hookable": "^5.5.3", "hookable": "^5.5.3",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"scule": "^1.3.0", "scule": "^1.3.0",
"std-env": "^3.7.0", "std-env": "^3.7.0",
"ufo": "^1.5.4", "ufo": "^1.5.4",
"uncrypto": "^0.1.3", "uncrypto": "^0.1.3",
"unimport": "^3.9.0", "unimport": "^3.12.0",
"untyped": "^1.4.2" "untyped": "^1.4.2"
}, },
"engines": { "engines": {
@ -10753,12 +10884,13 @@
} }
}, },
"node_modules/nuxt-site-config/node_modules/@nuxt/devtools-kit": { "node_modules/nuxt-site-config/node_modules/@nuxt/devtools-kit": {
"version": "1.3.9", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.9.tgz", "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.5.0.tgz",
"integrity": "sha512-tgr/F+4BbI53/JxgaXl3cuV9dMuCXMsd4GEXN+JqtCdAkDbH3wL79GGWx0/6I9acGzRsB6UZ1H6U96nfgcIrAw==", "integrity": "sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==",
"license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/kit": "^3.12.2", "@nuxt/kit": "^3.13.2",
"@nuxt/schema": "^3.12.3", "@nuxt/schema": "^3.13.2",
"execa": "^7.2.0" "execa": "^7.2.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -10766,29 +10898,30 @@
} }
}, },
"node_modules/nuxt-site-config/node_modules/@nuxt/kit": { "node_modules/nuxt-site-config/node_modules/@nuxt/kit": {
"version": "3.12.4", "version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz", "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.2.tgz",
"integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==", "integrity": "sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@nuxt/schema": "3.12.4", "@nuxt/schema": "3.13.2",
"c12": "^1.11.1", "c12": "^1.11.2",
"consola": "^3.2.3", "consola": "^3.2.3",
"defu": "^6.1.4", "defu": "^6.1.4",
"destr": "^2.0.3", "destr": "^2.0.3",
"globby": "^14.0.2", "globby": "^14.0.2",
"hash-sum": "^2.0.0", "hash-sum": "^2.0.0",
"ignore": "^5.3.1", "ignore": "^5.3.2",
"jiti": "^1.21.6", "jiti": "^1.21.6",
"klona": "^2.0.6", "klona": "^2.0.6",
"knitwork": "^1.1.0", "knitwork": "^1.1.0",
"mlly": "^1.7.1", "mlly": "^1.7.1",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"scule": "^1.3.0", "scule": "^1.3.0",
"semver": "^7.6.3", "semver": "^7.6.3",
"ufo": "^1.5.4", "ufo": "^1.5.4",
"unctx": "^2.3.1", "unctx": "^2.3.1",
"unimport": "^3.9.0", "unimport": "^3.12.0",
"untyped": "^1.4.2" "untyped": "^1.4.2"
}, },
"engines": { "engines": {
@ -10796,21 +10929,22 @@
} }
}, },
"node_modules/nuxt-site-config/node_modules/@nuxt/schema": { "node_modules/nuxt-site-config/node_modules/@nuxt/schema": {
"version": "3.12.4", "version": "3.13.2",
"resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz", "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.2.tgz",
"integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==", "integrity": "sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==",
"license": "MIT",
"dependencies": { "dependencies": {
"compatx": "^0.1.8", "compatx": "^0.1.8",
"consola": "^3.2.3", "consola": "^3.2.3",
"defu": "^6.1.4", "defu": "^6.1.4",
"hookable": "^5.5.3", "hookable": "^5.5.3",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"scule": "^1.3.0", "scule": "^1.3.0",
"std-env": "^3.7.0", "std-env": "^3.7.0",
"ufo": "^1.5.4", "ufo": "^1.5.4",
"uncrypto": "^0.1.3", "uncrypto": "^0.1.3",
"unimport": "^3.9.0", "unimport": "^3.12.0",
"untyped": "^1.4.2" "untyped": "^1.4.2"
}, },
"engines": { "engines": {
@ -11316,9 +11450,10 @@
} }
}, },
"node_modules/pkg-types": { "node_modules/pkg-types": {
"version": "1.1.3", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
"integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
"license": "MIT",
"dependencies": { "dependencies": {
"confbox": "^0.1.7", "confbox": "^0.1.7",
"mlly": "^1.7.1", "mlly": "^1.7.1",
@ -11918,6 +12053,15 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
} }
}, },
"node_modules/postprocessing": {
"version": "6.36.2",
"resolved": "https://registry.npmjs.org/postprocessing/-/postprocessing-6.36.2.tgz",
"integrity": "sha512-a1qZjpm0Vrozat7YFtYOEvwElWz/ukhxoA+K7HzDVeor20vzacREMnJZL5GTj6TFVr7/ma3W0qD03Go0V5gQOA==",
"license": "Zlib",
"peerDependencies": {
"three": ">= 0.157.0 < 0.169.0"
}
},
"node_modules/potpack": { "node_modules/potpack": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
@ -13115,11 +13259,12 @@
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
}, },
"node_modules/site-config-stack": { "node_modules/site-config-stack": {
"version": "2.2.15", "version": "2.2.18",
"resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.15.tgz", "resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.18.tgz",
"integrity": "sha512-Ykh1X+puUlGoM/HX7bV7xZMKd4mQTm0KtB/9ChHKSIknCJ6pEwIRKuDiEnImtOTG+HUhuFJGW8lV8CkAB58tXw==", "integrity": "sha512-kwyuCwYZBJikuLN3IB15cGT7SHQQxAitLaDs1b6eNZbb+tBHubVUhj0pnFZnZZi4+5eNCO+3HiZxaU3qpFxP2A==",
"license": "MIT",
"dependencies": { "dependencies": {
"ufo": "^1.5.3" "ufo": "^1.5.4"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/harlan-zw" "url": "https://github.com/sponsors/harlan-zw"
@ -14198,9 +14343,10 @@
} }
}, },
"node_modules/unimport": { "node_modules/unimport": {
"version": "3.9.0", "version": "3.12.0",
"resolved": "https://registry.npmjs.org/unimport/-/unimport-3.9.0.tgz", "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.12.0.tgz",
"integrity": "sha512-H2ftTISja1BonUVdOKRos6HC6dqYDR40dQTZY3zIDJ/5/z4ihncuL0LqLvtxYqUDMib41eAtunQUhXIWTCZ8rA==", "integrity": "sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==",
"license": "MIT",
"dependencies": { "dependencies": {
"@rollup/pluginutils": "^5.1.0", "@rollup/pluginutils": "^5.1.0",
"acorn": "^8.12.1", "acorn": "^8.12.1",
@ -14208,13 +14354,13 @@
"estree-walker": "^3.0.3", "estree-walker": "^3.0.3",
"fast-glob": "^3.3.2", "fast-glob": "^3.3.2",
"local-pkg": "^0.5.0", "local-pkg": "^0.5.0",
"magic-string": "^0.30.10", "magic-string": "^0.30.11",
"mlly": "^1.7.1", "mlly": "^1.7.1",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"pkg-types": "^1.1.3", "pkg-types": "^1.2.0",
"scule": "^1.3.0", "scule": "^1.3.0",
"strip-literal": "^2.1.0", "strip-literal": "^2.1.0",
"unplugin": "^1.11.0" "unplugin": "^1.14.1"
} }
}, },
"node_modules/unimport/node_modules/acorn": { "node_modules/unimport/node_modules/acorn": {
@ -14305,17 +14451,24 @@
} }
}, },
"node_modules/unplugin": { "node_modules/unplugin": {
"version": "1.12.0", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz",
"integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==", "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==",
"license": "MIT",
"dependencies": { "dependencies": {
"acorn": "^8.12.1", "acorn": "^8.12.1",
"chokidar": "^3.6.0",
"webpack-sources": "^3.2.3",
"webpack-virtual-modules": "^0.6.2" "webpack-virtual-modules": "^0.6.2"
}, },
"engines": { "engines": {
"node": ">=14.0.0" "node": ">=14.0.0"
},
"peerDependencies": {
"webpack-sources": "^3"
},
"peerDependenciesMeta": {
"webpack-sources": {
"optional": true
}
} }
}, },
"node_modules/unplugin-vue-router": { "node_modules/unplugin-vue-router": {

View File

@ -20,6 +20,7 @@
"@tresjs/cientos": "^3.9.0", "@tresjs/cientos": "^3.9.0",
"@tresjs/core": "^4.0.2", "@tresjs/core": "^4.0.2",
"@tresjs/nuxt": "^2.1.2", "@tresjs/nuxt": "^2.1.2",
"@tresjs/post-processing": "^0.7.1",
"consola": "^3.2.3", "consola": "^3.2.3",
"marked": "^12.0.2", "marked": "^12.0.2",
"nuxt": "^3.11.2", "nuxt": "^3.11.2",

Binary file not shown.