From 832573e10975523a1b85e5219c872f8a19e96805 Mon Sep 17 00:00:00 2001 From: Peanut-Puff <97236799+Peanut-Puff@users.noreply.github.com> Date: Mon, 17 Aug 2026 11:15:39 +0800 Subject: [PATCH] fix(web): keep feedback dialog within window bounds --- .../FeedbackDialog/FeedbackDialog.scss | 69 ++++++++----------- .../FeedbackDialog/FeedbackDialog.tsx | 46 +++++++------ .../feedbackSubmissionContract.test.ts | 54 +++++++++++++-- .../components/Modal/Modal.test.tsx | 43 ++++++++++++ .../components/Modal/Modal.tsx | 40 +++++++---- .../components/Modal/index.ts | 2 +- 6 files changed, 177 insertions(+), 77 deletions(-) diff --git a/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.scss b/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.scss index 8f324112f0..76e2fb731d 100644 --- a/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.scss +++ b/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.scss @@ -1,11 +1,7 @@ .bitfun-feedback__overlay { - padding: 48px 40px 32px; -} + --bitfun-feedback-modal-max-height: calc(100vh - 80px); -.bitfun-feedback__overlay .modal { - width: min(960px, calc(100vw - 80px)); - max-width: min(960px, calc(100vw - 80px)); - max-height: calc(100vh - 80px); + padding: 48px clamp(12px, 5.882vw, 40px) 32px; } .bitfun-feedback__modal-content { @@ -15,9 +11,7 @@ } .bitfun-feedback__root { - display: flex; - flex: 1; - flex-direction: column; + width: 100%; min-width: 0; min-height: 0; } @@ -29,7 +23,8 @@ width: 100%; min-width: 0; min-height: 0; - height: min(620px, calc(100vh - 114px)); + height: calc(100vh - 114px); + max-height: 620px; } .bitfun-feedback__view-switch { @@ -84,7 +79,7 @@ flex-direction: column; gap: 18px; min-height: 0; - padding: 22px 26px 24px; + padding: 22px clamp(18px, 3.824vw, 26px) 24px; overflow-y: auto; } @@ -192,26 +187,31 @@ .bitfun-feedback__actions { display: flex; align-items: center; + flex-wrap: wrap; gap: 10px; + width: 100%; + min-width: 0; margin-top: auto; .btn { + flex-shrink: 0; min-width: 96px; } } -.bitfun-feedback__action-spacer { - flex: 1; +.bitfun-feedback__primary-actions { + display: flex; + flex-shrink: 0; + align-items: center; + gap: 10px; + margin-left: auto; } .bitfun-feedback__complete { display: flex; - flex: 1; flex-direction: column; align-items: center; - justify-content: center; gap: 12px; - min-height: min(460px, 64vh); padding: 32px; color: var(--bf-appearance-token-color-text-secondary); text-align: center; @@ -626,36 +626,27 @@ } } -@media (max-width: 680px), (max-height: 540px) { +@media (max-width: 680px) { .bitfun-feedback__overlay { - padding: 44px 12px 12px; + padding-right: clamp(12px, 5.882vw, 40px); + padding-left: clamp(12px, 5.882vw, 40px); } - .bitfun-feedback__overlay .modal { - width: calc(100vw - 24px); - max-width: calc(100vw - 24px); - max-height: calc(100vh - 56px); - } - - .bitfun-feedback__center { - height: calc(100vh - 90px); - } - - .bitfun-feedback__form { - padding: 18px; - } - - .bitfun-feedback__privacy, - .bitfun-feedback__actions { - align-items: stretch; + .bitfun-feedback__privacy { + align-items: center; flex-wrap: wrap; } +} - .bitfun-feedback__privacy { - align-items: center; +@media (max-height: 540px) { + .bitfun-feedback__overlay { + --bitfun-feedback-modal-max-height: calc(100vh - 56px); + + padding-top: 44px; + padding-bottom: 12px; } - .bitfun-feedback__action-spacer { - display: none; + .bitfun-feedback__center { + height: calc(100vh - 90px); } } diff --git a/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.tsx b/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.tsx index dd04642e4b..c8cef9bd74 100644 --- a/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.tsx +++ b/src/web-ui/src/app/components/FeedbackDialog/FeedbackDialog.tsx @@ -311,6 +311,11 @@ export const FeedbackDialog: React.FC = ({ isOpen, onClose onClose={requestClose} title={t('header.feedback')} size="xlarge" + dimensions={{ + width: '100%', + maxWidth: completed ? 560 : 960, + maxHeight: 'var(--bitfun-feedback-modal-max-height)', + }} overlayClassName="bitfun-feedback__overlay" contentClassName="bitfun-feedback__modal-content" showCloseButton={!submitting && !replyState.sending} @@ -430,26 +435,27 @@ export const FeedbackDialog: React.FC = ({ isOpen, onClose