commit b51b940ac4056d79a9d78587f63a7f79fe1853ef Author: unknown Date: Tue May 14 22:19:14 2024 +0700 Initial commit, repo migration diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..eaad2c2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = tab +indent_size = 2 +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..fa0b16b --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +NEXT_PUBLIC_BACKEND_API= +NEXT_PUBLIC_API_FILE= \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..7fdc3af --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "extends": ["next", "plugin:react/recommended", "next/core-web-vitals", "eslint:recommended"], + "globals": { + "React": "readonly" + }, + "rules": { + "no-unused-vars": ["error", { "args": "after-used", "argsIgnorePattern": "^_" }] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d6d6b39 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env +.env*.local + +# vercel +.vercel + +# dev +*.md diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..50e56a8 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,11 @@ +module.exports = { + trailingComma: 'es5', + tabWidth: 2, + semi: false, + singleQuote: true, + jsxSingleQuote: true, + printWidth: 120, + useTabs: true, + bracketSpacing: true, + arrowParens: 'always', +} diff --git a/components/CClock/Clock.js b/components/CClock/Clock.js new file mode 100644 index 0000000..c3c4c63 --- /dev/null +++ b/components/CClock/Clock.js @@ -0,0 +1,59 @@ +import { useEffect, useState } from 'react' +import { Number } from './Number' +import { Word } from './Word' + +const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'] + +export const Clock = ({ h24 = true }) => { + const [hour, setHour] = useState(0) + const [minute, setMinute] = useState(0) + const [second, setSecond] = useState(0) + const [day, setDay] = useState(0) + const [pm, setPm] = useState(false) + + useEffect(() => { + const update = () => { + const date = new Date() + let hour = date.getHours() + if (!h24) { + hour = hour % 12 || 12 + } + setHour(hour) + setMinute(date.getMinutes()) + setSecond(date.getSeconds()) + setDay(date.getDay()) + setPm(date.getHours() >= 12) + } + + update() + + const interval = setInterval(() => { + update() + }, 1000) + + return () => clearInterval(interval) + }, [h24]) + + return ( +
+
+ {days.map((value, index) => ( +
+
+
+ + + + + +
+
+
+
+
+ ) +} diff --git a/components/CClock/Number.js b/components/CClock/Number.js new file mode 100644 index 0000000..217cd74 --- /dev/null +++ b/components/CClock/Number.js @@ -0,0 +1,9 @@ +export const Number = ({ value = 0 }) => { + const result = String(value).padStart(2, '0') + return ( +
+

88

+

{result}

+
+ ) +} diff --git a/components/CClock/Word.js b/components/CClock/Word.js new file mode 100644 index 0000000..60afa2f --- /dev/null +++ b/components/CClock/Word.js @@ -0,0 +1,13 @@ +export const Word = ({ value, hidden = false }) => { + const getStyle = () => { + return { + visibility: hidden ? 'hidden' : 'visible', + } + } + return ( +
+

{value}

+

{value}

+
+ ) +} diff --git a/components/CardCustom.js b/components/CardCustom.js new file mode 100644 index 0000000..bcb935c --- /dev/null +++ b/components/CardCustom.js @@ -0,0 +1,36 @@ +export const CardCustom = ({ header, content, type = 'success' }) => { + let backgroundColor + switch (type) { + case 'success': + backgroundColor = 'bg-green-100' + break + + case 'secondary': + backgroundColor = 'bg-gray-100' + break + + case 'biru': + backgroundColor = 'bg-biru' + break + + default: + backgroundColor = 'bg-green-100' + break + } + + return ( +
+

{header}

+

{content}

+
+ ) +} + +export const CardFilterLaporan = ({ header, children }) => { + return ( +
+

{header}

+
{children}
+
+ ) +} diff --git a/components/Datatables-v2.js b/components/Datatables-v2.js new file mode 100644 index 0000000..ecc7907 --- /dev/null +++ b/components/Datatables-v2.js @@ -0,0 +1,97 @@ +import { DataTable } from 'primereact/datatable' +import { Dropdown } from 'primereact/dropdown' +import { Paginator } from 'primereact/paginator' +import { DialogDashboard, DialogDelete } from './Dialog' + +export const DatatablePrimeV2 = ({ + children, + data, + loading, + sort, + first, + setLength, + totalRecords, + setPage, + setFirst, + length, + onSort, + dataDialog = { no_spp: false }, + displayDialog, + setDisplayDialog, + dialogDelete = { visible: false }, + setDialogDelete, + deleteTagihan, + page, + expandRow, +}) => { + const onPageChange = (event) => { + setPage(event.page) + setFirst(event.first) + } + + const templatePaginator = { + layout: 'RowsPerPageDropdown FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink CurrentPageReport', + RowsPerPageDropdown: (options) => { + const dropdownOptions = [ + { label: 10, value: 10 }, + { label: 50, value: 50 }, + { label: 100, value: 100 }, + { label: 'All', value: options.totalRecords }, + ] + + return ( + { + options.onChange(e) + setLength(e.value) + }} + /> + ) + }, + CurrentPageReport: (options) => { + return ( + + {options.first} - {options.last} of {options.totalRecords} + + ) + }, + } + + return ( + <> + + {children} + + {(data.length > 5 || page > 0) && ( + + )} + + {dataDialog.no_spp && ( + + )} + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/components/Datatables.js b/components/Datatables.js new file mode 100644 index 0000000..a99055f --- /dev/null +++ b/components/Datatables.js @@ -0,0 +1,191 @@ +import { useRouter } from 'next/router' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { DataTable } from 'primereact/datatable' +import { InputText } from 'primereact/inputtext' +import { Paginator } from 'primereact/paginator' +import { Toolbar } from 'primereact/toolbar' + +/** + * CUSTOM DATATABLES PRIME REACT + * @children column-column data + * @data isi dari datatables + * @dataDrawPrev untuk cek apakah ada data sebelumnya + * @dataDrawNext untuk cek apakah ada data setelahnya + * @draw untuk merubah draw/page datatables + * @setDraw untuk merubah draw/page datatables + * @buttonUpload button untuk upload data + * @buttonUploadLabel label button add + * @buttonAdd button untuk add data + * @buttonAddLabel label button add + * @dialogForm usestate untuk open/close dialog/modal form + * @setDialogForm set dialog form modal untuk set open/close + * @Form form modal dynamic + * @dataEdit state yang menyimpan data yang akan di edit + * @setDataEdit set state data edit + * @refresh state untuk refresh datatables + * @toast reference untuk toast + * @setSearch set state untuk pencarian pada datatables + * @buttonAddCustom untuk add pengajuan tagihan + * @buttonAddCustomLabel label button add custom + * @expandRow untuk detail row + * @fiturSearch untuk tampil kolom search + */ +export const DatatablePrime = ({ + children, + data, + dataDrawPrev = 0, + dataDrawNext = 0, + draw, + setDraw, + buttonUpload, + buttonUploadLabel, + buttonAdd, + buttonAddLabel, + dialogForm, + setDialogForm, + setDialogUpload, + Form, + dataEdit, + setDataEdit, + refresh, + toast, + setSearch, + buttonAddCustom, + buttonAddCustomLabel, + linkCustom, + expandRow, + fiturSearch = true, + showHeader = true, +}) => { + const first = 0 + const rows = 30 + const router = useRouter() + const keyUpSearch = (data) => { + setSearch(data) + } + + const leftToolbarTemplate = () => { + return <> + } + + const rightToolbarTemplate = () => { + return ( + <> +
+ {buttonUpload && ( +
+ + ) + } + + const dtHeader = () => { + return ( +
+
+ {fiturSearch && ( +
+ keyUpSearch(e.target.value)} + placeholder='Search' + /> + + + +
+ )} +
+ + ) + } + + const templatePaginator = { + layout: 'PrevPageLink NextPageLink', + PrevPageLink: () => { + return ( + + ) + }, + NextPageLink: () => { + return ( + + ) + }, + } + + return ( + <> + + + + {children} + + + {(data.length === 30 || draw > 1) && ( + + )} + + + {dialogForm && ( +
+ )} + + ) +} diff --git a/components/Dialog.js b/components/Dialog.js new file mode 100644 index 0000000..b24a4a3 --- /dev/null +++ b/components/Dialog.js @@ -0,0 +1,197 @@ +import axios from 'axios' +import moment from 'moment' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { TabPanel, TabView } from 'primereact/tabview' +import { useEffect, useState } from 'react' + +export const DialogDelete = ({ data, setDelete, onCallback }) => { + const modelFooter = ( +
+
+ ) + + return ( + <> + +

Are you sure you want to delete this data?

+
+ + ) +} + +export const DialogDashboard = ({ data, displayDialog, setDisplayDialog }) => { + const [dataFilter, setDataFilter] = useState([{ NO_SP2D: '-', TGL_SPM: '', NO_SPM: '-', TGL_SP2D: '' }]) + + // NOMER SPP + useEffect(() => { + axios({ + method: 'get', + url: process.env.NEXT_PUBLIC_API_SAKTI_REALISASI, + headers: { + Authorization: `Bearer ` + process.env.NEXT_PUBLIC_TOKEN_SAKTI, + }, + }) + .then(function (response) { + let dataFilter = response.data.filter((dataResponse) => dataResponse.NO_SPP === data.no_spp) + if (dataFilter.length > 0) { + setDataFilter(dataFilter) + } + }) + .catch(function (error) { + console.log(error) + }) + }, [data.no_spp]) + + return ( + setDisplayDialog(false)} + headerClassName='header-history' + className='dialog-history 2xl:w-[90vw] lg:w-[80vw]' + draggable={false} + > +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unit PPK:{data.nama_unit}
No SPP:{data.no_spp}
Kategori:{data.nama_tagihan}
No SP2D:{dataFilter[0].NO_SP2D}
Tanggal SP2D: + {dataFilter[0].TGL_SP2D ? moment(dataFilter[0].TGL_SP2D).format('DD MMMM YYYY') : '-'} +
No SPM:{dataFilter[0].NO_SPM}
Tanggal SPM: + {dataFilter[0].TGL_SPM ? moment(dataFilter[0].TGL_SPM).format('DD MMMM YYYY') : '-'} +
+ +
+ + + + + + + + + + {data.history.map((value, index) => { + return ( + + + + + + ) + })} + +
#TanggalKeterangan
{index + 1}{moment(value.tanggal).format('DD MMM YYYY - HH:mm')} + {value.status} +
+
+
+ +

Catatan

+ + {data.details.map((value, index) => { + return ( + + + + + + + + + + + + + + + + + + +
No TagihanAkunUntuk KeperluanStatus Tagihan
{value.nomor_tagihan}{value.akun_name}{value.keperluan}-
+ + + {value.syarat.map((valueSyarat, indexSyarat) => { + return ( + + + + + + + + + + + + + + + + +
Catatan VerifCatatan BendaharaCatatan SPM
{valueSyarat.verif_note}{valueSyarat.bendahara_note}{valueSyarat.spm_note}
+
+ ) + })} +
+
+ ) + })} +
+
+ ) +} diff --git a/components/Form/Akun.js b/components/Form/Akun.js new file mode 100644 index 0000000..8bf0e86 --- /dev/null +++ b/components/Form/Akun.js @@ -0,0 +1,134 @@ +import { AkunCreate, AkunUpdate } from '@/services/referensi/akun-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' + +export default function FormAkun({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const formik = useFormik({ + initialValues: { + akun_id: dataEdit.akun_id || '', + nama: dataEdit.nama || '', + }, + validate: (data) => { + let errors = {} + if (!data.akun_id) errors.akun_id = 'Error akun is required.' + if (!data.nama) errors.nama = 'Error name is required.' + return errors + }, + onSubmit: (data) => { + if (data.akun_id) { + AkunUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + AkunCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + + +
+
+ + + {errorFieldMessage('akun_id')} +
+
+ + + {errorFieldMessage('nama')} +
+
+ +
+ + ) +} diff --git a/components/Form/JamKerja.js b/components/Form/JamKerja.js new file mode 100644 index 0000000..6903f41 --- /dev/null +++ b/components/Form/JamKerja.js @@ -0,0 +1,149 @@ +import { JamKerjaCreate } from '@/services/manajemen/jam-kerja-service' +import { Formik } from 'formik' +import moment from 'moment' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Dialog } from 'primereact/dialog' +import { MultiSelect } from 'primereact/multiselect' + +const dbHari = [ + { name: 'Senin', code: 'senin' }, + { name: 'Selasa', code: 'selasa' }, + { name: 'Rabu', code: 'rabu' }, + { name: 'Kamis', code: 'kamis' }, + { name: 'Jumat', code: 'jumat' }, + { name: 'Sabtu', code: 'sabtu' }, + { name: 'Minggu', code: 'minggu' }, +] + +export default function FormJamKerja({ dialogForm, setDialogForm, dataEdit, toast, refresh }) { + return ( + <> + { + Object.assign(data, { + jam_masuk: moment(data.jam_masuk).format('HH:mm'), + jam_keluar: moment(data.jam_keluar).format('HH:mm'), + }) + let time = data.jam_masuk + '-' + data.jam_keluar + let days = '' + let panjang_array = data.hari.length + data.hari.map((values, i) => { + let plus1 = i + 1 + let koma = plus1 < panjang_array ? ',' : '' + days += values.code + koma + }) + + let dataKirim = { days, time } + JamKerjaCreate(dataKirim).then((res) => { + if (res.status === 'success') { + setDialogForm(false) + refresh(Math.random) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + refresh(Math.random) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + setSubmitting(false) + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting, resetForm }) => { + const dialogFooter = ( +
+
+ ) + return ( + +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+
+
+ ) + }} +
+ + ) +} diff --git a/components/Form/JenisBelanja.js b/components/Form/JenisBelanja.js new file mode 100644 index 0000000..d545522 --- /dev/null +++ b/components/Form/JenisBelanja.js @@ -0,0 +1,122 @@ +import { JenisBelanjaCreate, JenisBelanjaUpdate } from '@/services/referensi/jenisBelanja-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' + +export default function FormJenisBelanja({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const formik = useFormik({ + initialValues: { + ref_id: dataEdit.jenis_id || '', + nama: dataEdit.nama || '', + }, + validate: (data) => { + let errors = {} + if (!data.nama) errors.nama = 'Nama is required.' + return errors + }, + onSubmit: (data) => { + if (data.ref_id) { + JenisBelanjaUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + JenisBelanjaCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('nama')} +
+
+
+
+ + ) +} diff --git a/components/Form/JenisKegiatan.js b/components/Form/JenisKegiatan.js new file mode 100644 index 0000000..a5c71b8 --- /dev/null +++ b/components/Form/JenisKegiatan.js @@ -0,0 +1,149 @@ +import { JenisBelanjaList } from '@/services/referensi/jenisBelanja-service' +import { JenisKegiatanCreate, JenisKegiatanUpdate } from '@/services/referensi/jenisKegiatan-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { useEffect, useState } from 'react' + +export default function FormJenisKegiatan({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const [optionJenisBelanja, setOptionJenisBelanja] = useState([]) + + useEffect(() => { + JenisBelanjaList({ draw: 0 }).then((res) => setOptionJenisBelanja(res.data)) + }, []) + + const formik = useFormik({ + initialValues: { + ref_id: dataEdit.jenis_id || '', + nama: dataEdit.nama || '', + jenis_belanja_id: dataEdit.jenis_belanja_id || '', + }, + validate: (data) => { + let errors = {} + if (!data.nama) errors.nama = 'Nama is required.' + if (!data.jenis_belanja_id) errors.jenis_belanja_id = 'Jenis Belanja is required.' + return errors + }, + onSubmit: (data) => { + if (data.ref_id) { + JenisKegiatanUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + JenisKegiatanCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('nama')} +
+
+ + + {errorFieldMessage('jenis_belanja_id')} +
+
+
+
+ + ) +} diff --git a/components/Form/JenisTagihan.js b/components/Form/JenisTagihan.js new file mode 100644 index 0000000..2b535fa --- /dev/null +++ b/components/Form/JenisTagihan.js @@ -0,0 +1,122 @@ +import { JenisTagihanCreate, JenisTagihanUpdate } from '@/services/referensi/jenisTagihan-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' + +export default function FormJenisTagihan({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const formik = useFormik({ + initialValues: { + ref_id: dataEdit.jenis_id || '', + nama: dataEdit.nama || '', + }, + validate: (data) => { + let errors = {} + if (!data.nama) errors.nama = 'Nama is required.' + return errors + }, + onSubmit: (data) => { + if (data.ref_id) { + JenisTagihanUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + JenisTagihanCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('nama')} +
+
+
+
+ + ) +} diff --git a/components/Form/Persyaratan.js b/components/Form/Persyaratan.js new file mode 100644 index 0000000..f0c0d89 --- /dev/null +++ b/components/Form/Persyaratan.js @@ -0,0 +1,236 @@ +import { JenisBelanjaList } from '@/services/referensi/jenisBelanja-service' +import { JenisKegiatanList } from '@/services/referensi/jenisKegiatan-service' +import { JenisTagihanList } from '@/services/referensi/jenisTagihan-service' +import { PersyaratanCreate, PersyaratanUpdate } from '@/services/referensi/persyaratan-service' +import { FieldArray, Formik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { useEffect, useState } from 'react' + +export default function FormPersyaratan({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const [optionJenisTagihan, setOptionJenisTagihan] = useState([]) + const [optionJenisBelanja, setOptionJenisBelanja] = useState([]) + const [optionJenisKegiatan, setOptionJenisKegiatan] = useState([]) + + useEffect(() => { + JenisTagihanList({ draw: 0 }).then((res) => setOptionJenisTagihan(res.data)) + JenisBelanjaList({ draw: 0 }).then((res) => setOptionJenisBelanja(res.data)) + JenisKegiatanList({ draw: 0 }).then((res) => setOptionJenisKegiatan(res.data)) + }, []) + + return ( + <> + { + let errors = {} + if (!data.jenis_tagihan) errors.jenis_tagihan = 'Jenis Tagihan is required.' + if (!data.jenis_belanja) errors.jenis_belanja = 'Jenis Belanja is required.' + if (!data.jenis_kegiatan) errors.jenis_kegiatan = 'Jenis Kegiatan is required.' + // if (!data.syarat) errors.syarat = 'Syarat Dokumen is required.' + // if (!data.keterangan) errors.keterangan = 'Keterangan is required.' + return errors + }} + onSubmit={(data) => { + if (data.syarat_id) { + PersyaratanUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + PersyaratanCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }} + validateOnChange={false} + > + {({ values, errors, handleChange, handleSubmit, isSubmitting, resetForm }) => { + const dialogFooter = ( +
+
+ ) + + return ( + +
+
+
+ + + {errors.jenis_tagihan &&
{errors.jenis_tagihan}
} +
+
+ + + {errors.jenis_belanja &&
{errors.jenis_belanja}
} +
+
+ + + {errors.jenis_kegiatan &&
{errors.jenis_kegiatan}
} +
+ ( +
+ +
+ {values.syarat.map((syarat, index) => ( +
+
+
+ + + {errors.syarat && errors.syarat[index] && ( +
{errors.syarat[index].syarat}
+ )} +
+
+ + +
+
+ {index > 0 && ( +
+ ))} +
+
+
+
+ )} + /> +
+
+
+ ) + }} +
+ + ) +} diff --git a/components/Form/Role.js b/components/Form/Role.js new file mode 100644 index 0000000..8d2c0c9 --- /dev/null +++ b/components/Form/Role.js @@ -0,0 +1,220 @@ +import { RoleCreate, RoleUpdate } from '@/services/manajemen/role-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' +import { Tree } from 'primereact/tree' + +export default function FormRole({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const formik = useFormik({ + initialValues: { + role_id: dataEdit.role_id || '', + nama: dataEdit.nama || '', + access: dataEdit.access || [], + }, + validate: (data) => { + let errors = {} + if (!data.nama) errors.nama = 'Nama is required.' + if (!data.access) errors.access = 'Nama is required.' + return errors + }, + onSubmit: (data) => { + Object.assign(data, { access: JSON.stringify(data.access) }) + if (data.role_id) { + RoleUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + RoleCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + const data = [ + { + key: 'dashboard', + label: 'Dashboard', + icon: 'pi pi-fw pi-home', + }, + { + key: 'referensi', + label: 'Referensi', + icon: 'pi pi-fw pi-database', + children: [ + { key: 'referensi/jenis-tagihan', label: 'Jenis Tagihan' }, + { key: 'referensi/jenis-belanja', label: 'Jenis Belanja' }, + { key: 'referensi/jenis-kegiatan', label: 'Jenis Kegiatan' }, + { key: 'referensi/akun', label: 'Akun' }, + { key: 'referensi/persyaratan', label: 'Persyaratan' }, + { key: 'referensi/unit-kerja', label: 'Unit Kerja' }, + { key: 'referensi/verifikator', label: 'Verifikator' }, + ], + }, + { + key: 'pengajuan-tagihan', + label: 'Pengajuan Tagihan', + icon: 'pi pi-fw pi-dollar', + }, + { + key: 'laporan', + label: 'Laporan', + icon: 'pi pi-fw pi-chart-line', + children: [ + { key: 'laporan/per-user', label: 'Per User (Verifikator, kasub verif)' }, + // { key: 'laporan/approval', label: 'Approval (Kabag verif, bendahara, ppspm)' }, + { key: 'laporan/rekap-bulanan-per-user', label: 'Rekapitulasi bulanan per user' }, + { key: 'laporan/rekap-verif-per-bulan', label: 'Rekapitulasi hasil verifikasi per bulan' }, + { key: 'laporan/rekap-per-unit-kerja', label: 'Rekapitulasi per unit kerja' }, + { key: 'laporan/rekap-per-jenis-belanja', label: 'Rekapitulasi per jenis belanja (BAS)' }, + { key: 'laporan/verif-per-bulan', label: 'Hasil verifikasi per bulan (detail)' }, + { + key: 'laporan/pengendalian-waktu-penyelesaian', + label: 'Pengendalian waktu penyelesaian tagihan per unit per bulan', + }, + { + key: 'laporan/pengendalian-waktu-penyelesaian-detail', + label: 'Pengendalian waktu penyelesaian tagihan per unit per bulan (detail)', + }, + ], + }, + { + key: 'otorisasi', + label: 'Otorisasi', + icon: 'pi pi-fw pi-lock', + children: [ + { key: 'otorisasi/verifikasi', label: 'verifikasi' }, + { key: 'otorisasi/rekomendasi', label: 'rekomendasi' }, + { key: 'otorisasi/persetujuan', label: 'persetujuan' }, + { key: 'otorisasi/pengesahan', label: 'pengesahan' }, + { key: 'otorisasi/spm', label: 'spm' }, + ], + }, + { + key: 'manajemen', + label: 'Manajemen', + icon: 'pi pi-fw pi-database', + children: [ + { key: 'manajemen/user', label: 'user' }, + { key: 'manajemen/role', label: 'role' }, + { key: 'manajemen/jam-kerja', label: 'jam kerja' }, + ], + }, + ] + + return ( + <> + +
+
+ {/* KIRI */} +
+
+
+ + { + formik.setFieldValue('access', e.value) + }} + /> +
+
+
+ + {/* KANAN */} +
+
+
+ + + {errorFieldMessage('nama')} +
+
+
+
+
+
+ + ) +} diff --git a/components/Form/Tagihan.js b/components/Form/Tagihan.js new file mode 100644 index 0000000..3f0fb2f --- /dev/null +++ b/components/Form/Tagihan.js @@ -0,0 +1,122 @@ +import { TagihanCreate, TagihanUpdate } from '@/services/pengajuan-tagihan/tagihan-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' + +export default function FormTagihan({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const formik = useFormik({ + initialValues: { + ref_id: dataEdit.ref_id || '', + nama: dataEdit.nama || '', + }, + validate: (data) => { + let errors = {} + if (!data.nama) errors.nama = 'Nama is required.' + return errors + }, + onSubmit: (data) => { + if (data.ref_id) { + TagihanUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + TagihanCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('nama')} +
+
+
+
+ + ) +} diff --git a/components/Form/UnitKerja.js b/components/Form/UnitKerja.js new file mode 100644 index 0000000..ebf4deb --- /dev/null +++ b/components/Form/UnitKerja.js @@ -0,0 +1,148 @@ +import { UnitKerjaCreate, UnitKerjaUpdate } from '@/services/referensi/unitKerja-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' + +export default function FormUnitKerja({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const formik = useFormik({ + initialValues: { + ref_id: dataEdit.ref_id || '', + unit_id: dataEdit.unit_id || '', + nama: dataEdit.nama || '', + bobot: dataEdit.bobot || '', + }, + validate: (data) => { + let errors = {} + if (!data.unit_id) errors.unit_id = 'Kode Unit is required.' + if (!data.nama) errors.nama = 'Nama is required.' + if (!data.bobot) errors.bobot = 'Bobot is required.' + return errors + }, + onSubmit: (data) => { + if (data.ref_id) { + UnitKerjaUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + UnitKerjaCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + const isFieldValid = (field) => !!(formik.errors[field] && formik.touched[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('unit_id')} +
+
+ + + {errorFieldMessage('nama')} +
+
+ + + {errorFieldMessage('bobot')} +
+
+
+
+ + ) +} diff --git a/components/Form/User.js b/components/Form/User.js new file mode 100644 index 0000000..8555f00 --- /dev/null +++ b/components/Form/User.js @@ -0,0 +1,267 @@ +import { RoleList } from '@/services/manajemen/role-service' +import { UserCreate, UserUpdate } from '@/services/manajemen/user-service' +import { UnitKerjaList } from '@/services/referensi/unitKerja-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { Password } from 'primereact/password' +import { useEffect, useState } from 'react' +import * as Yup from 'yup' + +export default function FormUser({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const [optionUnitKerja, setOptionUnitKerja] = useState([]) + const [optionRole, setOptionRole] = useState([]) + const [showUnitKerja, setShowUnitKerja] = useState(true) + + const SignupSchema = Yup.object().shape({ + name: Yup.string().min(2, 'Too Short!').max(50, 'Too Long!').required('Nama is required'), + username: Yup.string().min(2, 'Too Short!').max(50, 'Too Long!').required('Username is required'), + email: Yup.string().email('Invalid email').required('Email is Required'), + password: Yup.string().when('old_password', { + is: true, + then: Yup.string() + .required('Password is required') + .matches( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#%&])(?=.{8,})/, + 'Must Contain 8 Characters, One Uppercase, One Lowercase, One Number and One Special Case Character' + ), + }), + password_retype: Yup.string().when('old_password', { + is: true, + then: Yup.string() + .oneOf([Yup.ref('password'), null], 'Passwords must match') + .required('Password confirm is required'), + }), + // unit: Yup.string().required('Unit kerja is required'), + role: Yup.string().required('Role is required'), + }) + + const formik = useFormik({ + initialValues: { + user_id: dataEdit.user_id || '', + name: dataEdit.nama || '', + username: dataEdit.username || '', + email: dataEdit.email || '', + password: '', + password_retype: '', + unit: dataEdit.unit || '', + role: dataEdit.user_role || '', + }, + validationSchema: SignupSchema, + onSubmit: (data) => { + if (data.user_id) { + UserUpdate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } else { + UserCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + }, + }) + + useEffect(() => { + UnitKerjaList({ draw: 0 }).then((res) => setOptionUnitKerja(res.data)) + RoleList().then((res) => setOptionRole(res.data)) + }, []) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + const header =
Pick a password
+ const footer = ( + <> +

Suggestions

+
    +
  • At least one lowercase
  • +
  • At least one uppercase
  • +
  • At least one numeric
  • +
  • At least one special case character
  • +
  • Minimum 8 characters
  • +
  • If edit password not required
  • +
+ + ) + + const handleRole = (e) => { + if (e.target.value === 'ROL-a713f345-9b9a-453a-8f77-33fd8335078f') { + setShowUnitKerja(false) + } else { + setShowUnitKerja(true) + } + + formik.setFieldValue('role', e.target.value) + } + + return ( + <> + +
+
+
+
+ + + {errorFieldMessage('name')} +
+
+ + + {errorFieldMessage('email')} +
+
+ + + {errorFieldMessage('username')} +
+
+ + + {errorFieldMessage('password')} +
+
+ + + {errorFieldMessage('password_retype')} +
+
+ + handleRole(e)} + showClear={formik.values.role ? true : false} + scrollHeight='200px' + placeholder='Select role' + /> + {errorFieldMessage('role')} +
+
+ + + {errorFieldMessage('unit')} +
+
+
+
+
+ + ) +} diff --git a/components/Form/Verifikasi.js b/components/Form/Verifikasi.js new file mode 100644 index 0000000..7ed163d --- /dev/null +++ b/components/Form/Verifikasi.js @@ -0,0 +1,79 @@ +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { InputText } from 'primereact/inputtext' + +export default function FormVerifikasi({ dialogForm, setDialogForm, dataEdit }) { + const formik = useFormik({ + initialValues: { + ref_id: dataEdit.ref_id || '', + nama: dataEdit.nama || '', + }, + validate: (data) => { + let errors = {} + if (!data.nama) errors.nama = 'Nama is required.' + return errors + }, + onSubmit: (data) => { + console.log(data) + }, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('nama')} +
+
+
+
+ + ) +} diff --git a/components/Form/Verifikator.js b/components/Form/Verifikator.js new file mode 100644 index 0000000..ecbc964 --- /dev/null +++ b/components/Form/Verifikator.js @@ -0,0 +1,131 @@ +import { UserList } from '@/services/manajemen/user-service' +import { UnitKerjaList } from '@/services/referensi/unitKerja-service' +import { VerifikatorCreate } from '@/services/referensi/verifikator-service' +import { useFormik } from 'formik' +import { Button } from 'primereact/button' +import { Dialog } from 'primereact/dialog' +import { Dropdown } from 'primereact/dropdown' +import { MultiSelect } from 'primereact/multiselect' +import { useEffect, useState } from 'react' + +export default function FormVerifikator({ dialogForm, setDialogForm, dataEdit, setDataEdit, refresh, toast }) { + const [ddVerifikator, setDdVerifikator] = useState([]) + const [ddUserList, setDdUserList] = useState([]) + + useEffect(() => { + UnitKerjaList({ draw: 0 }).then((res) => { + setDdVerifikator(res.data) + }) + UserList({ draw: 0 }).then((res) => { + setDdUserList(res.data) + }) + }, []) + + const formik = useFormik({ + initialValues: { + unit_id: '', + user_id: dataEdit.user_id || '', + }, + validate: (data) => { + let errors = {} + if (!data.unit_id) errors.unit_id = 'Kode Unit is required.' + if (!data.user_id) errors.user_id = 'Nama is required.' + return errors + }, + onSubmit: (data) => { + VerifikatorCreate(data).then((res) => { + if (res.status === 'success') { + refresh(Math.random) + formik.resetForm() + setDataEdit([]) + setDialogForm(false) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogForm(false) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + }, + }) + + const isFieldValid = (field) => !!(formik.errors[field] && formik.touched[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const dialogFooter = ( +
+
+ ) + + return ( + <> + +
+
+
+ + + {errorFieldMessage('nama')} +
+
+ + + {errorFieldMessage('unit_id')} +
+
+
+
+ + ) +} diff --git a/components/Label.js b/components/Label.js new file mode 100644 index 0000000..6f7fb20 --- /dev/null +++ b/components/Label.js @@ -0,0 +1,22 @@ +export const Label = ({ children, type }) => { + let backgroundColor + switch (type) { + case 'success': + backgroundColor = 'bg-green-400' + break + + case 'danger': + backgroundColor = 'bg-red-400' + break + + case 'warning': + backgroundColor = 'bg-yellow-400' + break + + default: + backgroundColor = 'bg-green-400' + break + } + + return {children} +} diff --git a/components/Layouts.js b/components/Layouts.js new file mode 100644 index 0000000..9c6ae90 --- /dev/null +++ b/components/Layouts.js @@ -0,0 +1,109 @@ +import { useAuth } from '@/hooks/auth' +import Image from 'next/image' +import { useCallback } from 'react' +import Particles from 'react-tsparticles' +import { loadFull } from 'tsparticles' +import packageJson from './../package.json' +import { Menu } from './Menu' +import { Navbar } from './Navbar' + +export const Depan = ({ children }) => { + useAuth({ middleware: 'guest', redirectIfAuthenticated: '/dashboard' }) + + /** PARTICLES */ + const particlesInit = useCallback(async (engine) => { + await loadFull(engine) + }, []) + + return ( +
+
+
+ bg-login +
+ + +
+

Copyright © 2022

+

SISTEM APLIKASI VERIFIKASI ANGGARAN BKN RI

+
+
+

V{packageJson.version}

+
+
+
{children}
+
+ ) +} + +export const Belakang = ({ children }) => { + useAuth({ middleware: 'auth' }) + return ( +
+ + +
{children}
+
+ ) +} + +export const LandingPageLayout = ({ children }) => { + return
{children}
+} diff --git a/components/Menu.js b/components/Menu.js new file mode 100644 index 0000000..225a57f --- /dev/null +++ b/components/Menu.js @@ -0,0 +1,323 @@ +import Link from 'next/link' +import { useRouter } from 'next/router' +import { useEffect, useState } from 'react' + +export const Menu = () => { + const router = useRouter() + const { pathname } = router + const [menus, setMenus] = useState([]) + + useEffect(() => { + setMenus(JSON.parse(localStorage.getItem('menus'))) + }, []) + + const renderMenu = (target) => { + let ready = Object.keys(menus).find((data) => data === target) + if (!ready) return false + return true + } + + return ( +
+
+ + + + + + + + + + + + + +
+
+ ) +} diff --git a/components/Navbar.js b/components/Navbar.js new file mode 100644 index 0000000..56f2477 --- /dev/null +++ b/components/Navbar.js @@ -0,0 +1,48 @@ +import { useAuth } from '@/hooks/auth' +import { Avatar } from 'primereact/avatar' +import { memo, useEffect, useState } from 'react' +import { MdExpandMore } from 'react-icons/md' + +function NavbarMemo() { + const { logout } = useAuth({}) + const [user, setUser] = useState([]) + + useEffect(() => { + setUser(JSON.parse(localStorage.getItem('user'))) + }, []) + + const handleLogout = () => { + logout() + } + + return ( +
+
+
+ +
+

{user && user.nama_lengkap}

+

{user && user.role}

+
+ +
+
+
+ +

{user && user.nama_lengkap}

+
+
+ +

Logout

+
+
+
+
+
+ ) +} + +export const Navbar = memo(NavbarMemo) diff --git a/components/TextCustom.js b/components/TextCustom.js new file mode 100644 index 0000000..ee0010b --- /dev/null +++ b/components/TextCustom.js @@ -0,0 +1,15 @@ +export const Judul = ({ children }) => { + return ( +

+ {children} +

+ ) +} + +export const SubJudul = ({ children, className = '' }) => { + return

{children}

+} + +export const LabelInput = ({ children }) => { + return +} diff --git a/constant/globalData.js b/constant/globalData.js new file mode 100644 index 0000000..9483d1c --- /dev/null +++ b/constant/globalData.js @@ -0,0 +1,7 @@ +const ddRekomendasi = [ + { name: 'Ditolak/dikembalikan' }, + { name: 'Disetujui dengan catatan' }, + { name: 'Disetujui tanpa catatan' }, +] + +export { ddRekomendasi } diff --git a/hooks/auth.js b/hooks/auth.js new file mode 100644 index 0000000..d4e2303 --- /dev/null +++ b/hooks/auth.js @@ -0,0 +1,118 @@ +import { LoginPost, LogoutGet } from '@/services/auth-service' +import { useRouter } from 'next/router' +import { destroyCookie, parseCookies, setCookie } from 'nookies' +import { useEffect } from 'react' +import { useDispatch } from 'react-redux' +import { UPDATE_NAME } from 'store/userSlice' +import Swal from 'sweetalert2' +import axios from '../lib/axios' + +export const useAuth = ({ middleware, redirectIfAuthenticated }) => { + const router = useRouter() + const { token } = parseCookies() + const dispatch = useDispatch() + + useEffect(() => { + if (middleware === 'guest' && redirectIfAuthenticated && token) router.push(redirectIfAuthenticated) + if (middleware === 'auth' && !token) logout() + }, [token]) + + const login = async ({ toast, setLoading, ...props }) => { + LoginPost(props) + .then((res) => { + setLoading(false) + if (res.status === 'ok') { + setCookie(null, 'token', res.data.jwt, { + path: '/', + maxAge: res.data.token_expiry, + }) + localStorage.setItem('menus', JSON.stringify(res.data.user_access)) + localStorage.setItem('user', JSON.stringify(res.data)) + } else { + // eslint-disable-next-line no-undef + grecaptcha.reset() + toast.current.show({ severity: 'error', summary: 'Error Message', detail: res.message }) + } + }) + .catch((err) => { + // eslint-disable-next-line no-undef + grecaptcha.reset() + setLoading(false) + switch (err.response.status) { + case 401: + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Your account used on another device.', + }) + break + + default: + toast.current.show({ severity: 'error', summary: 'Error Message', detail: err }) + break + } + }) + } + + const forgotPassword = async ({ ...props }) => { + axios + .post('/security/forgotPassword ', props) + .then((response) => { + Swal.fire({ + icon: 'success', + title: 'Forgot Password', + text: response.data.message, + width: '25rem', + timer: 3000, + timerProgressBar: true, + }).then(() => { + router.push('/') + }) + }) + .catch((err) => { + console.log(err) + }) + } + + const resetPassword = async ({ ...props }) => { + axios + .post('/security/resetPassword ', props) + .then((response) => { + Swal.fire({ + icon: 'success', + title: 'Reset Password', + text: response.data.message, + width: '25rem', + timer: 3000, + timerProgressBar: true, + }).then(() => { + router.push('/') + }) + }) + .catch((err) => { + console.log(err) + }) + } + + const logout = async () => { + LogoutGet() + .then((res) => { + if (res.status === 'ok') { + destroyCookie(null, 'token', { path: '/' }) + localStorage.removeItem('menus') + localStorage.removeItem('user') + dispatch(UPDATE_NAME('')) + router.push('/') + } + }) + .catch((err) => console.log(err)) + } + + return { + // user, + login, + logout, + forgotPassword, + resetPassword, + } +} diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..3a86022 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/constant/*": ["constant/*"], + "@/components/*": ["components/*"], + "@/services/*": ["services/*"], + "@/context/*": ["context/*"], + "@/hooks/*": ["hooks/*"], + "@/public/*": ["public/*"] + } + } +} diff --git a/lib/axios.js b/lib/axios.js new file mode 100644 index 0000000..b555e59 --- /dev/null +++ b/lib/axios.js @@ -0,0 +1,29 @@ +import axios from 'axios' +import { parseCookies } from 'nookies' + +const defaultOptions = { + baseURL: '/api/', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + 'Access-Control-Allow-Headers': + 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version', + 'Access-Control-Allow-Methods': 'GET,DELETE,PATCH,POST,PUT', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Credentials': true, + }, +} + +// Create instance +const instance = axios.create(defaultOptions) + +instance.defaults.withCredentials = true + +// Set the AUTH token for any request +instance.interceptors.request.use(function (config) { + const { token } = parseCookies() + config.headers.Authorization = token ? `Bearer ${token}` : '' + return config +}) + +export default instance diff --git a/lib/axiosSakti.js b/lib/axiosSakti.js new file mode 100644 index 0000000..44d67c3 --- /dev/null +++ b/lib/axiosSakti.js @@ -0,0 +1,25 @@ +import axios from 'axios' + +const defaultOptions = { + baseURL: '/sakti/api', + headers: { + // 'Content-Type': 'application/json', + // Accept: 'application/json', + Authorization: + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c3IiOiJCQURBTiBLRVBFR0FXQUlBTiBORUdBUkEiLCJ1aWQiOiJCS04iLCJyb2wiOiJ3ZWJzZXJ2aWNlIiwia2RzIjoiS0wwODgiLCJrZGIiOiJLTDA4OCIsImtkdCI6IjIwMjIiLCJpYXQiOjE2NDg1Mzk5ODAsIm5iZiI6MTY0ODUzOTM4MCwia2lkIjoiQktOIn0.9DUVDBDqqf7_tWUWyYCjmoLaIr1F953R_aAUmQy5tkc', + }, +} + +// Create instance +const instance = axios.create(defaultOptions) + +// instance.defaults.withCredentials = true + +// Set the AUTH token for any request +// instance.interceptors.request.use(function (config) { +// config.headers.Authorization = +// 'Bearer Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c3IiOiJCQURBTiBLRVBFR0FXQUlBTiBORUdBUkEiLCJ1aWQiOiJCS04iLCJyb2wiOiJ3ZWJzZXJ2aWNlIiwia2RzIjoiS0wwODgiLCJrZGIiOiJLTDA4OCIsImtkdCI6IjIwMjIiLCJpYXQiOjE2NDg1Mzk5ODAsIm5iZiI6MTY0ODUzOTM4MCwia2lkIjoiQktOIn0.9DUVDBDqqf7_tWUWyYCjmoLaIr1F953R_aAUmQy5tkc' +// return config +// }) + +export default instance diff --git a/lib/fetch.js b/lib/fetch.js new file mode 100644 index 0000000..5ac4e9a --- /dev/null +++ b/lib/fetch.js @@ -0,0 +1,21 @@ +const API_URL = process.env.NEXT_PUBLIC_BACKEND_API + +export async function fetchAPI(target, token) { + var requestOptions = { + method: 'POST', + headers: { + 'Content-Type': 'multipart/form-data', + Authorization: 'Bearer ' + token, + }, + redirect: 'follow', + } + + const res = await fetch(API_URL + target, requestOptions) + + const json = await res.json() + if (json.errors) { + console.error(json.errors) + throw new Error('Failed to fetch API') + } + return json.data +} diff --git a/middleware.js b/middleware.js new file mode 100644 index 0000000..dc5ff44 --- /dev/null +++ b/middleware.js @@ -0,0 +1,4 @@ +export default function middleware(req) { + // req.nextUrl.pathname.startsWith('/dashboard') + // console.log('aku middleware') +} diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..e561735 --- /dev/null +++ b/next.config.js @@ -0,0 +1,15 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: false, + async rewrites() { + return [ + { + source: '/api/:path*', + destination: process.env.NEXT_PUBLIC_BACKEND_API + ':path*', + }, + ] + }, +} + +module.exports = nextConfig diff --git a/package.json b/package.json new file mode 100644 index 0000000..eae9081 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "e-verif", + "version": "2.6.14", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start -p 3001", + "lint": "next lint" + }, + "dependencies": { + "@reduxjs/toolkit": "^1.8.4", + "apexcharts": "^3.35.3", + "axios": "^0.27.2", + "formik": "^2.2.9", + "jwt-decode": "^3.1.2", + "moment": "^2.29.4", + "next": "12.2.2", + "nookies": "^2.5.2", + "primeicons": "^5.0.0", + "primereact": "^8.2.0", + "react": "18.2.0", + "react-apexcharts": "^1.4.0", + "react-dom": "18.2.0", + "react-google-recaptcha": "^2.1.0", + "react-icons": "^4.11.0", + "react-redux": "^8.0.2", + "react-tsparticles": "^2.1.3", + "redux": "^4.2.0", + "sweetalert2": "^11.4.33", + "tsparticles": "^2.1.3", + "yup": "^0.32.11" + }, + "devDependencies": { + "autoprefixer": "^10.4.7", + "eslint": "8.19.0", + "eslint-config-next": "12.2.2", + "postcss": "^8.4.14", + "tailwindcss": "^3.1.6" + } +} diff --git a/pages/404.js b/pages/404.js new file mode 100644 index 0000000..2190f83 --- /dev/null +++ b/pages/404.js @@ -0,0 +1,22 @@ +import Head from 'next/head' +import Link from 'next/link' +import { Button } from 'primereact/button' + +export default function NotFound() { + return ( + <> + + Page not found + +
+

404

+

PAGE NOT FOUND !

+
+ +
+
+ + ) +} diff --git a/pages/_app.js b/pages/_app.js new file mode 100644 index 0000000..ebc27c9 --- /dev/null +++ b/pages/_app.js @@ -0,0 +1,71 @@ +/** + * GLOBAL CSS + */ +import 'primeicons/primeicons.css' //icons +import '../styles/globals.css' + +/** + * PRIME REACT CSS + */ +import 'primereact/resources/primereact.min.css' //core css +import 'primereact/resources/themes/bootstrap4-light-blue/theme.css' //theme +import '../styles/primeFont.css' + +/** + * CUSTOM CSS + */ +import '../styles/accordion.css' +import '../styles/blockUi.css' +import '../styles/button.css' +import '../styles/cClock.css' +import '../styles/card.css' +import '../styles/datatables.css' +import '../styles/datePicker.css' +import '../styles/dialog.css' +import '../styles/dropdown.css' +import '../styles/menu.css' +import '../styles/navbar.css' +import '../styles/panel.css' +import '../styles/step.css' +import '../styles/tabView.css' +import '../styles/table.css' + +/** + * MOMENT JS + */ +import 'moment/locale/id' +import { addLocale, locale } from 'primereact/api' +import { Provider } from 'react-redux' +import store from '../store/index' +addLocale('id', { + firstDayOfWeek: 1, + dayNamesMin: ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'], + monthNames: [ + 'Januari', + 'Februari', + 'Maret', + 'April', + 'Mei', + 'Juni', + 'Juli', + 'Agustus', + 'September', + 'Oktober', + 'November', + 'Desember', + ], + monthNamesShort: ['jan', 'feb', 'mar', 'apr', 'mei', 'jun', 'jul', 'agu', 'sep', 'okt', 'nov', 'des'], + today: 'Hari ini', + clear: 'Clear', +}) +locale('id') + +function MyApp({ Component, pageProps }) { + return ( + + + + ) +} + +export default MyApp diff --git a/pages/_document.js b/pages/_document.js new file mode 100644 index 0000000..d89281a --- /dev/null +++ b/pages/_document.js @@ -0,0 +1,36 @@ +import { Head, Html, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + ) +} diff --git a/pages/dashboard/index.js b/pages/dashboard/index.js new file mode 100644 index 0000000..34cf75a --- /dev/null +++ b/pages/dashboard/index.js @@ -0,0 +1,211 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { DashboardAll, DashboardP2k } from '@/services/dashboard-service' +import { JenisTagihanList } from '@/services/referensi/jenisTagihan-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import React, { useEffect, useState } from 'react' + +export default function Dashboard() { + const [data, setData] = useState([]) + const [displayDialog, setDisplayDialog] = useState(false) + const [dataDialog, setDataDialog] = useState([]) + const [search, setSearch] = useState({}) + const [ddJenisTagihan, setDdJenisTagihan] = useState([]) + + // DATATABLE + const [loading, setLoading] = useState(false) + const [totalRecords, setTotalRecords] = useState(0) + const [first, setFirst] = useState(0) + const [page, setPage] = useState(1) + const [length, setLength] = useState(10) + const [orderCol, setOrderCol] = useState(2) + const [sort, setSort] = useState([]) + const [orderDir, setOrderDir] = useState('desc') + + useEffect(() => { + JenisTagihanList().then((res) => setDdJenisTagihan(res.data)) + }, []) + + useEffect(() => { + const { role } = JSON.parse(localStorage.getItem('user')) + setLoading(true) + + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, jenis_tagihan, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.jenis_tagihan = jenis_tagihan ? jenis_tagihan : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + if (role === 'PPK' || role === 'Verifikator') { + DashboardP2k(params).then((res) => { + setLoading(false) + setData(res.data) + setTotalRecords(res.recordsFiltered - 1) + }) + } else { + DashboardAll(params).then((res) => { + setLoading(false) + setData(res.data) + setTotalRecords(res.recordsFiltered - 1) + }) + } + }, [page, first, length, orderCol, orderDir, search]) + + const bodyDetail = (rowData) => { + return ( +
+
+ ) + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + return ( + + + Dashboard + + + Data Transaction + {Pencarian} + { + setSort(e.multiSortMeta) + console.log('sorting', e) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'nama_unit': + setOrderCol(1) + break + + case 'tanggal': + setOrderCol(2) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + dataDialog={dataDialog} + displayDialog={displayDialog} + setDisplayDialog={setDisplayDialog} + > + + + + + + + + + + + + + ) +} diff --git a/pages/index.js b/pages/index.js new file mode 100644 index 0000000..6d759e8 --- /dev/null +++ b/pages/index.js @@ -0,0 +1,506 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { LandingPageLayout } from '@/components/Layouts' +import { CekTagihan } from '@/services/cek-tagihan-service' +import { HomepageGet } from '@/services/homepage-service' +import Head from 'next/head' +import Image from 'next/image' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { ColumnGroup } from 'primereact/columngroup' +import { DataTable } from 'primereact/datatable' +import { InputText } from 'primereact/inputtext' +import { Panel } from 'primereact/panel' +import { Row } from 'primereact/row' +import { Steps } from 'primereact/steps' +import React, { useEffect, useState } from 'react' +import { FaFileArrowUp, FaFileCircleCheck, FaFileLines, FaFileSignature } from 'react-icons/fa6' + +export default function LandingPage({ token }) { + const [cekTagihan, setCekTagihan] = useState('') + const [dataCekTagihan, setDataCekTagihan] = useState([]) + const [data, setData] = useState([ + { + status_tagihan_daily: { + 'Ditolak/dikembalikan': { total: 0, percentage: 0 }, + 'Disetujui dengan catatan': { total: 0, percentage: 0 }, + 'Disetujui tanpa catatan': { total: 0, percentage: 0 }, + }, + status_tagihan_ytd: { + 'Ditolak/dikembalikan': { total: 0, percentage: 0 }, + 'Disetujui dengan catatan': { total: 0, percentage: 0 }, + 'Disetujui tanpa catatan': { total: 0, percentage: 0 }, + }, + jenis_tagihan_daily: { + GUP: { + percentage: 0, + total: 0, + }, + LS: { + percentage: 0, + total: 0, + }, + PTUP: { + percentage: 0, + total: 0, + }, + }, + jenis_tagihan_yearly: { + GUP: { + percentage: 0, + total: 0, + }, + LS: { + percentage: 0, + total: 0, + }, + PTUP: { + percentage: 0, + total: 0, + }, + }, + }, + ]) + const [dataKetetapan, setDataKetetapan] = useState([]) + const [dataPrgoress, setDataPrgoress] = useState([]) + + useEffect(() => { + HomepageGet() + .then((res) => { + setData([res.data]) + setDataKetetapan(res.data.monitoring_ketepatan) + setDataPrgoress(res.data.monitoring_progress) + }) + .catch((err) => { + setData(err) + console.log('err homepage get', err) + }) + }, []) + const handleCari = () => { + CekTagihan(cekTagihan) + .then((res) => setDataCekTagihan(res.data)) + .catch((err) => console.log(err)) + } + + const items = [ + { label: 'Pengajuan tagihan' }, + { label: 'Berkas telah diverifikasi' }, + { label: 'Berkas telah divalidasi' }, + { label: 'Berkas telah diapprove' }, + { label: 'Berkas disetujui bendahara' }, + { label: 'Berkas disetujui PPSPM' }, + { label: 'SPM dikirim', className: 'last-dor' }, + ] + + const headerGroup = ( + + + + + + + + + + + + + + + ) + + return ( +
+ + E-Verifikasi + +
+
+ logo +
+
+

SISTEM APLIKASI

+

Penyelesaian Tagihan dan Pertanggungjawaban Keuangan

+
+
+ {token ? ( + +
+
+ + { + return ( +
+

Cek Tagihan

+
+ ) + }} + toggleable + className='md:hidden mb-1' + > +
+ setCekTagihan(e.target.value)} + placeholder='Masukkan nomor SPP' + style={{ marginBottom: '10px', width: '100%' }} + /> +
+ {Object.keys(dataCekTagihan).length > 0 && ( + +
+
+ Tracking Dokumen +
+ +
+
+
+ Detail Dokumen +
+
+

+ No SPP: {dataCekTagihan.detail.no_spp} +

+

+ Nama tagihan: {dataCekTagihan.detail.nama_tagihan} +

+

+ Nama unit: {dataCekTagihan.detail.nama_unit} +

+
+
+
+ )} +
+ {/* YTD DOKUMEN */} + { + return ( +
+

Year to Date

+
+ ) + }} + toggleable + > +
+
+
+

Jumlah Dokumen

+
+

+ {data.length > 0 && Object.keys(data[0].status_tagihan_ytd).length > 0 + ? data[0].status_tagihan_ytd['Ditolak/dikembalikan'].total + + data[0].status_tagihan_ytd['Disetujui dengan catatan'].total + + data[0].status_tagihan_ytd['Disetujui tanpa catatan'].total + : 0} +

+
+
+
+ +
+
+
+
+

Dikembalikan

+
+

+ {data.length > 0 && data[0].status_tagihan_ytd['Ditolak/dikembalikan'].total} +

+

+ ({data.length > 0 && data[0].status_tagihan_ytd['Ditolak/dikembalikan'].percentage}%) +

+
+
+
+ +
+
+
+
+

Dengan Catatan

+
+

+ {data.length > 0 && data[0].status_tagihan_ytd['Disetujui dengan catatan'].total} +

+

+ ({data.length > 0 && data[0].status_tagihan_ytd['Disetujui dengan catatan'].percentage}%) +

+
+
+
+ +
+
+
+
+

Disetujui

+
+

+ {data.length > 0 && data[0].status_tagihan_ytd['Disetujui tanpa catatan'].total} +

+

+ ({data.length > 0 && data[0].status_tagihan_ytd['Disetujui tanpa catatan'].percentage}%) +

+
+
+
+ +
+
+
+
+ {/* TODAY DOKUMEN */} + { + return ( +
+

Today

+
+ ) + }} + toggleable + > +
+
+
+

Jumlah Dokumen

+
+

+ {data[0].status_tagihan_daily['Ditolak/dikembalikan'].total + + data[0].status_tagihan_daily['Disetujui dengan catatan'].total + + data[0].status_tagihan_daily['Disetujui tanpa catatan'].total} +

+
+
+
+ +
+
+
+
+

Dikembalikan

+
+

{data[0].status_tagihan_daily['Ditolak/dikembalikan'].total}

+

+ ({data[0].status_tagihan_daily['Ditolak/dikembalikan'].percentage} + %) +

+
+
+
+ +
+
+
+
+

Dengan Catatan

+
+

+ {data[0].status_tagihan_daily['Disetujui dengan catatan'].total} +

+

+ ({data[0].status_tagihan_daily['Disetujui dengan catatan'].percentage} + %) +

+
+
+
+ +
+
+
+
+

Disetujui

+
+

+ {data[0].status_tagihan_daily['Disetujui tanpa catatan'].total} +

+

+ ({data[0].status_tagihan_daily['Disetujui tanpa catatan'].percentage} + %) +

+
+
+
+ +
+
+
+
+ {/* YTD ALL TAGIHAN */} + { + return ( +
+

Year to Date

+
+ ) + }} + toggleable + > +
+
+

Tagihan LS

+
+

{data[0].jenis_tagihan_yearly.LS.total}

+

+ ({data[0].jenis_tagihan_yearly.LS.percentage} + %) +

+
+
+
+

Tagihan GU

+
+

{data[0].jenis_tagihan_yearly.GUP.total}

+

+ ({data[0].jenis_tagihan_yearly.GUP.percentage} + %) +

+
+
+
+

Tagihan TUP

+
+

{data[0].jenis_tagihan_yearly.PTUP.total}

+

+ ({data[0].jenis_tagihan_yearly.PTUP.percentage} + %) +

+
+
+
+
+ {/* TODAY ALL TAGIHAN */} + { + return ( +
+

Today

+
+ ) + }} + toggleable + > +
+
+

Tagihan LS

+
+

{data[0].jenis_tagihan_daily.LS.total}

+

+ ({data[0].jenis_tagihan_daily.LS.percentage} + %) +

+
+
+
+

Tagihan GU

+
+

{data[0].jenis_tagihan_daily.GUP.total}

+

+ ({data[0].jenis_tagihan_daily.GUP.percentage} + %) +

+
+
+
+

Tagihan TUP

+
+

{data[0].jenis_tagihan_daily.PTUP.total}

+

+ ({data[0].jenis_tagihan_daily.PTUP.percentage} + %) +

+
+
+
+
+ + {/* MONITORING PROGRESS PENYELESAIAN DOKUMEN */} + { + return ( +
+

Monitoring Progress Penyelesaian Dokumen

+
+ ) + }} + toggleable + > + + + + + + + + + +
+ + {/* MONITORING KETEPATAN PENGAJUAN DOKUMEN */} + { + return ( +
+

Monitoring Ketepatan Pengajuan Dokumen

+
+ ) + }} + toggleable + > + + + + + + + + + +
+
+
+ ) +} + +export const getServerSideProps = async (ctx) => { + const token = ctx.req.cookies.token || null + + return { + props: { + token, + }, + } +} diff --git a/pages/laporan/approval/index.js b/pages/laporan/approval/index.js new file mode 100644 index 0000000..f84fede --- /dev/null +++ b/pages/laporan/approval/index.js @@ -0,0 +1,20 @@ +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import Head from 'next/head' +import Image from 'next/image' + +export default function Approval() { + return ( + <> + + Approval + + + Approval +
+ coming-soon +
+
+ + ) +} diff --git a/pages/laporan/pengendalian-waktu-penyelesaian-detail/index.js b/pages/laporan/pengendalian-waktu-penyelesaian-detail/index.js new file mode 100644 index 0000000..9b8cb3e --- /dev/null +++ b/pages/laporan/pengendalian-waktu-penyelesaian-detail/index.js @@ -0,0 +1,20 @@ +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import Head from 'next/head' +import Image from 'next/image' + +export default function PengendalianWaktuPenyelesaianDetail() { + return ( + <> + + Laporan Pengendalian Waktu Penyelesaian Detail + + + Laporan Pengendalian Waktu Penyelesaian Detail +
+ coming-soon +
+
+ + ) +} diff --git a/pages/laporan/pengendalian-waktu-penyelesaian/index.js b/pages/laporan/pengendalian-waktu-penyelesaian/index.js new file mode 100644 index 0000000..00da015 --- /dev/null +++ b/pages/laporan/pengendalian-waktu-penyelesaian/index.js @@ -0,0 +1,20 @@ +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import Head from 'next/head' +import Image from 'next/image' + +export default function PengendalianWaktuPenyelesaian() { + return ( + <> + + Laporan Pengendalian Waktu Penyelesaian + + + Laporan Pengendalian Waktu Penyelesaian +
+ coming-soon +
+
+ + ) +} diff --git a/pages/laporan/per-user/index.js b/pages/laporan/per-user/index.js new file mode 100644 index 0000000..7e4d8fa --- /dev/null +++ b/pages/laporan/per-user/index.js @@ -0,0 +1,141 @@ +import { CardFilterLaporan } from '@/components/CardCustom' +import { DatatablePrime } from '@/components/Datatables' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { DDUserVerifKasub, Laporan11 } from '@/services/laporan/laporan-service' +import { UserGetOne } from '@/services/manajemen/user-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Column } from 'primereact/column' +import { Dropdown } from 'primereact/dropdown' +import { useEffect, useState } from 'react' + +export default function PerUser() { + const [data, setData] = useState([]) + const [draw, setDraw] = useState(1) + const [periode, setPeriode] = useState('') + const [optionVerifKasub, setOptionVerifKasub] = useState([]) + const [userID, setUserID] = useState('') + const [refresh, setRefresh] = useState(0) + const [namaUser, setNamaUser] = useState('') + + useEffect(() => { + let params = { + periode: periode, + user_id: userID, + } + + Laporan11(params) + .then((res) => { + if (res.status === 'error') { + setData([]) + } else { + setData(res.data) + } + }) + .catch((err) => console.log(err)) + }, [refresh]) + + useEffect(() => { + DDUserVerifKasub() + .then((res) => setOptionVerifKasub(res.data)) + .catch((err) => console.log(err)) + }, []) + + return ( + <> + + Laporan Per User + + + Laporan Per User + + { + let periodeBefore = values.periode + Object.assign(values, { periode: moment(values.periode).format('YYYY-MM') }) + setPeriode(values.periode) + setUserID(values.user_id) + UserGetOne({ user_id: values.user_id }).then((res) => { + setNamaUser(res.data.nama) + }) + + values.periode = periodeBefore + setRefresh(Math.random()) + setSubmitting(false) + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting }) => { + return ( +
+
+ + +
+
+ + +
+
+
+
+ ) + }} +
+
+
+ + + + + + + + + + + + + + + + + + +
+ Nama + :{namaUser}
Unit:Biro Keuangan
Bulan:{periode && moment(periode).format('MMMM YYYY')}
+
+ + + + + + +
+ + ) +} diff --git a/pages/laporan/rekap-bulanan-per-user/index.js b/pages/laporan/rekap-bulanan-per-user/index.js new file mode 100644 index 0000000..e86571e --- /dev/null +++ b/pages/laporan/rekap-bulanan-per-user/index.js @@ -0,0 +1,164 @@ +import { CardFilterLaporan } from '@/components/CardCustom' +import { DatatablePrime } from '@/components/Datatables' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { DDUserVerifKasub, Laporan21 } from '@/services/laporan/laporan-service' +import { UserGetOne } from '@/services/manajemen/user-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Column } from 'primereact/column' +import { Dropdown } from 'primereact/dropdown' +import { useEffect, useState } from 'react' + +export default function RekapBulananPerUser() { + const [data, setData] = useState([]) + const [headers, setHeaders] = useState([]) + const [draw, setDraw] = useState(1) + const [optionVerifKasub, setOptionVerifKasub] = useState([]) + const [userID, setUserID] = useState('') + const [refresh, setRefresh] = useState(0) + const [periodeFrom, setPeriodeFrom] = useState('') + const [periodeTo, setPeriodeTo] = useState('') + const [namaUser, setNamaUser] = useState('') + + useEffect(() => { + let params = { + from: periodeFrom, + to: periodeTo, + user_id: userID, + } + + Laporan21(params) + .then((res) => { + if (res.status === 'error') { + setData([]) + } else { + // console.log(res.data) + setData(res.data.rows) + setHeaders(res.data.headers) + } + }) + .catch((err) => console.log(err)) + }, [refresh]) + + useEffect(() => { + DDUserVerifKasub() + .then((res) => setOptionVerifKasub(res.data)) + .catch((err) => console.log(err)) + }, []) + + const dynamicColumns = headers.map((col, i) => { + return + }) + + return ( + <> + + Laporan Rekapitulasi Bulanan per User + + + Laporan Rekapitulasi Bulanan per User + + { + let periodeFromBefore = values.from + let periodeToBefore = values.to + Object.assign(values, { from: moment(values.from).format('YYYY-MM') }) + Object.assign(values, { to: moment(values.to).format('YYYY-MM') }) + setPeriodeFrom(values.from) + setPeriodeTo(values.to) + setUserID(values.user_id) + UserGetOne({ user_id: values.user_id }).then((res) => { + setNamaUser(res.data.nama) + }) + + values.from = periodeFromBefore + values.to = periodeToBefore + setRefresh(Math.random()) + setSubmitting(false) + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting }) => { + return ( +
+
+ + +
+
+ + +
+

S/D

+
+ + +
+
+
+
+ ) + }} +
+
+
+ + + + + + + + + + + + + + + + + + +
+ Nama + :{namaUser}
Unit:Biro Keuangan
Bulan:{periodeFrom && moment(periodeFrom).format('MMMM YYYY')}
+
+ + + {dynamicColumns} + +
+ + ) +} diff --git a/pages/laporan/rekap-per-jenis-belanja/index.js b/pages/laporan/rekap-per-jenis-belanja/index.js new file mode 100644 index 0000000..4422b11 --- /dev/null +++ b/pages/laporan/rekap-per-jenis-belanja/index.js @@ -0,0 +1,116 @@ +import { CardFilterLaporan } from '@/components/CardCustom' +import { DatatablePrime } from '@/components/Datatables' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { Laporan33 } from '@/services/laporan/laporan-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Column } from 'primereact/column' +import { useEffect, useState } from 'react' + +export default function RekapPerJenisBelanja() { + const [data, setData] = useState([]) + const [draw, setDraw] = useState(1) + const [refresh, setRefresh] = useState(0) + const [periodeFrom, setPeriodeFrom] = useState('') + const [periodeTo, setPeriodeTo] = useState('') + + const headers = [ + 'Jenis Bayar', + 'Jumlah Dokumen', + 'Disetujui Tanpa Catatan', + 'Disetujui Dengan Catatan', + 'Tidak Disetujui', + ] + + useEffect(() => { + let params = { + from: periodeFrom, + to: periodeTo, + } + + Laporan33(params) + .then((res) => { + if (res.status === 'error') { + setData([]) + } else { + setData(res.data) + } + }) + .catch((err) => console.log(err)) + }, [refresh]) + + const dynamicColumns = headers.map((col, i) => { + return + }) + + return ( + <> + + Laporan Rekapitulasi per Jenis Belanja + + + Laporan Rekapitulasi per Jenis Belanja + + { + let periodeFromBefore = values.from + let periodeToBefore = values.to + Object.assign(values, { from: moment(values.from).format('YYYY-MM') }) + Object.assign(values, { to: moment(values.to).format('YYYY-MM') }) + setPeriodeFrom(values.from) + setPeriodeTo(values.to) + + values.from = periodeFromBefore + values.to = periodeToBefore + setRefresh(Math.random()) + setSubmitting(false) + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting }) => { + return ( +
+
+ + +
+

S/D

+
+ + +
+
+
+
+ ) + }} +
+
+ + + {dynamicColumns} + +
+ + ) +} diff --git a/pages/laporan/rekap-per-unit-kerja/index.js b/pages/laporan/rekap-per-unit-kerja/index.js new file mode 100644 index 0000000..eeb00d3 --- /dev/null +++ b/pages/laporan/rekap-per-unit-kerja/index.js @@ -0,0 +1,110 @@ +import { CardFilterLaporan } from '@/components/CardCustom' +import { DatatablePrime } from '@/components/Datatables' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { Laporan32 } from '@/services/laporan/laporan-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Column } from 'primereact/column' +import { useEffect, useState } from 'react' + +export default function RekapPerUnitKerja() { + const [data, setData] = useState([]) + const [draw, setDraw] = useState(1) + const [refresh, setRefresh] = useState(0) + const [periodeFrom, setPeriodeFrom] = useState('') + const [periodeTo, setPeriodeTo] = useState('') + + const headers = ['Unit', 'Jumlah Dokumen', 'Disetujui Tanpa Catatan', 'Disetujui Dengan Catatan', 'Tidak Disetujui'] + + useEffect(() => { + let params = { + from: periodeFrom, + to: periodeTo, + } + + Laporan32(params) + .then((res) => { + if (res.status === 'error') { + setData([]) + } else { + setData(res.data) + } + }) + .catch((err) => console.log(err)) + }, [refresh]) + + const dynamicColumns = headers.map((col, i) => { + return + }) + + return ( + <> + + Laporan Rekapitulasi per Unit Kerja + + + Laporan Rekapitulasi per Unit Kerja + + { + let periodeFromBefore = values.from + let periodeToBefore = values.to + Object.assign(values, { from: moment(values.from).format('YYYY-MM') }) + Object.assign(values, { to: moment(values.to).format('YYYY-MM') }) + setPeriodeFrom(values.from) + setPeriodeTo(values.to) + + values.from = periodeFromBefore + values.to = periodeToBefore + setRefresh(Math.random()) + setSubmitting(false) + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting }) => { + return ( +
+
+ + +
+

S/D

+
+ + +
+
+
+
+ ) + }} +
+
+ + + {dynamicColumns} + +
+ + ) +} diff --git a/pages/laporan/rekap-verif-per-bulan/index.js b/pages/laporan/rekap-verif-per-bulan/index.js new file mode 100644 index 0000000..655e385 --- /dev/null +++ b/pages/laporan/rekap-verif-per-bulan/index.js @@ -0,0 +1,118 @@ +import { CardFilterLaporan } from '@/components/CardCustom' +import { DatatablePrime } from '@/components/Datatables' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { Laporan31 } from '@/services/laporan/laporan-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Column } from 'primereact/column' +import { useEffect, useState } from 'react' + +export default function RekapBulananPerUser() { + const [data, setData] = useState([]) + const [draw, setDraw] = useState(1) + const [refresh, setRefresh] = useState(0) + const [periodeFrom, setPeriodeFrom] = useState('') + const [periodeTo, setPeriodeTo] = useState('') + + const headers = ['Bulan', 'Dokumen', 'Disetujui Tanpa Catatan', 'Disetujui Dengan Catatan', 'Tidak Disetujui'] + + useEffect(() => { + let params = { + from: periodeFrom, + to: periodeTo, + } + + Laporan31(params) + .then((res) => { + if (res.status === 'error') { + setData([]) + } else { + setData(res.data) + } + }) + .catch((err) => console.log(err)) + }, [refresh]) + + const bodyTanggal = (rowData) => { + return moment(rowData[0]).format('MMM YYYY') + } + + const dynamicColumns = headers.map((col, i) => { + let bodyx + if (i === 0) { + bodyx = { body: bodyTanggal } + } + return + }) + + return ( + <> + + Laporan Rekapitulasi Hasil Verifikasi per Bulan + + + Laporan Rekapitulasi Hasil Verifikasi per Bulan + + { + let periodeFromBefore = values.from + let periodeToBefore = values.to + Object.assign(values, { from: moment(values.from).format('YYYY-MM') }) + Object.assign(values, { to: moment(values.to).format('YYYY-MM') }) + setPeriodeFrom(values.from) + setPeriodeTo(values.to) + + values.from = periodeFromBefore + values.to = periodeToBefore + setRefresh(Math.random()) + setSubmitting(false) + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting }) => { + return ( +
+
+ + +
+

S/D

+
+ + +
+
+
+
+ ) + }} +
+
+ + + {dynamicColumns} + +
+ + ) +} diff --git a/pages/laporan/verif-per-bulan/index.js b/pages/laporan/verif-per-bulan/index.js new file mode 100644 index 0000000..1a84f78 --- /dev/null +++ b/pages/laporan/verif-per-bulan/index.js @@ -0,0 +1,20 @@ +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import Head from 'next/head' +import Image from 'next/image' + +export default function PerUser() { + return ( + <> + + Laporan Per User + + + Laporan Per User +
+ coming-soon +
+
+ + ) +} diff --git a/pages/login/index.js b/pages/login/index.js new file mode 100644 index 0000000..30b5797 --- /dev/null +++ b/pages/login/index.js @@ -0,0 +1,127 @@ +import { Depan } from '@/components/Layouts' +import { useAuth } from '@/hooks/auth' +import { useFormik } from 'formik' +import Head from 'next/head' +import Image from 'next/image' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Captcha } from 'primereact/captcha' +import { InputText } from 'primereact/inputtext' +import { Password } from 'primereact/password' +import { Toast } from 'primereact/toast' +import { useRef, useState } from 'react' + +export default function Login() { + const toast = useRef(null) + const { login } = useAuth({}) + const [loading, setLoading] = useState(false) + + const formik = useFormik({ + initialValues: { + username: '', + password: '', + recaptcha: '', + }, + validate: (data) => { + let errors = {} + if (!data.username) errors.username = 'Username is required.' + if (!data.password) errors.password = 'Password is required.' + if (!data.recaptcha) errors.recaptcha = 'Recaptcha is required.' + + return errors + }, + onSubmit: (data) => { + setLoading(true) + const username = data.username + const password = data.password + const recaptcha = data.recaptcha + + login({ username, password, recaptcha, toast, setLoading }) + }, + validateOnChange: false, + }) + + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + const handleCaptcha = (captcha) => { + formik.setFieldValue('recaptcha', captcha) + } + + return ( + <> + + + Login + + +
+ logo +
+

+ SISTEM APLIKASI
PENYELESAIAN TAGIHAN dan PERTANGGUNGJAWABAN KEUANGAN +

+

Login

+

Enter your username and password to sign in

+
+
+ + + {errorFieldMessage('username')} +
+
+ + + {errorFieldMessage('password')} +
+ + handleCaptcha(captcha)} + className='relative 2xl:my-3 left-1/2 -translate-x-1/2' + /> + {errorFieldMessage('recaptcha')} + + +
+ + ) +} diff --git a/pages/manajemen/jam-kerja/index.js b/pages/manajemen/jam-kerja/index.js new file mode 100644 index 0000000..42cbb8a --- /dev/null +++ b/pages/manajemen/jam-kerja/index.js @@ -0,0 +1,55 @@ +import { DatatablePrime } from '@/components/Datatables' +import FormJamKerja from '@/components/Form/JamKerja' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { JamKerjaGet } from '@/services/manajemen/jam-kerja-service' +import Head from 'next/head' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function JamKerja() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + + useEffect(() => { + JamKerjaGet() + .then((res) => { + console.log(res) + setData([res.data]) + }) + .catch((err) => { + console.log(err) + }) + }, [refresh]) + + return ( + <> + + + Jam Kerja + + + Jam Kerja + + + + + + + ) +} diff --git a/pages/manajemen/role/index.js b/pages/manajemen/role/index.js new file mode 100644 index 0000000..44e6088 --- /dev/null +++ b/pages/manajemen/role/index.js @@ -0,0 +1,110 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormRole from '@/components/Form/Role' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { RoleDelete, RoleGetOne, RoleList } from '@/services/manajemen/role-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function Role() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + + useEffect(() => { + let params = {} + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + RoleList(params).then((res) => setData(res.data)) + }, [refresh, search]) + + const editRole = (data) => { + RoleGetOne({ role_id: data.role_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteRole = () => { + RoleDelete({ role_id: dialogDelete.role_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Role + + + Role + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/manajemen/user/index.js b/pages/manajemen/user/index.js new file mode 100644 index 0000000..4f22e70 --- /dev/null +++ b/pages/manajemen/user/index.js @@ -0,0 +1,113 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormUser from '@/components/Form/User' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { UserDelete, UserGetOne, UserList } from '@/services/manajemen/user-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function User() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + + useEffect(() => { + let params = {} + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + UserList(params).then((res) => { + setData(res.data) + }) + }, [refresh, search]) + + const editUser = (data) => { + UserGetOne({ user_id: data.user_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteUser = () => { + UserDelete({ user_id: dialogDelete.user_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + User + + + User + + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/otorisasi/pengesahan/form.js b/pages/otorisasi/pengesahan/form.js new file mode 100644 index 0000000..3acc2b7 --- /dev/null +++ b/pages/otorisasi/pengesahan/form.js @@ -0,0 +1,346 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, SubJudul } from '@/components/TextCustom' +import { TagihanGet, VerifikasiSave } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import 'moment/locale/id' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BreadCrumb } from 'primereact/breadcrumb' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { RadioButton } from 'primereact/radiobutton' +import { TabPanel, TabView } from 'primereact/tabview' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function FormPengesahan() { + const router = useRouter() + const { tagihan_id } = router.query + const [dataTagihan, setDataTagihan] = useState([]) + const [dataDetail, setDataDetail] = useState([]) + + useEffect(() => { + tagihan_id && + TagihanGet({ ref_id: tagihan_id }) + .then((res) => { + setDataTagihan(res.data[0]) + setDataDetail(res.data[1]) + }) + .catch((err) => console.log(err)) + }, [tagihan_id]) + + const toast = useRef(null) + const [activeIndex, setActiveIndex] = useState(0) + + /** + * *Breadcrumb + */ + const items = [{ label: 'Pengesahan', url: '/otorisasi/pengesahan' }, { label: 'Form' }] + const home = { icon: 'pi pi-home', url: '/dashboard' } + + const formikInitialValues = () => { + const detail = + dataDetail.length > 0 && + dataDetail.map((value) => { + return { + detail_id: value.detail_id, + jenis_belanja: value.jenis_belanja, + jenis_kegiatan: value.jenis_kegiatan, + akun: value.akun_id, + keperluan_untuk: value.keperluan, + syarat: value.syarat.map((valueSyarat) => { + return { + syarat_id: valueSyarat.syarat_id, + nama_persyaratan: valueSyarat.syarat_dokumen, + catatans: { + verif: valueSyarat.verif_note, + bendahara: valueSyarat.bendahara_note, + spm: valueSyarat.spm_note, + }, + ms: valueSyarat.ms, + } + }), + } + }) + return { details: detail, persetujuan: false, tagihan_id: tagihan_id } + } + + return ( + <> + + + Form Pengesahan + + + +
+ Form Pengesahan + +
+ + + +
+
+ {dataDetail.length > 0 && ( + { + VerifikasiSave(values) + .then((res) => { + if (res.status == 'ok') { + Swal.fire({ + title: 'Success', + text: 'Verifikasi berhasil', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/otorisasi/pengesahan') + }) + } + setSubmitting(false) + }) + .catch((err) => { + console.log(err) + setSubmitting(false) + }) + }} + validate={(data) => { + let errors = {} + data.details.map((values, indexTagihan) => { + const indexTagihanx = indexTagihan + 1 + values.syarat.map((valuesSyarats, indexSyarat) => { + const indexSyaratx = indexSyarat + 1 + if (!valuesSyarats.ms) { + errors.ms = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' MS/TMS Tidak Boleh Kosong', + }) + } else if (valuesSyarats.ms === 'tms') { + if (!valuesSyarats.catatans.bendahara) { + errors.keterangan = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: + 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' Catatan Tidak Boleh Kosong', + }) + } + } + }) + }) + + return errors + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, setFieldValue, isSubmitting }) => { + const handleKirim = () => { + setFieldValue('persetujuan', true) + handleSubmit() + } + + const handleTolak = () => { + setFieldValue('persetujuan', false) + handleSubmit() + } + + let cekTMSTolak = [] + values.details.map((valRekomKabag) => { + valRekomKabag.syarat.map((valCekSyarat) => { + cekTMSTolak.push(valCekSyarat.ms) + }) + }) + let cekTMSTolakH = cekTMSTolak.find((isi_tms) => isi_tms === 'tms') + + return ( + + setActiveIndex(e.index)} + className='mt-3 shadow' + > + {dataDetail.map((dataTagihan, indexTagihan) => { + return ( + +
+ + + + + +
+
+ Syarat +
+
+ +

Syarat dengan status TMS (Tidak memenuhi syarat)

+
+
+ +

Syarat dengan catatan

+
+
+ + {dataTagihan.syarat.map((valueSyarat, indexSyarat) => { + return ( + +
+ + + + + + + + + + + + + + + + +
MSTMS
+
+ { + handleChange(e) + setFieldValue('tolak', false) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'ms'} + /> +
+
+ { + handleChange(e) + setFieldValue('tolak', true) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'tms'} + /> +
+

Catatan

+ + + + + + + + + + + +
+
+
+ ) + })} +
+
+ Rekomendasi Kabag + +
+ ) + })} +
+
+
+
+ ) + }} +
+ )} +
+ + ) +} diff --git a/pages/otorisasi/pengesahan/index.js b/pages/otorisasi/pengesahan/index.js new file mode 100644 index 0000000..8666e10 --- /dev/null +++ b/pages/otorisasi/pengesahan/index.js @@ -0,0 +1,171 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { VerifikasiList } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { InputText } from 'primereact/inputtext' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' + +export default function Pengesahan() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [loading, setLoading] = useState(false) + const [search, setSearch] = useState({}) + + // DATATABLE + const [first, setFirst] = useState(0) + const [page, setPage] = useState(1) + const [length, setLength] = useState(10) + const [totalRecords, setTotalRecords] = useState(0) + const [orderDir, setOrderDir] = useState('desc') + const [orderCol, setOrderCol] = useState(2) + const [sort, setSort] = useState([]) + + useEffect(() => { + setLoading(true) + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + VerifikasiList(params).then((res) => { + setData(res.data) + setLoading(false) + setTotalRecords( + res.recordsFiltered === 1 ? 1 : res.recordsFiltered < 1 ? res.recordsFiltered : res.recordsFiltered + ) + }) + }, [page, first, length, search, orderCol, orderDir]) + + const actionBodyTemplate = (rowData) => { + return ( +
+ +
+ ) + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + const bodyTanggal = (rowData) => { + return rowData.tanggal_kirim === '-' ? rowData.tanggal_kirim : moment(rowData.tanggal_kirim).format('DD MMMM YYYY') + } + + return ( + <> + + + Pengesahan + + + Pengesahan + {Pencarian} + { + setSort(e.multiSortMeta) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'tanggal': + setOrderCol(2) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + > + + + + + + + + ) +} diff --git a/pages/otorisasi/persetujuan/form.js b/pages/otorisasi/persetujuan/form.js new file mode 100644 index 0000000..a705049 --- /dev/null +++ b/pages/otorisasi/persetujuan/form.js @@ -0,0 +1,403 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, SubJudul } from '@/components/TextCustom' +import { ddRekomendasi } from '@/constant/globalData' +import { TagihanGet, VerifikasiSave } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import 'moment/locale/id' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BreadCrumb } from 'primereact/breadcrumb' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { RadioButton } from 'primereact/radiobutton' +import { TabPanel, TabView } from 'primereact/tabview' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function FormPersetujuan() { + const router = useRouter() + const { tagihan_id } = router.query + const [dataTagihan, setDataTagihan] = useState([]) + const [dataDetail, setDataDetail] = useState([]) + + useEffect(() => { + tagihan_id && + TagihanGet({ ref_id: tagihan_id }) + .then((res) => { + setDataTagihan(res.data[0]) + setDataDetail(res.data[1]) + }) + .catch((err) => console.log(err)) + }, [tagihan_id]) + + const toast = useRef(null) + const [activeIndex, setActiveIndex] = useState(0) + + /** + * *Breadcrumb + */ + const items = [{ label: 'Persetujuan', url: '/otorisasi/persetujuan' }, { label: 'Form' }] + const home = { icon: 'pi pi-home', url: '/dashboard' } + + const formikInitialValues = () => { + const detail = + dataDetail.length > 0 && + dataDetail.map((value) => { + let cekTMS = [] + value.syarat.map((valueTMS) => { + cekTMS.push(valueTMS.ms) + }) + let cekTMSH = cekTMS.find((isi_tms) => isi_tms === 'tms') + return { + detail_id: value.detail_id, + jenis_belanja: value.jenis_belanja, + jenis_kegiatan: value.jenis_kegiatan, + akun: value.akun_id, + keperluan_untuk: value.keperluan, + rekom_kabag: cekTMSH === 'tms' ? 'Ditolak/dikembalikan' : '', + syarat: value.syarat.map((valueSyarat) => { + return { + syarat_id: valueSyarat.syarat_id, + nama_persyaratan: valueSyarat.syarat_dokumen, + catatans: { + verif: valueSyarat.verif_note, + bendahara: valueSyarat.bendahara_note, + spm: valueSyarat.spm_note, + }, + ms: valueSyarat.ms, + } + }), + } + }) + return { details: detail, persetujuan: false, tagihan_id: tagihan_id } + } + + return ( + <> + + + Form Persetujuan + + + +
+ Form Persetujuan + +
+ + + +
+
+ {dataDetail.length > 0 && ( + { + VerifikasiSave(values) + .then((res) => { + if (res.status == 'ok') { + Swal.fire({ + title: 'Success', + text: 'Verifikasi berhasil', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/otorisasi/persetujuan') + }) + } + setSubmitting(false) + }) + .catch((err) => { + setSubmitting(false) + console.log(err) + }) + }} + validate={(data) => { + let errors = {} + data.details.map((values, indexTagihan) => { + const indexTagihanx = indexTagihan + 1 + if (!values.rekom_kabag) { + errors.rekom = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Rekomendasi Tagihan ' + indexTagihanx + ' Tidak Boleh Kosong', + }) + } + values.syarat.map((valuesSyarats, indexSyarat) => { + const indexSyaratx = indexSyarat + 1 + if (!valuesSyarats.ms) { + errors.ms = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' MS/TMS Tidak Boleh Kosong', + }) + } else if (valuesSyarats.ms === 'tms') { + if (!valuesSyarats.catatans.verif) { + errors.keterangan = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: + 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' Catatan Tidak Boleh Kosong', + }) + } + } + }) + }) + + return errors + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, setFieldValue, isSubmitting }) => { + const handleKirim = () => { + setFieldValue('persetujuan', true) + handleSubmit() + } + + const handleTolak = () => { + setFieldValue('persetujuan', false) + handleSubmit() + } + let cekTMSTolak = [] + values.details.map((valRekomKabag) => { + cekTMSTolak.push(valRekomKabag.rekom_kabag) + }) + let cekTMSTolakH = cekTMSTolak.find((isi_tms) => isi_tms === 'Ditolak/dikembalikan') + + return ( + + setActiveIndex(e.index)} + className='mt-3 shadow' + > + {dataDetail.map((dataTagihan, indexTagihan) => { + let cekTMS = [] + values.details[indexTagihan].syarat.map((valueTMS) => { + cekTMS.push(valueTMS.ms) + }) + let cekTMSH = cekTMS.find((isi_tms) => isi_tms === 'tms') + + return ( + +
+ + + + + +
+
+ Syarat +
+
+ +

Syarat dengan status TMS (Tidak memenuhi syarat)

+
+
+ +

Syarat dengan catatan

+
+
+ + {dataTagihan.syarat.map((valueSyarat, indexSyarat) => { + return ( + +
+ + + + + + + + + + + + + + + + +
MSTMS
+
+ { + handleChange(e) + setFieldValue(`details.${indexTagihan}.rekom_kabag`, null) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'ms'} + /> +
+
+ { + handleChange(e) + setFieldValue( + `details.${indexTagihan}.rekom_kabag`, + 'Ditolak/dikembalikan' + ) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'tms'} + /> +
+

Catatan

+ + + + + + + + + + + + +
+
+
+ ) + })} +
+
+ Rekomendasi Verif + + Rekomendasi Kasub + + Rekomendasi Kabag + val.name === 'Ditolak/dikembalikan') + : ddRekomendasi.filter((val) => val.name !== 'Ditolak/dikembalikan') + } + onChange={handleChange} + placeholder='Pilih rekomendasi' + className='w-80' + showClear={ + values.details[indexTagihan].rekom_kabag + ? values.details[indexTagihan].rekom_kabag === 'Ditolak/dikembalikan' + ? false + : true + : false + } + readOnly={cekTMSH === 'tms' ? true : false} + /> +
+ ) + })} +
+
+
+
+ ) + }} +
+ )} +
+ + ) +} diff --git a/pages/otorisasi/persetujuan/index.js b/pages/otorisasi/persetujuan/index.js new file mode 100644 index 0000000..497771d --- /dev/null +++ b/pages/otorisasi/persetujuan/index.js @@ -0,0 +1,171 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { VerifikasiList } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { InputText } from 'primereact/inputtext' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' + +export default function Rekomendasi() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [loading, setLoading] = useState(false) + const [search, setSearch] = useState({}) + + // DATATABLE + const [first, setFirst] = useState(0) + const [page, setPage] = useState(1) + const [length, setLength] = useState(10) + const [totalRecords, setTotalRecords] = useState(0) + const [orderDir, setOrderDir] = useState('desc') + const [orderCol, setOrderCol] = useState(2) + const [sort, setSort] = useState([]) + + useEffect(() => { + setLoading(true) + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + VerifikasiList(params).then((res) => { + setData(res.data) + setLoading(false) + setTotalRecords( + res.recordsFiltered === 1 ? 1 : res.recordsFiltered < 1 ? res.recordsFiltered : res.recordsFiltered + ) + }) + }, [page, first, length, search, orderCol, orderDir]) + + const actionBodyTemplate = (rowData) => { + return ( +
+ +
+ ) + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + const bodyTanggal = (rowData) => { + return rowData.tanggal_kirim === '-' ? rowData.tanggal_kirim : moment(rowData.tanggal_kirim).format('DD MMMM YYYY') + } + + return ( + <> + + + Persetujuan + + + Persetujuan + {Pencarian} + { + setSort(e.multiSortMeta) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'tanggal': + setOrderCol(2) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + > + + + + + + + + ) +} diff --git a/pages/otorisasi/rekomendasi/form.js b/pages/otorisasi/rekomendasi/form.js new file mode 100644 index 0000000..4de7ce6 --- /dev/null +++ b/pages/otorisasi/rekomendasi/form.js @@ -0,0 +1,367 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, SubJudul } from '@/components/TextCustom' +import { ddRekomendasi } from '@/constant/globalData' +import { TagihanGet, VerifikasiSave } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import 'moment/locale/id' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BreadCrumb } from 'primereact/breadcrumb' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { RadioButton } from 'primereact/radiobutton' +import { TabPanel, TabView } from 'primereact/tabview' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function FormRekomendasi() { + const router = useRouter() + const { tagihan_id } = router.query + const [dataTagihan, setDataTagihan] = useState([]) + const [dataDetail, setDataDetail] = useState([]) + + useEffect(() => { + tagihan_id && + TagihanGet({ ref_id: tagihan_id }) + .then((res) => { + setDataTagihan(res.data[0]) + setDataDetail(res.data[1]) + }) + .catch((err) => console.log(err)) + }, [tagihan_id]) + + const toast = useRef(null) + const [activeIndex, setActiveIndex] = useState(0) + + /** + * *Breadcrumb + */ + const items = [{ label: 'Verifikasi', url: '/otorisasi/verifikasi' }, { label: 'Form' }] + const home = { icon: 'pi pi-home', url: '/dashboard' } + + const formikInitialValues = () => { + const detail = + dataDetail.length > 0 && + dataDetail.map((value) => { + let cekTMS = [] + value.syarat.map((valueTMS) => { + cekTMS.push(valueTMS.ms) + }) + let cekTMSH = cekTMS.find((isi_tms) => isi_tms === 'tms') + return { + detail_id: value.detail_id, + jenis_belanja: value.jenis_belanja, + jenis_kegiatan: value.jenis_kegiatan, + akun: value.akun_id, + keperluan_untuk: value.keperluan, + syarat: value.syarat.map((valueSyarat) => { + return { + syarat_id: valueSyarat.syarat_id, + nama_persyaratan: valueSyarat.syarat_dokumen, + catatans: { + verif: valueSyarat.verif_note, + bendahara: valueSyarat.bendahara_note, + spm: valueSyarat.spm_note, + }, + ms: valueSyarat.ms, + } + }), + rekom_kasub: cekTMSH === 'tms' ? 'Ditolak/dikembalikan' : '', + } + }) + return { details: detail, persetujuan: true, tagihan_id: tagihan_id } + } + + return ( + <> + + + Form Rekomendasi + + + +
+ Form Rekomendasi + +
+ + + +
+
+ {dataDetail.length > 0 && ( + { + VerifikasiSave(values) + .then((res) => { + if (res.status == 'ok') { + Swal.fire({ + title: 'Success', + text: 'Verifikasi berhasil', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/otorisasi/rekomendasi') + }) + setSubmitting(false) + } + }) + .catch((err) => { + setSubmitting(false) + console.log(err) + }) + }} + validate={(data) => { + let errors = {} + data.details.map((values, indexTagihan) => { + const indexTagihanx = indexTagihan + 1 + if (!values.rekom_kasub) { + errors.rekom = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Rekomendasi Tagihan ' + indexTagihanx + ' Tidak Boleh Kosong', + }) + } + + values.syarat.map((valuesSyarats, indexSyarat) => { + const indexSyaratx = indexSyarat + 1 + if (!valuesSyarats.ms) { + errors.ms = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' MS/TMS Tidak Boleh Kosong', + }) + } else if (valuesSyarats.ms === 'tms') { + if (!valuesSyarats.catatans.verif) { + errors.keterangan = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: + 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' Catatan Tidak Boleh Kosong', + }) + } + } + }) + }) + + return errors + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, isSubmitting, setFieldValue }) => { + return ( + + setActiveIndex(e.index)} + className='mt-3 shadow' + > + {dataDetail.map((dataTagihan, indexTagihan) => { + let cekTMS = [] + values.details[indexTagihan].syarat.map((valueTMS) => { + cekTMS.push(valueTMS.ms) + }) + let cekTMSH = cekTMS.find((isi_tms) => isi_tms === 'tms') + return ( + +
+ + + + + +
+
+ Syarat +
+
+ +

Syarat dengan status TMS (Tidak memenuhi syarat)

+
+
+ +

Syarat dengan catatan

+
+
+ + {dataTagihan.syarat.map((valueSyarat, indexSyarat) => { + return ( + +
+ + + + + + + + + + + + + + + + +
MSTMS
+
+ +
+
+ { + handleChange(e) + setFieldValue( + `details.${indexTagihan}.rekom_kasub`, + 'Ditolak/dikembalikan' + ) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'tms'} + /> +
+

Catatan

+ + + + + + + + + + + +
+
+
+ ) + })} +
+
+ Rekomendasi Verif + + Rekomendasi Validasi + val.name === 'Ditolak/dikembalikan') + : ddRekomendasi.filter((val) => val.name !== 'Ditolak/dikembalikan') + } + onChange={handleChange} + placeholder='Pilih rekomendasi' + className='w-80' + showClear={ + values.details[indexTagihan].rekom_kasub + ? values.details[indexTagihan].rekom_kasub === 'Ditolak/dikembalikan' + ? false + : true + : false + } + readOnly={cekTMSH === 'tms' ? true : false} + /> +
+ ) + })} +
+
+
+
+ ) + }} +
+ )} +
+ + ) +} diff --git a/pages/otorisasi/rekomendasi/index.js b/pages/otorisasi/rekomendasi/index.js new file mode 100644 index 0000000..8583661 --- /dev/null +++ b/pages/otorisasi/rekomendasi/index.js @@ -0,0 +1,171 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { VerifikasiList } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { InputText } from 'primereact/inputtext' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' + +export default function Rekomendasi() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [loading, setLoading] = useState(false) + const [search, setSearch] = useState({}) + + // DATATABLE + const [first, setFirst] = useState(0) + const [page, setPage] = useState(0) + const [length, setLength] = useState(10) + const [totalRecords, setTotalRecords] = useState(0) + const [orderDir, setOrderDir] = useState('desc') + const [orderCol, setOrderCol] = useState(2) + const [sort, setSort] = useState([]) + + useEffect(() => { + setLoading(true) + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + VerifikasiList(params).then((res) => { + setData(res.data) + setLoading(false) + setTotalRecords( + res.recordsFiltered === 1 ? 1 : res.recordsFiltered < 1 ? res.recordsFiltered : res.recordsFiltered + ) + }) + }, [page, first, length, search, orderCol, orderDir]) + + const actionBodyTemplate = (rowData) => { + return ( +
+ +
+ ) + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + const bodyTanggal = (rowData) => { + return rowData.tanggal_kirim === '-' ? rowData.tanggal_kirim : moment(rowData.tanggal_kirim).format('DD MMMM YYYY') + } + + return ( + <> + + + Rekomendasi + + + Rekomendasi + {Pencarian} + { + setSort(e.multiSortMeta) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'tanggal': + setOrderCol(2) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + > + + + + + + + + ) +} diff --git a/pages/otorisasi/spm/form.js b/pages/otorisasi/spm/form.js new file mode 100644 index 0000000..401ba34 --- /dev/null +++ b/pages/otorisasi/spm/form.js @@ -0,0 +1,348 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, SubJudul } from '@/components/TextCustom' +import { TagihanGet, VerifikasiSave } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import 'moment/locale/id' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BreadCrumb } from 'primereact/breadcrumb' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { RadioButton } from 'primereact/radiobutton' +import { TabPanel, TabView } from 'primereact/tabview' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function FormSpm() { + const router = useRouter() + const { tagihan_id } = router.query + const [dataTagihan, setDataTagihan] = useState([]) + const [dataDetail, setDataDetail] = useState([]) + + useEffect(() => { + tagihan_id && + TagihanGet({ ref_id: tagihan_id }) + .then((res) => { + setDataTagihan(res.data[0]) + setDataDetail(res.data[1]) + }) + .catch((err) => console.log(err)) + }, [tagihan_id]) + + const toast = useRef(null) + const [activeIndex, setActiveIndex] = useState(0) + + /** + * *Breadcrumb + */ + const items = [{ label: 'PPSPM', url: '/otorisasi/spm' }, { label: 'Form' }] + const home = { icon: 'pi pi-home', url: '/dashboard' } + + const formikInitialValues = () => { + const detail = + dataDetail.length > 0 && + dataDetail.map((value) => { + return { + detail_id: value.detail_id, + jenis_belanja: value.jenis_belanja, + jenis_kegiatan: value.jenis_kegiatan, + akun: value.akun_id, + keperluan_untuk: value.keperluan, + rekom_verif: '', + syarat: value.syarat.map((valueSyarat) => { + return { + syarat_id: valueSyarat.syarat_id, + nama_persyaratan: valueSyarat.syarat_dokumen, + catatans: { + verif: valueSyarat.verif_note, + kasub: valueSyarat.kasub_note, + kabag: valueSyarat.kabag_note, + bendahara: valueSyarat.bendahara_note, + spm: valueSyarat.spm_note, + }, + ms: valueSyarat.ms, + } + }), + } + }) + return { details: detail, persetujuan: false, tagihan_id: tagihan_id } + } + + return ( + <> + + + Form PPSPM + + + +
+ Form PPSPM + +
+ + + +
+
+ {dataDetail.length > 0 && ( + { + VerifikasiSave(values) + .then((res) => { + if (res.status == 'ok') { + Swal.fire({ + title: 'Success', + text: 'Verifikasi berhasil', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/otorisasi/spm') + }) + } + setSubmitting(false) + }) + .catch((err) => { + setSubmitting(false) + console.log(err) + }) + }} + validate={(data) => { + let errors = {} + data.details.map((values, indexTagihan) => { + const indexTagihanx = indexTagihan + 1 + values.syarat.map((valuesSyarats, indexSyarat) => { + const indexSyaratx = indexSyarat + 1 + if (!valuesSyarats.ms) { + errors.ms = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' MS/TMS Tidak Boleh Kosong', + }) + } else if (valuesSyarats.ms === 'tms') { + if (!valuesSyarats.catatans.spm) { + errors.keterangan = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: + 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' Catatan Tidak Boleh Kosong', + }) + } + } + }) + }) + + return errors + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, setFieldValue, isSubmitting }) => { + const handleKirim = () => { + setFieldValue('persetujuan', true) + handleSubmit() + } + + const handleTolak = () => { + setFieldValue('persetujuan', false) + handleSubmit() + } + + let cekTMSTolak = [] + values.details.map((valRekomKabag) => { + valRekomKabag.syarat.map((valCekSyarat) => { + cekTMSTolak.push(valCekSyarat.ms) + }) + }) + let cekTMSTolakH = cekTMSTolak.find((isi_tms) => isi_tms === 'tms') + + return ( + + setActiveIndex(e.index)} + className='mt-3 shadow' + > + {dataDetail.map((dataTagihan, indexTagihan) => { + return ( + +
+ + + + + +
+
+ Syarat +
+
+ +

Syarat dengan status TMS (Tidak memenuhi syarat)

+
+
+ +

Syarat dengan catatan

+
+
+ + {dataTagihan.syarat.map((valueSyarat, indexSyarat) => { + return ( + +
+ + + + + + + + + + + + + + + + +
MSTMS
+
+ { + handleChange(e) + setFieldValue('tolak', false) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'ms'} + /> +
+
+ { + handleChange(e) + setFieldValue('tolak', true) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'tms'} + /> +
+

Catatan

+ + + + + + + + + + + +
+
+
+ ) + })} +
+
+ Rekomendasi Kabag + +
+ ) + })} +
+
+
+
+ ) + }} +
+ )} +
+ + ) +} diff --git a/pages/otorisasi/spm/index.js b/pages/otorisasi/spm/index.js new file mode 100644 index 0000000..1c73630 --- /dev/null +++ b/pages/otorisasi/spm/index.js @@ -0,0 +1,257 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { SPMList } from '@/services/otorisasi/spm-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { DataTable } from 'primereact/datatable' +import { InputText } from 'primereact/inputtext' +import { Tag } from 'primereact/tag' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' + +export default function Ppspm() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [loading, setLoading] = useState(false) + const [search, setSearch] = useState({}) + + // DATATABLE + const [first, setFirst] = useState(0) + const [page, setPage] = useState(1) + const [length, setLength] = useState(10) + const [totalRecords, setTotalRecords] = useState(0) + const [orderDir, setOrderDir] = useState('desc') + const [orderCol, setOrderCol] = useState(2) + const [sort, setSort] = useState([]) + const [expandedRows, setExpandedRows] = useState(null) + + useEffect(() => { + setLoading(true) + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + SPMList(params).then((res) => { + setData(res.data) + setLoading(false) + setTotalRecords( + res.recordsFiltered === 1 ? 1 : res.recordsFiltered < 1 ? res.recordsFiltered : res.recordsFiltered + ) + }) + }, [page, first, length, search, orderCol, orderDir]) + + const actionBodyTemplate = (rowData) => { + let all_spp_exist = 'all_spp_exist' in rowData ? rowData.all_spp_exist : true + if (all_spp_exist) { + if (rowData.detail.length > 1) { + if (rowData.nama_tagihan === 'LS') { + return ( +
+ {rowData.status === 6 ? ( + + ) : ( + +
+ ) + } else { + return '' + } + } else { + return ( +
+ {rowData.status === 6 ? ( + + ) : ( + +
+ ) + } + } else { + return '' + } + } + + const actionBodyTemplate2 = (rowData, belomSPM, all_spp_exist) => { + return ( + rowData && ( +
+ {rowData.status === 6 ? ( + + ) : rowData.status < 5 ? ( + + ) : belomSPM || !all_spp_exist ? ( + + ) : ( + +
+ ) + ) + } + + const datatableDetail = (data, all_spp_exist) => { + let cekStatus = [] + data.map((val) => { + cekStatus.push(val.status) + }) + let belomSPM = cekStatus.find((val) => val < 5) + return ( + + + actionBodyTemplate2(e, belomSPM, all_spp_exist)} + exportable={false} + > + + ) + } + + const allowExpansion = (rowData) => { + return rowData.detail.length > 0 && rowData.nama_tagihan === 'GUP' + } + + const expandRow = { + expandedRows: expandedRows, + onRowToggle: (e) => setExpandedRows(e.data), + responsiveLayout: 'scroll', + rowExpansionTemplate: (e) => { + let all_spp_exist = 'all_spp_exist' in e ? e.all_spp_exist : true + return datatableDetail(e.detail, all_spp_exist) + }, + dataKey: 'no_spp', + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + const bodyTanggal = (rowData) => { + return rowData.tanggal_kirim === '-' ? rowData.tanggal_kirim : moment(rowData.tanggal_kirim).format('DD MMMM YYYY') + } + + return ( + <> + + + PPSPM + + + PPSPM + {Pencarian} + { + setSort(e.multiSortMeta) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'tanggal': + setOrderCol(3) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + expandRow={expandRow} + > + + + + + + + + + + ) +} diff --git a/pages/otorisasi/verifikasi/form.js b/pages/otorisasi/verifikasi/form.js new file mode 100644 index 0000000..9003aac --- /dev/null +++ b/pages/otorisasi/verifikasi/form.js @@ -0,0 +1,379 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, SubJudul } from '@/components/TextCustom' +import { ddRekomendasi } from '@/constant/globalData' +import { TagihanGet, VerifikasiSave } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import 'moment/locale/id' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BreadCrumb } from 'primereact/breadcrumb' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { RadioButton } from 'primereact/radiobutton' +import { TabPanel, TabView } from 'primereact/tabview' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function FormVerifikasi() { + const router = useRouter() + const { tagihan_id } = router.query + const [dataTagihan, setDataTagihan] = useState([]) + const [dataDetail, setDataDetail] = useState([]) + + useEffect(() => { + tagihan_id && + TagihanGet({ ref_id: tagihan_id }) + .then((res) => { + setDate(res.data[0].tanggal_bast) + setDataTagihan(res.data[0]) + setDataDetail(res.data[1]) + }) + .catch((err) => console.log(err)) + }, [tagihan_id]) + + const toast = useRef(null) + const [activeIndex, setActiveIndex] = useState(0) + const [date, setDate] = useState(null) + + /** + * *Breadcrumb + */ + const items = [{ label: 'Verifikasi', url: '/otorisasi/verifikasi' }, { label: 'Form' }] + const home = { icon: 'pi pi-home', url: '/dashboard' } + + const formikInitialValues = () => { + const detail = + dataDetail.length > 0 && + dataDetail.map((value) => { + return { + detail_id: value.detail_id, + jenis_belanja: value.jenis_belanja, + jenis_kegiatan: value.jenis_kegiatan, + akun: value.akun_id, + keperluan_untuk: value.keperluan, + rekom_verif: value.rekomendasi_verifikator, + tanggal_bast: date, + syarat: value.syarat.map((valueSyarat) => { + return { + syarat_id: valueSyarat.syarat_id, + nama_persyaratan: valueSyarat.syarat_dokumen, + catatans: { + verif: valueSyarat.verif_note, + bendahara: valueSyarat.bendahara_note, + spm: valueSyarat.spm_note, + }, + ms: valueSyarat.ms, + } + }), + } + }) + return { tanggal_bast: date, details: detail, persetujuan: true, tagihan_id: tagihan_id } + } + + return ( + <> + + + Form Verifikasi + + + +
+ Form Verifikasi + +
+ + + +
+
+ {dataDetail.length > 0 && ( + { + VerifikasiSave(values) + .then((res) => { + if (res.status == 'ok') { + Swal.fire({ + title: 'Success', + text: 'Verifikasi berhasil', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/otorisasi/verifikasi') + }) + } + }) + .catch((err) => console.log(err)) + }} + validate={(data) => { + let errors = {} + data.details.map((values, indexTagihan) => { + const indexTagihanx = indexTagihan + 1 + if (!values.rekom_verif) { + errors.rekom = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Rekomendasi Tagihan ' + indexTagihanx + ' Tidak Boleh Kosong', + }) + } + + values.syarat.map((valuesSyarats, indexSyarat) => { + const indexSyaratx = indexSyarat + 1 + if (!valuesSyarats.ms) { + errors.ms = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' MS/TMS Tidak Boleh Kosong', + }) + } else if (valuesSyarats.ms === 'tms') { + if (!valuesSyarats.catatans.verif) { + errors.keterangan = 'required' + toast.current.show({ + severity: 'error', + summary: 'Error Message', + detail: + 'Tagihan ' + indexTagihanx + ' Syarat ke ' + indexSyaratx + ' Catatan Tidak Boleh Kosong', + }) + } + } + }) + }) + + return errors + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, setFieldValue }) => { + return ( + + setActiveIndex(e.index)} + className='mt-3 shadow' + > + {dataDetail.map((dataTagihan, indexTagihan) => { + let cekTMS = [] + values.details[indexTagihan].syarat.map((valueTMS) => { + cekTMS.push(valueTMS.ms) + }) + let cekTMSH = cekTMS.find((isi_tms) => isi_tms === 'tms') + + return ( + +
+ + + + + {dataTagihan && dataTagihan.tanggal_bast ? ( + + } + type='biru' + /> + ) : ( + + } + type='biru' + /> + )} + +
+
+ Syarat +
+
+ +

Syarat dengan status TMS (Tidak memenuhi syarat)

+
+
+ +

Syarat dengan catatan

+
+
+ + {dataTagihan.syarat.map((valueSyarat, indexSyarat) => { + return ( + +
+ + + + + + + + + + + + + + + + +
MSTMS
+
+ +
+
+ { + handleChange(e) + setFieldValue( + `details.${indexTagihan}.rekom_verif`, + 'Ditolak/dikembalikan' + ) + }} + checked={values.details[indexTagihan].syarat[indexSyarat].ms === 'tms'} + /> +
+

Catatan

+ + + + + + + + + + + +
+
+
+ ) + })} +
+
+ Rekomendasi + val.name === 'Ditolak/dikembalikan') + : ddRekomendasi.filter((val) => val.name !== 'Ditolak/dikembalikan') + } + onChange={handleChange} + placeholder='Pilih rekomendasi' + className='w-80' + showClear={ + values.details[indexTagihan].rekom_verif + ? values.details[indexTagihan].rekom_verif === 'Ditolak/dikembalikan' + ? false + : true + : false + } + readOnly={cekTMSH === 'tms' ? true : false} + /> +
+ ) + })} +
+
+
+
+ ) + }} +
+ )} +
+ + ) +} diff --git a/pages/otorisasi/verifikasi/index.js b/pages/otorisasi/verifikasi/index.js new file mode 100644 index 0000000..6b88c33 --- /dev/null +++ b/pages/otorisasi/verifikasi/index.js @@ -0,0 +1,191 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Label } from '@/components/Label' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { VerifikasiList } from '@/services/otorisasi/verifikasi-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import Link from 'next/link' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { InputText } from 'primereact/inputtext' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' + +export default function Verifikasi() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [search, setSearch] = useState('') + const [loading, setLoading] = useState(false) + + // DATATABLE + const [first, setFirst] = useState(0) + const [page, setPage] = useState(0) + const [length, setLength] = useState(10) + const [totalRecords, setTotalRecords] = useState(0) + const [sort, setSort] = useState([]) + const [orderDir, setOrderDir] = useState('desc') + const [orderCol, setOrderCol] = useState(2) + + useEffect(() => { + setLoading(true) + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + VerifikasiList(params).then((res) => { + setData(res.data) + setLoading(false) + setTotalRecords( + res.recordsFiltered === 1 ? 1 : res.recordsFiltered < 1 ? res.recordsFiltered : res.recordsFiltered + ) + }) + }, [page, first, length, orderCol, orderDir, search]) + + const actionBodyTemplate = (rowData) => { + return ( +
+ +
+ ) + } + + const bodyTanggal = (rowData) => { + return rowData.tanggal_kirim === '-' ? rowData.tanggal_kirim : moment(rowData.tanggal_kirim).format('DD MMMM YYYY') + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + const bodyUrgensi = (rowData) => { + let color + switch (rowData.urgensi.toLowerCase()) { + case 'low': + color = 'success' + break + + case 'medium': + color = 'warning' + break + + case 'high': + color = 'danger' + break + } + return + } + + return ( + <> + + + Verifikasi + + + Verifikasi + {Pencarian} + { + setSort(e.multiSortMeta) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'tanggal': + setOrderCol(2) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + totalRecords={totalRecords} + sort={sort} + loading={loading} + > + + + + + + + + + ) +} diff --git a/pages/pengajuan-tagihan/ditolak/[ditolak].js b/pages/pengajuan-tagihan/ditolak/[ditolak].js new file mode 100644 index 0000000..7631a77 --- /dev/null +++ b/pages/pengajuan-tagihan/ditolak/[ditolak].js @@ -0,0 +1,359 @@ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, SubJudul } from '@/components/TextCustom' +import { TagihanGetOne, TagihanSubmit } from '@/services/pengajuan-tagihan/tagihan-service' +import { Formik } from 'formik' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { FileUpload } from 'primereact/fileupload' +import { InputTextarea } from 'primereact/inputtextarea' +import { ProgressBar } from 'primereact/progressbar' +import { TabPanel, TabView } from 'primereact/tabview' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' +import axios from '../../../lib/axios' + +export default function Ditolak() { + const router = useRouter() + const [data, setData] = useState([]) + const toast = useRef(null) + const [progressUpload, setProgressUpload] = useState(0) + + useEffect(() => { + TagihanGetOne({ ref_id: router.query.ditolak }).then((res) => { + if (res.status === 'ok') { + setData(res.data) + } else { + console.log(res.message) + } + }) + }, [router]) + + const formikInitialValues = () => { + let groupTagihan = [] + let detailIDTolak = [] + data.length > 0 && + data[1].map((valData) => { + valData.syarat.map((valSyarat) => { + if (valSyarat.ms === 'tms') { + let cek_detail_id = detailIDTolak.find((e) => e === valData.detail_id) + !cek_detail_id && detailIDTolak.push(valData.detail_id) + } + }) + }) + + detailIDTolak.map((valDetailIDTolak, iDetailIDTolak) => { + data.length > 0 && + data[1] + .filter((valTagihan) => valTagihan.detail_id === detailIDTolak[iDetailIDTolak]) + .map((valData) => { + groupTagihan.push({ + detail_id: valData.detail_id, + jenis_belanja: valData.jenis_belanja, + jenis_kegiatan: valData.jenis_kegiatan, + syarat: valData.syarat.map((valSyarat) => { + if (valSyarat.ms === 'tms') { + return { + syarat_id: valSyarat.syarat_id, + syarat_dokumen: valSyarat.syarat_dokumen, + keterangan: valSyarat.keterangan, + file: '', + file_name: '', + ms: valSyarat.ms, + verif_note: valSyarat.verif_note, + kasub_note: valSyarat.kasub_note, + kabag_note: valSyarat.kabag_note, + bendahara_note: valSyarat.bendahara_note, + spm_note: valSyarat.spm_note, + } + } + }), + akun_id: valData.akun_id, + filepath_old: valData.filepath, + keperluan: valData.keperluan, + draft: false, + }) + }) + }) + + return { + tagihan_id: data[0].tagihan_id, + detail_tagihan: groupTagihan, + } + } + + return ( + + + + Pengajuan Tagihan Ulang + + + {data.length > 0 && ( + +
+ Form Pengajuan Tagihan Ulang + +
+ + + +
+
+ { + setSubmitting(true) + TagihanSubmit({ ref_id: data[0].tagihan_id }) + .then((res) => { + if (res.status === 'ok') { + Swal.fire({ + title: 'Success', + text: 'Tagihan berhasil dikirim', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + setSubmitting(false) + router.push('/pengajuan-tagihan') + }) + } + }) + .catch((err) => { + setSubmitting(false) + console.log(err) + }) + }} + validate={(data) => { + let errors = {} + data.detail_tagihan.map((val) => { + if (!val.file) { + toast.current.show({ + severity: 'error', + detail: 'file belum diupload', + closable: false, + }) + errors.filepath = val + } + }) + + return errors + }} + validateOnChange={false} + > + {({ values, setFieldValue, handleSubmit, isSubmitting }) => { + const handleRevisi = () => { + handleSubmit() + } + return ( + + + {values.detail_tagihan.map((valDetailTagihan, indexDetailTagihan) => { + const customBase64Uploader = async (event) => { + // convert file to base64 encoded + const file = event.files[0] + if (file) { + if (file.type === 'application/pdf') { + const reader = new FileReader() + reader.readAsDataURL(file) + + reader.onloadend = async function () { + const base64data = reader.result + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, base64data) + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file_name`, file.name) + + const kirimSatuan = { + detail_id: valDetailTagihan.detail_id, + file: base64data, + file_name: file.name, + } + + await axios + .post('tagihan/revisi_detail', kirimSatuan, { + headers: { + 'Content-Type': 'application/json', + }, + onUploadProgress: (progresEvent) => { + const percentedCompleted = Math.round( + (progresEvent.loaded * 100) / progresEvent.total + ) + setProgressUpload(percentedCompleted) + }, + }) + .then(() => { + toast.current.show({ + severity: 'success', + detail: 'File berhasil diupload', + closable: false, + }) + }) + .catch((err) => console.log(err)) + } + } else { + event.options.clear() + toast.current.show({ + severity: 'error', + detail: 'Invalid format file', + closable: false, + }) + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, null) + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file_name`, null) + } + } + } + return ( + +
+ + + + +
+
+ Syarat + + {valDetailTagihan.syarat.map((valSyarat, indexSyarat) => { + if (valSyarat) { + return ( + + + + + + + +
+

Catatan

+ + + + + + + + + + + +
+
+ ) + } + })} +
+
+
+ + + + + + + + + + + + + +
File SebelumUpload File Revisi
+ + + +

Klik disini untuk lihat file

+
+ +
+ Drag and drop files to here to upload.

} + customUpload + uploadHandler={(e) => customBase64Uploader(e)} + onClear={() => + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, false) + } + onRemove={() => + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, false) + } + uploadOptions={{ + className: values.detail_tagihan[indexDetailTagihan].file ? 'p-disabled' : '', + }} + cancelOptions={{ + className: values.detail_tagihan[indexDetailTagihan].file ? 'p-disabled' : '', + }} + progressBarTemplate={ + + } + /> +
+
+
+ ) + })} +
+
+
+
+ ) + }} +
+
+ )} +
+
+ ) +} diff --git a/pages/pengajuan-tagihan/draft/[draft].js b/pages/pengajuan-tagihan/draft/[draft].js new file mode 100644 index 0000000..94eafa9 --- /dev/null +++ b/pages/pengajuan-tagihan/draft/[draft].js @@ -0,0 +1,651 @@ +import { CardCustom } from '@/components/CardCustom' +import { Belakang } from '@/components/Layouts' +import { Judul, LabelInput } from '@/components/TextCustom' +import { + TagihanAddDetail, + TagihanGetOne, + TagihanResubmit, + TagihanSubmit, +} from '@/services/pengajuan-tagihan/tagihan-service' +import { AkunList } from '@/services/referensi/akun-service' +import { JenisKegiatanList } from '@/services/referensi/jenisKegiatan-service' +import { PersyaratanSearch } from '@/services/referensi/persyaratan-service' +import { FieldArray, Formik } from 'formik' +import { fetchAPI } from 'lib/fetch' +import Head from 'next/head' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { Dropdown } from 'primereact/dropdown' +import { FileUpload } from 'primereact/fileupload' +import { InputTextarea } from 'primereact/inputtextarea' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function Draft({ optionJenisBelanja = null }) { + const router = useRouter() + const [data, setData] = useState([]) + const toast = useRef(null) + const [optionJenisKegiatan, setOptionJenisKegiatan] = useState([]) + const [optionAkun, setOptionAkun] = useState([]) + const [countJenisTagihan, setCountJenisTagihan] = useState(0) + const [kirimLoading, setKirimLoading] = useState(false) + const [tagihanID, setTagihanID] = useState('') + const [statusDraft, setStatusDraft] = useState(false) + + useEffect(() => { + TagihanGetOne({ ref_id: router.query.draft }).then((res) => { + if (res.status === 'ok') { + setData(res.data) + setTagihanID(res.data[0].tagihan_id) + } else { + console.log(res.message) + } + }) + + JenisKegiatanList() + .then((res) => setOptionJenisKegiatan(res.data)) + .catch((err) => console.log(err)) + }, [router]) + + useEffect(() => { + let params = {} + params.draw = 0 + AkunList(params).then((res) => setOptionAkun(res.data)) + }, []) + + const formikInitialValues = () => { + let lastIndex = 0 + if (data.length > 0) { + lastIndex = data[1].length - 1 + } + const init = data.length > 0 && { + jenis_tagihan_id: data[0].jenis_tagihan_id, + tagihan_id: data[0].tagihan_id, + detail_tagihan: [ + { + detail_id: data[1][lastIndex].detail_id, + jenis_belanja: data[1][lastIndex].jenis_belanja_id, + jenis_kegiatan: data[1][lastIndex].jenis_kegiatan_id, + filepath: data[1][lastIndex].filepath, + syarat: data[1][lastIndex].syarat.map((valSyarat) => { + return { + syarat_id: valSyarat.syarat_id, + syarat_dokumen: valSyarat.syarat_dokumen, + keterangan: valSyarat.keterangan, + } + }), + akun_id: data[1][lastIndex].akun_id, + keperluan: data[1][lastIndex].keperluan, + draft: false, + status: false, + }, + ], + dataIndex: 0, //* For select data index + } + + return init + } + + const handleBtnKirim = () => { + Swal.fire({ + title: 'Apakah data diatas sudah benar semua?', + text: 'Tagihan yang sudah dikirim tidak bisa diubah kembali', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, kirim!', + }).then((result) => { + if (result.isConfirmed) { + setKirimLoading(true) + TagihanSubmit({ ref_id: tagihanID }) + .then((res) => { + if (res.status == 'ok') { + setKirimLoading(false) + Swal.fire({ + title: 'Success', + text: 'Tagihan berhasil dikirim', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/pengajuan-tagihan') + }) + } else { + setKirimLoading(false) + } + }) + .catch((err) => { + console.log(err) + setKirimLoading(false) + }) + } + }) + } + + return ( + + + + Pengajuan Tagihan Draft + + + {data.length > 0 && ( + +
+ Form Persetujuan Draft + +
+ + + +
+
+ { + setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', true) + /** + * *Filter data detail tagihan follow the button kirim + */ + const filterData = data.detail_tagihan.find((item, i) => i === data.dataIndex) + + /** + * *Create new format data detail tagihan reference to API + */ + const dataKirim = { + tagihan_id: data.tagihan_id, + detail_tagihan: [filterData], + } + + if (data.dataIndex) { + TagihanAddDetail(dataKirim) + .then((res) => { + if (res.status === 'ok') { + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + if (statusDraft) { + router.push('/pengajuan-tagihan') + } + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', true) + setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + setSubmitting(false) + } else { + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', false) + setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + } + }) + .catch((err) => { + console.log(err) + toast.current.show({ + severity: 'error', + detail: 'Error saat pembuatan data/file belum diupload', + closable: false, + }) + }) + } else { + TagihanResubmit(dataKirim) + .then((res) => { + if (res.status === 'ok') { + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + if (statusDraft) { + router.push('/pengajuan-tagihan') + } + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', true) + setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + setSubmitting(false) + } else { + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', false) + setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + } + }) + .catch((err) => { + console.log(err) + toast.current.show({ + severity: 'error', + detail: 'Error saat pembuatan data/file belum diupload', + closable: false, + }) + }) + } + }} + validate={(data) => { + let errors = {} + data.detail_tagihan.map((val) => { + val.syarat.map((valSyarat, indexSyarat) => { + if (valSyarat) { + if (!valSyarat.file && valSyarat.ms === 'tms') { + errors.file = { ...errors.file, [indexSyarat]: 'File Harus Diisi ' } + } + } + }) + }) + + return errors + }} + validateOnChange={false} + > + {({ values, setFieldValue, handleSubmit, isSubmitting, handleChange }) => { + /** + * *Form Detail Tagihan + * *Button Submit and draft + */ + const handleSubmitDetailTagihan = (e, { draft, index }) => { + e.preventDefault() + setFieldValue(`detail_tagihan[${index}].status`, draft) + setStatusDraft(draft) + handleSubmit() + } + + /** + * *Change Jenis Belanja + * *Reset form detail tagihan + */ + const changeJenisBelanja = (event, index) => { + setFieldValue(`detail_tagihan[${index}].syarat`, []) + setFieldValue(`detail_tagihan[${index}].jenis_belanja`, event.value) + + /** + * SHOW LIST JENIS KEGIATAN WHERE JENIS_BELANJA_ID + */ + JenisKegiatanList({ jenis_belanja_id: event.value, draw: 0 }) + .then((res) => setOptionJenisKegiatan(res.data)) + .catch((err) => console.log(err)) + } + + /** + * *Dropdown list jenis kegiatan + * *When jenis kegiatan change hit API to get list syarat + */ + const changeJenisKegiatan = (event, index) => { + setFieldValue(`detail_tagihan[${index}].syarat`, []) + setFieldValue(`detail_tagihan[${index}].jenis_kegiatan`, event.value) + PersyaratanSearch({ + jenis_tagihan_id: values.jenis_tagihan_id, + jenis_belanja_id: values.detail_tagihan[index].jenis_belanja, + jenis_kegiatan_id: event.value, + }) + .then((res) => { + if (res.data) { + res.data.map((item, index2) => { + setFieldValue(`detail_tagihan[${index}].syarat[${index2}].syarat_id`, item.syarat_id) + setFieldValue( + `detail_tagihan[${index}].syarat[${index2}].syarat_dokumen`, + item.syarat_dokumen + ) + setFieldValue(`detail_tagihan[${index}].syarat[${index2}].keterangan`, item.keterangan) + }) + } else { + setFieldValue(`detail_tagihan[${index}].syarat`, []) + toast.current.show({ + severity: 'info', + detail: 'Data syarat kosong', + closable: false, + }) + } + }) + .catch(() => { + toast.current.show({ + severity: 'error', + detail: 'Error while get data', + closable: false, + }) + }) + } + + return ( + + + {({ push }) => ( + + + {values.detail_tagihan.length > 0 && + values.detail_tagihan.map((valDetailTagihan, indexDetailTagihan) => { + const customBase64Uploader = async (event) => { + // convert file to base64 encoded + const file = event.files[0] + if (file) { + if (file.type === 'application/pdf') { + const reader = new FileReader() + reader.readAsDataURL(file) + + reader.onloadend = function () { + const base64data = reader.result + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, base64data) + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file_name`, file.name) + } + toast.current.show({ + severity: 'success', + detail: 'File berhasil diupload', + closable: false, + }) + } else { + event.options.clear() + toast.current.show({ + severity: 'error', + detail: 'Invalid format file', + closable: false, + }) + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, null) + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file_name`, null) + } + } + } + return ( + +
+ {/* JENIS BELANJA */} +
+ Jenis Belanja + changeJenisBelanja(e, indexDetailTagihan)} + showClear={ + values.detail_tagihan[indexDetailTagihan] !== undefined ? true : false + } + scrollHeight='200px' + placeholder='Select Jenis Belanja' + /> + {/* {errorFieldMessageDetail(indexDetailTagihan, 'jenis_belanja')} */} +
+ {/* JENIS KEGIATAN */} +
+ Jenis Kegiatan + changeJenisKegiatan(e, indexDetailTagihan)} + showClear={ + values.detail_tagihan[indexDetailTagihan] !== undefined ? true : false + } + scrollHeight='200px' + placeholder='Select Jenis Kegiatan' + filter + /> + {/* {errorFieldMessageDetail(indexDetailTagihan, 'jenis_kegiatan')} */} +
+
+ {/* SYARAT */} +
+
+ Syarat +
+ + + + + + + + + {valDetailTagihan.syarat.map((item, index2) => ( + + + + + ))} + +
+ Persyaratan + + Keterangan +
+ {item.syarat_dokumen} + + {item.keterangan} +
+
+
+
+ Upload Syarat +
+ {valDetailTagihan.file || valDetailTagihan.filepath ? ( +
+
+
+

File Sebelum

+
+ +
+
+ Drag and drop files to here to upload.

+ } + customUpload + uploadHandler={(e) => customBase64Uploader(e)} + onClear={() => + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, false) + } + onRemove={() => + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, false) + } + /> +
+
+ ) : ( + Drag and drop files to here to upload.

+ } + customUpload + uploadHandler={(e) => customBase64Uploader(e)} + onClear={() => + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, false) + } + onRemove={() => + setFieldValue(`detail_tagihan[${indexDetailTagihan}].file`, false) + } + /> + )} +
+
+
+ {/* AKUN */} +
+
+ Akun + `${item.akun_id} - ${item.nama}`} + optionValue='akun_id' + value={parseInt(values.detail_tagihan[indexDetailTagihan].akun_id)} + onChange={handleChange} + showClear={ + values.detail_tagihan[indexDetailTagihan] !== undefined ? true : false + } + scrollHeight='300px' + placeholder='Select Akun' + filter + maxLength={100} + /> + {/* {errorFieldMessageDetail(indexDetailTagihan, 'akun')} */} +
+
+ Keperluan + +
+
+
+ {values.detail_tagihan[indexDetailTagihan].status === true ? ( +
+ + + Tagihan ini hanya bisa didelete, tidak bisa diubah kembali! + +
+ ) : ( + +
+
+ ) + })} +
+
+
+
+ )} +
+
+ ) + }} +
+
+ )} +
+
+ ) +} + +export const getServerSideProps = async (ctx) => { + let token = ctx.req.cookies.token + + // const optionJenisTagihan = await fetchAPI('jenis-tagihan/list', token) + const optionJenisBelanja = await fetchAPI('jenis-belanja/list', token) + + return { + props: { + // optionJenisTagihan, + optionJenisBelanja, + }, + } +} diff --git a/pages/pengajuan-tagihan/force-close/[force].js b/pages/pengajuan-tagihan/force-close/[force].js new file mode 100644 index 0000000..79a02aa --- /dev/null +++ b/pages/pengajuan-tagihan/force-close/[force].js @@ -0,0 +1,710 @@ +import { Belakang } from '@/components/Layouts' +import { Judul, LabelInput } from '@/components/TextCustom' +import { DetailSPPGet, NoSPPListGet } from '@/services/pengajuan-tagihan/integrasi-service' +import { TagihanAddDetail, TagihanGetOne, TagihanSubmit } from '@/services/pengajuan-tagihan/tagihan-service' +import { AkunList } from '@/services/referensi/akun-service' +import { JenisKegiatanList } from '@/services/referensi/jenisKegiatan-service' +import { PersyaratanSearch } from '@/services/referensi/persyaratan-service' +import { Formik } from 'formik' +import { fetchAPI } from 'lib/fetch' +import Head from 'next/head' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BlockUI } from 'primereact/blockui' +import { Button } from 'primereact/button' +import { Card } from 'primereact/card' +import { Dropdown } from 'primereact/dropdown' +import { FileUpload } from 'primereact/fileupload' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function ForceClose({ optionJenisTagihan = null, optionJenisBelanja = null }) { + const router = useRouter() + const [data, setData] = useState([{ no_spp: '', tgl_spp: '', jenis_tagihan: '' }]) + const toast = useRef(null) + const [countJenisTagihan, setCountJenisTagihan] = useState(0) + const [optionJenisKegiatan, setOptionJenisKegiatan] = useState([]) + const [optionNoSpp, setOptionNoSpp] = useState([]) + const [optionAkun, setOptionAkun] = useState([]) + const [statusDraft, setStatusDraft] = useState(false) + const [kirimLoading, setKirimLoading] = useState(false) + + useEffect(() => { + TagihanGetOne({ ref_id: router.query.force }).then((res) => { + if (res.status === 'ok') { + setData(res.data) + DetailSPPGet({ no_spp: res.data[0].no_spp }).then((res) => { + if (res.data.akun.length > 0) { + setOptionAkun(res.data.akun) + } else { + let params = {} + params.draw = 0 + AkunList(params).then((res) => { + setOptionAkun(res.data) + }) + } + }) + } else { + console.log(res.message) + } + }) + + NoSPPListGet() + .then((res) => setOptionNoSpp(res.data)) + .catch((err) => console.log(err)) + }, [router]) + + return ( + + + + Pengajuan Tagihan Ulang + + + Form Pengajuan Tagihan + + { + setCountJenisTagihan(countJenisTagihan + 1) + }} + > + {({ handleSubmit, setFieldValue }) => { + const handleBtnKirim = () => { + Swal.fire({ + title: 'Apakah data diatas sudah benar semua?', + text: 'Tagihan yang sudah dikirim tidak bisa diubah kembali', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, kirim!', + }).then((result) => { + if (result.isConfirmed) { + setKirimLoading(true) + TagihanSubmit({ ref_id: data[0].tagihan_id }) + .then((res) => { + if (res.status == 'ok') { + setKirimLoading(false) + Swal.fire({ + title: 'Success', + text: 'Tagihan berhasil dikirim', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/pengajuan-tagihan') + }) + } else { + setKirimLoading(false) + } + }) + .catch((err) => { + console.log(err) + setKirimLoading(false) + }) + } + }) + } + + const handleTambahTagihan = (e) => { + e.preventDefault() + + Swal.fire({ + title: 'Apakah data yang diinputkan sudah benar benar?', + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, benar!', + cancelButtonText: 'Tidak', + }).then((result) => { + if (result.isConfirmed) { + Swal.fire({ + title: 'Pastikan kembali!', + text: 'Kamu tidak bisa pakai data ini kembali!', + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, benar!', + cancelButtonText: 'Tidak', + }).then((result) => { + if (result.isConfirmed) { + setFieldValue('dataIndex', countJenisTagihan) + handleSubmit() + } + }) + } + }) + } + + return ( + +
+
+ No SPP + +
+
+ Tanggal SPP + +
+
+ Jenis Tagihan + +
+
+ Jenis SPP + +
+
+ Uraian + +
+
+ + {/* DETAIL TAGIHAN */} + { + /** + * *Filter data detail tagihan follow the button kirim + */ + const filterData = data_detail_tagihan.detail_tagihan.find( + (item, i) => i === data_detail_tagihan.dataIndex + ) + + /** + * *Create new format data detail tagihan reference to API + */ + const dataKirim = { + tagihan_id: data[0].tagihan_id, + detail_tagihan: [filterData], + } + + TagihanAddDetail(dataKirim) + .then((res) => { + if (res.status === 'ok') { + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + if (statusDraft) { + router.push('/pengajuan-tagihan') + } + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', true) + } else { + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', false) + } + }) + .catch((err) => { + console.log(err) + toast.current.show({ + severity: 'error', + detail: 'Error saat pembuatan data/file belum diupload', + closable: false, + }) + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + setFieldValue('detail_tagihan[' + data.dataIndex + '].status', false) + }) + }} + validate={(data) => { + let errorsArray = [] + let errors = {} + + if (!data.detail_tagihan[data.dataIndex]) { + errors.jenis_belanja = 'Jenis Belanja is required.' + errors.jenis_kegiatan = 'Jenis Kegiatan is required.' + errors.akun = 'Akun is required.' + } + if ( + data.detail_tagihan[data.dataIndex] && + data.detail_tagihan[data.dataIndex].jenis_belanja === '' + ) { + errors.jenis_belanja = 'Jenis Belanja is required dong.' + } + if (data.detail_tagihan[data.dataIndex] && !data.detail_tagihan[data.dataIndex].jenis_kegiatan) { + errors.jenis_kegiatan = 'Jenis Kegiatan is required.' + } + if (data.detail_tagihan[data.dataIndex] && !data.detail_tagihan[data.dataIndex].akun_id) { + errors.akun = 'Akun is required.' + } + + if (Object.keys(errors).length > 0) { + errorsArray.push({ dataIndex: countJenisTagihan - 1, errors }) + } + + return errorsArray + }} + validateOnChange={false} + > + {({ values, handleChange, handleSubmit, setFieldValue, setValues, errors }) => { + /** + * *Message error for formik detail tagihan + */ + const isFieldValidDetail = (index, field) => + errors[0] && errors[0].dataIndex === index && errors[0].errors[field] + const errorFieldMessageDetail = (index, field) => { + return ( + isFieldValidDetail(index, field) && ( + + {errors[0].errors[field]} + + ) + ) + } + + /** + * *Dropdown list jenis kegiatan + * *When jenis kegiatan change hit API to get list syarat + */ + const changeJenisKegiatan = (event, index) => { + setFieldValue(`detail_tagihan[${index}].syarat`, []) + setFieldValue(`detail_tagihan[${index}].jenis_kegiatan`, event.value) + PersyaratanSearch({ + jenis_tagihan_id: data[0].jenis_tagihan_id, + jenis_belanja_id: values.detail_tagihan[index].jenis_belanja, + jenis_kegiatan_id: event.value, + }) + .then((res) => { + if (res.data) { + res.data.map((item, index2) => { + setFieldValue(`detail_tagihan[${index}].syarat[${index2}].syarat_id`, item.syarat_id) + setFieldValue( + `detail_tagihan[${index}].syarat[${index2}].syarat_dokumen`, + item.syarat_dokumen + ) + setFieldValue(`detail_tagihan[${index}].syarat[${index2}].keterangan`, item.keterangan) + }) + } else { + setFieldValue(`detail_tagihan[${index}].syarat`, []) + toast.current.show({ + severity: 'info', + detail: 'Data syarat kosong', + closable: false, + }) + } + }) + .catch(() => { + toast.current.show({ + severity: 'error', + detail: 'Error while get data', + closable: false, + }) + }) + } + + /** + * *Change Jenis Belanja + * *Reset form detail tagihan + */ + const changeJenisBelanja = (event, index) => { + setFieldValue(`detail_tagihan[${index}].syarat`, []) + setFieldValue(`detail_tagihan[${index}].jenis_belanja`, event.value) + + /** + * SHOW LIST JENIS KEGIATAN WHERE JENIS_BELANJA_ID + */ + JenisKegiatanList({ jenis_belanja_id: event.value, draw: 0 }) + .then((res) => setOptionJenisKegiatan(res.data)) + .catch((err) => console.log(err)) + } + + const headerTemplate = (index) => { + const handleDelete = (index) => { + setValues({ + values, + detail_tagihan: values.detail_tagihan.filter((item, i) => i !== index), + }) + setCountJenisTagihan(countJenisTagihan - 1) + } + + return ( +
+

Tagihan {index + 1}

+
+ ) + } + + /** + * *Form Detail Tagihan + * *Button Submit and draft + */ + const handleSubmitDetailTagihan = (e, { draft, index }) => { + e.preventDefault() + setStatusDraft(draft) + setFieldValue(`detail_tagihan[${index}].draft`, draft) + setFieldValue(`detail_tagihan[${index}].status`, true) + handleSubmit() + } + + const tagihanList = [] + const tagihan = (index) => { + const customBase64Uploader = async (event) => { + // convert file to base64 encoded + const file = event.files[0] + if (file) { + if (file.type === 'application/pdf') { + const reader = new FileReader() + reader.readAsDataURL(file) + + reader.onloadend = function () { + const base64data = reader.result + setFieldValue(`detail_tagihan[${index}].file`, base64data) + setFieldValue(`detail_tagihan[${index}].file_name`, file.name) + } + toast.current.show({ + severity: 'success', + detail: 'File berhasil diupload', + closable: false, + }) + } else { + event.options.clear() + toast.current.show({ + severity: 'error', + detail: 'Invalid format file', + closable: false, + }) + setFieldValue(`detail_tagihan[${index}].file`, null) + setFieldValue(`detail_tagihan[${index}].file_name`, null) + } + } + } + + return ( + + +
+ {/* JENIS BELANJA */} +
+ Jenis Belanja + changeJenisBelanja(e, index)} + showClear={values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='200px' + placeholder='Select Jenis Belanja' + className={`${errorFieldMessageDetail(index, 'jenis_belanja') && 'p-invalid'}`} + /> + {errorFieldMessageDetail(index, 'jenis_belanja')} +
+ {/* JENIS KEGIATAN */} +
+ Jenis Kegiatan + changeJenisKegiatan(e, index)} + showClear={values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='200px' + placeholder='Select Jenis Kegiatan' + filter + className={`${errorFieldMessageDetail(index, 'jenis_kegiatan') && 'p-invalid'}`} + /> + {errorFieldMessageDetail(index, 'jenis_kegiatan')} +
+
+ {/* SYARAT */} +
+
+ Syarat +
+ + + + + + + + + {values.detail_tagihan[index] && + values.detail_tagihan[index].syarat && + values.detail_tagihan[index].syarat.map((item, index2) => ( + + + + + ))} + +
+ Persyaratan + + Keterangan +
+ {item.syarat_dokumen} + + {item.keterangan} +
+
+
+
+ Upload Syarat +
+ Drag and drop files to here to upload.

} + customUpload + uploadHandler={(e) => customBase64Uploader(e)} + onClear={() => setFieldValue(`detail_tagihan[${index}].file`, false)} + onRemove={() => setFieldValue(`detail_tagihan[${index}].file`, false)} + /> +
+
+
+ {/* AKUN */} +
+ {optionNoSpp.length > 0 ? ( +
+ Akun + + {errorFieldMessageDetail(index, 'akun')} +
+ ) : ( +
+ Akun + `${item.akun_id} - ${item.nama}`} + optionValue='akun_id' + value={ + values.detail_tagihan[index] !== undefined + ? values.detail_tagihan[index].akun_id + : setFieldValue(`detail_tagihan[${index}].akun_id`, '') + } + onChange={handleChange} + showClear={values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='300px' + placeholder='Select Akun' + filter + maxLength={100} + className={`${errorFieldMessageDetail(index, 'akun') && 'p-invalid'}`} + /> + {errorFieldMessageDetail(index, 'akun')} +
+ )} + +
+ Keperluan + +
+
+
+ + {/* BUTTON DRAFT, SIMPAN AND MESSAGE */} +
+ {values.detail_tagihan[index] !== undefined && + values.detail_tagihan[index].status === true ? ( +
+ + + Tagihan ini hanya bisa didelete, tidak bisa diubah kembali! + +
+ ) : ( + <> +
+
+ ) + } + for (let index = 0; index < countJenisTagihan; index++) { + tagihanList.push(tagihan(index)) + } + + return ( + +
+ + {tagihanList} + +
+ {countJenisTagihan === 0 ? ( +
+
+ ) : ( +
+
+ )} +
+ ) + }} +
+
+ ) + }} +
+
+
+
+ ) +} + +export const getServerSideProps = async (ctx) => { + let token = ctx.req.cookies.token + + const optionJenisTagihan = await fetchAPI('jenis-tagihan/list', token) + const optionJenisBelanja = await fetchAPI('jenis-belanja/list', token) + + return { + props: { + optionJenisTagihan, + optionJenisBelanja, + }, + } +} diff --git a/pages/pengajuan-tagihan/form.js b/pages/pengajuan-tagihan/form.js new file mode 100644 index 0000000..213ad0c --- /dev/null +++ b/pages/pengajuan-tagihan/form.js @@ -0,0 +1,863 @@ +import { Belakang } from '@/components/Layouts' +import { Judul, LabelInput } from '@/components/TextCustom' +import { DetailSPPGet, NoSPPListGet } from '@/services/pengajuan-tagihan/integrasi-service' +import { TagihanAddDetail, TagihanCreate, TagihanSubmit } from '@/services/pengajuan-tagihan/tagihan-service' +import { AkunList } from '@/services/referensi/akun-service' +import { JenisKegiatanList } from '@/services/referensi/jenisKegiatan-service' +import { PersyaratanSearch } from '@/services/referensi/persyaratan-service' +import { useFormik } from 'formik' +import { fetchAPI } from 'lib/fetch' +import 'moment/locale/id' +import Head from 'next/head' +import { useRouter } from 'next/router' +import { Accordion, AccordionTab } from 'primereact/accordion' +import { BlockUI } from 'primereact/blockui' +import { BreadCrumb } from 'primereact/breadcrumb' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Checkbox } from 'primereact/checkbox' +import { Chips } from 'primereact/chips' +import { Dropdown } from 'primereact/dropdown' +import { FileUpload } from 'primereact/fileupload' +import { InputText } from 'primereact/inputtext' +import { InputTextarea } from 'primereact/inputtextarea' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' +import Swal from 'sweetalert2' + +export default function FormPengajuanTagihan({ optionJenisTagihan = null, optionJenisBelanja = null }) { + const toast = useRef(null) + const router = useRouter() + const [countJenisTagihan, setCountJenisTagihan] = useState(0) + const [optionAkun, setOptionAkun] = useState([]) + const [tagihanID, setTagihanID] = useState('') + const [kirimLoading, setKirimLoading] = useState(false) + const [optionJenisKegiatan, setOptionJenisKegiatan] = useState([]) + const [statusDraft, setStatusDraft] = useState(false) + const [optionNoSpp, setOptionNoSpp] = useState([]) + const [jenisSPP, setJenisSPP] = useState('') + const [uraianSPP, setUraianSPP] = useState('') + const [itsGU, setItsGU] = useState(false) + const [checkedGUGabungan, setCheckedGUGabungan] = useState(false) + + const formik = useFormik({ + initialValues: { + no_spp: '', + tgl_spp: '', + jenis_tagihan: '', + kode_jenis_spp: '', + spp_gabungan: [], + }, + validate: (data) => { + let errors = {} + if (!data.no_spp) errors.no_spp = 'Nomor SPP is required.' + if (!data.tgl_spp) errors.tgl_spp = 'Tanggal SPP is required.' + if (!data.jenis_tagihan) errors.jenis_tagihan = 'Jenis Tagihan is required.' + return errors + }, + onSubmit: (data) => { + const tanggalAsli = data.tgl_spp + + /** + * Check tagihan if > 0 just add tagihan + * else request tagihan id + */ + if (countJenisTagihan > 0) { + setCountJenisTagihan(countJenisTagihan + 1) + } else { + TagihanCreate(data) + .then((res) => { + if (res.status === 'success') { + Object.assign(data, { tgl_spp: tanggalAsli }) + setCountJenisTagihan(countJenisTagihan + 1) + formikDetailTagihan.setFieldValue('tagihan_id', res.data.tagihan_id) + setTagihanID(res.data.tagihan_id) + } else { + Object.assign(data, { tgl_spp: tanggalAsli }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + .catch((err) => { + console.log(err) + toast.current.show({ + severity: 'error', + detail: 'Error while creating data', + closable: false, + }) + }) + } + }, + }) + + // NOMER SPP + useEffect(() => { + NoSPPListGet() + .then((res) => setOptionNoSpp(res.data)) + .catch((err) => console.log(err)) + }, []) + + useEffect(() => { + DetailSPPGet({ no_spp: formik.values.no_spp }).then((res) => { + if (res.data.akun.length > 0) { + setJenisSPP(res.data.jenis_spp) + setUraianSPP(res.data.uraian) + formik.setFieldValue('tgl_spp', new Date(res.data.tanggal_spp)) + setOptionAkun(res.data.akun) + } else { + let params = {} + params.draw = 0 + setJenisSPP('') + setUraianSPP('') + formik.setFieldValue('tgl_spp', new Date()) + AkunList(params).then((res) => { + setOptionAkun(res.data) + }) + } + }) + }, []) + + const formikDetailTagihan = useFormik({ + initialValues: { + tagihan_id: '', + detail_tagihan: [], + dataIndex: 0, //* For select data index + }, + validate: (data) => { + let errorsArray = [] + let errors = {} + + if (!data.detail_tagihan[data.dataIndex]) { + errors.jenis_belanja = 'Jenis Belanja is required.' + errors.jenis_kegiatan = 'Jenis Kegiatan is required.' + errors.akun = 'Akun is required.' + } + if (data.detail_tagihan[data.dataIndex] && data.detail_tagihan[data.dataIndex].jenis_belanja === '') { + errors.jenis_belanja = 'Jenis Belanja is required dong.' + } + if (data.detail_tagihan[data.dataIndex] && !data.detail_tagihan[data.dataIndex].jenis_kegiatan) { + errors.jenis_kegiatan = 'Jenis Kegiatan is required.' + } + if (data.detail_tagihan[data.dataIndex] && !data.detail_tagihan[data.dataIndex].akun_id) { + errors.akun = 'Akun is required.' + } + + if (Object.keys(errors).length > 0) { + errorsArray.push({ dataIndex: countJenisTagihan - 1, errors }) + } + + return errorsArray + }, + onSubmit: (data) => { + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', true) + + /** + * *Filter data detail tagihan follow the button kirim + */ + const filterData = data.detail_tagihan.find((item, i) => i === data.dataIndex) + + /** + * *Create new format data detail tagihan reference to API + */ + const dataKirim = { + tagihan_id: data.tagihan_id, + detail_tagihan: [filterData], + } + + TagihanAddDetail(dataKirim) + .then((res) => { + if (res.status === 'ok') { + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + if (statusDraft) { + router.push('/pengajuan-tagihan') + } + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].status', true) + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + } else { + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].status', false) + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + } + }) + .catch((err) => { + console.log(err) + toast.current.show({ + severity: 'error', + detail: 'Error saat pembuatan data/file belum diupload', + closable: false, + }) + /** + * *Add status to detail tagihan object for check if it is sended or not + */ + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].status', false) + formikDetailTagihan.setFieldValue('detail_tagihan[' + data.dataIndex + '].loading', false) + }) + }, + validateOnChange: false, + }) + + /** + * *Message error for formik + */ + const isFieldValid = (field) => !!(formik.touched[field] && formik.errors[field]) + const errorFieldMessage = (field) => { + return ( + isFieldValid(field) && ( + + {formik.errors[field]} + + ) + ) + } + + /** + * *Message error for formik detail tagihan + */ + const isFieldValidDetail = (index, field) => + formikDetailTagihan.errors[0] && + formikDetailTagihan.errors[0].dataIndex === index && + formikDetailTagihan.errors[0].errors[field] + const errorFieldMessageDetail = (index, field) => { + return ( + isFieldValidDetail(index, field) && ( + + {formikDetailTagihan.errors[0].errors[field]} + + ) + ) + } + + /** + * *Card Detail Tagihan + */ + const headerTemplate = (index) => { + const handleDelete = (index) => { + formikDetailTagihan.setValues({ + ...formikDetailTagihan.values, + detail_tagihan: formikDetailTagihan.values.detail_tagihan.filter((item, i) => i !== index), + }) + setCountJenisTagihan(countJenisTagihan - 1) + } + + return ( +
+

Tagihan {index + 1}

+
+ ) + } + + /** + * *Dropdown list jenis kegiatan + * *When jenis kegiatan change hit API to get list syarat + */ + const changeJenisKegiatan = (event, index) => { + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].syarat`, []) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].jenis_kegiatan`, event.value) + PersyaratanSearch({ + jenis_tagihan_id: formik.values.jenis_tagihan, + jenis_belanja_id: formikDetailTagihan.values.detail_tagihan[index].jenis_belanja, + jenis_kegiatan_id: event.value, + }) + .then((res) => { + if (res.data) { + res.data.map((item, index2) => { + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].syarat[${index2}].syarat_id`, item.syarat_id) + formikDetailTagihan.setFieldValue( + `detail_tagihan[${index}].syarat[${index2}].syarat_dokumen`, + item.syarat_dokumen + ) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].syarat[${index2}].keterangan`, item.keterangan) + }) + } else { + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].syarat`, []) + toast.current.show({ + severity: 'info', + detail: 'Data syarat kosong', + closable: false, + }) + } + }) + .catch(() => { + toast.current.show({ + severity: 'error', + detail: 'Error while get data', + closable: false, + }) + }) + } + + /** + * *Change Jenis Belanja + * *Reset form detail tagihan + */ + const changeJenisBelanja = (event, index) => { + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].syarat`, []) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].jenis_belanja`, event.value) + + /** + * SHOW LIST JENIS KEGIATAN WHERE JENIS_BELANJA_ID + */ + JenisKegiatanList({ jenis_belanja_id: event.value, draw: 0 }) + .then((res) => setOptionJenisKegiatan(res.data)) + .catch((err) => console.log(err)) + } + + /** + * *End of Dropdown list jenis kegiatan + */ + + /** + * *Form Detail Tagihan + * *Button Submit and draft + */ + const handleSubmitDetailTagihan = (e, { draft, index }) => { + e.preventDefault() + setStatusDraft(draft) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].draft`, draft) + formikDetailTagihan.handleSubmit() + } + + const tagihanList = [] + const tagihan = (index) => { + const customBase64Uploader = async (event) => { + // convert file to base64 encoded + const file = event.files[0] + if (file) { + if (file.type === 'application/pdf') { + const reader = new FileReader() + reader.readAsDataURL(file) + + reader.onloadend = function () { + const base64data = reader.result + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].file`, base64data) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].file_name`, file.name) + } + toast.current.show({ + severity: 'success', + detail: 'File berhasil diupload', + closable: false, + }) + } else { + event.options.clear() + toast.current.show({ + severity: 'error', + detail: 'Invalid format file', + closable: false, + }) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].file`, null) + formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].file_name`, null) + } + } + } + + return ( + + +
+ {/* JENIS BELANJA */} +
+ Jenis Belanja + changeJenisBelanja(e, index)} + showClear={formikDetailTagihan.values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='200px' + placeholder='Select Jenis Belanja' + /> + {errorFieldMessageDetail(index, 'jenis_belanja')} +
+ {/* JENIS KEGIATAN */} +
+ Jenis Kegiatan + changeJenisKegiatan(e, index)} + showClear={formikDetailTagihan.values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='200px' + placeholder='Select Jenis Kegiatan' + filter + /> + {errorFieldMessageDetail(index, 'jenis_kegiatan')} +
+
+ {/* SYARAT */} +
+
+ Syarat +
+ + + + + + + + + {formikDetailTagihan.values.detail_tagihan[index] && + formikDetailTagihan.values.detail_tagihan[index].syarat && + formikDetailTagihan.values.detail_tagihan[index].syarat.map((item, index2) => ( + + + + + ))} + +
+ Persyaratan + + Keterangan +
+ {item.syarat_dokumen} + + {item.keterangan} +
+
+
+
+ Upload Syarat +
+ Drag and drop files to here to upload.

} + customUpload + uploadHandler={(e) => customBase64Uploader(e)} + onClear={() => formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].file`, false)} + onRemove={() => formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].file`, false)} + uploadOptions={{ + className: + formikDetailTagihan.values.detail_tagihan[index] !== undefined && + 'file' in formikDetailTagihan.values.detail_tagihan[index] + ? 'p-disabled' + : '', + }} + cancelOptions={{ + className: + formikDetailTagihan.values.detail_tagihan[index] !== undefined && + 'file' in formikDetailTagihan.values.detail_tagihan[index] + ? 'p-disabled' + : '', + }} + /> +
+
+
+ {/* AKUN */} +
+ {optionNoSpp.length > 0 ? ( +
+ Akun + `${item.KODE_AKUN} - ${item.URAIAN}`} + // optionValue='KODE_AKUN' + value={ + formikDetailTagihan.values.detail_tagihan[index] !== undefined + ? formikDetailTagihan.values.detail_tagihan[index].akun_id + : formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].akun_id`, '') + } + onChange={formikDetailTagihan.handleChange} + showClear={formikDetailTagihan.values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='300px' + placeholder='Select Akun' + filter + maxLength={100} + /> + {errorFieldMessageDetail(index, 'akun')} +
+ ) : ( +
+ Akun + `${item.akun_id} - ${item.nama}`} + optionValue='akun_id' + value={ + formikDetailTagihan.values.detail_tagihan[index] !== undefined + ? formikDetailTagihan.values.detail_tagihan[index].akun_id + : formikDetailTagihan.setFieldValue(`detail_tagihan[${index}].akun_id`, '') + } + onChange={formikDetailTagihan.handleChange} + showClear={formikDetailTagihan.values.detail_tagihan[index] !== undefined ? true : false} + scrollHeight='300px' + placeholder='Select Akun' + filter + maxLength={100} + /> + {errorFieldMessageDetail(index, 'akun')} +
+ )} + +
+ Keperluan + +
+
+
+ + {/* BUTTON DRAFT, SIMPAN AND MESSAGE */} +
+ {formikDetailTagihan.values.detail_tagihan[index] !== undefined && + formikDetailTagihan.values.detail_tagihan[index].status === true ? ( +
+ + Tagihan ini hanya bisa didelete, tidak bisa diubah kembali! +
+ ) : ( + <> +
+
+ ) + } + for (let index = 0; index < countJenisTagihan; index++) { + tagihanList.push(tagihan(index)) + } + /** + * *End Detail Tagihan + * *End Card Detail Tagihan + */ + + /** + * *Breadcrumb + */ + const items = [{ label: 'Pengajuan Tagihan', url: '/pengajuan-tagihan' }, { label: 'Form' }] + const home = { icon: 'pi pi-home', url: '/dashboard' } + + const handleTambahTagihan = (e) => { + e.preventDefault() + + Swal.fire({ + title: 'Apakah data yang diinputkan sudah benar benar?', + // text: "Kamu tidak bisa pakai !", + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, benar!', + cancelButtonText: 'Tidak', + }).then((result) => { + if (result.isConfirmed) { + Swal.fire({ + title: 'Pastikan kembali!', + text: 'Kamu tidak bisa pakai data ini kembali!', + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, benar!', + cancelButtonText: 'Tidak', + }).then((result) => { + if (result.isConfirmed) { + formikDetailTagihan.setFieldValue('dataIndex', countJenisTagihan) + formik.handleSubmit() + } + }) + } + }) + } + + const handleBtnKirim = () => { + Swal.fire({ + title: 'Apakah data diatas sudah benar semua?', + text: 'Tagihan yang sudah dikirim tidak bisa diubah kembali', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Ya, kirim!', + }).then((result) => { + if (result.isConfirmed) { + setKirimLoading(true) + TagihanSubmit({ ref_id: tagihanID }) + .then((res) => { + if (res.status == 'ok') { + setKirimLoading(false) + Swal.fire({ + title: 'Success', + text: 'Tagihan berhasil dikirim', + icon: 'success', + timer: 2000, + timerProgressBar: true, + }).then(() => { + router.push('/pengajuan-tagihan') + }) + } else { + setKirimLoading(false) + } + }) + .catch((err) => { + console.log(err) + setKirimLoading(false) + }) + } + }) + } + + return ( + <> + + + Form Pengajuan Tagihan + + + +
+ Form Pengajuan Tagihan + +
+
+
+ No SPP + + {errorFieldMessage('no_spp')} +
+
+ Tanggal SPP + 0 ? true : false} + placeholder='Masukkan tanggal SPP' + icon='pi pi-calendar' + showIcon + /> + {errorFieldMessage('tgl_spp')} +
+
+ Jenis Tagihan + { + formik.setFieldValue('jenis_tagihan', e.value) + e.value === 'REF-a8be274d-bfe3-4875-b334-2e32bc7e1fca' ? setItsGU(true) : setItsGU(false) + }} + showClear={formik.values.jenis_tagihan ? true : false} + scrollHeight='200px' + placeholder='Select Jenis Tagihan' + disabled={countJenisTagihan > 0 ? true : false} + /> + {errorFieldMessage('jenis_tagihan')} +
+
+ Jenis SPP + +
+
+ Uraian + +
+ {itsGU && ( +
+
+ { + setCheckedGUGabungan(e.checked) + !e.checked && formik.setFieldValue('spp_gabungan', []) + }} + /> + GU Gabungan + *tekan enter pernomor spp +
+ {checkedGUGabungan && ( +
+ No SPP Gabungan + +
+ )} +
+ )} +
+
+
+ + {tagihanList} + +
+ {countJenisTagihan === 0 && formikDetailTagihan.values.detail_tagihan[countJenisTagihan] === undefined ? ( +
+
+ ) : ( +
+
+ )} +
+
+ + ) +} + +export const getServerSideProps = async (ctx) => { + let token = ctx.req.cookies.token + + const optionJenisTagihan = await fetchAPI('jenis-tagihan/list', token) + const optionJenisBelanja = await fetchAPI('jenis-belanja/list', token) + + return { + props: { + optionJenisTagihan, + optionJenisBelanja, + }, + } +} diff --git a/pages/pengajuan-tagihan/index.js b/pages/pengajuan-tagihan/index.js new file mode 100644 index 0000000..83e8fdb --- /dev/null +++ b/pages/pengajuan-tagihan/index.js @@ -0,0 +1,296 @@ +import { DatatablePrimeV2 } from '@/components/Datatables-v2' +import { Label } from '@/components/Label' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { TagihanDelete, TagihanList } from '@/services/pengajuan-tagihan/tagihan-service' +import { JenisTagihanList } from '@/services/referensi/jenisTagihan-service' +import { Formik } from 'formik' +import moment from 'moment' +import Head from 'next/head' +import { useRouter } from 'next/router' +import { Button } from 'primereact/button' +import { Calendar } from 'primereact/calendar' +import { Card } from 'primereact/card' +import { Column } from 'primereact/column' +import { DataTable } from 'primereact/datatable' +import { Dropdown } from 'primereact/dropdown' +import { InputText } from 'primereact/inputtext' +import { Toast } from 'primereact/toast' +import React, { useEffect, useRef, useState } from 'react' + +export default function PengajuanTagihan() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogDelete, setDialogDelete] = useState({ visible: false }) + const [expandedRows, setExpandedRows] = useState(null) + const [ddJenisTagihan, setDdJenisTagihan] = useState([]) + const [search, setSearch] = useState({}) + const router = useRouter() + const [loading, setLoading] = useState(false) + const [refresh, setRefresh] = useState(0) + + // DATATABLE + const [sort, setSort] = useState([]) + const [orderDir, setOrderDir] = useState('desc') + const [orderCol, setOrderCol] = useState(2) + const [first, setFirst] = useState(0) + const [page, setPage] = useState(0) + const [length, setLength] = useState(10) + const [totalRecords, setTotalRecords] = useState(0) + + useEffect(() => { + JenisTagihanList().then((res) => setDdJenisTagihan(res.data)) + }, []) + + useEffect(() => { + setLoading(true) + let params = { + draw: page, + start: first, + length: length, + order_col: orderCol, + order_dir: orderDir, + } + + const { no_spp, jenis_tagihan, tanggal_input } = search + params.no_spp = no_spp ? no_spp : '' + params.jenis_tagihan = jenis_tagihan ? jenis_tagihan : '' + params.tanggal_input = tanggal_input ? moment(tanggal_input).format('YYYY-MM-DD') : '' + + TagihanList(params).then((res) => { + setData(res.data) + setLoading(false) + setTotalRecords( + res.recordsFiltered === 1 ? 1 : res.recordsFiltered < 1 ? res.recordsFiltered : res.recordsFiltered + ) + }) + }, [page, first, length, orderCol, orderDir, refresh, search]) + + const editTagihan = (data) => { + if (data.tanggal_kirim === '-' && data.detail.length > 0) { + router.push({ pathname: '/pengajuan-tagihan/draft/[draft]', query: { draft: data.tagihan_id } }) + } else if (data.tanggal_kirim === '-') { + router.push({ pathname: '/pengajuan-tagihan/force-close/[force]', query: { force: data.tagihan_id } }) + } else { + router.push({ pathname: '/pengajuan-tagihan/ditolak/[ditolak]', query: { ditolak: data.tagihan_id } }) + } + } + + const deleteTagihan = () => { + TagihanDelete({ ref_id: dialogDelete.ref_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + const bodyTanggal = (rowData) => { + return rowData.tanggal_spp !== '-' ? ( + moment(rowData.tanggal_spp).format('DD MMMM YYYY') + ) : ( + + ) + } + + const datatableDetail = (data) => { + return ( + + + + + + ) + } + + const expandRow = { + expandedRows: expandedRows, + onRowToggle: (e) => setExpandedRows(e.data), + responsiveLayout: 'scroll', + rowExpansionTemplate: (e) => datatableDetail(e.detail), + dataKey: 'no_spp', + } + + const Pencarian = ( + + { + const tempTanggalInput = values.tanggal_input + values.tanggal_input && + Object.assign(values, { tanggal_input: moment(values.tanggal_input).format('YYYY-MM-D') }) + setSearch(values) + values.tanggal_input = tempTanggalInput + }} + > + {({ values, handleChange, handleSubmit }) => { + return ( +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ ) + }} +
+
+ ) + + const bodyStatus = (rowData) => { + let status + if (rowData.tahapan === 6) { + status = + } else if (rowData.penolakan === true || rowData.pernah_ditolak === true) { + status = + } else { + status = '-' + } + return status + } + + const allowExpansion = (rowData) => { + return rowData.detail.length > 0 + } + + return ( + <> + + + Pengajuan Tagihan + + + Pengajuan Tagihan + {Pencarian} +
+
+ { + setSort(e.multiSortMeta) + if (e.multiSortMeta.length > 0) { + switch (e.multiSortMeta[0].field) { + case 'no_spp': + setOrderCol(0) + break + + case 'nama_tagihan': + setOrderCol(1) + break + + case 'tanggal': + setOrderCol(2) + break + } + + switch (e.multiSortMeta[0].order) { + case -1: + setOrderDir('desc') + break + + case 1: + setOrderDir('asc') + break + } + } + }} + setFirst={setFirst} + setLength={setLength} + setPage={setPage} + sort={sort} + totalRecords={totalRecords} + page={page} + expandRow={expandRow} + > + + + + + + + +
+ + ) +} diff --git a/pages/peraturan/index.js b/pages/peraturan/index.js new file mode 100644 index 0000000..641e497 --- /dev/null +++ b/pages/peraturan/index.js @@ -0,0 +1,20 @@ +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import Head from 'next/head' +import Image from 'next/image' + +export default function Peraturan() { + return ( + <> + + Peraturan + + + Peraturan +
+ coming-soon +
+
+ + ) +} diff --git a/pages/referensi/akun/index.js b/pages/referensi/akun/index.js new file mode 100644 index 0000000..4afd015 --- /dev/null +++ b/pages/referensi/akun/index.js @@ -0,0 +1,122 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormAkun from '@/components/Form/Akun' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { AkunDelete, AkunGetOne, AkunList } from '@/services/referensi/akun-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function Akun() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dataDrawPrev, setDataDrawPrev] = useState([]) + const [dataDrawNext, setDataDrawNext] = useState([]) + + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + const [draw, setDraw] = useState(1) + + useEffect(() => { + let params = {} + params.draw = draw + search !== null && search !== '' ? (params.search = search) : '' + AkunList(params).then((res) => setData(res.data)) + + if (draw > 1) { + params.draw = draw > 1 ? draw - 1 : draw + AkunList(params).then((res) => setDataDrawPrev(res.data)) + } + + params.draw = draw + 1 + AkunList(params).then((res) => setDataDrawNext(res.data)) + }, [refresh, search, draw]) + + const editAkun = (data) => { + AkunGetOne({ akun_id: data.akun_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + const deleteAkun = () => { + AkunDelete({ ref_id: dialogDelete.ref_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + return ( + <> + + + Akun + + + Akun + + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/referensi/jenis-belanja/index.js b/pages/referensi/jenis-belanja/index.js new file mode 100644 index 0000000..49b6d04 --- /dev/null +++ b/pages/referensi/jenis-belanja/index.js @@ -0,0 +1,108 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormJenisBelanja from '@/components/Form/JenisBelanja' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { JenisBelanjaDelete, JenisBelanjaGetOne, JenisBelanjaList } from '@/services/referensi/jenisBelanja-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function JenisBelanja() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + + useEffect(() => { + let params = {} + search !== null && search !== '' ? (params.search = search) : '' + JenisBelanjaList(params).then((res) => setData(res.data)) + }, [refresh, search]) + + const editJenisBelanja = (data) => { + JenisBelanjaGetOne({ ref_id: data.jenis_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteJenisBelanja = () => { + JenisBelanjaDelete({ ref_id: dialogDelete.ref_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Jenis Belanja + + + Jenis Belanja + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/referensi/jenis-kegiatan/index.js b/pages/referensi/jenis-kegiatan/index.js new file mode 100644 index 0000000..4ef31b8 --- /dev/null +++ b/pages/referensi/jenis-kegiatan/index.js @@ -0,0 +1,129 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormJenisKegiatan from '@/components/Form/JenisKegiatan' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { JenisKegiatanDelete, JenisKegiatanGetOne, JenisKegiatanList } from '@/services/referensi/jenisKegiatan-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function JenisKegiatan() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + const [dataDrawPrev, setDataDrawPrev] = useState([]) + const [dataDrawNext, setDataDrawNext] = useState([]) + const [draw, setDraw] = useState(1) + + useEffect(() => { + let params = {} + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + params.draw = draw + JenisKegiatanList(params).then((res) => setData(res.data)) + + if (draw > 1) { + params.draw = draw > 1 ? draw - 1 : draw + JenisKegiatanList(params).then((res) => setDataDrawPrev(res.data)) + } + params.draw = draw + 1 + JenisKegiatanList(params).then((res) => setDataDrawNext(res.data)) + }, [search, refresh, draw]) + + const editJenisKegiatan = (data) => { + JenisKegiatanGetOne({ ref_id: data.jenis_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteJenisKegiatan = () => { + JenisKegiatanDelete({ ref_id: dialogDelete.ref_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Jenis Kegiatan + + + Jenis Kegiatan + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/referensi/jenis-tagihan/index.js b/pages/referensi/jenis-tagihan/index.js new file mode 100644 index 0000000..a745fbe --- /dev/null +++ b/pages/referensi/jenis-tagihan/index.js @@ -0,0 +1,114 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormJenisTagihan from '@/components/Form/JenisTagihan' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { JenisTagihanDelete, JenisTagihanGetOne, JenisTagihanList } from '@/services/referensi/jenisTagihan-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function JenisTagihan() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + + useEffect(() => { + let params = {} + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + JenisTagihanList(params).then((res) => setData(res.data)) + }, [refresh, search]) + + const editJenisTagihan = (data) => { + JenisTagihanGetOne({ ref_id: data.jenis_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteJenisTagihan = () => { + JenisTagihanDelete({ ref_id: dialogDelete.ref_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Jenis Tagihan + + + Jenis Tagihan + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/referensi/persyaratan/index.js b/pages/referensi/persyaratan/index.js new file mode 100644 index 0000000..44772dc --- /dev/null +++ b/pages/referensi/persyaratan/index.js @@ -0,0 +1,231 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormPersyaratan from '@/components/Form/Persyaratan' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { PersyaratanDelete, PersyaratanGetOne, PersyaratanList } from '@/services/referensi/persyaratan-service' +import { Form, Formik } from 'formik' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Dialog } from 'primereact/dialog' +import { Dropdown } from 'primereact/dropdown' +// import { Dropdown } from 'primereact/dropdown' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function Persyaratan() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + const [dialogUpload, setDialogUpload] = useState(false) + const [dataDrawPrev, setDataDrawPrev] = useState([]) + const [dataDrawNext, setDataDrawNext] = useState([]) + const [draw, setDraw] = useState(1) + + useEffect(() => { + let params = {} + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + params.draw = draw + PersyaratanList(params).then((res) => setData(res.data)) + + if (draw > 1) { + params.draw = draw > 1 ? draw - 1 : draw + PersyaratanList(params).then((res) => setDataDrawPrev(res.data)) + } + params.draw = draw + 1 + PersyaratanList(params).then((res) => setDataDrawNext(res.data)) + }, [search, refresh, draw]) + + const editPersyaratan = (data) => { + PersyaratanGetOne({ syarat_id: data.syarat_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deletePersyaratan = () => { + PersyaratanDelete({ syarat_id: dialogDelete.syarat_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Persyaratan + + + Persyaratan + + + + + + + + + + + {dialogDelete.visible === true && ( + + )} + + setDialogUpload(false)} + > + { + console.log(values) + }} + > + {({ values, handleChange, setFieldValue }) => { + const onBrowseFile = async (event) => { + const files = event.target.files + if (files) { + if (files[0].type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') { + setFieldValue('fileupload', files[0].name) + } else { + event.target.value = '' + toast.current.show({ + severity: 'error', + detail: 'Invalid format file', + closable: false, + }) + } + } + } + return ( +
+
+
+ + {values.fileupload ? ( +
+ onBrowseFile(e)} + accept='.xlsx' + style={{ display: 'none' }} + /> + +
+ ) : ( + <> + onBrowseFile(e)} accept='.xlsx' /> + + )} +
+
+ + +
+
+ + +
+
+ + ) + }} +
+
+ + ) +} diff --git a/pages/referensi/unit-kerja/index.js b/pages/referensi/unit-kerja/index.js new file mode 100644 index 0000000..8830eec --- /dev/null +++ b/pages/referensi/unit-kerja/index.js @@ -0,0 +1,112 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormUnitKerja from '@/components/Form/UnitKerja' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { UnitKerjaDelete, UnitKerjaGetOne, UnitKerjaList } from '@/services/referensi/unitKerja-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function UnitKerja() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + + useEffect(() => { + let params = { draw: 0 } + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + UnitKerjaList(params).then((res) => setData(res.data)) + }, [search, refresh]) + + const editUnitKerja = (data) => { + UnitKerjaGetOne({ ref_id: data.ref_id }).then((res) => { + if (res.status === 'ok') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteUnitKerja = () => { + UnitKerjaDelete({ ref_id: dialogDelete.ref_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Unit Kerja + + + Unit Kerja + + + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pages/referensi/verifikator/index.js b/pages/referensi/verifikator/index.js new file mode 100644 index 0000000..7ff14ef --- /dev/null +++ b/pages/referensi/verifikator/index.js @@ -0,0 +1,120 @@ +import { DatatablePrime } from '@/components/Datatables' +import { DialogDelete } from '@/components/Dialog' +import FormVerifikator from '@/components/Form/Verifikator' +import { Belakang } from '@/components/Layouts' +import { Judul } from '@/components/TextCustom' +import { VerifikatorDelete, VerifikatorGetOne, VerifikatorList } from '@/services/referensi/verifikator-service' +import Head from 'next/head' +import { Button } from 'primereact/button' +import { Column } from 'primereact/column' +import { Toast } from 'primereact/toast' +import { useEffect, useRef, useState } from 'react' + +export default function Verifikator() { + const toast = useRef(null) + const [data, setData] = useState([]) + const [dialogForm, setDialogForm] = useState(false) + const [dataEdit, setDataEdit] = useState([]) + const [refresh, setRefresh] = useState(0) + const [search, setSearch] = useState('') + const [dialogDelete, setDialogDelete] = useState({}) + + useEffect(() => { + let params = {} + + if (search !== null && search !== '') { + params.search = search + } else { + params.search = '' + } + + VerifikatorList(params) + .then((res) => { + if (res.status === 'success') { + setData(res.data) + } else { + console.log('Verifikator list error', res) + } + }) + .catch((err) => console.log(err)) + }, [search, refresh]) + + const editVerifikator = (data) => { + VerifikatorGetOne({ user_id: data.user_id }).then((res) => { + if (res.status === 'success') { + setDataEdit(res.data) + setDialogForm(true) + } else { + console.log(res.message) + } + }) + } + + const deleteVerifikator = () => { + VerifikatorDelete({ user_id: dialogDelete.user_id }).then((res) => { + if (res.status === 'success') { + setRefresh(Math.random) + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'success', + detail: res.message, + closable: false, + }) + } else { + setDialogDelete({ visible: false }) + toast.current.show({ + severity: 'error', + detail: res.message, + closable: false, + }) + } + }) + } + + const actionBodyTemplate = (rowData) => { + return ( +
+
+ ) + } + + return ( + <> + + + Verifikator + + + Verifikator + + + + + + + + + {dialogDelete.visible === true && ( + + )} + + ) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..bd2b4a2 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3616 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@reduxjs/toolkit': + specifier: ^1.8.4 + version: 1.9.7(react-redux@8.1.3)(react@18.2.0) + apexcharts: + specifier: ^3.35.3 + version: 3.49.1 + axios: + specifier: ^0.27.2 + version: 0.27.2 + formik: + specifier: ^2.2.9 + version: 2.4.6(react@18.2.0) + jwt-decode: + specifier: ^3.1.2 + version: 3.1.2 + moment: + specifier: ^2.29.4 + version: 2.30.1 + next: + specifier: 12.2.2 + version: 12.2.2(react-dom@18.2.0)(react@18.2.0) + nookies: + specifier: ^2.5.2 + version: 2.5.2 + primeicons: + specifier: ^5.0.0 + version: 5.0.0 + primereact: + specifier: ^8.2.0 + version: 8.7.3(primeicons@5.0.0)(react-dom@18.2.0)(react@18.2.0) + react: + specifier: 18.2.0 + version: 18.2.0 + react-apexcharts: + specifier: ^1.4.0 + version: 1.4.1(apexcharts@3.49.1)(react@18.2.0) + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-google-recaptcha: + specifier: ^2.1.0 + version: 2.1.0(react@18.2.0) + react-icons: + specifier: ^4.11.0 + version: 4.12.0(react@18.2.0) + react-redux: + specifier: ^8.0.2 + version: 8.1.3(react-dom@18.2.0)(react@18.2.0)(redux@4.2.1) + react-tsparticles: + specifier: ^2.1.3 + version: 2.12.2(react@18.2.0) + redux: + specifier: ^4.2.0 + version: 4.2.1 + sweetalert2: + specifier: ^11.4.33 + version: 11.11.0 + tsparticles: + specifier: ^2.1.3 + version: 2.12.0 + yup: + specifier: ^0.32.11 + version: 0.32.11 + +devDependencies: + autoprefixer: + specifier: ^10.4.7 + version: 10.4.19(postcss@8.4.38) + eslint: + specifier: 8.19.0 + version: 8.19.0 + eslint-config-next: + specifier: 12.2.2 + version: 12.2.2(eslint@8.19.0)(typescript@5.4.5) + postcss: + specifier: ^8.4.14 + version: 8.4.38 + tailwindcss: + specifier: ^3.1.6 + version: 3.4.3 + +packages: + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@eslint/eslintrc@1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array@0.9.5: + resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@next/env@12.2.2: + resolution: {integrity: sha512-BqDwE4gDl1F608TpnNxZqrCn6g48MBjvmWFEmeX5wEXDXh3IkAOw6ASKUgjT8H4OUePYFqghDFUss5ZhnbOUjw==} + dev: false + + /@next/eslint-plugin-next@12.2.2: + resolution: {integrity: sha512-XOi0WzJhGH3Lk51SkSu9eZxF+IY1ZZhWcJTIGBycAbWU877IQa6+6KxMATWCOs7c+bmp6Sd8KywXJaDRxzu0JA==} + dependencies: + glob: 7.1.7 + dev: true + + /@next/swc-android-arm-eabi@12.2.2: + resolution: {integrity: sha512-VHjuCHeq9qCprUZbsRxxM/VqSW8MmsUtqB5nEpGEgUNnQi/BTm/2aK8tl7R4D0twGKRh6g1AAeFuWtXzk9Z/vQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-android-arm64@12.2.2: + resolution: {integrity: sha512-v5EYzXUOSv0r9mO/2PX6mOcF53k8ndlu9yeFHVAWW1Dhw2jaJcvTRcCAwYYN8Q3tDg0nH3NbEltJDLKmcJOuVA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-arm64@12.2.2: + resolution: {integrity: sha512-JCoGySHKGt+YBk7xRTFGx1QjrnCcwYxIo3yGepcOq64MoiocTM3yllQWeOAJU2/k9MH0+B5E9WUSme4rOCBbpA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@12.2.2: + resolution: {integrity: sha512-dztDtvfkhUqiqpXvrWVccfGhLe44yQ5tQ7B4tBfnsOR6vxzI9DNPHTlEOgRN9qDqTAcFyPxvg86mn4l8bB9Jcw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-freebsd-x64@12.2.2: + resolution: {integrity: sha512-JUnXB+2xfxqsAvhFLPJpU1NeyDsvJrKoOjpV7g3Dxbno2Riu4tDKn3kKF886yleAuD/1qNTUCpqubTvbbT2VoA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm-gnueabihf@12.2.2: + resolution: {integrity: sha512-XeYC/qqPLz58R4pjkb+x8sUUxuGLnx9QruC7/IGkK68yW4G17PHwKI/1njFYVfXTXUukpWjcfBuauWwxp9ke7Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@12.2.2: + resolution: {integrity: sha512-d6jT8xgfKYFkzR7J0OHo2D+kFvY/6W8qEo6/hmdrTt6AKAqxs//rbbcdoyn3YQq1x6FVUUd39zzpezZntg9Naw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@12.2.2: + resolution: {integrity: sha512-rIZRFxI9N/502auJT1i7coas0HTHUM+HaXMyJiCpnY8Rimbo0495ir24tzzHo3nQqJwcflcPTwEh/DV17sdv9A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@12.2.2: + resolution: {integrity: sha512-ir1vNadlUDj7eQk15AvfhG5BjVizuCHks9uZwBfUgT5jyeDCeRvaDCo1+Q6+0CLOAnYDR/nqSCvBgzG2UdFh9A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@12.2.2: + resolution: {integrity: sha512-bte5n2GzLN3O8JdSFYWZzMgEgDHZmRz5wiispiiDssj4ik3l8E7wq/czNi8RmIF+ioj2sYVokUNa/ekLzrESWw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@12.2.2: + resolution: {integrity: sha512-ZUGCmcDmdPVSAlwJ/aD+1F9lYW8vttseiv4n2+VCDv5JloxiX9aY32kYZaJJO7hmTLNrprvXkb4OvNuHdN22Jg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@12.2.2: + resolution: {integrity: sha512-v7ykeEDbr9eXiblGSZiEYYkWoig6sRhAbLKHUHQtk8vEWWVEqeXFcxmw6LRrKu5rCN1DY357UlYWToCGPQPCRA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@12.2.2: + resolution: {integrity: sha512-2D2iinWUL6xx8D9LYVZ5qi7FP6uLAoWymt8m8aaG2Ld/Ka8/k723fJfiklfuAcwOxfufPJI+nRbT5VcgHGzHAQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@reduxjs/toolkit@1.9.7(react-redux@8.1.3)(react@18.2.0): + resolution: {integrity: sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.0.2 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + dependencies: + immer: 9.0.21 + react: 18.2.0 + react-redux: 8.1.3(react-dom@18.2.0)(react@18.2.0)(redux@4.2.1) + redux: 4.2.1 + redux-thunk: 2.4.2(redux@4.2.1) + reselect: 4.1.8 + dev: false + + /@rushstack/eslint-patch@1.10.2: + resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} + dev: true + + /@swc/helpers@0.4.2: + resolution: {integrity: sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@types/hoist-non-react-statics@3.3.5: + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + dependencies: + '@types/react': 18.3.2 + hoist-non-react-statics: 3.3.2 + dev: false + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash@4.17.1: + resolution: {integrity: sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==} + dev: false + + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + dev: false + + /@types/react-transition-group@4.4.10: + resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} + dependencies: + '@types/react': 18.3.2 + dev: false + + /@types/react@18.3.2: + resolution: {integrity: sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==} + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + dev: false + + /@types/use-sync-external-store@0.0.3: + resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + dev: false + + /@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.19.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.2 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@yr/monotone-cubic-spline@1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /apexcharts@3.49.1: + resolution: {integrity: sha512-MqGtlq/KQuO8j0BBsUJYlRG8VBctKwYdwuBtajHgHTmSgUU3Oai+8oYN/rKCXwXzrUlYA+GiMgotAIbXY2BCGw==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001618 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.1 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + + /axios@0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + transitivePeerDependencies: + - debug + dev: false + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001618 + electron-to-chromium: 1.4.767 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + dev: true + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite@1.0.30001618: + resolution: {integrity: sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==} + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge@2.2.1: + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} + dev: false + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.24.5 + csstype: 3.1.3 + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.767: + resolution: {integrity: sha512-nzzHfmQqBss7CE3apQHkHjXW77+8w3ubGCIoEijKCJebPufREaFETgGXWTkh32t259F3Kcq+R8MZdFdOJROgYw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-next@12.2.2(eslint@8.19.0)(typescript@5.4.5): + resolution: {integrity: sha512-oJhWBLC4wDYYUFv/5APbjHUFd0QRFCojMdj/QnMoOEktmeTvwnnoA8F8uaXs0fQgsaTK0tbUxBRv9/Y4/rpxOA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 12.2.2 + '@rushstack/eslint-patch': 1.10.2 + '@typescript-eslint/parser': 5.62.0(eslint@8.19.0)(typescript@5.4.5) + eslint: 8.19.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.19.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.19.0) + eslint-plugin-react: 7.34.1(eslint@8.19.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.19.0) + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.19.0): + resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + eslint: 8.19.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0) + glob: 7.2.3 + is-glob: 4.0.3 + resolve: 1.22.8 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.19.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.19.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.19.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.19.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.19.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.19.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.24.5 + aria-query: 5.3.0 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.19 + eslint: 8.19.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + dev: true + + /eslint-plugin-react-hooks@4.6.2(eslint@8.19.0): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.19.0 + dev: true + + /eslint-plugin-react@7.34.1(eslint@8.19.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 8.19.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils@3.0.0(eslint@8.19.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.19.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.19.0: + resolution: {integrity: sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.9.5 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-utils: 3.0.0(eslint@8.19.0) + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /formik@2.4.6(react@18.2.0): + resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} + peerDependencies: + react: '>=16.8.0' + dependencies: + '@types/hoist-non-react-statics': 3.3.5 + deepmerge: 2.2.1 + hoist-non-react-statics: 3.3.2 + lodash: 4.17.21 + lodash-es: 4.17.21 + react: 18.2.0 + react-fast-compare: 2.0.4 + tiny-warning: 1.0.3 + tslib: 2.6.2 + dev: false + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@10.3.15: + resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.1.1 + path-scurry: 1.11.1 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + dev: true + + /jwt-decode@3.1.2: + resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@7.1.1: + resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoclone@0.2.1: + resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==} + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /next@12.2.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-zAYFY45aBry/PlKONqtlloRFqU/We3zWYdn2NoGvDZkoYUYQSJC8WMcalS5C19MxbCZLUVCX7D7a6gTGgl2yLg==} + engines: {node: '>=12.22.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 12.2.2 + '@swc/helpers': 0.4.2 + caniuse-lite: 1.0.30001618 + postcss: 8.4.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.0.2(react@18.2.0) + use-sync-external-store: 1.1.0(react@18.2.0) + optionalDependencies: + '@next/swc-android-arm-eabi': 12.2.2 + '@next/swc-android-arm64': 12.2.2 + '@next/swc-darwin-arm64': 12.2.2 + '@next/swc-darwin-x64': 12.2.2 + '@next/swc-freebsd-x64': 12.2.2 + '@next/swc-linux-arm-gnueabihf': 12.2.2 + '@next/swc-linux-arm64-gnu': 12.2.2 + '@next/swc-linux-arm64-musl': 12.2.2 + '@next/swc-linux-x64-gnu': 12.2.2 + '@next/swc-linux-x64-musl': 12.2.2 + '@next/swc-win32-arm64-msvc': 12.2.2 + '@next/swc-win32-ia32-msvc': 12.2.2 + '@next/swc-win32-x64-msvc': 12.2.2 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /nookies@2.5.2: + resolution: {integrity: sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA==} + dependencies: + cookie: 0.4.2 + set-cookie-parser: 2.6.0 + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true + + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.1 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss-import@15.1.0(postcss@8.4.38): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.38): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.38 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.2 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.38): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: true + + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + dev: true + + /postcss@8.4.5: + resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + dev: false + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /primeicons@5.0.0: + resolution: {integrity: sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==} + dev: false + + /primereact@8.7.3(primeicons@5.0.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BjlIOOsVcUqX9edn7HewN/U28aUqREOvPP3fnpk7X6S7k5JTM570Dm7Z/TEPH1x/Mko1NL6iDaYWnkjKiBrtPQ==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + primeicons: ^5.0.0 || ^6.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react-transition-group': 4.4.10 + primeicons: 5.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + dev: false + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + /property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-apexcharts@1.4.1(apexcharts@3.49.1)(react@18.2.0): + resolution: {integrity: sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==} + peerDependencies: + apexcharts: ^3.41.0 + react: '>=0.13' + dependencies: + apexcharts: 3.49.1 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /react-async-script@1.2.0(react@18.2.0): + resolution: {integrity: sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==} + peerDependencies: + react: '>=16.4.1' + dependencies: + hoist-non-react-statics: 3.3.2 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.2 + dev: false + + /react-fast-compare@2.0.4: + resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} + dev: false + + /react-google-recaptcha@2.1.0(react@18.2.0): + resolution: {integrity: sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ==} + peerDependencies: + react: '>=16.4.1' + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + react-async-script: 1.2.0(react@18.2.0) + dev: false + + /react-icons@4.12.0(react@18.2.0): + resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: false + + /react-redux@8.1.3(react-dom@18.2.0)(react@18.2.0)(redux@4.2.1): + resolution: {integrity: sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==} + peerDependencies: + '@types/react': ^16.8 || ^17.0 || ^18.0 + '@types/react-dom': ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + react-native: '>=0.59' + redux: ^4 || ^5.0.0-beta.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + react-dom: + optional: true + react-native: + optional: true + redux: + optional: true + dependencies: + '@babel/runtime': 7.24.5 + '@types/hoist-non-react-statics': 3.3.5 + '@types/use-sync-external-store': 0.0.3 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.3.1 + redux: 4.2.1 + use-sync-external-store: 1.2.2(react@18.2.0) + dev: false + + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.24.5 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /react-tsparticles@2.12.2(react@18.2.0): + resolution: {integrity: sha512-/nrEbyL8UROXKIMXe+f+LZN2ckvkwV2Qa+GGe/H26oEIc+wq/ybSG9REDwQiSt2OaDQGu0MwmA4BKmkL6wAWcA==} + deprecated: '@tsparticles/react is the new version, please use that' + requiresBuild: true + peerDependencies: + react: '>=16' + dependencies: + react: 18.2.0 + tsparticles-engine: 2.12.0 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /redux-thunk@2.4.2(redux@4.2.1): + resolution: {integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==} + peerDependencies: + redux: ^4 + dependencies: + redux: 4.2.1 + dev: false + + /redux@4.2.1: + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} + dependencies: + '@babel/runtime': 7.24.5 + dev: false + + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.3 + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /reselect@4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + dev: false + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: true + + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /styled-jsx@5.0.2(react@18.2.0): + resolution: {integrity: sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + react: 18.2.0 + dev: false + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.3.15 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svg.draggable.js@2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.easing.js@2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.filter.js@2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.js@2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false + + /svg.pathmorphing.js@0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.resize.js@1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + dev: false + + /svg.select.js@2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.select.js@3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /sweetalert2@11.11.0: + resolution: {integrity: sha512-wKCTtoE6lQVDKaJ5FFq+znk/YykJmJlD8RnLZps8C7DyivctCoRlVeeOwnKfgwKS+QJYon7s++3dmNi3/am1tw==} + dev: false + + /tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.0.16 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + dev: false + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /tsparticles-basic@2.12.0: + resolution: {integrity: sha512-pN6FBpL0UsIUXjYbiui5+IVsbIItbQGOlwyGV55g6IYJBgdTNXgFX0HRYZGE9ZZ9psEXqzqwLM37zvWnb5AG9g==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + tsparticles-move-base: 2.12.0 + tsparticles-shape-circle: 2.12.0 + tsparticles-updater-color: 2.12.0 + tsparticles-updater-opacity: 2.12.0 + tsparticles-updater-out-modes: 2.12.0 + tsparticles-updater-size: 2.12.0 + dev: false + + /tsparticles-engine@2.12.0: + resolution: {integrity: sha512-ZjDIYex6jBJ4iMc9+z0uPe7SgBnmb6l+EJm83MPIsOny9lPpetMsnw/8YJ3xdxn8hV+S3myTpTN1CkOVmFv0QQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + requiresBuild: true + dev: false + + /tsparticles-interaction-external-attract@2.12.0: + resolution: {integrity: sha512-0roC6D1QkFqMVomcMlTaBrNVjVOpyNzxIUsjMfshk2wUZDAvTNTuWQdUpmsLS4EeSTDN3rzlGNnIuuUQqyBU5w==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-bounce@2.12.0: + resolution: {integrity: sha512-MMcqKLnQMJ30hubORtdq+4QMldQ3+gJu0bBYsQr9BsThsh8/V0xHc1iokZobqHYVP5tV77mbFBD8Z7iSCf0TMQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-bubble@2.12.0: + resolution: {integrity: sha512-5kImCSCZlLNccXOHPIi2Yn+rQWTX3sEa/xCHwXW19uHxtILVJlnAweayc8+Zgmb7mo0DscBtWVFXHPxrVPFDUA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-connect@2.12.0: + resolution: {integrity: sha512-ymzmFPXz6AaA1LAOL5Ihuy7YSQEW8MzuSJzbd0ES13U8XjiU3HlFqlH6WGT1KvXNw6WYoqrZt0T3fKxBW3/C3A==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-grab@2.12.0: + resolution: {integrity: sha512-iQF/A947hSfDNqAjr49PRjyQaeRkYgTYpfNmAf+EfME8RsbapeP/BSyF6mTy0UAFC0hK2A2Hwgw72eT78yhXeQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-pause@2.12.0: + resolution: {integrity: sha512-4SUikNpsFROHnRqniL+uX2E388YTtfRWqqqZxRhY0BrijH4z04Aii3YqaGhJxfrwDKkTQlIoM2GbFT552QZWjw==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-push@2.12.0: + resolution: {integrity: sha512-kqs3V0dgDKgMoeqbdg+cKH2F+DTrvfCMrPF1MCCUpBCqBiH+TRQpJNNC86EZYHfNUeeLuIM3ttWwIkk2hllR/Q==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-remove@2.12.0: + resolution: {integrity: sha512-2eNIrv4m1WB2VfSVj46V2L/J9hNEZnMgFc+A+qmy66C8KzDN1G8aJUAf1inW8JVc0lmo5+WKhzex4X0ZSMghBg==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-repulse@2.12.0: + resolution: {integrity: sha512-rSzdnmgljeBCj5FPp4AtGxOG9TmTsK3AjQW0vlyd1aG2O5kSqFjR+FuT7rfdSk9LEJGH5SjPFE6cwbuy51uEWA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-slow@2.12.0: + resolution: {integrity: sha512-2IKdMC3om7DttqyroMtO//xNdF0NvJL/Lx7LDo08VpfTgJJozxU+JAUT8XVT7urxhaDzbxSSIROc79epESROtA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-external-trail@2.12.0: + resolution: {integrity: sha512-LKSapU5sPTaZqYx+y5VJClj0prlV7bswplSFQaIW1raXkvsk45qir2AVcpP5JUhZSFSG+SwsHr+qCgXhNeN1KA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-particles-attract@2.12.0: + resolution: {integrity: sha512-Hl8qwuwF9aLq3FOkAW+Zomu7Gb8IKs6Y3tFQUQScDmrrSCaeRt2EGklAiwgxwgntmqzL7hbMWNx06CHHcUQKdQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-particles-collisions@2.12.0: + resolution: {integrity: sha512-Se9nPWlyPxdsnHgR6ap4YUImAu3W5MeGKJaQMiQpm1vW8lSMOUejI1n1ioIaQth9weKGKnD9rvcNn76sFlzGBA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-interaction-particles-links@2.12.0: + resolution: {integrity: sha512-e7I8gRs4rmKfcsHONXMkJnymRWpxHmeaJIo4g2NaDRjIgeb2AcJSWKWZvrsoLnm7zvaf/cMQlbN6vQwCixYq3A==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-move-base@2.12.0: + resolution: {integrity: sha512-oSogCDougIImq+iRtIFJD0YFArlorSi8IW3HD2gO3USkH+aNn3ZqZNTqp321uB08K34HpS263DTbhLHa/D6BWw==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-move-parallax@2.12.0: + resolution: {integrity: sha512-58CYXaX8Ih5rNtYhpnH0YwU4Ks7gVZMREGUJtmjhuYN+OFr9FVdF3oDIJ9N6gY5a5AnAKz8f5j5qpucoPRcYrQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-particles.js@2.12.0: + resolution: {integrity: sha512-LyOuvYdhbUScmA4iDgV3LxA0HzY1DnOwQUy3NrPYO393S2YwdDjdwMod6Btq7EBUjg9FVIh+sZRizgV5elV2dg==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-plugin-absorbers@2.12.0: + resolution: {integrity: sha512-2CkPreaXHrE5VzFlxUKLeRB5t66ff+3jwLJoDFgQcp+R4HOEITo0bBZv2DagGP0QZdYN4grpnQzRBVdB4d1rWA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-plugin-easing-quad@2.12.0: + resolution: {integrity: sha512-2mNqez5pydDewMIUWaUhY5cNQ80IUOYiujwG6qx9spTq1D6EEPLbRNAEL8/ecPdn2j1Um3iWSx6lo340rPkv4Q==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-plugin-emitters@2.12.0: + resolution: {integrity: sha512-fbskYnaXWXivBh9KFReVCfqHdhbNQSK2T+fq2qcGEWpwtDdgujcaS1k2Q/xjZnWNMfVesik4IrqspcL51gNdSA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-circle@2.12.0: + resolution: {integrity: sha512-L6OngbAlbadG7b783x16ns3+SZ7i0SSB66M8xGa5/k+YcY7zm8zG0uPt1Hd+xQDR2aNA3RngVM10O23/Lwk65Q==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-image@2.12.0: + resolution: {integrity: sha512-iCkSdUVa40DxhkkYjYuYHr9MJGVw+QnQuN5UC+e/yBgJQY+1tQL8UH0+YU/h0GHTzh5Sm+y+g51gOFxHt1dj7Q==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-line@2.12.0: + resolution: {integrity: sha512-RcpKmmpKlk+R8mM5wA2v64Lv1jvXtU4SrBDv3vbdRodKbKaWGGzymzav1Q0hYyDyUZgplEK/a5ZwrfrOwmgYGA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-polygon@2.12.0: + resolution: {integrity: sha512-5YEy7HVMt1Obxd/jnlsjajchAlYMr9eRZWN+lSjcFSH6Ibra7h59YuJVnwxOxAobpijGxsNiBX0PuGQnB47pmA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-square@2.12.0: + resolution: {integrity: sha512-33vfajHqmlODKaUzyPI/aVhnAOT09V7nfEPNl8DD0cfiNikEuPkbFqgJezJuE55ebtVo7BZPDA9o7GYbWxQNuw==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-star@2.12.0: + resolution: {integrity: sha512-4sfG/BBqm2qBnPLASl2L5aBfCx86cmZLXeh49Un+TIR1F5Qh4XUFsahgVOG0vkZQa+rOsZPEH04xY5feWmj90g==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-shape-text@2.12.0: + resolution: {integrity: sha512-v2/FCA+hyTbDqp2ymFOe97h/NFb2eezECMrdirHWew3E3qlvj9S/xBibjbpZva2gnXcasBwxn0+LxKbgGdP0rA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-slim@2.12.0: + resolution: {integrity: sha512-27w9aGAAAPKHvP4LHzWFpyqu7wKyulayyaZ/L6Tuuejy4KP4BBEB4rY5GG91yvAPsLtr6rwWAn3yS+uxnBDpkA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-basic: 2.12.0 + tsparticles-engine: 2.12.0 + tsparticles-interaction-external-attract: 2.12.0 + tsparticles-interaction-external-bounce: 2.12.0 + tsparticles-interaction-external-bubble: 2.12.0 + tsparticles-interaction-external-connect: 2.12.0 + tsparticles-interaction-external-grab: 2.12.0 + tsparticles-interaction-external-pause: 2.12.0 + tsparticles-interaction-external-push: 2.12.0 + tsparticles-interaction-external-remove: 2.12.0 + tsparticles-interaction-external-repulse: 2.12.0 + tsparticles-interaction-external-slow: 2.12.0 + tsparticles-interaction-particles-attract: 2.12.0 + tsparticles-interaction-particles-collisions: 2.12.0 + tsparticles-interaction-particles-links: 2.12.0 + tsparticles-move-base: 2.12.0 + tsparticles-move-parallax: 2.12.0 + tsparticles-particles.js: 2.12.0 + tsparticles-plugin-easing-quad: 2.12.0 + tsparticles-shape-circle: 2.12.0 + tsparticles-shape-image: 2.12.0 + tsparticles-shape-line: 2.12.0 + tsparticles-shape-polygon: 2.12.0 + tsparticles-shape-square: 2.12.0 + tsparticles-shape-star: 2.12.0 + tsparticles-shape-text: 2.12.0 + tsparticles-updater-color: 2.12.0 + tsparticles-updater-life: 2.12.0 + tsparticles-updater-opacity: 2.12.0 + tsparticles-updater-out-modes: 2.12.0 + tsparticles-updater-rotate: 2.12.0 + tsparticles-updater-size: 2.12.0 + tsparticles-updater-stroke-color: 2.12.0 + dev: false + + /tsparticles-updater-color@2.12.0: + resolution: {integrity: sha512-KcG3a8zd0f8CTiOrylXGChBrjhKcchvDJjx9sp5qpwQK61JlNojNCU35xoaSk2eEHeOvFjh0o3CXWUmYPUcBTQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-destroy@2.12.0: + resolution: {integrity: sha512-6NN3dJhxACvzbIGL4dADbYQSZJmdHfwjujj1uvnxdMbb2x8C/AZzGxiN33smo4jkrZ5VLEWZWCJPJ8aOKjQ2Sg==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-life@2.12.0: + resolution: {integrity: sha512-J7RWGHAZkowBHpcLpmjKsxwnZZJ94oGEL2w+wvW1/+ZLmAiFFF6UgU0rHMC5CbHJT4IPx9cbkYMEHsBkcRJ0Bw==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-opacity@2.12.0: + resolution: {integrity: sha512-YUjMsgHdaYi4HN89LLogboYcCi1o9VGo21upoqxq19yRy0hRCtx2NhH22iHF/i5WrX6jqshN0iuiiNefC53CsA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-out-modes@2.12.0: + resolution: {integrity: sha512-owBp4Gk0JNlSrmp12XVEeBroDhLZU+Uq3szbWlHGSfcR88W4c/0bt0FiH5bHUqORIkw+m8O56hCjbqwj69kpOQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-roll@2.12.0: + resolution: {integrity: sha512-dxoxY5jP4C9x15BxlUv5/Q8OjUPBiE09ToXRyBxea9aEJ7/iMw6odvi1HuT0H1vTIfV7o1MYawjeCbMycvODKQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-rotate@2.12.0: + resolution: {integrity: sha512-waOFlGFmEZOzsQg4C4VSejNVXGf4dMf3fsnQrEROASGf1FCd8B6WcZau7JtXSTFw0OUGuk8UGz36ETWN72DkCw==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-size@2.12.0: + resolution: {integrity: sha512-B0yRdEDd/qZXCGDL/ussHfx5YJ9UhTqNvmS5X2rR2hiZhBAE2fmsXLeWkdtF2QusjPeEqFDxrkGiLOsh6poqRA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-stroke-color@2.12.0: + resolution: {integrity: sha512-MPou1ZDxsuVq6SN1fbX+aI5yrs6FyP2iPCqqttpNbWyL+R6fik1rL0ab/x02B57liDXqGKYomIbBQVP3zUTW1A==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-tilt@2.12.0: + resolution: {integrity: sha512-HDEFLXazE+Zw+kkKKAiv0Fs9D9sRP61DoCR6jZ36ipea6OBgY7V1Tifz2TSR1zoQkk57ER9+EOQbkSQO+YIPGQ==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-twinkle@2.12.0: + resolution: {integrity: sha512-JhK/DO4kTx7IFwMBP2EQY9hBaVVvFnGBvX21SQWcjkymmN1hZ+NdcgUtR9jr4jUiiSNdSl7INaBuGloVjWvOgA==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles-updater-wobble@2.12.0: + resolution: {integrity: sha512-85FIRl95ipD3jfIsQdDzcUC5PRMWIrCYqBq69nIy9P8rsNzygn+JK2n+P1VQZowWsZvk0mYjqb9OVQB21Lhf6Q==} + deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name + dependencies: + tsparticles-engine: 2.12.0 + dev: false + + /tsparticles@2.12.0: + resolution: {integrity: sha512-aw77llkaEhcKYUHuRlggA6SB1Dpa814/nrStp9USGiDo5QwE1Ckq30QAgdXU6GRvnblUFsiO750ZuLQs5Y0tVw==} + deprecated: tsParticles v3 is out, it contains breaking changes and it's recommended to migrate to that version with fixes and new features + dependencies: + tsparticles-engine: 2.12.0 + tsparticles-interaction-external-trail: 2.12.0 + tsparticles-plugin-absorbers: 2.12.0 + tsparticles-plugin-emitters: 2.12.0 + tsparticles-slim: 2.12.0 + tsparticles-updater-destroy: 2.12.0 + tsparticles-updater-roll: 2.12.0 + tsparticles-updater-tilt: 2.12.0 + tsparticles-updater-twinkle: 2.12.0 + tsparticles-updater-wobble: 2.12.0 + dev: false + + /tsutils@3.21.0(typescript@5.4.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.4.5 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /update-browserslist-db@1.0.16(browserslist@4.23.0): + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /use-sync-external-store@1.1.0(react@18.2.0): + resolution: {integrity: sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /use-sync-external-store@1.2.2(react@18.2.0): + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: true + + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yaml@2.4.2: + resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + engines: {node: '>= 14'} + hasBin: true + dev: true + + /yup@0.32.11: + resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==} + engines: {node: '>=10'} + dependencies: + '@babel/runtime': 7.24.5 + '@types/lodash': 4.17.1 + lodash: 4.17.21 + lodash-es: 4.17.21 + nanoclone: 0.2.1 + property-expr: 2.0.6 + toposort: 2.0.2 + dev: false diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..ebaa131 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/fonts/BebasNeue.ttf b/public/fonts/BebasNeue.ttf new file mode 100644 index 0000000..76e22b8 Binary files /dev/null and b/public/fonts/BebasNeue.ttf differ diff --git a/public/fonts/digital-7.ttf b/public/fonts/digital-7.ttf new file mode 100644 index 0000000..a481b97 Binary files /dev/null and b/public/fonts/digital-7.ttf differ diff --git a/public/img/M.png b/public/img/M.png new file mode 100644 index 0000000..d147349 Binary files /dev/null and b/public/img/M.png differ diff --git a/public/img/bg-login.jpg b/public/img/bg-login.jpg new file mode 100644 index 0000000..c5c5f4d Binary files /dev/null and b/public/img/bg-login.jpg differ diff --git a/public/img/bg-navbar-1280.png b/public/img/bg-navbar-1280.png new file mode 100644 index 0000000..653b04b Binary files /dev/null and b/public/img/bg-navbar-1280.png differ diff --git a/public/img/bg-navbar-1920.png b/public/img/bg-navbar-1920.png new file mode 100644 index 0000000..925f53e Binary files /dev/null and b/public/img/bg-navbar-1920.png differ diff --git a/public/img/bg-navbar.jpg b/public/img/bg-navbar.jpg new file mode 100644 index 0000000..edb7fe7 Binary files /dev/null and b/public/img/bg-navbar.jpg differ diff --git a/public/img/coming-soon.png b/public/img/coming-soon.png new file mode 100644 index 0000000..58d43df Binary files /dev/null and b/public/img/coming-soon.png differ diff --git a/public/img/e-verif-title.png b/public/img/e-verif-title.png new file mode 100644 index 0000000..f5c0f74 Binary files /dev/null and b/public/img/e-verif-title.png differ diff --git a/public/img/e-verif.png b/public/img/e-verif.png new file mode 100644 index 0000000..cdc4f92 Binary files /dev/null and b/public/img/e-verif.png differ diff --git a/public/img/favicon.ico b/public/img/favicon.ico new file mode 100644 index 0000000..ebaa131 Binary files /dev/null and b/public/img/favicon.ico differ diff --git a/public/img/logo.png b/public/img/logo.png new file mode 100644 index 0000000..5794082 Binary files /dev/null and b/public/img/logo.png differ diff --git a/public/img/no_image.jpg b/public/img/no_image.jpg new file mode 100644 index 0000000..d84a9b4 Binary files /dev/null and b/public/img/no_image.jpg differ diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..fbf0e25 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/services/auth-service.js b/services/auth-service.js new file mode 100644 index 0000000..dd0a490 --- /dev/null +++ b/services/auth-service.js @@ -0,0 +1,15 @@ +import axios from '../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const LoginPost = async (data) => { + const response = await axios.post('login', data, headers) + return response.data +} + +export const LogoutGet = async () => { + const response = await axios.get('logout') + return response.data +} diff --git a/services/cek-tagihan-service.js b/services/cek-tagihan-service.js new file mode 100644 index 0000000..178ae81 --- /dev/null +++ b/services/cek-tagihan-service.js @@ -0,0 +1,8 @@ +import axios from '../lib/axios' + +export const CekTagihan = async (params) => { + const response = await axios.get(`tagihan/tracking/${params}`, { + headers: { 'Content-Type': 'application/json' }, + }) + return response.data +} diff --git a/services/chart-service.js b/services/chart-service.js new file mode 100644 index 0000000..d806455 --- /dev/null +++ b/services/chart-service.js @@ -0,0 +1,29 @@ +import axios from '../lib/axios' + +export const Chart1 = async () => { + const response = await axios.get('chart/approval', { + headers: { 'Content-Type': 'application/json' }, + }) + return response.data +} + +export const Chart2 = async () => { + const response = await axios.get('chart/kriteria-catatan', { + headers: { 'Content-Type': 'application/json' }, + }) + return response.data +} + +export const ChartJenisKegiatan = async () => { + const response = await axios.get('chart/jenis-kegiatan', { + headers: { 'Content-Type': 'application/json' }, + }) + return response.data +} + +export const Chart4 = async () => { + const response = await axios.get('chart/jumlah-dokumen', { + headers: { 'Content-Type': 'application/json' }, + }) + return response.data +} diff --git a/services/dashboard-service.js b/services/dashboard-service.js new file mode 100644 index 0000000..c5112fa --- /dev/null +++ b/services/dashboard-service.js @@ -0,0 +1,17 @@ +import axios from '../lib/axios' + +export const DashboardP2k = async (params) => { + const response = await axios.get(`dashboard/p2k-verif`, { + headers: { 'Content-Type': 'application/json' }, + params, + }) + return response.data +} + +export const DashboardAll = async (params) => { + const response = await axios.get('dashboard/all', { + headers: { 'Content-Type': 'application/json' }, + params, + }) + return response.data +} diff --git a/services/homepage-service.js b/services/homepage-service.js new file mode 100644 index 0000000..230bc16 --- /dev/null +++ b/services/homepage-service.js @@ -0,0 +1,6 @@ +import axios from '../lib/axios' + +export const HomepageGet = async () => { + const response = await axios.get(`homepage`) + return response.data +} diff --git a/services/laporan/laporan-service.js b/services/laporan/laporan-service.js new file mode 100644 index 0000000..0e0ff2d --- /dev/null +++ b/services/laporan/laporan-service.js @@ -0,0 +1,31 @@ +import axios from '../../lib/axios' + +export const Laporan11 = async (data) => { + const response = await axios.post('report/harian-user', data) + return response.data +} + +export const Laporan21 = async (data) => { + const response = await axios.post('report/rekap-bulanan', data) + return response.data +} + +export const Laporan31 = async (data) => { + const response = await axios.post('report/rekap-verifikasi-bulanan', data) + return response.data +} + +export const Laporan32 = async (data) => { + const response = await axios.post('report/rekap-verifikasi-unit', data) + return response.data +} + +export const Laporan33 = async (data) => { + const response = await axios.post('report/rekap-verifikasi-jenis-belanja', data) + return response.data +} + +export const DDUserVerifKasub = async () => { + const response = await axios.post('user/dd-users', { role: ['Verifikator', 'Kasub'] }) + return response.data +} diff --git a/services/manajemen/jam-kerja-service.js b/services/manajemen/jam-kerja-service.js new file mode 100644 index 0000000..89ada75 --- /dev/null +++ b/services/manajemen/jam-kerja-service.js @@ -0,0 +1,11 @@ +import axios from '../../lib/axios' + +export const JamKerjaGet = async () => { + const response = await axios.get('config/get') + return response.data +} + +export const JamKerjaCreate = async (data) => { + const response = await axios.post('config/save', data) + return response.data +} diff --git a/services/manajemen/role-service.js b/services/manajemen/role-service.js new file mode 100644 index 0000000..49c8456 --- /dev/null +++ b/services/manajemen/role-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const RoleList = async (data) => { + const response = await axios.post('role/list', data, headers) + return response.data +} + +export const RoleGetOne = async (data) => { + const response = await axios.post('role/get', data, headers) + return response.data +} + +export const RoleUpdate = async (data) => { + const response = await axios.post('role/update', data, headers) + return response.data +} + +export const RoleCreate = async (data) => { + const response = await axios.post('role/create', data, headers) + return response.data +} + +export const RoleDelete = async (data) => { + const response = await axios.post('role/delete', data, headers) + return response.data +} diff --git a/services/manajemen/user-service.js b/services/manajemen/user-service.js new file mode 100644 index 0000000..7a4ee06 --- /dev/null +++ b/services/manajemen/user-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const UserList = async (data) => { + const response = await axios.post('user/list', data, headers) + return response.data +} + +export const UserGetOne = async (data) => { + const response = await axios.post('user/get', data, headers) + return response.data +} + +export const UserUpdate = async (data) => { + const response = await axios.post('user/update', data, headers) + return response.data +} + +export const UserCreate = async (data) => { + const response = await axios.post('user/create', data, headers) + return response.data +} + +export const UserDelete = async (data) => { + const response = await axios.post('user/delete', data, headers) + return response.data +} diff --git a/services/otorisasi/spm-service.js b/services/otorisasi/spm-service.js new file mode 100644 index 0000000..d0b7398 --- /dev/null +++ b/services/otorisasi/spm-service.js @@ -0,0 +1,10 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const SPMList = async (data) => { + const response = await axios.post('verifikasi/list-spm', data, headers) + return response.data +} diff --git a/services/otorisasi/verifikasi-service.js b/services/otorisasi/verifikasi-service.js new file mode 100644 index 0000000..049d0ce --- /dev/null +++ b/services/otorisasi/verifikasi-service.js @@ -0,0 +1,35 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const VerifikasiList = async (data) => { + const response = await axios.post('verifikasi/list', data, headers) + return response.data +} + +export const VerifikasiGetOne = async (data) => { + const response = await axios.post('verifikasi/get', data, headers) + return response.data +} + +export const VerifikasiUpdate = async (data) => { + const response = await axios.post('verifikasi/update', data, headers) + return response.data +} + +export const VerifikasiDelete = async (data) => { + const response = await axios.post('verifikasi/delete', data, headers) + return response.data +} + +export const TagihanGet = async (data) => { + const response = await axios.post('tagihan/get', data, headers) + return response.data +} + +export const VerifikasiSave = async (data) => { + const response = await axios.post('verifikasi/save', data, { headers: { 'Content-Type': 'Application/json' } }) + return response.data +} diff --git a/services/pengajuan-tagihan/integrasi-service.js b/services/pengajuan-tagihan/integrasi-service.js new file mode 100644 index 0000000..f78605d --- /dev/null +++ b/services/pengajuan-tagihan/integrasi-service.js @@ -0,0 +1,11 @@ +import axios from '../../lib/axios' + +export const NoSPPListGet = async (params) => { + const response = await axios.post('integrasi/list_no_SPP', params) + return response.data +} + +export const DetailSPPGet = async (params) => { + const response = await axios.post('integrasi/get_detail_spp', params) + return response.data +} diff --git a/services/pengajuan-tagihan/tagihan-service.js b/services/pengajuan-tagihan/tagihan-service.js new file mode 100644 index 0000000..2462900 --- /dev/null +++ b/services/pengajuan-tagihan/tagihan-service.js @@ -0,0 +1,49 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const TagihanList = async (params) => { + const response = await axios.post('tagihan/list', params, headers) + return response.data +} + +export const TagihanGetOne = async (data) => { + const response = await axios.post('tagihan/get', data, headers) + return response.data +} + +export const TagihanUpdate = async (data) => { + const response = await axios.post('tagihan/update', data, headers) + return response.data +} + +// UNTUK MINTA TAGIHAN ID +export const TagihanCreate = async (data) => { + const response = await axios.post('tagihan/create', data) + return response.data +} + +export const TagihanDelete = async (data) => { + const response = await axios.post('tagihan/delete', data, headers) + return response.data +} + +// ADD DETAIL +export const TagihanAddDetail = async (data) => { + const response = await axios.post('tagihan/add_detail', data, { headers: { 'Content-Type': 'application/json' } }) + return response.data +} + +// ADD TAGIHAN SUBMIT +export const TagihanSubmit = async (data) => { + const response = await axios.post('tagihan/submit', data, { headers: { 'Content-Type': 'application/json' } }) + return response.data +} + +// RESUBMIT +export const TagihanResubmit = async (data) => { + const response = await axios.post('tagihan/update_detail', data, { headers: { 'Content-Type': 'application/json' } }) + return response.data +} diff --git a/services/referensi/akun-service.js b/services/referensi/akun-service.js new file mode 100644 index 0000000..3cf3043 --- /dev/null +++ b/services/referensi/akun-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const AkunList = async (data) => { + const response = await axios.post('akun/list', data, headers) + return response.data +} + +export const AkunGetOne = async (data) => { + const response = await axios.post('akun/get', data, headers) + return response.data +} + +export const AkunUpdate = async (data) => { + const response = await axios.post('akun/update', data, headers) + return response.data +} + +export const AkunCreate = async (data) => { + const response = await axios.post('akun/create', data, headers) + return response.data +} + +export const AkunDelete = async (data) => { + const response = await axios.post('akun/delete', data, headers) + return response.data +} diff --git a/services/referensi/jenisBelanja-service.js b/services/referensi/jenisBelanja-service.js new file mode 100644 index 0000000..80a9a20 --- /dev/null +++ b/services/referensi/jenisBelanja-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const JenisBelanjaList = async (data) => { + const response = await axios.post('jenis-belanja/list', data, headers) + return response.data +} + +export const JenisBelanjaGetOne = async (data) => { + const response = await axios.post('jenis-belanja/get', data, headers) + return response.data +} + +export const JenisBelanjaUpdate = async (data) => { + const response = await axios.post('jenis-belanja/update', data, headers) + return response.data +} + +export const JenisBelanjaCreate = async (data) => { + const response = await axios.post('jenis-belanja/create', data, headers) + return response.data +} + +export const JenisBelanjaDelete = async (data) => { + const response = await axios.post('jenis-belanja/delete', data, headers) + return response.data +} diff --git a/services/referensi/jenisKegiatan-service.js b/services/referensi/jenisKegiatan-service.js new file mode 100644 index 0000000..6bc4ab3 --- /dev/null +++ b/services/referensi/jenisKegiatan-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const JenisKegiatanList = async (data) => { + const response = await axios.post('jenis-kegiatan/list', data, headers) + return response.data +} + +export const JenisKegiatanGetOne = async (data) => { + const response = await axios.post('jenis-kegiatan/get', data, headers) + return response.data +} + +export const JenisKegiatanUpdate = async (data) => { + const response = await axios.post('jenis-kegiatan/update', data, headers) + return response.data +} + +export const JenisKegiatanCreate = async (data) => { + const response = await axios.post('jenis-kegiatan/create', data, headers) + return response.data +} + +export const JenisKegiatanDelete = async (data) => { + const response = await axios.post('jenis-kegiatan/delete', data, headers) + return response.data +} diff --git a/services/referensi/jenisTagihan-service.js b/services/referensi/jenisTagihan-service.js new file mode 100644 index 0000000..85fcf2f --- /dev/null +++ b/services/referensi/jenisTagihan-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const JenisTagihanList = async (data) => { + const response = await axios.post('jenis-tagihan/list', data, headers) + return response.data +} + +export const JenisTagihanGetOne = async (data) => { + const response = await axios.post('jenis-tagihan/get', data, headers) + return response.data +} + +export const JenisTagihanUpdate = async (data) => { + const response = await axios.post('jenis-tagihan/update', data, headers) + return response.data +} + +export const JenisTagihanCreate = async (data) => { + const response = await axios.post('jenis-tagihan/create', data, headers) + return response.data +} + +export const JenisTagihanDelete = async (data) => { + const response = await axios.post('jenis-tagihan/delete', data, headers) + return response.data +} diff --git a/services/referensi/persyaratan-service.js b/services/referensi/persyaratan-service.js new file mode 100644 index 0000000..aeaad2f --- /dev/null +++ b/services/referensi/persyaratan-service.js @@ -0,0 +1,35 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const PersyaratanList = async (data) => { + const response = await axios.post('persyaratan/list', data, headers) + return response.data +} + +export const PersyaratanGetOne = async (data) => { + const response = await axios.post('persyaratan/get', data, headers) + return response.data +} + +export const PersyaratanUpdate = async (data) => { + const response = await axios.post('persyaratan/update', data, headers) + return response.data +} + +export const PersyaratanCreate = async (data) => { + const response = await axios.post('persyaratan/create', data, { headers: { 'Content-Type': 'application/json' } }) + return response.data +} + +export const PersyaratanDelete = async (data) => { + const response = await axios.post('persyaratan/delete', data, headers) + return response.data +} + +export const PersyaratanSearch = async (data) => { + const response = await axios.post('persyaratan/search', data, headers) + return response.data +} diff --git a/services/referensi/unitKerja-service.js b/services/referensi/unitKerja-service.js new file mode 100644 index 0000000..6801ad3 --- /dev/null +++ b/services/referensi/unitKerja-service.js @@ -0,0 +1,30 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const UnitKerjaList = async (data) => { + const response = await axios.post('unit/list', data, headers) + return response.data +} + +export const UnitKerjaGetOne = async (data) => { + const response = await axios.post('unit/get', data, headers) + return response.data +} + +export const UnitKerjaUpdate = async (data) => { + const response = await axios.post('unit/update', data, headers) + return response.data +} + +export const UnitKerjaCreate = async (data) => { + const response = await axios.post('unit/create', data, headers) + return response.data +} + +export const UnitKerjaDelete = async (data) => { + const response = await axios.post('unit/delete', data, headers) + return response.data +} diff --git a/services/referensi/verifikator-service.js b/services/referensi/verifikator-service.js new file mode 100644 index 0000000..7d8ae4c --- /dev/null +++ b/services/referensi/verifikator-service.js @@ -0,0 +1,25 @@ +import axios from '../../lib/axios' + +const headers = { + headers: { 'Content-Type': 'multipart/form-data' }, +} + +export const VerifikatorList = async () => { + const response = await axios.get('verifikator/list') + return response.data +} + +export const VerifikatorGetOne = async (data) => { + const response = await axios.post('verifikator/get', data, headers) + return response.data +} + +export const VerifikatorCreate = async (data) => { + const response = await axios.post('verifikator/save_bobot', data, { headers: { 'Content-Type': 'application/json' } }) + return response.data +} + +export const VerifikatorDelete = async (data) => { + const response = await axios.post('user/delete', data, headers) + return response.data +} diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..35cc36e --- /dev/null +++ b/store/index.js @@ -0,0 +1,8 @@ +import { configureStore } from '@reduxjs/toolkit' +import userSlice from './userSlice' + +const store = configureStore({ + reducer: { user: userSlice }, +}) + +export default store diff --git a/store/userSlice.js b/store/userSlice.js new file mode 100644 index 0000000..87cff70 --- /dev/null +++ b/store/userSlice.js @@ -0,0 +1,24 @@ +import { createSlice } from '@reduxjs/toolkit' + +const userSlice = createSlice({ + name: 'user', + initialState: { name: '-', unit: '', user_id: '', user_role: '' }, + reducers: { + UPDATE_NAME(state, action) { + state.name = action.payload + }, + UPDATE_UNIT(state, action) { + state.unit = action.payload + }, + UPDATE_USER_ID(state, action) { + state.user_id = action.payload + }, + UPDATE_USER_ROLE(state, action) { + state.user_role = action.payload + }, + }, +}) + +export const { UPDATE_NAME, UPDATE_UNIT, UPDATE_USER_ID, UPDATE_USER_ROLE } = userSlice.actions + +export default userSlice.reducer diff --git a/styles/accordion.css b/styles/accordion.css new file mode 100644 index 0000000..4ce5302 --- /dev/null +++ b/styles/accordion.css @@ -0,0 +1,71 @@ +.accordion-custom .p-accordion-header .p-accordion-header-link { + padding: 0.1rem 1.2rem; +} + +.p-accordion .accordion-tab-0:not(.p-disabled) .p-accordion-header-link { + background-color: var(--red-200); +} +.p-accordion .accordion-tab-0:not(.p-disabled).p-highlight .p-accordion-header-link { + background-color: var(--red-200); +} + +.p-accordion .accordion-tab-1:not(.p-disabled) .p-accordion-header-link { + background-color: var(--green-200); +} +.p-accordion .accordion-tab-1:not(.p-disabled).p-highlight .p-accordion-header-link { + background-color: var(--green-200); +} + +.p-accordion .accordion-tab-2:not(.p-disabled) .p-accordion-header-link { + background-color: var(--blue-200); +} +.p-accordion .accordion-tab-2:not(.p-disabled).p-highlight .p-accordion-header-link { + background-color: var(--blue-200); +} + +.p-accordion .accordion-tab-3:not(.p-disabled) .p-accordion-header-link { + background-color: var(--yellow-200); +} +.p-accordion .accordion-tab-3:not(.p-disabled).p-highlight .p-accordion-header-link { + background-color: var(--yellow-200); +} + +.p-accordion .accordion-tab-4:not(.p-disabled) .p-accordion-header-link { + background-color: var(--cyan-200); +} +.p-accordion .accordion-tab-4:not(.p-disabled).p-highlight .p-accordion-header-link { + background-color: var(--cyan-200); +} + +.p-accordion .accordion-tab-5:not(.p-disabled) .p-accordion-header-link { + background-color: var(--pink-200); +} +.p-accordion .accordion-tab-5:not(.p-disabled).p-highlight .p-accordion-header-link { + background-color: var(--pink-200); +} + +/* Accordion Syarat */ +.accordion-syarat .p-accordion-header .p-accordion-header-link { + font-weight: 400; +} + +.accordion-syarat .p-accordion-header.p-accordion-syarat-tms .p-accordion-header-link, +.accordion-syarat + .p-accordion-header:not(.p-highlight):not(.p-disabled).p-accordion-syarat-tms:hover + .p-accordion-header-link { + background-color: var(--logo-pink1); +} + +.accordion-syarat .p-accordion-header.p-accordion-syarat-catatan .p-accordion-header-link, +.accordion-syarat + .p-accordion-header:not(.p-highlight):not(.p-disabled).p-accordion-syarat-catatan:hover + .p-accordion-header-link { + background-color: var(--logo-kuning1); +} + +.accordion-syarat .p-accordion-header:not(.p-disabled).p-highlight.p-accordion-syarat-tms .p-accordion-header-link { + background-color: var(--logo-pink1); +} +.accordion-syarat .p-accordion-header:not(.p-disabled).p-highlight.p-accordion-syarat-catatan .p-accordion-header-link { + background-color: var(--logo-kuning1); +} diff --git a/styles/blockUi.css b/styles/blockUi.css new file mode 100644 index 0000000..7377543 --- /dev/null +++ b/styles/blockUi.css @@ -0,0 +1,8 @@ +.p-component-overlay-enter{ + animation: none; +} + +.block-ui-custom { + background-color: transparent !important; + z-index: 1 !important; +} \ No newline at end of file diff --git a/styles/button.css b/styles/button.css new file mode 100644 index 0000000..3230479 --- /dev/null +++ b/styles/button.css @@ -0,0 +1,3 @@ +.p-button.p-button-sm { + height: 2.3rem; +} \ No newline at end of file diff --git a/styles/cClock.css b/styles/cClock.css new file mode 100644 index 0000000..ba16f75 --- /dev/null +++ b/styles/cClock.css @@ -0,0 +1,35 @@ +.countdown { + font-size: 7rem; +} + +.digital { + display: inline-block; + position: relative; + font-family: 'Digital-7'; +} + +.digital :first-child { + width: 100%; + position: absolute; + color: #e6e5e5; +} + +.digital :last-child { + position: relative; + color: #242a32; +} + +.digital p { + margin: 0; +} + +.message { + background:#da9090; + border: 2px solid rgb(255, 115, 0); + border-radius: 5px; + padding: 10px; + margin: 10px; + font-size: 1.5rem; + font-family: monospace, Arial, Helvetica, sans-serif; + text-align: center; +} diff --git a/styles/card.css b/styles/card.css new file mode 100644 index 0000000..41a5c18 --- /dev/null +++ b/styles/card.css @@ -0,0 +1,7 @@ +.dt-card .p-card-body { + padding: 1rem; +} + +.card-search .p-card-body { + padding: 0; +} \ No newline at end of file diff --git a/styles/datatables.css b/styles/datatables.css new file mode 100644 index 0000000..188dde0 --- /dev/null +++ b/styles/datatables.css @@ -0,0 +1,78 @@ +.p-component-overlay { + background-color: rgba(0, 0, 0, 0.1) +} + +.p-paginator .p-paginator-first { + margin-left: 1rem; +} + +.dt-prime .p-datatable-thead > tr > th { + background-color: var(--orange-300); +} + +.dt-dashboard .p-datatable-thead > tr > th { + background-color: var(--orange-300); +} + +.dt-prime.p-datatable-striped .p-datatable-tbody > tr.p-row-odd { + background-color: var(--orange-50); +} + +.dt-dashboard.p-datatable-striped .p-datatable-tbody > tr.p-row-odd { + background-color: var(--orange-50); +} + +.dt-prime .p-sortable-column.p-highlight { + background: var(--orange-200); +} + +.dt-dashboard .p-sortable-column.p-highlight { + background: var(--orange-200); +} + +.dt-prime .p-sortable-column:not(.p-highlight):not(.p-sortable-disabled):hover{ + background: var(--orange-200); +} + +.dt-dashboard .p-sortable-column:not(.p-highlight):not(.p-sortable-disabled):hover{ + background: var(--orange-200); +} + +.dt-prime .p-sortable-column.p-highlight:not(.p-sortable-disabled):hover { + background: var(--orange-200); +} + +.dt-dashboard .p-sortable-column.p-highlight:not(.p-sortable-disabled):hover { + background: var(--orange-200); +} + +.dt-prime .p-datatable-header { + background-color: var(--gray-50); +} + +.dt-search:enabled:focus { + outline: none; + box-shadow: none; + border-color: var(--gray-400); +} + +/* TOOLBAR */ +.dt-toolbar { + background-color: transparent; + padding: 0.8rem; + border: none; +} + +/* CARD */ +.dt-card .p-card-body { + padding: 2rem; +} + +.dt-card .p-card-content { + padding: 0; +} + +/* DATATABLE DETAIL */ +.dt-detail .p-datatable-thead > tr > th { + background-color: var(--green-100); +} \ No newline at end of file diff --git a/styles/datePicker.css b/styles/datePicker.css new file mode 100644 index 0000000..81e228d --- /dev/null +++ b/styles/datePicker.css @@ -0,0 +1,3 @@ +.p-datepicker table td { + padding: 0.2rem; +} \ No newline at end of file diff --git a/styles/dialog.css b/styles/dialog.css new file mode 100644 index 0000000..e4b7783 --- /dev/null +++ b/styles/dialog.css @@ -0,0 +1,8 @@ +@tailwind components; + +@layer components { + .dialog-history .header-history { + @apply bg-abu2 text-hitam + } +} + diff --git a/styles/dropdown.css b/styles/dropdown.css new file mode 100644 index 0000000..6450b35 --- /dev/null +++ b/styles/dropdown.css @@ -0,0 +1,9 @@ +.dd-panel-custom { + left: 47% !important; + transform: translate(-50%, 0); + width: 70rem; + -webkit-transform: translate(-50%, 0); + -moz-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + -o-transform: translate(-50%, 0); +} \ No newline at end of file diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..3e57c0a --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,56 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@font-face { + font-family: 'Bebas Neue'; + src: url('/fonts/BebasNeue.ttf'); +} + +@font-face { + font-family: 'Digital-7'; + src: url('/fonts/digital-7.ttf'); +} + +:root { + --logo-kuning1: #f4b12c; + --logo-pink1: #ed3f5a; +} + +html { + font-family: 'Poppins', sans-serif; +} + +.font-bebas { + font-family: 'Bebas Neue', sans-serif; +} + +.font-digital { + font-family: 'Digital-7', sans-serif; +} + +.logout-pop { + visibility: hidden; +} + +.logout:hover .logout-pop { + visibility: visible; + opacity: 1; +} + +.bg-overlay { + position: fixed; + z-index: -10; + will-change: opacity; + transform: translate3d(0px, 0px, 0px); + transition: opacity 200ms ease 0ms; + width: 100vw; + height: 100vh; + background-color: rgba(0, 0, 0, 0.2); + left: 0; + top: 150px; +} + +.bg-overlay:hover { + visibility: hidden; +} diff --git a/styles/menu.css b/styles/menu.css new file mode 100644 index 0000000..1e53271 --- /dev/null +++ b/styles/menu.css @@ -0,0 +1,9 @@ +.dropdown-menu { + visibility: hidden; + opacity: 0; +} + +.dropdown-toggle:hover .dropdown-menu { + visibility: visible; + opacity: 1; +} diff --git a/styles/navbar.css b/styles/navbar.css new file mode 100644 index 0000000..2e39141 --- /dev/null +++ b/styles/navbar.css @@ -0,0 +1,15 @@ +@media (min-width: 1270px) { + .navbar { + background-image: url('/img/bg-navbar-1280.png'); + background-repeat: no-repeat; + background-size: cover; + } +} + +@media (min-width: 1920px) { + .navbar { + background-image: url('/img/bg-navbar-1920.png'); + background-repeat: no-repeat; + background-size: cover; + } +} \ No newline at end of file diff --git a/styles/panel.css b/styles/panel.css new file mode 100644 index 0000000..979ae26 --- /dev/null +++ b/styles/panel.css @@ -0,0 +1,3 @@ +.p-panel .p-panel-content { + padding: 0; +} \ No newline at end of file diff --git a/styles/primeFont.css b/styles/primeFont.css new file mode 100644 index 0000000..9f88a1e --- /dev/null +++ b/styles/primeFont.css @@ -0,0 +1,3 @@ +.p-component { + font-family: 'Poppins', sans-serif; +} \ No newline at end of file diff --git a/styles/step.css b/styles/step.css new file mode 100644 index 0000000..3f6d6d2 --- /dev/null +++ b/styles/step.css @@ -0,0 +1,33 @@ +.custom-step ul { + flex-direction: column; + gap: 40px 0; + padding: 10px; +} + +.custom-step .p-steps-item{ + justify-content: left; +} + +.custom-step .p-steps-item:before{ + border-top: 0; + border-left: 1px solid var(--red-400); + top: 120%; + left: 15px; + bottom: -100%; + margin-top: 0; +} + +.custom-step .p-steps-item.last-dor::before{ + border-left: 0; +} + +.custom-step .p-steps-item .p-menuitem-link{ + flex-direction: row; + display: flex; + gap: 0 5px; +} + +.custom-step .p-steps-item .p-menuitem-link .p-steps-title { + margin-top: 0; + font-size: 14px; +} \ No newline at end of file diff --git a/styles/tabView.css b/styles/tabView.css new file mode 100644 index 0000000..95c4f1b --- /dev/null +++ b/styles/tabView.css @@ -0,0 +1,13 @@ +.p-tabview .p-tabview-nav li .p-tabview-nav-link { + padding: 0.5rem; + font-size: 14px; +} + +.p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { + background: #FFDDD2; +} + +.p-tabview-nav { + overflow-x: auto; + overflow-y: hidden; +} \ No newline at end of file diff --git a/styles/table.css b/styles/table.css new file mode 100644 index 0000000..7afe410 --- /dev/null +++ b/styles/table.css @@ -0,0 +1,22 @@ +.custom-table { + border-collapse: collapse; + width: 100%; +} + +.custom-table td, .custom-table th { + border: 1px solid #ddd; + padding: 8px; +} + +/* .custom-table tr:nth-child(even){background-color: #f2f2f2;} */ + +/* .custom-table tr:hover {background-color: #fafafa;} */ + +.custom-table th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #FFDDD2; + color: #212529; + font-weight: 600; +} \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..3271d06 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,31 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], + theme: { + extend: { + colors: { + hitam: '#121212', + pink: '#C13449', + pink2: '#DD497D', + yellow: '#FCB730', + orange: '#F47F1F', + biru: '#3892A7', + biru2: '#0B537B', + merah: '#860D14', + orange2: '#F68F23', + orange3: '#F5841F', + abu: '#fafafa', + abu2: '#D8DADF', + abu3: '#efefef', + 'logo-biru1': '#4B80C2', + 'logo-biru2': '#254D7E', + 'logo-kuning1': '#F4B12C', + 'logo-orange1': '#F17F41', + 'logo-orange2': '#F16848', + 'logo-orange3': '#EE4B3C', + 'logo-pink1': '#ED3F5A', + }, + }, + }, + plugins: [], +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..8aae552 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2876 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.12.1", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@eslint/eslintrc@^1.3.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@next/env@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.2.tgz#cc1a0a445bd254499e30f632968c03192455f4cc" + integrity sha512-BqDwE4gDl1F608TpnNxZqrCn6g48MBjvmWFEmeX5wEXDXh3IkAOw6ASKUgjT8H4OUePYFqghDFUss5ZhnbOUjw== + +"@next/eslint-plugin-next@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.2.tgz#b4a22c06b6454068b54cc44502168d90fbb29a6d" + integrity sha512-XOi0WzJhGH3Lk51SkSu9eZxF+IY1ZZhWcJTIGBycAbWU877IQa6+6KxMATWCOs7c+bmp6Sd8KywXJaDRxzu0JA== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.2.tgz#f6c4111e6371f73af6bf80c9accb3d96850a92cd" + integrity sha512-VHjuCHeq9qCprUZbsRxxM/VqSW8MmsUtqB5nEpGEgUNnQi/BTm/2aK8tl7R4D0twGKRh6g1AAeFuWtXzk9Z/vQ== + +"@next/swc-android-arm64@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.2.tgz#b69de59c51e631a7600439e7a8993d6e82f3369e" + integrity sha512-v5EYzXUOSv0r9mO/2PX6mOcF53k8ndlu9yeFHVAWW1Dhw2jaJcvTRcCAwYYN8Q3tDg0nH3NbEltJDLKmcJOuVA== + +"@next/swc-darwin-arm64@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.2.tgz#80157c91668eff95b72d052428c353eab0fc4c50" + integrity sha512-JCoGySHKGt+YBk7xRTFGx1QjrnCcwYxIo3yGepcOq64MoiocTM3yllQWeOAJU2/k9MH0+B5E9WUSme4rOCBbpA== + +"@next/swc-darwin-x64@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.2.tgz#12be2f58e676fccff3d48a62921b9927ed295133" + integrity sha512-dztDtvfkhUqiqpXvrWVccfGhLe44yQ5tQ7B4tBfnsOR6vxzI9DNPHTlEOgRN9qDqTAcFyPxvg86mn4l8bB9Jcw== + +"@next/swc-freebsd-x64@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.2.tgz#de1363431a49059f1efb8c0f86ce6a79c53b3a95" + integrity sha512-JUnXB+2xfxqsAvhFLPJpU1NeyDsvJrKoOjpV7g3Dxbno2Riu4tDKn3kKF886yleAuD/1qNTUCpqubTvbbT2VoA== + +"@next/swc-linux-arm-gnueabihf@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.2.tgz#d5b8e0d1bb55bbd9db4d2fec018217471dc8b9e6" + integrity sha512-XeYC/qqPLz58R4pjkb+x8sUUxuGLnx9QruC7/IGkK68yW4G17PHwKI/1njFYVfXTXUukpWjcfBuauWwxp9ke7Q== + +"@next/swc-linux-arm64-gnu@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.2.tgz#3bc75984e1d5ec8f59eb53702cc382d8e1be2061" + integrity sha512-d6jT8xgfKYFkzR7J0OHo2D+kFvY/6W8qEo6/hmdrTt6AKAqxs//rbbcdoyn3YQq1x6FVUUd39zzpezZntg9Naw== + +"@next/swc-linux-arm64-musl@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.2.tgz#270db73e07a18d999f61e79a917943fa5bc1ef56" + integrity sha512-rIZRFxI9N/502auJT1i7coas0HTHUM+HaXMyJiCpnY8Rimbo0495ir24tzzHo3nQqJwcflcPTwEh/DV17sdv9A== + +"@next/swc-linux-x64-gnu@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.2.tgz#e6c72fa20478552e898c434f4d4c0c5e89d2ea78" + integrity sha512-ir1vNadlUDj7eQk15AvfhG5BjVizuCHks9uZwBfUgT5jyeDCeRvaDCo1+Q6+0CLOAnYDR/nqSCvBgzG2UdFh9A== + +"@next/swc-linux-x64-musl@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.2.tgz#b9ef9efe2c401839cdefa5e70402386aafdce15a" + integrity sha512-bte5n2GzLN3O8JdSFYWZzMgEgDHZmRz5wiispiiDssj4ik3l8E7wq/czNi8RmIF+ioj2sYVokUNa/ekLzrESWw== + +"@next/swc-win32-arm64-msvc@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.2.tgz#18fa7ec7248da3a7926a0601d9ececc53ac83157" + integrity sha512-ZUGCmcDmdPVSAlwJ/aD+1F9lYW8vttseiv4n2+VCDv5JloxiX9aY32kYZaJJO7hmTLNrprvXkb4OvNuHdN22Jg== + +"@next/swc-win32-ia32-msvc@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.2.tgz#54936e84f4a219441d051940354da7cd3eafbb4f" + integrity sha512-v7ykeEDbr9eXiblGSZiEYYkWoig6sRhAbLKHUHQtk8vEWWVEqeXFcxmw6LRrKu5rCN1DY357UlYWToCGPQPCRA== + +"@next/swc-win32-x64-msvc@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.2.tgz#7460be700a60d75816f01109400b51fe929d7e89" + integrity sha512-2D2iinWUL6xx8D9LYVZ5qi7FP6uLAoWymt8m8aaG2Ld/Ka8/k723fJfiklfuAcwOxfufPJI+nRbT5VcgHGzHAQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@reduxjs/toolkit@^1.8.4": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.3.tgz#27e1a33072b5a312e4f7fa19247fec160bbb2df9" + integrity sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg== + dependencies: + immer "^9.0.16" + redux "^4.2.0" + redux-thunk "^2.4.2" + reselect "^4.1.7" + +"@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@swc/helpers@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.2.tgz#ed1f6997ffbc22396665d9ba74e2a5c0a2d782f8" + integrity sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw== + dependencies: + tslib "^2.4.0" + +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.175": + version "4.14.191" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-transition-group@^4.4.1": + version "4.4.5" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "18.0.29" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.29.tgz#4cead505172c0020c5b51940199e31fc6ff2f63a" + integrity sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@typescript-eslint/parser@^5.21.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.56.0.tgz#42eafb44b639ef1dbd54a3dbe628c446ca753ea6" + integrity sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg== + dependencies: + "@typescript-eslint/scope-manager" "5.56.0" + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/typescript-estree" "5.56.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz#62b4055088903b5254fa20403010e1c16d6ab725" + integrity sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw== + dependencies: + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/visitor-keys" "5.56.0" + +"@typescript-eslint/types@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.56.0.tgz#b03f0bfd6fa2afff4e67c5795930aff398cbd834" + integrity sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w== + +"@typescript-eslint/typescript-estree@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz#48342aa2344649a03321e74cab9ccecb9af086c3" + integrity sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg== + dependencies: + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/visitor-keys" "5.56.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz#f19eb297d972417eb13cb69b35b3213e13cc214f" + integrity sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q== + dependencies: + "@typescript-eslint/types" "5.56.0" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apexcharts@^3.35.3: + version "3.37.2" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.37.2.tgz#ade373bda05b2041ae61aaaa2579529b0a0dad10" + integrity sha512-BE5+WgIjnJgLlNPiIVqH47mzhSeSHfzg5jMUN1PVZ3fxM6ZL8WEB6aaNAh0l3c9K6PitimWo7xho48Zp7mBG2w== + dependencies: + svg.draggable.js "^2.2.2" + svg.easing.js "^2.0.0" + svg.filter.js "^2.0.2" + svg.pathmorphing.js "^0.1.3" + svg.resize.js "^1.4.3" + svg.select.js "^3.0.1" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +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== + +autoprefixer@^10.4.7: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +axobject-query@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + dependencies: + deep-equal "^2.0.5" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001469" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz#3dd505430c8522fdc9f94b4a19518e330f5c945a" + integrity sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.1.4, color-name@~1.1.4: + version "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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-equal@^2.0.5: + version "2.2.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" + integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + dependencies: + call-bind "^1.0.2" + es-get-iterator "^1.1.2" + get-intrinsic "^1.1.3" + is-arguments "^1.1.1" + is-array-buffer "^3.0.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +defined@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== + +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== + +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +electron-to-chromium@^1.4.284: + version "1.4.340" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.340.tgz#3a6d7414c1fc2dbf84b6f7af3ec24270606c85b8" + integrity sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-get-iterator@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@12.2.2: + version "12.2.2" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.2.2.tgz#4bb996026e118071849bc4011283a160ad5bde46" + integrity sha512-oJhWBLC4wDYYUFv/5APbjHUFd0QRFCojMdj/QnMoOEktmeTvwnnoA8F8uaXs0fQgsaTK0tbUxBRv9/Y4/rpxOA== + dependencies: + "@next/eslint-plugin-next" "12.2.2" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.21.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^2.7.1" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.29.4" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-import-resolver-typescript@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== + dependencies: + debug "^4.3.4" + glob "^7.2.0" + is-glob "^4.0.3" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + ast-types-flow "^0.0.7" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" + +eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.29.4: + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.19.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" + integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2, espree@^9.4.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.0.tgz#3646d4e3f58907464edba852fa047e6a27bdf113" + integrity sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.14.9: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +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" + +formik@^2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" + integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== + dependencies: + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^1.10.0" + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0, globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +immer@^9.0.16: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "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@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +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== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + 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@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +moment@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoclone@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" + integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== + +nanoid@^3.1.30, nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next@12.2.2: + version "12.2.2" + resolved "https://registry.yarnpkg.com/next/-/next-12.2.2.tgz#029bf5e4a18a891ca5d05b189b7cd983fd22c072" + integrity sha512-zAYFY45aBry/PlKONqtlloRFqU/We3zWYdn2NoGvDZkoYUYQSJC8WMcalS5C19MxbCZLUVCX7D7a6gTGgl2yLg== + dependencies: + "@next/env" "12.2.2" + "@swc/helpers" "0.4.2" + caniuse-lite "^1.0.30001332" + postcss "8.4.5" + styled-jsx "5.0.2" + use-sync-external-store "1.1.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "12.2.2" + "@next/swc-android-arm64" "12.2.2" + "@next/swc-darwin-arm64" "12.2.2" + "@next/swc-darwin-x64" "12.2.2" + "@next/swc-freebsd-x64" "12.2.2" + "@next/swc-linux-arm-gnueabihf" "12.2.2" + "@next/swc-linux-arm64-gnu" "12.2.2" + "@next/swc-linux-arm64-musl" "12.2.2" + "@next/swc-linux-x64-gnu" "12.2.2" + "@next/swc-linux-x64-musl" "12.2.2" + "@next/swc-win32-arm64-msvc" "12.2.2" + "@next/swc-win32-ia32-msvc" "12.2.2" + "@next/swc-win32-x64-msvc" "12.2.2" + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +nookies@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/nookies/-/nookies-2.5.2.tgz#cc55547efa982d013a21475bd0db0c02c1b35b27" + integrity sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA== + dependencies: + cookie "^0.4.1" + set-cookie-parser "^2.4.6" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +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== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.5: + version "8.4.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" + integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== + dependencies: + nanoid "^3.1.30" + picocolors "^1.0.0" + source-map-js "^1.0.1" + +postcss@^8.0.9, postcss@^8.4.14: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +primeicons@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/primeicons/-/primeicons-5.0.0.tgz#73a0b6028a77c58a9eeb331ad13aaf085e8451ee" + integrity sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw== + +primereact@^8.2.0: + version "8.7.3" + resolved "https://registry.yarnpkg.com/primereact/-/primereact-8.7.3.tgz#07144aeb2b7999b599515b319ecda2c0af479b8a" + integrity sha512-BjlIOOsVcUqX9edn7HewN/U28aUqREOvPP3fnpk7X6S7k5JTM570Dm7Z/TEPH1x/Mko1NL6iDaYWnkjKiBrtPQ== + dependencies: + "@types/react-transition-group" "^4.4.1" + react-transition-group "^4.4.1" + +prop-types@^15.5.0, prop-types@^15.5.7, prop-types@^15.6.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" + +property-expr@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4" + integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +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== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +react-apexcharts@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.4.0.tgz#e3619104b34750da67a2ca80289dc87085c2aa27" + integrity sha512-DrcMV4aAMrUG+n6412yzyATWEyCDWlpPBBhVbpzBC4PDeuYU6iF84SmExbck+jx5MUm4U5PM3/T307Mc3kzc9Q== + dependencies: + prop-types "^15.5.7" + +react-async-script@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-async-script/-/react-async-script-1.2.0.tgz#ab9412a26f0b83f5e2e00de1d2befc9400834b21" + integrity sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q== + dependencies: + hoist-non-react-statics "^3.3.0" + prop-types "^15.5.0" + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-google-recaptcha@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz#9f6f4954ce49c1dedabc2c532347321d892d0a16" + integrity sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ== + dependencies: + prop-types "^15.5.0" + react-async-script "^1.1.1" + +react-icons@^4.11.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.11.0.tgz#4b0e31c9bfc919608095cc429c4f1846f4d66c65" + integrity sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA== + +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" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-redux@^8.0.2: + version "8.0.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd" + integrity sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw== + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" + +react-transition-group@^4.4.1: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react-tsparticles@^2.1.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/react-tsparticles/-/react-tsparticles-2.9.3.tgz#bfbac7fe2e13e010131624c52e1a25b3a3e50cbb" + integrity sha512-QSo5Y0iXcXzOKbOira+kn5Z9Yv0ugk4swcn44HkdublSS8XAmV2QiQSd9T2mdM1tGZ8xVSuqsfdgGWfRC1KKng== + dependencies: + fast-deep-equal "^3.1.3" + tsparticles-engine "^2.9.3" + +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redux-thunk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== + +redux@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +reselect@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" + integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.1.7, resolve@^1.22.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +set-cookie-parser@^2.4.6: + version "2.6.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" + integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729" + integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "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== + +svg.draggable.js@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba" + integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== + dependencies: + svg.js "^2.0.1" + +svg.easing.js@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12" + integrity sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA== + dependencies: + svg.js ">=2.3.x" + +svg.filter.js@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203" + integrity sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw== + dependencies: + svg.js "^2.2.5" + +svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d" + integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== + +svg.pathmorphing.js@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65" + integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww== + dependencies: + svg.js "^2.4.0" + +svg.resize.js@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332" + integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== + dependencies: + svg.js "^2.6.5" + svg.select.js "^2.1.2" + +svg.select.js@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73" + integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== + dependencies: + svg.js "^2.2.5" + +svg.select.js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917" + integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== + dependencies: + svg.js "^2.6.5" + +sweetalert2@^11.4.33: + version "11.7.3" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.7.3.tgz#e81ad273903a644b60d1ee0359626cc4c4ac860d" + integrity sha512-fUN/fyVSBZNtY4Rr/Qtxn7tNNnlRAbUhQxTQ9uOo0xVMIHBmqq4/9pau5N9dB2pvkB353XL/ywRAycscLoYU3w== + +tailwindcss@^3.1.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07" + integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.6" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.0.9" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== + +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tsparticles-engine@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-engine/-/tsparticles-engine-2.9.3.tgz#c521edd951df2520bd0a8aa76dbbe1b0b183094a" + integrity sha512-iAD8LyRH//kx10fDMm6AfQV6dRHs1ZacUUHqVwfutcqM4x1IV2ygpjk0X87LKCnBxYeIMG78+tlxXpnpwUccOg== + +tsparticles-interaction-external-attract@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-attract/-/tsparticles-interaction-external-attract-2.9.3.tgz#831800936f334583b871142b0459f6258388e00e" + integrity sha512-iNAu0ECKLpUXQYJ84slBJjQVvvTW4S/8pqDylB+WCj52xh4xbhj0TxaaM4zpId9TUDCPd8F7GoTi2ZCDJKlodQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-bounce@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-bounce/-/tsparticles-interaction-external-bounce-2.9.3.tgz#17fd3c11f1861c550dabbbace5031046802dd9a1" + integrity sha512-RuZaqSXpanEpA0ETXArIzKAhR3E1fKOpLEJkUeDeZRNMYEmMZfh0JR/vQ2qSIR6r24z+DuIbhz0h+K6zu0lmvg== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-bubble@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-bubble/-/tsparticles-interaction-external-bubble-2.9.3.tgz#3c0cefd28f4c038ac2ebb90b8f1a6da77f1a3431" + integrity sha512-jMgCViRTydEm2Gks5BeJH4z7Qetnmideheipw5UKDlKghGSTHhm7R7LeOkcOWqJI5ul8yoSFi+uQfL85aIUFZw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-connect@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-connect/-/tsparticles-interaction-external-connect-2.9.3.tgz#d9f95f27fa1e499cb951d110486a444259e3b78e" + integrity sha512-SCtYe29pDKUxxjyp0n6l1YrayynHyvDrnygGWGIYrAp/oUXtIUHjEotu3M5JkwnUMxHyGkMB1cK8wtmY3dIiUA== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-grab@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-grab/-/tsparticles-interaction-external-grab-2.9.3.tgz#41eca2a7a6058a315f11de5bbf6157cd13f91219" + integrity sha512-424WCIR7guHPuSVzhqYXbUM4YS5cR/Tv6qpi5EeX/bSIdajZDSjmhin9HjBK219T9sedfdJnhioOsy42Wt1YbA== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-pause@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-pause/-/tsparticles-interaction-external-pause-2.9.3.tgz#a4ed0b710901dbff004251f5295c376cd6b661be" + integrity sha512-idVup6nQ59W8FSyq+zg2zUlW5RKnq5cWua/mAKEZuQFrYV01HA22I9T8UyPcquxgtlPJX+0L/PfZlBjmr3qayw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-push@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-push/-/tsparticles-interaction-external-push-2.9.3.tgz#0527ff6f94829629f6a250fbf6cc3153020ed089" + integrity sha512-KNWHJmAxFUpw2is6E3gMXNZ6VghEVxZEFx0if/PLALgGOTKVWiEyh/lyJ660Ftfec1m4oW/SI7gCR2r0BXjnpQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-remove@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-remove/-/tsparticles-interaction-external-remove-2.9.3.tgz#82638fd1f1b722e2928f2c47946660d0557cc68b" + integrity sha512-35XRqQe4cCCjRIFkvRvjsIVeUI7+i9nqUsX4bkxK9H6kv+GbC4lS98peGk6PNPetJn6yeJivkrP64VjPVGFEFQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-repulse@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-repulse/-/tsparticles-interaction-external-repulse-2.9.3.tgz#779a22e10a5ec7806ccd7eb32158caca6e8a6693" + integrity sha512-Q4A4n0Sl6tEWJVGvXhEr/x5PwsHfjCZfwfHhEF9CmzgSnVr75pQfNi09GlLvpjN63dPL4OAQVjBbceCkjcLtUw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-slow@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-slow/-/tsparticles-interaction-external-slow-2.9.3.tgz#060a356c2d430f337e39530dd78f7b93cd4f9f41" + integrity sha512-7mj2Yi8menOnr4FwkcZvjzffco71P+lmH+NkIuXyuLQmmYURloCpUQ03pONqSfdYF+DSnreanXtiM0N7dc9sfw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-external-trail@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-trail/-/tsparticles-interaction-external-trail-2.9.3.tgz#406c3b1c95c4e58a81d38302d672e3d73335a8c1" + integrity sha512-BxmxfKxx7giWpp8ZWgfcO9MBI/BAYkhwr2QY3BGdk59jpp90Zxe7jNRSU5kMyhxOmD088F0B9lBEsu3L2G+VaQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-particles-attract@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-particles-attract/-/tsparticles-interaction-particles-attract-2.9.3.tgz#4e622dd56de887016d91ea805860877212fcfad0" + integrity sha512-ceWxtHxKLvB2IGtCzvunmjVaUeHXUT8tVtHDlxz72M87ZngcFsBoGy69ZjFS+U1EC5BZHQDYOC6Eknvazd2UuQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-particles-collisions@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-particles-collisions/-/tsparticles-interaction-particles-collisions-2.9.3.tgz#3831233efb41c40eb3e54ed2f0e06b30990b5a8e" + integrity sha512-7Wyf/XpgsklYgoB0dh+OHgY7IYhlgLRtHYryFMTodd36N6kWMwKo+6Mg5OvmbEeLQqU+hTUXiD2fjjzLMebKXw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-interaction-particles-links@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-interaction-particles-links/-/tsparticles-interaction-particles-links-2.9.3.tgz#a6de94f50ff1f04f8c14ba664c89c1870eaa45ee" + integrity sha512-ZcsgvpNNi4ma6yy4XIubuBaLd9hI6J2SgIi7Pz3I2QfkSsGmJPDNdRoN1AuLLwbb5T80X2mVw0bomPFuW6zSMg== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-move-base@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-move-base/-/tsparticles-move-base-2.9.3.tgz#997df1ae3d93e4c4014fd756111bd5f158074929" + integrity sha512-6/uO7N9HbVJokG8sjPF8YjJzkcnwELoZEkaiABX0mGxdICYCyjpjOdOfwF7UCf8Ctqh2/kxQjv4fk0Aj2Z3nag== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-move-parallax@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-move-parallax/-/tsparticles-move-parallax-2.9.3.tgz#6e54b2bfa8c3a92a958b6b69c7808579f51d983b" + integrity sha512-uFqtEtCWabC7XZLZ7icIYYF9XB2XfedT8rjcLtyuBymQX8pfMJ5HUtd3ONI6Cik7I+BtqOfAkuZqTDcBTs7zlA== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-particles.js@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-particles.js/-/tsparticles-particles.js-2.9.3.tgz#3f429e05cb90a70a9f5a28fbceb62dc82b72038b" + integrity sha512-UyAEoz3ZkjBXIwC4NRJWnD4KdntuZyIKlPDZOKWz8ZL9I8jEvlle9XdonDj5IsLAwySqIq7vom5OUeIrqXdxjQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-plugin-absorbers@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-plugin-absorbers/-/tsparticles-plugin-absorbers-2.9.3.tgz#98707c667f3f693373210d056859af0f4318ecd3" + integrity sha512-K4AmBqEWqcC8aXc+TEmv2GHIlZ+b1jAPtuYr30j1rZbaMK7kbvjvVmZbDNM2RJyuBqkuAoV/e3DAOuH5YpBs7g== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-plugin-easing-quad@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-plugin-easing-quad/-/tsparticles-plugin-easing-quad-2.9.3.tgz#7e6059153914749dcaf1f99c9012884a5555e4dc" + integrity sha512-rttpIJSwhPFys/sAYuZSsw9rWCvnUZdX1ePU12eTgqcyIelBdiySs4LndCLIXnkuS+jMMSYw9BzTSGfNz+sZcQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-plugin-emitters@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-plugin-emitters/-/tsparticles-plugin-emitters-2.9.3.tgz#55f994eb3c8918d33b71d7a0f27869d6e09e0fa7" + integrity sha512-G0rs7lL9xjbFGkWr+XDsDpyghTjiHq7oPAZyUe0c/3p0JETwQgZ63/egluYU1p3uWJj34KjgjHD3GZqjyfI95Q== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-circle@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-circle/-/tsparticles-shape-circle-2.9.3.tgz#15d1a209328e801366a546b583c3b92ff118ee22" + integrity sha512-d+PjFELhoCzPf2G+XKIew3Ho/Ql2fHzY0TrrIKVHzHufqWdQCWrhxNri2v0POLJFkcIYqvFThxM23I/cyKPgQw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-image@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-image/-/tsparticles-shape-image-2.9.3.tgz#5d56f268e41084e9b33a447514c5d0f7d51f51dc" + integrity sha512-yV3FAcqJ91EYG59OJ1SmShbogVs/uyk12u6LFTJnD2pmfdNwTeGpKMr3Cus5xJHQwJnFWufwkpOlBUxw55J/5g== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-line@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-line/-/tsparticles-shape-line-2.9.3.tgz#4e05c5a7326641dabb5da621edd586ff15181347" + integrity sha512-uREd1nJYTUzHrXh1FcdhCx5jA0hYtuJXyUiG3es9p3VyFM/f8ookGj8Ke/C48p90IOQMWuT9DyaEDnGs+hbcVQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-polygon@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-polygon/-/tsparticles-shape-polygon-2.9.3.tgz#97a50ab7f355d363b9ecfc4563be7b6cfbd4a87d" + integrity sha512-qw580qr2VQveN1Q3kllhieW4GzB3t8fjlIRKZ0QG05npCG+ewBdXbD5G/9yfjGa1fTwCbHCfLoAFojjV15MBmg== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-square@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-square/-/tsparticles-shape-square-2.9.3.tgz#4a122c04fe3073445447a737c6604b5696a3c43d" + integrity sha512-VjRNALTt34arsN2UAxaWa43gvdaQQbk7OluLB912u1UzLFbdCccE/sr7pjyLqYaf6F+ndnjnzVygNb/kRxX1uQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-star@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-star/-/tsparticles-shape-star-2.9.3.tgz#06d9335c5cc5c50df214d17451ce7b1c46f8edbd" + integrity sha512-/nJdrHEq05dcVwLK+8i+QD3do+RNWrSvU1efVsOMzgLajH5s2mlSfyFcUSCQrmnmP7d6MpYZpbxa2KnpDSfW8g== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-shape-text@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-shape-text/-/tsparticles-shape-text-2.9.3.tgz#9c6f0259e11b3351dd9fee565e9b07a08c6e00ef" + integrity sha512-V9U8VE2am1JWabiHAhTzAg0uG8j92BnfwmgRfWjg/w4eMFF2uyyBHQDHIFzhZFDbDbqIxttXngkfivAqRdUzhw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-slim@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-slim/-/tsparticles-slim-2.9.3.tgz#45db3b8ef50f4cbf20aff2e11c481c3ec96b4a5d" + integrity sha512-lq8qePcf/lQ5HezR/gpIDn4UJUp8G+33MB7GkhpwmpQpJyoteT5nlXkLxgaedGZFkZAoTKINuU9NUW1Ci6MX4w== + dependencies: + tsparticles-engine "^2.9.3" + tsparticles-interaction-external-attract "^2.9.3" + tsparticles-interaction-external-bounce "^2.9.3" + tsparticles-interaction-external-bubble "^2.9.3" + tsparticles-interaction-external-connect "^2.9.3" + tsparticles-interaction-external-grab "^2.9.3" + tsparticles-interaction-external-pause "^2.9.3" + tsparticles-interaction-external-push "^2.9.3" + tsparticles-interaction-external-remove "^2.9.3" + tsparticles-interaction-external-repulse "^2.9.3" + tsparticles-interaction-external-slow "^2.9.3" + tsparticles-interaction-particles-attract "^2.9.3" + tsparticles-interaction-particles-collisions "^2.9.3" + tsparticles-interaction-particles-links "^2.9.3" + tsparticles-move-base "^2.9.3" + tsparticles-move-parallax "^2.9.3" + tsparticles-particles.js "^2.9.3" + tsparticles-plugin-easing-quad "^2.9.3" + tsparticles-shape-circle "^2.9.3" + tsparticles-shape-image "^2.9.3" + tsparticles-shape-line "^2.9.3" + tsparticles-shape-polygon "^2.9.3" + tsparticles-shape-square "^2.9.3" + tsparticles-shape-star "^2.9.3" + tsparticles-shape-text "^2.9.3" + tsparticles-updater-angle "^2.9.3" + tsparticles-updater-color "^2.9.3" + tsparticles-updater-life "^2.9.3" + tsparticles-updater-opacity "^2.9.3" + tsparticles-updater-out-modes "^2.9.3" + tsparticles-updater-size "^2.9.3" + tsparticles-updater-stroke-color "^2.9.3" + +tsparticles-updater-angle@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-angle/-/tsparticles-updater-angle-2.9.3.tgz#5d18bf92aab14dd44e18b618017b9e27fe69ce70" + integrity sha512-Z8VLOw2UUxrvV3YH44My5kmeBUcJUHTSCMRUIqFvgvxDs0Q/g2eVWkr1L+Crpw6PE5FJMdDGWRjWwxMwNdVfuQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-color@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-color/-/tsparticles-updater-color-2.9.3.tgz#90678f3cec05ba6aef427f70f9efdf326a2bc647" + integrity sha512-eBJ7ZNsG3uCQlpfEf2FocsHLlMnd/vgWPZtOr2Iu7KA2OR3zy7u62D/oiRZkZEWtjhh5GlPrsy7njo6oToRBNQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-destroy@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-destroy/-/tsparticles-updater-destroy-2.9.3.tgz#0dc8fd03bbfe75c17ec451430da8e7a1459eadce" + integrity sha512-SRgFISarsLpNz/gnMvkCFV2uITpwkUX5Fva34DVWHK6glY0053x2uvtUQluwHfp6DIJAueRMRhZ0dmzVltdOLw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-life@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-life/-/tsparticles-updater-life-2.9.3.tgz#9c6d67307bac03a4baa8e09708877487030d57a3" + integrity sha512-VUeWBCLKoLd69+C9CFHjVG0SaqCbMgQqag6NIGMqTmaaZNFcn1H8rheIG9NU70UOTsYRMPfwmZK1SKnqAK6jQQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-opacity@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-opacity/-/tsparticles-updater-opacity-2.9.3.tgz#ae678f1e068bc013a7a3e2cd4259b98a020e477f" + integrity sha512-ON5t2qeegnm+MsmaF6ZvhUmKLzk/zXozsw9Dsgw8iJYX8WmQmp2VC72COTzADW495ovwGjBiR1KFelM/GVfHgg== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-out-modes@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-out-modes/-/tsparticles-updater-out-modes-2.9.3.tgz#618ffcd95a82d8a3f5566cb9711720bbf1a1fd75" + integrity sha512-LEcAIeK8b3ovLGuuTob1L3o57XodqRuvDjtUT2TiNIC6cf3QMAnqujwAyvBLJrYAuwr7rG1fXEEt9tovFYg+tw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-roll@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-roll/-/tsparticles-updater-roll-2.9.3.tgz#435e11d6dcec4fe70591b5718304642386013981" + integrity sha512-I/9vB1wA3RKwfeRPlw7nrxUW8uxcajwba+gxFEcIDx2C+OA2UVIuGzOQE59O2sppqLqwrcLOm3ayTt5se1qbpw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-size@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-size/-/tsparticles-updater-size-2.9.3.tgz#65924aa4b4b9b0fa2b0ca56d540d1db264057a23" + integrity sha512-6qQ8T+7wt/B4BD5K1LWEXrfan+h2utSY1zNhE1cTcAQUDrrU06g/tfMkbrpMdduu6RWwGtoC4OsciCnBuiLEYQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-stroke-color@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-stroke-color/-/tsparticles-updater-stroke-color-2.9.3.tgz#2292934434782ee9743d1bb2f3190e797ae31f9c" + integrity sha512-zEjn8vLeoGsP0kPEg0L65wwhm7c5s7QD5cWeSz0mJVibwpV+C16K20kcSjkI57QUMAFQXwgGJ9M0grgCQsiawA== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-tilt@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-tilt/-/tsparticles-updater-tilt-2.9.3.tgz#0a8167816e1a354f64d64bbfb2f626acd6725d65" + integrity sha512-x1EDyvBfqgBh1021lohf2shn+V6U9WhMasGD+fKugwRxNZ0nAe5DK0wop/26L2MUIb+AbIg2sXPdxuv1zE7G7w== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-twinkle@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-twinkle/-/tsparticles-updater-twinkle-2.9.3.tgz#d302d539c3d296c2ec66536b4d02def4c525cee9" + integrity sha512-IHxKAYBRpBiOBtU/8Wh1wv8wCQa2dC5K+LPjDw3JTyzPmPnskjGiHXiPyZTbHPdAqrSQ29jJCfJwn0HAIqEjwQ== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles-updater-wobble@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles-updater-wobble/-/tsparticles-updater-wobble-2.9.3.tgz#bc32df97271f4fdbe1a60ee8cba4736ecd00dc74" + integrity sha512-/Doid0P/OjaO9cUzD/Z3j0GNA+8X3DUvVsOo/5mPt914PJBbcWYGpweE8u75ZPcHe9OM5u6CHFMf3PMurCEBCw== + dependencies: + tsparticles-engine "^2.9.3" + +tsparticles@^2.1.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/tsparticles/-/tsparticles-2.9.3.tgz#2d00f143dcd5b75e524ce70a1b9fb4b747fcf498" + integrity sha512-9NB+zrmR3uaj/k0RZ8Awa4lhpq2PqYFR/jUhia/Z4tKwvNdIR4xkpd4NkkGn/xmqRFeN658xHxOE+yVU+y+XFA== + dependencies: + tsparticles-engine "^2.9.3" + tsparticles-interaction-external-trail "^2.9.3" + tsparticles-plugin-absorbers "^2.9.3" + tsparticles-plugin-emitters "^2.9.3" + tsparticles-slim "^2.9.3" + tsparticles-updater-destroy "^2.9.3" + tsparticles-updater-roll "^2.9.3" + tsparticles-updater-tilt "^2.9.3" + tsparticles-updater-twinkle "^2.9.3" + tsparticles-updater-wobble "^2.9.3" + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-sync-external-store@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz#3343c3fe7f7e404db70f8c687adf5c1652d34e82" + integrity sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ== + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yup@^0.32.11: + version "0.32.11" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.11.tgz#d67fb83eefa4698607982e63f7ca4c5ed3cf18c5" + integrity sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/lodash" "^4.14.175" + lodash "^4.17.21" + lodash-es "^4.17.21" + nanoclone "^0.2.1" + property-expr "^2.0.4" + toposort "^2.0.2"