Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
65d3037
refactor(ui-tailwind): Dialog를 5-size recipe(sm/md/lg/screen/hero) 기반…
sumi-0011 Jul 8, 2026
81c991f
feat(ui-tailwind): Dialog.Alert / Dialog.Confirm sugar 추가
sumi-0011 Jul 8, 2026
807e408
refactor: CommonDialog 제거, MergePersona(lg)·EvolutionPersona(hero) 컴파…
sumi-0011 Jul 8, 2026
7dba7ec
refactor(web): ConfirmDialog 제거, Dialog.Confirm sugar로 대체
sumi-0011 Jul 8, 2026
83d741e
refactor(web): useDialog의 DialogComponent를 Dialog.Confirm/Alert로 재작성
sumi-0011 Jul 8, 2026
8e54207
refactor(web): quiz/laboratory ad-hoc 알림 4종 제거, Dialog.Alert/Confirm으…
sumi-0011 Jul 8, 2026
867ed3c
refactor(web): 퀴즈 알림 다이얼로그를 Dialog compound로 재이관 (이미지/모달 dismiss 정책 복구)
sumi-0011 Jul 8, 2026
c6df8e2
refactor(web): Dialog size 사용처 정리(large→lg, screen 재분류, 오버라이드 흡수)
sumi-0011 Jul 8, 2026
08a13b1
refactor(web): OnePet gotcha 다이얼로그 중앙 정렬 복구
sumi-0011 Jul 8, 2026
de5378a
refactor(web): 파이널 리뷰 피드백 반영 - Quiz Fail/Complete dismiss 차단, useDial…
sumi-0011 Jul 8, 2026
11fabcd
docs(ui-tailwind): Dialog 스토리북 스토리 추가
sumi-0011 Jul 9, 2026
434cf2c
docs(ui-tailwind): Dialog 콘텐츠 오버플로 처리 스토리 추가
sumi-0011 Jul 9, 2026
cd8a20d
refactor(ui-tailwind): Dialog에 뷰포트 여백 20px + Body ScrollArea 적용
sumi-0011 Jul 9, 2026
980c6cf
fix(ui-tailwind): Dialog.Body 스크롤 복구 (ScrollArea 롤백)
sumi-0011 Jul 9, 2026
8260133
fix(ui-tailwind): lg 다이얼로그 flex-1 Body 높이 복원 + max-w JIT 인식 문제 수정
sumi-0011 Jul 9, 2026
8e4d5f9
fix: dialog size 변경
sumi-0011 Jul 10, 2026
68972dc
Merge remote-tracking branch 'origin/dev' into refactor/common-dialog
sumi-0011 Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
'use client';

import { useTranslations } from 'next-intl';
import { Dialog } from '@gitanimals/ui-tailwind';
import { wrap } from '@suspensive/react';
import { overlay } from 'overlay-kit';

import { ConfirmDialog } from '@/components/ConfirmDialog';
import { ROUTE } from '@/constants/route';
import { useRouter } from '@/i18n/routing';

Expand All @@ -24,33 +24,38 @@ const SelectQuizType = wrap
const router = useRouter();
const { isSolved, quizSolveCard } = useTodayQuizData();
const t = useTranslations('Quiz');
const tCommon = useTranslations('Common');

const handleSolveQuiz = () => {
overlay.open(({ isOpen, close }) => (
<ConfirmDialog
isOpen={isOpen}
onClose={close}
<Dialog.Confirm
open={isOpen}
onOpenChange={(open) => !open && close()}
onConfirm={() => {
handleCheckLanguage();
close();
}}
title={t('solve-todays-quiz')}
description={t('solve-todays-quiz-description')}
confirmText={tCommon('confirm')}
cancelText={tCommon('close')}
/>
));
};

const handleCheckLanguage = () => {
overlay.open(({ isOpen, close }) => (
<ConfirmDialog
isOpen={isOpen}
onClose={close}
<Dialog.Confirm
open={isOpen}
onOpenChange={(open) => !open && close()}
onConfirm={() => {
router.push(ROUTE.GAME.QUIZ.SOLVE());
close();
}}
title={t('check-language-for-quiz-dialog-title')}
description={t('check-language-for-quiz-dialog-description')}
confirmText={tCommon('confirm')}
cancelText={tCommon('close')}
/>
));
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@
import React, { useState } from 'react';
import { useTranslations } from 'next-intl';
import { createQuiz } from '@gitanimals/api';
import { Button } from '@gitanimals/ui-tailwind';
import { Button, Dialog } from '@gitanimals/ui-tailwind';
import { overlay } from 'overlay-kit';
import { toast } from 'sonner';

import QuizField from '@/app/[locale]/game/quiz/create/_components/QuizField';
import QuizTextArea from '@/app/[locale]/game/quiz/create/_components/QuizTextArea';
import { ConfirmDialog } from '@/components/ConfirmDialog';
import Tabs from '@/components/Tabs/Tabs';
import TabsList from '@/components/Tabs/TabsList';
import TabsTrigger from '@/components/Tabs/TabsTrigger';
Expand All @@ -34,6 +33,7 @@ const QuizCreateForm = () => {
setQuizContents(e.target.value);
};
const t = useTranslations('Quiz');
const tCommon = useTranslations('Common');

const { tabsTriggerProps: languageRadioProps, selected: language } = useTabs<Locale>({
initialSelectedValue: typedLocale,
Expand All @@ -45,15 +45,17 @@ const QuizCreateForm = () => {

const handleCheckToggleLanguage = () => {
overlay.open(({ isOpen, close }) => (
<ConfirmDialog
<Dialog.Confirm
title={t('toggle-language-title')}
description={t('toggle-language-description')}
isOpen={isOpen}
onClose={close}
open={isOpen}
onOpenChange={(open) => !open && close()}
onConfirm={() => {
toggleLocale();
close();
}}
confirmText={tCommon('confirm')}
cancelText={tCommon('close')}
/>
));
};
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@
import { useEffect, useState } from 'react';
import Image from 'next/image';
import { useTranslations } from 'next-intl';
import { cn } from '@gitanimals/ui-tailwind';
import { Button, cn, Dialog } from '@gitanimals/ui-tailwind';
import { wrap } from '@suspensive/react';

import { Background } from '@/app/[locale]/game/quiz/_components/BackGround';
import CompleteAlertDialog from '@/app/[locale]/game/quiz/solve/_components/done/CompleteAlertDialog';
import FailAlertDialog from '@/app/[locale]/game/quiz/solve/_components/fail/FailAlertDialog';
import QuizProgressBar from '@/app/[locale]/game/quiz/solve/_components/solving/QuizProgressBar';
import CorrectConfirmDialog from '@/app/[locale]/game/quiz/solve/_components/success/CorrectConfirmDialog';
import { QUIZ_ANSWER } from '@/app/[locale]/game/quiz/solve/_constants/solveQuiz.constants';
import { customScrollStyle } from '@/styles/scrollStyle';

import { customT } from '../../../_utils/quiz.intl';
import useQuizAction from '../../_hooks/useQuizAction';
import useQuizData from '../../_hooks/useQuizData';
import useQuizDialogStatus from '../../_hooks/useQuizDialogStatus';
Expand Down Expand Up @@ -90,18 +88,106 @@ const SolvingQuizSection = wrap
</div>
</div>
</div>
<CorrectConfirmDialog
isOpen={correctDialog.isOpen}
onClose={correctDialog.close}
onStop={async () => {
await stopQuiz();
await terminateQuiz();
}}
onConfirm={moveToNextStage}
correctPoint={prize}
/>
<FailAlertDialog isOpen={failDialog.isOpen} onClose={moveToQuizMain} />
<CompleteAlertDialog isOpen={completeDialog.isOpen} onClose={terminateQuiz} completePoint={prize} />
<Dialog open={correctDialog.isOpen} onOpenChange={(open) => !open && stopQuiz().then(() => terminateQuiz())}>
<Dialog.Content
className="flex w-full flex-col items-center gap-[12px]"
isShowClose={false}
onEscapeKeyDown={(e) => e.preventDefault()}
onPointerDownOutside={(e) => e.preventDefault()}
>
<div className="flex w-full flex-col items-center gap-[12px]">
<Dialog.Title className="!glyph24-bold !text-center [font-family:'Product_Sans'] font-bold">
{t('correct-dialog.title')}
</Dialog.Title>
<Dialog.Description className="glyph16-regular text-center [font-family:'Product_Sans'] font-normal text-white-75 [word-break:keep-all]">
{t('correct-dialog.description')}
</Dialog.Description>
</div>
<Image
className="my-[4px]"
src="/assets/game/quiz/quiz-coin.svg"
alt="quiz-coin"
width={160}
height={160}
draggable={false}
/>
<div className="flex w-full flex-col gap-[8px]">
<Button className="w-full" onClick={moveToNextStage} variant="primary" size="m">
{t('correct-dialog.challenge-button')}
</Button>
<Button
className="w-full"
onClick={() => stopQuiz().then(() => terminateQuiz())}
variant="secondary"
size="m"
>
{customT(t('correct-dialog.stop-button'), { point: prize })}
</Button>
</div>
</Dialog.Content>
</Dialog>
<Dialog open={failDialog.isOpen} onOpenChange={(open) => !open && moveToQuizMain()}>
<Dialog.Content
className="flex w-full flex-col items-center gap-[12px]"
isShowClose={false}
onEscapeKeyDown={(e) => e.preventDefault()}
onPointerDownOutside={(e) => e.preventDefault()}
>
<div className="flex w-full flex-col items-center gap-[12px]">
<Dialog.Title className="!glyph24-bold !text-center [font-family:'Product_Sans'] font-bold">
{t('fail-dialog.title')}
</Dialog.Title>
<Dialog.Description className="glyph16-regular text-center [font-family:'Product_Sans'] font-normal text-white-75 [word-break:keep-all]">
{t('fail-dialog.description')}
</Dialog.Description>
</div>
<div className="my-[4px] flex h-[160px] w-[160px] items-center justify-center">
<Image
src="/assets/game/quiz/cursor-unchoiced.webp"
alt="quiz-failed"
width={100}
height={100}
draggable={false}
/>
</div>
<div className="flex w-full">
<Button className="w-full" onClick={moveToQuizMain} variant="secondary" size="m">
{t('fail-dialog.close-button')}
</Button>
</div>
</Dialog.Content>
</Dialog>
<Dialog open={completeDialog.isOpen} onOpenChange={(open) => !open && terminateQuiz()}>
<Dialog.Content
className="flex w-full flex-col items-center gap-[12px]"
isShowClose={false}
onEscapeKeyDown={(e) => e.preventDefault()}
onPointerDownOutside={(e) => e.preventDefault()}
>
<div className="flex w-full flex-col items-center gap-[12px]">
<Dialog.Title className="!glyph24-bold !text-center [font-family:'Product_Sans'] font-bold">
{t('complete-dialog.title')}
</Dialog.Title>
<Dialog.Description className="glyph16-regular text-center [font-family:'Product_Sans'] font-normal text-white-75 [word-break:keep-all]">
{customT(t('complete-dialog.description'), { point: prize })}
</Dialog.Description>
</div>
<div className="my-[4px] flex h-[160px] w-[160px] items-center justify-center">
<Image
src="/assets/game/quiz/quiz-double-coin.webp"
alt="quiz-complete"
width={204}
height={184}
draggable={false}
/>
</div>
<div className="flex w-full">
<Button className="w-full" onClick={terminateQuiz} variant="secondary" size="m">
{t('complete-dialog.close-button')}
</Button>
</div>
</Dialog.Content>
</Dialog>
</>
);
});
Expand Down
Loading
Loading