diff --git a/package.json b/package.json
index 44840dcc..aee5979b 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
"@emotion/styled": "^11.11.0",
"@sentry/browser": "^7.93.0",
"@sentry/react": "^7.93.0",
- "@sentry/vite-plugin": "^2.10.2",
+ "@sentry/vite-plugin": "^2.14.1",
"axios": "^1.6.5",
"eslint-plugin-react": "^7.33.2",
"grapheme-splitter": "^1.0.4",
@@ -27,7 +27,6 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-draggable": "^4.4.6",
- "react-error-boundary": "^4.0.12",
"react-query": "^3.39.3",
"react-router-dom": "^6.21.1",
"vite-plugin-svgr": "^4.2.0"
diff --git a/src/Home/api/getLecueBook.ts b/src/Home/api/getLecueBook.ts
index 336d2a2b..28a38c07 100644
--- a/src/Home/api/getLecueBook.ts
+++ b/src/Home/api/getLecueBook.ts
@@ -2,7 +2,7 @@ import { api } from '../../libs/api';
const getLecueBook = async () => {
const { data } = await api.get('/api/common/home');
- return data;
+ return data.data;
};
export default getLecueBook;
diff --git a/src/Home/components/LecueBookList/LecueBookList.style.ts b/src/Home/components/LecueBookList/LecueBookList.style.ts
index 411e6889..d1079d34 100644
--- a/src/Home/components/LecueBookList/LecueBookList.style.ts
+++ b/src/Home/components/LecueBookList/LecueBookList.style.ts
@@ -25,11 +25,11 @@ export const Title = styled.header`
export const LecueBookList = styled.section`
display: grid;
- gap: 2.2rem;
+ gap: 2em 2.4rem;
grid-template-columns: repeat(3, 1fr);
width: 100%;
- padding: 3rem 1.6rem 2.2rem;
+ padding: 3rem 1.6rem;
`;
export const LecueBook = styled.li`
@@ -38,13 +38,19 @@ export const LecueBook = styled.li`
justify-content: center;
align-items: center;
flex-direction: column;
+ position: relative;
width: 100%;
- height: 14rem;
cursor: pointer;
`;
+export const IconWrapper = styled.button`
+ position: absolute;
+ top: 0;
+ left: 0.1rem;
+`;
+
export const BookImage = styled.img`
width: 9.8rem;
height: 9.8rem;
diff --git a/src/Home/components/LecueBookList/index.tsx b/src/Home/components/LecueBookList/index.tsx
index 0bad82f7..4eda671e 100644
--- a/src/Home/components/LecueBookList/index.tsx
+++ b/src/Home/components/LecueBookList/index.tsx
@@ -1,8 +1,10 @@
-// import { useNavigate } from 'react-router-dom';
-
-import { useNavigate } from 'react-router-dom';
+import { useNavigate } from 'react-router';
+import { IcHomeFavorite } from '../../../assets';
+import useDeleteFavorite from '../../../libs/hooks/useDeleteFavorite';
+import useGetFavorite from '../../../libs/hooks/useGetFavorite';
import useGetLecueBook from '../../hooks/useGetLecueBook';
+import NoBookmarkList from '../NoBookmarkList';
import * as S from './LecueBookList.style';
interface BookProps {
@@ -12,29 +14,51 @@ interface BookProps {
favoriteName: string;
}
-function LecueBookList() {
- const { data } = useGetLecueBook();
+interface LecueBookListProps {
+ title: string;
+}
+
+function LecueBookList({ title }: LecueBookListProps) {
const navigate = useNavigate();
+ const deleteMutation = useDeleteFavorite();
+ const isBookmark = title.includes('즐겨찾기');
+ const { data } = isBookmark ? useGetFavorite() : useGetLecueBook();
const handleClickLecueBook = (uuid: string) => {
navigate(`/lecue-book/${uuid}`);
};
+ const handleClickFavoriteIcon = (bookId: number) => {
+ deleteMutation.mutate(bookId);
+ };
+
return (
- 인기 레큐북 구경하기
-
- {data &&
- data.data.map((book: BookProps) => (
- handleClickLecueBook(book.bookUuid)}
- >
-
+ {title}
+ {data && data.length !== 0 ? (
+
+ {data.map((book: BookProps) => (
+
+ {isBookmark && (
+ handleClickFavoriteIcon(book.bookId)}
+ >
+
+
+ )}
+
+ handleClickLecueBook(book.bookUuid)}
+ />
{book.favoriteName}
))}
-
+
+ ) : (
+
+ )}
);
}
diff --git a/src/Home/components/NavigateLecueBook/NavigateLecueBook.style.ts b/src/Home/components/NavigateLecueBook/NavigateLecueBook.style.ts
index 3af55d88..03fbf33a 100644
--- a/src/Home/components/NavigateLecueBook/NavigateLecueBook.style.ts
+++ b/src/Home/components/NavigateLecueBook/NavigateLecueBook.style.ts
@@ -8,32 +8,30 @@ export const MainWrapper = styled.div`
export const IconWrapper = styled.section`
display: flex;
- gap: 15.7rem;
- justify-content: space-between;
+
+ /* 바뀔 수 있을 것 같으니 디자인 나오면 다시 확인해보기 ! */
+ gap: 16rem;
align-items: baseline;
width: 100%;
- padding: 6rem 1.6rem 5rem;
+ margin: 4rem 1.8rem 3.5rem 1.6rem;
`;
-export const ButtonWrapper = styled.section`
- display: flex;
- gap: 1rem;
- flex-direction: column;
+export const DummyGraphic = styled.div`
+ width: 37.5rem;
+ height: 20rem;
- padding: 0 9.5rem 4.9rem 0;
+ background-color: ${({ theme }) => theme.colors.LG};
`;
-export const Button = styled.button<{ variant?: boolean }>`
- width: 28rem;
- height: 6.4rem;
+export const Button = styled.button`
+ padding: 2.1rem 9.4rem 2.2rem 8.8rem;
+ margin: 2rem 0 4rem;
border: 0.1rem solid ${({ theme }) => theme.colors.BG};
border-radius: 0 0.2rem 0.2rem 0;
border-left: none;
- background-color: ${({ theme, variant }) =>
- variant ? theme.colors.white : theme.colors.BG};
- color: ${({ theme, variant }) =>
- variant ? theme.colors.BG : theme.colors.white};
+ background-color: ${({ theme }) => theme.colors.BG};
+ color: ${({ theme }) => theme.colors.white};
${({ theme }) => theme.fonts.Title1_SB_16}
`;
diff --git a/src/Home/components/NavigateLecueBook/index.tsx b/src/Home/components/NavigateLecueBook/index.tsx
index 29b9e660..6215939f 100644
--- a/src/Home/components/NavigateLecueBook/index.tsx
+++ b/src/Home/components/NavigateLecueBook/index.tsx
@@ -1,18 +1,23 @@
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
-import { IcNotice, ImgLogoLecue } from '../../../assets';
+import { IcProfile, ImgLogoLecue } from '../../../assets';
import CommonModal from '../../../components/common/Modal/CommonModal';
import * as S from './NavigateLecueBook.style';
function NavigateLecueBook() {
- const NAVIGATE_CATEGORY = ['레큐북 만들기', '내 기록 보기'];
const navigate = useNavigate();
const [modalOn, setModalOn] = useState(false);
- const handleClickNavBtn = (idx: number) => {
+ const handleClickIcProfile = () => {
+ const token = localStorage.getItem('token');
+
+ navigate('/mypage', { state: token });
+ };
+
+ const handleClickNavBtn = () => {
if (localStorage.getItem('token')) {
- idx === 0 ? navigate('/target') : navigate('/mypage');
+ navigate('/target');
} else {
setModalOn(true);
}
@@ -22,29 +27,16 @@ function NavigateLecueBook() {
-
-
-
+
+
-
- {NAVIGATE_CATEGORY.map((category, idx) => {
- return (
- handleClickNavBtn(idx)}
- >
- {category}
-
- );
- })}
-
+ {/* 임시로 넣은 것! 추후 새로운 그래픽으로 수정 */}
+
+
+
+ 레큐북 만들기
+
{modalOn && (
theme.colors.BG};
+ ${({ theme }) => theme.fonts.Body2_M_14};
+`;
+
+export const NavigateBtn = styled.button`
+ padding: 0.8rem 2.8rem;
+
+ border: 0.1rem solid ${({ theme }) => theme.colors.BG};
+ border-radius: 0.6rem;
+ background-color: ${({ theme }) => theme.colors.white};
+ color: ${({ theme }) => theme.colors.BG};
+ ${({ theme }) => theme.fonts.Body4_SB_14};
+`;
diff --git a/src/Home/components/NoBookmarkList/index.tsx b/src/Home/components/NoBookmarkList/index.tsx
new file mode 100644
index 00000000..c2c43909
--- /dev/null
+++ b/src/Home/components/NoBookmarkList/index.tsx
@@ -0,0 +1,28 @@
+import { useNavigate } from 'react-router';
+
+import * as S from './NoBookmarkList.style';
+
+const NoBookmarkList = () => {
+ const navigate = useNavigate();
+
+ const handleClickNavigateBtn = () => {
+ navigate('/mypage');
+ };
+
+ return (
+
+
+ 아직 즐겨찾기한 레큐북이 없어요.
+
+ 자주 보고 싶은 레큐북을 즐겨찾기 해보세요.
+
+
+
+
+ 레큐북 보러가기
+
+
+ );
+};
+
+export default NoBookmarkList;
diff --git a/src/Home/hooks/.gitkeep b/src/Home/hooks/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/Home/hooks/useGetLecueBook.ts b/src/Home/hooks/useGetLecueBook.ts
index 0fa4627e..a43b43ea 100644
--- a/src/Home/hooks/useGetLecueBook.ts
+++ b/src/Home/hooks/useGetLecueBook.ts
@@ -6,14 +6,14 @@ import getLecueBook from '../api/getLecueBook';
const useGetLecueBook = () => {
const navigate = useNavigate();
- const { isLoading, data } = useQuery({
+ const { isLoading: isLoadingLecueBook, data: lecueBook } = useQuery({
queryKey: ['get-lecue-book'],
queryFn: () => getLecueBook(),
onError: () => navigate('/error'),
refetchOnWindowFocus: false,
});
- return { isLoading, data };
+ return { isLoading: isLoadingLecueBook, data: lecueBook };
};
export default useGetLecueBook;
diff --git a/src/Home/page/index.tsx b/src/Home/page/index.tsx
index 1c4c3db5..9d640380 100644
--- a/src/Home/page/index.tsx
+++ b/src/Home/page/index.tsx
@@ -8,18 +8,21 @@ import useGetLecueBook from '../hooks/useGetLecueBook';
import * as S from './Home.style';
function Home({ handleStep }: StepProps) {
- const { isLoading } = useGetLecueBook();
+ const token = localStorage.getItem('token');
+ const { isLoading: isLoadingLecueBook } = useGetLecueBook();
useEffect(() => {
handleStep(1);
}, []);
- return isLoading ? (
+ return isLoadingLecueBook ? (
) : (
-
+
+ {token && }
+
);
}
diff --git a/src/Router.tsx b/src/Router.tsx
index b23ae087..22e2e6f7 100644
--- a/src/Router.tsx
+++ b/src/Router.tsx
@@ -1,7 +1,6 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
+import * as Sentry from '@sentry/react';
+import { AxiosError } from 'axios';
import { Suspense } from 'react';
-import { ErrorBoundary, FallbackProps } from 'react-error-boundary';
-import { useQueryErrorResetBoundary } from 'react-query';
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import BoundaryErrorPage from './components/common/BoundaryErrorPage';
@@ -23,10 +22,27 @@ import StickerPack from './StickerPack/page/StickerPack';
import TargetPage from './Target/page/TargetPage';
function Router() {
- const { reset } = useQueryErrorResetBoundary();
+ interface fallbackProps {
+ error: Error;
+ componentStack: string;
+ eventId: string;
+ resetError: () => void;
+ }
+
+ function fallback(fallback: fallbackProps) {
+ const { error, resetError } = fallback;
+ if (
+ error instanceof AxiosError &&
+ (error.response?.status === 401 || error.response?.status === 403)
+ ) {
+ return ;
+ }
+ return ;
+ }
+
return (
-
+
}>
} />
@@ -52,16 +68,9 @@ function Router() {
} />
-
+
);
}
export default Router;
-
-function fallbackRender({ error, resetErrorBoundary }: FallbackProps) {
- if (error.response?.status === 401 || error.response?.status === 403) {
- return ;
- }
- return ;
-}
diff --git a/src/assets/icon/ic_alert_o.svg b/src/assets/icon/ic_alert_o.svg
new file mode 100644
index 00000000..a8163791
--- /dev/null
+++ b/src/assets/icon/ic_alert_o.svg
@@ -0,0 +1,12 @@
+
diff --git a/src/assets/icon/ic_alert_x.svg b/src/assets/icon/ic_alert_x.svg
new file mode 100644
index 00000000..6d3e3628
--- /dev/null
+++ b/src/assets/icon/ic_alert_x.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/assets/icon/ic_home_favorite.svg b/src/assets/icon/ic_home_favorite.svg
new file mode 100644
index 00000000..d8b3cc7c
--- /dev/null
+++ b/src/assets/icon/ic_home_favorite.svg
@@ -0,0 +1,23 @@
+
diff --git a/src/assets/icon/ic_profile.svg b/src/assets/icon/ic_profile.svg
new file mode 100644
index 00000000..0b5f53f7
--- /dev/null
+++ b/src/assets/icon/ic_profile.svg
@@ -0,0 +1,29 @@
+
diff --git a/src/assets/index.ts b/src/assets/index.ts
index 48d600dd..5d5b41fe 100644
--- a/src/assets/index.ts
+++ b/src/assets/index.ts
@@ -6,6 +6,8 @@ import BtnFloatingStickerOrange from './button/btn_floating_sticker_orange.svg?r
import BtnFloatingWrite from './button/btn_floating_write.svg?react';
import BtnFloatingWriteOrange from './button/btn_floating_write_orange.svg?react';
import BtnKakaologin from './button/btn_kakaologin.svg?react';
+import IcAlertO from './icon/ic_alert_o.svg?react';
+import IcAlertX from './icon/ic_alert_x.svg?react';
import IcArrowLeftBlack from './icon/ic_arrow_left_black.svg?react';
import IcArrowLeftWhite from './icon/ic_arrow_left_white.svg?react';
import IcCamera from './icon/ic_camera.svg?react';
@@ -15,7 +17,9 @@ import IcCheck from './icon/ic_check.svg?react';
import IcCrown from './icon/ic_crown.svg?react';
import IcDate from './icon/ic_date.svg?react';
import IcHome from './icon/ic_home.svg?react';
+import IcHomeFavorite from './icon/ic_home_favorite.svg?react';
import IcNotice from './icon/ic_notice.svg?react';
+import IcProfile from './icon/ic_profile.svg?react';
import IcSharing from './icon/ic_sharing.svg?react';
import IcWaste from './icon/ic_waste.svg?react';
import IcX from './icon/ic_x.svg?react';
@@ -56,6 +60,8 @@ export {
BtnFloatingWrite,
BtnFloatingWriteOrange,
BtnKakaologin,
+ IcAlertO,
+ IcAlertX,
IcArrowLeftBlack,
IcArrowLeftWhite,
IcCamera,
@@ -65,7 +71,9 @@ export {
IcCrown,
IcDate,
IcHome,
+ IcHomeFavorite,
IcNotice,
+ IcProfile,
IcSharing,
IcWaste,
IcX,
diff --git a/src/components/common/BoundaryErrorPage/index.tsx b/src/components/common/BoundaryErrorPage/index.tsx
index f19318f5..fd35fb8c 100644
--- a/src/components/common/BoundaryErrorPage/index.tsx
+++ b/src/components/common/BoundaryErrorPage/index.tsx
@@ -5,14 +5,14 @@ import { ImgError } from '../../../assets';
import * as S from './BoundaryErrorPage.style';
interface BoundaryErrorPageProps {
- resetErrorBoundary: (...args: any[]) => void;
+ resetError: () => void;
}
-function BoundaryErrorPage({ resetErrorBoundary }: BoundaryErrorPageProps) {
+function BoundaryErrorPage({ resetError }: BoundaryErrorPageProps) {
const navigate = useNavigate();
const handleClickHomeButton = () => {
- resetErrorBoundary();
+ resetError();
navigate('/', { state: { step: 1 } });
};
diff --git a/src/libs/api/deleteFavorite.ts b/src/libs/api/deleteFavorite.ts
new file mode 100644
index 00000000..d47d7c76
--- /dev/null
+++ b/src/libs/api/deleteFavorite.ts
@@ -0,0 +1,16 @@
+import { api } from '../../libs/api';
+
+const deleteFavorite = async (bookId: number) => {
+ const token = localStorage.getItem('token');
+ const { data } = await api.delete('/api/favorite', {
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`,
+ },
+ data: { bookId: bookId },
+ });
+
+ return data;
+};
+
+export default deleteFavorite;
diff --git a/src/libs/api/getFavorite.ts b/src/libs/api/getFavorite.ts
new file mode 100644
index 00000000..7c7122d7
--- /dev/null
+++ b/src/libs/api/getFavorite.ts
@@ -0,0 +1,14 @@
+import { api } from '../../libs/api';
+
+const getFavorite = async () => {
+ const token = localStorage.getItem('token');
+ const { data } = await api.get('/api/favorite', {
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`,
+ },
+ });
+ return data.data;
+};
+
+export default getFavorite;
diff --git a/src/libs/hooks/.keep b/src/libs/hooks/.keep
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/libs/hooks/useDeleteFavorite.ts b/src/libs/hooks/useDeleteFavorite.ts
new file mode 100644
index 00000000..81a364e1
--- /dev/null
+++ b/src/libs/hooks/useDeleteFavorite.ts
@@ -0,0 +1,21 @@
+import { useMutation, useQueryClient } from 'react-query';
+import { useNavigate } from 'react-router-dom';
+
+import deleteFavorite from '../api/deleteFavorite';
+
+const useDeleteFavorite = () => {
+ const navigate = useNavigate();
+ const queryClient = useQueryClient();
+ const mutation = useMutation({
+ mutationFn: (bookId: number) => {
+ return deleteFavorite(bookId);
+ },
+ onError: () => navigate('/error'),
+ onSuccess: () => {
+ queryClient.refetchQueries(['get-favorite'], { exact: true });
+ },
+ });
+ return mutation;
+};
+
+export default useDeleteFavorite;
diff --git a/src/libs/hooks/useGetFavorite.ts b/src/libs/hooks/useGetFavorite.ts
new file mode 100644
index 00000000..fc48f529
--- /dev/null
+++ b/src/libs/hooks/useGetFavorite.ts
@@ -0,0 +1,19 @@
+import { useQuery } from 'react-query';
+import { useNavigate } from 'react-router-dom';
+
+import getFavorite from '../api/getFavorite';
+
+const useGetFavorite = () => {
+ const navigate = useNavigate();
+
+ const { isLoading: isLoadingFavorite, data: favorite } = useQuery({
+ queryKey: ['get-favorite'],
+ queryFn: () => getFavorite(),
+ onError: () => navigate('/error'),
+ refetchOnWindowFocus: false,
+ });
+
+ return { isLoading: isLoadingFavorite, data: favorite };
+};
+
+export default useGetFavorite;
diff --git a/src/main.tsx b/src/main.tsx
index f91368c1..2efd6356 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,25 +1,23 @@
+import * as Sentry from '@sentry/react';
import ReactDOM from 'react-dom/client';
import App from './App.tsx';
-// Sentry.init({
-// dsn: 'https://ff1721b5da5c3ed5ed8c4e4507b6ad51@o4506557086629888.ingest.sentry.io/4506573475741696',
-// integrations: [
-// new Sentry.BrowserTracing({
-// tracePropagationTargets: ['localhost', /^https:\/\/www\.lecue\.me/],
-// }),
-// new Sentry.Replay({
-// maskAllText: false,
-// blockAllMedia: false,
-// }),
-// ],
-// tracesSampleRate: 1.0,
-// replaysSessionSampleRate: 0.1,
-// replaysOnErrorSampleRate: 1.0,
-// });
+Sentry.init({
+ dsn: 'https://ff1721b5da5c3ed5ed8c4e4507b6ad51@o4506557086629888.ingest.sentry.io/4506573475741696',
+ environment: 'produnction',
+ integrations: [
+ new Sentry.BrowserTracing({
+ tracePropagationTargets: ['localhost', /^https:\/\/lecue\.me\/api/],
+ }),
+ new Sentry.Replay({
+ maskAllText: false,
+ blockAllMedia: false,
+ }),
+ ],
+ tracesSampleRate: 1.0,
+ replaysSessionSampleRate: 0.1,
+ replaysOnErrorSampleRate: 1.0,
+});
-ReactDOM.createRoot(document.getElementById('root')!).render(
- //
- ,
- // ,
-);
+ReactDOM.createRoot(document.getElementById('root')!).render();
diff --git a/yarn.lock b/yarn.lock
index 327d7b5d..786627ed 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,7 +7,7 @@
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
-"@ampproject/remapping@^2.2.0":
+"@ampproject/remapping@^2.1.0", "@ampproject/remapping@^2.2.0":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
@@ -15,7 +15,7 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
@@ -28,6 +28,27 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
+"@babel/core@7.18.5":
+ version "7.18.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000"
+ integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==
+ dependencies:
+ "@ampproject/remapping" "^2.1.0"
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.18.2"
+ "@babel/helper-compilation-targets" "^7.18.2"
+ "@babel/helper-module-transforms" "^7.18.0"
+ "@babel/helpers" "^7.18.2"
+ "@babel/parser" "^7.18.5"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.18.5"
+ "@babel/types" "^7.18.4"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.1"
+ semver "^6.3.0"
+
"@babel/core@^7.21.3", "@babel/core@^7.23.5":
version "7.23.7"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f"
@@ -49,7 +70,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.23.6":
+"@babel/generator@^7.18.2", "@babel/generator@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
@@ -59,7 +80,7 @@
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
-"@babel/helper-compilation-targets@^7.23.6":
+"@babel/helper-compilation-targets@^7.18.2", "@babel/helper-compilation-targets@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
@@ -97,7 +118,7 @@
dependencies:
"@babel/types" "^7.22.15"
-"@babel/helper-module-transforms@^7.23.3":
+"@babel/helper-module-transforms@^7.18.0", "@babel/helper-module-transforms@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
@@ -142,6 +163,15 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+"@babel/helpers@^7.18.2":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
+ integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
+ dependencies:
+ "@babel/template" "^7.23.9"
+ "@babel/traverse" "^7.23.9"
+ "@babel/types" "^7.23.9"
+
"@babel/helpers@^7.23.7":
version "7.23.8"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34"
@@ -165,6 +195,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
+"@babel/parser@^7.18.5", "@babel/parser@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
+ integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
+
"@babel/plugin-transform-react-jsx-self@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9"
@@ -186,6 +221,15 @@
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/template@^7.16.7", "@babel/template@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
+ integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.23.9"
+ "@babel/types" "^7.23.9"
+
"@babel/template@^7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
@@ -195,6 +239,22 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
+"@babel/traverse@^7.18.5", "@babel/traverse@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
+ integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.23.9"
+ "@babel/types" "^7.23.9"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
"@babel/traverse@^7.23.7":
version "7.23.7"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305"
@@ -220,6 +280,15 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
+"@babel/types@^7.18.4", "@babel/types@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
+ integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
"@csstools/css-parser-algorithms@^2.4.0":
version "2.5.0"
resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz#0c03cd5418a9f404a05ff2ffcb1b69d04e8ec532"
@@ -680,6 +749,11 @@
"@sentry/types" "7.93.0"
"@sentry/utils" "7.93.0"
+"@sentry/babel-plugin-component-annotate@2.14.1":
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.14.1.tgz#3eb759809e051d341071b9e1d5a2e8cf35b67c56"
+ integrity sha512-NHVOr6m0vOoh1UNSZr+OpWQERjjQM7lO48WN/N/MzobIIxc2pymw2KAq3lNJ1SnVAy1t9RNP8u+g6aEFEMGZ/w==
+
"@sentry/browser@7.93.0", "@sentry/browser@^7.93.0":
version "7.93.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.93.0.tgz#acb559125ab0576091a3fc9718e520ba9b2eb1b9"
@@ -692,11 +766,13 @@
"@sentry/types" "7.93.0"
"@sentry/utils" "7.93.0"
-"@sentry/bundler-plugin-core@2.10.2":
- version "2.10.2"
- resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.10.2.tgz#d26f6a67b843eb757eb836020816e68472eee365"
- integrity sha512-7IoekLtROlJZqTxtHQ3IhocBuf9dsEq+JjqlHMyZXoq+QKuvJFvMd/4T+r6KjZ15kMZOIkR+spK3V7duH201hw==
+"@sentry/bundler-plugin-core@2.14.1":
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.14.1.tgz#419fcd2e792f8b4fc6bb6eb735d09c2325ba1697"
+ integrity sha512-JbYkeQQ+FTy4KjuJmnjjRGKv1LOSH+Q9cbcMHkr+vNrwAbdxkQ7WURGEKUCFTciIekToMCOiFk+g3FQlRmzLPg==
dependencies:
+ "@babel/core" "7.18.5"
+ "@sentry/babel-plugin-component-annotate" "2.14.1"
"@sentry/cli" "^2.22.3"
"@sentry/node" "^7.60.0"
"@sentry/utils" "^7.60.0"
@@ -812,12 +888,12 @@
dependencies:
"@sentry/types" "7.93.0"
-"@sentry/vite-plugin@^2.10.2":
- version "2.10.2"
- resolved "https://registry.yarnpkg.com/@sentry/vite-plugin/-/vite-plugin-2.10.2.tgz#13f40b0dfbaf8451afaab619222da48fda8cf568"
- integrity sha512-30uu0L8ZCpAKOxAXmtyqwL06sG8UEBXGY5mxUDITyQYDf8pKuiOEf5018KlEDjhYVypfMQH3jq5xXUUka+/ipg==
+"@sentry/vite-plugin@^2.14.1":
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/@sentry/vite-plugin/-/vite-plugin-2.14.1.tgz#daa9e353990ba141e18f66cd0f80017eb001cfe9"
+ integrity sha512-leNq+hWaKRhp0e+U1LYVbKBUAN4P+RXhG6GyMLvjKZL0LTsbLni05XeWg3Xy364Xoawcj6vgEN2lVvlpUvUnEQ==
dependencies:
- "@sentry/bundler-plugin-core" "2.10.2"
+ "@sentry/bundler-plugin-core" "2.14.1"
unplugin "1.0.1"
"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
@@ -1439,7 +1515,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-convert-source-map@^1.5.0:
+convert-source-map@^1.5.0, convert-source-map@^1.7.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
@@ -2566,7 +2642,7 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
-json5@^2.2.3:
+json5@^2.2.1, json5@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
@@ -3068,13 +3144,6 @@ react-draggable@^4.4.6:
clsx "^1.1.1"
prop-types "^15.8.1"
-react-error-boundary@^4.0.12:
- version "4.0.12"
- resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.12.tgz#59f8f1dbc53bbbb34fc384c8db7cf4082cb63e2c"
- integrity sha512-kJdxdEYlb7CPC1A0SeUY38cHpjuu6UkvzKiAmqmOFL21VRfMhOcWxTCBgLVCO0VEMh9JhFNcVaXlV4/BTpiwOA==
- dependencies:
- "@babel/runtime" "^7.12.5"
-
react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@@ -3261,7 +3330,7 @@ scheduler@^0.23.0:
dependencies:
loose-envify "^1.1.0"
-semver@^6.3.1:
+semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==