diff --git a/apps/duri/src/components/home/RecommendedShop.tsx b/apps/duri/src/components/home/RecommendedShop.tsx
index c07a3b9e..aab48770 100644
--- a/apps/duri/src/components/home/RecommendedShop.tsx
+++ b/apps/duri/src/components/home/RecommendedShop.tsx
@@ -24,7 +24,7 @@ const RecommendedShop = ({ shopList }: { shopList: RecommendedShopType[] }) => {
)}
여기 샵은 어때요?
-
+
>
diff --git a/apps/duri/src/components/home/ShopHorizontal.tsx b/apps/duri/src/components/home/ShopHorizontal.tsx
index d2a97aa3..683f797a 100644
--- a/apps/duri/src/components/home/ShopHorizontal.tsx
+++ b/apps/duri/src/components/home/ShopHorizontal.tsx
@@ -41,7 +41,7 @@ export const ShopHorizontal = ({
};
return (
-
+
{shopList &&
shopList.map((shop: RegularShopType) => (
diff --git a/apps/duri/src/components/home/ShopVertical.tsx b/apps/duri/src/components/home/ShopVertical.tsx
index 419fe0b6..1c62f834 100644
--- a/apps/duri/src/components/home/ShopVertical.tsx
+++ b/apps/duri/src/components/home/ShopVertical.tsx
@@ -14,17 +14,16 @@ export const ShopVertical = ({
const handleClickShop = (shopIdx: number) => navigate(`/shop/${shopIdx}`);
return (
-
+
{shopList &&
shopList.map((shop: RecommendedShopType) => (
handleClickShop(shop.shopId)}
>
{shop.imageURL ? (
@@ -84,6 +83,38 @@ export const ShopVertical = ({
{shop.shopTag2}
+
+ {shop.address}
+
+
+
+ {shop.shopTag1 && (
+
+ {shop.shopTag1}
+
+ )}
+ {shop.shopTag2 && (
+
+ {shop.shopTag2}
+
+ )}
+
))}
@@ -94,7 +125,7 @@ export const ShopVertical = ({
const Tag = styled(Button)`
padding: 10px;
`;
-const Wrapper = styled(HeightFitFlex)`
+const Wrapper = styled(Flex)`
border-radius: 12px;
background: var(--bw-white, #fff);
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.1);
@@ -104,3 +135,7 @@ const Wrapper = styled(HeightFitFlex)`
const FitFlex = styled(HeightFitFlex)`
width: fit-content;
`;
+
+const TagWrapper = styled(HeightFitFlex)`
+ min-height: 45px;
+`;
\ No newline at end of file
diff --git a/apps/duri/src/components/my/history/ResponseQuotationHistory.tsx b/apps/duri/src/components/my/history/ResponseQuotationHistory.tsx
index 161c68ac..0a3081f3 100644
--- a/apps/duri/src/components/my/history/ResponseQuotationHistory.tsx
+++ b/apps/duri/src/components/my/history/ResponseQuotationHistory.tsx
@@ -13,7 +13,7 @@ export const ResponseQuotationHistory = ({
const navigate = useNavigate();
const { data: quotationData } = useGetDetailQuotation(requestId);
const handleClickReviewButton = (quotationId: number) => {
- navigate('/review/write', {
+ navigate('/my/review/write', {
state: {
quotationId: quotationId,
},
diff --git a/apps/duri/src/components/payment/Widget.tsx b/apps/duri/src/components/payment/Widget.tsx
index f0d3ac41..fff81b83 100644
--- a/apps/duri/src/components/payment/Widget.tsx
+++ b/apps/duri/src/components/payment/Widget.tsx
@@ -32,8 +32,8 @@ const PaymentWidget = ({
const { mutateAsync: postAmount } = usePostAmount();
const { widgets, ready } = useTossPaymentWidget(
- uuidData?.customerKey,
amount,
+ uuidData?.customerKey,
);
const handleClickPaymentButton = () => {
@@ -68,6 +68,14 @@ const PaymentWidget = ({
widgets.setAmount(amount);
}, [widgets, amount]);
+ useEffect(() => {
+ if (ready) {
+ setTimeout(() => {
+ window.dispatchEvent(new Event('resize'));
+ }, 0); // 0ms 대기 후 스크롤 적용
+ }
+ }, [ready]);
+
return (
diff --git a/apps/duri/src/components/quotation/IncomingQuotation.tsx b/apps/duri/src/components/quotation/IncomingQuotation.tsx
index 125fa9d8..da3f4279 100644
--- a/apps/duri/src/components/quotation/IncomingQuotation.tsx
+++ b/apps/duri/src/components/quotation/IncomingQuotation.tsx
@@ -20,6 +20,7 @@ export const IncomingQuotation = ({
return (
<>
) : (
-
+
+
+
)}
- 5 ? "Caption3" :"Body4"}>{salonName}
+ 5 ? 'Caption3' : 'Body4'}>
+ {salonName}
+
diff --git a/apps/duri/src/components/shop/SendRequesQBox.tsx b/apps/duri/src/components/shop/SendRequesQBox.tsx
index 2864711e..c8ca0bf8 100644
--- a/apps/duri/src/components/shop/SendRequesQBox.tsx
+++ b/apps/duri/src/components/shop/SendRequesQBox.tsx
@@ -52,12 +52,12 @@ export const SendRequestQBox = ({
요청서 선택
작성한 요청서가 없습니다.
-
+
작성하러가기
-
+
@@ -86,3 +86,7 @@ const FlexBtn = styled(Button)<{ flex: string }>`
border-radius: 8px;
flex: ${({ flex }) => flex};
`;
+
+const CursorButton = styled(WidthFitFlex)`
+ cursor: pointer;
+`;
diff --git a/apps/duri/src/pages/Home/index.tsx b/apps/duri/src/pages/Home/index.tsx
index f076750d..d80397ca 100644
--- a/apps/duri/src/pages/Home/index.tsx
+++ b/apps/duri/src/pages/Home/index.tsx
@@ -12,6 +12,7 @@ import {
HeightFitFlex,
MainHeader,
MobileLayout,
+ SkeletonCard,
Text,
theme,
} from '@duri-fe/ui';
@@ -34,13 +35,11 @@ const Home = () => {
const [lon, setLon] = useState(null);
const { data: petData } = useGetPetInfo();
- const { data: regularListData } = useGetRegularShopList();
+ const { data: regularListData, isPending: isPendingRegularData } =
+ useGetRegularShopList();
const { data: reservationData } = useGetUpcomingReservation();
- const {
- data: recommendedListData,
- isLoading: recommendedListLoading,
- isPending: recommendedListPending,
- } = useGetRecommendedShopList(lat, lon);
+ const { data: recommendedListData, isPending: isPendingRecommendData } =
+ useGetRecommendedShopList(lat, lon);
const navigate = useNavigate();
const handleNavigate = () => {
@@ -103,30 +102,45 @@ const Home = () => {
)}
단골 샵 빠른 입찰
- {regularListData && regularListData.homeShopList.length > 0 ? (
-
- ) : (
-
-
-
- 아직 단골샵이 없어요!
-
-
- 단골샵을 찾으러 가볼까요?
-
-
-
+ {isPendingRegularData ? (
+
+
+
+ ) : (
+ <>
+ {/* 단골샵이 없는 경우 */}
+ {regularListData && regularListData.homeShopList.length > 0 ? (
+
+ ) : (
+
+
+
+ 아직 단골샵이 없어요!
+
+
+ 단골샵을 찾으러 가볼까요?
+
+
+
+
+ )}
+ >
)}
@@ -143,16 +157,13 @@ const Home = () => {
{/* 추천 샵 */}
- {recommendedListLoading ||
- (recommendedListPending && (
-
-
- Loading...
-
-
- ))}
- {recommendedListData && (
-
+ {isPendingRecommendData ? (
+
+
+
+
+ ) : (
+
)}
diff --git a/apps/duri/src/pages/Login/index.tsx b/apps/duri/src/pages/Login/index.tsx
index 4dd382fa..bffc82eb 100644
--- a/apps/duri/src/pages/Login/index.tsx
+++ b/apps/duri/src/pages/Login/index.tsx
@@ -1,5 +1,5 @@
import {
- Doori,
+ DuriDog,
Flex,
MobileLayout,
NaverLogo,
@@ -19,8 +19,8 @@ const LoginPage = () => {
{/** 로고 */}
-
-
+
+
두리묭실로
쉽고 빠르게 예약해요!
{
const navigate = useNavigate();
- const handleNavigate = () => navigate(-1);
+ const handleNavigate = () => navigate('/my');
const { data: reviewListData } = useGetMyReviews();
const [reviewCount, setReviewCount] = useState(0);
const [reviewList, setReviewList] =
diff --git a/apps/duri/src/pages/Payment/Success.tsx b/apps/duri/src/pages/Payment/Success.tsx
index 56f669b3..5f8eb913 100644
--- a/apps/duri/src/pages/Payment/Success.tsx
+++ b/apps/duri/src/pages/Payment/Success.tsx
@@ -14,6 +14,8 @@ import {
} from '@duri-fe/ui';
import { usePostAmountVerity, usePostPayment } from '@duri-fe/utils';
import styled from '@emotion/styled';
+import { format } from 'date-fns';
+
const SuccessPage = () => {
const navigate = useNavigate();
@@ -133,13 +135,13 @@ const SuccessPage = () => {
결제일시
- 2024-11-21 10:52:16
+ {format(new Date(), "yyyy-MM-dd HH:mm:ss")}
- 결제카드
+ 결제수단
- 현대카드
+ 간편결제
diff --git a/apps/duri/src/pages/Quotation/QuotationDetail.tsx b/apps/duri/src/pages/Quotation/QuotationDetail.tsx
index 990bb177..74253352 100644
--- a/apps/duri/src/pages/Quotation/QuotationDetail.tsx
+++ b/apps/duri/src/pages/Quotation/QuotationDetail.tsx
@@ -10,6 +10,7 @@ import {
Flex,
Header,
MobileLayout,
+ SkeletonCard,
Text,
theme,
} from '@duri-fe/ui';
@@ -40,11 +41,8 @@ const QuotationDetailPage = () => {
null,
);
- const { data: quotationListData } = useGetQuotationList(
- Number(quotationReqId),
- lat,
- lon,
- );
+ const { data: quotationListData, isPending: isPendingQuotationList } =
+ useGetQuotationList(Number(quotationReqId), lat, lon);
const handleClickBackButton = () => {
navigate(-1);
@@ -149,14 +147,24 @@ const QuotationDetailPage = () => {
들어온 견적
- {quotationList?.map(({ requestId, shopName, totalPrice }) => (
-
- ))}
+ {isPendingQuotationList ? (
+
+
+
+
+
+ ) : (
+ <>
+ {quotationList?.map(({ requestId, shopName, totalPrice }) => (
+
+ ))}
+ >
+ )}
}
diff --git a/apps/duri/src/pages/Review/index.tsx b/apps/duri/src/pages/Review/index.tsx
index 019adc57..df69fc51 100644
--- a/apps/duri/src/pages/Review/index.tsx
+++ b/apps/duri/src/pages/Review/index.tsx
@@ -52,7 +52,7 @@ const ReviewWritePage = () => {
const { control, handleSubmit, setValue } = useForm({
mode: 'onChange',
defaultValues: {
- quotationId: location.state || 0,
+ quotationId: quotationId || 0,
rating: 5,
comment: '',
image: null,
diff --git a/apps/salon/package.json b/apps/salon/package.json
index 7b3c3fb3..a98d4e2e 100644
--- a/apps/salon/package.json
+++ b/apps/salon/package.json
@@ -16,6 +16,7 @@
"@duri-fe/utils": "workspace:packages/utils",
"@emotion/react": "^11.13.5",
"@emotion/styled": "^11.13.5",
+ "@nivo/pie": "^0.88.0",
"@tanstack/react-query": "^5.62.1",
"@tanstack/react-query-devtools": "^5.62.2",
"@types/node": "^22.10.1",
diff --git a/apps/salon/src/assets/images/ShopDefaultImage.png b/apps/salon/src/assets/images/ShopDefaultImage.png
index 0fa2f1e0..6670f593 100644
Binary files a/apps/salon/src/assets/images/ShopDefaultImage.png and b/apps/salon/src/assets/images/ShopDefaultImage.png differ
diff --git a/apps/salon/src/components/my/info/OwnerInfo.tsx b/apps/salon/src/components/my/info/OwnerInfo.tsx
index 3b389af4..14f7c0b7 100644
--- a/apps/salon/src/components/my/info/OwnerInfo.tsx
+++ b/apps/salon/src/components/my/info/OwnerInfo.tsx
@@ -1,10 +1,4 @@
-import {
- Flex,
- ProfileImage,
- Text,
- theme,
- WidthFitFlex,
-} from '@duri-fe/ui';
+import { Flex, ProfileImage, Text, theme, WidthFitFlex } from '@duri-fe/ui';
import styled from '@emotion/styled';
interface OwnerInfoProps {
@@ -22,7 +16,11 @@ export const OwnerInfo = ({ image, shopName }: OwnerInfoProps) => {
안녕하세요!
- 내 포트폴리오 보기
+
+
+ 내 포트폴리오 보기
+
+
diff --git a/apps/salon/src/pages/Income/Income.tsx b/apps/salon/src/pages/Income/Income.tsx
index af848717..9aaeedc2 100644
--- a/apps/salon/src/pages/Income/Income.tsx
+++ b/apps/salon/src/pages/Income/Income.tsx
@@ -19,7 +19,7 @@ const IncomePage = () => {
};
const { data: monthIncomeData } = useGetThisMonthIncome({});
- const { data: selectedIncomeData } = useGetSelectedMonthIncome({ month: 12 });
+ const { data: selectedIncomeData } = useGetSelectedMonthIncome({ month: "2024-12" });
const { data: agePetStatistic } = useGetAgeStatistic({});
const { data: diseasePetStatistic } = useGetDiseaseStatistic({});
const { data: characterPetStatistic } = useGetCharacterStatistic({});
diff --git a/apps/salon/src/pages/Login/index.tsx b/apps/salon/src/pages/Login/index.tsx
index b5bd0c8e..b2fc8439 100644
--- a/apps/salon/src/pages/Login/index.tsx
+++ b/apps/salon/src/pages/Login/index.tsx
@@ -1,5 +1,5 @@
import {
- Doori,
+ DuriDog,
Flex,
MobileLayout,
NaverLogo,
@@ -19,8 +19,8 @@ const LoginPage = () => {
{/** 로고 */}
-
-
+
+
두리묭실로
쉽고 빠르게 예약해요!
) => (
+
+);
+export default SvgDuriDog;
diff --git a/packages/ui/src/assets/images/ShopDefaultImage.png b/packages/ui/src/assets/images/ShopDefaultImage.png
index 0fa2f1e0..6670f593 100644
Binary files a/packages/ui/src/assets/images/ShopDefaultImage.png and b/packages/ui/src/assets/images/ShopDefaultImage.png differ
diff --git a/packages/ui/src/assets/index.tsx b/packages/ui/src/assets/index.tsx
index 08287981..f4e00366 100644
--- a/packages/ui/src/assets/index.tsx
+++ b/packages/ui/src/assets/index.tsx
@@ -13,6 +13,7 @@ export { default as Backup } from './Backup';
export { default as BeforeArrow } from './BeforeArrow';
export { default as Chat } from './Chat';
export { default as Chatting } from './Chatting';
+export { default as DuriDog } from './DuriDog';
export { default as Close } from './Close';
export { default as CloseCircle } from './CloseCircle';
export { default as DownArrow } from './DownArrow';
diff --git a/packages/ui/src/components/Quotation/RequestQuotation.tsx b/packages/ui/src/components/Quotation/RequestQuotation.tsx
index 02d63b33..f61f8fbf 100644
--- a/packages/ui/src/components/Quotation/RequestQuotation.tsx
+++ b/packages/ui/src/components/Quotation/RequestQuotation.tsx
@@ -5,6 +5,7 @@ import {
Seperator,
Text,
TextField,
+ theme,
WidthFitFlex,
} from '@duri-fe/ui';
import { TimeType } from '@duri-fe/utils';
@@ -73,8 +74,8 @@ export const RequestQuotation = ({
보호자
- {requestList.userName}
- {requestList.userPhone}
+ {requestList.userName}
+ {requestList.userPhone}
@@ -125,7 +126,7 @@ export const RequestQuotation = ({
gap={12}
>
요청사항
-
+
{/** 하단 버튼 */}
diff --git a/packages/ui/src/components/Quotation/ResponseQuotation.tsx b/packages/ui/src/components/Quotation/ResponseQuotation.tsx
index 1fb6ac29..302354bf 100644
--- a/packages/ui/src/components/Quotation/ResponseQuotation.tsx
+++ b/packages/ui/src/components/Quotation/ResponseQuotation.tsx
@@ -11,6 +11,7 @@ import {
import styled from '@emotion/styled';
import { format } from 'date-fns';
+import ShopDefaultImage from '../../assets/images/ShopDefaultImage.png';
import { ResponseQuotationType } from '../../types';
import { DetailGrooming } from './DetailGrooming';
@@ -35,7 +36,7 @@ export const ResponseQuotation = ({
{shopName}
@@ -80,7 +81,13 @@ export const ResponseQuotation = ({
{memo}
) : (
-
+
)}
diff --git a/packages/ui/src/styles/GlobalStyles.ts b/packages/ui/src/styles/GlobalStyles.ts
index 1a173122..9a7dfafc 100644
--- a/packages/ui/src/styles/GlobalStyles.ts
+++ b/packages/ui/src/styles/GlobalStyles.ts
@@ -58,4 +58,7 @@ export const globalStyle = css`
border: none !important;
width: 100%;
}
+ .css-1f7sphi {
+ z-index: -1 !important;
+ }
`;
diff --git a/packages/ui/src/types/quotation.ts b/packages/ui/src/types/quotation.ts
index 8d21c1a4..509bf6c0 100644
--- a/packages/ui/src/types/quotation.ts
+++ b/packages/ui/src/types/quotation.ts
@@ -9,6 +9,7 @@ export interface ResponseQuotationType {
shopAddress: string;
shopPhone: string;
groomerName: string;
+ shopImage: string;
};
quotationCreatedAt: string;
menuDetail: {
diff --git a/packages/utils/src/apis/duri/hooks/home.ts b/packages/utils/src/apis/duri/hooks/home.ts
index c17c6ca6..86f34a01 100644
--- a/packages/utils/src/apis/duri/hooks/home.ts
+++ b/packages/utils/src/apis/duri/hooks/home.ts
@@ -16,12 +16,11 @@ export const useGetPetInfo = () => {
};
export const useGetRegularShopList = () => {
- const { data, isError } = useQuery({
+ return useQuery({
queryKey: ['getRegularShopList'],
queryFn: () => getRegularShopInfo(),
staleTime: 1000 * 60 * 30,
});
- return { data, isError };
};
export const useGetRecommendedShopList = (
diff --git a/packages/utils/src/apis/salon/hooks/income.ts b/packages/utils/src/apis/salon/hooks/income.ts
index 2e867046..37a743a7 100644
--- a/packages/utils/src/apis/salon/hooks/income.ts
+++ b/packages/utils/src/apis/salon/hooks/income.ts
@@ -41,7 +41,7 @@ type UseGetSelectedMonthIncomeType = UseQueryProps<
GetSelectedMonthIncomeResponse['response'],
BaseError
> & {
- month: number;
+ month: string;
};
export const useGetSelectedMonthIncome = ({
diff --git a/packages/utils/src/apis/salon/income.ts b/packages/utils/src/apis/salon/income.ts
index ca23beaa..e3b3c7c1 100644
--- a/packages/utils/src/apis/salon/income.ts
+++ b/packages/utils/src/apis/salon/income.ts
@@ -15,7 +15,7 @@ export const getThisMonthIncome = async (): Promise<
return data;
};
-export const getSelectedMonthIncome = async (month: number): Promise<
+export const getSelectedMonthIncome = async (month: string): Promise<
GetSelectedMonthIncomeResponse['response']
> => {
const { data } = await salonInstance.get('statistics/income/month', {
diff --git a/packages/utils/src/apis/types/quotation.ts b/packages/utils/src/apis/types/quotation.ts
index 51399666..881e03cf 100644
--- a/packages/utils/src/apis/types/quotation.ts
+++ b/packages/utils/src/apis/types/quotation.ts
@@ -144,7 +144,6 @@ export interface CompletedQuotationListResponse extends BaseResponse {
};
}
-
//응답 견적서 상세조회
export interface QuotationDetailResponse extends BaseResponse {
response: {
@@ -163,6 +162,7 @@ export interface ShopDetailType {
shopAddress: string;
shopPhone: string;
groomerName: string;
+ shopImage: string;
}
export interface ShopType {
diff --git a/packages/utils/src/hooks/useTossPaymentWidget.ts b/packages/utils/src/hooks/useTossPaymentWidget.ts
index 28a46784..d847b019 100644
--- a/packages/utils/src/hooks/useTossPaymentWidget.ts
+++ b/packages/utils/src/hooks/useTossPaymentWidget.ts
@@ -9,8 +9,8 @@ interface Amount {
}
export const useTossPaymentWidget = (
- customerKey: string | undefined,
amount: Amount,
+ customerKey?: string,
) => {
const [ready, setReady] = useState(false);
const [widgets, setWidgets] = useState(null);
@@ -26,7 +26,20 @@ export const useTossPaymentWidget = (
import.meta.env.VITE_CLIENT_KEY, // Client Key
);
+ // 기존 위젯을 렌더링할 HTML 요소 제거
+ const paymentMethodElement = document.querySelector('#payment-method');
+ const agreementElement = document.querySelector('#agreement');
+
+ if (paymentMethodElement) {
+ paymentMethodElement.innerHTML = ''; // 기존 내용 제거
+ }
+
+ if (agreementElement) {
+ agreementElement.innerHTML = ''; // 기존 내용 제거
+ }
+
const widgetsInstance = tossPayments.widgets({ customerKey });
+
await widgetsInstance.setAmount(amount);
await Promise.all([
diff --git a/yarn.lock b/yarn.lock
index 28e3c7eb..d53b4c95 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -538,6 +538,7 @@ __metadata:
"@duri-fe/utils": "workspace:packages/utils"
"@emotion/react": "npm:^11.13.5"
"@emotion/styled": "npm:^11.13.5"
+ "@nivo/pie": "npm:^0.88.0"
"@tanstack/react-query": "npm:^5.62.1"
"@tanstack/react-query-devtools": "npm:^5.62.2"
"@types/navermaps": "npm:^3.7.8"
@@ -1452,6 +1453,106 @@ __metadata:
languageName: node
linkType: hard
+"@nivo/arcs@npm:0.88.0":
+ version: 0.88.0
+ resolution: "@nivo/arcs@npm:0.88.0"
+ dependencies:
+ "@nivo/colors": "npm:0.88.0"
+ "@nivo/core": "npm:0.88.0"
+ "@react-spring/web": "npm:9.4.5 || ^9.7.2"
+ "@types/d3-shape": "npm:^3.1.6"
+ d3-shape: "npm:^3.2.0"
+ peerDependencies:
+ react: ">= 16.14.0 < 19.0.0"
+ checksum: 10c0/a9fe18e1012fb8d0e7d53b21d4dca8b8510d0773380220553a18052dcfb0886a362126b1a492d82e12c47829a33ac0d6633a89c81611bc0e26bb5ad0928a4246
+ languageName: node
+ linkType: hard
+
+"@nivo/colors@npm:0.88.0":
+ version: 0.88.0
+ resolution: "@nivo/colors@npm:0.88.0"
+ dependencies:
+ "@nivo/core": "npm:0.88.0"
+ "@types/d3-color": "npm:^3.0.0"
+ "@types/d3-scale": "npm:^4.0.8"
+ "@types/d3-scale-chromatic": "npm:^3.0.0"
+ "@types/prop-types": "npm:^15.7.2"
+ d3-color: "npm:^3.1.0"
+ d3-scale: "npm:^4.0.2"
+ d3-scale-chromatic: "npm:^3.0.0"
+ lodash: "npm:^4.17.21"
+ prop-types: "npm:^15.7.2"
+ peerDependencies:
+ react: ">= 16.14.0 < 19.0.0"
+ checksum: 10c0/e52a69fc6fb942f30f053f02e4dd36c4ecdf1012446368b20a5c847f8eb3c2ecb70924505cb3041b0d72efb4f0c5edcb8322b009b7fa3f4934bf154bc7e45776
+ languageName: node
+ linkType: hard
+
+"@nivo/core@npm:0.88.0":
+ version: 0.88.0
+ resolution: "@nivo/core@npm:0.88.0"
+ dependencies:
+ "@nivo/tooltip": "npm:0.88.0"
+ "@react-spring/web": "npm:9.4.5 || ^9.7.2"
+ "@types/d3-shape": "npm:^3.1.6"
+ d3-color: "npm:^3.1.0"
+ d3-format: "npm:^1.4.4"
+ d3-interpolate: "npm:^3.0.1"
+ d3-scale: "npm:^4.0.2"
+ d3-scale-chromatic: "npm:^3.0.0"
+ d3-shape: "npm:^3.2.0"
+ d3-time-format: "npm:^3.0.0"
+ lodash: "npm:^4.17.21"
+ prop-types: "npm:^15.7.2"
+ peerDependencies:
+ react: ">= 16.14.0 < 19.0.0"
+ checksum: 10c0/5dbc7f7b78ca502a0ec2bfcd459c20a6fba6bf1a4da19dbd31c50141ec0a2a6506bfde07bdd6f116ff6d96b9d4806de2b87c886ee8a0152eb4b9b1a337f2708c
+ languageName: node
+ linkType: hard
+
+"@nivo/legends@npm:0.88.0":
+ version: 0.88.0
+ resolution: "@nivo/legends@npm:0.88.0"
+ dependencies:
+ "@nivo/colors": "npm:0.88.0"
+ "@nivo/core": "npm:0.88.0"
+ "@types/d3-scale": "npm:^4.0.8"
+ d3-scale: "npm:^4.0.2"
+ peerDependencies:
+ react: ">= 16.14.0 < 19.0.0"
+ checksum: 10c0/5d798c9e907d488dcdb0fefaf6ebe72f484a17cb08368328f3ec9aded59ae48d21898d852b7e3639215cae38bdcc9561052426d4efca6106ac0f375f144e5ad2
+ languageName: node
+ linkType: hard
+
+"@nivo/pie@npm:^0.88.0":
+ version: 0.88.0
+ resolution: "@nivo/pie@npm:0.88.0"
+ dependencies:
+ "@nivo/arcs": "npm:0.88.0"
+ "@nivo/colors": "npm:0.88.0"
+ "@nivo/core": "npm:0.88.0"
+ "@nivo/legends": "npm:0.88.0"
+ "@nivo/tooltip": "npm:0.88.0"
+ "@types/d3-shape": "npm:^3.1.6"
+ d3-shape: "npm:^3.2.0"
+ peerDependencies:
+ react: ">= 16.14.0 < 19.0.0"
+ checksum: 10c0/575c3d6520ce80cc5fa74f68feb039b4cbe8ad09669ceda7a1a9ba27e895f1839d030ed8735560d9796488dd266f6e51384bc322f41cd7ed4af4ec5809accf53
+ languageName: node
+ linkType: hard
+
+"@nivo/tooltip@npm:0.88.0":
+ version: 0.88.0
+ resolution: "@nivo/tooltip@npm:0.88.0"
+ dependencies:
+ "@nivo/core": "npm:0.88.0"
+ "@react-spring/web": "npm:9.4.5 || ^9.7.2"
+ peerDependencies:
+ react: ">= 16.14.0 < 19.0.0"
+ checksum: 10c0/1a5eef73875f7a87984055adffee5f804a1e1be92166c9799877a25ccd61768963b0ad80f603a0e9e5e43e4121bb11e9cce9123078a89e816d1bfae20e9b07bf
+ languageName: node
+ linkType: hard
+
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@@ -1559,6 +1660,72 @@ __metadata:
languageName: node
linkType: hard
+"@react-spring/animated@npm:~9.7.5":
+ version: 9.7.5
+ resolution: "@react-spring/animated@npm:9.7.5"
+ dependencies:
+ "@react-spring/shared": "npm:~9.7.5"
+ "@react-spring/types": "npm:~9.7.5"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ checksum: 10c0/f8c2473c60f39a878c7dd0fdfcfcdbc720521e1506aa3f63c9de64780694a0a73d5ccc535a5ccec3520ddb70a71cf43b038b32c18e99531522da5388c510ecd7
+ languageName: node
+ linkType: hard
+
+"@react-spring/core@npm:~9.7.5":
+ version: 9.7.5
+ resolution: "@react-spring/core@npm:9.7.5"
+ dependencies:
+ "@react-spring/animated": "npm:~9.7.5"
+ "@react-spring/shared": "npm:~9.7.5"
+ "@react-spring/types": "npm:~9.7.5"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ checksum: 10c0/5bfd83dfe248cd91889f215f015d908c7714ef445740fd5afa054b27ebc7d5a456abf6c309e2459d9b5b436e78d6fda16b62b9601f96352e9130552c02270830
+ languageName: node
+ linkType: hard
+
+"@react-spring/rafz@npm:~9.7.5":
+ version: 9.7.5
+ resolution: "@react-spring/rafz@npm:9.7.5"
+ checksum: 10c0/8bdad180feaa9a0e870a513043a5e98a4e9b7292a9f887575b7e6fadab2677825bc894b7ff16c38511b35bfe6cc1072df5851c5fee64448d67551559578ca759
+ languageName: node
+ linkType: hard
+
+"@react-spring/shared@npm:~9.7.5":
+ version: 9.7.5
+ resolution: "@react-spring/shared@npm:9.7.5"
+ dependencies:
+ "@react-spring/rafz": "npm:~9.7.5"
+ "@react-spring/types": "npm:~9.7.5"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ checksum: 10c0/0207eacccdedd918a2fc55e78356ce937f445ce27ad9abd5d3accba8f9701a39349b55115641dc2b39bb9d3a155b058c185b411d292dc8cc5686bfa56f73b94f
+ languageName: node
+ linkType: hard
+
+"@react-spring/types@npm:~9.7.5":
+ version: 9.7.5
+ resolution: "@react-spring/types@npm:9.7.5"
+ checksum: 10c0/85c05121853cacb64f7cf63a4855e9044635e1231f70371cd7b8c78bc10be6f4dd7c68f592f92a2607e8bb68051540989b4677a2ccb525dba937f5cd95dc8bc1
+ languageName: node
+ linkType: hard
+
+"@react-spring/web@npm:9.4.5 || ^9.7.2":
+ version: 9.7.5
+ resolution: "@react-spring/web@npm:9.7.5"
+ dependencies:
+ "@react-spring/animated": "npm:~9.7.5"
+ "@react-spring/core": "npm:~9.7.5"
+ "@react-spring/shared": "npm:~9.7.5"
+ "@react-spring/types": "npm:~9.7.5"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ checksum: 10c0/bcd1e052e1b16341a12a19bf4515f153ca09d1fa86ff7752a5d02d7c4db58e8baf80e6283e64411f1e388c65340dce2254b013083426806b5dbae38bd151e53e
+ languageName: node
+ linkType: hard
+
"@rollup/pluginutils@npm:^5.0.0, @rollup/pluginutils@npm:^5.0.2, @rollup/pluginutils@npm:^5.1.3":
version: 5.1.4
resolution: "@rollup/pluginutils@npm:5.1.4"
@@ -2609,6 +2776,52 @@ __metadata:
languageName: node
linkType: hard
+"@types/d3-color@npm:^3.0.0":
+ version: 3.1.3
+ resolution: "@types/d3-color@npm:3.1.3"
+ checksum: 10c0/65eb0487de606eb5ad81735a9a5b3142d30bc5ea801ed9b14b77cb14c9b909f718c059f13af341264ee189acf171508053342142bdf99338667cea26a2d8d6ae
+ languageName: node
+ linkType: hard
+
+"@types/d3-path@npm:*":
+ version: 3.1.0
+ resolution: "@types/d3-path@npm:3.1.0"
+ checksum: 10c0/85e8b3aa968a60a5b33198ade06ae7ffedcf9a22d86f24859ff58e014b053ccb7141ec163b78d547bc8215bb12bb54171c666057ab6156912814005b686afb31
+ languageName: node
+ linkType: hard
+
+"@types/d3-scale-chromatic@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "@types/d3-scale-chromatic@npm:3.1.0"
+ checksum: 10c0/93c564e02d2e97a048e18fe8054e4a935335da6ab75a56c3df197beaa87e69122eef0dfbeb7794d4a444a00e52e3123514ee27cec084bd21f6425b7037828cc2
+ languageName: node
+ linkType: hard
+
+"@types/d3-scale@npm:^4.0.8":
+ version: 4.0.8
+ resolution: "@types/d3-scale@npm:4.0.8"
+ dependencies:
+ "@types/d3-time": "npm:*"
+ checksum: 10c0/57de90e4016f640b83cb960b7e3a0ab3ed02e720898840ddc5105264ffcfea73336161442fdc91895377c2d2f91904d637282f16852b8535b77e15a761c8e99e
+ languageName: node
+ linkType: hard
+
+"@types/d3-shape@npm:^3.1.6":
+ version: 3.1.6
+ resolution: "@types/d3-shape@npm:3.1.6"
+ dependencies:
+ "@types/d3-path": "npm:*"
+ checksum: 10c0/0625715925d3c7ed3d44ce998b42c993f063c31605b6e4a8046c4be0fe724e2d214fc83e86d04f429a30a6e1f439053e92b0d9e59e1180c3a5327b4a6e79fa0a
+ languageName: node
+ linkType: hard
+
+"@types/d3-time@npm:*":
+ version: 3.0.4
+ resolution: "@types/d3-time@npm:3.0.4"
+ checksum: 10c0/6d9e2255d63f7a313a543113920c612e957d70da4fb0890931da6c2459010291b8b1f95e149a538500c1c99e7e6c89ffcce5554dd29a31ff134a38ea94b6d174
+ languageName: node
+ linkType: hard
+
"@types/debug@npm:^4.0.0":
version: 4.1.12
resolution: "@types/debug@npm:4.1.12"
@@ -2790,7 +3003,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/prop-types@npm:*":
+"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.2":
version: 15.7.14
resolution: "@types/prop-types@npm:15.7.14"
checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1
@@ -4225,6 +4438,129 @@ __metadata:
languageName: node
linkType: hard
+"d3-array@npm:2":
+ version: 2.12.1
+ resolution: "d3-array@npm:2.12.1"
+ dependencies:
+ internmap: "npm:^1.0.0"
+ checksum: 10c0/7eca10427a9f113a4ca6a0f7301127cab26043fd5e362631ef5a0edd1c4b2dd70c56ed317566700c31e4a6d88b55f3951aaba192291817f243b730cb2352882e
+ languageName: node
+ linkType: hard
+
+"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3":
+ version: 3.2.4
+ resolution: "d3-array@npm:3.2.4"
+ dependencies:
+ internmap: "npm:1 - 2"
+ checksum: 10c0/08b95e91130f98c1375db0e0af718f4371ccacef7d5d257727fe74f79a24383e79aba280b9ffae655483ffbbad4fd1dec4ade0119d88c4749f388641c8bf8c50
+ languageName: node
+ linkType: hard
+
+"d3-color@npm:1 - 3, d3-color@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "d3-color@npm:3.1.0"
+ checksum: 10c0/a4e20e1115fa696fce041fbe13fbc80dc4c19150fa72027a7c128ade980bc0eeeba4bcf28c9e21f0bce0e0dbfe7ca5869ef67746541dcfda053e4802ad19783c
+ languageName: node
+ linkType: hard
+
+"d3-format@npm:1 - 3":
+ version: 3.1.0
+ resolution: "d3-format@npm:3.1.0"
+ checksum: 10c0/049f5c0871ebce9859fc5e2f07f336b3c5bfff52a2540e0bac7e703fce567cd9346f4ad1079dd18d6f1e0eaa0599941c1810898926f10ac21a31fd0a34b4aa75
+ languageName: node
+ linkType: hard
+
+"d3-format@npm:^1.4.4":
+ version: 1.4.5
+ resolution: "d3-format@npm:1.4.5"
+ checksum: 10c0/40800a2fb2182d2d711cea3acc2b8b2b3afdb6f644c51de77feb9b08a6150b14c753933d2fd4ad2f6f45130757b738673372c45b4b820466c560f3b1ec0b3ce8
+ languageName: node
+ linkType: hard
+
+"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "d3-interpolate@npm:3.0.1"
+ dependencies:
+ d3-color: "npm:1 - 3"
+ checksum: 10c0/19f4b4daa8d733906671afff7767c19488f51a43d251f8b7f484d5d3cfc36c663f0a66c38fe91eee30f40327443d799be17169f55a293a3ba949e84e57a33e6a
+ languageName: node
+ linkType: hard
+
+"d3-path@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "d3-path@npm:3.1.0"
+ checksum: 10c0/dc1d58ec87fa8319bd240cf7689995111a124b141428354e9637aa83059eb12e681f77187e0ada5dedfce346f7e3d1f903467ceb41b379bfd01cd8e31721f5da
+ languageName: node
+ linkType: hard
+
+"d3-scale-chromatic@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "d3-scale-chromatic@npm:3.1.0"
+ dependencies:
+ d3-color: "npm:1 - 3"
+ d3-interpolate: "npm:1 - 3"
+ checksum: 10c0/9a3f4671ab0b971f4a411b42180d7cf92bfe8e8584e637ce7e698d705e18d6d38efbd20ec64f60cc0dfe966c20d40fc172565bc28aaa2990c0a006360eed91af
+ languageName: node
+ linkType: hard
+
+"d3-scale@npm:^4.0.2":
+ version: 4.0.2
+ resolution: "d3-scale@npm:4.0.2"
+ dependencies:
+ d3-array: "npm:2.10.0 - 3"
+ d3-format: "npm:1 - 3"
+ d3-interpolate: "npm:1.2.0 - 3"
+ d3-time: "npm:2.1.1 - 3"
+ d3-time-format: "npm:2 - 4"
+ checksum: 10c0/65d9ad8c2641aec30ed5673a7410feb187a224d6ca8d1a520d68a7d6eac9d04caedbff4713d1e8545be33eb7fec5739983a7ab1d22d4e5ad35368c6729d362f1
+ languageName: node
+ linkType: hard
+
+"d3-shape@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "d3-shape@npm:3.2.0"
+ dependencies:
+ d3-path: "npm:^3.1.0"
+ checksum: 10c0/f1c9d1f09926daaf6f6193ae3b4c4b5521e81da7d8902d24b38694517c7f527ce3c9a77a9d3a5722ad1e3ff355860b014557b450023d66a944eabf8cfde37132
+ languageName: node
+ linkType: hard
+
+"d3-time-format@npm:2 - 4":
+ version: 4.1.0
+ resolution: "d3-time-format@npm:4.1.0"
+ dependencies:
+ d3-time: "npm:1 - 3"
+ checksum: 10c0/735e00fb25a7fd5d418fac350018713ae394eefddb0d745fab12bbff0517f9cdb5f807c7bbe87bb6eeb06249662f8ea84fec075f7d0cd68609735b2ceb29d206
+ languageName: node
+ linkType: hard
+
+"d3-time-format@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "d3-time-format@npm:3.0.0"
+ dependencies:
+ d3-time: "npm:1 - 2"
+ checksum: 10c0/0abe3379f07d1c12ce8930cdddad1223c99cd3e4eac05cf409b5a7953e9ebed56a95a64b0977f63958cfb6101fa4a2a85533a5eae40df84f22c0117dbf5e8982
+ languageName: node
+ linkType: hard
+
+"d3-time@npm:1 - 2":
+ version: 2.1.1
+ resolution: "d3-time@npm:2.1.1"
+ dependencies:
+ d3-array: "npm:2"
+ checksum: 10c0/4a01770a857bc37d2bafb8f00250e0e6a1fcc8051aea93e5eed168d8ee93e92da508a75ab5e42fc5472aa37e2a83aac68afaf3f12d9167c184ce781faadf5682
+ languageName: node
+ linkType: hard
+
+"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3":
+ version: 3.1.0
+ resolution: "d3-time@npm:3.1.0"
+ dependencies:
+ d3-array: "npm:2 - 3"
+ checksum: 10c0/a984f77e1aaeaa182679b46fbf57eceb6ebdb5f67d7578d6f68ef933f8eeb63737c0949991618a8d29472dbf43736c7d7f17c452b2770f8c1271191cba724ca1
+ languageName: node
+ linkType: hard
+
"dargs@npm:^7.0.0":
version: 7.0.0
resolution: "dargs@npm:7.0.0"
@@ -6416,6 +6752,20 @@ __metadata:
languageName: node
linkType: hard
+"internmap@npm:1 - 2":
+ version: 2.0.3
+ resolution: "internmap@npm:2.0.3"
+ checksum: 10c0/8cedd57f07bbc22501516fbfc70447f0c6812871d471096fad9ea603516eacc2137b633633daf432c029712df0baefd793686388ddf5737e3ea15074b877f7ed
+ languageName: node
+ linkType: hard
+
+"internmap@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "internmap@npm:1.0.1"
+ checksum: 10c0/60942be815ca19da643b6d4f23bd0bf4e8c97abbd080fb963fe67583b60bdfb3530448ad4486bae40810e92317bded9995cc31411218acc750d72cd4e8646eee
+ languageName: node
+ linkType: hard
+
"ip-address@npm:^9.0.5":
version: 9.0.5
resolution: "ip-address@npm:9.0.5"