fix: typecheck

This commit is contained in:
Neko Ayaka
2025-08-25 00:42:51 +08:00
parent 12a24725bd
commit 7f2ab0ec79
5 changed files with 37 additions and 44 deletions
@@ -7,7 +7,7 @@ const emits = defineEmits<{
(e: 'reset'): void
}>()
const { stageView, stageViewControlsEnabled } = storeToRefs(useSettings())
const { stageModelRenderer, stageViewControlsEnabled } = storeToRefs(useSettings())
const mode = defineModel<'x' | 'y' | 'z' | 'scale'>({ required: true })
@@ -31,7 +31,7 @@ function handleViewControlsToggle(targetMode: 'x' | 'y' | 'z' | 'scale') {
<Button variant="secondary-muted" :toggled="mode === 'y'" w-full @click="handleViewControlsToggle('y')">
Y
</Button>
<Button v-if="stageView === '3d'" variant="secondary-muted" :toggled="mode === 'z'" w-full @click="handleViewControlsToggle('z')">
<Button v-if="stageModelRenderer === 'vrm'" variant="secondary-muted" :toggled="mode === 'z'" w-full @click="handleViewControlsToggle('z')">
Z
</Button>
<Button variant="secondary-muted" :toggled="mode === 'scale'" w-full @click="handleViewControlsToggle('scale')">
@@ -34,7 +34,7 @@ const { activeProvider, activeModel } = storeToRefs(useConsciousnessStore())
useResizeObserver(document.documentElement, () => screenSafeArea.update())
// const { askPermission } = useSettingsAudioDevice()
const { themeColorsHueDynamic, stageView, stageViewControlsEnabled } = storeToRefs(useSettings())
const { themeColorsHueDynamic, stageViewControlsEnabled } = storeToRefs(useSettings())
const { enabled, selectedAudioInput } = storeToRefs(useSettingsAudioDevice())
const { send, onAfterMessageComposed, discoverToolsCompatibility } = useChatStore()
const { messages } = storeToRefs(useChatStore())
@@ -145,14 +145,6 @@ onMounted(() => {
<!-- <button border="2 solid neutral-100/60 dark:neutral-800/30" bg="neutral-50/70 dark:neutral-800/70" w-fit flex items-center self-end justify-center rounded-xl p-2 backdrop-blur-md title="Model">
<div i-solar:face-scan-circle-outline size-5 text="neutral-500 dark:neutral-400" />
</button> -->
<button border="2 solid neutral-100/60 dark:neutral-800/30" bg="neutral-50/70 dark:neutral-800/70" w-fit flex items-center self-end justify-center rounded-xl p-2 backdrop-blur-md title="Stage View" @click="stageView = stageView === '2d' ? '3d' : '2d'">
<div v-if="stageView === '2d'" size-5 text="neutral-500 dark:neutral-400" inline-flex items-center justify-center>
<span>2D</span>
</div>
<div v-if="stageView === '3d'" size-5 text="neutral-500 dark:neutral-400" inline-flex items-center justify-center>
<span>3D</span>
</div>
</button>
<ActionViewControls v-model="viewControlsActiveMode" @reset="() => viewControlsInputsRef?.resetOnMode()" />
</div>
</div>
@@ -10,27 +10,27 @@ const props = defineProps<{
mode: 'x' | 'y' | 'z' | 'scale'
}>()
const { stageView, stageViewControlsEnabled } = storeToRefs(useSettings())
const { stageModelRenderer, stageViewControlsEnabled } = storeToRefs(useSettings())
const { scale: vrmScale, modelOffset: vrmPosition, modelSize: vrmModelSize } = storeToRefs(useVRM())
const { scale: live2dScale, position: live2dPosition } = storeToRefs(useLive2d())
const viewControlsValueX = computed({
get: () => {
switch (stageView.value) {
case '2d':
switch (stageModelRenderer.value) {
case 'live2d':
return live2dPosition.value.x
case '3d':
case 'vrm':
return vrmPosition.value.x
default:
return 0
}
},
set: (value) => {
switch (stageView.value) {
case '2d':
switch (stageModelRenderer.value) {
case 'live2d':
live2dPosition.value.x = value
break
case '3d':
case 'vrm':
vrmPosition.value.x = value
break
default:
@@ -40,30 +40,30 @@ const viewControlsValueX = computed({
})
const viewControlsValueXMin = computed(() => {
return stageView.value === '2d' ? -500 : -vrmModelSize.value.x - 10
return stageModelRenderer.value === 'live2d' ? -500 : -vrmModelSize.value.x - 10
})
const viewControlsValueXMax = computed(() => {
return stageView.value === '2d' ? 500 : vrmModelSize.value.x + 10
return stageModelRenderer.value === 'vrm' ? 500 : vrmModelSize.value.x + 10
})
const viewControlsValueY = computed({
get: () => {
switch (stageView.value) {
case '2d':
switch (stageModelRenderer.value) {
case 'live2d':
return live2dPosition.value.y
case '3d':
case 'vrm':
return vrmPosition.value.y
default:
return 0
}
},
set: (value) => {
switch (stageView.value) {
case '2d':
switch (stageModelRenderer.value) {
case 'live2d':
live2dPosition.value.y = value
break
case '3d':
case 'vrm':
vrmPosition.value.y = value
break
default:
@@ -73,29 +73,29 @@ const viewControlsValueY = computed({
})
const viewControlsValueYMin = computed(() => {
return stageView.value === '2d' ? -500 : -vrmModelSize.value.y - 10
return stageModelRenderer.value === 'live2d' ? -500 : -vrmModelSize.value.y - 10
})
const viewControlsValueYMax = computed(() => {
return stageView.value === '2d' ? 500 : vrmModelSize.value.y + 10
return stageModelRenderer.value === 'vrm' ? 500 : vrmModelSize.value.y + 10
})
const viewControlsValueZ = computed({
get: () => {
switch (stageView.value) {
case '2d':
switch (stageModelRenderer.value) {
case 'live2d':
return 0
case '3d':
case 'vrm':
return vrmPosition.value.z
default:
return 0
}
},
set: (value) => {
switch (stageView.value) {
case '2d':
switch (stageModelRenderer.value) {
case 'live2d':
break
case '3d':
case 'vrm':
vrmPosition.value.z = value
break
default:
@@ -105,23 +105,23 @@ const viewControlsValueZ = computed({
})
const viewControlsValueZMin = computed(() => {
return stageView.value === '2d' ? -500 : -vrmModelSize.value.z - 10
return stageModelRenderer.value === 'live2d' ? -500 : -vrmModelSize.value.z - 10
})
const viewControlsValueZMax = computed(() => {
return stageView.value === '2d' ? 500 : vrmModelSize.value.z + 10
return stageModelRenderer.value === 'live2d' ? 500 : vrmModelSize.value.z + 10
})
const viewControlsValueScale = computed({
get: () => {
if (stageView.value === '2d') {
if (stageModelRenderer.value === 'live2d') {
return live2dScale.value
}
return vrmScale.value
},
set: (value) => {
if (stageView.value === '2d') {
if (stageModelRenderer.value === 'live2d') {
live2dScale.value = value
}
else {
@@ -168,7 +168,7 @@ defineExpose({
{{ viewControlsValueY.toFixed(2) }}
</div>
</div>
<div v-else-if="stageView === '3d' && props.mode === 'z'" relative class="[&_.round-range-tooltip]:hover:opacity-100">
<div v-else-if="stageModelRenderer === 'vrm' && props.mode === 'z'" relative class="[&_.round-range-tooltip]:hover:opacity-100">
<RoundRange v-model="viewControlsValueZ" :min="viewControlsValueZMin" :max="viewControlsValueZMax" :step="0.01" write-vertical-left h="50%" data-direction="vertical" />
<div class="round-range-tooltip" top="50%" translate-y="[-50%]" absolute left-10 font-mono op-0 transition="all duration-200 ease-in-out">
{{ viewControlsValueZ.toFixed(2) }}
@@ -61,6 +61,7 @@ const mapFormatRenderer: Record<DisplayModelFormat, string> = {
[DisplayModelFormat.Live2dDirectory]: 'Live2D',
[DisplayModelFormat.VRM]: 'VRM',
[DisplayModelFormat.PMXDirectory]: 'MMD',
[DisplayModelFormat.PMXZip]: 'MMD',
[DisplayModelFormat.PMD]: 'MMD',
}
@@ -41,7 +41,7 @@ const db = ref<DuckDBWasmDrizzleDatabase>()
const vrmViewerRef = ref<{ setExpression: (expression: string) => void }>()
const { stageView, stageViewControlsEnabled, live2dDisableFocus, stageModelSelectedUrl } = storeToRefs(useSettings())
const { stageModelRenderer, stageViewControlsEnabled, live2dDisableFocus, stageModelSelectedUrl } = storeToRefs(useSettings())
const { mouthOpenSize } = storeToRefs(useSpeakingStore())
const { audioContext, calculateVolume } = useAudioContext()
const { onBeforeMessageComposed, onBeforeSend, onTokenLiteral, onTokenSpecial, onStreamEnd, onAssistantResponseEnd } = useChatStore()
@@ -137,14 +137,14 @@ const { currentMotion } = storeToRefs(useLive2d())
const emotionsQueue = useQueue<Emotion>({
handlers: [
async (ctx) => {
if (stageView.value === 'vrm') {
if (stageModelRenderer.value === 'vrm') {
const value = EMOTION_VRMExpressionName_value[ctx.data]
if (!value)
return
await vrmViewerRef.value!.setExpression(value)
}
else if (stageView.value === 'live2d') {
else if (stageModelRenderer.value === 'live2d') {
currentMotion.value = { group: EMOTION_EmotionMotionName_value[ctx.data] }
}
},
@@ -229,7 +229,7 @@ onMounted(async () => {
<div relative>
<div h-full w-full>
<Live2DScene
v-if="stageView === 'live2d'"
v-if="stageModelRenderer === 'live2d'"
min-w="50% <lg:full" min-h="100 sm:100" h-full w-full flex-1
:model-src="stageModelSelectedUrl"
:focus-at="focusAt"
@@ -241,7 +241,7 @@ onMounted(async () => {
:disable-focus-at="live2dDisableFocus"
/>
<VRMScene
v-else-if="stageView === 'vrm'"
v-else-if="stageModelRenderer === 'vrm'"
ref="vrmViewerRef"
:model-src="stageModelSelectedUrl"
idle-animation="/assets/vrm/animations/idle_loop.vrma"