From db8b32b9da3dd0bbc64255e737874b6ab9093552 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sat, 5 Jul 2025 22:55:07 +0900 Subject: [PATCH 01/15] =?UTF-8?q?refact:=20=EC=B5=9C=EC=8B=A0=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=9E=84=ED=8B=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/home/ui/EventTags.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/home/ui/EventTags.tsx b/src/features/home/ui/EventTags.tsx index 128ffab4..626e0bd3 100644 --- a/src/features/home/ui/EventTags.tsx +++ b/src/features/home/ui/EventTags.tsx @@ -9,8 +9,8 @@ const EventTags = () => { return ( <>
- - + +
From 96282e702797b6f7aacd4469270b8ff0b092a2b9 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sat, 5 Jul 2025 23:14:05 +0900 Subject: [PATCH 02/15] =?UTF-8?q?refact:=20=EB=8C=80=EC=8B=9C=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=EC=9D=B4=EB=A6=84=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/dashboard/ui/EventDetailPage.tsx | 2 +- src/pages/dashboard/ui/EventInfoPage.tsx | 3 ++- src/pages/dashboard/ui/ticket/TicketOptionPage.tsx | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/dashboard/ui/EventDetailPage.tsx b/src/pages/dashboard/ui/EventDetailPage.tsx index e2b2f441..dbf56bfd 100644 --- a/src/pages/dashboard/ui/EventDetailPage.tsx +++ b/src/pages/dashboard/ui/EventDetailPage.tsx @@ -63,7 +63,7 @@ const EventDetailPage = () => { }; return ( - +

이벤트 상세 정보

diff --git a/src/pages/dashboard/ui/EventInfoPage.tsx b/src/pages/dashboard/ui/EventInfoPage.tsx index 0771444b..9560a89b 100644 --- a/src/pages/dashboard/ui/EventInfoPage.tsx +++ b/src/pages/dashboard/ui/EventInfoPage.tsx @@ -89,7 +89,8 @@ const EventInfoPage = () => { }, [data]); return ( - + // +

이벤트 기본 정보

{ : []; return ( - +
티켓에 추가 옵션 부착 하기

From 48b2ab599ae55449be98f4983adef01ca71d1fcb Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sat, 5 Jul 2025 23:21:10 +0900 Subject: [PATCH 03/15] =?UTF-8?q?refact:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=95=88=ED=96=88=EC=9D=84=20=EB=95=8C=20=ED=8B=B0=EC=BC=93=20?= =?UTF-8?q?=EC=95=88=EB=B3=B4=EC=9D=B4=EB=8A=94=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/ticket/api/ticket.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/features/ticket/api/ticket.ts b/src/features/ticket/api/ticket.ts index ff13c35e..1f00fdff 100644 --- a/src/features/ticket/api/ticket.ts +++ b/src/features/ticket/api/ticket.ts @@ -9,6 +9,9 @@ export const createTicket = async (data: CreateTicketRequest) => { export const readTicket = async (eventId: number): Promise<{ isSuccess: boolean; result: ReadTicketResponse[] }> => { const response = await axiosClient.get('/tickets', { params: { eventId }, + headers: { + isPublicApi: true, + }, }); return response.data; }; From 942d63ae094cf92592d2258207873e5ebfe1c8b1 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sat, 5 Jul 2025 23:31:46 +0900 Subject: [PATCH 04/15] =?UTF-8?q?refact:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20html=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EC=95=88=EB=90=98=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/event/ui/EventDetailsPage.tsx | 4 ++-- tailwind.config.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/event/ui/EventDetailsPage.tsx b/src/pages/event/ui/EventDetailsPage.tsx index a3d9b6ba..dbeb6475 100644 --- a/src/pages/event/ui/EventDetailsPage.tsx +++ b/src/pages/event/ui/EventDetailsPage.tsx @@ -114,9 +114,9 @@ const EventDetailsPage = () => {

)}
+ />
{event.result.locationLat !== 0.0 && event.result.locationLng !== 0.0 && ( diff --git a/tailwind.config.js b/tailwind.config.js index f6d522ee..db88af5a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,6 @@ import defaultTheme from 'tailwindcss/defaultTheme'; import scrollbarHide from 'tailwind-scrollbar-hide'; +import typography from '@tailwindcss/typography'; /** @type {import('tailwindcss').Config} */ @@ -89,5 +90,5 @@ export default { lg: '512px', // 큰 화면 }, }, - plugins: [require('tailwind-scrollbar-hide')], + plugins: [require('tailwind-scrollbar-hide'),typography,], }; From 3f3a7ad41ff07e22f9d67affe538ca65760e5462 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sat, 5 Jul 2025 23:53:31 +0900 Subject: [PATCH 05/15] =?UTF-8?q?refact:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=83=81=EC=84=B8,=20=ED=8B=B0=EC=BC=93=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=83=81=EB=8B=A8=EB=B0=94=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/Home.svg | 3 +++ src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx | 7 +++---- src/pages/event/ui/EventDetailsPage.tsx | 10 +++------- 3 files changed, 9 insertions(+), 11 deletions(-) create mode 100644 public/assets/Home.svg diff --git a/public/assets/Home.svg b/public/assets/Home.svg new file mode 100644 index 00000000..11753bdf --- /dev/null +++ b/public/assets/Home.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx b/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx index aee1ce04..fad3dfdf 100644 --- a/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx +++ b/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx @@ -1,6 +1,5 @@ import { useState } from 'react'; import Header from '../../../../../design-system/ui/Header'; -import Search from '../../../../../design-system/icons/Search.svg'; import { useLocation, useNavigate } from 'react-router-dom'; import EmailDeleteModal from '../../../../widgets/dashboard/ui/email/EmailDeleteModal'; import PurchaseBanner from '../../../../widgets/dashboard/ui/ticket/PurchaseBanner'; @@ -8,6 +7,7 @@ import OrganizerInfo from '../../../../widgets/event/ui/OrganizerInfo'; import KakaoMap from '../../../../shared/ui/KakaoMap'; import { useCancelTicket, useTicketOrderDetail } from '../../../../features/ticket/hooks/useOrderHook'; import { TicketConfirm } from '../../../../features/ticket/model/orderInformation'; +import HomeButton from '../../../../../public/assets/Home.svg'; const TicketConfirmPage = () => { const navigate = useNavigate(); @@ -20,7 +20,7 @@ const TicketConfirmPage = () => { const { mutate: cancelTicket } = useCancelTicket(); const handlePreviousButton = () => { - navigate(-1); + navigate("/"); }; const cancleOrderTicket = async (orderIds: number[]) => { cancelTicket(orderIds, { @@ -34,9 +34,8 @@ const TicketConfirmPage = () => {
} centerContent="티켓 구매 확인" - rightContent={검색} /> {isLoading ? (

티켓 정보를 불러오는 중...

diff --git a/src/pages/event/ui/EventDetailsPage.tsx b/src/pages/event/ui/EventDetailsPage.tsx index dbeb6475..a0598122 100644 --- a/src/pages/event/ui/EventDetailsPage.tsx +++ b/src/pages/event/ui/EventDetailsPage.tsx @@ -2,7 +2,6 @@ import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import OrganizerInfo from '../../../widgets/event/ui/OrganizerInfo'; import Header from '../../../../design-system/ui/Header'; -import Search from '../../../../design-system/icons/Search.svg'; import IconButton from '../../../../design-system/ui/buttons/IconButton'; import share from '../../../../public/assets/event-manage/details/Share.svg'; import like from '../../../../public/assets/event-manage/details/Like.svg'; @@ -19,7 +18,7 @@ import { useCreateBookmark, useDeleteBookmark } from '../../../features/bookmark import { formatDate, formatTime } from '../../../shared/lib/date'; import { useEventDetail } from '../../../entities/event/hook/useEventHook'; import useAuthStore from '../../../app/provider/authStore'; - +import HomeButton from '../../../../public/assets/bottomBar/HomeIcon.svg' const EventDetailsPage = () => { const navigate = useNavigate(); const [title, setTitle] = useState(''); @@ -60,12 +59,9 @@ const EventDetailsPage = () => { <>
navigate(-1)} - leftButtonLabel="<" + leftButtonClick={() => navigate('/')} + leftButtonLabel={} centerContent="같이가요" - rightContent={ - 검색 navigate('/search')} /> - } /> {event ? ( <> From 9941d80566fceda26fb52427e601636f4976b017 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 00:14:00 +0900 Subject: [PATCH 06/15] =?UTF-8?q?refact:=20=ED=95=B4=EC=8B=9C=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/ui/EventCard.tsx | 10 +++++++--- src/shared/ui/HashtagCarousel.tsx | 2 -- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/shared/ui/EventCard.tsx b/src/shared/ui/EventCard.tsx index ee39e4a1..d35c6848 100644 --- a/src/shared/ui/EventCard.tsx +++ b/src/shared/ui/EventCard.tsx @@ -52,6 +52,7 @@ const EventCard = ({ const { pathname } = useLocation(); const [isModalOpen, setIsModalOpen] = useState(false); const { mutate } = useEventDeletion(); + const filteredHashtags = hashtags.filter(tag => tag.trim() !== ''); const isHostPage = pathname.startsWith(`/menu/myHost`) || pathname.startsWith(`/menu/hostDetail`); @@ -94,11 +95,14 @@ const EventCard = ({ {/* 승인 여부 표시 */} {children} {/* 해시태그 */} - {hashtags && ( - e.stopPropagation()} /> + {filteredHashtags && ( + e.stopPropagation()} + /> )} - {/* 대시보드 버튼 */} + {/* 대시보드 버튼 */} {isHostPage && (
{ } }; - console.log('hashtagSlides', hashtagSlides); - return (
{!isAtStart && ( From 52de5908802944ad08479f03a3fe8987175b5765 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 01:18:37 +0900 Subject: [PATCH 07/15] =?UTF-8?q?feat:=20mail=20search=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/routes/Router.tsx | 2 +- src/entities/event/api/event.ts | 5 +++++ src/pages/dashboard/ui/EventTagPage.tsx | 12 +++++++++--- src/pages/dashboard/ui/mail/MailBoxPage.tsx | 21 ++++++++++++++++++--- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/app/routes/Router.tsx b/src/app/routes/Router.tsx index 3b19b7c6..2e5a6e66 100644 --- a/src/app/routes/Router.tsx +++ b/src/app/routes/Router.tsx @@ -80,7 +80,7 @@ const dashboardRoutes = [ { path: DASHBOARD_ROUTES.dashboard, element: , requiresAuth: false }, { path: DASHBOARD_ROUTES.eventInfo, element: , requiresAuth: false }, { path: DASHBOARD_ROUTES.eventDetail, element: , requiresAuth: false }, - { path: DASHBOARD_ROUTES.eventTag, element: , requiresAuth: false }, + { path: DASHBOARD_ROUTES.eventTag, element: (),requiresAuth: false,}, { path: DASHBOARD_ROUTES.ticketCreate, element: , requiresAuth: false }, { path: DASHBOARD_ROUTES.ticket, element: , requiresAuth: false }, { path: DASHBOARD_ROUTES.ticketOption, element: , requiresAuth: false }, diff --git a/src/entities/event/api/event.ts b/src/entities/event/api/event.ts index 866aba30..0fd69c87 100644 --- a/src/entities/event/api/event.ts +++ b/src/entities/event/api/event.ts @@ -87,3 +87,8 @@ export const eventDeletion = async (eventId: number) => { const response = await axiosClient.delete(`/events/${eventId}`); return response.data; }; + + +// 해시태그 조회 + +// 해시태그 수정 diff --git a/src/pages/dashboard/ui/EventTagPage.tsx b/src/pages/dashboard/ui/EventTagPage.tsx index f0755758..bbfa11d2 100644 --- a/src/pages/dashboard/ui/EventTagPage.tsx +++ b/src/pages/dashboard/ui/EventTagPage.tsx @@ -1,23 +1,29 @@ -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useParams } from 'react-router-dom'; import DashboardLayout from '../../../shared/ui/backgrounds/DashboardLayout'; import Button from '../../../../design-system/ui/Button'; import EventCategory from '../../../features/event/ui/EventCategory'; import EventTag from '../../../features/event/ui/EventTag'; +import { useFunnelState } from '../../../features/event/model/FunnelContext'; const EventTagPage = () => { const navigate = useNavigate(); + const { eventState, setEventState } = useFunnelState(); + const { id } = useParams(); + const handleEventTag = (hashtagId : number) => { + navigate(`/dashboard/${id}`); + } return (

이벤트 태그 정보

- +
diff --git a/src/pages/dashboard/ui/mail/MailBoxPage.tsx b/src/pages/dashboard/ui/mail/MailBoxPage.tsx index 53c4df87..da2f81c8 100644 --- a/src/pages/dashboard/ui/mail/MailBoxPage.tsx +++ b/src/pages/dashboard/ui/mail/MailBoxPage.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useMemo, useState } from 'react'; import TextButton from '../../../../../design-system/ui/buttons/TextButton'; import DashboardLayout from '../../../../shared/ui/backgrounds/DashboardLayout'; import SearchBar from '../../../../shared/ui/SearchBar'; @@ -13,11 +13,21 @@ const MailBoxPage = () => { const [listType, setListType] = useState<'completed' | 'pending'>('completed'); const [isModalOpen, setIsModalOpen] = useState(false); const [selectedEmailId, setSelectedEmailId] = useState(null); + const [searchKeyword, setSearchKeyword] = useState(''); const status = listType === 'pending' ? 'PENDING' : 'SENT'; const { data: emails = [], isLoading } = useReadEmail(eventId, status); const { mutate: deleteEmail } = useDeleteEmail(); + const filteredEmails = useMemo(() => { + if (!searchKeyword.trim()) return emails; + const keyword = searchKeyword.toLowerCase(); + return emails.filter(email => + email.title.toLowerCase().includes(keyword) || + email.targetName.toLowerCase().includes(keyword) + ); +}, [emails, searchKeyword]); + const handleDelete = (reservationEmailId: number) => { deleteEmail(reservationEmailId); setIsModalOpen(false); @@ -28,7 +38,12 @@ const MailBoxPage = () => {

보낸 메일함

- +
{ {isLoading ? (
로딩 중...
) : ( - emails.map(mail => ( + filteredEmails.map(mail => ( Date: Sun, 6 Jul 2025 01:56:20 +0900 Subject: [PATCH 08/15] =?UTF-8?q?feat:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EA=B3=B5=EC=9C=A0=20=EB=AA=A8=EB=8B=AC=20?= =?UTF-8?q?=EB=93=9C=EB=9E=98=EA=B7=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/event/ui/ShareEventModal.tsx | 50 ++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/features/event/ui/ShareEventModal.tsx b/src/features/event/ui/ShareEventModal.tsx index 0e7bbe60..893c8d4e 100644 --- a/src/features/event/ui/ShareEventModal.tsx +++ b/src/features/event/ui/ShareEventModal.tsx @@ -3,6 +3,7 @@ import kakao from '../../../../public/assets/event-manage/details/KaKao.svg'; import { shareToKakao } from '../../../shared/lib/kakaoShare'; import stripHtml from '../lib/stripHtml'; import EventInfo from '../../../entities/user/ui/EventInfo'; +import { useRef } from 'react'; interface ShareEventModalProps { closeModal: () => void; @@ -20,6 +21,47 @@ const ShareEventModal = ({ eventUrl = window.location.href, }: ShareEventModalProps) => { const description = stripHtml(eventDescription); + const startYRef = useRef(null); + const modalRef = useRef(null); + + const handleTouchStart = (e: React.TouchEvent) => { + startYRef.current = e.touches[0].clientY; + }; + + const handleTouchMove = (e: React.TouchEvent) => { + const startY = startYRef.current; + if (startY === null) return; + + const deltaY = e.touches[0].clientY - startY; + + // 모달이 따라 내려오는 효과 (optional) + if (modalRef.current && deltaY > 0) { + modalRef.current.style.transform = `translateY(${deltaY}px)`; + } + }; + + const handleTouchEnd = (e: React.TouchEvent) => { + const startY = startYRef.current; + if (startY === null) return; + + const endY = e.changedTouches[0].clientY; + const deltaY = endY - startY; + + if (deltaY > 100) { + // 일정 거리 이상 내려갔을 때 모달 닫기 + closeModal(); + } else { + // 다시 원위치 + if (modalRef.current) { + modalRef.current.style.transform = 'translateY(0)'; + modalRef.current.style.transition = 'transform 0.2s ease-out'; + setTimeout(() => { + if (modalRef.current) modalRef.current.style.transition = ''; + }, 200); + } + } + startYRef.current = null; + }; const handleKakaoShare = async () => { try { @@ -66,7 +108,13 @@ const ShareEventModal = ({ return (
-
e.stopPropagation()} className="relative w-full max-w-lg bg-white rounded-t-[20px] px-6 py-4"> +
From caba299a62a0826c1502a3ab603015de03fba239 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 01:59:38 +0900 Subject: [PATCH 09/15] =?UTF-8?q?refact:=20home=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx b/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx index fad3dfdf..29014497 100644 --- a/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx +++ b/src/pages/dashboard/ui/ticket/TIcketConfirmPage.tsx @@ -7,7 +7,7 @@ import OrganizerInfo from '../../../../widgets/event/ui/OrganizerInfo'; import KakaoMap from '../../../../shared/ui/KakaoMap'; import { useCancelTicket, useTicketOrderDetail } from '../../../../features/ticket/hooks/useOrderHook'; import { TicketConfirm } from '../../../../features/ticket/model/orderInformation'; -import HomeButton from '../../../../../public/assets/Home.svg'; +import HomeButton from '../../../../../public/assets/bottomBar/HomeIcon.svg'; const TicketConfirmPage = () => { const navigate = useNavigate(); From 87e68f0df6e2183bcefeba2f713ed1b0b2a8e643 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 13:43:03 +0900 Subject: [PATCH 10/15] =?UTF-8?q?refact:=20=ED=95=B4=EC=8B=9C=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/event/api/event.ts | 4 --- src/pages/dashboard/ui/EventTagPage.tsx | 40 +++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/entities/event/api/event.ts b/src/entities/event/api/event.ts index 0fd69c87..426c4d85 100644 --- a/src/entities/event/api/event.ts +++ b/src/entities/event/api/event.ts @@ -88,7 +88,3 @@ export const eventDeletion = async (eventId: number) => { return response.data; }; - -// 해시태그 조회 - -// 해시태그 수정 diff --git a/src/pages/dashboard/ui/EventTagPage.tsx b/src/pages/dashboard/ui/EventTagPage.tsx index bbfa11d2..96c24b30 100644 --- a/src/pages/dashboard/ui/EventTagPage.tsx +++ b/src/pages/dashboard/ui/EventTagPage.tsx @@ -4,15 +4,49 @@ import Button from '../../../../design-system/ui/Button'; import EventCategory from '../../../features/event/ui/EventCategory'; import EventTag from '../../../features/event/ui/EventTag'; import { useFunnelState } from '../../../features/event/model/FunnelContext'; +import { useUpdateEventHook } from '../../../features/dashboard/hook/useEventHook'; +import { useEventDetail } from '../../../entities/event/hook/useEventHook'; +import { useEffect } from 'react'; const EventTagPage = () => { const navigate = useNavigate(); const { eventState, setEventState } = useFunnelState(); const { id } = useParams(); - const handleEventTag = (hashtagId : number) => { - navigate(`/dashboard/${id}`); + const { mutate } = useUpdateEventHook(); + const { data } = useEventDetail(); + useEffect(() => { + console.log(data.result) + if (data?.result.hashtags && setEventState) { + setEventState(prev => ({ + ...prev, + hashtags: data.result.hashtags, + })); + } + }, [data, setEventState]); + const handleEventTag = () => { + if (!id || !data?.result) return; + + const cleanedTags = eventState.hashtags.filter(tag => tag.trim() !== ''); + + const requestData = { + ...data.result, + // hostChannelId: data.result.hostChannelId, + hostChannelId: 5, + hashtags: cleanedTags, + }; + + mutate(requestData, { + onSuccess: () => { + alert('이벤트 정보가 저장되었습니다.'); + navigate(`/dashboard/${id}`); + }, + onError: () => { + alert('저장에 실패했습니다.'); + }, + }); } + return (
@@ -23,7 +57,7 @@ const EventTagPage = () => {
From 8aab0e6896e068b7d05e3458b5917a550880bf82 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 15:52:56 +0900 Subject: [PATCH 11/15] =?UTF-8?q?refact:=20=EB=B3=B8=EB=AC=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EC=95=88=EB=90=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/event/ui/TextEditor.tsx | 31 +++++++++++----------- src/pages/dashboard/ui/EventDetailPage.tsx | 12 ++++++--- src/pages/dashboard/ui/EventTagPage.tsx | 4 +-- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/features/event/ui/TextEditor.tsx b/src/features/event/ui/TextEditor.tsx index 5dee2a8d..e37c8752 100644 --- a/src/features/event/ui/TextEditor.tsx +++ b/src/features/event/ui/TextEditor.tsx @@ -87,22 +87,23 @@ const TextEditor = ({ eventState, setEventState, value = '', onChange, onValidat }; const handleChange = (val: string) => { - const totalLength = getTotalContentLength(val); - - if (totalLength <= MAX_LENGTH) { - setEditorContent(val); - onChange?.(val); - setEventState?.(prev => ({ ...prev, description: val })); - onValidationChange?.(getPlainText(val).length > 0); - setIsOverLimit(false); - } else { - const editorInstance = quillRef.current?.getEditor(); - if (editorInstance) { - editorInstance.setContents(editorInstance.clipboard.convert(eventState?.description)); - } - setIsOverLimit(true); + const totalLength = getTotalContentLength(val); + + if (totalLength <= MAX_LENGTH) { + setEditorContent(val); + onChange?.(val); + setEventState?.(prev => ({ ...prev, description: val })); + onValidationChange?.(getPlainText(val).length > 0); + setIsOverLimit(false); + } else { + const editorInstance = quillRef.current?.getEditor(); + if (editorInstance) { + editorInstance.clipboard.dangerouslyPasteHTML(eventState?.description ?? ''); } - }; + setIsOverLimit(true); + } +}; + useEffect(() => { onValidationChange?.(getPlainText(editorContent).length > 0); diff --git a/src/pages/dashboard/ui/EventDetailPage.tsx b/src/pages/dashboard/ui/EventDetailPage.tsx index dbf56bfd..29969ad7 100644 --- a/src/pages/dashboard/ui/EventDetailPage.tsx +++ b/src/pages/dashboard/ui/EventDetailPage.tsx @@ -9,6 +9,7 @@ import { useUpdateEventHook } from '../../../features/dashboard/hook/useEventHoo import { UpdateEventRequest } from '../../../features/dashboard/model/event'; import { OnlineType } from '../../../shared/types/baseEventType'; import { useEventDetail } from '../../../entities/event/hook/useEventHook'; +import { useQueryClient } from '@tanstack/react-query'; const EventDetailPage = () => { const navigate = useNavigate(); @@ -20,10 +21,13 @@ const EventDetailPage = () => { const [description, setDescription] = useState(''); const [referenceLinks, setReferenceLinks] = useState([]); + const queryClient = useQueryClient(); + useEffect(() => { + console.log(data?.result.bannerImageUrl) if (data?.result) { setHostChannelId(data.result.hostChannelId || 0); - setBannerImageUrl(data.result.bannerImageUrl || ''); + setBannerImageUrl(prev => prev || data.result.bannerImageUrl || ''); setDescription(data.result.description || ''); setReferenceLinks(data.result.referenceLinks || []); } @@ -37,7 +41,7 @@ const EventDetailPage = () => { title: data.result.title, startDate: data.result.startDate, endDate: data.result.endDate, - bannerImageUrl: bannerImageUrl || data.result.bannerImageUrl || '', + bannerImageUrl: bannerImageUrl.trim() !== '' ? bannerImageUrl : data.result.bannerImageUrl || '', description: description || data.result.description || '', referenceLinks: referenceLinks.map(({ title, url }) => ({ title, url })) || data.result.referenceLinks || [], onlineType: data.result.onlineType as OnlineType, @@ -54,6 +58,8 @@ const EventDetailPage = () => { mutate(requestData, { onSuccess: () => { alert('이벤트 정보가 저장되었습니다.'); + queryClient.invalidateQueries({ queryKey: ['eventDetail', data?.result.id] }); + navigate(`/dashboard/${data?.result.id}`); }, onError: () => { @@ -67,7 +73,7 @@ const EventDetailPage = () => {

이벤트 상세 정보

- +
diff --git a/src/pages/dashboard/ui/EventTagPage.tsx b/src/pages/dashboard/ui/EventTagPage.tsx index 96c24b30..cba82a54 100644 --- a/src/pages/dashboard/ui/EventTagPage.tsx +++ b/src/pages/dashboard/ui/EventTagPage.tsx @@ -15,7 +15,6 @@ const EventTagPage = () => { const { mutate } = useUpdateEventHook(); const { data } = useEventDetail(); useEffect(() => { - console.log(data.result) if (data?.result.hashtags && setEventState) { setEventState(prev => ({ ...prev, @@ -30,8 +29,7 @@ const EventTagPage = () => { const requestData = { ...data.result, - // hostChannelId: data.result.hostChannelId, - hostChannelId: 5, + hostChannelId: data.result.hostChannelId, hashtags: cleanedTags, }; From fc53e316ad49b147ff7d8b8a169efaf7346688da Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 17:55:43 +0900 Subject: [PATCH 12/15] =?UTF-8?q?refact:=20=EC=9D=B4=EC=9A=A9=EC=95=BD?= =?UTF-8?q?=EA=B4=80=20=EB=8F=99=EC=9D=98=20=EC=97=90=EB=9F=AC=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/join/hooks/useUserHook.ts | 5 ++--- src/pages/join/InfoInputPage.tsx | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/features/join/hooks/useUserHook.ts b/src/features/join/hooks/useUserHook.ts index 9d8e6215..626b7114 100644 --- a/src/features/join/hooks/useUserHook.ts +++ b/src/features/join/hooks/useUserHook.ts @@ -22,9 +22,8 @@ export const useUserUpdate = () => { export const useAgreeTerms = () => { return useMutation({ mutationFn: agreeTerms, - onError: (error) => { - alert('동의 처리 실패'); - console.error('이용약관 동의 실패', error); + onError: () => { + alert('약관 동의 처리에 실패했습니다.'); } }); }; \ No newline at end of file diff --git a/src/pages/join/InfoInputPage.tsx b/src/pages/join/InfoInputPage.tsx index 8659a196..ce675e57 100644 --- a/src/pages/join/InfoInputPage.tsx +++ b/src/pages/join/InfoInputPage.tsx @@ -64,9 +64,6 @@ const InfoInputPage = () => { alert('회원가입이 완료되었습니다.'); navigate('/'); }, - onError: () => { - alert('약관 동의 처리에 실패했습니다.'); - }, } ); }, From a64a847dd1f834c4266045dc3dde8589a7161782 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 20:36:39 +0900 Subject: [PATCH 13/15] =?UTF-8?q?refact:=20tailwind.config=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tailwind.config.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tailwind.config.js b/tailwind.config.js index db88af5a..2716d25d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,6 +1,5 @@ import defaultTheme from 'tailwindcss/defaultTheme'; import scrollbarHide from 'tailwind-scrollbar-hide'; -import typography from '@tailwindcss/typography'; /** @type {import('tailwindcss').Config} */ @@ -90,5 +89,5 @@ export default { lg: '512px', // 큰 화면 }, }, - plugins: [require('tailwind-scrollbar-hide'),typography,], + plugins: [require('tailwind-scrollbar-hide'),require('@tailwindcss/typography'),], }; From 06a57513884c94397aa249e400e0eb9ca01ef1ab Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 20:45:31 +0900 Subject: [PATCH 14/15] =?UTF-8?q?refact:=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tailwind.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tailwind.config.js b/tailwind.config.js index 2716d25d..039e9e00 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -89,5 +89,5 @@ export default { lg: '512px', // 큰 화면 }, }, - plugins: [require('tailwind-scrollbar-hide'),require('@tailwindcss/typography'),], + plugins: [require('tailwind-scrollbar-hide'),require('@tailwindcss/typography')], }; From c672a85a43fada088f348c556f4f61cb208fca34 Mon Sep 17 00:00:00 2001 From: hyeeuncho Date: Sun, 6 Jul 2025 20:52:42 +0900 Subject: [PATCH 15/15] =?UTF-8?q?fix:storybook=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + yarn.lock | 134 ++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 97 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 6dc153f4..066eb6ab 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "dependencies": { "@hello-pangea/dnd": "^18.0.1", "@hookform/resolvers": "^4.1.3", + "@tailwindcss/typography": "^0.5.16", "@tanstack/react-query": "^5.61.3", "@tanstack/react-query-devtools": "^5.76.1", "autoprefixer": "^10.4.20", @@ -27,6 +28,7 @@ "lodash": "^4.17.21", "postcss": "^8.4.49", "qr-scanner": "^1.4.2", + "quill": "2", "react": "^18.3.1", "react-datepicker": "^7.5.0", "react-daum-postcode": "^3.2.0", diff --git a/yarn.lock b/yarn.lock index f3fae70b..37472ed1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -124,18 +124,13 @@ dependencies: "@babel/types" "^7.27.0" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.22.15", "@babel/runtime@^7.26.7": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.22.15", "@babel/runtime@^7.26.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.27.0" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz" integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz" - integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== - "@babel/template@^7.26.9", "@babel/template@^7.27.0": version "7.27.0" resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz" @@ -978,9 +973,19 @@ dependencies: "@swc/counter" "^0.1.3" +"@tailwindcss/typography@^0.5.16": + version "0.5.16" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.16.tgz#a926c8f44d5c439b2915e231cad80058850047c6" + integrity sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA== + dependencies: + lodash.castarray "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + postcss-selector-parser "6.0.10" + "@tanstack/query-core@5.80.7": version "5.80.7" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.80.7.tgz#e029b26cad02fc5fe64116ac245aad0c3e5f83b4" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.7.tgz" integrity sha512-s09l5zeUKC8q7DCCCIkVSns8zZrK4ZDT6ryEjxNBFi68G4z2EBobBS7rdOY3r6W1WbUDpc1fe5oY+YO/+2UVUg== "@tanstack/query-devtools@5.76.0": @@ -997,7 +1002,7 @@ "@tanstack/react-query@^5.61.3": version "5.80.7" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.80.7.tgz#664f62f42d9ae892c07543fc64f53898aad57afa" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.7.tgz" integrity sha512-u2F0VK6+anItoEvB3+rfvTO9GEh2vb00Je05OwlUe/A0lkJBgW1HckiY3f9YZa+jx6IOe4dHPh10dyp9aY3iRQ== dependencies: "@tanstack/query-core" "5.80.7" @@ -1074,7 +1079,7 @@ "@types/classnames@^2.3.4": version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.4.tgz#1a1fdf5023ef216219f13e702543f9ce9b394560" + resolved "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.4.tgz" integrity sha512-dwmfrMMQb9ujX1uYGvB5ERDlOzBNywnZAZBtOe107/hORWP05ESgU4QyaanZMWYYfd2BzrG78y13/Bju8IQcMQ== dependencies: classnames "*" @@ -1179,7 +1184,7 @@ "@types/offscreencanvas@^2019.6.4": version "2019.7.3" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz#90267db13f64d6e9ccb5ae3eac92786a7c77a516" + resolved "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz" integrity sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A== "@types/prop-types@*": @@ -1430,18 +1435,13 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.3.0: +aria-query@5.3.0, aria-query@^5.0.0: version "5.3.0" resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" -aria-query@^5.0.0: - version "5.3.2" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz" - integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== - assertion-error@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz" @@ -1636,12 +1636,12 @@ chromatic@^11.15.0, chromatic@^11.22.0: classnames@*, classnames@^2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -2153,6 +2153,11 @@ eventemitter3@^4.0.1: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + extend@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" @@ -2168,6 +2173,11 @@ fast-diff@1.1.2: resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz" integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== +fast-diff@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + fast-equals@^5.0.1: version "5.2.2" resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz" @@ -2287,7 +2297,7 @@ framer-motion@^12.4.7: fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: @@ -2307,7 +2317,7 @@ gensync@^1.0.0-beta.2: get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: @@ -2662,6 +2672,31 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.castarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz" + integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" @@ -2905,6 +2940,11 @@ parchment@^1.1.2, parchment@^1.1.4: resolved "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz" integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg== +parchment@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz" + integrity sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" @@ -3008,6 +3048,14 @@ postcss-nested@^6.2.0: dependencies: postcss-selector-parser "^6.1.1" +postcss-selector-parser@6.0.10: + version "6.0.10" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: version "6.1.2" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" @@ -3089,6 +3137,25 @@ quill-delta@^3.6.2: extend "^3.0.2" fast-diff "1.1.2" +quill-delta@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz" + integrity sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA== + dependencies: + fast-diff "^1.3.0" + lodash.clonedeep "^4.5.0" + lodash.isequal "^4.5.0" + +quill@2: + version "2.0.3" + resolved "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz" + integrity sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw== + dependencies: + eventemitter3 "^5.0.1" + lodash-es "^4.17.21" + parchment "^3.0.0" + quill-delta "^5.1.0" + quill@^1.3.7: version "1.3.7" resolved "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz" @@ -3239,7 +3306,7 @@ react-transition-group@^4.4.5: react-virtuoso@^4.13.0: version "4.13.0" - resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.13.0.tgz#908197f1afd60993c7953897dacf0aff30028304" + resolved "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.13.0.tgz" integrity sha512-XHv2Fglpx80yFPdjZkV9d1baACKghg/ucpDFEXwaix7z0AfVQj+mF6lM+YQR6UC/TwzXG2rJKydRMb3+7iV3PA== "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", react@^18.3.1: @@ -3327,7 +3394,7 @@ regexp.prototype.flags@^1.5.1: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== resolve-from@^4.0.0: @@ -3351,7 +3418,7 @@ reusify@^1.0.4: rollup-plugin-visualizer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.3.tgz#d05bd17e358a6d04bf593cf73556219c9c6d8dad" + resolved "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.3.tgz" integrity sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw== dependencies: open "^8.0.0" @@ -3472,7 +3539,7 @@ source-map-js@^1.2.1: source-map@^0.7.4: version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== source-map@~0.6.1: @@ -3488,7 +3555,6 @@ storybook@^8.4.6: "@storybook/core" "8.6.9" "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - name string-width-cjs version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3507,7 +3573,6 @@ string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - name strip-ansi-cjs version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -3834,7 +3899,7 @@ word-wrap@^1.2.5: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -3843,15 +3908,6 @@ word-wrap@^1.2.5: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" @@ -3868,7 +3924,7 @@ ws@^8.2.3: y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: @@ -3883,12 +3939,12 @@ yaml@^2.3.4: yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.5.1: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1"