diff --git a/.env b/.env
new file mode 100644
index 0000000..0d10143
--- /dev/null
+++ b/.env
@@ -0,0 +1 @@
+NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080"
\ No newline at end of file
diff --git a/package.json b/package.json
index 4fdaa9a..07cbd17 100644
--- a/package.json
+++ b/package.json
@@ -9,9 +9,15 @@
"lint": "next lint"
},
"dependencies": {
+ "ag-grid-react": "^32.1.0",
+ "axios": "^1.7.7",
"next": "14.2.7",
"react": "^18",
- "react-dom": "^18"
+ "react-colorful": "^5.6.1",
+ "react-datepicker": "^7.3.0",
+ "react-dom": "^18",
+ "react-responsive-modal": "^6.4.2",
+ "recoil": "^0.7.7"
},
"devDependencies": {
"postcss": "^8",
diff --git a/src/app/RecoilWrapper.js b/src/app/RecoilWrapper.js
new file mode 100644
index 0000000..2f773bb
--- /dev/null
+++ b/src/app/RecoilWrapper.js
@@ -0,0 +1,7 @@
+'use client'
+
+import { RecoilRoot } from 'recoil'
+
+export default function RecoilRootWrapper({ children }) {
+ return {children}
+}
diff --git a/src/app/colorpicker/page.jsx b/src/app/colorpicker/page.jsx
new file mode 100644
index 0000000..45cc9dc
--- /dev/null
+++ b/src/app/colorpicker/page.jsx
@@ -0,0 +1,17 @@
+'use client'
+
+import { useState } from 'react'
+import ColorPicker from '@/components/colorpicker/ColorPicker'
+
+export default function ColorpickerPage() {
+ const [color, setColor] = useState('#ff0000')
+
+ return (
+ <>
+
+
+
+ {color}
+ >
+ )
+}
diff --git a/src/app/datepicker/page.jsx b/src/app/datepicker/page.jsx
new file mode 100644
index 0000000..e7a76f5
--- /dev/null
+++ b/src/app/datepicker/page.jsx
@@ -0,0 +1,32 @@
+'use client'
+
+import RangeDatePicker from '@/components/datepicker/RangeDatePicker'
+import SingleDatePicker from '@/components/datepicker/SingleDatePicker'
+import { useState } from 'react'
+
+export default function DatepickerPage() {
+ const [startDate, setStartDate] = useState(new Date())
+ const singleDatePickerProps = {
+ startDate,
+ setStartDate,
+ }
+
+ const [dateRange, setDateRange] = useState([null, null])
+ const [startRangeDate, endRangeDate] = dateRange
+ const rangeDatePickerProps = {
+ startRangeDate,
+ endRangeDate,
+ setDateRange,
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ )
+}
diff --git a/src/app/grid/page.jsx b/src/app/grid/page.jsx
new file mode 100644
index 0000000..514efcb
--- /dev/null
+++ b/src/app/grid/page.jsx
@@ -0,0 +1,26 @@
+'use client'
+
+import { useEffect, useState } from 'react'
+import { useAxios } from '@/hooks/useAxios'
+import QGrid from '@/components/grid/QGrid'
+
+export default function GridPage() {
+ const { get } = useAxios()
+
+ const [gridProps, setGridProps] = useState({
+ gridData: [],
+ isPageable: false,
+ })
+
+ useEffect(() => {
+ async function fetchData() {
+ // const response = await fetch('https://www.ag-grid.com/example-assets/space-mission-data.json')
+ // const data = await response.json()
+ const data = await get({ url: 'https://www.ag-grid.com/example-assets/space-mission-data.json' })
+ setGridProps({ ...gridProps, gridData: data })
+ }
+ fetchData()
+ }, [])
+
+ return
+}
diff --git a/src/app/layout.js b/src/app/layout.js
index 86e968b..e4745fe 100644
--- a/src/app/layout.js
+++ b/src/app/layout.js
@@ -1,3 +1,5 @@
+import RecoilRootWrapper from './RecoilWrapper'
+import QModal from '@/components/modal/QModal'
import '@/styles/style.scss'
export const metadata = {
@@ -8,7 +10,12 @@ export const metadata = {
export default function RootLayout({ children }) {
return (
- {children}
+
+
+ {children}
+
+
+
)
}
diff --git a/src/app/modal/page.jsx b/src/app/modal/page.jsx
new file mode 100644
index 0000000..9b2a97f
--- /dev/null
+++ b/src/app/modal/page.jsx
@@ -0,0 +1,42 @@
+'use client'
+
+import { useRecoilState } from 'recoil'
+import { modalContent, modalState } from '@/store/modalAtom'
+
+export default function ModalPage() {
+ const [open, setOpen] = useRecoilState(modalState)
+ const [contents, setContent] = useRecoilState(modalContent)
+
+ const ipsum = (
+ <>
+ title
+
+ 저작자·발명가·과학기술자와 예술가의 권리는 법률로써 보호한다. 이 헌법은 1988년 2월 25일부터 시행한다. 다만, 이 헌법을 시행하기 위하여 필요한
+ 법률의 제정·개정과 이 헌법에 의한 대통령 및 국회의원의 선거 기타 이 헌법시행에 관한 준비는 이 헌법시행 전에 할 수 있다.
+
+
+ 국가는 주택개발정책등을 통하여 모든 국민이 쾌적한 주거생활을 할 수 있도록 노력하여야 한다. 통신·방송의 시설기준과 신문의 기능을 보장하기
+ 위하여 필요한 사항은 법률로 정한다.
+
+
+ 국회에서 의결된 법률안은 정부에 이송되어 15일 이내에 대통령이 공포한다. 선거에 관한 경비는 법률이 정하는 경우를 제외하고는 정당 또는
+ 후보자에게 부담시킬 수 없다.
+
+ >
+ )
+
+ return (
+ <>
+
+ {
+ setContent(ipsum)
+ setOpen(true)
+ }}
+ >
+ OPEN MODAL
+
+
+ >
+ )
+}
diff --git a/src/components/colorpicker/ColorPicker.jsx b/src/components/colorpicker/ColorPicker.jsx
new file mode 100644
index 0000000..fc78d8c
--- /dev/null
+++ b/src/components/colorpicker/ColorPicker.jsx
@@ -0,0 +1,13 @@
+import { HexColorPicker } from 'react-colorful'
+
+export default function ColorPicker(props) {
+ const { color, setColor } = props
+
+ return (
+ <>
+
+
+
+ >
+ )
+}
diff --git a/src/components/datepicker/RangeDatePicker.jsx b/src/components/datepicker/RangeDatePicker.jsx
new file mode 100644
index 0000000..ad802f4
--- /dev/null
+++ b/src/components/datepicker/RangeDatePicker.jsx
@@ -0,0 +1,19 @@
+import DatePicker from 'react-datepicker'
+import 'react-datepicker/dist/react-datepicker.css'
+
+export default function RangeDatePicker(props) {
+ const { startRangeDate, endRangeDate, setDateRange } = props
+
+ return (
+ {
+ setDateRange(update)
+ }}
+ isClearable={true}
+ />
+ )
+}
diff --git a/src/components/datepicker/SingleDatePicker.jsx b/src/components/datepicker/SingleDatePicker.jsx
new file mode 100644
index 0000000..ca5feba
--- /dev/null
+++ b/src/components/datepicker/SingleDatePicker.jsx
@@ -0,0 +1,8 @@
+import DatePicker from 'react-datepicker'
+import 'react-datepicker/dist/react-datepicker.css'
+
+export default function SingleDatePicker(props) {
+ const { startDate, setStartDate } = props
+
+ return setStartDate(date)} />
+}
diff --git a/src/components/grid/QGrid.jsx b/src/components/grid/QGrid.jsx
new file mode 100644
index 0000000..99c3fd6
--- /dev/null
+++ b/src/components/grid/QGrid.jsx
@@ -0,0 +1,88 @@
+'use client'
+
+import { useCallback, useEffect, useMemo, useState } from 'react'
+import { AgGridReact } from 'ag-grid-react'
+
+import 'ag-grid-community/styles/ag-grid.css'
+import 'ag-grid-community/styles/ag-theme-quartz.css'
+
+export default function QGrid(props) {
+ const { gridData, gridColumns, isPageable = true } = props
+ const [count, setCount] = useState(0)
+ const [clickedCount, setClickedCount] = useState(0)
+ /**
+ * 행 데이터를 설정할 때 useState을 사용하여 렌더링 전반에 걸쳐 일관된 배열 참조를 유지하는 것이 좋습니다
+ */
+ const [rowData, setRowData] = useState(null)
+
+ /**
+ * Column Definitions를 설정할 때는 useMemo 또는 useState를 사용하여 렌더 간에 일관된 참조를 유지하십시오.
+ * 응용 프로그램이 Column Definitions를 동적으로 변경하는 경우에도 렌더링 간에 일관된 참조를 유지하려면 useMemo 또는 useState를 사용하십시오.
+ */
+ const [colDefs, setColDefs] = useState(
+ gridColumns ?? [
+ { field: 'mission', filter: true },
+ { field: 'company' },
+ { field: 'location' },
+ { field: 'date' },
+ { field: 'price', valueFormatter: (params) => `₩ ${params.value.toLocaleString()}` },
+ { field: 'successful' },
+ { field: 'rocket' },
+ ],
+ )
+
+ /**
+ * defaultColDef 속성을 제공할 때 이 인라인 또는 구성 요소의 단순 개체로 정의하지 마십시오. 이렇게 하면 모든 렌더링에서 새 인스턴스가 생성됩니다.
+ * 대신 or useState 를 사용하여 useMemo 렌더 간에 일관된 참조가 유지되도록 합니다.
+ */
+ const defaultColDef = useMemo(() => {
+ filter: true
+ }, [])
+
+ /**
+ * 단순 유형(string, boolean 및 number)의 속성은 렌더링 간에 값으로 비교되므로 후크를 사용할 필요가 없습니다.
+ */
+ const rowBuffer = 0
+
+ /**
+ * 모든 렌더링에서 그리드 상태를 재설정하지 않도록 useCallback을 사용하는 것이 좋습니다.
+ */
+ const isRowSelectable = useCallback((node) => node.data.value > count, [count])
+
+ /**
+ * Event Listeners의 경우 이벤트 처리기가 그리드 내에서 업데이트를 트리거하지 않으므로 useCallback을 사용할 필요가 없습니다.
+ * 그러나 콜백과 일관성을 유지하고 항상 useCallback을 사용하는 것이 더 쉬울 수 있습니다.
+ */
+ const onFilterOpened = useCallback(() => {
+ console.log(`number of clicks is ${clickedCount}`)
+ }, [clickedCount])
+
+ // Fetch data & update rowData state
+ useEffect(() => {
+ // async function fetchData() {
+ // const response = await fetch('https://www.ag-grid.com/example-assets/space-mission-data.json')
+ // const data = await response.json()
+ // setRowData(data)
+ // }
+
+ console.log('use effect')
+ gridData ? setRowData(gridData) : ''
+ }, [gridData])
+
+ return (
+
+ )
+}
diff --git a/src/components/modal/QModal.jsx b/src/components/modal/QModal.jsx
new file mode 100644
index 0000000..1cf0191
--- /dev/null
+++ b/src/components/modal/QModal.jsx
@@ -0,0 +1,20 @@
+'use client'
+
+import { useRecoilState, useRecoilValue } from 'recoil'
+
+import { Modal } from 'react-responsive-modal'
+
+import { modalContent, modalState } from '@/store/modalAtom'
+
+import 'react-responsive-modal/styles.css'
+
+export default function QModal() {
+ const [open, setOpen] = useRecoilState(modalState)
+ const children = useRecoilValue(modalContent)
+
+ return (
+ setOpen(false)} center>
+ {children}
+
+ )
+}
diff --git a/src/hooks/useAxios.js b/src/hooks/useAxios.js
new file mode 100644
index 0000000..898b78e
--- /dev/null
+++ b/src/hooks/useAxios.js
@@ -0,0 +1,70 @@
+import axios from 'axios'
+
+const AxiosType = {
+ INTERNAL: 'Internal',
+ EXTERNAL: 'External',
+}
+
+export function useAxios() {
+ const getInstances = (url) => {
+ let type = AxiosType.INTERNAL
+ url.startsWith('http') ? (type = AxiosType.EXTERNAL) : ''
+
+ return axios.create({
+ baseURL: type === AxiosType.INTERNAL ? process.env.NEXT_PUBLIC_API_SERVER_PATH : '',
+ headers: {
+ Accept: 'application/json',
+ },
+ })
+ }
+
+ axios.interceptors.request.use((config) => {
+ // config['Authorization'] = localStorage.getItem('token')
+ //TODO: 인터셉터에서 추가 로직 구현
+ return config
+ })
+
+ axios.interceptors.request.use(undefined, (error) => {
+ //TODO: 인터셉터에서 에러 처리 로직 구현
+ // if (error.isAxiosError && e.response?.status === 401) {
+ // localStorage.removeItem('token')
+ // }
+ })
+
+ const get = async ({ url }) => {
+ return await getInstances(url)
+ .get(url)
+ .then((res) => res.data)
+ .catch(console.error)
+ }
+
+ const post = async ({ url, data }) => {
+ return await getInstances(url)
+ .post(url, data)
+ .then((res) => res.data)
+ .catch(console.error)
+ }
+
+ const put = async ({ url, data }) => {
+ return await getInstances(url)
+ .put(url, data)
+ .then((res) => res.data)
+ .catch(console.error)
+ }
+
+ const patch = async ({ url, data }) => {
+ return await getInstances(url)
+ .patch(url, data)
+ .then((res) => res.data)
+ .catch(console.error)
+ }
+
+ const del = async ({ url }) => {
+ return await getInstances(url)
+ .delete(url)
+ .then((res) => res.data)
+ .catch(console.error)
+ }
+
+ return { get, post, put, patch, del }
+}
diff --git a/src/store/modalAtom.js b/src/store/modalAtom.js
new file mode 100644
index 0000000..a9a708a
--- /dev/null
+++ b/src/store/modalAtom.js
@@ -0,0 +1,15 @@
+import { atom } from 'recoil'
+
+export const modalState = atom({
+ key: 'modalState',
+ default: false,
+})
+
+export const modalContent = atom({
+ key: 'modalContent',
+ default: (
+ <>
+ test
+ >
+ ),
+})
diff --git a/yarn.lock b/yarn.lock
index c12c138..90960ab 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,6 +7,54 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+"@bedrock-layout/use-forwarded-ref@^1.3.1":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@bedrock-layout/use-forwarded-ref/-/use-forwarded-ref-1.6.1.tgz#e0d25c35af41ccaa36df809a7de8d5ccd9c70d1e"
+ integrity sha512-GD9A9AFLzFNjr7k6fgerSqxfwDWl+wsPS11PErOKe1zkVz0y7RGC9gzlOiX/JrgpyB3NFHWIuGtoOQqifJQQpw==
+ dependencies:
+ "@bedrock-layout/use-stateful-ref" "^1.4.1"
+
+"@bedrock-layout/use-stateful-ref@^1.4.1":
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/@bedrock-layout/use-stateful-ref/-/use-stateful-ref-1.4.1.tgz#c543c61d15885e19506f068618a4d6427a5bf817"
+ integrity sha512-4eKO2KdQEXcR5LI4QcxqlJykJUDQJWDeWYAukIn6sRQYoabcfI5kDl61PUi6FR6o8VFgQ8IEP7HleKqWlSe8SQ==
+
+"@floating-ui/core@^1.6.0":
+ version "1.6.7"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.7.tgz#7602367795a390ff0662efd1c7ae8ca74e75fb12"
+ integrity sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==
+ dependencies:
+ "@floating-ui/utils" "^0.2.7"
+
+"@floating-ui/dom@^1.0.0":
+ version "1.6.10"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.10.tgz#b74c32f34a50336c86dcf1f1c845cf3a39e26d6f"
+ integrity sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==
+ dependencies:
+ "@floating-ui/core" "^1.6.0"
+ "@floating-ui/utils" "^0.2.7"
+
+"@floating-ui/react-dom@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0"
+ integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==
+ dependencies:
+ "@floating-ui/dom" "^1.0.0"
+
+"@floating-ui/react@^0.26.2":
+ version "0.26.23"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.23.tgz#28985e5ce482c34f347f28076f11267e47a933bd"
+ integrity sha512-9u3i62fV0CFF3nIegiWiRDwOs7OW/KhSUJDNx2MkQM3LbE5zQOY01sL3nelcVBXvX7Ovvo3A49I8ql+20Wg/Hw==
+ dependencies:
+ "@floating-ui/react-dom" "^2.1.1"
+ "@floating-ui/utils" "^0.2.7"
+ tabbable "^6.0.0"
+
+"@floating-ui/utils@^0.2.7":
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.7.tgz#d0ece53ce99ab5a8e37ebdfe5e32452a2bfc073e"
+ integrity sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
@@ -140,6 +188,26 @@
"@swc/counter" "^0.1.3"
tslib "^2.4.0"
+ag-charts-types@10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/ag-charts-types/-/ag-charts-types-10.1.0.tgz#f265665f6b92742bb0bc2dcfab319b21e6d78749"
+ integrity sha512-pk9ft8hbgTXJ/thI/SEUR1BoauNplYExpcHh7tMOqVikoDsta1O15TB1ZL4XWnl4TPIzROBmONKsz7d8a2HBuQ==
+
+ag-grid-community@32.1.0:
+ version "32.1.0"
+ resolved "https://registry.yarnpkg.com/ag-grid-community/-/ag-grid-community-32.1.0.tgz#69d5b0af1b4d5cd5262705ecd87a3bd16c9c4155"
+ integrity sha512-RVvkjRH61nuCXwIqTKQPqNbKR+8cGBKw7S1qmmMXsy0pCBAJaQn4kL3v31hKHxDtV4bPscBXLFKGnKzHuss0GQ==
+ dependencies:
+ ag-charts-types "10.1.0"
+
+ag-grid-react@^32.1.0:
+ version "32.1.0"
+ resolved "https://registry.yarnpkg.com/ag-grid-react/-/ag-grid-react-32.1.0.tgz#539620927a187961911b99439917df58076ad8bb"
+ integrity sha512-GDbtvU3aicSajWXWxvQio5ZaPqJDx2jzgRBKQf1RF1IVzL+XATDmLFNuMND0+wJ/VW/xUjBFjiq9W1fjXg/DCA==
+ dependencies:
+ ag-grid-community "32.1.0"
+ prop-types "^15.8.1"
+
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
@@ -180,6 +248,20 @@ arg@^5.0.2:
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+axios@^1.7.7:
+ version "1.7.7"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f"
+ integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -190,6 +272,11 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+body-scroll-lock@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec"
+ integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==
+
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
@@ -236,11 +323,21 @@ caniuse-lite@^1.0.30001579:
optionalDependencies:
fsevents "~2.3.2"
+classnames@^2.3.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
+ integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
+
client-only@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
+clsx@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
+ integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -253,6 +350,13 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
commander@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
@@ -272,6 +376,16 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+date-fns@^3.3.1:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf"
+ integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
didyoumean@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
@@ -322,6 +436,11 @@ fill-range@^7.1.1:
dependencies:
to-regex-range "^5.0.1"
+follow-redirects@^1.15.6:
+ version "1.15.6"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
+
foreground-child@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77"
@@ -330,6 +449,15 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.0"
signal-exit "^4.0.1"
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
@@ -371,6 +499,11 @@ graceful-fs@^4.2.11:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+hamt_plus@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601"
+ integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==
+
hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
@@ -458,7 +591,7 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-loose-envify@^1.1.0:
+loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -483,6 +616,18 @@ micromatch@^4.0.4, micromatch@^4.0.5:
braces "^3.0.3"
picomatch "^2.3.1"
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
minimatch@^9.0.4:
version "9.0.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
@@ -537,7 +682,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-object-assign@^4.0.1:
+object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -652,11 +797,41 @@ postcss@^8, postcss@^8.4.23:
picocolors "^1.0.1"
source-map-js "^1.2.0"
+prop-types@^15.7.2, prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+react-colorful@^5.6.1:
+ version "5.6.1"
+ resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b"
+ integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==
+
+react-datepicker@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-7.3.0.tgz#666664a609d4b57b095083fe29d080943fa7b3ed"
+ integrity sha512-EqRKLAtLZUTztiq6a+tjSjQX9ES0Xd229JPckAtyZZ4GoY3rtvNWAzkYZnQUf6zTWT50Ki0+t+W9VRQIkSJLfg==
+ dependencies:
+ "@floating-ui/react" "^0.26.2"
+ clsx "^2.1.0"
+ date-fns "^3.3.1"
+ prop-types "^15.7.2"
+ react-onclickoutside "^6.13.0"
+
react-dom@^18:
version "18.3.1"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
@@ -665,6 +840,25 @@ react-dom@^18:
loose-envify "^1.1.0"
scheduler "^0.23.2"
+react-is@^16.13.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-onclickoutside@^6.13.0:
+ version "6.13.1"
+ resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz#1f5e0241c08784b6e65745d91aca0d700c548a89"
+ integrity sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==
+
+react-responsive-modal@^6.4.2:
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/react-responsive-modal/-/react-responsive-modal-6.4.2.tgz#666b5c35b232cec617981006c9fe59414531a5a0"
+ integrity sha512-ARjGEKE5Gu5CSvyA8U9ARVbtK4SMAtdXsjtzwtxRlQIHC99RQTnOUctLpl7+/sp1Kg1OJZ6yqvp6ivd4TBueEw==
+ dependencies:
+ "@bedrock-layout/use-forwarded-ref" "^1.3.1"
+ body-scroll-lock "^3.1.5"
+ classnames "^2.3.1"
+
react@^18:
version "18.3.1"
resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
@@ -686,6 +880,13 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+recoil@^0.7.7:
+ version "0.7.7"
+ resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.7.tgz#c5f2c843224384c9c09e4a62c060fb4c1454dc8e"
+ integrity sha512-8Og5KPQW9LwC577Vc7Ug2P0vQshkv1y3zG3tSSkWMqkWSwHmE+by06L8JtnGocjW6gcCvfwB3YtrJG6/tWivNQ==
+ dependencies:
+ hamt_plus "1.0.2"
+
resolve@^1.1.7, resolve@^1.22.2:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
@@ -823,6 +1024,11 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+tabbable@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+
tailwindcss@^3.4.1:
version "3.4.10"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.10.tgz#70442d9aeb78758d1f911af29af8255ecdb8ffef"