diff --git a/packages/frontend/src/pages/room.add-object-dialog.vue b/packages/frontend/src/pages/room.add-object-dialog.vue index fa19b86561..89e782b51e 100644 --- a/packages/frontend/src/pages/room.add-object-dialog.vue +++ b/packages/frontend/src/pages/room.add-object-dialog.vue @@ -32,10 +32,18 @@ SPDX-License-Identifier: AGPL-3.0-only
- -
- -
+ + + +
+ +
+
@@ -52,6 +60,7 @@ import { OBJECT_DEFS } from '@/world/room/object-defs.js'; import { createRoomObjectPreviewEngine, RoomObjectPreviewEngine } from '@/world/room/previewEngine.js'; import { camelToKebab } from '@/world/utility.js'; import MkButton from '@/components/MkButton.vue'; +import { prefer } from '@/preferences.js'; // TODO: instanceのidと紛らわしいのでid -> typeにする @@ -70,6 +79,7 @@ const selectedId = ref(null); const selectedInstanceId = ref(null); const selectedObjectOptionsState = shallowRef(null); const selectedObjectDef = computed(() => OBJECT_DEFS.find(def => def.id === selectedId.value) ?? null); +const showObjectOptions = ref(false); const engine = shallowRef(null); onMounted(async () => { @@ -85,6 +95,8 @@ onUnmounted(() => { }); watch(selectedId, (newId) => { + showObjectOptions.value = false; + if (newId == null) { engine.value!.clear(); selectedInstanceId.value = null; @@ -164,6 +176,7 @@ async function cancel() { left: 0; width: 100%; height: 100%; + overflow: clip; } .canvas { @@ -189,7 +202,25 @@ async function cancel() { .customize { position: absolute; - top: 8px; - left: 8px; + top: 0; + right: 0; + margin: 32px 8px 8px 8px; + max-height: stretch; + width: 300px; + overflow: auto; + box-sizing: border-box; + padding: 24px; +} + +.transition_options_enterActive, +.transition_options_leaveActive { + opacity: 1; + transform: translateX(0); + transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); +} +.transition_options_enterFrom, +.transition_options_leaveTo { + opacity: 0; + transform: translateX(200px); }