From 15446d34a1ad038c0a67488978b0a9fd7d9df3e0 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Tue, 20 May 2025 15:15:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=A2=84=E8=A7=88=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/StyleCustomizer.vue | 95 ++++++++++++++++--- packages/frontend/src/locales/en-US.json | 1 + packages/frontend/src/locales/ja-JP.json | 1 + packages/frontend/src/locales/zh-CN.json | 1 + 4 files changed, 84 insertions(+), 14 deletions(-) diff --git a/packages/frontend/src/components/StyleCustomizer.vue b/packages/frontend/src/components/StyleCustomizer.vue index 65663c8..29255e9 100644 --- a/packages/frontend/src/components/StyleCustomizer.vue +++ b/packages/frontend/src/components/StyleCustomizer.vue @@ -910,12 +910,69 @@ const handleFocusAndSelect = (event: FocusEvent) => { } }; +const modalRootRef = ref(null); + +// Store original styles to revert back +let originalModalRootBackgroundColor: string | null = null; +let originalModalContentOpacity: string | null = null; +let originalModalRootTransition: string | null = null; +let originalModalContentTransition: string | null = null; + +const handlePreviewButtonMouseDown = () => { + if (modalRootRef.value) { + const modalContentElement = modalRootRef.value.firstElementChild as HTMLElement; + + // Save original styles if not already saved (for this mousedown session) + // These are saved once per mousedown-mouseup cycle + if (originalModalRootBackgroundColor === null) { // Check one to assume all are not set + originalModalRootBackgroundColor = window.getComputedStyle(modalRootRef.value).backgroundColor; + originalModalRootTransition = modalRootRef.value.style.transition; // Save inline or computed transition + if (modalContentElement) { + originalModalContentOpacity = window.getComputedStyle(modalContentElement).opacity; + originalModalContentTransition = modalContentElement.style.transition; // Save inline or computed transition + } + } + + // Apply transparency effects + // Make the background overlay (modalRootRef) transparent + modalRootRef.value.style.transition = 'background-color 0.05s ease-out'; + modalRootRef.value.style.backgroundColor = 'transparent'; + + if (modalContentElement) { + // Make the modal content (the box including the button) completely transparent + modalContentElement.style.transition = 'opacity 0.05s ease-out'; + modalContentElement.style.opacity = '0'; // Changed from 0.05 to 0 + } + + const restoreModalAppearance = () => { + if (modalRootRef.value) { + modalRootRef.value.style.backgroundColor = originalModalRootBackgroundColor || ''; // Revert to original or default + modalRootRef.value.style.transition = originalModalRootTransition || ''; // Revert to original or default + } + if (modalContentElement) { + modalContentElement.style.opacity = originalModalContentOpacity || '1'; // Revert to original or default + modalContentElement.style.transition = originalModalContentTransition || ''; // Revert to original or default + } + + // Reset stored original styles for the next interaction cycle + originalModalRootBackgroundColor = null; + originalModalContentOpacity = null; + originalModalRootTransition = null; + originalModalContentTransition = null; + + document.removeEventListener('mouseup', restoreModalAppearance); + }; + // Listen for mouseup anywhere on the document to restore + document.addEventListener('mouseup', restoreModalAppearance, { once: true }); + } +}; +