diff --git a/README.md b/README.md index a500774..7273b2f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,82 @@ -Form Control Convention +admin -> backend -> client (문항 커스텀으로 만들때) -1. data-testid +```ts +export const QuestionTypes = { + checkbox: "checkbox", + selector: "selector", + slider: "slider", + doubleSlider: "doubleSlider", +} as const; +interface FormProps { + title: string; + description: string; + questions: { + questionText: string; + questionType: keyof typeof QuestionTypes; + dataType: string; + options: { label?: string; value: any }[]; + }[]; +} ``` -data-testid: _{option.label} -ex. - -data-testid: checkbox\_{option.label} +```js +const formProps: FormProps = { + title: "test", + description: "test", + questions: [ + { + questionId + questionText: "test-question-slider", + questionType: "slider", + dataType: "number", + options: [ + { label: "label1", value: 1 }, + { label: "label2", value: 2 }, + { label: "label3", value: 3 }, + ], + }, + { + questionText: "test-question-checkbox", + questionType: "checkbox", + dataType: "number", + options: [ + { label: "label1", value: "value1" }, + { label: "label2", value: "value2" }, + { label: "label3", value: "value3" }, + ], + }, + { + questionText: "test-question-selector", + questionType: "selector", + dataType: "number", + options: [ + { label: "label1", value: "value1" }, + { label: "label2", value: "value2" }, + { label: "label3", value: "value3" }, + ], + }, + { + questionText: "test-question-doubleSlider", + questionType: "doubleSlider", + dataType: "number", + options: [ + { label: "label1", value: 1 }, + { label: "label2", value: 2 }, + { label: "label3", value: 3 }, + { label: "label4", value: 4 }, + { label: "label5", value: 5 }, + ], + }, + ], +}; ``` -2. htmlFor, id +client (문항 응답자가 응답완료해서 백엔드로 보낼때) -> backend + +```ts +interface ResponseSchema { + sruveyId: +} -``` -const id = useId(); ``` diff --git a/package.json b/package.json index 33d75e6..a5773f3 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,12 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", "prettier": "prettier --write .", - "test": "jest --config jest.config.ts" + "test": "jest --config jest.config.ts --ci --runInBand" }, "dependencies": { "@radix-ui/react-avatar": "^1.1.1", @@ -23,6 +23,11 @@ "@radix-ui/react-toggle": "^1.1.0", "@radix-ui/react-toggle-group": "^1.1.0", "@reduxjs/toolkit": "^2.3.0", + "@stackflow/core": "^1.1.0", + "@stackflow/plugin-basic-ui": "^1.10.1", + "@stackflow/plugin-history-sync": "^1.7.0", + "@stackflow/plugin-renderer-basic": "^1.1.13", + "@stackflow/react": "^1.4.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "create-jest": "^29.7.0", @@ -45,6 +50,7 @@ "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.0.1", + "@testing-library/user-event": "^14.5.2", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/jest": "^29.5.14", "@types/node": "^22.9.0", diff --git a/src/apps/App.tsx b/src/apps/App.tsx index df3542b..810934f 100644 --- a/src/apps/App.tsx +++ b/src/apps/App.tsx @@ -1,14 +1,15 @@ import { Provider } from "react-redux"; -import { createBrowserRouter, RouterProvider } from "react-router-dom"; -import { router } from "./Router"; +import { Stack } from "./stackflow"; import { store } from "./store/store"; import "./styles/tailwind.css"; export default function App() { return ( - +
+ +
); } diff --git a/src/apps/constants/nav.ts b/src/apps/constants/nav.ts new file mode 100644 index 0000000..2b90da2 --- /dev/null +++ b/src/apps/constants/nav.ts @@ -0,0 +1,24 @@ +import { CirclePlus, HeartHandshake, MessagesSquare, User, UserSearch } from "lucide-react"; + +export const navBottom = [ + { + path: "/match", + label: "룸메 찾기", + icon: HeartHandshake, + }, + { + path: "/match/create", + label: "룸메 구하기", + icon: CirclePlus, + }, + { + path: "/chat", + label: "채팅", + icon: MessagesSquare, + }, + { + path: "/mypage", + label: "마이페이지", + icon: User, + }, +]; diff --git a/src/apps/stackflow.tsx b/src/apps/stackflow.tsx new file mode 100644 index 0000000..ffa2251 --- /dev/null +++ b/src/apps/stackflow.tsx @@ -0,0 +1,48 @@ +import { Fragment } from "react/jsx-runtime"; + +import { NavBottom } from "@/components/layouts/NavBottom"; + +import HomePage from "@/pages/home/HomePage"; +import MatchDeatilPage from "@/pages/match/MatchDeatilPage"; +import MatchListPage from "@/pages/match/MatchListPage"; + +import { AppScreen, AppScreenProps, basicUIPlugin } from "@stackflow/plugin-basic-ui"; +import { historySyncPlugin } from "@stackflow/plugin-history-sync"; +import { basicRendererPlugin } from "@stackflow/plugin-renderer-basic"; +import { stackflow } from "@stackflow/react"; + +export const { Stack, useFlow } = stackflow({ + transitionDuration: 250, + plugins: [ + basicRendererPlugin(), + basicUIPlugin({ + theme: "cupertino", + }), + historySyncPlugin({ + routes: { + HomePage: "/", + MatchListPage: "/match", + MatchDeatilPage: "/match/detail", + }, + fallbackActivity: () => "HomePage", + }), + ], + + activities: { + HomePage, + MatchListPage, + MatchDeatilPage, + }, + initialActivity: () => "HomePage", +}); + +export const Screen = ({ children, ...appScreenProps }: AppScreenProps) => { + return ( + + +
{children}
+
+ +
+ ); +}; diff --git a/src/apps/styles/tailwind.css b/src/apps/styles/tailwind.css index 1453f94..d0a23f6 100644 --- a/src/apps/styles/tailwind.css +++ b/src/apps/styles/tailwind.css @@ -3,6 +3,9 @@ @tailwind utilities; @layer base { + .screen { + @apply relative mx-auto h-full w-full max-w-[500px]; + } :root { --background: 0 0% 100%; --foreground: 240 10% 3.9%; diff --git a/src/components/layouts/NavBottom.tsx b/src/components/layouts/NavBottom.tsx new file mode 100644 index 0000000..1c31c75 --- /dev/null +++ b/src/components/layouts/NavBottom.tsx @@ -0,0 +1,20 @@ +import { navBottom } from "@/apps/constants/nav"; + +export const NavBottom = () => { + return ( + + ); +}; diff --git a/src/domains/match/components/MatchListItem.tsx b/src/domains/match/components/MatchListItem.tsx index 5db3429..ac63cda 100644 --- a/src/domains/match/components/MatchListItem.tsx +++ b/src/domains/match/components/MatchListItem.tsx @@ -9,7 +9,7 @@ import { Button } from "@/components/ui/button"; import { ParticipatingUserCardList } from "./ParticipatingUserCardList"; -export interface MatchListItemProps extends React.ComponentProps<"li"> { +export interface MatchListItemProps extends React.ComponentProps<"div"> { title: string; dormitory: string; description: string; @@ -24,79 +24,24 @@ export const MatchListItem = ({ dormitory, currentQuota, maxQuota, + ...props }: MatchListItemProps) => { - const isParticipated = useSelector((state: RootState) => state.auth.isParticipated); - return ( - - -

{title}

-

{description}

-
-

- - {dormitory} -

-

- - - {currentQuota}/{maxQuota} - -

-
-
- - - - -
-
-
- -
{title}
-
-

- - - {currentQuota}/{maxQuota} - -

-

- - {dormitory} -

-
-
-

{description}

- -
- -
- -
- -
-
-
- - - +
+

{title}

+

{description}

+
+

+ + {dormitory} +

+

+ + + {currentQuota}/{maxQuota} + +

+
+
); }; diff --git a/src/main.tsx b/src/main.tsx index e2ac025..8074b76 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -2,4 +2,6 @@ import { createRoot } from "react-dom/client"; import App from "@/apps/App.tsx"; +import "@stackflow/plugin-basic-ui/index.css"; + createRoot(document.getElementById("root")!).render(); diff --git a/src/pages/auth/SignUpPage.tsx b/src/pages/auth/SignUpPage.tsx index e69de29..098dea0 100644 --- a/src/pages/auth/SignUpPage.tsx +++ b/src/pages/auth/SignUpPage.tsx @@ -0,0 +1,3 @@ +export default function SignUpPage() { + return
; +} diff --git a/src/pages/home/HomePage.tsx b/src/pages/home/HomePage.tsx index 25295c0..5db5f78 100644 --- a/src/pages/home/HomePage.tsx +++ b/src/pages/home/HomePage.tsx @@ -1,36 +1,41 @@ -import { useNavigate } from "react-router-dom"; +// import { useNavigate } from "react-router-dom"; +import { useFlow } from "@/apps/stackflow"; import { Button } from "@/components/ui/button"; import bgMain from "@/assets/bg__main.webp"; +import { AppScreen } from "@stackflow/plugin-basic-ui"; + export default function HomePage() { - const navigate = useNavigate(); + const { replace } = useFlow(); return ( -
- bg__main -
-
-
-

KNU ROOM

-

MATCH

-
-

경북대학교 룸메이트 매칭 서비스

-
-
- - + +
+ bg__main +
+
+
+

KNU ROOM

+

MATCH

+
+

경북대학교 룸메이트 매칭 서비스

+
+
+ + +
-
+
); } diff --git a/src/pages/match/MatchDeatilPage.tsx b/src/pages/match/MatchDeatilPage.tsx new file mode 100644 index 0000000..e99cac1 --- /dev/null +++ b/src/pages/match/MatchDeatilPage.tsx @@ -0,0 +1,5 @@ +import { Screen } from "@/apps/stackflow"; + +export default function MatchDeatilPage() { + return detail; +} diff --git a/src/pages/match/MatchListPage.tsx b/src/pages/match/MatchListPage.tsx index 1437556..25b7020 100644 --- a/src/pages/match/MatchListPage.tsx +++ b/src/pages/match/MatchListPage.tsx @@ -1,10 +1,9 @@ -import { useState } from "react"; - import { Plus } from "lucide-react"; +import { Screen, useFlow } from "@/apps/stackflow"; + import { Button } from "@/components/ui/button"; -import { useRemoveSearchParams } from "@/common/hooks/useRemoveSearchParams"; import { MatchListItem } from "@/domains/match/components/MatchListItem"; const dummyData = [ @@ -89,31 +88,25 @@ export enum MatchStatus { } export default function MatchListPage() { - useRemoveSearchParams(); - - const [isOpen, setIsOpen] = useState(true); - + const { push } = useFlow(); return ( -
-
- + +
+ {dummyData.map((data) => { + return ( + { + push("MatchDeatilPage", {}); + }} + /> + ); + })}
- - {dummyData.map((data) => { - return ( - setIsOpen(true)} - /> - ); - })} -
+ ); } diff --git a/src/pages/profile/RegisterInfoPage.tsx b/src/pages/profile/RegisterInfoPage.tsx index 4570bf6..e99ca4b 100644 --- a/src/pages/profile/RegisterInfoPage.tsx +++ b/src/pages/profile/RegisterInfoPage.tsx @@ -1,5 +1,7 @@ import { useNavigate } from "react-router-dom"; +import { FormProps } from "@/components/forms/FormRenderer"; + import RegisterInfoEnvSection from "./RegisterInfoEnvSection"; import RegisterInfoHobbySection from "./RegisterInfoHobbySection"; import RegisterInfoRelationSection from "./RegisterInfoRelationSection"; @@ -19,6 +21,23 @@ const SectionRouter = () => { return sections[getSection() - 1]; }; +const form: FormProps = { + title: "2024 상반기 경북대학교 기숙사", + description: "기숙사 입주를 위한 정보를 입력해주세요.", + questions: [ + { + questionText: "잠귀", + questionType: "selector", + dataType: "string", + options: [ + { label: "밝음", value: "bright" }, + { label: "보통", value: "normal" }, + { label: "어두움", value: "dark" }, + ], + }, + ], +}; + export default function RegisterInfoPage() { const navigate = useNavigate(); diff --git a/src/pages/profile/RegisterInfoSleepSection.tsx b/src/pages/profile/RegisterInfoSleepSection.tsx index ffef6bd..036c04f 100644 --- a/src/pages/profile/RegisterInfoSleepSection.tsx +++ b/src/pages/profile/RegisterInfoSleepSection.tsx @@ -4,8 +4,8 @@ import { registerInfoActions } from "@/apps/store/register-info.slice"; import { RootDispatch, RootState } from "@/apps/store/store"; import { CheckBoxWithLabelForm } from "@/components/forms/CheckBoxWithLabelForm"; +import { DoubleSliderWithLabelForm } from "@/components/forms/DoubleSliderWithLabelForm"; import { SelectorWithLabelForm } from "@/components/forms/SelectorWithLabelForm"; -import { DoubleSliderWithLabelForm } from "@/components/forms/SliderWithLabelForm"; import { Button } from "@/components/ui/button"; import { useSection } from "@/common/hooks/useSection"; diff --git a/yarn.lock b/yarn.lock index 67edce4..291bdf1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -300,7 +300,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.7": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== @@ -373,6 +373,11 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@emotion/hash@^0.9.0": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + "@esbuild/aix-ppc64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" @@ -1345,6 +1350,52 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@stackflow/core@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@stackflow/core/-/core-1.1.0.tgz#0a99dbc2ef16c6afa64f110cacf1252934513aa3" + integrity sha512-IjrcTM9itdmolgURRciq8xVpI0C3mmTRRoBn2smcRSjeDBk/qUM/k37QlL+uGgcoV+kaKXpkeVXhhSIFsYAKjw== + dependencies: + react-fast-compare "^3.2.2" + +"@stackflow/plugin-basic-ui@^1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@stackflow/plugin-basic-ui/-/plugin-basic-ui-1.10.1.tgz#a62542c568fe9eb55a4c16b2beafd8245c6a1065" + integrity sha512-V/9XLMprm3WVzSl4kLWECov7iuXArex7NKlbxR8cP4Uy+4EnVXay2opNXcHQHrzERuf/RTQb4QilK0CSIlCt7w== + dependencies: + "@stackflow/react-ui-core" "^1.1.2" + "@vanilla-extract/css" "^1.15.3" + "@vanilla-extract/dynamic" "^2.1.1" + "@vanilla-extract/private" "^1.0.5" + "@vanilla-extract/recipes" "^0.5.3" + +"@stackflow/plugin-history-sync@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@stackflow/plugin-history-sync/-/plugin-history-sync-1.7.0.tgz#c5f67a4d06e44af72bdc3cdb659c9e74834d8d76" + integrity sha512-7iJXWizB7x8cONzPdeVBkSPdRkR3Q8jVZv/84y5hyh6+MdZ9fbOKK7rtP1ZjN2/hk+kDBmXdE6jLN2b3dDWIQQ== + dependencies: + flatted "^3.3.1" + history "^5.3.0" + url-pattern "^1.0.3" + +"@stackflow/plugin-renderer-basic@^1.1.13": + version "1.1.13" + resolved "https://registry.yarnpkg.com/@stackflow/plugin-renderer-basic/-/plugin-renderer-basic-1.1.13.tgz#435258900a2464d048c3fe302a5da398bf956fb1" + integrity sha512-8C5QwFagDycFuBLfQ9ynVfpDeO9qeIeGYS3GkZ1Drv3nlc7lE0q1DAGJHLXGLTdra9mzsHCirrGR6sgYa1OA0w== + +"@stackflow/react-ui-core@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@stackflow/react-ui-core/-/react-ui-core-1.1.2.tgz#deda98058c1218a89448fde1fb64ed8f2e7878a4" + integrity sha512-E0v6zwriKkE5dByhL5/n0UR2TB6zCjYgnvp/RPHG+6VI2n2l197DtjdmDRRiFDa1mp2/xvcKXxXHngAIAW4WmA== + +"@stackflow/react@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@stackflow/react/-/react-1.4.1.tgz#efa68f91f34412587874399c0f9ef93dc4ffb6a6" + integrity sha512-udbUmfYz2hn36+rPej3NgQqLyR0hlj+Wllh+rWS5TBz7A1lkdvWkKzOx1lhrTrNhShGn06auNlys2OWne/N8lQ== + dependencies: + history "^5.3.0" + react-fast-compare "^3.2.2" + url-pattern "^1.0.3" + "@testing-library/dom@^10.4.0": version "10.4.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" @@ -1379,6 +1430,11 @@ dependencies: "@babel/runtime" "^7.12.5" +"@testing-library/user-event@^14.5.2": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -1700,6 +1756,41 @@ "@typescript-eslint/types" "8.14.0" eslint-visitor-keys "^3.4.3" +"@vanilla-extract/css@^1.15.3": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.16.0.tgz#d88276a7beae8953024b9b8dc4ae127dd6f9ab3a" + integrity sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg== + dependencies: + "@emotion/hash" "^0.9.0" + "@vanilla-extract/private" "^1.0.6" + css-what "^6.1.0" + cssesc "^3.0.0" + csstype "^3.0.7" + dedent "^1.5.3" + deep-object-diff "^1.1.9" + deepmerge "^4.2.2" + lru-cache "^10.4.3" + media-query-parser "^2.0.2" + modern-ahocorasick "^1.0.0" + picocolors "^1.0.0" + +"@vanilla-extract/dynamic@^2.1.1": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz#b1d1c1e0e392934c5a3bbb53f99069a7721311ac" + integrity sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A== + dependencies: + "@vanilla-extract/private" "^1.0.6" + +"@vanilla-extract/private@^1.0.5", "@vanilla-extract/private@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.6.tgz#f10bbf3189f7b827d0bd7f804a6219dd03ddbdd4" + integrity sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw== + +"@vanilla-extract/recipes@^0.5.3": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@vanilla-extract/recipes/-/recipes-0.5.5.tgz#da34e247be2c3d70e01ecfeb53310daadc608b74" + integrity sha512-VadU7+IFUwLNLMgks29AHav/K5h7DOEfTU91RItn5vwdPfzduodNg317YbgWCcpm7FSXkuR3B3X8ZOi95UOozA== + "@vitejs/plugin-react@^4.3.3": version "4.3.3" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz#28301ac6d7aaf20b73a418ee5c65b05519b4836c" @@ -2174,6 +2265,11 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" @@ -2201,7 +2297,7 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.2: +csstype@^3.0.2, csstype@^3.0.7: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -2308,7 +2404,7 @@ decimal.js@^10.4.2: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -dedent@^1.0.0: +dedent@^1.0.0, dedent@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== @@ -2318,6 +2414,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deep-object-diff@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" + integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== + deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" @@ -2724,6 +2825,11 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +flatted@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + foreground-child@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" @@ -2866,6 +2972,13 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +history@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" + html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -3658,7 +3771,7 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^10.2.0: +lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== @@ -3699,6 +3812,13 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +media-query-parser@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" + integrity sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w== + dependencies: + "@babel/runtime" "^7.12.5" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -3765,6 +3885,11 @@ minimatch@^9.0.4: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +modern-ahocorasick@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283" + integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA== + ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -4117,6 +4242,11 @@ react-dom@^18.3.1: loose-envify "^1.1.0" scheduler "^0.23.2" +react-fast-compare@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== + react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -4781,6 +4911,11 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" +url-pattern@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/url-pattern/-/url-pattern-1.0.3.tgz#0409292471b24f23c50d65a47931793d2b5acfc1" + integrity sha512-uQcEj/2puA4aq1R3A2+VNVBgaWYR24FdWjl7VNW83rnWftlhyzOZ/tBjezRiC2UkIzuxC8Top3IekN3vUf1WxA== + use-callback-ref@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693"