From d7ef66ff9bd1f66cd25e4fd22dd022dc0ca43fe7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:24:42 +0200 Subject: [PATCH 001/135] chore(deps): bump @babel/traverse from 7.22.15 to 7.23.2 (#912) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.15 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 64 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 16 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41ce0406..c9dfa19c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,7 +228,7 @@ packages: '@babel/helpers': 7.22.15 '@babel/parser': 7.22.15 '@babel/template': 7.22.15 - '@babel/traverse': 7.22.15 + '@babel/traverse': 7.23.2 '@babel/types': 7.22.15 convert-source-map: 1.9.0 debug: 4.3.4 @@ -247,6 +247,15 @@ packages: '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + /@babel/helper-compilation-targets@7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} @@ -257,22 +266,26 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.22.15 + '@babel/types': 7.23.0 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.23.0 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} @@ -308,7 +321,7 @@ packages: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.23.0 /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} @@ -318,6 +331,10 @@ packages: resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} @@ -327,7 +344,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.22.15 + '@babel/traverse': 7.23.2 '@babel/types': 7.22.15 transitivePeerDependencies: - supports-color @@ -347,6 +364,13 @@ packages: dependencies: '@babel/types': 7.22.15 + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.15): resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} engines: {node: '>=6.9.0'} @@ -379,21 +403,21 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.15 - '@babel/types': 7.22.15 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 - /@babel/traverse@7.22.15: - resolution: {integrity: sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==} + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.15 - '@babel/types': 7.22.15 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -407,6 +431,14 @@ packages: '@babel/helper-validator-identifier': 7.22.15 to-fast-properties: 2.0.0 + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + /@date-io/core@1.3.13: resolution: {integrity: sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA==} dev: false From 2780318dde431f5420305b1141c4dbb99af1713c Mon Sep 17 00:00:00 2001 From: Martin Clementz Date: Thu, 19 Oct 2023 13:06:54 +0200 Subject: [PATCH 002/135] chore: cleanup calendar pup-up (#913) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: cleanup calendar pup-up * chore: update conditions * fix: formatting * chore: added emoji ➡️ * chore: remove emoji 😥 --- CHANGELOG.md | 2 ++ .../Landing/components/EventsCalendarPopover.tsx | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e8fcd8..9160cbef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ ### 🎨 - Designendringer ## Neste versjon + +- ⚡ **Kalender**. Kalender pop-up viser viser infromasjonen bedre. - ✨ **Bannere**. Tidsbegrensede bannere kan nå opprettes. ## versjon 2023.24.09 diff --git a/src/pages/Landing/components/EventsCalendarPopover.tsx b/src/pages/Landing/components/EventsCalendarPopover.tsx index 7bc4d4e0..78f53f25 100644 --- a/src/pages/Landing/components/EventsCalendarPopover.tsx +++ b/src/pages/Landing/components/EventsCalendarPopover.tsx @@ -24,13 +24,17 @@ const EventsCalendarPopover = ({ id }: EventsCalendarPopoverProps) => { {data && ( <> - Detaljer + {data.title} - Påmelding - - + {data.sign_up && ( + <> + 0 && '/' + data.limit}`} title='Påmeldte:' /> + {data.waiting_list_count > 0 && } + + )} + Til arrangement )} From 519842300d84a19e8421a7c2a189b953c40cf6b1 Mon Sep 17 00:00:00 2001 From: martcl Date: Thu, 19 Oct 2023 18:01:20 +0200 Subject: [PATCH 003/135] chore: fix pre-commit file permissions --- .husky/pre-commit | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit old mode 100644 new mode 100755 From 3bc003ec6d03fd970bf7373b56506fcef239aedd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Oct 2023 18:14:03 +0200 Subject: [PATCH 004/135] chore(deps-dev): bump postcss from 8.4.29 to 8.4.31 (#904) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.29 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.29...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9dfa19c..9270f04b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4106,8 +4106,8 @@ packages: engines: {node: '>=4.0.0'} dev: false - /postcss@8.4.29: - resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -5196,7 +5196,7 @@ packages: dependencies: '@types/node': 20.6.3 esbuild: 0.18.20 - postcss: 8.4.29 + postcss: 8.4.31 rollup: 3.28.1 optionalDependencies: fsevents: 2.3.3 From 61e535140c54ea85bbc989b691aa214ebcb45b76 Mon Sep 17 00:00:00 2001 From: Anders <69890033+lille-morille@users.noreply.github.com> Date: Wed, 25 Oct 2023 09:38:47 +0200 Subject: [PATCH 005/135] Feat(event)/waitlist (#911) --- CHANGELOG.md | 1 + src/pages/EventDetails/components/EventRenderer.tsx | 8 ++++---- src/types/Event.tsx | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9160cbef..72056369 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ## Neste versjon +- ✨ **Arrangement**. Du kan nå se hvilken plass du har på ventelisten. - ⚡ **Kalender**. Kalender pop-up viser viser infromasjonen bedre. - ✨ **Bannere**. Tidsbegrensede bannere kan nå opprettes. diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index dfffb0ba..ea082849 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -156,16 +156,16 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { } }; - type RegistrationInfoProps = { registration: Registration }; + type RegistrationInfoProps = { registration: Registration; event: Event }; - const RegistrationInfo = ({ registration }: RegistrationInfoProps) => { + const RegistrationInfo = ({ registration, event }: RegistrationInfoProps) => { const unregisteringGivesStrike = isPast(signOffDeadlineDate) && !registration.is_on_wait && data.can_cause_strikes; return ( <> {registration.is_on_wait ? ( <> - Du står på ventelisten, vi gir deg beskjed hvis du får plass + Du står på plass {registration.wait_queue_number}/{event.waiting_list_count} på ventelisten, vi gir deg beskjed hvis du får plass {registration.survey_submission.answers.length > 0 && (
@@ -288,7 +288,7 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { ) : null; } if (registration) { - return ; + return ; } if (isPast(endRegistrationDate)) { return null; diff --git a/src/types/Event.tsx b/src/types/Event.tsx index 9d06cdaa..896cc81f 100644 --- a/src/types/Event.tsx +++ b/src/types/Event.tsx @@ -86,6 +86,7 @@ export type Registration = { user_info: UserList; order: Order; has_paid_order?: boolean; + wait_queue_number?: number; }; export type PublicRegistration = { From 66243d1c70aacd15aa0991a04a8fe646d83373e0 Mon Sep 17 00:00:00 2001 From: Anders <69890033+lille-morille@users.noreply.github.com> Date: Mon, 6 Nov 2023 09:00:07 +0100 Subject: [PATCH 006/135] Feat/event add users maunually (#917) * Added api endpoints locally and hooks * Added component and ui part * Small fix, only allow one person to be added * Updated Changelog --- CHANGELOG.md | 2 + src/api/api.tsx | 4 ++ src/hooks/Event.tsx | 9 +++ .../components/EventParticipants.tsx | 3 + .../components/EventUserRegistrator.tsx | 57 +++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 src/pages/EventAdministration/components/EventUserRegistrator.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 72056369..a7cb5001 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ## Neste versjon - ✨ **Arrangement**. Du kan nå se hvilken plass du har på ventelisten. +- ✨ **Arrangement**. Admins kan nå manuelt legge til deltagere på et arrangement. - ⚡ **Kalender**. Kalender pop-up viser viser infromasjonen bedre. - ✨ **Bannere**. Tidsbegrensede bannere kan nå opprettes. @@ -27,6 +28,7 @@ - 🦟 **Arrangement**. Knapp for å opprette arrangemnt på gruppesiden vises kun for admins. ## versjon 2023.09.7 + - ✨ **Vipps betaling**. Vipps betaling på arrangementer, der bruker blir kastet ut hvis ikke betalt innen frist. ## versjon 2023 04.17 diff --git a/src/api/api.tsx b/src/api/api.tsx index 18c1f16a..fa82760e 100644 --- a/src/api/api.tsx +++ b/src/api/api.tsx @@ -161,6 +161,10 @@ export default { deleteRegistration: (eventId: Event['id'], userId: User['user_id']) => IFetch({ method: 'DELETE', url: `${EVENTS_ENDPOINT}/${String(eventId)}/${EVENT_REGISTRATIONS_ENDPOINT}/${userId}/` }), + // Event registrations admin + createRegistrationAdmin: (eventId: Event['id'], userId: User['user_id']) => + IFetch({ method: 'POST', url: `${EVENTS_ENDPOINT}/${eventId}/${EVENT_REGISTRATIONS_ENDPOINT}/add/`, data: { user: userId } }), + // Forms getForm: (formId: string) => IFetch
({ method: 'GET', url: `${FORMS_ENDPOINT}/${formId}/` }), getFormTemplates: () => IFetch>({ method: 'GET', url: `${FORMS_ENDPOINT}/` }), diff --git a/src/hooks/Event.tsx b/src/hooks/Event.tsx index bb6d0481..b38d7c84 100644 --- a/src/hooks/Event.tsx +++ b/src/hooks/Event.tsx @@ -173,6 +173,15 @@ export const useCreateEventRegistration = (eventId: Event['id']): UseMutationRes }); }; +export const useCreateEventRegistrationAdmin = (eventId: Event['id']): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation((userId: User['user_id']) => API.createRegistrationAdmin(eventId, userId), { + onSuccess: () => { + queryClient.invalidateQueries(EVENT_QUERY_KEYS.registrations.all(eventId)); + }, + }); +}; + export const useUpdateEventRegistration = ( eventId: Event['id'], ): UseMutationResult< diff --git a/src/pages/EventAdministration/components/EventParticipants.tsx b/src/pages/EventAdministration/components/EventParticipants.tsx index decaad40..1adeba6c 100644 --- a/src/pages/EventAdministration/components/EventParticipants.tsx +++ b/src/pages/EventAdministration/components/EventParticipants.tsx @@ -16,6 +16,8 @@ import Participant from 'pages/EventAdministration/components/Participant'; import Pagination from 'components/layout/Pagination'; import Paper from 'components/layout/Paper'; +import EventUserRegistrator from './EventUserRegistrator'; + type RegistrationsProps = { onWait?: boolean; eventId: Event['id']; @@ -147,6 +149,7 @@ const EventParticipants = ({ eventId }: EventParticipantsProps) => { + diff --git a/src/pages/EventAdministration/components/EventUserRegistrator.tsx b/src/pages/EventAdministration/components/EventUserRegistrator.tsx new file mode 100644 index 00000000..f143e95d --- /dev/null +++ b/src/pages/EventAdministration/components/EventUserRegistrator.tsx @@ -0,0 +1,57 @@ +import AddIcon from '@mui/icons-material/Add'; +import { Button, ButtonProps } from '@mui/material'; +import { useState } from 'react'; +import { useForm } from 'react-hook-form'; + +import { useCreateEventRegistrationAdmin } from 'hooks/Event'; +import { useSnackbar } from 'hooks/Snackbar'; + +import UserSearch from 'components/inputs/UserSearch'; +import Dialog from 'components/layout/Dialog'; + +import { UserBase } from '../../../types'; + +export type EventMessageSenderProps = ButtonProps & { + eventId: number; +}; + +type FormValues = { + user: UserBase; +}; + +const EventUserRegistrator = ({ eventId, ...props }: EventMessageSenderProps) => { + const [dialogOpen, setDialogOpen] = useState(false); + const showSnackbar = useSnackbar(); + const { formState, handleSubmit, reset, control } = useForm(); + const { mutateAsync } = useCreateEventRegistrationAdmin(eventId); + const submit = async (data: FormValues) => { + try { + await mutateAsync(data.user.user_id); + + showSnackbar('Deltager lagt til', 'success'); + reset(); + setDialogOpen(false); + } catch (e) { + showSnackbar(e.detail, 'error'); + } + }; + + return ( + <> + + setDialogOpen(false)} + onConfirm={handleSubmit(submit)} + open={dialogOpen} + titleText='Legg til deltager'> + + + + ); +}; + +export default EventUserRegistrator; From c5766509a7e8f36f7a1bd812112789441fddeeda Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 6 Nov 2023 09:16:46 +0100 Subject: [PATCH 007/135] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7cb5001..162497c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ## Neste versjon +## versjon 2023.06.11 - ✨ **Arrangement**. Du kan nå se hvilken plass du har på ventelisten. - ✨ **Arrangement**. Admins kan nå manuelt legge til deltagere på et arrangement. - ⚡ **Kalender**. Kalender pop-up viser viser infromasjonen bedre. From 6f3760d12decb8f205c458a415a0b0c03661eeb3 Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Mon, 6 Nov 2023 09:24:00 +0100 Subject: [PATCH 008/135] Trigger build From 47cde6322f51c6bebdc294c17aa744713a8e3f1c Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:36:33 +0100 Subject: [PATCH 009/135] made page for creating and deleting QR codes (#907) * made page for creating and deleting QR codes * added error for invalid url, and download option * commit * fixed the error with deleting qr code * Update CHANGELOG.md * added error for invalid url * changed to qr generations at frontend * format * refactored to use QR code generator at frontend, and styled the component * fixes * format --- CHANGELOG.md | 3 + src/AppRoutes.tsx | 2 + src/URLS.tsx | 1 + src/api/api.tsx | 7 ++ src/components/navigation/Navigation.tsx | 1 + src/hooks/QRCode.tsx | 29 +++++++ src/pages/QRCodes/components/QRCodeItem.tsx | 86 +++++++++++++++++++++ src/pages/QRCodes/index.tsx | 77 ++++++++++++++++++ src/types/Misc.tsx | 7 ++ 9 files changed, 213 insertions(+) create mode 100644 src/hooks/QRCode.tsx create mode 100644 src/pages/QRCodes/components/QRCodeItem.tsx create mode 100644 src/pages/QRCodes/index.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 162497c6..257129db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ - ⚡ **Kalender**. Kalender pop-up viser viser infromasjonen bedre. - ✨ **Bannere**. Tidsbegrensede bannere kan nå opprettes. +## versjon 2023.14.10 +- ✨ **QR-kode generator**. Brukere kan nå generere sine egne QR koder fra en url. + ## versjon 2023.24.09 - 🎨 **Fult navn**. Kontaktperson på arrangementer vil nå bli vist med fult navn. diff --git a/src/AppRoutes.tsx b/src/AppRoutes.tsx index 7b592703..6699285e 100644 --- a/src/AppRoutes.tsx +++ b/src/AppRoutes.tsx @@ -48,6 +48,7 @@ const LogIn = lazy(() => import('pages/LogIn')); const NewsAdministration = lazy(() => import('pages/NewsAdministration')); const Wiki = lazy(() => import('pages/Wiki')); const ShortLinks = lazy(() => import('pages/ShortLinks')); +const QRCodes = lazy(() => import('pages/QRCodes')); const SignUp = lazy(() => import('pages/SignUp')); const StrikeAdmin = lazy(() => import('pages/StrikeAdmin')); const Toddel = lazy(() => import('pages/Toddel')); @@ -148,6 +149,7 @@ const AppRoutes = () => { } />} path={`${URLS.cheatsheet}:studyId/:classId/`} /> } />} path={`${URLS.cheatsheet}*`} /> } />} path={URLS.shortLinks} /> + } />} path={URLS.qrCodes} /> } />} path={URLS.bannerAdmin}> } /> diff --git a/src/URLS.tsx b/src/URLS.tsx index 5c490520..c679fde0 100644 --- a/src/URLS.tsx +++ b/src/URLS.tsx @@ -52,6 +52,7 @@ const URLS = { profile: '/profil/', signup: '/ny-bruker/', shortLinks: '/linker/', + qrCodes: '/qr-koder/', gallery: '/galleri/', userAdmin: '/admin/brukere/', strikeAdmin: '/admin/prikker/', diff --git a/src/api/api.tsx b/src/api/api.tsx index fa82760e..8c3033b8 100644 --- a/src/api/api.tsx +++ b/src/api/api.tsx @@ -48,6 +48,7 @@ import { PaginationResponse, Picture, PublicRegistration, + QRCode, Registration, RequestResponse, ShortLink, @@ -96,6 +97,7 @@ export const NOTIFICATIONS_ENDPOINT = 'notifications'; export const NOTIFICATION_SETTINGS_ENDPOINT = 'notification-settings'; export const WIKI_ENDPOINT = 'pages'; export const SHORT_LINKS_ENDPOINT = 'short-links'; +export const QR_CODE_ENDPOINT = 'qr-codes'; export const STRIKES_ENDPOINT = 'strikes'; export const SUBMISSIONS_ENDPOINT = 'submissions'; export const USERS_ENDPOINT = 'users'; @@ -231,6 +233,11 @@ export default { createShortLink: (item: ShortLink) => IFetch({ method: 'POST', url: `${SHORT_LINKS_ENDPOINT}/`, data: item }), deleteShortLink: (slug: string) => IFetch({ method: 'DELETE', url: `${SHORT_LINKS_ENDPOINT}/${slug}/` }), + // QR codes + getQRCodes: (filters?: any) => IFetch>({ method: 'GET', url: `${QR_CODE_ENDPOINT}/`, data: filters || {} }), + createQRCode: (item: QRCode) => IFetch({ method: 'POST', url: `${QR_CODE_ENDPOINT}/`, data: item }), + deleteQRCode: (id: number) => IFetch({ method: 'DELETE', url: `${QR_CODE_ENDPOINT}/${String(id)}/` }), + // Gallery getGallery: (id: Gallery['id']) => IFetch({ method: 'GET', url: `${GALLERY_ENDPOINT}/${id}/` }), getGalleries: (filters?: any) => IFetch>({ method: 'GET', url: `${GALLERY_ENDPOINT}/`, data: filters || {} }), diff --git a/src/components/navigation/Navigation.tsx b/src/components/navigation/Navigation.tsx index a12963a0..8bb12668 100644 --- a/src/components/navigation/Navigation.tsx +++ b/src/components/navigation/Navigation.tsx @@ -142,6 +142,7 @@ const NavigationContent = ({ children }: NavigationProps) => { items: [ { text: 'Kokebok', to: URLS.cheatsheet }, { text: 'Link-forkorter', to: URLS.shortLinks }, + { text: 'QR koder', to: URLS.qrCodes }, { text: 'Badges ledertavler', to: URLS.badges.index }, { text: 'Galleri', to: URLS.gallery }, ], diff --git a/src/hooks/QRCode.tsx b/src/hooks/QRCode.tsx new file mode 100644 index 00000000..58450d23 --- /dev/null +++ b/src/hooks/QRCode.tsx @@ -0,0 +1,29 @@ +import { useMutation, UseMutationResult, useQuery, useQueryClient } from 'react-query'; + +import { QRCode, RequestResponse } from 'types'; + +import API from 'api/api'; + +export const QR_CODE_QUERY_KEY = 'qr-code'; + +export const useQRCodes = () => { + return useQuery, RequestResponse>([QR_CODE_QUERY_KEY], () => API.getQRCodes()); +}; + +export const useCreateQRCode = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation((item) => API.createQRCode(item), { + onSuccess: () => { + queryClient.invalidateQueries(QR_CODE_QUERY_KEY); + }, + }); +}; + +export const useDeleteQRCode = (id: number): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation(() => API.deleteQRCode(id), { + onSuccess: () => { + queryClient.invalidateQueries(QR_CODE_QUERY_KEY); + }, + }); +}; diff --git a/src/pages/QRCodes/components/QRCodeItem.tsx b/src/pages/QRCodes/components/QRCodeItem.tsx new file mode 100644 index 00000000..6c785fdf --- /dev/null +++ b/src/pages/QRCodes/components/QRCodeItem.tsx @@ -0,0 +1,86 @@ +import DeleteIcon from '@mui/icons-material/DeleteRounded'; +import FileDownloadIcon from '@mui/icons-material/FileDownload'; +import { Box, Button, Typography } from '@mui/material'; +import { QRCodeCanvas } from 'qrcode.react'; +import { useState } from 'react'; + +import { QRCode } from 'types'; + +import { useDeleteQRCode } from 'hooks/QRCode'; +import { useSnackbar } from 'hooks/Snackbar'; + +import Dialog from 'components/layout/Dialog'; +import Paper from 'components/layout/Paper'; + +export type QRCodeItemProps = { + qrCode: QRCode; +}; + +const QRCodeItem = ({ qrCode }: QRCodeItemProps) => { + const [removeDialogOpen, setRemoveDialogOpen] = useState(false); + const deleteQRCode = useDeleteQRCode(qrCode.id || -1); + const showSnackbar = useSnackbar(); + + const remove = async () => { + deleteQRCode.mutate(null, { + onSuccess: () => { + showSnackbar('QR koden ble slettet', 'success'); + }, + onError: (e) => { + showSnackbar(e.detail, 'error'); + }, + }); + }; + + const download = () => { + const canvas = document.getElementById(qrCode.id.toString()) as HTMLCanvasElement | null; + + if (canvas) { + const image = canvas.toDataURL('image/png'); + + const link = document.createElement('a'); + + link.download = `${qrCode.name}.png`; + + link.href = image; + + link.click(); + } + }; + + return ( + + + {qrCode.name} + + + + +
+ + +
+ setRemoveDialogOpen(false)} + onConfirm={remove} + open={removeDialogOpen} + titleText='Er du sikker?' + /> +
+ ); +}; + +export default QRCodeItem; diff --git a/src/pages/QRCodes/index.tsx b/src/pages/QRCodes/index.tsx new file mode 100644 index 00000000..1df2abd5 --- /dev/null +++ b/src/pages/QRCodes/index.tsx @@ -0,0 +1,77 @@ +import { Grid, Stack, Typography } from '@mui/material'; +import { useForm } from 'react-hook-form'; + +import { QRCode } from 'types'; + +import { useCreateQRCode, useQRCodes } from 'hooks/QRCode'; +import { useSnackbar } from 'hooks/Snackbar'; +import { useAnalytics } from 'hooks/Utils'; + +import SubmitButton from 'components/inputs/SubmitButton'; +import TextField from 'components/inputs/TextField'; +import Banner from 'components/layout/Banner'; +import Paper from 'components/layout/Paper'; +import NotFoundIndicator from 'components/miscellaneous/NotFoundIndicator'; +import Page from 'components/navigation/Page'; + +import QRCodeItem from './components/QRCodeItem'; + +const QRCodes = () => { + const { event } = useAnalytics(); + const { data, error, isFetching } = useQRCodes(); + const createQRCode = useCreateQRCode(); + const showSnackbar = useSnackbar(); + const { register, formState, handleSubmit, reset } = useForm(); + + const create = (data: QRCode) => { + createQRCode.mutate(data, { + onSuccess: () => { + showSnackbar('QR koden ble opprettet', 'success'); + reset(); + event('create', 'qr-code', `Created ${data.name}`); + }, + onError: (e) => { + showSnackbar(e.detail, 'error'); + }, + }); + }; + + return ( + } options={{ title: 'QR koder' }}> + + + {error && {error.detail}} + {data !== undefined && ( + <> + {!data.length && } + {data.map((qrCode) => ( + + ))} + + )} + + + + + Ny QR kode + + + + Opprett + + + + + + ); +}; + +export default QRCodes; diff --git a/src/types/Misc.tsx b/src/types/Misc.tsx index 61cd2c85..d34d3ae1 100644 --- a/src/types/Misc.tsx +++ b/src/types/Misc.tsx @@ -79,3 +79,10 @@ export interface Warning { type: WarningType; updated_at: string; } + +export interface QRCode { + id: number; + created_at: string; + name: string; + content: string; +} From 932a6cea1696410381dbeb859a134135d94df87e Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Thu, 16 Nov 2023 23:20:29 +0100 Subject: [PATCH 010/135] Activity (#922) * first version * changed layout for activities on landing page * changed limit for activities on landing page --- .../miscellaneous/EventListItem.tsx | 14 +- .../components/ActivitiesDefaultView.tsx | 151 ++++++++++++++++++ .../Events/components/EventsDefaultView.tsx | 13 +- src/pages/Events/index.tsx | 9 +- .../components/ActivityEventsListView.tsx | 76 +++++++++ .../Landing/components/EventsCalendarView.tsx | 15 +- src/pages/Landing/components/EventsView.tsx | 27 ++-- src/theme.tsx | 3 + 8 files changed, 290 insertions(+), 18 deletions(-) create mode 100644 src/pages/Events/components/ActivitiesDefaultView.tsx create mode 100644 src/pages/Landing/components/ActivityEventsListView.tsx diff --git a/src/components/miscellaneous/EventListItem.tsx b/src/components/miscellaneous/EventListItem.tsx index 4d24a37b..4746be24 100644 --- a/src/components/miscellaneous/EventListItem.tsx +++ b/src/components/miscellaneous/EventListItem.tsx @@ -81,8 +81,6 @@ const EventListItem = ({ event, sx }: EventListItemProps) => { const { observe, width } = useDimensions(); const theme = useTheme(); - const getColor = () => theme.palette.colors[event.organizer?.slug.toLowerCase() === Groups.NOK.toLowerCase() ? 'nok_event' : 'other_event']; - const [height, titleFontSize, contentFontSize] = useMemo(() => { if (width < 400) { return [68, 18, 13]; @@ -97,6 +95,18 @@ const EventListItem = ({ event, sx }: EventListItemProps) => { const { data: categories = [] } = useCategories(); const categoryLabel = `${event.organizer ? `${event.organizer.name} | ` : ''}${categories.find((c) => c.id === event.category)?.text || 'Laster...'}`; + const getColor = () => { + if (categories.find((c) => c.id === event.category)?.text === 'Aktivitet') { + return theme.palette.colors.activity_event; + } + + if (event.organizer?.slug.toLowerCase() === Groups.NOK.toLowerCase()) { + return theme.palette.colors.nok_event; + } + + return theme.palette.colors.other_event; + }; + return ( ({ + grid: { + display: 'grid', + gridTemplateColumns: '3fr 1fr', + gridGap: theme.spacing(2), + alignItems: 'self-start', + paddingBottom: theme.spacing(2), + + [theme.breakpoints.down('lg')]: { + gridTemplateColumns: '1fr', + }, + }, + list: { + display: 'grid', + gridTemplateColumns: '1fr', + gap: theme.spacing(1), + [theme.breakpoints.down('lg')]: { + order: 1, + }, + }, + settings: { + display: 'grid', + gridGap: theme.spacing(1), + position: 'sticky', + top: 80, + + [theme.breakpoints.down('lg')]: { + order: 0, + position: 'static', + top: 0, + }, + }, +})); + +type Filters = { + activity: boolean; + search?: string; + open_for_sign_up?: boolean; + user_favorite?: boolean; + expired: boolean; +}; + +const ActivitiesDefaultView = () => { + const isAuthenticated = useIsAuthenticated(); + const { event } = useAnalytics(); + const getInitialFilters = useCallback((): Filters => { + const params = new URLSearchParams(location.search); + const activity = true; + const expired = params.get('expired') ? Boolean(params.get('expired') === 'true') : false; + const open_for_sign_up = params.get('open_for_sign_up') ? Boolean(params.get('open_for_sign_up') === 'true') : undefined; + const user_favorite = params.get('user_favorite') ? Boolean(params.get('user_favorite') === 'true') : undefined; + const search = params.get('search') || undefined; + return { activity, expired, search, open_for_sign_up, user_favorite }; + }, []); + const { classes } = useStyles(); + const navigate = useNavigate(); + const lgDown = useMediaQuery((theme: Theme) => theme.breakpoints.down('lg')); + const [filters, setFilters] = useState(getInitialFilters()); + const { data, error, hasNextPage, fetchNextPage, isLoading, isFetching } = useEvents(filters); + const events = useMemo(() => (data ? data.pages.map((page) => page.results).flat() : []), [data]); + const { register, control, handleSubmit, setValue, formState } = useForm({ defaultValues: getInitialFilters() }); + const isEmpty = useMemo(() => (data !== undefined ? !data.pages.some((page) => Boolean(page.results.length)) : false), [data]); + + const resetFilters = () => { + setValue('search', ''); + setValue('expired', false); + setValue('user_favorite', false); + setFilters({ activity: true, expired: false, open_for_sign_up: false, user_favorite: false }); + navigate(`${location.pathname}${argsToParams({ expired: false })}`, { replace: true }); + }; + + const search = (data: Filters) => { + event('search', 'events', JSON.stringify(data)); + setFilters(data); + navigate(`${location.pathname}${argsToParams(data)}`, { replace: true }); + !lgDown || setSearchFormExpanded((prev) => !prev); + }; + + const [searchFormExpanded, setSearchFormExpanded] = useState(false); + + const SearchForm = () => ( +
+ + + + {isAuthenticated && } + + Søk + + + + + ); + + return ( + <> +
+
+ {isLoading && } + {isEmpty && } + {error && {error.detail}} + {data !== undefined && ( + fetchNextPage()}> + + {events.map((event) => ( + + ))} + + + )} + {isFetching && } +
+ {lgDown ? ( +
+ setSearchFormExpanded((prev) => !prev)}> + + +
+ ) : ( + + + + )} +
+ + ); +}; + +export default ActivitiesDefaultView; diff --git a/src/pages/Events/components/EventsDefaultView.tsx b/src/pages/Events/components/EventsDefaultView.tsx index 00267f62..eef4fb76 100644 --- a/src/pages/Events/components/EventsDefaultView.tsx +++ b/src/pages/Events/components/EventsDefaultView.tsx @@ -88,6 +88,7 @@ const EventsDefaultView = () => { setValue('category', ''); setValue('search', ''); setValue('expired', false); + setValue('user_favorite', false); setFilters({ expired: false, open_for_sign_up: false, user_favorite: false }); navigate(`${location.pathname}${argsToParams({ expired: false })}`, { replace: true }); }; @@ -106,11 +107,13 @@ const EventsDefaultView = () => { {Boolean(categories.length) && ( )} diff --git a/src/pages/Events/index.tsx b/src/pages/Events/index.tsx index e82c92d3..bff3dd93 100644 --- a/src/pages/Events/index.tsx +++ b/src/pages/Events/index.tsx @@ -1,3 +1,4 @@ +import CelebrationIcon from '@mui/icons-material/Celebration'; import DateRange from '@mui/icons-material/DateRangeRounded'; import Reorder from '@mui/icons-material/ReorderRounded'; import { Collapse, Skeleton } from '@mui/material'; @@ -9,12 +10,15 @@ import Banner from 'components/layout/Banner'; import Tabs from 'components/layout/Tabs'; import Page from 'components/navigation/Page'; +import ActivitiesDefaultView from './components/ActivitiesDefaultView'; + const EventsCalendarView = lazy(() => import(/* webpackChunkName: "events_calendar" */ 'pages/Landing/components/EventsCalendarView')); const Events = () => { const listTab = { value: 'list', label: 'Liste', icon: Reorder }; + const activityTab = { value: 'activity', label: 'Aktiviteter', icon: CelebrationIcon }; const calendarTab = { value: 'calendar', label: 'Kalender', icon: DateRange }; - const tabs = [listTab, calendarTab]; + const tabs = [listTab, activityTab, calendarTab]; const [tab, setTab] = useState(listTab.value); return ( @@ -23,6 +27,9 @@ const Events = () => { + + + }> diff --git a/src/pages/Landing/components/ActivityEventsListView.tsx b/src/pages/Landing/components/ActivityEventsListView.tsx new file mode 100644 index 00000000..1d44747b --- /dev/null +++ b/src/pages/Landing/components/ActivityEventsListView.tsx @@ -0,0 +1,76 @@ +import { Stack, styled, Theme, Typography, useMediaQuery } from '@mui/material'; +import { useCallback, useState } from 'react'; + +import { useEvents } from 'hooks/Event'; + +import EventListItem, { EventListItemLoading } from 'components/miscellaneous/EventListItem'; + +const Container = styled('div')(({ theme }) => ({ + display: 'grid', + alignItems: 'self-start', + gridTemplateColumns: '1fr 1fr', + gap: theme.spacing(1), +})); + +const Text = styled(Typography)(({ theme }) => ({ + color: theme.palette.text.secondary, + p: 0.5, +})); + +const NO_OF_EVENTS_TO_SHOW = 6; +const NO_OF_EVENTS_TO_SHOW_MD_DOWN = 4; + +type Filters = { + activity: boolean; +}; + +const ActivityEventsListView = () => { + const mdDown = useMediaQuery((theme: Theme) => theme.breakpoints.down('md')); + const getInitialFilters = useCallback((): Filters => { + const activity = true; + return { activity }; + }, []); + const [filters] = useState(getInitialFilters()); + + const { data, isLoading } = useEvents(filters); + + if (isLoading) { + return ( + + + + + + ); + } else if (!data?.pages[0]?.results.length) { + return ( + + Ingen kommende arrangementer + + ); + } else if (mdDown) { + return ( + + {data?.pages[0]?.results.slice(0, NO_OF_EVENTS_TO_SHOW_MD_DOWN).map((event) => ( + + ))} + + ); + } + + return ( + + {data?.pages[0].results.length ? ( + data?.pages[0]?.results.slice(0, NO_OF_EVENTS_TO_SHOW).map((event) => ) + ) : ( + + + Ingen kommende aktiviteter + + + )} + + ); +}; + +export default ActivityEventsListView; diff --git a/src/pages/Landing/components/EventsCalendarView.tsx b/src/pages/Landing/components/EventsCalendarView.tsx index 3e6ad509..63099125 100644 --- a/src/pages/Landing/components/EventsCalendarView.tsx +++ b/src/pages/Landing/components/EventsCalendarView.tsx @@ -7,6 +7,7 @@ import { ReactNode, useEffect, useMemo, useState } from 'react'; import { Category, EventList } from 'types'; import { Groups } from 'types/Enums'; +import { useCategories } from 'hooks/Categories'; import { useEvents } from 'hooks/Event'; import { useAnalytics } from 'hooks/Utils'; @@ -40,7 +41,19 @@ const Appointment = ({ children, data }: AppointmentProps) => { setAnchorEl(null); }; - const getColor = (event: EventList) => theme.palette.colors[event.organizer?.slug.toLowerCase() === Groups.NOK.toLowerCase() ? 'nok_event' : 'other_event']; + const { data: categories = [] } = useCategories(); + + const getColor = (event: EventList) => { + if (categories.find((c) => c.id === event.category)?.text === 'Aktivitet') { + return theme.palette.colors.activity_event; + } + + if (event.organizer?.slug.toLowerCase() === Groups.NOK.toLowerCase()) { + return theme.palette.colors.nok_event; + } + + return theme.palette.colors.other_event; + }; return ( <> + ); + } + return ( + + ); +}; diff --git a/src/components/miscellaneous/reactions/EmojiPickHandler.tsx b/src/components/miscellaneous/reactions/EmojiPickHandler.tsx new file mode 100644 index 00000000..99ea7ff9 --- /dev/null +++ b/src/components/miscellaneous/reactions/EmojiPickHandler.tsx @@ -0,0 +1,69 @@ +import AddReactionOutlinedIcon from '@mui/icons-material/AddReactionOutlined'; +import { Button, Container, Dialog as MuiDialog } from '@mui/material'; +import EmojiPicker, { EmojiClickData } from 'emoji-picker-react'; +import { useState } from 'react'; + +import { useCreateReaction, useUpdateReaction } from 'hooks/EmojiReaction'; +import { useSnackbar } from 'hooks/Snackbar'; +import { useUser } from 'hooks/User'; + +import { ReactionHandlerProps } from './ReactionHandler'; + +export const EmojiPickerHandler = ({ data, content_type }: ReactionHandlerProps) => { + const user = useUser(); + const showSnackbar = useSnackbar(); + + const createReaction = useCreateReaction(); + const updateReaction = useUpdateReaction(); + + const [open, setOpen] = useState(false); + + const openPopover = () => setOpen(true); + const closePopover = () => setOpen(false); + + const handleEmojiPick = (emoji: EmojiClickData) => { + const userReaction = user.data?.user_id ? data?.reactions?.find((r) => r.user?.user_id === user.data?.user_id) : null; + + if (userReaction) { + updateReaction.mutate( + { reaction_id: userReaction.reaction_id, emoji: emoji.emoji, content_type: content_type, object_id: data.id }, + { + onSuccess: () => { + showSnackbar('Reaksjon oppdatert', 'success'); + closePopover(); + }, + onError: (e) => { + showSnackbar(e.detail, 'error'); + closePopover(); + }, + }, + ); + } else { + createReaction.mutate( + { emoji: emoji.emoji, content_type: content_type, object_id: data.id }, + { + onSuccess: () => { + showSnackbar('Reaksjon lagt til', 'success'); + closePopover(); + }, + onError: (e) => { + showSnackbar(e.detail, 'error'); + closePopover(); + }, + }, + ); + } + }; + + return ( + + + + + + + + ); +}; diff --git a/src/components/miscellaneous/reactions/EmojiShowAll.tsx b/src/components/miscellaneous/reactions/EmojiShowAll.tsx new file mode 100644 index 00000000..c0947722 --- /dev/null +++ b/src/components/miscellaneous/reactions/EmojiShowAll.tsx @@ -0,0 +1,71 @@ +import ArrowOutwardIcon from '@mui/icons-material/ArrowOutward'; +import { Button, Collapse, Container } from '@mui/material'; +import { useState } from 'react'; + +import { ContentType } from 'types/ContentType'; + +import Dialog from 'components/layout/Dialog'; +import Tabs from 'components/layout/Tabs'; + +import { ReactionListItem } from './ReactionListItem'; + +export const EmojiShowAll = (data: ContentType) => { + const [open, setOpen] = useState(false); + + const openDialog = () => setOpen(true); + const closeDialog = () => setOpen(false); + + const emojiCollections: Record = {}; + data?.reactions?.forEach((r) => { + emojiCollections[r.emoji] = (emojiCollections[r.emoji] || 0) + 1; + }); + + const topEmojiCollections = Object.entries(emojiCollections) + .sort((a, b) => b[1] - a[1]) + .map((entry) => ({ + emoji: entry[0], + count: entry[1], + })); + + const tabs = [ + { + value: 'all', + label: `Alle (${data.reactions?.length})`, + }, + ]; + + topEmojiCollections.map((emoji) => + tabs.push({ + value: emoji.emoji, + label: `${emoji.emoji} (${emoji.count})`, + }), + ); + + const [tab, setTab] = useState('all'); + + return ( + + + + + + + {data?.reactions?.map((reaction, index) => ( + + ))} + + {tabs.slice(1).map((reactionTab, index) => ( + + {data?.reactions + ?.filter((reaction) => reaction.emoji === reactionTab.value) + .map((reaction, index) => ( + + ))} + + ))} + + + ); +}; diff --git a/src/components/miscellaneous/reactions/EmojiShowcase.tsx b/src/components/miscellaneous/reactions/EmojiShowcase.tsx new file mode 100644 index 00000000..3de3026d --- /dev/null +++ b/src/components/miscellaneous/reactions/EmojiShowcase.tsx @@ -0,0 +1,47 @@ +import { Stack } from '@mui/material'; + +import { useUser } from 'hooks/User'; + +import { EmojiItem } from './EmojiItem'; +import { ReactionHandlerProps } from './ReactionHandler'; + +export const EmojiShowcase = ({ data, content_type }: ReactionHandlerProps) => { + const user = useUser(); + const emojiCollections: Record = {}; + + data?.reactions?.forEach((r) => { + emojiCollections[r.emoji] = (emojiCollections[r.emoji] || 0) + 1; + }); + + const topEmojiCollections = Object.entries(emojiCollections) + .map(([emoji, count]) => ({ emoji, count })) + .sort((a, b) => b.count - a.count); + + const userEmoji = data?.reactions?.find((r) => r.user?.user_id === user.data?.user_id)?.emoji; + + if (userEmoji) { + return ( + + emoji.emoji === userEmoji) || { emoji: userEmoji, count: 0 }} + /> + {topEmojiCollections + .filter((emoji) => emoji.emoji !== userEmoji) + .slice(0, 2) + .map((emoji, index) => ( + + ))} + + ); + } + + return ( + + {topEmojiCollections.slice(0, 3).map((emoji, index) => ( + + ))} + + ); +}; diff --git a/src/components/miscellaneous/reactions/ReactionHandler.tsx b/src/components/miscellaneous/reactions/ReactionHandler.tsx new file mode 100644 index 00000000..4466c614 --- /dev/null +++ b/src/components/miscellaneous/reactions/ReactionHandler.tsx @@ -0,0 +1,34 @@ +import { Stack, styled } from '@mui/material'; + +import { ContentType } from 'types/ContentType'; + +import Paper from 'components/layout/Paper'; + +import { EmojiPickerHandler } from './EmojiPickHandler'; +import { EmojiShowAll } from './EmojiShowAll'; +import { EmojiShowcase } from './EmojiShowcase'; + +const EmojiPaper = styled(Paper)(({ theme }) => ({ + padding: '4px', + borderRadius: '8px', + backgroundColor: theme.palette.background.paper, +})); + +export type ReactionHandlerProps = { + data: ContentType; + content_type: 'news' | 'event'; +}; + +export const ReactionHandler = ({ data, content_type }: ReactionHandlerProps) => { + return ( + + {data.reactions?.length ? ( + + + + ) : null} + + + + ); +}; diff --git a/src/components/miscellaneous/reactions/ReactionListItem.tsx b/src/components/miscellaneous/reactions/ReactionListItem.tsx new file mode 100644 index 00000000..192d8833 --- /dev/null +++ b/src/components/miscellaneous/reactions/ReactionListItem.tsx @@ -0,0 +1,27 @@ +import { Grid, Stack, Typography } from '@mui/material'; + +import { Reaction } from 'types'; + +import Paper from 'components/layout/Paper'; + +import Avatar from '../Avatar'; + +export const ReactionListItem = (reaction: Reaction) => { + return ( + + + + + + + + {reaction.user?.first_name} {reaction.user?.last_name} + + + + {reaction.emoji} + + + + ); +}; diff --git a/src/hooks/EmojiReaction.tsx b/src/hooks/EmojiReaction.tsx new file mode 100644 index 00000000..9fcd19c7 --- /dev/null +++ b/src/hooks/EmojiReaction.tsx @@ -0,0 +1,39 @@ +import { useMutation, UseMutationResult, useQueryClient } from 'react-query'; + +import type { Reaction, ReactionMutate, RequestResponse } from 'types'; + +import API from 'api/api'; + +import { EVENT_QUERY_KEYS } from './Event'; + +const NEWS_QUERY_KEY = 'news'; + +export const useCreateReaction = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation((newReaction: ReactionMutate) => API.createReaction(newReaction), { + onSuccess: () => { + queryClient.invalidateQueries(NEWS_QUERY_KEY); + queryClient.invalidateQueries(EVENT_QUERY_KEYS.all); + }, + }); +}; + +export const useDeleteReaction = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation((reactionId: Reaction['reaction_id']) => API.deleteReaction(reactionId), { + onSuccess: () => { + queryClient.invalidateQueries(NEWS_QUERY_KEY); + queryClient.invalidateQueries(EVENT_QUERY_KEYS.all); + }, + }); +}; + +export const useUpdateReaction = (): UseMutationResult => { + const queryClient = useQueryClient(); + return useMutation((updatedReaction: Reaction) => API.updateReaction(updatedReaction.reaction_id, updatedReaction), { + onSuccess: () => { + queryClient.invalidateQueries(NEWS_QUERY_KEY); + queryClient.invalidateQueries(EVENT_QUERY_KEYS.all); + }, + }); +}; diff --git a/src/pages/EventAdministration/components/EventEditor.tsx b/src/pages/EventAdministration/components/EventEditor.tsx index f64ec226..4d446ec3 100644 --- a/src/pages/EventAdministration/components/EventEditor.tsx +++ b/src/pages/EventAdministration/components/EventEditor.tsx @@ -61,6 +61,7 @@ type FormValues = Pick< | 'can_cause_strikes' | 'enforces_previous_strikes' | 'contact_person' + | 'emojis_allowed' > & { end_date: Date; end_registration_at: Date; @@ -110,6 +111,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { price: newValues?.paid_information?.price, paytime: newValues?.paid_information?.paytime && parse(newValues?.paid_information.paytime, 'HH:mm:ss', new Date()), contact_person: newValues?.contact_person || null, + emojis_allowed: newValues?.emojis_allowed || false, }); if (!newValues) { setTimeout(() => updateDates(new Date()), 10); @@ -174,6 +176,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { start_date: values.start_date.toJSON(), start_registration_at: values.start_registration_at.toJSON(), contact_person: values.contact_person, + emojis_allowed: values.emojis_allowed, paid_information: { price: values?.price, }, @@ -220,6 +223,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { } : undefined, contact_person: data.contact_person?.user_id || null, + emojis_allowed: data.emojis_allowed, } as EventMutate; if (eventId) { await updateEvent.mutate(event, { @@ -498,6 +502,18 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { type='time' /> + + Tillat reaksjoner + Bestemmer om en bruker skal kunne reagere med emojier. + + } + name='emojis_allowed' + type='checkbox' + /> diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index ea082849..61c9a003 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -53,6 +53,7 @@ import AspectRatioImg, { AspectRatioLoading } from 'components/miscellaneous/Asp import DetailContent, { DetailContentLoading } from 'components/miscellaneous/DetailContent'; import MarkdownRenderer from 'components/miscellaneous/MarkdownRenderer'; import QRButton from 'components/miscellaneous/QRButton'; +import { ReactionHandler } from 'components/miscellaneous/reactions/ReactionHandler'; import ShareButton from 'components/miscellaneous/ShareButton'; const DetailsPaper = styled(Paper)(({ theme }) => ({ @@ -437,6 +438,13 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { + + {data.emojis_allowed && user && ( + + + + )} + {lgDown && } {registration && data.paid_information && !registration.has_paid_order && ( diff --git a/src/pages/News/index.tsx b/src/pages/News/index.tsx index 49edcd52..2ed75cf4 100644 --- a/src/pages/News/index.tsx +++ b/src/pages/News/index.tsx @@ -12,6 +12,7 @@ import Page from 'components/navigation/Page'; const NewsGrid = styled('div')(({ theme }) => ({ display: 'grid', + marginBottom: theme.spacing(2), gridTemplateColumns: '1fr 1fr 1fr', gridGap: theme.spacing(1), [theme.breakpoints.down('lg')]: { diff --git a/src/pages/NewsAdministration/components/NewsEditor.tsx b/src/pages/NewsAdministration/components/NewsEditor.tsx index aa234503..af799e74 100644 --- a/src/pages/NewsAdministration/components/NewsEditor.tsx +++ b/src/pages/NewsAdministration/components/NewsEditor.tsx @@ -1,7 +1,10 @@ +import Checkbox from '@mui/material/Checkbox'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormGroup from '@mui/material/FormGroup'; import Grid from '@mui/material/Grid'; import LinearProgress from '@mui/material/LinearProgress'; import { makeStyles } from 'makeStyles'; -import { useCallback, useEffect, useMemo } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { useForm } from 'react-hook-form'; import { News } from 'types'; @@ -41,13 +44,14 @@ export type NewsEditorProps = { goToNews: (newNews: number | null) => void; }; -type FormValues = Pick; +type FormValues = Pick; const NewsEditor = ({ newsId, goToNews }: NewsEditorProps) => { const showSnackbar = useSnackbar(); const { classes } = useStyles(); const { control, handleSubmit, register, formState, getValues, reset, watch, setValue } = useForm(); const { data, isError, isLoading } = useNewsById(newsId || -1); + const showEmojiAllowed = data?.emojis_allowed; const createNews = useCreateNews(); const updateNews = useUpdateNews(newsId || -1); const deleteNews = useDeleteNews(newsId || -1); @@ -56,6 +60,18 @@ const NewsEditor = ({ newsId, goToNews }: NewsEditorProps) => { [createNews.isLoading, updateNews.isLoading, deleteNews.isLoading], ); + const [checkboxState, setCheckboxState] = useState(false); + + useEffect(() => { + setCheckboxState(Boolean(showEmojiAllowed)); + }, [showEmojiAllowed]); + + const handleCheckboxChange = (e: React.ChangeEvent) => { + const isChecked = e.target.checked; + setValue('emojis_allowed', isChecked); + setCheckboxState(isChecked); + }; + useEffect(() => { !isError || goToNews(null); }, [isError]); @@ -69,6 +85,7 @@ const NewsEditor = ({ newsId, goToNews }: NewsEditorProps) => { body: newValues?.body || '', image: newValues?.image || '', image_alt: newValues?.image_alt || '', + emojis_allowed: newValues?.emojis_allowed || false, }); }, [reset], @@ -141,6 +158,12 @@ const NewsEditor = ({ newsId, goToNews }: NewsEditorProps) => { + + } + label='Tillatt reaksjoner' + /> + {newsId ? 'Oppdater nyhet' : 'Opprett nyhet'} diff --git a/src/pages/NewsDetails/components/NewsRenderer.tsx b/src/pages/NewsDetails/components/NewsRenderer.tsx index ebceb94b..7a95733a 100644 --- a/src/pages/NewsDetails/components/NewsRenderer.tsx +++ b/src/pages/NewsDetails/components/NewsRenderer.tsx @@ -1,5 +1,6 @@ import { Button, Skeleton, Stack, styled, Typography } from '@mui/material'; import parseISO from 'date-fns/parseISO'; +import React from 'react'; import { usePalette } from 'react-palette'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; @@ -8,12 +9,13 @@ import { formatDate } from 'utils'; import { News } from 'types'; import { PermissionApp } from 'types/Enums'; -import { HavePermission } from 'hooks/User'; +import { HavePermission, useUser } from 'hooks/User'; import Container from 'components/layout/Container'; import Paper from 'components/layout/Paper'; import AspectRatioImg, { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; import MarkdownRenderer from 'components/miscellaneous/MarkdownRenderer'; +import { ReactionHandler } from 'components/miscellaneous/reactions/ReactionHandler'; import ShareButton from 'components/miscellaneous/ShareButton'; const TopContainer = styled('div', { shouldForwardProp: (prop) => prop !== 'bgColor' })<{ bgColor?: React.CSSProperties['backgroundColor'] }>( @@ -35,6 +37,7 @@ export type NewsRendererProps = { }; const NewsRenderer = ({ data, preview = false }: NewsRendererProps) => { const { data: palette } = usePalette(data?.image || ''); + const { data: user } = useUser(); return (
@@ -58,25 +61,30 @@ const NewsRenderer = ({ data, preview = false }: NewsRendererProps) => { )} - - - Publisert: {formatDate(parseISO(data.created_at), { time: false })} - {data.creator && ( - <> -
- Forfatter:{' '} - - {data.creator.first_name} {data.creator.last_name} - - - )} -
- + + + + Publisert: {formatDate(parseISO(data.created_at), { time: false })} + {data.creator && ( + <> +
+ Forfatter:{' '} + + {data.creator.first_name} {data.creator.last_name} + + + )} +
+
+ {data?.emojis_allowed && user && }
+ + +
); diff --git a/src/types/ContentType.tsx b/src/types/ContentType.tsx new file mode 100644 index 00000000..9e4c10f4 --- /dev/null +++ b/src/types/ContentType.tsx @@ -0,0 +1,4 @@ +import { Event } from './Event'; +import { News } from './News'; + +export type ContentType = Event | News; diff --git a/src/types/Event.tsx b/src/types/Event.tsx index 896cc81f..b8f7c629 100644 --- a/src/types/Event.tsx +++ b/src/types/Event.tsx @@ -3,6 +3,7 @@ import { BaseGroup, Group } from 'types/Group'; import { Permissions } from 'types/Misc'; import { User, UserList } from 'types/User'; +import { Reaction } from './News'; import { Order } from './Order'; export type Category = { @@ -50,6 +51,8 @@ export type Event = { enforces_previous_strikes: boolean; only_allow_prioritized: boolean; contact_person: User | null; + emojis_allowed: boolean; + reactions: Reaction[]; }; export type EventMutate = Partial> & diff --git a/src/types/News.tsx b/src/types/News.tsx index dde9578f..b62de6df 100644 --- a/src/types/News.tsx +++ b/src/types/News.tsx @@ -5,6 +5,21 @@ export type NewsRequired = Omit, 'creator'> & creator: UserBase['user_id'] | null; }; +export type Reaction = { + content_type: string; + emoji: string; + object_id: number; + reaction_id: string; + user?: Pick; +}; + +export type ReactionMutate = Pick; + +export type Emoji = { + emoji: string; + count: number; +}; + export type News = { id: number; created_at: string; @@ -15,4 +30,6 @@ export type News = { body: string; image?: string; image_alt?: string; + emojis_allowed?: boolean; + reactions?: Reaction[]; }; From a7f26576178c20383d3d86519db64b0bb0e911cc Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Fri, 15 Dec 2023 19:08:41 +0100 Subject: [PATCH 016/135] moved checkbox for emojies outside paid event collapse --- .../components/EventEditor.tsx | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/pages/EventAdministration/components/EventEditor.tsx b/src/pages/EventAdministration/components/EventEditor.tsx index 4d446ec3..60baab1d 100644 --- a/src/pages/EventAdministration/components/EventEditor.tsx +++ b/src/pages/EventAdministration/components/EventEditor.tsx @@ -502,20 +502,21 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { type='time' /> - - Tillat reaksjoner - Bestemmer om en bruker skal kunne reagere med emojier. - - } - name='emojis_allowed' - type='checkbox' - /> + + Tillat reaksjoner + Bestemmer om en bruker skal kunne reagere med emojier. + + } + name='emojis_allowed' + type='switch' + /> + From d7a6d175b781a6d73487b5b0a6dc9bc9231d05e4 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Sat, 16 Dec 2023 12:30:21 +0100 Subject: [PATCH 017/135] added id for each user in copy of participants of an event (#940) --- src/pages/EventAdministration/components/EventParticipants.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/EventAdministration/components/EventParticipants.tsx b/src/pages/EventAdministration/components/EventParticipants.tsx index 1adeba6c..1f979901 100644 --- a/src/pages/EventAdministration/components/EventParticipants.tsx +++ b/src/pages/EventAdministration/components/EventParticipants.tsx @@ -54,6 +54,7 @@ const Registrations = ({ onWait = false, eventId }: RegistrationsProps) => { return registrations .map((registration) => { const data: string[] = []; + data.push(registration.user_info.user_id); names && data.push(`${registration.user_info.first_name} ${registration.user_info.last_name}`); emails && data.push(registration.user_info.email); return data.join(','); From c3b9ab90381cdf28ddc3c40abc4d745fe6291449 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Tue, 9 Jan 2024 19:31:47 +0100 Subject: [PATCH 018/135] =?UTF-8?q?disabled=20switch=20to=20change=20from?= =?UTF-8?q?=20free=20to=20paid=20event=20if=20an=20event=20has=20reg?= =?UTF-8?q?=E2=80=A6=20(#910)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * disabled switch to change from free to paid event if an event has registrations * first version finished * Update CHANGELOG.md * format * fixed wrong disable logic for switching off paid event * Update CHANGELOG.md * fixed countdowntimer bug, so if the time is out and there is an error in the backend, the timer will disapear * fixed countdowntimer bug * added message for when time is out, explaining why the user is not kicked out before extra payment time is out * changed message for signing off event * format --- CHANGELOG.md | 2 + src/api/api.tsx | 3 + src/hooks/Payment.tsx | 16 ++++ .../components/EventEditor.tsx | 1 + .../components/CountdownTimer.tsx | 80 +++++++++++++------ .../EventDetails/components/EventRenderer.tsx | 4 +- src/types/Event.tsx | 3 +- src/types/Order.tsx | 4 +- 8 files changed, 82 insertions(+), 31 deletions(-) create mode 100644 src/hooks/Payment.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index a3701c40..5c302671 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ ## Neste versjon +- 🦟 **Vipps betaling**. Diverse bugs i betalingsløsningen er nå fikset. + ## versjon 2023.17.11 - ✨ **QR kode**. Du kan nå generere dine egne QR kode. - ✨ **Aktiviteter**. Det kan nå opprettes aktiviteter for interessegrupper. diff --git a/src/api/api.tsx b/src/api/api.tsx index 8413ca64..b6b6351f 100644 --- a/src/api/api.tsx +++ b/src/api/api.tsx @@ -104,6 +104,7 @@ export const STRIKES_ENDPOINT = 'strikes'; export const SUBMISSIONS_ENDPOINT = 'submissions'; export const USERS_ENDPOINT = 'users'; export const WARNINGS_ENDPOINT = 'warnings'; +export const PAYMENT_ENDPOINT = 'payments'; export const EMOJI_ENDPOINT = 'emojis'; export default { @@ -166,6 +167,8 @@ export default { deleteRegistration: (eventId: Event['id'], userId: User['user_id']) => IFetch({ method: 'DELETE', url: `${EVENTS_ENDPOINT}/${String(eventId)}/${EVENT_REGISTRATIONS_ENDPOINT}/${userId}/` }), + // Payments + createPaymentOrder: (item: Partial) => IFetch({ method: 'POST', url: `${PAYMENT_ENDPOINT}/`, data: item }), // Event registrations admin createRegistrationAdmin: (eventId: Event['id'], userId: User['user_id']) => IFetch({ method: 'POST', url: `${EVENTS_ENDPOINT}/${eventId}/${EVENT_REGISTRATIONS_ENDPOINT}/add/`, data: { user: userId } }), diff --git a/src/hooks/Payment.tsx b/src/hooks/Payment.tsx new file mode 100644 index 00000000..2c3b4f1e --- /dev/null +++ b/src/hooks/Payment.tsx @@ -0,0 +1,16 @@ +import { useMutation, UseMutationResult, useQueryClient } from 'react-query'; + +import { Order, RequestResponse } from 'types'; + +import API from 'api/api'; + +export const ORDER_QUERY_KEYS = 'payment'; + +export const useCreatePaymentOrder = (): UseMutationResult, RequestResponse, Partial, unknown> => { + const queryClient = useQueryClient(); + return useMutation((item) => API.createPaymentOrder(item), { + onSuccess: () => { + queryClient.invalidateQueries(ORDER_QUERY_KEYS); + }, + }); +}; diff --git a/src/pages/EventAdministration/components/EventEditor.tsx b/src/pages/EventAdministration/components/EventEditor.tsx index 60baab1d..3495a4fa 100644 --- a/src/pages/EventAdministration/components/EventEditor.tsx +++ b/src/pages/EventAdministration/components/EventEditor.tsx @@ -471,6 +471,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { 0)} formState={formState} label={ <> diff --git a/src/pages/EventDetails/components/CountdownTimer.tsx b/src/pages/EventDetails/components/CountdownTimer.tsx index 1a4e23ea..32a345a5 100644 --- a/src/pages/EventDetails/components/CountdownTimer.tsx +++ b/src/pages/EventDetails/components/CountdownTimer.tsx @@ -1,9 +1,13 @@ import styled from '@emotion/styled'; -import { Box, Typography } from '@mui/material'; -import { differenceInMilliseconds, formatDistanceStrict } from 'date-fns'; +import { Box, Button, CircularProgress, Typography } from '@mui/material'; +import { differenceInMilliseconds, formatDistanceStrict, minutesToMilliseconds } from 'date-fns'; import { nb } from 'date-fns/locale'; import { useEffect, useState } from 'react'; -import { Link } from 'react-router-dom'; + +import { Event, Order } from 'types'; + +import { useCreatePaymentOrder } from 'hooks/Payment'; +import { useSnackbar } from 'hooks/Snackbar'; import Paper from 'components/layout/Paper'; @@ -14,22 +18,17 @@ const ContentPaper = styled(Paper)({ overflowX: 'auto', }); -const getTimeDifference = (time?: Date) => { - if (!time) { - return; - } - +const getTimeDifference = (time: Date) => { const now = new Date(); const myDate = new Date(time); - return differenceInMilliseconds(myDate, now); -}; + // Add 10 minutes so that the user has time to pay + const addedTime = minutesToMilliseconds(10); -const convertTime = (milliseconds?: number) => { - if (!milliseconds) { - return; - } + return differenceInMilliseconds(new Date(myDate.getTime() + addedTime), now); +}; +const convertTime = (milliseconds: number) => { const now = new Date(); return formatDistanceStrict(new Date(now.getTime() + milliseconds), now, { @@ -37,20 +36,29 @@ const convertTime = (milliseconds?: number) => { }); }; -type Order = { - expire_date: Date; - payment_link?: string; +type Registration = { + payment_expiredate: Date; + event_id: Event['id']; }; -const CountdownTimer = ({ payment_link, expire_date }: Order) => { - const [timeLeft, setTimeLeft] = useState(convertTime(getTimeDifference(expire_date))); +const CountdownTimer = ({ payment_expiredate, event_id }: Registration) => { + // Remove 10 minutes for displaying the actual time left + const removedTime = minutesToMilliseconds(10); + + const [timeLeft, setTimeLeft] = useState(convertTime(getTimeDifference(payment_expiredate) - removedTime)); + const createPaymentOrder = useCreatePaymentOrder(); + const showSnackbar = useSnackbar(); useEffect(() => { + if (new Date(payment_expiredate) < new Date()) { + return; + } + const interval = setInterval(() => { - const distance = getTimeDifference(expire_date); + const distance = getTimeDifference(payment_expiredate); if (distance && distance > 0) { - setTimeLeft(convertTime(distance)); + setTimeLeft(convertTime(distance - removedTime)); } else { window.location.reload(); } @@ -61,12 +69,36 @@ const CountdownTimer = ({ payment_link, expire_date }: Order) => { }; }, []); + const create = (data: Partial) => { + createPaymentOrder.mutate(data, { + onSuccess: (data) => { + const payment_link = data.payment_link; + window.location.replace(payment_link || ''); + }, + onError: () => { + showSnackbar('Det skjedde en feil med oppretting av betalingsordre.', 'error'); + }, + }); + }; + + if (new Date(payment_expiredate) <= new Date()) { + return ( + + + theme.palette.text.primary }}> + Betalingstiden har gått ut. Det er ikke lenger mulig å betale for dette arrangementet. Du vil bli satt på venteliste innen kort tid. + + + + ); + } + return ( - - Betal med vipps - + theme.palette.text.primary }}> Betal innen {timeLeft} for å beholde plassen på arrangementet. diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index 61c9a003..29be13b1 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -446,8 +446,8 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { )} {lgDown && } - {registration && data.paid_information && !registration.has_paid_order && ( - + {registration && data.paid_information && !registration.has_paid_order && !registration.is_on_wait && ( + )} theme.palette.text.primary, fontSize: '2.4rem', wordWrap: 'break-word' }} variant='h1'> diff --git a/src/types/Event.tsx b/src/types/Event.tsx index b8f7c629..ea9596dc 100644 --- a/src/types/Event.tsx +++ b/src/types/Event.tsx @@ -4,7 +4,6 @@ import { Permissions } from 'types/Misc'; import { User, UserList } from 'types/User'; import { Reaction } from './News'; -import { Order } from './Order'; export type Category = { created_at: string; @@ -87,7 +86,7 @@ export type Registration = { survey_submission: UserSubmission; has_unanswered_evaluation: boolean; user_info: UserList; - order: Order; + payment_expiredate: Date; has_paid_order?: boolean; wait_queue_number?: number; }; diff --git a/src/types/Order.tsx b/src/types/Order.tsx index e6c7b5c0..efca03c0 100644 --- a/src/types/Order.tsx +++ b/src/types/Order.tsx @@ -2,11 +2,9 @@ import { Event } from 'types/Event'; import { User } from 'types/User'; export type Order = { - access: string[]; order_id: string; user_id: User['user_id']; - event_id: Event['id']; + event: Event['id']; status: string; - expire_date: Date; payment_link: string; }; From cf14ad7803f9ee4cf93221644561a8896eb968c2 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Tue, 9 Jan 2024 19:56:54 +0100 Subject: [PATCH 019/135] changed text (#944) --- src/pages/Companies/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Companies/index.tsx b/src/pages/Companies/index.tsx index 4ed5f640..5bdcee0e 100644 --- a/src/pages/Companies/index.tsx +++ b/src/pages/Companies/index.tsx @@ -74,7 +74,7 @@ Det legger mye vekt på praktisk utvikling av systemer og programmer, og student Etter selve presentasjonen reiser vi sammen ned til en resturant for bespisning og mingling med bedriftsrepresentantene. Vi kan også tilrettelegge for speed intervjuer dersom dette er ønskelig.`, instatakeover: `Ved insta-takeover får bedriften ta over instagrammen vår en hel dag. Dere vil få muligheten til å fremme bedriften på valgfri måte, og nå ut direkte til studentene.`, - trip2023: `Høsten 2023 så skal TIHLDE gjennomføre bedriftsekskursjon til Oslo med 60 av studentene våre. Dette er en god mulighet for bedriften å vise fram sine lokaler, og bli bedre kjent med studentene. Etter selve besøket så legger vi til rette for bespisning og mingling.`, + trip: `På høsten gjennomfører vi i TIHLDE en bedriftsekskursjon til Oslo med 60 av studentene våre”. Dette er en god mulighet for bedriften å vise fram sine lokaler, og bli bedre kjent med studentene. Etter selve besøket så legger vi til rette for bespisning og mingling.`, }; return ( @@ -98,7 +98,7 @@ Vi kan også tilrettelegge for speed intervjuer dersom dette er ønskelig.`, - +
From 049cb43935c06aeb79898ea1367dca89aca04bbf Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:01:49 +0100 Subject: [PATCH 020/135] changed email for strike message (#945) --- src/pages/Profile/components/ProfileStrikes.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Profile/components/ProfileStrikes.tsx b/src/pages/Profile/components/ProfileStrikes.tsx index 01de9523..dc7054ad 100644 --- a/src/pages/Profile/components/ProfileStrikes.tsx +++ b/src/pages/Profile/components/ProfileStrikes.tsx @@ -18,7 +18,7 @@ function ProfileStrikes() { Informasjon om prikksystemet finner du i arrangementsreglene.{' '} {Boolean(data.length) && ( - Uenig i en prikk? Send epost til bedpres@tihlde.org. + Uenig i en prikk? Send epost til naeringslivsminister@tihlde.org. )} From 396565b6b1cfa5e37481f9b899cd2459ba4076d7 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:08:15 +0100 Subject: [PATCH 021/135] added package for allowing iframe (#949) --- package.json | 1 + pnpm-lock.yaml | 211 +++++++++++++++++- .../miscellaneous/MarkdownRenderer.tsx | 8 +- 3 files changed, 218 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8affd79c..13451ea5 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "react-palette": "^1.0.2", "react-query": "^3.39.0", "react-router-dom": "^6.15.0", + "rehype-raw": "^7.0.0", "slugify": "^1.6.3", "tss-react": "^4.9.0", "universal-cookie": "^6.1.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3db597b7..b845d6af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,6 +110,9 @@ dependencies: react-router-dom: specifier: ^6.15.0 version: 6.15.0(react-dom@17.0.2)(react@17.0.2) + rehype-raw: + specifier: ^7.0.0 + version: 7.0.0 slugify: specifier: ^1.6.3 version: 1.6.3 @@ -1877,6 +1880,12 @@ packages: '@types/unist': 2.0.8 dev: false + /@types/hast@3.0.3: + resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} + dependencies: + '@types/unist': 2.0.8 + dev: false + /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true @@ -1891,6 +1900,12 @@ packages: '@types/unist': 2.0.8 dev: false + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: false @@ -1971,6 +1986,10 @@ packages: resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} dev: false + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: false + /@typescript-eslint/eslint-plugin@5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.48.0)(typescript@4.6.2): resolution: {integrity: sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2139,6 +2158,10 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + /@vercel/analytics@1.0.2: resolution: {integrity: sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg==} dev: false @@ -2611,6 +2634,12 @@ packages: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: false + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -2678,7 +2707,6 @@ packages: /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - dev: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -3304,10 +3332,69 @@ packages: dependencies: function-bind: 1.1.1 + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + dependencies: + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.3.0 + vfile: 6.0.1 + vfile-location: 5.0.2 + web-namespaces: 2.0.1 + dev: false + + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + dependencies: + '@types/hast': 3.0.3 + dev: false + + /hast-util-raw@9.0.1: + resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} + dependencies: + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.1.0 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + /hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + dependencies: + '@types/hast': 3.0.3 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + dev: false + /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: @@ -3320,6 +3407,10 @@ packages: react-is: 16.13.1 dev: false + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: false + /husky@8.0.1: resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==} engines: {node: '>=14'} @@ -3853,6 +3944,20 @@ packages: unist-util-visit: 4.1.2 dev: false + /mdast-util-to-hast@13.1.0: + resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + dependencies: + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + dev: false + /mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: @@ -3934,6 +4039,13 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-util-character@2.0.1: + resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: @@ -3974,6 +4086,10 @@ packages: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} dev: false + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + /micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} dev: false @@ -3998,6 +4114,14 @@ packages: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: @@ -4011,10 +4135,18 @@ packages: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} dev: false + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + /micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} dev: false + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: @@ -4278,6 +4410,12 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -4701,6 +4839,14 @@ packages: engines: {node: '>=8'} dev: true + /rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + dependencies: + '@types/hast': 3.0.3 + hast-util-raw: 9.0.1 + vfile: 6.0.1 + dev: false + /remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: @@ -5198,18 +5344,36 @@ packages: '@types/unist': 2.0.8 dev: false + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /unist-util-position@4.0.4: resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} dependencies: '@types/unist': 2.0.8 dev: false + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: '@types/unist': 2.0.8 dev: false + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: @@ -5217,6 +5381,13 @@ packages: unist-util-is: 5.2.1 dev: false + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: false + /unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: @@ -5225,6 +5396,14 @@ packages: unist-util-visit-parents: 5.1.3 dev: false + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + /universal-cookie@6.1.0: resolution: {integrity: sha512-QBpQWkFJyH9D6nP1ZjPuLDdrgYr3y9ti8OTWf6uWcZwtY06de5f10GPYv3v68LIYWU0a9J2ZF5xFR5gOdD5ZaQ==} dependencies: @@ -5292,6 +5471,13 @@ packages: resolution: {integrity: sha512-OZeJfZP+R0z9D6TmBgLq2LHzSSptGMGDGigGiEe0pr8UBe/7fdflgHlHBNDASTXB5jnFuxHpNaJywSg8YFeGng==} dev: false + /vfile-location@5.0.2: + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + dependencies: + '@types/unist': 3.0.2 + vfile: 6.0.1 + dev: false + /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: @@ -5299,6 +5485,13 @@ packages: unist-util-stringify-position: 3.0.3 dev: false + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + dev: false + /vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: @@ -5308,6 +5501,14 @@ packages: vfile-message: 3.1.4 dev: false + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: false + /vite-plugin-checker@0.6.2(eslint@8.48.0)(typescript@4.6.2)(vite@5.0.0): resolution: {integrity: sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==} engines: {node: '>=14.16'} @@ -5482,6 +5683,10 @@ packages: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} dev: true + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: false + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -5588,3 +5793,7 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false diff --git a/src/components/miscellaneous/MarkdownRenderer.tsx b/src/components/miscellaneous/MarkdownRenderer.tsx index 0df9b361..4243ac30 100644 --- a/src/components/miscellaneous/MarkdownRenderer.tsx +++ b/src/components/miscellaneous/MarkdownRenderer.tsx @@ -1,5 +1,6 @@ import { Divider, Skeleton, styled, Typography } from '@mui/material'; import { createElement, lazy, ReactNode, Suspense, useMemo } from 'react'; +import rehypeRaw from 'rehype-raw'; import { Event, JobPost, News } from 'types'; @@ -163,7 +164,12 @@ const MarkdownRenderer = ({ value }: MarkdownRendererProps) => { ))} }> - {value || ''} + + {value || ''} + ); }; From 2fb83b69515e1f0265243ef2fd190fd8c88c61ee Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 15 Jan 2024 09:55:46 +0100 Subject: [PATCH 022/135] reduced number of showcase to two for mobile fit (#950) --- src/components/miscellaneous/reactions/EmojiShowcase.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/miscellaneous/reactions/EmojiShowcase.tsx b/src/components/miscellaneous/reactions/EmojiShowcase.tsx index 3de3026d..241d093d 100644 --- a/src/components/miscellaneous/reactions/EmojiShowcase.tsx +++ b/src/components/miscellaneous/reactions/EmojiShowcase.tsx @@ -29,7 +29,7 @@ export const EmojiShowcase = ({ data, content_type }: ReactionHandlerProps) => { /> {topEmojiCollections .filter((emoji) => emoji.emoji !== userEmoji) - .slice(0, 2) + .slice(0, 1) .map((emoji, index) => ( ))} @@ -39,7 +39,7 @@ export const EmojiShowcase = ({ data, content_type }: ReactionHandlerProps) => { return ( - {topEmojiCollections.slice(0, 3).map((emoji, index) => ( + {topEmojiCollections.slice(0, 2).map((emoji, index) => ( ))} From 463062c0344abeac6047a5ce6cf90dc17afed3e6 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 15 Jan 2024 10:02:35 +0100 Subject: [PATCH 023/135] Update CHANGELOG.md (#951) --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c302671..9d9d66c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,12 @@ ## Neste versjon +## Versjon 2023.15.01 - 🦟 **Vipps betaling**. Diverse bugs i betalingsløsningen er nå fikset. +- ✨ **Reaksjoner**. Det er nå mulig å reagere på arrangementer og nyheter med emojier. +- 🎨 **Prikk info**. Mail for kontakt for prikk, er nå endret. +- 🎨 **Bedriftsekskursjon info**. Info på kort om bedriftsekskursjon er nå endret. +- ✨ **Mine arrangementer**. En bruker kan nå se sine tidligere arrangementer. ## versjon 2023.17.11 - ✨ **QR kode**. Du kan nå generere dine egne QR kode. From 4ff20789abad726eee942ea4ccbc4d754c2c98de Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:49:17 +0100 Subject: [PATCH 024/135] added helpertext (#957) --- src/pages/SignUp/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/SignUp/index.tsx b/src/pages/SignUp/index.tsx index a9c58381..b26d3a50 100644 --- a/src/pages/SignUp/index.tsx +++ b/src/pages/SignUp/index.tsx @@ -104,6 +104,7 @@ const SignUp = () => { Date: Wed, 7 Feb 2024 13:38:56 +0100 Subject: [PATCH 025/135] removed timepicker. Paytime is set to constant 2 hours (#958) --- .../components/EventEditor.tsx | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/pages/EventAdministration/components/EventEditor.tsx b/src/pages/EventAdministration/components/EventEditor.tsx index 3495a4fa..1a265950 100644 --- a/src/pages/EventAdministration/components/EventEditor.tsx +++ b/src/pages/EventAdministration/components/EventEditor.tsx @@ -1,6 +1,6 @@ import { SafetyDividerRounded } from '@mui/icons-material'; import { Collapse, Grid, LinearProgress, ListSubheader, MenuItem, Stack, styled } from '@mui/material'; -import { addHours, format, parse, parseISO, setHours, startOfHour, subDays } from 'date-fns'; +import { addHours, parseISO, setHours, startOfHour, subDays } from 'date-fns'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; @@ -22,7 +22,6 @@ import MarkdownEditor from 'components/inputs/MarkdownEditor'; import Select from 'components/inputs/Select'; import SubmitButton from 'components/inputs/SubmitButton'; import TextField from 'components/inputs/TextField'; -import TimePicker from 'components/inputs/TimePicker'; import { ImageUpload } from 'components/inputs/Upload'; import UserSearch from 'components/inputs/UserSearch'; import { StandaloneExpand } from 'components/layout/Expand'; @@ -109,7 +108,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { enforces_previous_strikes: newValues ? newValues.enforces_previous_strikes : true, is_paid_event: newValues?.is_paid_event || false, price: newValues?.paid_information?.price, - paytime: newValues?.paid_information?.paytime && parse(newValues?.paid_information.paytime, 'HH:mm:ss', new Date()), + paytime: '02:00', contact_person: newValues?.contact_person || null, emojis_allowed: newValues?.emojis_allowed || false, }); @@ -219,7 +218,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { paid_information: data.is_paid_event ? { price: data.price, - paytime: data.paytime && format(new Date(data.paytime), 'HH:mm'), + paytime: '02:00', } : undefined, contact_person: data.contact_person?.user_id || null, @@ -493,15 +492,6 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { disabled={Boolean(data?.paid_information?.price)} required={watchPaidEvent} /> - From 1f10a067921439546ee4d659b42be6496c691783 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:27:35 +0100 Subject: [PATCH 026/135] Update CHANGELOG.md (#959) --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d9d66c3..617924d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ ## Neste versjon +## Versjon 2023.07.02 +- 🎨 **Vipps betaling**. Brukere kan nå ikke sette nedbetalingstid selv. 2 timer er konstant tid. + ## Versjon 2023.15.01 - 🦟 **Vipps betaling**. Diverse bugs i betalingsløsningen er nå fikset. - ✨ **Reaksjoner**. Det er nå mulig å reagere på arrangementer og nyheter med emojier. From 3c49fa43e3bc0474efde1bf6c8361d08f8eceaca Mon Sep 17 00:00:00 2001 From: Emil Johnsen <111747340+1Cezzo@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:47:21 +0100 Subject: [PATCH 027/135] Clickable user component in reactions list (#961) --- .../reactions/ReactionListItem.tsx | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/components/miscellaneous/reactions/ReactionListItem.tsx b/src/components/miscellaneous/reactions/ReactionListItem.tsx index 192d8833..9a1d24f5 100644 --- a/src/components/miscellaneous/reactions/ReactionListItem.tsx +++ b/src/components/miscellaneous/reactions/ReactionListItem.tsx @@ -1,4 +1,6 @@ import { Grid, Stack, Typography } from '@mui/material'; +import { Link } from 'react-router-dom'; +import URLS from 'URLS'; import { Reaction } from 'types'; @@ -7,21 +9,25 @@ import Paper from 'components/layout/Paper'; import Avatar from '../Avatar'; export const ReactionListItem = (reaction: Reaction) => { + const userProfileUrl = `${URLS.profile}${reaction.user?.user_id}`; + return ( - - - - - - - - {reaction.user?.first_name} {reaction.user?.last_name} - - - - {reaction.emoji} - - - + + + + + + + + + {reaction.user?.first_name} {reaction.user?.last_name} + + + + {reaction.emoji} + + + + ); }; From ee7fcd0796ca39d837ab166f21df0e140244d7af Mon Sep 17 00:00:00 2001 From: Emil Johnsen <111747340+1Cezzo@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:58:58 +0100 Subject: [PATCH 028/135] changed cheatsheet button (#962) --- src/pages/Cheatsheet/index.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/pages/Cheatsheet/index.tsx b/src/pages/Cheatsheet/index.tsx index 8db4713c..7d12026b 100644 --- a/src/pages/Cheatsheet/index.tsx +++ b/src/pages/Cheatsheet/index.tsx @@ -1,4 +1,5 @@ -import { Button, MenuItem, styled, TextField } from '@mui/material'; +import MailOutlineIcon from '@mui/icons-material/MailOutline'; +import { MenuItem, styled, TextField } from '@mui/material'; import { getDay, getHours } from 'date-fns'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; @@ -13,6 +14,7 @@ import { useInterval } from 'hooks/Utils'; import Files from 'pages/Cheatsheet/components/Files'; import Banner from 'components/layout/Banner'; +import { BannerButton } from 'components/layout/Banner'; import Paper from 'components/layout/Paper'; import Page from 'components/navigation/Page'; @@ -148,11 +150,17 @@ const Cheetsheet = () => { return ( } + banner={ + + } // Adding the EmailIcon as the end icon + onClick={generateCheatSheetMail} + variant='outlined'> + Bidra til kokeboka! + + + } options={{ title: `${getStudy()} - ${getClass()}. klasse - Kokeboka` }}> - Date: Thu, 22 Feb 2024 15:04:11 +0100 Subject: [PATCH 029/135] Feat/paragraph description (#963) * Added description to fine * Updated changelog * Fixed rendering error when no laws --- CHANGELOG.md | 1 + src/pages/Groups/fines/AddFineDialog.tsx | 56 ++++++++++++------------ 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 617924d0..db97fd97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### 🎨 - Designendringer ## Neste versjon +- ⚡ **Bøter**. Man kan nå se paragrafbeskrivelsen når man legger inn en ny bot. ## Versjon 2023.07.02 - 🎨 **Vipps betaling**. Brukere kan nå ikke sette nedbetalingstid selv. 2 timer er konstant tid. diff --git a/src/pages/Groups/fines/AddFineDialog.tsx b/src/pages/Groups/fines/AddFineDialog.tsx index fed07f09..05ffb878 100644 --- a/src/pages/Groups/fines/AddFineDialog.tsx +++ b/src/pages/Groups/fines/AddFineDialog.tsx @@ -1,5 +1,5 @@ import AddIcon from '@mui/icons-material/AddRounded'; -import { Fab, FabProps, ListSubheader, MenuItem } from '@mui/material'; +import { Card, Fab, FabProps, ListSubheader, MenuItem } from '@mui/material'; import { forwardRef, Ref, useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { formatLawHeader } from 'utils'; @@ -17,6 +17,7 @@ import TextField from 'components/inputs/TextField'; import { ImageUpload } from 'components/inputs/Upload'; import UserSearch from 'components/inputs/UserSearch'; import Dialog from 'components/layout/Dialog'; +import MarkdownRenderer from 'components/miscellaneous/MarkdownRenderer'; export type AddFineDialogProps = FabProps & { groupSlug: Group['slug']; @@ -32,7 +33,18 @@ const AddFineDialog = forwardRef(function AddFineDialog({ groupSlug, ...props }: const { data: laws } = useGroupLaws(groupSlug, { enabled: dialogOpen }); const createFine = useCreateGroupFine(groupSlug); const showSnackbar = useSnackbar(); - const { register, formState, handleSubmit, control, watch, setValue } = useForm(); + + const { register, formState, handleSubmit, control, watch, setValue, getValues } = useForm({ + defaultValues: { + description: laws?.filter((l) => Boolean(l.description))[0]?.id, + amount: 1, + }, + }); + + // Set the default value of the law paragraph field once the data loads + useEffect(() => { + setValue('description', laws?.filter((l) => Boolean(l.description))[0]?.id ?? ''); + }, [laws]); const selectedLaw = watch('description'); @@ -87,31 +99,21 @@ const AddFineDialog = forwardRef(function AddFineDialog({ groupSlug, ...props }: multiple name='user' /> - - + + + law.id === getValues().description)?.description ?? ''} /> + + From c94a4ea2da50f64f73f831bbb3900b509ce432f7 Mon Sep 17 00:00:00 2001 From: Erik Skjellevik <98759397+eriskjel@users.noreply.github.com> Date: Sun, 10 Mar 2024 17:47:23 +0100 Subject: [PATCH 030/135] Fix(waiting list)/fix waiting list order (#965) * will now sort and render the waiting list participants according to their respective waiting list number * added waiting list number field to participant info --- .../EventAdministration/components/EventParticipants.tsx | 9 ++++++++- src/pages/EventAdministration/components/Participant.tsx | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pages/EventAdministration/components/EventParticipants.tsx b/src/pages/EventAdministration/components/EventParticipants.tsx index 1f979901..ede6fbe3 100644 --- a/src/pages/EventAdministration/components/EventParticipants.tsx +++ b/src/pages/EventAdministration/components/EventParticipants.tsx @@ -45,6 +45,13 @@ const Registrations = ({ onWait = false, eventId }: RegistrationsProps) => { : [], [data, showOnlyNotAttended], ); + + const sortedRegistrations = registrations.sort((a, b) => { + const waitA = a.wait_queue_number ?? Number.MAX_SAFE_INTEGER; + const waitB = b.wait_queue_number ?? Number.MAX_SAFE_INTEGER; + return waitA - waitB; + }); + const showSnackbar = useSnackbar(); const getRegistrationDetails = ({ names, emails }: RegistrationsCopyDetails) => { @@ -92,7 +99,7 @@ const Registrations = ({ onWait = false, eventId }: RegistrationsProps) => { fetchNextPage()}> - {registrations.map((registration) => ( + {sortedRegistrations.map((registration) => ( ))} diff --git a/src/pages/EventAdministration/components/Participant.tsx b/src/pages/EventAdministration/components/Participant.tsx index cc1dc527..2399b483 100644 --- a/src/pages/EventAdministration/components/Participant.tsx +++ b/src/pages/EventAdministration/components/Participant.tsx @@ -117,6 +117,7 @@ const Participant = ({ registration, eventId }: ParticipantProps) => {
{`Epost: ${registration.user_info.email}`} {`Påmeldt: ${formatDate(parseISO(registration.created_at))}`} + {`Ventelistenummer: ${registration.wait_queue_number}`}
{registration.is_on_wait && event && event.list_count >= event.limit ? ( From 2f0d3edd0ac4c30b1de818b05849e1172d02a3cb Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 11 Mar 2024 19:08:18 +0100 Subject: [PATCH 031/135] added tailwindcss and shadcn (#964) * added tailwindcss and shadcn * added clsx package for utils.ts * changed to outlined on contained buttons to fix css bug * added old bg colors to tailwindcss config * redesigned reaction handler * removed full import from React in button.tsx * removed full import from react in card.tsx * added old primary colors to index.css * changed icon for showing all reacitons --- .eslintignore | 2 + .prettierignore | 2 + components.json | 17 + package.json | 10 + pnpm-lock.yaml | 2237 +++++++++++++++-- postcss.config.js | 6 + src/assets/css/index.css | 62 + src/components/inputs/SubmitButton.tsx | 2 +- src/components/layout/Dialog.tsx | 2 +- .../miscellaneous/reactions/EmojiItem.tsx | 24 +- .../reactions/EmojiPickHandler.tsx | 10 +- .../miscellaneous/reactions/EmojiShowAll.tsx | 9 +- .../miscellaneous/reactions/EmojiShowcase.tsx | 15 +- .../reactions/ReactionHandler.tsx | 20 +- src/components/ui/button.tsx | 56 + src/components/ui/card.tsx | 78 + src/hooks/Theme.tsx | 16 +- src/lib/utils.ts | 6 + .../EventDetails/components/EventRenderer.tsx | 2 +- tailwind.config.ts | 81 + 20 files changed, 2380 insertions(+), 277 deletions(-) create mode 100644 .eslintignore create mode 100644 .prettierignore create mode 100644 components.json create mode 100644 postcss.config.js create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/lib/utils.ts create mode 100644 tailwind.config.ts diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..d9c7dbca --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +/src/components/ui/ +/src/lib/utils.ts \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..d9c7dbca --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +/src/components/ui/ +/src/lib/utils.ts \ No newline at end of file diff --git a/components.json b/components.json new file mode 100644 index 00000000..373fcdfb --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/assets/css/index.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "components/ui", + "utils": "lib/utils", + "ui": "components/ui" + } + } \ No newline at end of file diff --git a/package.json b/package.json index 13451ea5..89e40f0a 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,12 @@ "@mui/icons-material": "^5.14.8", "@mui/lab": "^5.0.0-alpha.60", "@mui/material": "^5.14.9", + "@radix-ui/react-slot": "^1.0.2", "@vercel/analytics": "1.0.2", "browser-image-compression": "^2.0.0", "canvas-confetti": "^1.6.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", "constate": "^3.3.0", "copy-to-clipboard": "^3.3.1", "date-fns": "^2.30.0", @@ -25,8 +28,10 @@ "emoji-picker-react": "^4.5.6", "history": "^5.3.0", "immutability-helper": "^3.1.1", + "lucide-react": "^0.352.0", "qr-scanner": "^1.4.1", "qrcode.react": "^3.1.0", + "radix-ui": "^1.0.1", "react": "^17.0.2", "react-cool-dimensions": "^3.0.1", "react-dnd": "^16.0.1", @@ -43,6 +48,8 @@ "react-router-dom": "^6.15.0", "rehype-raw": "^7.0.0", "slugify": "^1.6.3", + "tailwind-merge": "^2.2.1", + "tailwindcss-animate": "^1.0.7", "tss-react": "^4.9.0", "universal-cookie": "^6.1.0" }, @@ -67,6 +74,7 @@ "@typescript-eslint/eslint-plugin": "^5.22.0", "@typescript-eslint/parser": "^5.38.1", "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.18", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import-helpers": "^1.3.1", @@ -74,7 +82,9 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.5.0", "husky": "^8.0.1", + "postcss": "^8.4.35", "prettier": "^2.6.0", + "tailwindcss": "^3.4.1", "typescript": "^4.6.2", "vite": "^5.0.0", "vite-plugin-checker": "^0.6.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b845d6af..4fb00eeb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ dependencies: '@mui/material': specifier: ^5.14.9 version: 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@17.0.37)(react@17.0.2) '@vercel/analytics': specifier: 1.0.2 version: 1.0.2 @@ -41,6 +44,12 @@ dependencies: canvas-confetti: specifier: ^1.6.0 version: 1.6.0 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.0 constate: specifier: ^3.3.0 version: 3.3.0(react@17.0.2) @@ -62,12 +71,18 @@ dependencies: immutability-helper: specifier: ^3.1.1 version: 3.1.1 + lucide-react: + specifier: ^0.352.0 + version: 0.352.0(react@17.0.2) qr-scanner: specifier: ^1.4.1 version: 1.4.1 qrcode.react: specifier: ^3.1.0 version: 3.1.0(react@17.0.2) + radix-ui: + specifier: ^1.0.1 + version: 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) react: specifier: ^17.0.2 version: 17.0.2 @@ -116,6 +131,12 @@ dependencies: slugify: specifier: ^1.6.3 version: 1.6.3 + tailwind-merge: + specifier: ^2.2.1 + version: 2.2.1 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.1) tss-react: specifier: ^4.9.0 version: 4.9.0(@emotion/react@11.9.0)(react@17.0.2) @@ -154,6 +175,9 @@ devDependencies: '@vitejs/plugin-react': specifier: ^4.2.0 version: 4.2.0(vite@5.0.0) + autoprefixer: + specifier: ^10.4.18 + version: 10.4.18(postcss@8.4.35) eslint: specifier: ^8.48.0 version: 8.48.0 @@ -175,9 +199,15 @@ devDependencies: husky: specifier: ^8.0.1 version: 8.0.1 + postcss: + specifier: ^8.4.35 + version: 8.4.35 prettier: specifier: ^2.6.0 version: 2.6.0 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1 typescript: specifier: ^4.6.2 version: 4.6.2 @@ -204,6 +234,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -412,6 +446,13 @@ packages: regenerator-runtime: 0.14.0 dev: false + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: false + /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} @@ -996,12 +1037,23 @@ packages: 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 + /@jimp/bmp@0.16.13(@jimp/custom@0.16.13): resolution: {integrity: sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ==} peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/custom': 0.16.13 '@jimp/utils': 0.16.13 bmp-js: 0.1.0 @@ -1010,7 +1062,7 @@ packages: /@jimp/core@0.16.13: resolution: {integrity: sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg==} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/utils': 0.16.13 any-base: 1.1.0 buffer: 5.7.1 @@ -1026,7 +1078,7 @@ packages: /@jimp/custom@0.16.13: resolution: {integrity: sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA==} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/core': 0.16.13 dev: false @@ -1035,7 +1087,7 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/custom': 0.16.13 '@jimp/utils': 0.16.13 gifwrap: 0.9.4 @@ -1047,7 +1099,7 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/custom': 0.16.13 '@jimp/utils': 0.16.13 jpeg-js: 0.4.4 @@ -1058,7 +1110,7 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/custom': 0.16.13 '@jimp/utils': 0.16.13 dev: false @@ -1068,7 +1120,7 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/custom': 0.16.13 '@jimp/utils': 0.16.13 pngjs: 3.4.0 @@ -1079,7 +1131,7 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/custom': 0.16.13 utif: 2.0.1 dev: false @@ -1089,7 +1141,7 @@ packages: peerDependencies: '@jimp/custom': '>=0.3.5' dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@jimp/bmp': 0.16.13(@jimp/custom@0.16.13) '@jimp/custom': 0.16.13 '@jimp/gif': 0.16.13(@jimp/custom@0.16.13) @@ -1102,7 +1154,7 @@ packages: /@jimp/utils@0.16.13: resolution: {integrity: sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA==} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 regenerator-runtime: 0.13.11 dev: false @@ -1171,7 +1223,7 @@ packages: '@mui/utils': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@popperjs/core': 2.11.8 '@types/react': 17.0.37 - clsx: 2.0.0 + clsx: 2.1.0 prop-types: 15.8.1 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -1273,7 +1325,7 @@ packages: '@mui/utils': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@types/react': 17.0.37 '@types/react-transition-group': 4.4.6 - clsx: 2.0.0 + clsx: 2.1.0 csstype: 3.1.2 prop-types: 15.8.1 react: 17.0.2 @@ -1292,7 +1344,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 '@mui/utils': 5.14.18(@types/react@17.0.37)(react@17.0.2) '@types/react': 17.0.37 prop-types: 15.8.1 @@ -1309,7 +1361,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@mui/utils': 5.14.7(react@17.0.2) '@types/react': 17.0.37 prop-types: 15.8.1 @@ -1326,7 +1378,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@mui/utils': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@types/react': 17.0.37 prop-types: 15.8.1 @@ -1348,7 +1400,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@emotion/cache': 11.11.0 '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) @@ -1370,7 +1422,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 '@emotion/cache': 11.11.0 '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) @@ -1389,7 +1441,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 '@emotion/hash': 0.9.1 '@mui/private-theming': 5.14.18(@types/react@17.0.37)(react@17.0.2) '@mui/types': 7.2.9(@types/react@17.0.37) @@ -1434,7 +1486,7 @@ packages: '@mui/types': 7.2.4(@types/react@17.0.37) '@mui/utils': 5.14.7(react@17.0.2) '@types/react': 17.0.37 - clsx: 2.0.0 + clsx: 2.1.0 csstype: 3.1.2 prop-types: 15.8.1 react: 17.0.2 @@ -1464,7 +1516,7 @@ packages: '@mui/types': 7.2.4(@types/react@17.0.37) '@mui/utils': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@types/react': 17.0.37 - clsx: 2.0.0 + clsx: 2.1.0 csstype: 3.1.2 prop-types: 15.8.1 react: 17.0.2 @@ -1504,7 +1556,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 '@types/prop-types': 15.7.10 '@types/react': 17.0.37 prop-types: 15.8.1 @@ -1551,12 +1603,10 @@ packages: 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==} @@ -1564,183 +1614,1422 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@react-dnd/asap@5.0.2: - resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} - dev: false - - /@react-dnd/invariant@4.0.2: - resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} - dev: false - - /@react-dnd/shallowequal@4.0.2: - resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} + /@radix-ui/number@1.0.1: + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + dependencies: + '@babel/runtime': 7.24.0 dev: false - /@remix-run/router@1.8.0: - resolution: {integrity: sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==} - engines: {node: '>=14.0.0'} + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.24.0 dev: false - /@rollup/pluginutils@5.0.5: - resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} - engines: {node: '>=14.0.0'} + /@radix-ui/react-accessible-icon@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-duVGKeWPSUILr/MdlPxV+GeULTc2rS1aihGdQ3N2qCUPMgxYLxvAsHJM3mCVLF8d5eK+ympmB22mb1F3a5biNw==} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: - rollup: + '@types/react': + optional: true + '@types/react-dom': optional: true dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true - - /@rollup/rollup-android-arm-eabi@4.5.0: - resolution: {integrity: sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-android-arm64@4.5.0: - resolution: {integrity: sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.5.0: - resolution: {integrity: sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.5.0: - resolution: {integrity: sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.5.0: - resolution: {integrity: sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.5.0: - resolution: {integrity: sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-musl@4.5.0: - resolution: {integrity: sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-gnu@4.5.0: - resolution: {integrity: sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-musl@4.5.0: - resolution: {integrity: sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-arm64-msvc@4.5.0: - resolution: {integrity: sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-ia32-msvc@4.5.0: - resolution: {integrity: sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-x64-msvc@4.5.0: - resolution: {integrity: sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + '@babel/runtime': 7.24.0 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false - /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.23.3): - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} - engines: {node: '>=14'} + /@radix-ui/react-accordion@1.1.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/core': 7.23.3 - dev: true + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.3): - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} + /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/core': 7.23.3 - dev: true + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.3): - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} + /@radix-ui/react-arrow@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/core': 7.23.3 - dev: true + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false - /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.23.3): - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} - engines: {node: '>=14'} + /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/core': 7.23.3 - dev: true + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false - /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.23.3): - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} - engines: {node: '>=14'} + /@radix-ui/react-avatar@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/core': 7.23.3 - dev: true + '@babel/runtime': 7.24.0 + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-context-menu@2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-dialog@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + aria-hidden: 1.2.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-remove-scroll: 2.5.5(@types/react@17.0.37)(react@17.0.2) + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-hover-card@1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-label@2.0.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-menu@2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + aria-hidden: 1.2.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-remove-scroll: 2.5.5(@types/react@17.0.37)(react@17.0.2) + dev: false + + /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-popover@1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + aria-hidden: 1.2.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-remove-scroll: 2.5.5(@types/react@17.0.37)(react@17.0.2) + dev: false + + /@radix-ui/react-popper@1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@floating-ui/react-dom': 2.0.2(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-rect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/rect': 1.0.1 + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-portal@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-progress@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-radio-group@1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-select@2.0.0(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + aria-hidden: 1.2.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-remove-scroll: 2.5.5(@types/react@17.0.37)(react@17.0.2) + dev: false + + /@radix-ui/react-separator@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-slider@1.1.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-switch@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-tabs@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-toast@1.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-toggle@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-toolbar@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-use-previous@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-use-rect@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/rect': 1.0.1 + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-use-size@1.0.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@types/react': 17.0.37 + react: 17.0.2 + dev: false + + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@types/react': 17.0.37 + '@types/react-dom': 17.0.11 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.24.0 + dev: false + + /@react-dnd/asap@5.0.2: + resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} + dev: false + + /@react-dnd/invariant@4.0.2: + resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} + dev: false + + /@react-dnd/shallowequal@4.0.2: + resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} + dev: false + + /@remix-run/router@1.8.0: + resolution: {integrity: sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==} + engines: {node: '>=14.0.0'} + dev: false + + /@rollup/pluginutils@5.0.5: + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@rollup/rollup-android-arm-eabi@4.5.0: + resolution: {integrity: sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.5.0: + resolution: {integrity: sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.5.0: + resolution: {integrity: sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.5.0: + resolution: {integrity: sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.5.0: + resolution: {integrity: sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.5.0: + resolution: {integrity: sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.5.0: + resolution: {integrity: sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.5.0: + resolution: {integrity: sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.5.0: + resolution: {integrity: sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.5.0: + resolution: {integrity: sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.5.0: + resolution: {integrity: sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.5.0: + resolution: {integrity: sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.23.3): + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + dev: true + + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.3): + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + dev: true + + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.3): + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + dev: true + + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.23.3): + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + dev: true + + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.23.3): + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + dev: true /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.23.3): resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} @@ -1940,7 +3229,6 @@ packages: resolution: {integrity: sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==} dependencies: '@types/react': 17.0.37 - dev: true /@types/react-helmet@6.1.2: resolution: {integrity: sha512-dcfAZNlWb5JYFbO9CGfrPWLJAyFcT6UeR3u35eBbv8liY2Rg4K7fM1G5+HnwVgot+C+kVwXAZ8pLEn2jsMfTDg==} @@ -2215,7 +3503,10 @@ packages: /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'} /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -2228,24 +3519,39 @@ packages: 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'} /any-base@1.1.0: resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} dev: false + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + /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 + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.2 + dev: false + /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: @@ -2322,6 +3628,22 @@ packages: engines: {node: '>=4'} dev: false + /autoprefixer@10.4.18(postcss@8.4.35): + resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001596 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -2331,7 +3653,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 cosmiconfig: 7.1.0 resolve: 1.22.4 dev: false @@ -2355,7 +3677,6 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true /bmp-js@0.1.0: resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} @@ -2367,12 +3688,16 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true /broadcast-channel@3.7.0: resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==} @@ -2403,6 +3728,17 @@ packages: node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) + /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.30001596 + electron-to-chromium: 1.4.699 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + /buffer-equal@0.0.1: resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} engines: {node: '>=0.4.0'} @@ -2425,6 +3761,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2433,6 +3773,10 @@ packages: /caniuse-lite@1.0.30001563: resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} + /caniuse-lite@1.0.30001596: + resolution: {integrity: sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==} + dev: true + /canvas-confetti@1.6.0: resolution: {integrity: sha512-ej+w/m8Jzpv9Z7W7uJZer14Ke8P2ogsjg4ZMGIuq4iqUOqY2Jq8BNW42iGmNfRwREaaEfFIczLuZZiEVSYNHAA==} dev: false @@ -2470,7 +3814,12 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true + + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -2482,6 +3831,11 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.1.0: + resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + engines: {node: '>=6'} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -2492,19 +3846,21 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -2573,15 +3929,19 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /css-vendor@2.0.8: resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 is-in-browser: 1.1.3 dev: false + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -2630,6 +3990,10 @@ packages: engines: {node: '>=6'} dev: false + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: false @@ -2640,6 +4004,9 @@ packages: dequal: 2.0.3 dev: false + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -2652,6 +4019,9 @@ packages: path-type: 4.0.0 dev: true + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + /dnd-core@16.0.1: resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} dependencies: @@ -2677,7 +4047,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 csstype: 3.1.2 dev: false @@ -2692,9 +4062,16 @@ packages: tslib: 2.6.2 dev: true + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + /electron-to-chromium@1.4.588: resolution: {integrity: sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==} + /electron-to-chromium@1.4.699: + resolution: {integrity: sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==} + dev: true + /emoji-picker-react@4.5.6(react@17.0.2): resolution: {integrity: sha512-1dLsV04WQifRpD92/wHhgsJbNg7FQoHWPaiDyU+AEtmq3umUhVTs/8ZzhdoU2HvThg3hK3hRcBn3nRJHjBjWkQ==} engines: {node: '>=10'} @@ -2704,6 +4081,12 @@ packages: react: 17.0.2 dev: false + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3059,7 +4442,6 @@ packages: 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==} @@ -3073,7 +4455,6 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: true /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -3103,7 +4484,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} @@ -3136,6 +4516,17 @@ packages: 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 + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3162,7 +4553,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.1: @@ -3198,6 +4588,11 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -3218,14 +4613,23 @@ packages: 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.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -3474,6 +4878,12 @@ packages: side-channel: 1.0.4 dev: true + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -3503,7 +4913,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -3538,7 +4947,6 @@ packages: /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==} @@ -3546,6 +4954,10 @@ packages: call-bind: 1.0.2 dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + /is-function@1.0.2: resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} dev: false @@ -3562,7 +4974,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-in-browser@1.1.3: resolution: {integrity: sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==} @@ -3587,7 +4998,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -3661,7 +5071,6 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /iterator.prototype@1.1.1: resolution: {integrity: sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==} @@ -3672,6 +5081,18 @@ packages: reflect.getprototypeof: 1.0.4 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 + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + /jpeg-js@0.4.4: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} dev: false @@ -3726,7 +5147,7 @@ packages: /jss-plugin-camel-case@10.10.0: resolution: {integrity: sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 hyphenate-style-name: 1.0.4 jss: 10.10.0 dev: false @@ -3734,21 +5155,21 @@ packages: /jss-plugin-default-unit@10.10.0: resolution: {integrity: sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 jss: 10.10.0 dev: false /jss-plugin-global@10.10.0: resolution: {integrity: sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 jss: 10.10.0 dev: false /jss-plugin-nested@10.10.0: resolution: {integrity: sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 jss: 10.10.0 tiny-warning: 1.0.3 dev: false @@ -3756,14 +5177,14 @@ packages: /jss-plugin-props-sort@10.10.0: resolution: {integrity: sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 jss: 10.10.0 dev: false /jss-plugin-rule-value-function@10.10.0: resolution: {integrity: sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 jss: 10.10.0 tiny-warning: 1.0.3 dev: false @@ -3771,7 +5192,7 @@ packages: /jss-plugin-vendor-prefixer@10.10.0: resolution: {integrity: sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 css-vendor: 2.0.8 jss: 10.10.0 dev: false @@ -3779,7 +5200,7 @@ packages: /jss@10.10.0: resolution: {integrity: sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.24.0 csstype: 3.1.2 is-in-browser: 1.1.3 tiny-warning: 1.0.3 @@ -3814,6 +5235,14 @@ packages: type-check: 0.4.0 dev: true + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3879,6 +5308,10 @@ packages: tslib: 2.6.2 dev: true + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -3891,6 +5324,14 @@ packages: yallist: 4.0.0 dev: true + /lucide-react@0.352.0(react@17.0.2): + resolution: {integrity: sha512-GKzcxx6H6PT9onMPN9zxyD4KNqgHDoVaY+ad14vhTzBdXFm3FQZhH5XeP8sHJRhLk9imHHta/8DZe55kd/KerQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 17.0.2 + dev: false + /luxon@1.28.1: resolution: {integrity: sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==} requiresBuild: true @@ -3967,7 +5408,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -4177,7 +5617,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /microseconds@0.2.0: resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} @@ -4200,10 +5639,20 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -4223,6 +5672,13 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /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 + /nano-time@1.0.0: resolution: {integrity: sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==} dependencies: @@ -4233,7 +5689,6 @@ packages: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -4249,6 +5704,10 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /node-vibrant@3.1.6: resolution: {integrity: sha512-Wlc/hQmBMOu6xon12ZJHS2N3M+I6J8DhrD3Yo6m5175v8sFkVIN+UjhKVRcO+fqvre89ASTpmiFEP3nPO13SwA==} dependencies: @@ -4264,6 +5723,10 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} dev: true /normalize-wheel@1.0.1: @@ -4281,6 +5744,10 @@ packages: 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'} + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -4428,11 +5895,17 @@ packages: /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==} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4452,7 +5925,14 @@ packages: /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'} + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} /pixelmatch@4.0.2: resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} @@ -4466,14 +5946,68 @@ packages: engines: {node: '>=4.0.0'} dev: false - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + /postcss-import@15.1.0(postcss@8.4.35): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.4 + + /postcss-js@4.0.1(postcss@8.4.35): + 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.35 + + /postcss-load-config@4.0.2(postcss@8.4.35): + 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.35 + yaml: 2.4.1 + + /postcss-nested@6.0.1(postcss@8.4.35): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -4541,7 +6075,50 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + + /radix-ui@1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-qfGibbqtbOlxP3b+1JjbLUc8Q7+e9DL8gFycLtkBkoAQyUkKuHAEBfFUcyG5MaQHjqRuML+YLtt/R1/dUYQafQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@radix-ui/react-accessible-icon': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-accordion': 1.1.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-alert-dialog': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-aspect-ratio': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-avatar': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-context-menu': 2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-hover-card': 1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-label': 2.0.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-navigation-menu': 1.1.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-progress': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-radio-group': 1.1.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-select': 2.0.0(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slider': 1.1.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react@17.0.37)(react@17.0.2) + '@radix-ui/react-switch': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-tabs': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-toast': 1.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + dev: false /react-cool-dimensions@3.0.1(react@17.0.2): resolution: {integrity: sha512-DUsDB5WUN1Qh6fJJlBtqFKCktrZCPRYcVn8NTeM6hP/5AhZNjDOa2sC2Dg0EM3WUObPDNV5nFLA34vHQfahUeg==} @@ -4723,6 +6300,41 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-remove-scroll-bar@2.3.5(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.37 + react: 17.0.2 + react-style-singleton: 2.2.1(@types/react@17.0.37)(react@17.0.2) + tslib: 2.6.2 + dev: false + + /react-remove-scroll@2.5.5(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.37 + react: 17.0.2 + react-remove-scroll-bar: 2.3.5(@types/react@17.0.37)(react@17.0.2) + react-style-singleton: 2.2.1(@types/react@17.0.37)(react@17.0.2) + tslib: 2.6.2 + use-callback-ref: 1.3.1(@types/react@17.0.37)(react@17.0.2) + use-sidecar: 1.1.2(@types/react@17.0.37)(react@17.0.2) + dev: false + /react-router-dom@6.15.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==} engines: {node: '>=14.0.0'} @@ -4754,6 +6366,23 @@ packages: react: 17.0.2 dev: false + /react-style-singleton@2.2.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.37 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 17.0.2 + tslib: 2.6.2 + dev: false + /react-transition-group@4.4.5(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -4776,6 +6405,11 @@ packages: object-assign: 4.1.1 dev: false + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -4797,12 +6431,11 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 dev: false /reflect.getprototypeof@1.0.4: @@ -4881,7 +6514,6 @@ packages: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} @@ -4895,7 +6527,6 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rifm@0.12.1(react@17.0.2): resolution: {integrity: sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==} @@ -4943,7 +6574,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -5002,12 +6632,10 @@ packages: 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.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -5016,6 +6644,10 @@ packages: get-intrinsic: 1.2.1 object-inspect: 1.12.3 + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -5036,7 +6668,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} @@ -5047,6 +6678,22 @@ packages: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: false + /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 + + /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 + /string.prototype.matchall@4.0.9: resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==} dependencies: @@ -5096,7 +6743,12 @@ packages: 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 /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -5121,6 +6773,19 @@ packages: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} 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.3 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5142,10 +6807,65 @@ packages: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} dev: true + /tailwind-merge@2.2.1: + resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} + dependencies: + '@babel/runtime': 7.24.0 + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.4.1 + dev: false + + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + 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.0 + postcss: 8.4.35 + postcss-import: 15.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 4.0.2(postcss@8.4.35) + postcss-nested: 6.0.1(postcss@8.4.35) + postcss-selector-parser: 6.0.15 + resolve: 1.22.4 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + /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 + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + /timm@1.7.1: resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} dev: false @@ -5176,7 +6896,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true /toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} @@ -5198,6 +6917,9 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /tsconfck@2.1.2(typescript@4.6.2): resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} engines: {node: ^14.13.1 || ^16 || >=18} @@ -5419,7 +7141,7 @@ packages: /unload@2.2.0: resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.4 detect-node: 2.1.0 dev: false @@ -5433,6 +7155,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -5446,6 +7179,37 @@ packages: qs: 6.11.2 dev: false + /use-callback-ref@1.3.1(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.37 + react: 17.0.2 + tslib: 2.6.2 + dev: false + + /use-sidecar@1.1.2(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.37 + detect-node-es: 1.1.0 + react: 17.0.2 + tslib: 2.6.2 + dev: false + /utif@2.0.1: resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} dependencies: @@ -5454,7 +7218,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} @@ -5637,7 +7400,7 @@ packages: dependencies: '@types/node': 20.6.3 esbuild: 0.19.6 - postcss: 8.4.31 + postcss: 8.4.35 rollup: 4.5.0 optionalDependencies: fsevents: 2.3.3 @@ -5741,7 +7504,22 @@ packages: hasBin: true dependencies: isexe: 2.0.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 + + /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 /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5789,6 +7567,11 @@ packages: engines: {node: '>= 6'} dev: false + /yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/assets/css/index.css b/src/assets/css/index.css index ffa0a131..d4571727 100644 --- a/src/assets/css/index.css +++ b/src/assets/css/index.css @@ -1,5 +1,67 @@ @import url('https://fonts.googleapis.com/css2?family=Cabin&family=Oswald:wght@500;700&family=Inter:wght@300;700;900&&display=swap'); +@tailwind base; +@tailwind components; +@tailwind utilities; + + +@layer base { + :root { + --background: 0 0% 93%; + --foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --primary: 219, 66%, 33%; + --primary-foreground: 0, 0%, 100%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 221.2 83.2% 53.3%; + --radius: 0.5rem; + } + + .dark { + --background: 212 100% 8%; + --foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --primary: 219, 100%, 81%; + --primary-foreground: 0, 0%, 0%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 224.3 76.3% 48%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: "rlig" 1, "calt" 1; + } +} + * { padding: 0; box-sizing: border-box; diff --git a/src/components/inputs/SubmitButton.tsx b/src/components/inputs/SubmitButton.tsx index 988a6438..a32caac7 100644 --- a/src/components/inputs/SubmitButton.tsx +++ b/src/components/inputs/SubmitButton.tsx @@ -7,7 +7,7 @@ const SubmitButton = ({ formState, children, dis const isError = Boolean((Array.isArray(Object.keys(formState.errors)) ? Object.keys(formState.errors) : []).length); return ( <> - {isError && ( diff --git a/src/components/layout/Dialog.tsx b/src/components/layout/Dialog.tsx index 0123f7d0..3eae4759 100644 --- a/src/components/layout/Dialog.tsx +++ b/src/components/layout/Dialog.tsx @@ -40,7 +40,7 @@ const Dialog = ({ {onConfirm && ( - )} diff --git a/src/components/miscellaneous/reactions/EmojiItem.tsx b/src/components/miscellaneous/reactions/EmojiItem.tsx index 99da1061..e36ae205 100644 --- a/src/components/miscellaneous/reactions/EmojiItem.tsx +++ b/src/components/miscellaneous/reactions/EmojiItem.tsx @@ -1,11 +1,11 @@ -import { Button, Stack, Typography } from '@mui/material'; - import { Emoji, Event, News } from 'types'; import { useCreateReaction, useDeleteReaction, useUpdateReaction } from 'hooks/EmojiReaction'; import { useSnackbar } from 'hooks/Snackbar'; import { useUser } from 'hooks/User'; +import { Button } from 'components/ui/button'; + export type EmojiItemProps = { data: News | Event; emoji: Emoji; @@ -65,20 +65,20 @@ export const EmojiItem = ({ data, emoji, content_type }: EmojiItemProps) => { if (userReaction) { return ( - ); } return ( - ); }; diff --git a/src/components/miscellaneous/reactions/EmojiPickHandler.tsx b/src/components/miscellaneous/reactions/EmojiPickHandler.tsx index 99ea7ff9..c67f1023 100644 --- a/src/components/miscellaneous/reactions/EmojiPickHandler.tsx +++ b/src/components/miscellaneous/reactions/EmojiPickHandler.tsx @@ -1,12 +1,14 @@ -import AddReactionOutlinedIcon from '@mui/icons-material/AddReactionOutlined'; -import { Button, Container, Dialog as MuiDialog } from '@mui/material'; +import { Container, Dialog as MuiDialog } from '@mui/material'; import EmojiPicker, { EmojiClickData } from 'emoji-picker-react'; +import { SmilePlusIcon } from 'lucide-react'; import { useState } from 'react'; import { useCreateReaction, useUpdateReaction } from 'hooks/EmojiReaction'; import { useSnackbar } from 'hooks/Snackbar'; import { useUser } from 'hooks/User'; +import { Button } from 'components/ui/button'; + import { ReactionHandlerProps } from './ReactionHandler'; export const EmojiPickerHandler = ({ data, content_type }: ReactionHandlerProps) => { @@ -57,8 +59,8 @@ export const EmojiPickerHandler = ({ data, content_type }: ReactionHandlerProps) return ( - diff --git a/src/components/miscellaneous/reactions/EmojiShowAll.tsx b/src/components/miscellaneous/reactions/EmojiShowAll.tsx index c0947722..a3230252 100644 --- a/src/components/miscellaneous/reactions/EmojiShowAll.tsx +++ b/src/components/miscellaneous/reactions/EmojiShowAll.tsx @@ -1,11 +1,12 @@ -import ArrowOutwardIcon from '@mui/icons-material/ArrowOutward'; -import { Button, Collapse, Container } from '@mui/material'; +import { Collapse, Container } from '@mui/material'; +import { ListIcon } from 'lucide-react'; import { useState } from 'react'; import { ContentType } from 'types/ContentType'; import Dialog from 'components/layout/Dialog'; import Tabs from 'components/layout/Tabs'; +import { Button } from 'components/ui/button'; import { ReactionListItem } from './ReactionListItem'; @@ -45,8 +46,8 @@ export const EmojiShowAll = (data: ContentType) => { return ( - diff --git a/src/components/miscellaneous/reactions/EmojiShowcase.tsx b/src/components/miscellaneous/reactions/EmojiShowcase.tsx index 241d093d..ce56e5d9 100644 --- a/src/components/miscellaneous/reactions/EmojiShowcase.tsx +++ b/src/components/miscellaneous/reactions/EmojiShowcase.tsx @@ -1,5 +1,3 @@ -import { Stack } from '@mui/material'; - import { useUser } from 'hooks/User'; import { EmojiItem } from './EmojiItem'; @@ -21,7 +19,7 @@ export const EmojiShowcase = ({ data, content_type }: ReactionHandlerProps) => { if (userEmoji) { return ( - +
{ /> {topEmojiCollections .filter((emoji) => emoji.emoji !== userEmoji) - .slice(0, 1) + .slice(0, 3) .map((emoji, index) => ( ))} - +
); } - return ( - - {topEmojiCollections.slice(0, 2).map((emoji, index) => ( +
+ {topEmojiCollections.slice(0, 4).map((emoji, index) => ( ))} - +
); }; diff --git a/src/components/miscellaneous/reactions/ReactionHandler.tsx b/src/components/miscellaneous/reactions/ReactionHandler.tsx index 4466c614..cf1fd02a 100644 --- a/src/components/miscellaneous/reactions/ReactionHandler.tsx +++ b/src/components/miscellaneous/reactions/ReactionHandler.tsx @@ -1,19 +1,9 @@ -import { Stack, styled } from '@mui/material'; - import { ContentType } from 'types/ContentType'; -import Paper from 'components/layout/Paper'; - import { EmojiPickerHandler } from './EmojiPickHandler'; import { EmojiShowAll } from './EmojiShowAll'; import { EmojiShowcase } from './EmojiShowcase'; -const EmojiPaper = styled(Paper)(({ theme }) => ({ - padding: '4px', - borderRadius: '8px', - backgroundColor: theme.palette.background.paper, -})); - export type ReactionHandlerProps = { data: ContentType; content_type: 'news' | 'event'; @@ -21,14 +11,10 @@ export type ReactionHandlerProps = { export const ReactionHandler = ({ data, content_type }: ReactionHandlerProps) => { return ( - - {data.reactions?.length ? ( - - - - ) : null} +
+ {data.reactions?.length ? : null} - +
); }; diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 00000000..e5fa9051 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "lib/utils" +import { forwardRef } from "react" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 00000000..2929ab5f --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,78 @@ +import { cn } from "lib/utils" +import { forwardRef } from "react" + +const Card = forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/hooks/Theme.tsx b/src/hooks/Theme.tsx index cf483f33..61002809 100644 --- a/src/hooks/Theme.tsx +++ b/src/hooks/Theme.tsx @@ -1,7 +1,7 @@ import { useMediaQuery } from '@mui/material'; import { ThemeProvider as MuiThemeProvider } from '@mui/material/styles'; import { SELECTED_THEME } from 'constant'; -import { createContext, ReactNode, useCallback, useContext, useLayoutEffect, useState } from 'react'; +import { createContext, ReactNode, useCallback, useContext, useEffect, useLayoutEffect, useState } from 'react'; import { getCookie, setCookie } from 'api/cookie'; @@ -26,6 +26,20 @@ const ThemeProvider = ({ children }: { children: ReactNode }) => { } }, []); + useEffect(() => { + const root = window.document.documentElement; + root.classList.remove('light', 'dark'); + + if (selectedTheme === 'automatic') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + + root.classList.add(systemTheme); + return; + } + + root.classList.add(selectedTheme); + }, [selectedTheme]); + const updateTheme = useCallback( (newTheme: ThemeTypes | string | undefined) => { const value = getThemeType(newTheme); diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 00000000..bd0c391d --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index 29be13b1..04c8e8df 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -306,7 +306,7 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { return ( <> - diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 00000000..c0b4d728 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,81 @@ +/** @type {import('tailwindcss').Config} */ + +import { fontFamily } from "tailwindcss/defaultTheme"; + +module.exports = { + darkMode: ["class"], + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: `var(--radius)`, + md: `calc(var(--radius) - 2px)`, + sm: "calc(var(--radius) - 4px)", + }, + fontFamily: { + sans: ["var(--font-sans)", ...fontFamily.sans], + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} + From f665c0a2eb49fdc11ebbb210792d3920d63c3e3e Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Mon, 11 Mar 2024 20:17:46 +0100 Subject: [PATCH 032/135] Update CHANGELOG.md (#966) --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db97fd97..0886e09b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,12 +11,14 @@ ### 🎨 - Designendringer ## Neste versjon + +## Versjon 2024.11.03 - ⚡ **Bøter**. Man kan nå se paragrafbeskrivelsen når man legger inn en ny bot. -## Versjon 2023.07.02 +## Versjon 2024.07.02 - 🎨 **Vipps betaling**. Brukere kan nå ikke sette nedbetalingstid selv. 2 timer er konstant tid. -## Versjon 2023.15.01 +## Versjon 2024.15.01 - 🦟 **Vipps betaling**. Diverse bugs i betalingsløsningen er nå fikset. - ✨ **Reaksjoner**. Det er nå mulig å reagere på arrangementer og nyheter med emojier. - 🎨 **Prikk info**. Mail for kontakt for prikk, er nå endret. From a8c8b2c3e02b85a7ce2969769ec7823dc7bf0b26 Mon Sep 17 00:00:00 2001 From: Erik Skjellevik <98759397+eriskjel@users.noreply.github.com> Date: Tue, 12 Mar 2024 12:33:53 +0100 Subject: [PATCH 033/135] waiting-list will now only be sorted if there is a priority pool (#968) --- .../components/EventParticipants.tsx | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/pages/EventAdministration/components/EventParticipants.tsx b/src/pages/EventAdministration/components/EventParticipants.tsx index ede6fbe3..69d551a0 100644 --- a/src/pages/EventAdministration/components/EventParticipants.tsx +++ b/src/pages/EventAdministration/components/EventParticipants.tsx @@ -21,6 +21,7 @@ import EventUserRegistrator from './EventUserRegistrator'; type RegistrationsProps = { onWait?: boolean; eventId: Event['id']; + needsSorting?: boolean; }; type RegistrationsCopyDetails = { @@ -28,7 +29,7 @@ type RegistrationsCopyDetails = { emails: boolean; }; -const Registrations = ({ onWait = false, eventId }: RegistrationsProps) => { +const Registrations = ({ onWait = false, eventId, needsSorting = false }: RegistrationsProps) => { const [showOnlyNotAttended, setShowOnlyNotAttended] = useState(false); const { data, hasNextPage, isFetching, isLoading, fetchNextPage } = useEventRegistrations(eventId, { is_on_wait: onWait }); const { register, handleSubmit } = useForm({ @@ -46,11 +47,15 @@ const Registrations = ({ onWait = false, eventId }: RegistrationsProps) => { [data, showOnlyNotAttended], ); - const sortedRegistrations = registrations.sort((a, b) => { - const waitA = a.wait_queue_number ?? Number.MAX_SAFE_INTEGER; - const waitB = b.wait_queue_number ?? Number.MAX_SAFE_INTEGER; - return waitA - waitB; - }); + let sortedRegistrations = registrations; + + if (needsSorting) { + sortedRegistrations = registrations.sort((a, b) => { + const waitA = a.wait_queue_number ?? Number.MAX_SAFE_INTEGER; + const waitB = b.wait_queue_number ?? Number.MAX_SAFE_INTEGER; + return waitA - waitB; + }); + } const showSnackbar = useSnackbar(); @@ -145,6 +150,8 @@ const EventParticipants = ({ eventId }: EventParticipantsProps) => { return ; } + const needsSorting = data && data.priority_pools && data.priority_pools.length > 0; + return ( <> {data?.title || 'Laster...'} @@ -160,7 +167,7 @@ const EventParticipants = ({ eventId }: EventParticipantsProps) => { - +
); From 4ec1032e08695d70ef2c3d91bb9b2164b0fd082e Mon Sep 17 00:00:00 2001 From: Erik Skjellevik <98759397+eriskjel@users.noreply.github.com> Date: Tue, 12 Mar 2024 16:15:54 +0100 Subject: [PATCH 034/135] waiting list info will now only be rendered if not null (#969) --- src/pages/EventAdministration/components/Participant.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/EventAdministration/components/Participant.tsx b/src/pages/EventAdministration/components/Participant.tsx index 2399b483..d4aae294 100644 --- a/src/pages/EventAdministration/components/Participant.tsx +++ b/src/pages/EventAdministration/components/Participant.tsx @@ -117,7 +117,9 @@ const Participant = ({ registration, eventId }: ParticipantProps) => {
{`Epost: ${registration.user_info.email}`} {`Påmeldt: ${formatDate(parseISO(registration.created_at))}`} - {`Ventelistenummer: ${registration.wait_queue_number}`} + {registration.wait_queue_number !== null && ( + {`Ventelistenummer: ${registration.wait_queue_number}`} + )}
{registration.is_on_wait && event && event.list_count >= event.limit ? ( From 007d516b9211813c52db5660a3643b65bc795986 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Tue, 12 Mar 2024 21:53:08 +0100 Subject: [PATCH 035/135] Shadcn button refdesign (#970) * changed button for add fine * changed button for adding prioritygroups * changed button for image upload --- src/assets/css/index.css | 4 +- src/components/inputs/Upload.tsx | 64 ++++++++++++------- .../InfoBanner/InfoBannerAdminItem.tsx | 9 ++- .../components/EventEditPriorityPools.tsx | 4 +- .../components/EventEditor.tsx | 9 ++- .../components/Participant.tsx | 4 +- .../components/GalleryEditor.tsx | 2 +- src/pages/Groups/components/GroupAdmin.tsx | 9 ++- src/pages/Groups/fines/AddFineDialog.tsx | 14 ++-- .../components/NewsEditor.tsx | 9 ++- src/pages/Profile/components/ProfileAdmin.tsx | 7 +- tailwind.config.ts | 28 ++++---- 12 files changed, 104 insertions(+), 59 deletions(-) diff --git a/src/assets/css/index.css b/src/assets/css/index.css index d4571727..c1ebafe9 100644 --- a/src/assets/css/index.css +++ b/src/assets/css/index.css @@ -36,8 +36,8 @@ --card-foreground: 210 40% 98%; --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; - --primary: 219, 100%, 81%; - --primary-foreground: 0, 0%, 0%; + --primary: 219 100% 81%; + --primary-foreground: 0 0% 0%; --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; --muted: 217.2 32.6% 17.5%; diff --git a/src/components/inputs/Upload.tsx b/src/components/inputs/Upload.tsx index be20cc10..0bc2af74 100644 --- a/src/components/inputs/Upload.tsx +++ b/src/components/inputs/Upload.tsx @@ -1,6 +1,5 @@ import ShareIcon from '@mui/icons-material/ShareRounded'; import { - Button, ButtonProps, FormHelperText, IconButton, @@ -9,9 +8,11 @@ import { ListItem, ListItemSecondaryAction, ListItemText, + Button as MuiButton, styled, Typography, } from '@mui/material'; +import { CloudUploadIcon } from 'lucide-react'; import { forwardRef, useCallback, useState } from 'react'; import Cropper from 'react-easy-crop'; import { FieldError, FieldValues, Path, PathValue, UnpackNestedValue, UseFormRegisterReturn, UseFormReturn } from 'react-hook-form'; @@ -24,6 +25,7 @@ import { useAnalytics, useShare } from 'hooks/Utils'; import { blobToFile, getCroppedImgAsBlob, readFile } from 'components/inputs/ImageUploadUtils'; import Dialog from 'components/layout/Dialog'; import Paper, { PaperProps } from 'components/layout/Paper'; +import { Button } from 'components/ui/button'; const UploadPaper = styled(Paper)(({ theme }) => ({ display: 'grid', @@ -62,8 +64,6 @@ export const GenericImageUpload = ({ formState, label = 'Last opp fil', ratio, - paperProps, - ...props }: ImageUploadProps) => { const name = register.name as Path; const { [name]: fieldError } = formState.errors; @@ -140,24 +140,40 @@ export const GenericImageUpload = ({ }; return ( <> - - {url && } -
- - - -
+
+ {url ? ( + + ) : ( +
+ +
+ )} {Boolean(error) && {error?.message}} {url && ( - )} - +
({
{Boolean(error) && {error?.message}} {url && ( - + )} ); @@ -321,9 +341,9 @@ export const FileUpload = ({ label = 'Last opp f
diff --git a/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx b/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx index 16bf57eb..6d5e8557 100644 --- a/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx +++ b/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx @@ -170,7 +170,14 @@ export const InfoBannerAdminItem = ({ bannerId, onClose }: InfoBannerAdminItemPr helperText='F,eks: https://tihlde.org eller https://nrk.no' /> - + Lagre diff --git a/src/pages/EventAdministration/components/EventEditPriorityPools.tsx b/src/pages/EventAdministration/components/EventEditPriorityPools.tsx index d8edc88e..81189939 100644 --- a/src/pages/EventAdministration/components/EventEditPriorityPools.tsx +++ b/src/pages/EventAdministration/components/EventEditPriorityPools.tsx @@ -3,7 +3,6 @@ import { Alert, AlertTitle, Box, - Button, Checkbox, Chip, FormControl, @@ -27,6 +26,7 @@ import { useGroupsByType } from 'hooks/Group'; import { useUser } from 'hooks/User'; import { ShowMoreText } from 'components/miscellaneous/UserInformation'; +import { Button } from 'components/ui/button'; export type EventEditPriorityPoolsProps = { priorityPools: Array; @@ -132,7 +132,7 @@ Om du for eksempel vil prioritere ${user?.studyyear.group?.name}-kullet til Data ))} - diff --git a/src/pages/EventAdministration/components/EventEditor.tsx b/src/pages/EventAdministration/components/EventEditor.tsx index 1a265950..643d777a 100644 --- a/src/pages/EventAdministration/components/EventEditor.tsx +++ b/src/pages/EventAdministration/components/EventEditor.tsx @@ -424,7 +424,14 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { - + {groupOptions.length > 0 && ( diff --git a/src/pages/EventAdministration/components/Participant.tsx b/src/pages/EventAdministration/components/Participant.tsx index d4aae294..5f603ca6 100644 --- a/src/pages/EventAdministration/components/Participant.tsx +++ b/src/pages/EventAdministration/components/Participant.tsx @@ -117,9 +117,7 @@ const Participant = ({ registration, eventId }: ParticipantProps) => {
{`Epost: ${registration.user_info.email}`} {`Påmeldt: ${formatDate(parseISO(registration.created_at))}`} - {registration.wait_queue_number !== null && ( - {`Ventelistenummer: ${registration.wait_queue_number}`} - )} + {registration.wait_queue_number !== null && {`Ventelistenummer: ${registration.wait_queue_number}`}}
{registration.is_on_wait && event && event.list_count >= event.limit ? ( diff --git a/src/pages/GalleryDetails/components/GalleryEditor.tsx b/src/pages/GalleryDetails/components/GalleryEditor.tsx index 27d3e3c5..667b4eda 100644 --- a/src/pages/GalleryDetails/components/GalleryEditor.tsx +++ b/src/pages/GalleryDetails/components/GalleryEditor.tsx @@ -72,7 +72,7 @@ const GalleryEditor = ({ id }: GalleryEditorProps) => {
- + Oppdater galleri diff --git a/src/pages/Groups/components/GroupAdmin.tsx b/src/pages/Groups/components/GroupAdmin.tsx index de7d9466..58616842 100644 --- a/src/pages/Groups/components/GroupAdmin.tsx +++ b/src/pages/Groups/components/GroupAdmin.tsx @@ -55,7 +55,14 @@ const GroupAdmin = ({ group }: UpdateGroupModalProps) => { - + & { user: Array; }; -const AddFineDialog = forwardRef(function AddFineDialog({ groupSlug, ...props }: AddFineDialogProps, ref: Ref) { +const AddFineDialog = forwardRef(function AddFineDialog({ groupSlug }: AddFineDialogProps, ref: Ref) { const { event } = useAnalytics(); const [dialogOpen, setDialogOpen] = useState(false); const { data: laws } = useGroupLaws(groupSlug, { enabled: dialogOpen }); @@ -123,10 +124,9 @@ const AddFineDialog = forwardRef(function AddFineDialog({ groupSlug, ...props }: )}

)} - setDialogOpen(true)} ref={ref}> - - Ny bot - + ); }); diff --git a/src/pages/NewsAdministration/components/NewsEditor.tsx b/src/pages/NewsAdministration/components/NewsEditor.tsx index af799e74..7b10b4f1 100644 --- a/src/pages/NewsAdministration/components/NewsEditor.tsx +++ b/src/pages/NewsAdministration/components/NewsEditor.tsx @@ -156,7 +156,14 @@ const NewsEditor = ({ newsId, goToNews }: NewsEditorProps) => { - + ({ @@ -114,13 +113,13 @@ const Admin = () => { {cards.map((card, i) => ( ))} - + {/* Filopplastning Last opp filer og få en link du kan dele med andre. Bruk link-forkorteren hvis du vil ha enda kortere linker. - + */} ); }; diff --git a/tailwind.config.ts b/tailwind.config.ts index c0b4d728..6492c743 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -24,32 +24,32 @@ module.exports = { background: "hsl(var(--background))", foreground: "hsl(var(--foreground))", primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", + DEFAULT: "hsl(var(--primary) / )", + foreground: "hsl(var(--primary-foreground) / )", }, secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", + DEFAULT: "hsl(var(--secondary) / )", + foreground: "hsl(var(--secondary-foreground) / )", }, destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", + DEFAULT: "hsl(var(--destructive) / )", + foreground: "hsl(var(--destructive-foreground) / )", }, muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", + DEFAULT: "hsl(var(--muted) / )", + foreground: "hsl(var(--muted-foreground) / )", }, accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", + DEFAULT: "hsl(var(--accent) / )", + foreground: "hsl(var(--accent-foreground) / )", }, popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", + DEFAULT: "hsl(var(--popover) / )", + foreground: "hsl(var(--popover-foreground) / )", }, card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", + DEFAULT: "hsl(var(--card) / )", + foreground: "hsl(var(--card-foreground) / )", }, }, borderRadius: { From a12f6df443edceb5562b353be8db3697d59b47b9 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Wed, 13 Mar 2024 09:57:27 +0100 Subject: [PATCH 036/135] Shadcn redesign footer (#971) * fixed long text on image upload and removed hover on small devices * refactord footer to shadcn --- package.json | 1 + pnpm-lock.yaml | 68 ++++++ src/components/inputs/Upload.tsx | 2 +- .../InfoBanner/InfoBannerAdminItem.tsx | 9 +- src/components/navigation/Footer.tsx | 214 +++++------------- src/components/ui/separator.tsx | 32 +++ .../components/EventEditor.tsx | 9 +- .../components/GalleryEditor.tsx | 2 +- src/pages/Groups/components/GroupAdmin.tsx | 9 +- .../components/NewsEditor.tsx | 9 +- 10 files changed, 159 insertions(+), 196 deletions(-) create mode 100644 src/components/ui/separator.tsx diff --git a/package.json b/package.json index 89e40f0a..ba89b482 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@mui/icons-material": "^5.14.8", "@mui/lab": "^5.0.0-alpha.60", "@mui/material": "^5.14.9", + "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@vercel/analytics": "1.0.2", "browser-image-compression": "^2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fb00eeb..4d32ba9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ dependencies: '@mui/material': specifier: ^5.14.9 version: 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-separator': + specifier: ^1.0.3 + version: 1.0.3(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@17.0.37)(react@17.0.2) @@ -1873,6 +1876,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-compose-refs@1.0.1(react@17.0.2): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-context-menu@2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: @@ -2316,6 +2332,25 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-primitive@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-slot': 1.0.2(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-progress@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: @@ -2488,6 +2523,25 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-separator@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-slider@1.1.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} peerDependencies: @@ -2534,6 +2588,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-slot@1.0.2(react@17.0.2): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-switch@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: diff --git a/src/components/inputs/Upload.tsx b/src/components/inputs/Upload.tsx index 0bc2af74..c454370c 100644 --- a/src/components/inputs/Upload.tsx +++ b/src/components/inputs/Upload.tsx @@ -150,7 +150,7 @@ export const GenericImageUpload = ({ isLoading ? 'cursor-default' : 'cursor-pointer' + - ` flex flex-col items-center justify-center w-full h-64 border-2 border-dashed rounded-lg bg-background hover:bg-secondary dark:hover:border-gray-600` + ` flex flex-col items-center justify-center w-full h-64 border-2 border-dashed rounded-lg bg-background md:hover:bg-secondary md:dark:hover:border-gray-600` } htmlFor='image-upload-button'>
diff --git a/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx b/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx index 6d5e8557..16bf57eb 100644 --- a/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx +++ b/src/components/miscellaneous/InfoBanner/InfoBannerAdminItem.tsx @@ -170,14 +170,7 @@ export const InfoBannerAdminItem = ({ bannerId, onClose }: InfoBannerAdminItemPr helperText='F,eks: https://tihlde.org eller https://nrk.no' /> - + Lagre diff --git a/src/components/navigation/Footer.tsx b/src/components/navigation/Footer.tsx index 91a459fe..234d064b 100644 --- a/src/components/navigation/Footer.tsx +++ b/src/components/navigation/Footer.tsx @@ -1,12 +1,9 @@ -import { Divider, Typography } from '@mui/material'; -import { makeStyles } from 'makeStyles'; -import { useState } from 'react'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; import { useAnalytics } from 'hooks/Utils'; -import ThemeSettings from 'components/miscellaneous/ThemeSettings'; +import { Separator } from 'components/ui/separator'; import DISCORD from 'assets/icons/discord.svg'; import FACEBOOK from 'assets/icons/facebook.svg'; @@ -17,123 +14,8 @@ import TWITTER from 'assets/icons/twitter.svg'; import VERCEL from 'assets/icons/vercel.svg'; import MAINSPONSOR from 'assets/img/mainSponsor.png'; -const useStyles = makeStyles()((theme) => ({ - root: { - position: 'relative', - backgroundColor: theme.palette.colors.footer, - padding: theme.spacing(1, 0, 4), - display: 'grid', - gridGap: theme.spacing(3), - gridTemplateColumns: '1fr 1fr 1fr', - gridTemplateAreas: "'about main sponsors' 'index index index'", - justifyItems: 'center', - color: theme.palette.getContrastText(theme.palette.colors.footer), - borderTop: `${theme.palette.borderWidth} solid ${theme.palette.divider}`, - [theme.breakpoints.down('lg')]: { - gridTemplateAreas: "'main main' 'about sponsors' 'index index'", - gridTemplateColumns: '1fr 1fr', - padding: theme.spacing(1, 0, 14), - }, - [theme.breakpoints.down('md')]: { - gridTemplateRows: 'auto auto auto', - gridTemplateAreas: "'main' 'about' 'sponsors' 'index'", - gridTemplateColumns: '1fr', - }, - }, - marginTopColumns: { - marginTop: theme.spacing(12), - [theme.breakpoints.down('lg')]: { - marginTop: theme.spacing(4), - }, - }, - about: { - gridArea: 'about', - }, - main: { - gridArea: 'main', - }, - sponsors: { - gridArea: 'sponsors', - }, - index: { - gridArea: 'index', - padding: theme.spacing(1, 0, 0), - }, - flexColumn: { - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - }, - socialMediaWrapper: { - alignItems: 'center', - display: 'flex', - margin: theme.spacing(1, 0), - [theme.breakpoints.down('xl')]: { - display: 'grid', - gridTemplateColumns: '1fr 1fr 1fr', - gridGap: theme.spacing(2), - }, - [theme.breakpoints.down('lg')]: { - alignItems: 'center', - display: 'flex', - margin: theme.spacing(1, 0), - }, - [theme.breakpoints.down('md')]: { - display: 'grid', - gridTemplateColumns: '1fr 1fr 1fr', - gridGap: theme.spacing(2), - }, - }, - marginBottom: { - marginBottom: theme.spacing(2), - }, - link: { - color: 'white', - }, - imgLink: { - margin: theme.spacing(0, 2.5), - [theme.breakpoints.down('lg')]: { - margin: theme.spacing(0, 2), - }, - }, - attribute: { - textAlign: 'center', - marginBottom: theme.spacing(2), - }, - attributeName: { - textTransform: 'uppercase', - color: theme.palette.common.white, - fontWeight: 600, - }, - logo: { - minWidth: '250px', - width: '46%', - height: 'auto', - [theme.breakpoints.down('md')]: { - minWidth: '200px', - }, - }, - divider: { - margin: theme.spacing(1, 0, 2), - backgroundColor: '#fff', - width: 175, - }, - soMeIcon: { - width: 38, - transition: 'transform .14s', - '&:hover': { - transform: 'scale(1.1)', - }, - }, - caption: { - marginBottom: theme.spacing(4), - }, -})); - const Footer = () => { - const { classes, cx } = useStyles(); const { event } = useAnalytics(); - const [showModal, setShowModal] = useState(false); const mediaList = [ { img: FACEBOOK, link: 'https://www.facebook.com/tihlde/' }, @@ -153,53 +35,61 @@ const Footer = () => { const someAnalytics = (some: string) => event('open', 'social-media', `Click on: ${some}`); return ( -
- {showModal && setShowModal(false)} open={showModal} />} -
- Kontakt - - {attributes.map((attribute, index) => ( -
- {attribute.key} - {attribute.value} +
+
+
+
+

Kontakt

+
- ))} - - - Kontakt oss - - -
-
- - Sponsor - - - Hovedsamarbeidspartner - - -
- {mediaList.map((media, index) => ( - someAnalytics(media.link)} rel='noopener noreferrer' target='_blank'> - SoMe - + {attributes.map((attribute, index) => ( +
+

{attribute.key}

+

{attribute.value}

+
))} +

+ + Kontakt oss + +

+
+ +
+
+ + Sponsor + +

Hovedsamarbeidspartner

+
+ +
+ + +
+
+ +
+
+

Samarbeid

+ +
+ + Vercel +
-
- Samarbeid - - - Vercel - -
-
- - Feil på siden?{' '} - - Rapporter til Index - - + +
+

+ Feil på siden? Rapporter til Index +

); diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx new file mode 100644 index 00000000..bd4ae751 --- /dev/null +++ b/src/components/ui/separator.tsx @@ -0,0 +1,32 @@ +"use client" + +import * as SeparatorPrimitive from "@radix-ui/react-separator" + +import { cn } from "lib/utils" +import { forwardRef } from "react" + + +const Separator = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>( + ( + { className, orientation = "horizontal", decorative = true, ...props }, + ref + ) => ( + + ) +) +Separator.displayName = SeparatorPrimitive.Root.displayName + +export { Separator } diff --git a/src/pages/EventAdministration/components/EventEditor.tsx b/src/pages/EventAdministration/components/EventEditor.tsx index 643d777a..1a265950 100644 --- a/src/pages/EventAdministration/components/EventEditor.tsx +++ b/src/pages/EventAdministration/components/EventEditor.tsx @@ -424,14 +424,7 @@ const EventEditor = ({ eventId, goToEvent }: EventEditorProps) => { - + {groupOptions.length > 0 && ( diff --git a/src/pages/GalleryDetails/components/GalleryEditor.tsx b/src/pages/GalleryDetails/components/GalleryEditor.tsx index 667b4eda..27d3e3c5 100644 --- a/src/pages/GalleryDetails/components/GalleryEditor.tsx +++ b/src/pages/GalleryDetails/components/GalleryEditor.tsx @@ -72,7 +72,7 @@ const GalleryEditor = ({ id }: GalleryEditorProps) => { - + Oppdater galleri diff --git a/src/pages/Groups/components/GroupAdmin.tsx b/src/pages/Groups/components/GroupAdmin.tsx index 58616842..de7d9466 100644 --- a/src/pages/Groups/components/GroupAdmin.tsx +++ b/src/pages/Groups/components/GroupAdmin.tsx @@ -55,14 +55,7 @@ const GroupAdmin = ({ group }: UpdateGroupModalProps) => { - + { - + Date: Wed, 13 Mar 2024 10:14:40 +0100 Subject: [PATCH 037/135] fixed pnpm-lock --- pnpm-lock.yaml | 91 ++------------------------------------------------ 1 file changed, 2 insertions(+), 89 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 486bc6b8..70430845 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,7 +34,7 @@ dependencies: version: 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.0.3(react-dom@17.0.2)(react@17.0.2) + version: 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@17.0.37)(react@17.0.2) @@ -86,9 +86,6 @@ dependencies: radix-ui: specifier: ^1.0.1 version: 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) - radix-ui: - specifier: ^1.0.1 - version: 1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) react: specifier: ^17.0.2 version: 17.0.2 @@ -143,12 +140,6 @@ dependencies: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.1) - tailwind-merge: - specifier: ^2.2.1 - version: 2.2.1 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.1) tss-react: specifier: ^4.9.0 version: 4.9.0(@emotion/react@11.9.0)(react@17.0.2) @@ -190,9 +181,6 @@ devDependencies: autoprefixer: specifier: ^10.4.18 version: 10.4.18(postcss@8.4.35) - autoprefixer: - specifier: ^10.4.18 - version: 10.4.18(postcss@8.4.35) eslint: specifier: ^8.48.0 version: 8.48.0 @@ -217,18 +205,12 @@ devDependencies: postcss: specifier: ^8.4.35 version: 8.4.35 - postcss: - specifier: ^8.4.35 - version: 8.4.35 prettier: specifier: ^2.6.0 version: 2.6.0 tailwindcss: specifier: ^3.4.1 version: 3.4.1 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 typescript: specifier: ^4.6.2 version: 4.6.2 @@ -259,10 +241,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -1472,7 +1450,7 @@ packages: '@mui/types': 7.2.9(@types/react@17.0.37) '@mui/utils': 5.14.18(@types/react@17.0.37)(react@17.0.2) '@types/react': 17.0.37 - clsx: 2.0.0 + clsx: 2.1.0 csstype: 3.1.2 hoist-non-react-statics: 3.3.2 jss: 10.10.0 @@ -1898,19 +1876,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-compose-refs@1.0.1(react@17.0.2): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-context-menu@2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: @@ -2354,25 +2319,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-primitive@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-slot': 1.0.2(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-progress@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: @@ -2545,25 +2491,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-separator@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-slider@1.1.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} peerDependencies: @@ -2610,20 +2537,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-slot@1.0.2(react@17.0.2): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - react: 17.0.2 - dev: false - /@radix-ui/react-switch@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: From 456583ca5e5a55d5c88f84547822e220326b23b2 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Wed, 13 Mar 2024 17:15:25 +0100 Subject: [PATCH 038/135] Refactor(shadcn)/markdown (#974) * fixed markdown bugs * format --- .../miscellaneous/MarkdownRenderer.tsx | 46 ++++++------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/src/components/miscellaneous/MarkdownRenderer.tsx b/src/components/miscellaneous/MarkdownRenderer.tsx index 4243ac30..926933ca 100644 --- a/src/components/miscellaneous/MarkdownRenderer.tsx +++ b/src/components/miscellaneous/MarkdownRenderer.tsx @@ -1,4 +1,5 @@ -import { Divider, Skeleton, styled, Typography } from '@mui/material'; +import { Skeleton, styled } from '@mui/material'; +import { Separator } from '@radix-ui/react-separator'; import { createElement, lazy, ReactNode, Suspense, useMemo } from 'react'; import rehypeRaw from 'rehype-raw'; @@ -11,24 +12,10 @@ import { useNewsById } from 'hooks/News'; import Expand from 'components/layout/Expand'; import EventListItem, { EventListItemLoading } from 'components/miscellaneous/EventListItem'; import JobPostListItem, { JobPostListItemLoading } from 'components/miscellaneous/JobPostListItem'; -import Linkify from 'components/miscellaneous/Linkify'; import NewsListItem, { NewsListItemLoading } from 'components/miscellaneous/NewsListItem'; const ReactMarkdown = lazy(() => import('react-markdown')); -export const Ol = styled('ol')(({ theme }) => ({ - listStylePosition: 'inside', - marginLeft: theme.spacing(1), -})); -export const Ul = styled('ul')(({ theme }) => ({ - listStylePosition: 'inside', - marginLeft: theme.spacing(1), -})); -export const Li = styled('li')(({ theme }) => ({ - fontSize: theme.typography.body1.fontSize, - wordBreak: 'break-word', -})); - export const InlineCode = styled('code')(({ theme }) => ({ padding: theme.spacing(0.5, 1), color: theme.palette.text.primary, @@ -36,12 +23,6 @@ export const InlineCode = styled('code')(({ theme }) => ({ background: theme.palette.action.selected, })); -export const Heading = styled(Typography)(({ theme }) => ({ - marginBottom: theme.spacing(1), - color: theme.palette.text.primary, - wordBreak: 'break-word', -})); - export const ExpandList = styled('div')(({ theme }) => ({ marginBottom: theme.spacing(1), })); @@ -132,19 +113,20 @@ const components: any = { blockquote: ({ children }: { children: ReactNode[] }) =>
{children}
, code: CodeBlock, pre: ({ children }: { children: ReactNode[] }) => children, - h1: ({ children }: { children: ReactNode[] }) => {children}, - h2: ({ children }: { children: ReactNode[] }) => {children}, - h3: ({ children }: { children: ReactNode[] }) => {children}, - ol: ({ children }: { children: ReactNode[]; ordered: boolean }) =>
    {children}
, - ul: ({ children }: { children: ReactNode[]; ordered: boolean }) =>
    {children}
, + h1: ({ children }: { children: ReactNode[] }) =>

{children}

, + h2: ({ children }: { children: ReactNode[] }) =>

{children}

, + h3: ({ children }: { children: ReactNode[] }) =>

{children}

, + ol: ({ children }: { children: ReactNode[]; ordered: boolean }) =>
    {children}
, + ul: ({ children }: { children: ReactNode[]; ordered: boolean }) =>
    {children}
, li: ({ children, checked }: { children: ReactNode[]; checked: boolean }) => - createElement(Li, {}, checked ? createElement('input', { type: 'checkbox', checked, readOnly: true }) : null, children), - p: ({ children }: { children: ReactNode[] }) => ( - - {children} - + createElement('li', {}, checked ? createElement('input', { type: 'checkbox', checked, readOnly: true }) : null, children), + p: ({ children }: { children: ReactNode[] }) =>

{children}

, + a: ({ children, href }: { children: ReactNode[]; href: string }) => ( + + {children} + ), - hr: () => , + hr: () => , img: ({ alt, src }: { alt: string; src: string }) => {alt}, }; From 7955be06a14e614fdde2030d659cf7bd8e1509e4 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Thu, 14 Mar 2024 08:15:30 +0100 Subject: [PATCH 039/135] fixed link for event calender (#976) --- src/pages/Landing/components/EventsCalendarPopover.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/Landing/components/EventsCalendarPopover.tsx b/src/pages/Landing/components/EventsCalendarPopover.tsx index 78f53f25..bb66fca7 100644 --- a/src/pages/Landing/components/EventsCalendarPopover.tsx +++ b/src/pages/Landing/components/EventsCalendarPopover.tsx @@ -35,7 +35,9 @@ const EventsCalendarPopover = ({ id }: EventsCalendarPopoverProps) => { )} - Til arrangement + + Til arrangement + )} From ebf8a637a3372c1c478fcafb8210e1a234c361c2 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Fri, 15 Mar 2024 08:43:26 +0100 Subject: [PATCH 040/135] redesigned to shadcn avatars (#977) --- package.json | 1 + pnpm-lock.yaml | 110 ++++++++++++++++++ .../navigation/ProfileTopbarButton.tsx | 33 +++--- src/components/ui/avatar.tsx | 48 ++++++++ src/components/ui/separator.tsx | 2 - src/pages/Badges/BadgesLeaderboard.tsx | 8 +- src/pages/Badges/details/index.tsx | 7 +- .../components/Participant.tsx | 7 +- .../EventPublicRegistrationsList.tsx | 12 +- src/pages/Groups/about/MembersCard.tsx | 7 +- .../about/MembershipHistoryListItem.tsx | 7 +- src/pages/Groups/about/MembershipListItem.tsx | 7 +- src/pages/Groups/fines/UserFineItem.tsx | 7 +- src/pages/Profile/index.tsx | 12 +- .../components/UserStrikeListItem.tsx | 10 +- .../UserAdmin/components/PersonListItem.tsx | 9 +- 16 files changed, 244 insertions(+), 43 deletions(-) create mode 100644 src/components/ui/avatar.tsx diff --git a/package.json b/package.json index ba89b482..677fd59f 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@mui/icons-material": "^5.14.8", "@mui/lab": "^5.0.0-alpha.60", "@mui/material": "^5.14.9", + "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@vercel/analytics": "1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70430845..a75decd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ dependencies: '@mui/material': specifier: ^5.14.9 version: 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-avatar': + specifier: ^1.0.4 + version: 1.0.4(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-separator': specifier: ^1.0.3 version: 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) @@ -1782,6 +1785,28 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-avatar@1.0.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} peerDependencies: @@ -1876,6 +1901,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-compose-refs@1.0.1(react@17.0.2): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-context-menu@2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: @@ -1916,6 +1954,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-context@1.0.1(react@17.0.2): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-dialog@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: @@ -2319,6 +2370,25 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-primitive@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-slot': 1.0.2(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-progress@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: @@ -2537,6 +2607,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-slot@1.0.2(react@17.0.2): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-switch@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: @@ -2747,6 +2831,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-callback-ref@1.0.1(react@17.0.2): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -2791,6 +2888,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-layout-effect@1.0.1(react@17.0.2): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-use-previous@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: diff --git a/src/components/navigation/ProfileTopbarButton.tsx b/src/components/navigation/ProfileTopbarButton.tsx index 81a95f7b..d7a2ad5a 100644 --- a/src/components/navigation/ProfileTopbarButton.tsx +++ b/src/components/navigation/ProfileTopbarButton.tsx @@ -1,6 +1,6 @@ -import PersonOutlineIcon from '@mui/icons-material/PersonRounded'; import LightIcon from '@mui/icons-material/WbSunnyRounded'; -import { Button, IconButton, Theme, useTheme } from '@mui/material'; +import { IconButton, Theme, useTheme } from '@mui/material'; +import { UserRoundIcon } from 'lucide-react'; import { makeStyles } from 'makeStyles'; import { useState } from 'react'; import { Link } from 'react-router-dom'; @@ -10,10 +10,10 @@ import { useSetRedirectUrl } from 'hooks/Misc'; import { useUser } from 'hooks/User'; import { useAnalytics } from 'hooks/Utils'; -import Avatar from 'components/miscellaneous/Avatar'; import ThemeSettings from 'components/miscellaneous/ThemeSettings'; import { NavigationOptions } from 'components/navigation/Navigation'; import TopbarNotifications from 'components/navigation/TopbarNotifications'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; const useStyles = makeStyles()((theme, props) => ({ themeButton: { @@ -46,32 +46,31 @@ const ProfileTopbarButton = (props: ProfileTopbarButtonProps) => { const analytics = (page: string) => event(`go-to-${page}`, 'topbar-profile-button', `Go to ${page}`); return ( -
+
{Boolean(user) && } setShowThemeSettings(false)} open={showThemeSettings} /> setShowThemeSettings(true)}> {user ? ( - + location.reload() : () => analytics('profile')} to={URLS.profile}> + + + + {user.first_name[0]} + {user.last_name[0]} + + + ) : ( - { setLogInRedirectURL(window.location.pathname); analytics('log-in'); }} to={URLS.login}> - - + + )}
); diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 00000000..7bd726d1 --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,48 @@ +import * as AvatarPrimitive from "@radix-ui/react-avatar" +import { forwardRef } from "react" + +import { cn } from "lib/utils" + +const Avatar = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Avatar.displayName = AvatarPrimitive.Root.displayName + +const AvatarImage = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AvatarImage.displayName = AvatarPrimitive.Image.displayName + +const AvatarFallback = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx index bd4ae751..78715d7a 100644 --- a/src/components/ui/separator.tsx +++ b/src/components/ui/separator.tsx @@ -1,5 +1,3 @@ -"use client" - import * as SeparatorPrimitive from "@radix-ui/react-separator" import { cn } from "lib/utils" diff --git a/src/pages/Badges/BadgesLeaderboard.tsx b/src/pages/Badges/BadgesLeaderboard.tsx index 8f7928db..9815a590 100644 --- a/src/pages/Badges/BadgesLeaderboard.tsx +++ b/src/pages/Badges/BadgesLeaderboard.tsx @@ -1,4 +1,4 @@ -import { Avatar, List, ListItem, ListItemAvatar, ListItemButton, ListItemText, MenuItem, Stack, Tooltip, Typography } from '@mui/material'; +import { List, ListItem, ListItemAvatar, ListItemButton, ListItemText, MenuItem, Stack, Tooltip, Typography } from '@mui/material'; import { useMemo } from 'react'; import { useForm } from 'react-hook-form'; import { InfiniteQueryObserverResult, QueryKey, UseInfiniteQueryOptions } from 'react-query'; @@ -13,6 +13,7 @@ import Select from 'components/inputs/Select'; import Pagination from 'components/layout/Pagination'; import Paper from 'components/layout/Paper'; import NotFoundIndicator from 'components/miscellaneous/NotFoundIndicator'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; export type BadgesLeaderboard = { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -77,12 +78,13 @@ export const BadgesLeaderboard = ({ useHook, filters, options }: BadgesLeaderboa fetchNextPage()}> {leaderboardEntries.map((entry, index) => ( - + - {index + 1} + + {entry.user.first_name[0] + entry.user.last_name[0]} diff --git a/src/pages/Badges/details/index.tsx b/src/pages/Badges/details/index.tsx index dceb756c..bf8e5065 100644 --- a/src/pages/Badges/details/index.tsx +++ b/src/pages/Badges/details/index.tsx @@ -12,9 +12,9 @@ import BadgeCategoryItem from 'pages/Badges/components/BadgeCategoryItem'; import Pagination from 'components/layout/Pagination'; import Paper from 'components/layout/Paper'; import { PrimaryTopBox } from 'components/layout/TopBox'; -import Avatar from 'components/miscellaneous/Avatar'; import NotFoundIndicator from 'components/miscellaneous/NotFoundIndicator'; import Page from 'components/navigation/Page'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; const BadgeDetails = () => { const { badgeId } = useParams<'badgeId'>(); @@ -67,7 +67,10 @@ const BadgeDetails = () => { - + + + {entry.user.first_name[0] + entry.user.last_name[0]} + { }> setExpanded((prev) => !prev)}> - + + + {registration.user_info.first_name[0] + registration.user_info.last_name[0]} + - + + + {registration.user_info.first_name[0] + registration.user_info.last_name[0]} + ) : ( - + + + ? + diff --git a/src/pages/Groups/about/MembersCard.tsx b/src/pages/Groups/about/MembersCard.tsx index 9cafda02..2e87d8ec 100644 --- a/src/pages/Groups/about/MembersCard.tsx +++ b/src/pages/Groups/about/MembersCard.tsx @@ -14,8 +14,8 @@ import MembershipListItem from 'pages/Groups/about/MembershipListItem'; import Pagination from 'components/layout/Pagination'; import Paper from 'components/layout/Paper'; -import Avatar from 'components/miscellaneous/Avatar'; import NotFoundIndicator from 'components/miscellaneous/NotFoundIndicator'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; export type MembersCardProps = { groupSlug: Group['slug']; @@ -52,7 +52,10 @@ const MembersCard = ({ groupSlug }: MembersCardProps) => { - + + + {leader.first_name[0] + leader.last_name[0]} + diff --git a/src/pages/Groups/about/MembershipHistoryListItem.tsx b/src/pages/Groups/about/MembershipHistoryListItem.tsx index 86741859..8fe923bb 100644 --- a/src/pages/Groups/about/MembershipHistoryListItem.tsx +++ b/src/pages/Groups/about/MembershipHistoryListItem.tsx @@ -22,7 +22,7 @@ import SubmitButton from 'components/inputs/SubmitButton'; import Dialog from 'components/layout/Dialog'; import Paper from 'components/layout/Paper'; import VerifyDialog from 'components/layout/VerifyDialog'; -import Avatar from 'components/miscellaneous/Avatar'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; export type MembershipHistoryListItemProps = { membership: MembershipHistory; @@ -67,7 +67,10 @@ const MembershipHistoryListItem = ({ membership, isAdmin }: MembershipHistoryLis secondaryAction={isAdmin && setExpanded((prev) => !prev)}>{expanded ? : }}> - + + + {user.first_name[0] + user.last_name[0]} + secondaryAction={isAdmin && setExpanded((prev) => !prev)}>{expanded ? : }}> - + + + {user.first_name[0] + user.last_name[0]} + & { userFine: GroupUserFine; @@ -57,7 +57,10 @@ const UserFineItem = ({ userFine, groupSlug, isAdmin }: UserFineItemProps) => { return ( setExpanded((prev) => !prev)}> - + + + {userFine.user.first_name[0] + userFine.user.last_name[0]} + {userFine.fines_amount} diff --git a/src/pages/Profile/index.tsx b/src/pages/Profile/index.tsx index 1371a0fa..988cfe96 100644 --- a/src/pages/Profile/index.tsx +++ b/src/pages/Profile/index.tsx @@ -42,9 +42,9 @@ import ProfileSettings from 'pages/Profile/components/ProfileSettings'; import ProfileStrikes from 'pages/Profile/components/ProfileStrikes'; import Paper from 'components/layout/Paper'; -import Avatar from 'components/miscellaneous/Avatar'; import QRButton from 'components/miscellaneous/QRButton'; import Page from 'components/navigation/Page'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; const Content = styled('div')(({ theme }) => ({ display: 'grid', @@ -126,7 +126,15 @@ const Profile = () => { - + {user && ( + + + + {user.first_name[0]} + {user.last_name[0]} + + + )} {user && user.first_name ? ( { return ( setExpanded((prev) => !prev)}> - + + + + {user.first_name[0]} + {user.last_name[0]} + + {user.number_of_strikes} diff --git a/src/pages/UserAdmin/components/PersonListItem.tsx b/src/pages/UserAdmin/components/PersonListItem.tsx index a753c3e8..642d6bbe 100644 --- a/src/pages/UserAdmin/components/PersonListItem.tsx +++ b/src/pages/UserAdmin/components/PersonListItem.tsx @@ -18,7 +18,7 @@ import TextField from 'components/inputs/TextField'; import Dialog from 'components/layout/Dialog'; import { StandaloneExpand } from 'components/layout/Expand'; import Paper from 'components/layout/Paper'; -import Avatar from 'components/miscellaneous/Avatar'; +import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; type FormValues = { reason: string; @@ -89,7 +89,12 @@ const PersonListItem = ({ user, is_TIHLDE_member = true }: PersonListItemProps) } + icon={ + + + {user.first_name[0] + user.last_name[0]} + + } listItemProps={{ secondaryAction: ( From 22fc72e587cb54b17ccddd88c610571d4cbc2082 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Fri, 15 Mar 2024 16:15:50 +0100 Subject: [PATCH 041/135] changed themesettings component to shadcn (#978) --- CHANGELOG.md | 4 + package.json | 1 + pnpm-lock.yaml | 418 ++++++++++++++++++ .../miscellaneous/ThemeSettings.tsx | 57 +-- .../navigation/ProfileTopbarButton.tsx | 31 +- src/components/ui/dropdown-menu.tsx | 198 +++++++++ 6 files changed, 646 insertions(+), 63 deletions(-) create mode 100644 src/components/ui/dropdown-menu.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 007203e9..cc2c5969 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ ### 🎨 - Designendringer ## Neste versjon +- 🎨 **Tema**. Endret til shadcn komponenter for å endre tema. +- 🦟 **Markdown**. Fikset markdown bug. +- 🎨 **Bildeopplastning**. Endret komponent for å laste opp bilder. +- 🎨 **Admin filopplastning**. Fjernet mulighet for admin å laste opp bilder. ## Versjon 2023.07.02 - 🎨 **Vipps betaling**. Brukere kan nå ikke sette nedbetalingstid selv. 2 timer er konstant tid. diff --git a/package.json b/package.json index 677fd59f..56298cad 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@mui/lab": "^5.0.0-alpha.60", "@mui/material": "^5.14.9", "@radix-ui/react-avatar": "^1.0.4", + "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@vercel/analytics": "1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a75decd7..c970782a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,9 @@ dependencies: '@radix-ui/react-avatar': specifier: ^1.0.4 version: 1.0.4(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.6 + version: 2.0.6(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-separator': specifier: ^1.0.3 version: 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) @@ -1740,6 +1743,25 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-arrow@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} peerDependencies: @@ -1887,6 +1909,28 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-collection@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-compose-refs@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -2015,6 +2059,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-direction@1.0.1(react@17.0.2): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -2040,6 +2097,29 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-dismissable-layer@1.0.5(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + '@radix-ui/react-use-escape-keydown': 1.0.3(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: @@ -2067,6 +2147,31 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-dropdown-menu@2.0.6(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-id': 1.0.1(react@17.0.2) + '@radix-ui/react-menu': 2.0.6(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-focus-guards@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: @@ -2081,6 +2186,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-focus-guards@1.0.1(react@17.0.2): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: @@ -2104,6 +2222,27 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-focus-scope@1.0.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-hover-card@1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} peerDependencies: @@ -2148,6 +2287,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-id@1.0.1(react@17.0.2): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-label@2.0.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: @@ -2207,6 +2360,42 @@ packages: react-remove-scroll: 2.5.5(@types/react@17.0.37)(react@17.0.2) dev: false + /@radix-ui/react-menu@2.0.6(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(react@17.0.2) + '@radix-ui/react-dismissable-layer': 1.0.5(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-focus-guards': 1.0.1(react@17.0.2) + '@radix-ui/react-focus-scope': 1.0.4(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(react@17.0.2) + '@radix-ui/react-popper': 1.1.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-portal': 1.0.4(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-roving-focus': 1.0.4(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + aria-hidden: 1.2.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-remove-scroll: 2.5.5(react@17.0.2) + dev: false + /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==} peerDependencies: @@ -2306,6 +2495,34 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-popper@1.1.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@floating-ui/react-dom': 2.0.2(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-arrow': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + '@radix-ui/react-use-rect': 1.0.1(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(react@17.0.2) + '@radix-ui/rect': 1.0.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-portal@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: @@ -2327,6 +2544,25 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-portal@1.0.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-presence@1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: @@ -2349,6 +2585,26 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-presence@1.0.1(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-primitive@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -2470,6 +2726,33 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-roving-focus@1.0.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(react@17.0.2) + '@radix-ui/react-id': 1.0.1(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} peerDependencies: @@ -2859,6 +3142,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-controllable-state@1.0.1(react@17.0.2): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -2874,6 +3171,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(react@17.0.2): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -2930,6 +3241,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-rect@1.0.1(react@17.0.2): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/rect': 1.0.1 + react: 17.0.2 + dev: false + /@radix-ui/react-use-size@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: @@ -2945,6 +3270,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-size@1.0.1(react@17.0.2): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: @@ -6429,6 +6768,22 @@ packages: tslib: 2.6.2 dev: false + /react-remove-scroll-bar@2.3.5(react@17.0.2): + resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==} + engines: {node: '>=10'} + deprecated: please update to the following version as this contains a bug (https://github.com/theKashey/react-remove-scroll-bar/issues/57) + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + react: 17.0.2 + react-style-singleton: 2.2.1(react@17.0.2) + tslib: 2.6.2 + dev: false + /react-remove-scroll@2.5.5(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -6448,6 +6803,24 @@ packages: use-sidecar: 1.1.2(@types/react@17.0.37)(react@17.0.2) dev: false + /react-remove-scroll@2.5.5(react@17.0.2): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + react: 17.0.2 + react-remove-scroll-bar: 2.3.5(react@17.0.2) + react-style-singleton: 2.2.1(react@17.0.2) + tslib: 2.6.2 + use-callback-ref: 1.3.1(react@17.0.2) + use-sidecar: 1.1.2(react@17.0.2) + dev: false + /react-router-dom@6.15.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==} engines: {node: '>=14.0.0'} @@ -6496,6 +6869,22 @@ packages: tslib: 2.6.2 dev: false + /react-style-singleton@2.2.1(react@17.0.2): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 17.0.2 + tslib: 2.6.2 + dev: false + /react-transition-group@4.4.5(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -7307,6 +7696,20 @@ packages: tslib: 2.6.2 dev: false + /use-callback-ref@1.3.1(react@17.0.2): + resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + react: 17.0.2 + tslib: 2.6.2 + dev: false + /use-sidecar@1.1.2(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -7323,6 +7726,21 @@ packages: tslib: 2.6.2 dev: false + /use-sidecar@1.1.2(react@17.0.2): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + detect-node-es: 1.1.0 + react: 17.0.2 + tslib: 2.6.2 + dev: false + /utif@2.0.1: resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} dependencies: diff --git a/src/components/miscellaneous/ThemeSettings.tsx b/src/components/miscellaneous/ThemeSettings.tsx index 0b5b7713..fac7a12f 100644 --- a/src/components/miscellaneous/ThemeSettings.tsx +++ b/src/components/miscellaneous/ThemeSettings.tsx @@ -1,36 +1,18 @@ -import { styled, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material'; -import { MouseEvent as ReactMouseEvent, useState } from 'react'; -import { themesDetails, ThemeTypes } from 'theme'; +import { MoonStarIcon, SunIcon } from 'lucide-react'; +import { useState } from 'react'; +import { ThemeTypes } from 'theme'; import { useThemeSettings } from 'hooks/Theme'; import { useAnalytics } from 'hooks/Utils'; -import Dialog from 'components/layout/Dialog'; +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from 'components/ui/dropdown-menu'; -const ThemeDialog = styled(Dialog)({ - '& .MuiPaper-root': { - maxWidth: '250px', - }, -}); -const ButtonGroup = styled(ToggleButtonGroup)(({ theme }) => ({ - background: theme.palette.background.smoke, -})); -const ButtonText = styled(Typography)(({ theme }) => ({ - margin: theme.spacing(0, 1), - color: theme.palette.text.secondary, -})); - -export type ThemeSettingsProps = { - open: boolean; - onClose: () => void; -}; - -const ThemeSettings = ({ open, onClose }: ThemeSettingsProps) => { +const ThemeSettings = () => { const { event } = useAnalytics(); const themeSettings = useThemeSettings(); const [themeName, setThemeName] = useState(themeSettings.getThemeFromStorage()); - const changeTheme = (e: ReactMouseEvent, newThemeName: ThemeTypes) => { + const changeTheme = (newThemeName: ThemeTypes) => { if (newThemeName) { setThemeName(newThemeName); themeSettings.set(newThemeName); @@ -39,19 +21,20 @@ const ThemeSettings = ({ open, onClose }: ThemeSettingsProps) => { }; return ( - - - Tema - - - {themesDetails.map((theme) => ( - - - {theme.name} - - ))} - - + + + {themeName === 'light' ? ( + + ) : ( + + )} + + + changeTheme('light')}>Lyst + changeTheme('dark')}>Mørkt + changeTheme('automatic')}>Automatisk + + ); }; diff --git a/src/components/navigation/ProfileTopbarButton.tsx b/src/components/navigation/ProfileTopbarButton.tsx index d7a2ad5a..81fca0b3 100644 --- a/src/components/navigation/ProfileTopbarButton.tsx +++ b/src/components/navigation/ProfileTopbarButton.tsx @@ -1,8 +1,5 @@ -import LightIcon from '@mui/icons-material/WbSunnyRounded'; -import { IconButton, Theme, useTheme } from '@mui/material'; +import { Theme, useTheme } from '@mui/material'; import { UserRoundIcon } from 'lucide-react'; -import { makeStyles } from 'makeStyles'; -import { useState } from 'react'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; @@ -15,19 +12,6 @@ import { NavigationOptions } from 'components/navigation/Navigation'; import TopbarNotifications from 'components/navigation/TopbarNotifications'; import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; -const useStyles = makeStyles()((theme, props) => ({ - themeButton: { - color: getColor(props, theme), - }, - themeSettingsIcon: { - fontSize: 26, - }, - menuButton: { - color: getColor(props, theme), - margin: 'auto 0', - }, -})); - export const getColor = ({ darkColor, lightColor }: ProfileTopbarButtonProps, theme: Theme) => { const type = theme.palette.mode === 'light' ? lightColor : darkColor; return type === 'white' ? theme.palette.common.white : type === 'blue' ? theme.palette.colors.tihlde : theme.palette.common.black; @@ -37,24 +21,19 @@ export type ProfileTopbarButtonProps = Pick { const { event } = useAnalytics(); - const { classes } = useStyles(props); const { data: user } = useUser(); const theme = useTheme(); const setLogInRedirectURL = useSetRedirectUrl(); - const [showThemeSettings, setShowThemeSettings] = useState(false); const analytics = (page: string) => event(`go-to-${page}`, 'topbar-profile-button', `Go to ${page}`); return ( -
+
{Boolean(user) && } - setShowThemeSettings(false)} open={showThemeSettings} /> - setShowThemeSettings(true)}> - - + {user ? ( - location.reload() : () => analytics('profile')} to={URLS.profile}> - + location.reload() : () => analytics('profile')} to={URLS.profile}> + {user.first_name[0]} diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx new file mode 100644 index 00000000..a3d97cb9 --- /dev/null +++ b/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,198 @@ +import { forwardRef } from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} From 3b24b1e843763ea79dd9a2d078d6893c5c6d61f4 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Sat, 23 Mar 2024 20:18:53 +0100 Subject: [PATCH 042/135] fixed seperator for markdown (#981) --- src/components/miscellaneous/MarkdownRenderer.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/miscellaneous/MarkdownRenderer.tsx b/src/components/miscellaneous/MarkdownRenderer.tsx index 926933ca..3f344684 100644 --- a/src/components/miscellaneous/MarkdownRenderer.tsx +++ b/src/components/miscellaneous/MarkdownRenderer.tsx @@ -1,5 +1,4 @@ import { Skeleton, styled } from '@mui/material'; -import { Separator } from '@radix-ui/react-separator'; import { createElement, lazy, ReactNode, Suspense, useMemo } from 'react'; import rehypeRaw from 'rehype-raw'; @@ -13,6 +12,7 @@ import Expand from 'components/layout/Expand'; import EventListItem, { EventListItemLoading } from 'components/miscellaneous/EventListItem'; import JobPostListItem, { JobPostListItemLoading } from 'components/miscellaneous/JobPostListItem'; import NewsListItem, { NewsListItemLoading } from 'components/miscellaneous/NewsListItem'; +import { Separator } from 'components/ui/separator'; const ReactMarkdown = lazy(() => import('react-markdown')); @@ -126,7 +126,7 @@ const components: any = { {children} ), - hr: () => , + hr: () => , img: ({ alt, src }: { alt: string; src: string }) => {alt}, }; From 9f4869c08285487e7c36e7ab9eba9ea3b0460f13 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Sun, 24 Mar 2024 12:27:39 +0100 Subject: [PATCH 043/135] fixed seperator for markdown (#982) From 9d87fb15a1306ff2d2352ca0b403040c8b547541 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Wed, 27 Mar 2024 15:30:49 +0100 Subject: [PATCH 044/135] Refactor event renderer (#983) * init * refactored event renderer * added change to changelog --- CHANGELOG.md | 1 + package.json | 2 + pnpm-lock.yaml | 71 +++++ src/assets/css/index.css | 14 +- .../miscellaneous/DetailContent.tsx | 6 +- .../miscellaneous/LoadingSpinner.tsx | 9 + src/components/miscellaneous/QRButton.tsx | 13 +- src/components/miscellaneous/ShareButton.tsx | 14 +- .../miscellaneous/UserInformation.tsx | 2 +- src/components/ui/alert.tsx | 61 +++++ src/components/ui/checkbox.tsx | 28 ++ src/components/ui/collapsible.tsx | 20 ++ src/components/ui/expandable.tsx | 44 +++ .../components/CountdownTimer.tsx | 39 ++- .../components/EventPriorityPools.tsx | 15 +- .../EventDetails/components/EventRenderer.tsx | 255 ++++++++++-------- src/pages/Groups/forms/index.tsx | 2 +- .../components/JobPostRenderer.tsx | 2 +- .../Profile/components/ProfileEvents.tsx | 76 ++++-- src/pages/Profile/index.tsx | 2 +- src/pages/Wiki/index.tsx | 2 +- tailwind.config.ts | 18 ++ 22 files changed, 496 insertions(+), 200 deletions(-) create mode 100644 src/components/miscellaneous/LoadingSpinner.tsx create mode 100644 src/components/ui/alert.tsx create mode 100644 src/components/ui/checkbox.tsx create mode 100644 src/components/ui/collapsible.tsx create mode 100644 src/components/ui/expandable.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index cc2c5969..4c891783 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - 🦟 **Markdown**. Fikset markdown bug. - 🎨 **Bildeopplastning**. Endret komponent for å laste opp bilder. - 🎨 **Admin filopplastning**. Fjernet mulighet for admin å laste opp bilder. +- 🎨 **Arrangement view**. Endret design til shadcn på arrangement view. ## Versjon 2023.07.02 - 🎨 **Vipps betaling**. Brukere kan nå ikke sette nedbetalingstid selv. 2 timer er konstant tid. diff --git a/package.json b/package.json index 56298cad..058dfbf1 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "@mui/lab": "^5.0.0-alpha.60", "@mui/material": "^5.14.9", "@radix-ui/react-avatar": "^1.0.4", + "@radix-ui/react-checkbox": "^1.0.4", + "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c970782a..62a1fc10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,12 @@ dependencies: '@radix-ui/react-avatar': specifier: ^1.0.4 version: 1.0.4(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-checkbox': + specifier: ^1.0.4 + version: 1.0.4(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-collapsible': + specifier: ^1.0.3 + version: 1.0.3(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 version: 2.0.6(react-dom@17.0.2)(react@17.0.2) @@ -1857,6 +1863,32 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-checkbox@1.0.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: @@ -1885,6 +1917,32 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-collapsible@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-id': 1.0.1(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -3226,6 +3284,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-previous@1.0.1(react@17.0.2): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-use-rect@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: diff --git a/src/assets/css/index.css b/src/assets/css/index.css index c1ebafe9..36a23999 100644 --- a/src/assets/css/index.css +++ b/src/assets/css/index.css @@ -13,26 +13,28 @@ --card-foreground: 222.2 84% 4.9%; --popover: 0 0% 100%; --popover-foreground: 222.2 84% 4.9%; - --primary: 219, 66%, 33%; - --primary-foreground: 0, 0%, 100%; + --primary: 219 66% 33%; + --primary-foreground: 0 0% 100%; --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; + --destructive: 0 99% 35%; --destructive-foreground: 210 40% 98%; --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; --ring: 221.2 83.2% 53.3%; --radius: 0.5rem; + --warning: 35 100% 20%; + --success: 123 40% 20%; } .dark { --background: 212 100% 8%; --foreground: 210 40% 98%; - --card: 222.2 84% 4.9%; + --card: 211 96% 10%;; --card-foreground: 210 40% 98%; --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; @@ -44,11 +46,13 @@ --muted-foreground: 215 20.2% 65.1%; --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; - --destructive: 0 62.8% 30.6%; + --destructive: 0 100% 69%; --destructive-foreground: 210 40% 98%; --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; --ring: 224.3 76.3% 48%; + --warning: 36 100% 86%; + --success: 122 38% 85%; } } diff --git a/src/components/miscellaneous/DetailContent.tsx b/src/components/miscellaneous/DetailContent.tsx index ec22dc16..146bcacc 100644 --- a/src/components/miscellaneous/DetailContent.tsx +++ b/src/components/miscellaneous/DetailContent.tsx @@ -1,4 +1,4 @@ -import { Skeleton, Typography } from '@mui/material'; +import { Skeleton } from '@mui/material'; import { ReactNode } from 'react'; export type DetailContentProps = { @@ -7,9 +7,9 @@ export type DetailContentProps = { }; const DetailContent = ({ title, info }: DetailContentProps) => ( - +

{title} {info} - +

); export default DetailContent; diff --git a/src/components/miscellaneous/LoadingSpinner.tsx b/src/components/miscellaneous/LoadingSpinner.tsx new file mode 100644 index 00000000..6bfec517 --- /dev/null +++ b/src/components/miscellaneous/LoadingSpinner.tsx @@ -0,0 +1,9 @@ +const LoadingSpinnner = () => { + return ( +
+
+
+ ); +}; + +export default LoadingSpinnner; diff --git a/src/components/miscellaneous/QRButton.tsx b/src/components/miscellaneous/QRButton.tsx index b76157d7..40231d21 100644 --- a/src/components/miscellaneous/QRButton.tsx +++ b/src/components/miscellaneous/QRButton.tsx @@ -1,9 +1,10 @@ -import QrCodeIcon from '@mui/icons-material/QrCodeRounded'; -import { Button, ButtonProps, styled, Theme, Typography, useMediaQuery, useTheme } from '@mui/material'; +import { styled, Theme, Typography, useMediaQuery, useTheme } from '@mui/material'; +import { QrCodeIcon } from 'lucide-react'; import { QRCodeCanvas } from 'qrcode.react'; import { useState } from 'react'; import Dialog from 'components/layout/Dialog'; +import { Button } from 'components/ui/button'; const Qr = styled(QRCodeCanvas)(({ theme }) => ({ padding: theme.spacing(4, 3), @@ -15,19 +16,21 @@ const Qr = styled(QRCodeCanvas)(({ theme }) => ({ objectFit: 'contain', })); -export type QRButtonProps = ButtonProps & { +export type QRButtonProps = { + children: React.ReactNode; qrValue: string; subtitle?: string; }; -const QRButton = ({ qrValue, subtitle, children, ...props }: QRButtonProps) => { +const QRButton = ({ qrValue, subtitle, children }: QRButtonProps) => { const [showQR, setShowQR] = useState(false); const theme = useTheme(); const lgDown = useMediaQuery((theme: Theme) => theme.breakpoints.down('lg')); return ( <> - { +const ShareButton = ({ shareId, title, shareType }: ShareProps) => { const { event } = useAnalytics(); const [urlFromType, useShortener] = useMemo(() => { switch (shareType) { @@ -37,8 +38,9 @@ const ShareButton = ({ shareId, title, shareType, ...props }: ShareProps) => { ); return ( - ); }; diff --git a/src/components/miscellaneous/UserInformation.tsx b/src/components/miscellaneous/UserInformation.tsx index 573b31bf..bc33268c 100644 --- a/src/components/miscellaneous/UserInformation.tsx +++ b/src/components/miscellaneous/UserInformation.tsx @@ -11,7 +11,7 @@ export type ShowMoreTextProps = { }; export const ShowMoreText = ({ children, variant = 'caption', sx = [] }: ShowMoreTextProps) => { - const [showAll, setShowAll] = useState(false); + const [showAll, setShowAll] = useState(false); return ( svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + { + variants: { + variant: { + default: "bg-background text-foreground", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + warning: "text-warning border-warning [&>svg]:text-warning", + success: "text-success border-success [&>svg]:text-success", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Alert = forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)) +Alert.displayName = "Alert" + +const AlertTitle = forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertTitle.displayName = "AlertTitle" + +const AlertDescription = forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertDescription.displayName = "AlertDescription" + +export { Alert, AlertTitle, AlertDescription } diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx new file mode 100644 index 00000000..55588fb9 --- /dev/null +++ b/src/components/ui/checkbox.tsx @@ -0,0 +1,28 @@ +import * as CheckboxPrimitive from "@radix-ui/react-checkbox" +import { Check } from "lucide-react" + +import { cn } from "lib/utils" +import { forwardRef } from "react" + +const Checkbox = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + +)) +Checkbox.displayName = CheckboxPrimitive.Root.displayName + +export { Checkbox } diff --git a/src/components/ui/collapsible.tsx b/src/components/ui/collapsible.tsx new file mode 100644 index 00000000..633b2b32 --- /dev/null +++ b/src/components/ui/collapsible.tsx @@ -0,0 +1,20 @@ +import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" +import { cn } from "lib/utils"; +import { forwardRef } from "react"; + +const Collapsible = CollapsiblePrimitive.Root + +const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger + +const CollapsibleContent = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +export { Collapsible, CollapsibleTrigger, CollapsibleContent } diff --git a/src/components/ui/expandable.tsx b/src/components/ui/expandable.tsx new file mode 100644 index 00000000..2d1e642d --- /dev/null +++ b/src/components/ui/expandable.tsx @@ -0,0 +1,44 @@ +import { ReactNode, useState } from "react"; +import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./collapsible"; +import { Button } from "./button"; +import { ChevronDownIcon, ChevronRightIcon } from "lucide-react"; + + +type ExpandableProps = { + title: string; + description: string; + icon: ReactNode; + children: ReactNode; +}; + +const Expandable = ({ title, description, icon, children }: ExpandableProps) => { + const [expanded, setExpanded] = useState(false); + + return ( + + + + + + { children } + + + ); +}; + + +export default Expandable; \ No newline at end of file diff --git a/src/pages/EventDetails/components/CountdownTimer.tsx b/src/pages/EventDetails/components/CountdownTimer.tsx index 32a345a5..4fa4e02f 100644 --- a/src/pages/EventDetails/components/CountdownTimer.tsx +++ b/src/pages/EventDetails/components/CountdownTimer.tsx @@ -1,5 +1,3 @@ -import styled from '@emotion/styled'; -import { Box, Button, CircularProgress, Typography } from '@mui/material'; import { differenceInMilliseconds, formatDistanceStrict, minutesToMilliseconds } from 'date-fns'; import { nb } from 'date-fns/locale'; import { useEffect, useState } from 'react'; @@ -9,15 +7,12 @@ import { Event, Order } from 'types'; import { useCreatePaymentOrder } from 'hooks/Payment'; import { useSnackbar } from 'hooks/Snackbar'; -import Paper from 'components/layout/Paper'; +import LoadingSpinnner from 'components/miscellaneous/LoadingSpinner'; +import { Button } from 'components/ui/button'; +import { Card, CardContent } from 'components/ui/card'; import VIPPS from 'assets/img/vipps.svg'; -const ContentPaper = styled(Paper)({ - height: 'fit-content', - overflowX: 'auto', -}); - const getTimeDifference = (time: Date) => { const now = new Date(); const myDate = new Date(time); @@ -83,27 +78,23 @@ const CountdownTimer = ({ payment_expiredate, event_id }: Registration) => { if (new Date(payment_expiredate) <= new Date()) { return ( - - - theme.palette.text.primary }}> - Betalingstiden har gått ut. Det er ikke lenger mulig å betale for dette arrangementet. Du vil bli satt på venteliste innen kort tid. - - - + + +

Betalingstiden har gått ut. Det er ikke lenger mulig å betale for dette arrangementet. Du vil bli satt på venteliste innen kort tid.

+
+
); } return ( - - - - - theme.palette.text.primary }}> - Betal innen {timeLeft} for å beholde plassen på arrangementet. - - +

Betal innen {timeLeft} for å beholde plassen på arrangementet.

+ + ); }; diff --git a/src/pages/EventDetails/components/EventPriorityPools.tsx b/src/pages/EventDetails/components/EventPriorityPools.tsx index 46698099..0be73d1d 100644 --- a/src/pages/EventDetails/components/EventPriorityPools.tsx +++ b/src/pages/EventDetails/components/EventPriorityPools.tsx @@ -1,4 +1,3 @@ -import { Stack, Typography } from '@mui/material'; import { useCallback } from 'react'; import { getStudyyearAsClass } from 'utils'; @@ -7,8 +6,8 @@ import { GroupType } from 'types/Enums'; import { useUser } from 'hooks/User'; -import Paper from 'components/layout/Paper'; import { ShowMoreText } from 'components/miscellaneous/UserInformation'; +import { Card, CardContent } from 'components/ui/card'; export type EventPriorityPoolsProps = { priorityPools: Array; @@ -28,11 +27,13 @@ const EventPriorityPools = ({ priorityPools }: EventPriorityPoolsProps) => { }, []); return ( - +
{priorityPools.map((pool, index) => ( - - {getGroupsString(pool.groups)} - + + +

{getGroupsString(pool.groups)}

+
+
))} Hvem er prioritert? @@ -43,7 +44,7 @@ Hvis du er prioritert og har plass på arrangementet, kan du ikke miste plassen. Med "-kullet" menes året du startet på studiet. ${user ? `Du er for eksempel en del av ${user.studyyear.group?.name}-kullet.` : ''}`} - +
); }; diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index 04c8e8df..9ab6ea64 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -1,23 +1,9 @@ -import CalendarIcon from '@mui/icons-material/EventRounded'; import FavoriteOutlinedIcon from '@mui/icons-material/FavoriteBorderRounded'; import FavoriteFilledIcon from '@mui/icons-material/FavoriteRounded'; -import { - Alert, - Button, - Checkbox, - CircularProgress, - IconButton, - IconButtonProps, - Skeleton, - Stack, - styled, - Theme, - Tooltip, - Typography, - useMediaQuery, -} from '@mui/material'; +import { IconButton, IconButtonProps, Button as MuiButton, Skeleton, Stack, styled, Theme, Tooltip, useMediaQuery } from '@mui/material'; import { addHours, formatDistanceToNowStrict, isFuture, isPast, parseISO, subHours } from 'date-fns'; import nbLocale from 'date-fns/locale/nb'; +import { CalendarIcon, HandCoinsIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; @@ -49,12 +35,19 @@ import FormUserAnswers from 'components/forms/FormUserAnswers'; import Expand from 'components/layout/Expand'; import Paper from 'components/layout/Paper'; import VerifyDialog from 'components/layout/VerifyDialog'; -import AspectRatioImg, { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; +import { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; import DetailContent, { DetailContentLoading } from 'components/miscellaneous/DetailContent'; +import LoadingSpinnner from 'components/miscellaneous/LoadingSpinner'; import MarkdownRenderer from 'components/miscellaneous/MarkdownRenderer'; import QRButton from 'components/miscellaneous/QRButton'; import { ReactionHandler } from 'components/miscellaneous/reactions/ReactionHandler'; import ShareButton from 'components/miscellaneous/ShareButton'; +import { Alert, AlertDescription } from 'components/ui/alert'; +import { Button } from 'components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle } from 'components/ui/card'; +import { Checkbox } from 'components/ui/checkbox'; + +import TIHLDE_LOGO from 'assets/img/TihldeBackground.jpg'; const DetailsPaper = styled(Paper)(({ theme }) => ({ padding: theme.spacing(1, 2), @@ -67,10 +60,6 @@ const ContentPaper = styled(Paper)({ overflowX: 'auto', }); -const DetailsHeader = styled(Typography)({ - fontSize: '1.5rem', -}); - export type EventRendererProps = { data: Event; preview?: boolean; @@ -165,8 +154,10 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { <> {registration.is_on_wait ? ( <> - - Du står på plass {registration.wait_queue_number}/{event.waiting_list_count} på ventelisten, vi gir deg beskjed hvis du får plass + + + Du står på plass {registration.wait_queue_number}/{event.waiting_list_count} på ventelisten, vi gir deg beskjed hvis du får plass + {registration.survey_submission.answers.length > 0 && (
@@ -179,18 +170,16 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { ) : ( <> {data.paid_information && !registration.has_paid_order ? ( - - {`Du er ${registration.has_attended ? 'deltatt' : 'meldt'} på arrangementet! Men du må huske å betale`} + + + Du er meldt på arrangementet! Men du må huske å betale ) : ( <> - - {`Du har ${registration.has_attended ? 'deltatt' : 'plass'} på arrangementet!`} + + {`Du har ${registration.has_attended ? 'deltatt' : 'plass'} på arrangementet!`} - + Påmeldingsbevis @@ -204,12 +193,14 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { )} {registration.has_unanswered_evaluation && ( <> - - Du har ikke svart på evalueringen av dette arrangementet. Du må svare på den før du kan melde deg på flere arrangementer. + + + Du har ikke svart på evalueringen av dette arrangementet. Du må svare på den før du kan melde deg på flere arrangementer. + - + )} @@ -227,14 +218,16 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { Meld deg av {unregisteringGivesStrike && ( - - Avmeldingsfristen har passert. Du kan allikevel melde deg av frem til 2 timer før arrangementsstart, men du vil da få 1 prikk. + + + Avmeldingsfristen har passert. Du kan allikevel melde deg av frem til 2 timer før arrangementsstart, men du vil da få 1 prikk. + )} ) : ( - - Det er ikke lenger mulig å melde seg av arrangementet + + Det er ikke lenger mulig å melde seg av arrangementet )} @@ -243,8 +236,10 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { const HasUnansweredEvaluations = () => user?.unanswered_evaluations_count ? ( - - {`Du må svare på ${user.unanswered_evaluations_count} ubesvarte evalueringsskjemaer før du kan melde deg på flere arrangementer. Du finner dine ubesvarte evalueringsskjemaer under "Spørreskjemaer" i profilen.`} + + + {`Du må svare på ${user.unanswered_evaluations_count} ubesvarte evalueringsskjemaer før du kan melde deg på flere arrangementer. Du finner dine ubesvarte evalueringsskjemaer under "Spørreskjemaer" i profilen.`} + ) : null; @@ -266,8 +261,8 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { } if (data.closed) { return ( - - Dette arrangementet er stengt. Det er derfor ikke mulig å melde seg av eller på. + + Dette arrangementet er stengt. Det er derfor ikke mulig å melde seg av eller på. ); } @@ -275,7 +270,7 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { return ( <> - @@ -283,8 +278,10 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { } if (!user) { return isFuture(endRegistrationDate) ? ( - ) : null; } @@ -298,7 +295,7 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { const is_prioritized = data.priority_pools.some((pool) => pool.groups.filter((group) => !group.viewer_is_member).length === 0); if (data.only_allow_prioritized && data.priority_pools.length > 0 && !is_prioritized) { return ( - ); @@ -306,8 +303,8 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { return ( <> - ); @@ -351,60 +348,81 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { const Info = () => ( <> - - - {user && !preview && spacing(-1) }} />} - Detaljer - - - - - c.id === data.category)?.text || 'Laster...'} title='Hva:' /> - {data.organizer && {data.organizer.name}} title='Arrangør:' />} - {data.contact_person && ( - {`${data.contact_person?.first_name} ${data.contact_person?.last_name}`}} - title='Kontaktperson' - /> - )} - {data.paid_information && } - + + + +

Detaljer

+ {user && !preview && } +
+
+ + + + + c.id === data.category)?.text || 'Laster...'} title='Hva:' /> + {data.organizer && {data.organizer.name}} title='Arrangør:' />} + {data.contact_person && ( + {`${data.contact_person?.first_name} ${data.contact_person?.last_name}`} + } + title='Kontaktperson:' + /> + )} + {data.paid_information && } + +
{data.sign_up && ( <> - - - {user && spacing(-1) }} />} - Påmelding - - - - {registration && isFuture(signOffDeadlineDate) ? ( - - ) : ( - <> - {isFuture(userStartRegistrationDate) && } - {isPast(userStartRegistrationDate) && isFuture(endRegistrationDate) && ( - - )} - - )} - + + + +

Påmelding

+ {user && } +
+
+ + + + {registration && isFuture(signOffDeadlineDate) ? ( + + ) : ( + <> + {isFuture(userStartRegistrationDate) && } + {isPast(userStartRegistrationDate) && isFuture(endRegistrationDate) && ( + + )} + + )} + +
+ {Boolean(data.priority_pools.length) && ( - - Prioritert - - + + + +

Prioritert

+
+
+ + + +
)} {data.enforces_previous_strikes ? ( strikesDelayedRegistrationHours > 0 && isFuture(userStartRegistrationDate) && ( - - Du har {user?.number_of_strikes} prikker og må dermed vente {strikesDelayedRegistrationHours} timer før du kan melde deg på + + + Du har {user?.number_of_strikes} prikker og må dermed vente {strikesDelayedRegistrationHours} timer før du kan melde deg på + ) ) : ( - - Dette arrangementet håndhever ikke aktive prikker + + Dette arrangementet håndhever ikke aktive prikker )} @@ -416,47 +434,52 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { const addToCalendarAnalytics = () => event('add-to-calendar', 'event', `Event: ${data.title}`); return ( - - +
+
{!lgDown && } - {Boolean(user) && } {!preview && data.permissions.write && ( - )} {registration && ( - - handleImageRuleChange()} value='Test' /> - Godkjenner å bli tatt bilde av - +
+ +

Godkjenner å bli tatt bilde av

+
)} - - - +
+
+ {data.image_alt {data.emojis_allowed && user && ( - +
- +
)} {lgDown && } {registration && data.paid_information && !registration.has_paid_order && !registration.is_on_wait && ( )} - - theme.palette.text.primary, fontSize: '2.4rem', wordWrap: 'break-word' }} variant='h1'> - {data.title} - - - -
- + + + {data.title} + + + + + +
+
); }; diff --git a/src/pages/Groups/forms/index.tsx b/src/pages/Groups/forms/index.tsx index 4569d72f..9b7244c6 100644 --- a/src/pages/Groups/forms/index.tsx +++ b/src/pages/Groups/forms/index.tsx @@ -64,7 +64,7 @@ const GroupFormAdminListItem = ({ form }: { form: GroupForm }) => { variant='outlined'> Svar på/se skjema - +
diff --git a/src/pages/JobPostDetails/components/JobPostRenderer.tsx b/src/pages/JobPostDetails/components/JobPostRenderer.tsx index cc205108..f290d9b5 100644 --- a/src/pages/JobPostDetails/components/JobPostRenderer.tsx +++ b/src/pages/JobPostDetails/components/JobPostRenderer.tsx @@ -101,7 +101,7 @@ const JobPostRenderer = ({ data, preview = false }: JobPostRendererProps) => { Søk )} - + {!preview && ( - setShowQR(false)} - open={showQR} - sx={{ '& .MuiPaper-root': { backgroundColor: (theme) => theme.palette.common.white } }}> - - {subtitle && ( - theme.palette.common.black }} variant='h3'> - {subtitle} - - )} - - + + + + + + + {subtitle &&

{subtitle}

} +
+
); }; diff --git a/src/components/miscellaneous/StrikeListItem.tsx b/src/components/miscellaneous/StrikeListItem.tsx index 6604f46e..1f2842b1 100644 --- a/src/components/miscellaneous/StrikeListItem.tsx +++ b/src/components/miscellaneous/StrikeListItem.tsx @@ -1,9 +1,5 @@ import Delete from '@mui/icons-material/DeleteRounded'; -import ExpandLessIcon from '@mui/icons-material/ExpandLessRounded'; -import ExpandMoreIcon from '@mui/icons-material/ExpandMoreRounded'; -import { Collapse, Divider, ListItem, ListItemButton, ListItemProps, ListItemText, Stack, Typography } from '@mui/material'; import { parseISO } from 'date-fns'; -import { useState } from 'react'; import { formatDate } from 'utils'; import { Strike, UserBase } from 'types'; @@ -11,52 +7,44 @@ import { Strike, UserBase } from 'types'; import { useDeleteStrike } from 'hooks/Strike'; import { useUserPermissions } from 'hooks/User'; -import Paper from 'components/layout/Paper'; import VerifyDialog from 'components/layout/VerifyDialog'; import EventListItem from 'components/miscellaneous/EventListItem'; +import Expandable from 'components/ui/expandable'; export type StrikeProps = { strike: Strike; user: UserBase; displayUserInfo?: boolean; -} & ListItemProps; +}; -const StrikeListItem = ({ strike, user, displayUserInfo = false, ...props }: StrikeProps) => { +const StrikeListItem = ({ strike, user, displayUserInfo = false }: StrikeProps) => { const { data: permissions } = useUserPermissions(); const deleteStrike = useDeleteStrike(user.user_id); - const [expanded, setExpanded] = useState(false); const deleteHandler = () => deleteStrike.mutate(strike.id); const primaryText = displayUserInfo ? `${user.first_name} ${user.last_name}` : strike.description; + return ( - - - setExpanded((prev) => !prev)}> - - {strike.strike_size} - - - {expanded ? : } - - - - - -
- {permissions?.permissions.strike.read && Boolean(strike.creator) && ( - {`Opprettet av: ${strike.creator?.first_name} ${strike.creator?.last_name}`} - )} - {`Opprettet: ${formatDate(parseISO(strike.created_at))}`} - {displayUserInfo && {`Begrunnelse: ${strike.description}`}} -
- {strike.event !== undefined && } - {permissions?.permissions.strike.destroy && ( - }> - Slett prikk - + {strike.strike_size}
} + title={primaryText}> +
+
+ {permissions?.permissions.strike.read && Boolean(strike.creator) && ( +

{`Opprettet av: ${strike.creator?.first_name} ${strike.creator?.last_name}`}

)} - - - +

{`Opprettet: ${formatDate(parseISO(strike.created_at))}`}

+ {displayUserInfo &&

{`Begrunnelse: ${strike.description}`}

} +
+ {strike.event !== undefined && } + {permissions?.permissions.strike.destroy && ( + }> + Slett prikk + + )} +
+ ); }; diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx new file mode 100644 index 00000000..a12dcea0 --- /dev/null +++ b/src/components/ui/dialog.tsx @@ -0,0 +1,120 @@ +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { X } from "lucide-react" + +import { cn } from "lib/utils" +import { forwardRef } from "react" + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = "DialogHeader" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = "DialogFooter" + +const DialogTitle = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/src/components/ui/expandable.tsx b/src/components/ui/expandable.tsx index 2d1e642d..a19ad879 100644 --- a/src/components/ui/expandable.tsx +++ b/src/components/ui/expandable.tsx @@ -2,6 +2,7 @@ import { ReactNode, useState } from "react"; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./collapsible"; import { Button } from "./button"; import { ChevronDownIcon, ChevronRightIcon } from "lucide-react"; +import { cn } from "lib/utils"; type ExpandableProps = { @@ -9,21 +10,22 @@ type ExpandableProps = { description: string; icon: ReactNode; children: ReactNode; + className?: string; }; -const Expandable = ({ title, description, icon, children }: ExpandableProps) => { +const Expandable = ({ title, description, icon, children, className }: ExpandableProps) => { const [expanded, setExpanded] = useState(false); return ( - + + +
{!data ? ( @@ -116,7 +101,7 @@ const ProfileEvents = () => { ))} )} - +
); }; diff --git a/src/pages/Profile/components/ProfileGroups/MembershipHistoryItem.tsx b/src/pages/Profile/components/ProfileGroups/MembershipHistoryItem.tsx index 854d3893..8248a1fe 100644 --- a/src/pages/Profile/components/ProfileGroups/MembershipHistoryItem.tsx +++ b/src/pages/Profile/components/ProfileGroups/MembershipHistoryItem.tsx @@ -1,56 +1,40 @@ -import { Box, ButtonBase, Divider, Skeleton, Stack, Typography } from '@mui/material'; +import { ButtonBase, Divider, Skeleton, Stack } from '@mui/material'; import { parseISO } from 'date-fns'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; -import { formatDate, getMembershipType } from 'utils'; +import { formatDate } from 'utils'; import { MembershipHistory } from 'types'; import Paper from 'components/layout/Paper'; -import AspectRatioImg, { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; +import { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; +import { Card, CardContent } from 'components/ui/card'; +import { Separator } from 'components/ui/separator'; + +import TIHLDE_LOGO from 'assets/img/TihldeBackground.jpg'; export type MembershipItemProps = { membershipHistory: MembershipHistory; }; const MembershipHistoryItem = ({ membershipHistory }: MembershipItemProps) => ( - - - } - gap={1} - justifyContent='flex-start' - sx={{ pl: 1, overflow: 'hidden' }}> - {/* TODO: fjern div rundt AspectRatioImg når flere nettlesere støtter aspect-ratio i css - https://caniuse.com/mdn-css_properties_aspect-ratio */} - - - - - - {membershipHistory.group.name} - {getMembershipType(membershipHistory.membership_type)} - - + + + + {membershipHistory.group.image_alt + +
+

{membershipHistory.group.name}

+

{`${formatDate(parseISO(membershipHistory.start_date), { time: false, fullMonth: true })} -> ${formatDate(parseISO(membershipHistory.end_date), { time: false, fullMonth: true, })}`} - - - - - +

+
+ +
+
); export default MembershipHistoryItem; diff --git a/src/pages/Profile/components/ProfileGroups/MembershipItem.tsx b/src/pages/Profile/components/ProfileGroups/MembershipItem.tsx index 98093fa6..50a02f1c 100644 --- a/src/pages/Profile/components/ProfileGroups/MembershipItem.tsx +++ b/src/pages/Profile/components/ProfileGroups/MembershipItem.tsx @@ -1,4 +1,4 @@ -import { Box, ButtonBase, Divider, Skeleton, Stack, Typography } from '@mui/material'; +import { ButtonBase, Divider, Skeleton, Stack } from '@mui/material'; import { parseISO } from 'date-fns'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; @@ -7,41 +7,31 @@ import { formatDate, getMembershipType } from 'utils'; import { Membership } from 'types'; import Paper from 'components/layout/Paper'; -import AspectRatioImg, { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; +import { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; +import { Card, CardContent } from 'components/ui/card'; +import { Separator } from 'components/ui/separator'; + +import TIHLDE_LOGO from 'assets/img/TihldeBackground.jpg'; export type MembershipItemProps = { membership: Membership; }; const MembershipItem = ({ membership }: MembershipItemProps) => ( - - - } - gap={1} - justifyContent='flex-start' - sx={{ pl: 1, overflow: 'hidden' }}> - {/* TODO: fjern div rundt AspectRatioImg når flere nettlesere støtter aspect-ratio i css - https://caniuse.com/mdn-css_properties_aspect-ratio */} - - - - - - {membership.group.name} - - + + + + {membership.group.image_alt + +
+

{membership.group.name}

+

{`${formatDate(parseISO(membership.created_at), { time: false, fullMonth: true })} -> nå - ${getMembershipType(membership.membership_type)}`} - - - - - +

+
+ +
+
); export default MembershipItem; diff --git a/src/pages/Profile/components/ProfileGroups/index.tsx b/src/pages/Profile/components/ProfileGroups/index.tsx index 3e13096c..c7f97d93 100644 --- a/src/pages/Profile/components/ProfileGroups/index.tsx +++ b/src/pages/Profile/components/ProfileGroups/index.tsx @@ -1,4 +1,4 @@ -import { Box, Divider, Stack, Typography } from '@mui/material'; +import { Box } from '@mui/material'; import { useMemo } from 'react'; import { useParams } from 'react-router-dom'; @@ -9,6 +9,7 @@ import MembershipItem, { MembershipItemLoading } from 'pages/Profile/components/ import Pagination from 'components/layout/Pagination'; import NotFoundIndicator from 'components/miscellaneous/NotFoundIndicator'; +import { Separator } from 'components/ui/separator'; const Memberships = () => { const { userId } = useParams(); @@ -51,13 +52,17 @@ const MembershipHistories = () => { }; const ProfileMemberships = () => ( - - Aktive medlemskap - - - Tidligere medlemskap - - +
+
+

Aktive medlemskap

+ +
+ +
+

Tidligere medlemskap

+ +
+
); export default ProfileMemberships; diff --git a/src/pages/Profile/components/ProfileSettings/NotificationSettings.tsx b/src/pages/Profile/components/ProfileSettings/NotificationSettings.tsx index e847e1aa..a45202d6 100644 --- a/src/pages/Profile/components/ProfileSettings/NotificationSettings.tsx +++ b/src/pages/Profile/components/ProfileSettings/NotificationSettings.tsx @@ -1,4 +1,4 @@ -import { Box, Button, SvgIcon, Typography } from '@mui/material'; +import { Typography } from '@mui/material'; import { useEffect, useState } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import URLS from 'URLS'; @@ -8,9 +8,11 @@ import { User, UserNotificationSetting, UserNotificationSettingChoice } from 'ty import { useSnackbar } from 'hooks/Snackbar'; import { useSlackConnect, useUpdateUserNotificationSettings, useUser, useUserNotificationSettingChoices, useUserNotificationSettings } from 'hooks/User'; -import { Switch } from 'components/inputs/Bool'; -import Paper, { PaperProps } from 'components/layout/Paper'; +import Paper from 'components/layout/Paper'; import Page from 'components/navigation/Page'; +import { Button } from 'components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'components/ui/card'; +import { Switch } from 'components/ui/switch'; export const SlackConnectPage = () => { const [searchParams] = useSearchParams(); @@ -48,8 +50,8 @@ export const SlackConnectPage = () => { : 'Ugyldig lenke'}
{(!loading || !searchParams.get('code')) && ( - )}
@@ -57,45 +59,51 @@ export const SlackConnectPage = () => { ); }; -export const ConnectWithSlack = (props: PaperProps) => { +type ConnectWithSlackProps = { + className?: string; +}; + +export const ConnectWithSlack = ({ className }: ConnectWithSlackProps) => { const { data } = useUser(); if (!data || data.slack_user_id) { return null; } + return ( - - Koble til Slack - - Hvis du har en Slack-konto i TIHLDE sin Slack kan du koble den til din konto på TIHLDE.org. Da kan du motta varsler fra oss i Slack. Du kan selv - bestemme hvilke varsler du vil motta hvor i varslingsinnstillingene. - - - + + + Koble til Slack + + Hvis du har en Slack-konto i TIHLDE sin Slack kan du koble den til din konto på TIHLDE.org. Da kan du motta varsler fra oss i Slack. Du kan selv + bestemme hvilke varsler du vil motta hvor i varslingsinnstillingene. + + + + + + ); }; @@ -134,12 +142,18 @@ const NotificationSetting = ({ choice, notificationSettings, user }: Notificatio }; return ( - <> - {choice.label} - toggleSetting('email', e.target.checked)} sx={{ m: 'auto' }} /> - toggleSetting('website', e.target.checked)} sx={{ m: 'auto' }} /> - toggleSetting('slack', e.target.checked)} sx={{ m: 'auto' }} /> - + + {choice.label} + + toggleSetting('email', checked)} /> + + + toggleSetting('website', checked)} /> + + + toggleSetting('slack', checked)} /> + + ); }; @@ -153,23 +167,19 @@ export const UserNotificationSettings = ({ user }: UserNotificationSettingsProps return ( <> - - - For å være sikker på at du mottar nødvendig informasjon må du velge minst én informasjonskanal for hver type varsel - - - Type - - Epost - - - Nettsiden - - - Slack - - {data && choices.map((choice) => )} - + +

For å være sikker på at du mottar nødvendig informasjon må du velge minst én informasjonskanal for hver type varsel

+ + + + + + + + + {data && choices.map((choice) => )} + +
TypeEpostNettsidenSlack
); }; diff --git a/src/pages/Profile/components/ProfileSettings/UserSettings.tsx b/src/pages/Profile/components/ProfileSettings/UserSettings.tsx index 81c55143..bf578ade 100644 --- a/src/pages/Profile/components/ProfileSettings/UserSettings.tsx +++ b/src/pages/Profile/components/ProfileSettings/UserSettings.tsx @@ -9,7 +9,7 @@ import { useUpdateUser } from 'hooks/User'; import { useAnalytics } from 'hooks/Utils'; import Bool from 'components/inputs/Bool'; -import Select from 'components/inputs/Select'; +import MuiSelect from 'components/inputs/Select'; import SubmitButton from 'components/inputs/SubmitButton'; import TextField from 'components/inputs/TextField'; import { ImageUpload } from 'components/inputs/Upload'; @@ -72,12 +72,13 @@ export const UserSettings = ({ isAdmin, user }: UserSettingsProps) => {
)} + - + { }; return ( - +
- } primary='Varslingsinnstillinger' secondary='Bestem hvor du ønsker å motta ulike typer varsler'> + } + title='Varslingsinnstillinger'> - - } primary='Profil-innstillinger' secondary='Endre informasjon om deg selv'> - - - } primary='Endre passord' secondary='Motta en link i din epost til side der du kan endre passord'> - - - } primary='Eksporter brukerdata' secondary='Få tilsendt alle data vi har lagret i tilknytning til din bruker'> - - - } primary='Slett brukerkonto' secondary='Slett din bruker og alle tilhørende data vi har lagret'> - theme.palette.error.main} gutterBottom variant='h3'> - Slett brukerkonto - - - Slett din bruker og alle tilhørende data vi har lagret. Dine påmeldinger, medlemsskap, korte linker og badges er blant det som vil slettes for alltid. - Det er ikke mulig å angre denne handlingen. - - - - + + } + title='Slett brukerkonto'> +
+

Slett brukerkonto

+

+ Slett din bruker og alle tilhørende data vi har lagret. Dine påmeldinger, medlemsskap, korte linker og badges er blant det som vil slettes for + alltid. Det er ikke mulig å angre denne handlingen. +

+ +
+
+
); }; diff --git a/src/pages/Profile/components/ProfileStrikes.tsx b/src/pages/Profile/components/ProfileStrikes.tsx index dc7054ad..47ab7582 100644 --- a/src/pages/Profile/components/ProfileStrikes.tsx +++ b/src/pages/Profile/components/ProfileStrikes.tsx @@ -1,34 +1,39 @@ -import { Stack, Typography } from '@mui/material'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; import { useUser, useUserStrikes } from 'hooks/User'; -import Paper from 'components/layout/Paper'; import NotFoundIndicator from 'components/miscellaneous/NotFoundIndicator'; import StrikeListItem from 'components/miscellaneous/StrikeListItem'; +import { Card, CardContent } from 'components/ui/card'; function ProfileStrikes() { const { data = [] } = useUserStrikes(); const { data: user } = useUser(); return ( - - - - Informasjon om prikksystemet finner du i arrangementsreglene.{' '} - {Boolean(data.length) && ( - - Uenig i en prikk? Send epost til naeringslivsminister@tihlde.org. - - )} - - +
+ + +

+ Informasjon om prikksystemet finner du i arrangementsreglene.{' '} + {Boolean(data.length) && ( + + Uenig i en prikk? Send epost til{' '} + + naeringslivsminister@tihlde.org + + . + + )} +

+
+
{data.length ? ( user && data.map((strike) => ) ) : ( )} - +
); } diff --git a/src/pages/Profile/index.tsx b/src/pages/Profile/index.tsx index a72c074d..4ef74305 100644 --- a/src/pages/Profile/index.tsx +++ b/src/pages/Profile/index.tsx @@ -1,28 +1,5 @@ -import AdminIcon from '@mui/icons-material/AdminPanelSettingsRounded'; -import EventIcon from '@mui/icons-material/DateRangeRounded'; -import BadgesIcon from '@mui/icons-material/EmojiEventsRounded'; -import LogOutIcon from '@mui/icons-material/ExitToAppRounded'; -import FormsIcon from '@mui/icons-material/HelpOutlineRounded'; -import GroupsIcon from '@mui/icons-material/PeopleOutlineRounded'; -import SettingsIcon from '@mui/icons-material/TuneRounded'; -import WorkspacesIcon from '@mui/icons-material/WorkspacesRounded'; -import { - Badge, - Box, - Collapse, - List, - ListItem, - ListItemButton, - ListItemButtonProps, - ListItemIcon, - ListItemProps, - ListItemText, - Skeleton, - Stack, - styled, - SvgIconProps, - Typography, -} from '@mui/material'; +import { ListItemProps, SvgIconProps } from '@mui/material'; +import { BadgeIcon, CalendarDaysIcon, FileQuestionIcon, GripIcon, LogOutIcon, LucideIcon, SettingsIcon, ShieldCheckIcon, UsersIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { getUserAffiliation } from 'utils'; @@ -41,22 +18,12 @@ import ProfileGroups from 'pages/Profile/components/ProfileGroups'; import ProfileSettings from 'pages/Profile/components/ProfileSettings'; import ProfileStrikes from 'pages/Profile/components/ProfileStrikes'; -import Paper from 'components/layout/Paper'; -import QRButton from 'components/miscellaneous/QRButton'; +import { QRButton } from 'components/miscellaneous/QRButton'; import Page from 'components/navigation/Page'; import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; - -const Content = styled('div')(({ theme }) => ({ - display: 'grid', - gridTemplateColumns: '250px 1fr', - gridGap: theme.spacing(1), - alignItems: 'self-start', - marginTop: theme.spacing(1), - marginBottom: theme.spacing(3), - [theme.breakpoints.down('md')]: { - gridTemplateColumns: '1fr', - }, -})); +import { Button } from 'components/ui/button'; +import { Card, CardContent } from 'components/ui/card'; +import { Skeleton } from 'components/ui/skeleton'; const Profile = () => { const { userId } = useParams(); @@ -77,13 +44,13 @@ const Profile = () => { logOut(); }; - const eventTab: NavListItem = { label: 'Arrangementer', icon: EventIcon }; - const badgesTab: NavListItem = { label: 'Badges', icon: BadgesIcon }; - const groupsTab: NavListItem = { label: 'Medlemskap', icon: GroupsIcon }; - const formsTab: NavListItem = { label: 'Spørreskjemaer', icon: FormsIcon, badge: user?.unanswered_evaluations_count }; + const eventTab: NavListItem = { label: 'Arrangementer', icon: CalendarDaysIcon }; + const badgesTab: NavListItem = { label: 'Badges', icon: BadgeIcon }; + const groupsTab: NavListItem = { label: 'Medlemskap', icon: UsersIcon }; + const formsTab: NavListItem = { label: 'Spørreskjemaer', icon: FileQuestionIcon, badge: user?.unanswered_evaluations_count }; const settingsTab: NavListItem = { label: 'Innstillinger', icon: SettingsIcon }; - const adminTab: NavListItem = { label: 'Admin', icon: AdminIcon }; - const strikesTab: NavListItem = { label: 'Prikker', icon: WorkspacesIcon }; + const adminTab: NavListItem = { label: 'Admin', icon: ShieldCheckIcon }; + const strikesTab: NavListItem = { label: 'Prikker', icon: GripIcon }; const logoutTab: NavListItem = { label: 'Logg ut', icon: LogOutIcon, onClick: logout, iconProps: { sx: { color: (theme) => theme.palette.error.main } } }; const tabs: Array = userId ? [badgesTab, groupsTab] @@ -94,28 +61,18 @@ const Profile = () => { useEffect(() => setTab(userId ? badgesTab.label : eventTab.label), [userId]); useEffect(() => event('change-tab', 'profile', `Changed tab to: ${tab}`), [tab]); - type NavListItem = ListItemProps & - Pick & { - label: string; - icon: React.ComponentType; - badge?: string | number; - iconProps?: SvgIconProps; - }; + type NavListItem = ListItemProps & { + label: string; + icon: LucideIcon; + onClick?: () => void; + badge?: string | number; + iconProps?: SvgIconProps; + }; - const NavListItem = ({ label, icon: Icon, onClick, badge, iconProps, ...props }: NavListItem) => ( - - setTab(label)} - selected={tab === label} - sx={{ borderRadius: ({ shape }) => `${shape.borderRadius}px` }}> - - - - - - - - + const NavListItem = ({ label, icon: Icon, onClick }: NavListItem) => ( + ); if (isError) { @@ -123,84 +80,71 @@ const Profile = () => { } return ( - - - - {user && ( - - - - {user.first_name[0]} - {user.last_name[0]} - - - )} - {user && user.first_name ? ( - - {`${user.first_name} ${user.last_name}`} - - {user.user_id} | {user.email} - - - {getUserAffiliation(user)} - - - ) : ( - - - - + + + +
+ {user && ( + + + + {user.first_name[0]} + {user.last_name[0]} + + + )} + {user && user.first_name ? ( +
+

{`${user.first_name} ${user.last_name}`}

+

+ {user.user_id} | {user.email} +

+

{getUserAffiliation(user)}

+
+ ) : ( +
+ +
+ + +
+
+ )} +
+ {!userId && user && ( + + Medlemsbevis + )} -
- {!userId && user && ( - - Medlemsbevis - - )} -
- - - - + + +
+
+ + {tabs.map((tab) => ( ))} - - + + {!userId && ( - - + + - - + + )} - - - - - - - - - - - - - - - - - - - {user && } - - - - - - +
+
+ {tab === eventTab.label && } + {tab === badgesTab.label && } + {tab === groupsTab.label && } + {tab === formsTab.label && } + {tab === strikesTab.label && } + {tab === settingsTab.label && user && } + {tab === adminTab.label && } +
+
); }; From a84e94b8729ecc0ef2afaa35ff676fb57882d01e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:02:35 +0100 Subject: [PATCH 046/135] chore(deps): bump eslint from 8.48.0 to 8.56.0 (#941) Bumps [eslint](https://github.com/eslint/eslint) from 8.48.0 to 8.56.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.48.0...v8.56.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 112 ++++++++++++++++++++++++------------------------- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/package.json b/package.json index 69ae0541..ec4894db 100644 --- a/package.json +++ b/package.json @@ -85,8 +85,8 @@ "@typescript-eslint/eslint-plugin": "^5.22.0", "@typescript-eslint/parser": "^5.38.1", "@vitejs/plugin-react": "^4.2.0", + "eslint": "^8.56.0", "autoprefixer": "^10.4.18", - "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import-helpers": "^1.3.1", "eslint-plugin-prettier": "^4.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61a7289d..2311d147 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -201,10 +201,10 @@ devDependencies: version: 2.1.4 '@typescript-eslint/eslint-plugin': specifier: ^5.22.0 - version: 5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.48.0)(typescript@4.6.2) + version: 5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.56.0)(typescript@4.6.2) '@typescript-eslint/parser': specifier: ^5.38.1 - version: 5.38.1(eslint@8.48.0)(typescript@4.6.2) + version: 5.38.1(eslint@8.56.0)(typescript@4.6.2) '@vitejs/plugin-react': specifier: ^4.2.0 version: 4.2.0(vite@5.0.0) @@ -212,23 +212,23 @@ devDependencies: specifier: ^10.4.18 version: 10.4.18(postcss@8.4.35) eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.56.0 + version: 8.56.0 eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0(eslint@8.48.0) + version: 9.0.0(eslint@8.56.0) eslint-plugin-import-helpers: specifier: ^1.3.1 - version: 1.3.1(eslint@8.48.0) + version: 1.3.1(eslint@8.56.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@9.0.0)(eslint@8.48.0)(prettier@2.6.0) + version: 4.2.1(eslint-config-prettier@9.0.0)(eslint@8.56.0)(prettier@2.6.0) eslint-plugin-react: specifier: ^7.33.2 - version: 7.33.2(eslint@8.48.0) + version: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: specifier: ^4.5.0 - version: 4.5.0(eslint@8.48.0) + version: 4.5.0(eslint@8.56.0) husky: specifier: ^8.0.1 version: 8.0.1 @@ -249,7 +249,7 @@ devDependencies: version: 5.0.0(@types/node@20.6.3) vite-plugin-checker: specifier: ^0.6.2 - version: 0.6.2(eslint@8.48.0)(typescript@4.6.2)(vite@5.0.0) + version: 0.6.2(eslint@8.56.0)(typescript@4.6.2)(vite@5.0.0) vite-plugin-compression: specifier: ^0.5.1 version: 0.5.1(vite@5.0.0) @@ -978,13 +978,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.48.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -993,8 +993,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -1010,8 +1010,8 @@ packages: - supports-color dev: true - /@eslint/js@8.48.0: - resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1043,11 +1043,11 @@ packages: resolution: {integrity: sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ==} dev: false - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1059,8 +1059,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true /@isaacs/cliui@8.0.2: @@ -3732,7 +3732,7 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false - /@typescript-eslint/eslint-plugin@5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.48.0)(typescript@4.6.2): + /@typescript-eslint/eslint-plugin@5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.56.0)(typescript@4.6.2): resolution: {integrity: sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3743,12 +3743,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.38.1(eslint@8.48.0)(typescript@4.6.2) + '@typescript-eslint/parser': 5.38.1(eslint@8.56.0)(typescript@4.6.2) '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/type-utils': 5.22.0(eslint@8.48.0)(typescript@4.6.2) - '@typescript-eslint/utils': 5.22.0(eslint@8.48.0)(typescript@4.6.2) + '@typescript-eslint/type-utils': 5.22.0(eslint@8.56.0)(typescript@4.6.2) + '@typescript-eslint/utils': 5.22.0(eslint@8.56.0)(typescript@4.6.2) debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.56.0 functional-red-black-tree: 1.0.1 ignore: 5.2.4 regexpp: 3.2.0 @@ -3759,7 +3759,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.38.1(eslint@8.48.0)(typescript@4.6.2): + /@typescript-eslint/parser@5.38.1(eslint@8.56.0)(typescript@4.6.2): resolution: {integrity: sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3773,7 +3773,7 @@ packages: '@typescript-eslint/types': 5.38.1 '@typescript-eslint/typescript-estree': 5.38.1(typescript@4.6.2) debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.56.0 typescript: 4.6.2 transitivePeerDependencies: - supports-color @@ -3795,7 +3795,7 @@ packages: '@typescript-eslint/visitor-keys': 5.38.1 dev: true - /@typescript-eslint/type-utils@5.22.0(eslint@8.48.0)(typescript@4.6.2): + /@typescript-eslint/type-utils@5.22.0(eslint@8.56.0)(typescript@4.6.2): resolution: {integrity: sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3805,9 +3805,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.22.0(eslint@8.48.0)(typescript@4.6.2) + '@typescript-eslint/utils': 5.22.0(eslint@8.56.0)(typescript@4.6.2) debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.56.0 tsutils: 3.21.0(typescript@4.6.2) typescript: 4.6.2 transitivePeerDependencies: @@ -3866,7 +3866,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.22.0(eslint@8.48.0)(typescript@4.6.2): + /@typescript-eslint/utils@5.22.0(eslint@8.56.0)(typescript@4.6.2): resolution: {integrity: sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3876,9 +3876,9 @@ packages: '@typescript-eslint/scope-manager': 5.22.0 '@typescript-eslint/types': 5.22.0 '@typescript-eslint/typescript-estree': 5.22.0(typescript@4.6.2) - eslint: 8.48.0 + eslint: 8.56.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.48.0) + eslint-utils: 3.0.0(eslint@8.56.0) transitivePeerDependencies: - supports-color - typescript @@ -3902,7 +3902,6 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: false /@vercel/analytics@1.0.2: resolution: {integrity: sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg==} @@ -4680,24 +4679,24 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-prettier@9.0.0(eslint@8.48.0): + /eslint-config-prettier@9.0.0(eslint@8.56.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.48.0 + eslint: 8.56.0 dev: true - /eslint-plugin-import-helpers@1.3.1(eslint@8.48.0): + /eslint-plugin-import-helpers@1.3.1(eslint@8.56.0): resolution: {integrity: sha512-MrACDozK6TmTJoCFHD71Ew3r5210Za3zlTrhX+fQGsyvxceaFvAI9AcvZ/8oSU0pZ61G3nDEn6mXY0T4S8cJEg==} peerDependencies: eslint: 5.x - 8.x dependencies: - eslint: 8.48.0 + eslint: 8.56.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.0.0)(eslint@8.48.0)(prettier@2.6.0): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.0.0)(eslint@8.56.0)(prettier@2.6.0): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4708,22 +4707,22 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.48.0 - eslint-config-prettier: 9.0.0(eslint@8.48.0) + eslint: 8.56.0 + eslint-config-prettier: 9.0.0(eslint@8.56.0) prettier: 2.6.0 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks@4.5.0(eslint@8.48.0): + /eslint-plugin-react-hooks@4.5.0(eslint@8.56.0): resolution: {integrity: sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==} 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.48.0 + eslint: 8.56.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.48.0): + /eslint-plugin-react@7.33.2(eslint@8.56.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -4734,7 +4733,7 @@ packages: array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 es-iterator-helpers: 1.0.14 - eslint: 8.48.0 + eslint: 8.56.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -4764,13 +4763,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.48.0): + /eslint-utils@3.0.0(eslint@8.56.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.48.0 + eslint: 8.56.0 eslint-visitor-keys: 2.1.0 dev: true @@ -4784,18 +4783,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.48.0: - resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.8.0 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.48.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -7806,7 +7806,7 @@ packages: vfile-message: 4.0.2 dev: false - /vite-plugin-checker@0.6.2(eslint@8.48.0)(typescript@4.6.2)(vite@5.0.0): + /vite-plugin-checker@0.6.2(eslint@8.56.0)(typescript@4.6.2)(vite@5.0.0): resolution: {integrity: sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==} engines: {node: '>=14.16'} peerDependencies: @@ -7842,7 +7842,7 @@ packages: chalk: 4.1.2 chokidar: 3.5.3 commander: 8.3.0 - eslint: 8.48.0 + eslint: 8.56.0 fast-glob: 3.3.1 fs-extra: 11.1.1 lodash.debounce: 4.0.8 From 459a4e55bdb11850c3bd9ebfb26bdd395c42c2c5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:26:29 +0100 Subject: [PATCH 047/135] docs(changelog): iterate changelog version (#919) Co-authored-by: MadsNyl Co-authored-by: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> From 8261e20817e2e375d4eca1ce21420d3145169121 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:45:28 +0200 Subject: [PATCH 048/135] refactored news renderer (#989) --- src/components/miscellaneous/UpdatedAgo.tsx | 24 ++++ .../reactions/EmojiPickHandler.tsx | 6 +- .../miscellaneous/reactions/EmojiShowAll.tsx | 6 +- .../reactions/ReactionHandler.tsx | 2 +- .../EventDetails/components/EventRenderer.tsx | 5 +- .../NewsDetails/components/NewsRenderer.tsx | 116 ++++++++---------- 6 files changed, 88 insertions(+), 71 deletions(-) create mode 100644 src/components/miscellaneous/UpdatedAgo.tsx diff --git a/src/components/miscellaneous/UpdatedAgo.tsx b/src/components/miscellaneous/UpdatedAgo.tsx new file mode 100644 index 00000000..f0c63cd7 --- /dev/null +++ b/src/components/miscellaneous/UpdatedAgo.tsx @@ -0,0 +1,24 @@ +import { formatDistanceToNow, parseISO } from 'date-fns'; +import { nb } from 'date-fns/locale'; +import { WatchIcon } from 'lucide-react'; + +type UpdatedAgoProps = { + updatedAt: string; +}; + +const UpdatedAgo = ({ updatedAt }: UpdatedAgoProps) => { + const updatedTimeAgo = updatedAt ? formatDistanceToNow(parseISO(updatedAt), { locale: nb }) : null; + + if (!updatedTimeAgo) { + return null; + } + + return ( +
+ +

Oppdatert {updatedTimeAgo} siden

+
+ ); +}; + +export default UpdatedAgo; diff --git a/src/components/miscellaneous/reactions/EmojiPickHandler.tsx b/src/components/miscellaneous/reactions/EmojiPickHandler.tsx index c67f1023..54f02dc4 100644 --- a/src/components/miscellaneous/reactions/EmojiPickHandler.tsx +++ b/src/components/miscellaneous/reactions/EmojiPickHandler.tsx @@ -1,4 +1,4 @@ -import { Container, Dialog as MuiDialog } from '@mui/material'; +import { Dialog as MuiDialog } from '@mui/material'; import EmojiPicker, { EmojiClickData } from 'emoji-picker-react'; import { SmilePlusIcon } from 'lucide-react'; import { useState } from 'react'; @@ -58,7 +58,7 @@ export const EmojiPickerHandler = ({ data, content_type }: ReactionHandlerProps) }; return ( - +
@@ -66,6 +66,6 @@ export const EmojiPickerHandler = ({ data, content_type }: ReactionHandlerProps) - +
); }; diff --git a/src/components/miscellaneous/reactions/EmojiShowAll.tsx b/src/components/miscellaneous/reactions/EmojiShowAll.tsx index a3230252..19016c56 100644 --- a/src/components/miscellaneous/reactions/EmojiShowAll.tsx +++ b/src/components/miscellaneous/reactions/EmojiShowAll.tsx @@ -1,4 +1,4 @@ -import { Collapse, Container } from '@mui/material'; +import { Collapse } from '@mui/material'; import { ListIcon } from 'lucide-react'; import { useState } from 'react'; @@ -45,7 +45,7 @@ export const EmojiShowAll = (data: ContentType) => { const [tab, setTab] = useState('all'); return ( - +
@@ -67,6 +67,6 @@ export const EmojiShowAll = (data: ContentType) => { ))}
- +
); }; diff --git a/src/components/miscellaneous/reactions/ReactionHandler.tsx b/src/components/miscellaneous/reactions/ReactionHandler.tsx index cf1fd02a..c0202fe8 100644 --- a/src/components/miscellaneous/reactions/ReactionHandler.tsx +++ b/src/components/miscellaneous/reactions/ReactionHandler.tsx @@ -11,7 +11,7 @@ export type ReactionHandlerProps = { export const ReactionHandler = ({ data, content_type }: ReactionHandlerProps) => { return ( -
+
{data.reactions?.length ? : null} diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index 9ab6ea64..bae5ffbb 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -42,6 +42,7 @@ import MarkdownRenderer from 'components/miscellaneous/MarkdownRenderer'; import QRButton from 'components/miscellaneous/QRButton'; import { ReactionHandler } from 'components/miscellaneous/reactions/ReactionHandler'; import ShareButton from 'components/miscellaneous/ShareButton'; +import UpdatedAgo from 'components/miscellaneous/UpdatedAgo'; import { Alert, AlertDescription } from 'components/ui/alert'; import { Button } from 'components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from 'components/ui/card'; @@ -458,7 +459,7 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { )}
- {data.image_alt + {data.image_alt {data.emojis_allowed && user && (
@@ -478,6 +479,8 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => { + + {data.updated_at && }
); diff --git a/src/pages/NewsDetails/components/NewsRenderer.tsx b/src/pages/NewsDetails/components/NewsRenderer.tsx index 7a95733a..c6b7b16e 100644 --- a/src/pages/NewsDetails/components/NewsRenderer.tsx +++ b/src/pages/NewsDetails/components/NewsRenderer.tsx @@ -1,7 +1,6 @@ -import { Button, Skeleton, Stack, styled, Typography } from '@mui/material'; +import { Skeleton, Stack } from '@mui/material'; import parseISO from 'date-fns/parseISO'; -import React from 'react'; -import { usePalette } from 'react-palette'; +import { PencilIcon } from 'lucide-react'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; import { formatDate } from 'utils'; @@ -13,79 +12,70 @@ import { HavePermission, useUser } from 'hooks/User'; import Container from 'components/layout/Container'; import Paper from 'components/layout/Paper'; -import AspectRatioImg, { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; +import { AspectRatioLoading } from 'components/miscellaneous/AspectRatioImg'; import MarkdownRenderer from 'components/miscellaneous/MarkdownRenderer'; import { ReactionHandler } from 'components/miscellaneous/reactions/ReactionHandler'; import ShareButton from 'components/miscellaneous/ShareButton'; +import UpdatedAgo from 'components/miscellaneous/UpdatedAgo'; +import { Button } from 'components/ui/button'; +import { Separator } from 'components/ui/separator'; -const TopContainer = styled('div', { shouldForwardProp: (prop) => prop !== 'bgColor' })<{ bgColor?: React.CSSProperties['backgroundColor'] }>( - ({ theme, bgColor }) => ({ - color: theme.palette.common.white, - paddingTop: theme.spacing(10), - paddingBottom: theme.spacing(20), - background: bgColor || theme.palette.colors.gradient.main.top, - transition: 'background 1s', - [theme.breakpoints.down('lg')]: { - paddingBottom: theme.spacing(15), - }, - }), -); +import TIHLDE_LOGO from 'assets/img/TihldeBackground.jpg'; export type NewsRendererProps = { data: News; preview?: boolean; }; + const NewsRenderer = ({ data, preview = false }: NewsRendererProps) => { - const { data: palette } = usePalette(data?.image || ''); const { data: user } = useUser(); return (
- - - ({ xs: '2.3rem', lg: theme.typography.h1.fontSize }) }} variant='h1'> - {data.title} - - - {data.header} - - - - - - - {!preview && ( - - - +
+
+

{data.title}

+

{data.header}

+
+ +
+ {data.creator && ( +

+ Skrevet av{' '} + + {data.creator.first_name} {data.creator.last_name} + +

)} - - - - Publisert: {formatDate(parseISO(data.created_at), { time: false })} - {data.creator && ( - <> -
- Forfatter:{' '} - - {data.creator.first_name} {data.creator.last_name} - - - )} -
-
- {data?.emojis_allowed && user && } -
- - - - - - - - +

{formatDate(parseISO(data.created_at), { time: false })}

+ {data.updated_at && } +
+
+ +
+ {data.image_alt + +
+
+ + {!preview && ( + + + + )} +
+ {data?.emojis_allowed && user && } +
+ + + +
+ +
+
); }; @@ -94,12 +84,12 @@ export default NewsRenderer; export const NewsRendererLoading = () => (
- +
- +
From a280ac5f0a0d8e82049a31ecdb38ecad8e21aa79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:22:33 +0200 Subject: [PATCH 049/135] chore(deps): bump @emotion/react from 11.9.0 to 11.11.4 (#988) Bumps [@emotion/react](https://github.com/emotion-js/emotion) from 11.9.0 to 11.11.4. - [Release notes](https://github.com/emotion-js/emotion/releases) - [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md) - [Commits](https://github.com/emotion-js/emotion/compare/@emotion/react@11.9.0...@emotion/react@11.11.4) --- updated-dependencies: - dependency-name: "@emotion/react" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 665 +++++++------------------------------------------ 2 files changed, 91 insertions(+), 576 deletions(-) diff --git a/package.json b/package.json index ec4894db..c185934f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@devexpress/dx-react-scheduler": "^3.0.0-beta.2", "@devexpress/dx-react-scheduler-material-ui": "^3.0.0-beta.2", "@emotion/cache": "^11.11.0", - "@emotion/react": "^11.9.0", + "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.8", "@mui/lab": "^5.0.0-alpha.60", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2311d147..8e236437 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,25 +13,25 @@ dependencies: version: 3.0.0-beta.2(@devexpress/dx-core@3.0.0-beta.2)(@devexpress/dx-react-core@3.0.0-beta.2)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2) '@devexpress/dx-react-scheduler-material-ui': specifier: ^3.0.0-beta.2 - version: 3.0.0-beta.2(@devexpress/dx-react-core@3.0.0-beta.2)(@devexpress/dx-react-scheduler@3.0.0-beta.2)(@devexpress/dx-scheduler-core@3.0.0-beta.2)(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@mui/icons-material@5.14.8)(@mui/lab@5.0.0-alpha.60)(@mui/material@5.14.9)(@mui/styles@5.14.18)(moment@2.29.4)(react@17.0.2) + version: 3.0.0-beta.2(@devexpress/dx-react-core@3.0.0-beta.2)(@devexpress/dx-react-scheduler@3.0.0-beta.2)(@devexpress/dx-scheduler-core@3.0.0-beta.2)(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/icons-material@5.14.8)(@mui/lab@5.0.0-alpha.60)(@mui/material@5.14.9)(@mui/styles@5.14.18)(moment@2.29.4)(react@17.0.2) '@emotion/cache': specifier: ^11.11.0 version: 11.11.0 '@emotion/react': - specifier: ^11.9.0 - version: 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) + specifier: ^11.11.4 + version: 11.11.4(@types/react@17.0.37)(react@17.0.2) '@emotion/styled': specifier: ^11.11.0 - version: 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + version: 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) '@mui/icons-material': specifier: ^5.14.8 version: 5.14.8(@mui/material@5.14.9)(@types/react@17.0.37)(react@17.0.2) '@mui/lab': specifier: ^5.0.0-alpha.60 - version: 5.0.0-alpha.60(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@mui/material@5.14.9)(@types/react@17.0.37)(date-fns@2.30.0)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2) + version: 5.0.0-alpha.60(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.14.9)(@types/react@17.0.37)(date-fns@2.30.0)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2) '@mui/material': specifier: ^5.14.9 - version: 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + version: 5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-avatar': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) @@ -49,10 +49,10 @@ dependencies: version: 2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.0.2(react-dom@17.0.2)(react@17.0.2) + version: 2.0.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(react-dom@17.0.2)(react@17.0.2) + version: 2.0.0(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-separator': specifier: ^1.0.3 version: 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) @@ -61,7 +61,7 @@ dependencies: version: 1.0.2(@types/react@17.0.37)(react@17.0.2) '@radix-ui/react-switch': specifier: ^1.0.3 - version: 1.0.3(react-dom@17.0.2)(react@17.0.2) + version: 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-toggle': specifier: ^1.0.3 version: 1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) @@ -172,7 +172,7 @@ dependencies: version: 1.0.7(tailwindcss@3.4.1) tss-react: specifier: ^4.9.0 - version: 4.9.0(@emotion/react@11.9.0)(react@17.0.2) + version: 4.9.0(@emotion/react@11.11.4)(react@17.0.2) universal-cookie: specifier: ^6.1.0 version: 6.1.0 @@ -277,6 +277,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 + dev: true /@babel/code-frame@7.22.13: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} @@ -296,6 +297,7 @@ packages: /@babel/compat-data@7.23.3: resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/core@7.23.3: resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} @@ -318,6 +320,7 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /@babel/generator@7.23.4: resolution: {integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==} @@ -327,6 +330,7 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 + dev: true /@babel/helper-compilation-targets@7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} @@ -337,10 +341,12 @@ packages: browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 + dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} @@ -348,18 +354,20 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.4 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.4 + dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.23.4 /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -373,6 +381,7 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: true /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} @@ -384,16 +393,14 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.4 + dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.4 - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} + dev: true /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} @@ -402,6 +409,7 @@ packages: /@babel/helper-validator-identifier@7.22.15: resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} @@ -410,6 +418,7 @@ packages: /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helpers@7.23.4: resolution: {integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==} @@ -420,6 +429,7 @@ packages: '@babel/types': 7.23.4 transitivePeerDependencies: - supports-color + dev: true /@babel/highlight@7.22.13: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} @@ -444,6 +454,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.4 + dev: true /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.3): resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} @@ -486,6 +497,7 @@ packages: '@babel/code-frame': 7.23.4 '@babel/parser': 7.23.4 '@babel/types': 7.23.4 + dev: true /@babel/traverse@7.23.4: resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==} @@ -503,14 +515,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - - /@babel/types@7.22.15: - resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.15 - to-fast-properties: 2.0.0 + dev: true /@babel/types@7.23.4: resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==} @@ -599,7 +604,7 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@devexpress/dx-react-scheduler-material-ui@3.0.0-beta.2(@devexpress/dx-react-core@3.0.0-beta.2)(@devexpress/dx-react-scheduler@3.0.0-beta.2)(@devexpress/dx-scheduler-core@3.0.0-beta.2)(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@mui/icons-material@5.14.8)(@mui/lab@5.0.0-alpha.60)(@mui/material@5.14.9)(@mui/styles@5.14.18)(moment@2.29.4)(react@17.0.2): + /@devexpress/dx-react-scheduler-material-ui@3.0.0-beta.2(@devexpress/dx-react-core@3.0.0-beta.2)(@devexpress/dx-react-scheduler@3.0.0-beta.2)(@devexpress/dx-scheduler-core@3.0.0-beta.2)(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/icons-material@5.14.8)(@mui/lab@5.0.0-alpha.60)(@mui/material@5.14.9)(@mui/styles@5.14.18)(moment@2.29.4)(react@17.0.2): resolution: {integrity: sha512-yFP8TsMduwvyLfUL70j6kTK3SQvLKrTBqi9Ze2GXloWveoqvPqmtZ3MxeLL20KuoHk8SBPjDJgTOA9LapJm60g==} peerDependencies: '@devexpress/dx-react-core': 3.0.0-beta.2 @@ -618,11 +623,11 @@ packages: '@devexpress/dx-react-core': 3.0.0-beta.2(react-dom@17.0.2)(react@17.0.2) '@devexpress/dx-react-scheduler': 3.0.0-beta.2(@devexpress/dx-core@3.0.0-beta.2)(@devexpress/dx-react-core@3.0.0-beta.2)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2) '@devexpress/dx-scheduler-core': 3.0.0-beta.2(@devexpress/dx-core@3.0.0-beta.2) - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) - '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) + '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) '@mui/icons-material': 5.14.8(@mui/material@5.14.9)(@types/react@17.0.37)(react@17.0.2) - '@mui/lab': 5.0.0-alpha.60(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@mui/material@5.14.9)(@types/react@17.0.37)(date-fns@2.30.0)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2) - '@mui/material': 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@mui/lab': 5.0.0-alpha.60(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.14.9)(@types/react@17.0.37)(date-fns@2.30.0)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2) + '@mui/material': 5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@mui/styles': 5.14.18(@types/react@17.0.37)(react@17.0.2) clsx: 1.2.1 moment: 2.29.4 @@ -664,7 +669,7 @@ packages: '@babel/runtime': 7.24.0 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.2 + '@emotion/serialize': 1.1.3 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -697,25 +702,22 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2): - resolution: {integrity: sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==} + /@emotion/react@11.11.4(@types/react@17.0.37)(react@17.0.2): + resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} peerDependencies: - '@babel/core': ^7.0.0 '@types/react': '*' react: '>=16.8.0' peerDependenciesMeta: - '@babel/core': - optional: true '@types/react': optional: true dependencies: - '@babel/core': 7.23.3 - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.24.0 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.2 + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@17.0.2) '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.2.5 + '@emotion/weak-memoize': 0.3.1 '@types/react': 17.0.37 hoist-non-react-statics: 3.3.2 react: 17.0.2 @@ -731,11 +733,21 @@ packages: csstype: 3.1.2 dev: false + /@emotion/serialize@1.1.3: + resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.2 + dev: false + /@emotion/sheet@1.2.2: resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} dev: false - /@emotion/styled@11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2): + /@emotion/styled@11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 @@ -748,7 +760,7 @@ packages: '@babel/runtime': 7.22.15 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.1 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) '@emotion/serialize': 1.1.2 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@17.0.2) '@emotion/utils': 1.2.1 @@ -772,10 +784,6 @@ packages: resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} dev: false - /@emotion/weak-memoize@0.2.5: - resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} - dev: false - /@emotion/weak-memoize@0.3.1: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false @@ -1271,12 +1279,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.15 - '@mui/material': 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@mui/material': 5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@types/react': 17.0.37 react: 17.0.2 dev: false - /@mui/lab@5.0.0-alpha.60(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@mui/material@5.14.9)(@types/react@17.0.37)(date-fns@2.30.0)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2): + /@mui/lab@5.0.0-alpha.60(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.14.9)(@types/react@17.0.37)(date-fns@2.30.0)(moment@2.29.4)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-d41Ks+rY2OJSGffVLj3nZiJwAMmAzoOoKv5FZIM3LFSiBOudihtwDbed3VcWYGZd/hdWTAfM0HE8AB0hoE7GAg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1306,8 +1314,8 @@ packages: '@date-io/luxon': 2.17.0 '@date-io/moment': 2.17.0(moment@2.29.4) '@mui/base': 5.0.0-alpha.60(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) - '@mui/material': 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) - '@mui/system': 5.14.7(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react@17.0.2) + '@mui/material': 5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@mui/system': 5.14.7(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react@17.0.2) '@mui/utils': 5.14.7(react@17.0.2) '@types/react': 17.0.37 clsx: 1.2.1 @@ -1324,7 +1332,7 @@ packages: - '@emotion/styled' dev: false - /@mui/material@5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + /@mui/material@5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-pbBy5kc5iUGXPxgbb+t+yEPvLK5nE3bPUb8WbAafJ8iZ40ZGui0xC4xiiIyzbVexzsLmyN7MaSo4LkxLmPKqUQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1342,11 +1350,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.15 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) - '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) + '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) '@mui/base': 5.0.0-beta.15(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@mui/core-downloads-tracker': 5.14.9 - '@mui/system': 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@mui/system': 5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@mui/types': 7.2.4(@types/react@17.0.37) '@mui/utils': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@types/react': 17.0.37 @@ -1413,7 +1421,7 @@ packages: - react-dom dev: false - /@mui/styled-engine@5.14.7(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(react@17.0.2): + /@mui/styled-engine@5.14.7(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@17.0.2): resolution: {integrity: sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1428,14 +1436,14 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@emotion/cache': 11.11.0 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) - '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) + '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) csstype: 3.1.2 prop-types: 15.8.1 react: 17.0.2 dev: false - /@mui/styled-engine@5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(react@17.0.2): + /@mui/styled-engine@5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@17.0.2): resolution: {integrity: sha512-LEQxLrW9oWvea33pge08+oyNeTz704jb6Nhe26xEJKojXWd34Rr327Zzx3dmo70AcS4h0b99vQjEpUzm6ASqUw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1450,8 +1458,8 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@emotion/cache': 11.11.0 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) - '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) + '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) csstype: 3.1.2 prop-types: 15.8.1 react: 17.0.2 @@ -1488,7 +1496,7 @@ packages: react: 17.0.2 dev: false - /@mui/system@5.14.7(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react@17.0.2): + /@mui/system@5.14.7(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1505,10 +1513,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) - '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) + '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) '@mui/private-theming': 5.14.7(@types/react@17.0.37)(react@17.0.2) - '@mui/styled-engine': 5.14.7(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(react@17.0.2) + '@mui/styled-engine': 5.14.7(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@17.0.2) '@mui/types': 7.2.4(@types/react@17.0.37) '@mui/utils': 5.14.7(react@17.0.2) '@types/react': 17.0.37 @@ -1518,7 +1526,7 @@ packages: react: 17.0.2 dev: false - /@mui/system@5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): + /@mui/system@5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Z00Wj590QXk5+SIxmxayBo7SWrao+y433LKGChneJxO4QcT/caSCeEWtyeoLs1Q8ys0zOzl2kkKee6n8TaKzhQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1535,10 +1543,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) - '@emotion/styled': 11.11.0(@emotion/react@11.9.0)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) + '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@17.0.37)(react@17.0.2) '@mui/private-theming': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) - '@mui/styled-engine': 5.14.9(@emotion/react@11.9.0)(@emotion/styled@11.11.0)(react@17.0.2) + '@mui/styled-engine': 5.14.9(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@17.0.2) '@mui/types': 7.2.4(@types/react@17.0.37) '@mui/utils': 5.14.9(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@types/react': 17.0.37 @@ -1760,25 +1768,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-arrow@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} peerDependencies: @@ -1904,28 +1893,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-collection@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - '@radix-ui/react-context': 1.0.1(react@17.0.2) - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-slot': 1.0.2(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -1940,19 +1907,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-compose-refs@1.0.1(react@17.0.2): - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-context-menu@2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: @@ -1993,19 +1947,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-context@1.0.1(react@17.0.2): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-dialog@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: @@ -2054,19 +1995,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-direction@1.0.1(react@17.0.2): - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -2092,29 +2020,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-dismissable-layer@1.0.5(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) - '@radix-ui/react-use-escape-keydown': 1.0.3(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: @@ -2156,19 +2061,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-focus-guards@1.0.1(react@17.0.2): - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: @@ -2192,27 +2084,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-focus-scope@1.0.4(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-hover-card@1.0.7(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} peerDependencies: @@ -2257,20 +2128,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-id@1.0.1(react@17.0.2): - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) - react: 17.0.2 - dev: false - /@radix-ui/react-label@2.0.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: @@ -2292,25 +2149,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-label@2.0.2(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-menu@2.0.6(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: @@ -2448,34 +2286,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-popper@1.1.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@floating-ui/react-dom': 2.0.2(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-arrow': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - '@radix-ui/react-context': 1.0.1(react@17.0.2) - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) - '@radix-ui/react-use-rect': 1.0.1(react@17.0.2) - '@radix-ui/react-use-size': 1.0.1(react@17.0.2) - '@radix-ui/rect': 1.0.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-portal@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: @@ -2497,25 +2307,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-portal@1.0.4(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: @@ -2559,25 +2350,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-primitive@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-slot': 1.0.2(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-progress@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: @@ -2729,45 +2501,6 @@ packages: react-remove-scroll: 2.5.5(@types/react@17.0.37)(react@17.0.2) dev: false - /@radix-ui/react-select@2.0.0(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - '@radix-ui/react-context': 1.0.1(react@17.0.2) - '@radix-ui/react-direction': 1.0.1(react@17.0.2) - '@radix-ui/react-dismissable-layer': 1.0.5(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-focus-guards': 1.0.1(react@17.0.2) - '@radix-ui/react-focus-scope': 1.0.4(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-id': 1.0.1(react@17.0.2) - '@radix-ui/react-popper': 1.1.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-portal': 1.0.4(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-slot': 1.0.2(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.1(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) - '@radix-ui/react-use-previous': 1.0.1(react@17.0.2) - '@radix-ui/react-visually-hidden': 1.0.3(react-dom@17.0.2)(react@17.0.2) - aria-hidden: 1.2.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-remove-scroll: 2.5.5(react@17.0.2) - dev: false - /@radix-ui/react-separator@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} peerDependencies: @@ -2835,20 +2568,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-slot@1.0.2(react@17.0.2): - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - react: 17.0.2 - dev: false - /@radix-ui/react-switch@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: @@ -2876,31 +2595,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-switch@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) - '@radix-ui/react-context': 1.0.1(react@17.0.2) - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.1(react@17.0.2) - '@radix-ui/react-use-previous': 1.0.1(react@17.0.2) - '@radix-ui/react-use-size': 1.0.1(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/react-tabs@1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: @@ -3084,19 +2778,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(react@17.0.2): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -3112,20 +2793,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(react@17.0.2): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) - react: 17.0.2 - dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -3141,20 +2808,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(react@17.0.2): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) - react: 17.0.2 - dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -3169,19 +2822,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(react@17.0.2): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-use-previous@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -3196,19 +2836,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-previous@1.0.1(react@17.0.2): - resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - react: 17.0.2 - dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: @@ -3224,20 +2851,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-rect@1.0.1(react@17.0.2): - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/rect': 1.0.1 - react: 17.0.2 - dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: @@ -3253,20 +2866,6 @@ packages: react: 17.0.2 dev: false - /@radix-ui/react-use-size@1.0.1(react@17.0.2): - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) - react: 17.0.2 - dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: @@ -3288,25 +2887,6 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false - /@radix-ui/react-visually-hidden@1.0.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - dev: false - /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: @@ -4180,6 +3760,7 @@ packages: electron-to-chromium: 1.4.588 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} @@ -4225,6 +3806,7 @@ packages: /caniuse-lite@1.0.30001563: resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} + dev: true /caniuse-lite@1.0.30001596: resolution: {integrity: sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==} @@ -4336,6 +3918,7 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} @@ -4520,6 +4103,7 @@ packages: /electron-to-chromium@1.4.588: resolution: {integrity: sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==} + dev: true /electron-to-chromium@1.4.699: resolution: {integrity: sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==} @@ -4670,6 +4254,7 @@ packages: /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -5033,6 +4618,7 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: true /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} @@ -5105,6 +4691,7 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /globals@13.21.0: resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} @@ -5569,6 +5156,7 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -5589,6 +5177,7 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -5770,6 +5359,7 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -6157,6 +5747,7 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -6771,22 +6362,6 @@ packages: tslib: 2.6.2 dev: false - /react-remove-scroll-bar@2.3.5(react@17.0.2): - resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==} - engines: {node: '>=10'} - deprecated: please update to the following version as this contains a bug (https://github.com/theKashey/react-remove-scroll-bar/issues/57) - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - react: 17.0.2 - react-style-singleton: 2.2.1(react@17.0.2) - tslib: 2.6.2 - dev: false - /react-remove-scroll@2.5.5(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -6806,24 +6381,6 @@ packages: use-sidecar: 1.1.2(@types/react@17.0.37)(react@17.0.2) dev: false - /react-remove-scroll@2.5.5(react@17.0.2): - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - react: 17.0.2 - react-remove-scroll-bar: 2.3.5(react@17.0.2) - react-style-singleton: 2.2.1(react@17.0.2) - tslib: 2.6.2 - use-callback-ref: 1.3.1(react@17.0.2) - use-sidecar: 1.1.2(react@17.0.2) - dev: false - /react-router-dom@6.15.0(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==} engines: {node: '>=14.0.0'} @@ -6872,22 +6429,6 @@ packages: tslib: 2.6.2 dev: false - /react-style-singleton@2.2.1(react@17.0.2): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - get-nonce: 1.0.1 - invariant: 2.2.4 - react: 17.0.2 - tslib: 2.6.2 - dev: false - /react-transition-group@4.4.5(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -7123,6 +6664,7 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -7448,7 +6990,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tss-react@4.9.0(@emotion/react@11.9.0)(react@17.0.2): + /tss-react@4.9.0(@emotion/react@11.11.4)(react@17.0.2): resolution: {integrity: sha512-dgqNSR9J0+NxvdwzXoKo2HxGGu2sg0UikLnPumGNLa9CSPVcL6ZNu23CJwxPaMvRnQC8NRyNbUN3pBCS9AWwRA==} peerDependencies: '@emotion/react': ^11.4.1 @@ -7459,7 +7001,7 @@ packages: optional: true dependencies: '@emotion/cache': 11.11.0 - '@emotion/react': 11.9.0(@babel/core@7.23.3)(@types/react@17.0.37)(react@17.0.2) + '@emotion/react': 11.11.4(@types/react@17.0.37)(react@17.0.2) '@emotion/serialize': 1.1.2 '@emotion/utils': 1.2.1 react: 17.0.2 @@ -7659,6 +7201,7 @@ packages: browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} @@ -7699,20 +7242,6 @@ packages: tslib: 2.6.2 dev: false - /use-callback-ref@1.3.1(react@17.0.2): - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - react: 17.0.2 - tslib: 2.6.2 - dev: false - /use-sidecar@1.1.2(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -7729,21 +7258,6 @@ packages: tslib: 2.6.2 dev: false - /use-sidecar@1.1.2(react@17.0.2): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - detect-node-es: 1.1.0 - react: 17.0.2 - tslib: 2.6.2 - dev: false - /utif@2.0.1: resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} dependencies: @@ -8091,6 +7605,7 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} From 30318fbac1aa5212fc58d507c5daefab2ec453d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:23:27 +0200 Subject: [PATCH 050/135] chore(deps): bump @vercel/analytics from 1.0.2 to 1.1.4 (#984) Bumps [@vercel/analytics](https://github.com/vercel/analytics/tree/HEAD/packages/web) from 1.0.2 to 1.1.4. - [Release notes](https://github.com/vercel/analytics/releases) - [Commits](https://github.com/vercel/analytics/commits/1.1.4/packages/web) --- updated-dependencies: - dependency-name: "@vercel/analytics" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c185934f..a1995fc6 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-toggle": "^1.0.3", "@radix-ui/react-toggle-group": "^1.0.4", - "@vercel/analytics": "1.0.2", + "@vercel/analytics": "1.1.4", "browser-image-compression": "^2.0.0", "canvas-confetti": "^1.6.0", "class-variance-authority": "^0.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e236437..99775442 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,8 +69,8 @@ dependencies: specifier: ^1.0.4 version: 1.0.4(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) '@vercel/analytics': - specifier: 1.0.2 - version: 1.0.2 + specifier: 1.1.4 + version: 1.1.4 browser-image-compression: specifier: ^2.0.0 version: 2.0.0 @@ -3483,8 +3483,10 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@vercel/analytics@1.0.2: - resolution: {integrity: sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg==} + /@vercel/analytics@1.1.4: + resolution: {integrity: sha512-CVzw3SLcPSc31tRDLLqDGqWQCv6/ylpEZnW7AYMvtvRsO2Q8hmjBVOqvo2Ok6MZnYf262O8c86LB2K9vK1/ZbQ==} + dependencies: + server-only: 0.0.1 dev: false /@vitejs/plugin-react@4.2.0(vite@5.0.0): @@ -6674,6 +6676,10 @@ packages: lru-cache: 6.0.0 dev: true + /server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} From 7e2dd0b2df64be5e3578d5cea357e545b7594146 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:30:31 +0200 Subject: [PATCH 051/135] chore(deps): bump react-router-dom from 6.15.0 to 6.22.3 (#985) * chore(deps): bump react-router-dom from 6.15.0 to 6.22.3 Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.15.0 to 6.22.3. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.22.3/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * fixed pnpm-lock --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Co-authored-by: Mads Nylund --- package.json | 2 +- pnpm-lock.yaml | 143 +++++++++++++++++++++++++++---------------------- 2 files changed, 79 insertions(+), 66 deletions(-) diff --git a/package.json b/package.json index a1995fc6..10431d23 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "react-markdown": "^8.0.0", "react-palette": "^1.0.2", "react-query": "^3.39.0", - "react-router-dom": "^6.15.0", + "react-router-dom": "^6.22.3", "rehype-raw": "^7.0.0", "slugify": "^1.6.3", "tailwind-merge": "^2.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99775442..e1c689e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,8 +156,8 @@ dependencies: specifier: ^3.39.0 version: 3.39.0(react-dom@17.0.2)(react@17.0.2) react-router-dom: - specifier: ^6.15.0 - version: 6.15.0(react-dom@17.0.2)(react@17.0.2) + specifier: ^6.22.3 + version: 6.22.3(react-dom@17.0.2)(react@17.0.2) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -201,10 +201,10 @@ devDependencies: version: 2.1.4 '@typescript-eslint/eslint-plugin': specifier: ^5.22.0 - version: 5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.56.0)(typescript@4.6.2) + version: 5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.57.0)(typescript@4.6.2) '@typescript-eslint/parser': specifier: ^5.38.1 - version: 5.38.1(eslint@8.56.0)(typescript@4.6.2) + version: 5.38.1(eslint@8.57.0)(typescript@4.6.2) '@vitejs/plugin-react': specifier: ^4.2.0 version: 4.2.0(vite@5.0.0) @@ -213,22 +213,22 @@ devDependencies: version: 10.4.18(postcss@8.4.35) eslint: specifier: ^8.56.0 - version: 8.56.0 + version: 8.57.0 eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0(eslint@8.56.0) + version: 9.0.0(eslint@8.57.0) eslint-plugin-import-helpers: specifier: ^1.3.1 - version: 1.3.1(eslint@8.56.0) + version: 1.3.1(eslint@8.57.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@9.0.0)(eslint@8.56.0)(prettier@2.6.0) + version: 4.2.1(eslint-config-prettier@9.0.0)(eslint@8.57.0)(prettier@2.6.0) eslint-plugin-react: specifier: ^7.33.2 - version: 7.33.2(eslint@8.56.0) + version: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: specifier: ^4.5.0 - version: 4.5.0(eslint@8.56.0) + version: 4.5.0(eslint@8.57.0) husky: specifier: ^8.0.1 version: 8.0.1 @@ -249,7 +249,7 @@ devDependencies: version: 5.0.0(@types/node@20.6.3) vite-plugin-checker: specifier: ^0.6.2 - version: 0.6.2(eslint@8.56.0)(typescript@4.6.2)(vite@5.0.0) + version: 0.6.2(eslint@8.57.0)(typescript@4.6.2)(vite@5.0.0) vite-plugin-compression: specifier: ^0.5.1 version: 0.5.1(vite@5.0.0) @@ -367,7 +367,7 @@ packages: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.4 + '@babel/types': 7.22.15 /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -402,14 +402,18 @@ packages: '@babel/types': 7.23.4 dev: true + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.22.15: resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} @@ -517,6 +521,14 @@ packages: - supports-color dev: true + /@babel/types@7.22.15: + resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 + to-fast-properties: 2.0.0 + /@babel/types@7.23.4: resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==} engines: {node: '>=6.9.0'} @@ -524,6 +536,7 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + dev: true /@date-io/core@1.3.13: resolution: {integrity: sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA==} @@ -669,7 +682,7 @@ packages: '@babel/runtime': 7.24.0 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.2 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -714,7 +727,7 @@ packages: '@babel/runtime': 7.24.0 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@17.0.2) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 @@ -733,8 +746,8 @@ packages: csstype: 3.1.2 dev: false - /@emotion/serialize@1.1.3: - resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + /@emotion/serialize@1.1.4: + resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} dependencies: '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -986,13 +999,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1018,8 +1031,8 @@ packages: - supports-color dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1055,7 +1068,7 @@ packages: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1067,8 +1080,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true /@isaacs/cliui@8.0.2: @@ -2905,8 +2918,8 @@ packages: resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} dev: false - /@remix-run/router@1.8.0: - resolution: {integrity: sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==} + /@remix-run/router@1.15.3: + resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} engines: {node: '>=14.0.0'} dev: false @@ -3312,7 +3325,7 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false - /@typescript-eslint/eslint-plugin@5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.56.0)(typescript@4.6.2): + /@typescript-eslint/eslint-plugin@5.22.0(@typescript-eslint/parser@5.38.1)(eslint@8.57.0)(typescript@4.6.2): resolution: {integrity: sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3323,12 +3336,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.38.1(eslint@8.56.0)(typescript@4.6.2) + '@typescript-eslint/parser': 5.38.1(eslint@8.57.0)(typescript@4.6.2) '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/type-utils': 5.22.0(eslint@8.56.0)(typescript@4.6.2) - '@typescript-eslint/utils': 5.22.0(eslint@8.56.0)(typescript@4.6.2) + '@typescript-eslint/type-utils': 5.22.0(eslint@8.57.0)(typescript@4.6.2) + '@typescript-eslint/utils': 5.22.0(eslint@8.57.0)(typescript@4.6.2) debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 functional-red-black-tree: 1.0.1 ignore: 5.2.4 regexpp: 3.2.0 @@ -3339,7 +3352,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.38.1(eslint@8.56.0)(typescript@4.6.2): + /@typescript-eslint/parser@5.38.1(eslint@8.57.0)(typescript@4.6.2): resolution: {integrity: sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3353,7 +3366,7 @@ packages: '@typescript-eslint/types': 5.38.1 '@typescript-eslint/typescript-estree': 5.38.1(typescript@4.6.2) debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 typescript: 4.6.2 transitivePeerDependencies: - supports-color @@ -3375,7 +3388,7 @@ packages: '@typescript-eslint/visitor-keys': 5.38.1 dev: true - /@typescript-eslint/type-utils@5.22.0(eslint@8.56.0)(typescript@4.6.2): + /@typescript-eslint/type-utils@5.22.0(eslint@8.57.0)(typescript@4.6.2): resolution: {integrity: sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3385,9 +3398,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.22.0(eslint@8.56.0)(typescript@4.6.2) + '@typescript-eslint/utils': 5.22.0(eslint@8.57.0)(typescript@4.6.2) debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 tsutils: 3.21.0(typescript@4.6.2) typescript: 4.6.2 transitivePeerDependencies: @@ -3446,7 +3459,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.22.0(eslint@8.56.0)(typescript@4.6.2): + /@typescript-eslint/utils@5.22.0(eslint@8.57.0)(typescript@4.6.2): resolution: {integrity: sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3456,9 +3469,9 @@ packages: '@typescript-eslint/scope-manager': 5.22.0 '@typescript-eslint/types': 5.22.0 '@typescript-eslint/typescript-estree': 5.22.0(typescript@4.6.2) - eslint: 8.56.0 + eslint: 8.57.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.56.0) + eslint-utils: 3.0.0(eslint@8.57.0) transitivePeerDependencies: - supports-color - typescript @@ -4266,24 +4279,24 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-prettier@9.0.0(eslint@8.56.0): + /eslint-config-prettier@9.0.0(eslint@8.57.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-import-helpers@1.3.1(eslint@8.56.0): + /eslint-plugin-import-helpers@1.3.1(eslint@8.57.0): resolution: {integrity: sha512-MrACDozK6TmTJoCFHD71Ew3r5210Za3zlTrhX+fQGsyvxceaFvAI9AcvZ/8oSU0pZ61G3nDEn6mXY0T4S8cJEg==} peerDependencies: eslint: 5.x - 8.x dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.0.0)(eslint@8.56.0)(prettier@2.6.0): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.0.0)(eslint@8.57.0)(prettier@2.6.0): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4294,22 +4307,22 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.56.0 - eslint-config-prettier: 9.0.0(eslint@8.56.0) + eslint: 8.57.0 + eslint-config-prettier: 9.0.0(eslint@8.57.0) prettier: 2.6.0 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks@4.5.0(eslint@8.56.0): + /eslint-plugin-react-hooks@4.5.0(eslint@8.57.0): resolution: {integrity: sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==} 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.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.56.0): + /eslint-plugin-react@7.33.2(eslint@8.57.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -4320,7 +4333,7 @@ packages: array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 es-iterator-helpers: 1.0.14 - eslint: 8.56.0 + eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -4350,13 +4363,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.56.0): + /eslint-utils@3.0.0(eslint@8.57.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 2.1.0 dev: true @@ -4370,15 +4383,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.8.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 + '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -6383,26 +6396,26 @@ packages: use-sidecar: 1.1.2(@types/react@17.0.37)(react@17.0.2) dev: false - /react-router-dom@6.15.0(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==} + /react-router-dom@6.22.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.8.0 + '@remix-run/router': 1.15.3 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - react-router: 6.15.0(react@17.0.2) + react-router: 6.22.3(react@17.0.2) dev: false - /react-router@6.15.0(react@17.0.2): - resolution: {integrity: sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg==} + /react-router@6.22.3(react@17.0.2): + resolution: {integrity: sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.8.0 + '@remix-run/router': 1.15.3 react: 17.0.2 dev: false @@ -7326,7 +7339,7 @@ packages: vfile-message: 4.0.2 dev: false - /vite-plugin-checker@0.6.2(eslint@8.56.0)(typescript@4.6.2)(vite@5.0.0): + /vite-plugin-checker@0.6.2(eslint@8.57.0)(typescript@4.6.2)(vite@5.0.0): resolution: {integrity: sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==} engines: {node: '>=14.16'} peerDependencies: @@ -7362,7 +7375,7 @@ packages: chalk: 4.1.2 chokidar: 3.5.3 commander: 8.3.0 - eslint: 8.56.0 + eslint: 8.57.0 fast-glob: 3.3.1 fs-extra: 11.1.1 lodash.debounce: 4.0.8 From 5b4567ad733daaccf2e1b48dd1ec9cf3c494139a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:34:34 +0200 Subject: [PATCH 052/135] chore(deps-dev): bump vite from 5.0.0 to 5.0.12 (#956) * chore(deps-dev): bump vite from 5.0.0 to 5.0.12 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.0 to 5.0.12. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.0.12/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.0.12/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] * fixed pnpm-lock --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Co-authored-by: Mads Nylund --- package.json | 2 +- pnpm-lock.yaml | 309 +++++++++++++++++++++++++++++-------------------- 2 files changed, 182 insertions(+), 129 deletions(-) diff --git a/package.json b/package.json index 10431d23..95e5844c 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "prettier": "^2.6.0", "tailwindcss": "^3.4.1", "typescript": "^4.6.2", - "vite": "^5.0.0", + "vite": "^5.0.12", "vite-plugin-checker": "^0.6.2", "vite-plugin-compression": "^0.5.1", "vite-plugin-svgr": "^4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1c689e8..d674f3b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,7 +207,7 @@ devDependencies: version: 5.38.1(eslint@8.57.0)(typescript@4.6.2) '@vitejs/plugin-react': specifier: ^4.2.0 - version: 4.2.0(vite@5.0.0) + version: 4.2.0(vite@5.2.7) autoprefixer: specifier: ^10.4.18 version: 10.4.18(postcss@8.4.35) @@ -245,20 +245,20 @@ devDependencies: specifier: ^4.6.2 version: 4.6.2 vite: - specifier: ^5.0.0 - version: 5.0.0(@types/node@20.6.3) + specifier: ^5.0.12 + version: 5.2.7(@types/node@20.6.3) vite-plugin-checker: specifier: ^0.6.2 - version: 0.6.2(eslint@8.57.0)(typescript@4.6.2)(vite@5.0.0) + version: 0.6.2(eslint@8.57.0)(typescript@4.6.2)(vite@5.2.7) vite-plugin-compression: specifier: ^0.5.1 - version: 0.5.1(vite@5.0.0) + version: 0.5.1(vite@5.2.7) vite-plugin-svgr: specifier: ^4.2.0 - version: 4.2.0(typescript@4.6.2)(vite@5.0.0) + version: 4.2.0(typescript@4.6.2)(vite@5.2.7) vite-tsconfig-paths: specifier: ^4.2.1 - version: 4.2.1(typescript@4.6.2)(vite@5.0.0) + version: 4.2.1(typescript@4.6.2)(vite@5.2.7) packages: @@ -801,8 +801,17 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false - /@esbuild/android-arm64@0.19.6: - resolution: {integrity: sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -810,8 +819,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.6: - resolution: {integrity: sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -819,8 +828,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.6: - resolution: {integrity: sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -828,8 +837,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.6: - resolution: {integrity: sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -837,8 +846,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.6: - resolution: {integrity: sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -846,8 +855,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.6: - resolution: {integrity: sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -855,8 +864,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.6: - resolution: {integrity: sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -864,8 +873,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.6: - resolution: {integrity: sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -873,8 +882,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.6: - resolution: {integrity: sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -882,8 +891,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.6: - resolution: {integrity: sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -891,8 +900,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.6: - resolution: {integrity: sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -900,8 +909,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.6: - resolution: {integrity: sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -909,8 +918,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.6: - resolution: {integrity: sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -918,8 +927,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.6: - resolution: {integrity: sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -927,8 +936,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.6: - resolution: {integrity: sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -936,8 +945,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.6: - resolution: {integrity: sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -945,8 +954,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.6: - resolution: {integrity: sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -954,8 +963,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.6: - resolution: {integrity: sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -963,8 +972,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.6: - resolution: {integrity: sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -972,8 +981,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.6: - resolution: {integrity: sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -981,8 +990,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.6: - resolution: {integrity: sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -990,8 +999,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.6: - resolution: {integrity: sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2937,96 +2946,120 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.5.0: - resolution: {integrity: sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==} + /@rollup/rollup-android-arm-eabi@4.13.2: + resolution: {integrity: sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.5.0: - resolution: {integrity: sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==} + /@rollup/rollup-android-arm64@4.13.2: + resolution: {integrity: sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.5.0: - resolution: {integrity: sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==} + /@rollup/rollup-darwin-arm64@4.13.2: + resolution: {integrity: sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.5.0: - resolution: {integrity: sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==} + /@rollup/rollup-darwin-x64@4.13.2: + resolution: {integrity: sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.5.0: - resolution: {integrity: sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==} + /@rollup/rollup-linux-arm-gnueabihf@4.13.2: + resolution: {integrity: sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.5.0: - resolution: {integrity: sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==} + /@rollup/rollup-linux-arm64-gnu@4.13.2: + resolution: {integrity: sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.5.0: - resolution: {integrity: sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==} + /@rollup/rollup-linux-arm64-musl@4.13.2: + resolution: {integrity: sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.5.0: - resolution: {integrity: sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==} + /@rollup/rollup-linux-powerpc64le-gnu@4.13.2: + resolution: {integrity: sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==} + cpu: [ppc64le] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.13.2: + resolution: {integrity: sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.13.2: + resolution: {integrity: sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.13.2: + resolution: {integrity: sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.5.0: - resolution: {integrity: sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==} + /@rollup/rollup-linux-x64-musl@4.13.2: + resolution: {integrity: sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.5.0: - resolution: {integrity: sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==} + /@rollup/rollup-win32-arm64-msvc@4.13.2: + resolution: {integrity: sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.5.0: - resolution: {integrity: sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==} + /@rollup/rollup-win32-ia32-msvc@4.13.2: + resolution: {integrity: sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.5.0: - resolution: {integrity: sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==} + /@rollup/rollup-win32-x64-msvc@4.13.2: + resolution: {integrity: sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==} cpu: [x64] os: [win32] requiresBuild: true @@ -3502,7 +3535,7 @@ packages: server-only: 0.0.1 dev: false - /@vitejs/plugin-react@4.2.0(vite@5.0.0): + /@vitejs/plugin-react@4.2.0(vite@5.2.7): resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3513,7 +3546,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.3) '@types/babel__core': 7.20.4 react-refresh: 0.14.0 - vite: 5.0.0(@types/node@20.6.3) + vite: 5.2.7(@types/node@20.6.3) transitivePeerDependencies: - supports-color dev: true @@ -4236,34 +4269,35 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.19.6: - resolution: {integrity: sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.19.6 - '@esbuild/android-arm64': 0.19.6 - '@esbuild/android-x64': 0.19.6 - '@esbuild/darwin-arm64': 0.19.6 - '@esbuild/darwin-x64': 0.19.6 - '@esbuild/freebsd-arm64': 0.19.6 - '@esbuild/freebsd-x64': 0.19.6 - '@esbuild/linux-arm': 0.19.6 - '@esbuild/linux-arm64': 0.19.6 - '@esbuild/linux-ia32': 0.19.6 - '@esbuild/linux-loong64': 0.19.6 - '@esbuild/linux-mips64el': 0.19.6 - '@esbuild/linux-ppc64': 0.19.6 - '@esbuild/linux-riscv64': 0.19.6 - '@esbuild/linux-s390x': 0.19.6 - '@esbuild/linux-x64': 0.19.6 - '@esbuild/netbsd-x64': 0.19.6 - '@esbuild/openbsd-x64': 0.19.6 - '@esbuild/sunos-x64': 0.19.6 - '@esbuild/win32-arm64': 0.19.6 - '@esbuild/win32-ia32': 0.19.6 - '@esbuild/win32-x64': 0.19.6 + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 dev: true /escalade@3.1.1: @@ -6069,6 +6103,15 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6603,23 +6646,28 @@ packages: dependencies: glob: 7.2.3 - /rollup@4.5.0: - resolution: {integrity: sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==} + /rollup@4.13.2: + resolution: {integrity: sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.5.0 - '@rollup/rollup-android-arm64': 4.5.0 - '@rollup/rollup-darwin-arm64': 4.5.0 - '@rollup/rollup-darwin-x64': 4.5.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.5.0 - '@rollup/rollup-linux-arm64-gnu': 4.5.0 - '@rollup/rollup-linux-arm64-musl': 4.5.0 - '@rollup/rollup-linux-x64-gnu': 4.5.0 - '@rollup/rollup-linux-x64-musl': 4.5.0 - '@rollup/rollup-win32-arm64-msvc': 4.5.0 - '@rollup/rollup-win32-ia32-msvc': 4.5.0 - '@rollup/rollup-win32-x64-msvc': 4.5.0 + '@rollup/rollup-android-arm-eabi': 4.13.2 + '@rollup/rollup-android-arm64': 4.13.2 + '@rollup/rollup-darwin-arm64': 4.13.2 + '@rollup/rollup-darwin-x64': 4.13.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.13.2 + '@rollup/rollup-linux-arm64-gnu': 4.13.2 + '@rollup/rollup-linux-arm64-musl': 4.13.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.13.2 + '@rollup/rollup-linux-riscv64-gnu': 4.13.2 + '@rollup/rollup-linux-s390x-gnu': 4.13.2 + '@rollup/rollup-linux-x64-gnu': 4.13.2 + '@rollup/rollup-linux-x64-musl': 4.13.2 + '@rollup/rollup-win32-arm64-msvc': 4.13.2 + '@rollup/rollup-win32-ia32-msvc': 4.13.2 + '@rollup/rollup-win32-x64-msvc': 4.13.2 fsevents: 2.3.3 dev: true @@ -6735,6 +6783,11 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} @@ -7339,7 +7392,7 @@ packages: vfile-message: 4.0.2 dev: false - /vite-plugin-checker@0.6.2(eslint@8.57.0)(typescript@4.6.2)(vite@5.0.0): + /vite-plugin-checker@0.6.2(eslint@8.57.0)(typescript@4.6.2)(vite@5.2.7): resolution: {integrity: sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==} engines: {node: '>=14.16'} peerDependencies: @@ -7385,14 +7438,14 @@ packages: strip-ansi: 6.0.1 tiny-invariant: 1.3.1 typescript: 4.6.2 - vite: 5.0.0(@types/node@20.6.3) + vite: 5.2.7(@types/node@20.6.3) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 dev: true - /vite-plugin-compression@0.5.1(vite@5.0.0): + /vite-plugin-compression@0.5.1(vite@5.2.7): resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} peerDependencies: vite: '>=2.0.0' @@ -7400,12 +7453,12 @@ packages: chalk: 4.1.2 debug: 4.3.4 fs-extra: 10.1.0 - vite: 5.0.0(@types/node@20.6.3) + vite: 5.2.7(@types/node@20.6.3) transitivePeerDependencies: - supports-color dev: true - /vite-plugin-svgr@4.2.0(typescript@4.6.2)(vite@5.0.0): + /vite-plugin-svgr@4.2.0(typescript@4.6.2)(vite@5.2.7): resolution: {integrity: sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==} peerDependencies: vite: ^2.6.0 || 3 || 4 || 5 @@ -7413,14 +7466,14 @@ packages: '@rollup/pluginutils': 5.0.5 '@svgr/core': 8.1.0(typescript@4.6.2) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) - vite: 5.0.0(@types/node@20.6.3) + vite: 5.2.7(@types/node@20.6.3) transitivePeerDependencies: - rollup - supports-color - typescript dev: true - /vite-tsconfig-paths@4.2.1(typescript@4.6.2)(vite@5.0.0): + /vite-tsconfig-paths@4.2.1(typescript@4.6.2)(vite@5.2.7): resolution: {integrity: sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==} peerDependencies: vite: '*' @@ -7431,14 +7484,14 @@ packages: debug: 4.3.4 globrex: 0.1.2 tsconfck: 2.1.2(typescript@4.6.2) - vite: 5.0.0(@types/node@20.6.3) + vite: 5.2.7(@types/node@20.6.3) transitivePeerDependencies: - supports-color - typescript dev: true - /vite@5.0.0(@types/node@20.6.3): - resolution: {integrity: sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==} + /vite@5.2.7(@types/node@20.6.3): + resolution: {integrity: sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7466,9 +7519,9 @@ packages: optional: true dependencies: '@types/node': 20.6.3 - esbuild: 0.19.6 - postcss: 8.4.35 - rollup: 4.5.0 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.13.2 optionalDependencies: fsevents: 2.3.3 dev: true From 60b1c79cf1145bed3e1eb8d7ffc4f057d1b6e2ea Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:46:24 +0200 Subject: [PATCH 053/135] Update CHANGELOG.md (#990) --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cf65571..3fc713ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,12 +11,15 @@ ### 🎨 - Designendringer ## Neste versjon + +## Versjon 2023.02.04 - 🎨 **Tema**. Endret til shadcn komponenter for å endre tema. - 🦟 **Markdown**. Fikset markdown bug. - 🎨 **Bildeopplastning**. Endret komponent for å laste opp bilder. - 🎨 **Admin filopplastning**. Fjernet mulighet for admin å laste opp bilder. - 🎨 **Arrangement view**. Endret design til shadcn på arrangement view. - 🎨 **Profilside**. Endret design for profilside til bruker. +- 🎨 **Nyhet view**. Endret design til shadcn på nyhet view. ## Versjon 2023.07.02 - 🎨 **Vipps betaling**. Brukere kan nå ikke sette nedbetalingstid selv. 2 timer er konstant tid. From 9cec19b3f0cd05f30aa1a06f60d530fbd9538134 Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Wed, 3 Apr 2024 00:20:36 +0200 Subject: [PATCH 054/135] fixed ts error --- src/components/inputs/BoolArray.tsx | 8 +++++++ src/components/inputs/Upload.tsx | 21 +++++++++++++++++++ .../components/EventEditor.tsx | 3 +++ .../Toddel/components/CreateToddelDialog.tsx | 3 +++ 4 files changed, 35 insertions(+) diff --git a/src/components/inputs/BoolArray.tsx b/src/components/inputs/BoolArray.tsx index 5250629b..d2d412ac 100644 --- a/src/components/inputs/BoolArray.tsx +++ b/src/components/inputs/BoolArray.tsx @@ -4,6 +4,9 @@ import { Controller, FieldError, Path, PathValue, RegisterOptions, UnpackNestedV import { Switch } from 'components/inputs/Bool'; export type BoolArrayProps = Pick & + // TODO: Fix type + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Pick, 'formState' | 'control' | 'getValues'> & { name: Path; helperText?: string; @@ -71,7 +74,12 @@ const BoolArray = ({ >>} name={name} render={({ field }) => ( diff --git a/src/components/inputs/Upload.tsx b/src/components/inputs/Upload.tsx index c454370c..d44d24dc 100644 --- a/src/components/inputs/Upload.tsx +++ b/src/components/inputs/Upload.tsx @@ -132,6 +132,9 @@ export const GenericImageUpload = ({ const newFile = blobToFile(compressedImage, file instanceof File ? file.name : imageFile?.name || '', imageFile?.type || file.type || ''); const data = await API.uploadFile(newFile); event('upload', 'file-upload', 'Uploaded file'); + // TODO: Fix type error + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore setValue(name, data.url as UnpackNestedValue>>); } catch (e) { showSnackbar(e.detail, 'error'); @@ -167,6 +170,9 @@ export const GenericImageUpload = ({ ); }; diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index e5fa9051..3412b6d5 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -22,7 +22,7 @@ const buttonVariants = cva( size: { default: "h-10 px-4 py-2", sm: "h-9 rounded-md px-3", - lg: "h-11 rounded-md px-8", + lg: "h-10 md:h-11 rounded-md px-5 md:px-8", icon: "h-10 w-10", }, }, diff --git a/src/pages/EventDetails/components/EventRenderer.tsx b/src/pages/EventDetails/components/EventRenderer.tsx index bae5ffbb..d27c1d45 100644 --- a/src/pages/EventDetails/components/EventRenderer.tsx +++ b/src/pages/EventDetails/components/EventRenderer.tsx @@ -3,7 +3,7 @@ import FavoriteFilledIcon from '@mui/icons-material/FavoriteRounded'; import { IconButton, IconButtonProps, Button as MuiButton, Skeleton, Stack, styled, Theme, Tooltip, useMediaQuery } from '@mui/material'; import { addHours, formatDistanceToNowStrict, isFuture, isPast, parseISO, subHours } from 'date-fns'; import nbLocale from 'date-fns/locale/nb'; -import { CalendarIcon, HandCoinsIcon } from 'lucide-react'; +import { CalendarIcon, HandCoinsIcon, PencilIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import URLS from 'URLS'; @@ -438,7 +438,6 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => {
{!lgDown && } - {Boolean(user) && } - {!preview && data.permissions.write && ( - - )} {registration && (
@@ -461,11 +455,20 @@ const EventRenderer = ({ data, preview = false }: EventRendererProps) => {
{data.image_alt - {data.emojis_allowed && user && ( -
- +
+
+ + {!preview && data.permissions.write && ( + + )}
- )} + {!preview && data.emojis_allowed && user && } +
{lgDown && } {registration && data.paid_information && !registration.has_paid_order && !registration.is_on_wait && ( diff --git a/src/pages/NewsDetails/components/NewsRenderer.tsx b/src/pages/NewsDetails/components/NewsRenderer.tsx index c6b7b16e..4557f0f0 100644 --- a/src/pages/NewsDetails/components/NewsRenderer.tsx +++ b/src/pages/NewsDetails/components/NewsRenderer.tsx @@ -61,13 +61,15 @@ const NewsRenderer = ({ data, preview = false }: NewsRendererProps) => { {!preview && ( )}
- {data?.emojis_allowed && user && } + {!preview && data?.emojis_allowed && user && }
From bc9c05a71ee41d8b2679fc23b0ce48191a803088 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Thu, 4 Apr 2024 09:56:40 +0200 Subject: [PATCH 057/135] diasbled theme selector (#998) --- src/components/navigation/ProfileTopbarButton.tsx | 4 ++-- src/hooks/Theme.tsx | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/navigation/ProfileTopbarButton.tsx b/src/components/navigation/ProfileTopbarButton.tsx index 81fca0b3..3380eb24 100644 --- a/src/components/navigation/ProfileTopbarButton.tsx +++ b/src/components/navigation/ProfileTopbarButton.tsx @@ -7,7 +7,7 @@ import { useSetRedirectUrl } from 'hooks/Misc'; import { useUser } from 'hooks/User'; import { useAnalytics } from 'hooks/Utils'; -import ThemeSettings from 'components/miscellaneous/ThemeSettings'; +// import ThemeSettings from 'components/miscellaneous/ThemeSettings'; import { NavigationOptions } from 'components/navigation/Navigation'; import TopbarNotifications from 'components/navigation/TopbarNotifications'; import { Avatar, AvatarFallback, AvatarImage } from 'components/ui/avatar'; @@ -30,7 +30,7 @@ const ProfileTopbarButton = (props: ProfileTopbarButtonProps) => { return (
{Boolean(user) && } - + {/* TODO: Add when navbar is fixed */} {user ? ( location.reload() : () => analytics('profile')} to={URLS.profile}> diff --git a/src/hooks/Theme.tsx b/src/hooks/Theme.tsx index 61002809..382504c5 100644 --- a/src/hooks/Theme.tsx +++ b/src/hooks/Theme.tsx @@ -18,6 +18,14 @@ const ThemeProvider = ({ children }: { children: ReactNode }) => { const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); const [selectedTheme, setSelectedTheme] = useState('automatic'); + // TODO: Remove this when lightmode is fixed + useEffect(() => { + const root = window.document.documentElement; + root.classList.remove('light', 'dark'); + root.classList.add('dark'); + setCookie(SELECTED_THEME, 'dark'); + }, []); + const getThemeType = useCallback((name: ThemeTypes | string | undefined) => { if (themes.includes(name as ThemeTypes)) { return name as ThemeTypes; From 2e06dfcab7d5980bbccd402b7f3745012a56434e Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Wed, 10 Apr 2024 11:06:39 +0200 Subject: [PATCH 058/135] NITO logo footer (#1002) added nito logo and made news title bigger on mobile --- CHANGELOG.md | 5 +---- src/assets/img/nito.png | Bin 0 -> 5947 bytes src/components/navigation/Footer.tsx | 4 ++++ .../NewsDetails/components/NewsRenderer.tsx | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 src/assets/img/nito.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d0ff1ed..dd2b69fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,10 +11,7 @@ ### 🎨 - Designendringer ## Neste versjon -- 🎨 **Tema**. Endret til shadcn komponenter for å endre tema. -- 🦟 **Markdown**. Fikset markdown bug. -- 🎨 **Bildeopplastning**. Endret komponent for å laste opp bilder. -- 🎨 **Admin filopplastning**. Fjernet mulighet for admin å laste opp bilder. +- 🎨 **Footer**. La til NITO logo i footer under "samarbeid" ## Versjon 2023.02.04 - 🎨 **Tema**. Endret til shadcn komponenter for å endre tema. diff --git a/src/assets/img/nito.png b/src/assets/img/nito.png new file mode 100644 index 0000000000000000000000000000000000000000..777364a5ee603036a3420e001f2a0b713f65d618 GIT binary patch literal 5947 zcmXw7bzGD0*WTv90U`rw5k`kJh%^I6h|>KfMY^OzYBbV_ba#WKfOLa^gh)w9$UsRE z0g3k+zQ2F=*=IZFKG!+dxvz7c=e3%O0wF#%J_rONe4>cb0D-{q!1p*9F7WwTF-8ak zqJTU>No#q5ce4oIlFpky-N1Xu_9XCkWg$x_`u!9ob14B=C&z*t%G zKa8~EkKS@~pyQRe1ual_eI`UC8;h%AmdwV@PlR+cVe6O(?Q;8shK8yq%-)$c^6V5t zr`?$rxUBT4*fH5cy6Z0abngFM%0Abf@jKiZSkoWA;MhRtgE&m~mg(PXXz@{`-*Mt+j(x?*Pwwy>r}{yrg= zzVD&|i(=7N=-rdW!DcD^;nZseHA!@;tI7{-ASSi4Y z-&;fZV`y_ApCsSR#qjrf%EX@3I&_~|(A7kY*qg?v&7 zq(Nz!)om_fmz}%58hpZ;z7M#CGmt%=iN|fNEf~0+nQ|e$>aNJwR_7&q@~1_s=D$wg zjK!xN`-Xgr;>xev8++!>h66={pyw>Sc3c8a705r4KKnX~a>F-rQntJvd$lrdv4>IQ z*pcr(jbUbtT&}QL>m)V2VA_a7@msBZeG~0UH1CRnb*L>9&b=Vi0ZtNEKvx%Q$Mg$e zg3im~W)ExzbR)p8!+*S=WJ-R@w!Ac>9I84z+ddzumxfkD;^0PckLj4QQ9zMhAE37B z1ID^bTE`q)W)kYnUkjLAFgA9Mf&(jMw%mrq7rmv@Y2R}-kQ`CDb*4yrk)k+=F0OPc0#e%Ow%3Y2jQQB*yuT!u&0p)3{0m z2!fbU&OPeqD-gw5WZ+45L;h}59{lgDjlS>c=T+k*_N}+F-!oU#rq#TZiy<;1fWtDQ z+O*a&bFYJHV8j|?+ z`qIhfz_sg#HT;S~jwA~PJg0@1e>~e=)TQgZeTrvgkVARHkCa2FeMG}PVNvnI!Sf#@ zaamsG4y@7ND(XLTg+2T9zJvvd`xu^atTEvg;SL{C-r2 zTzjSeQ^b)35u-cE;(J+aaeCNfuO_?9eQ+M_y#QAim&5m(co1)ZqBc2n@p4O2HI*IP zPQ%K&Pt@0z$tkC_ijahQi{URlg(lz~Mg%DZVQ&D^qgU)PiUtgZg94|a823L*hVNK0 z89K8(;j^E-9*$&~t2UXhO;kbf#ZsFk(m?U#03BjbOyi7$+hAKHgU7^Y?bxy$9yQe_ zibU_Mq71ZJ3TMZ0^>s4_GKdH-01|G3mpXE0KB+roG>G<|9rCi=u!jl7sg`O6`9pf< ztd3m#To7;}pqOwBi`tTSb&&Iwpx4SIBSqfE}MW`@nP*d8;@rNqc4A4We$n}VE&NAJLJjq z`KuE9545ZAJfJcPf0Y$-uV^tntbLOy$XiS$>)}rc?qqX?9& zVg@h_jb6ta@*ql2SW_Roy*3Wwrpu(O_(_$13mU={5_KNfn)v$;ehz>$^9h3I@s{+_ zg^bm!eVm&9HzVJtqQ>QSU|@Qy&Iuc`F^M07Cs>G#PUk&L9a|kkhGgm;?5&c1_|B2& zi94)6yX`sg_sh%WcoD0nkTA0L;ID(G(qlj37m7Mn6PL4jmfWJz@ihfvx3@;D#2V_a0#Rb9N!bL{A*^TE>_6(0zldtNgG zt#bBYFKTek!mrJtog`w$WF-%)^y9Nm?*805c2=P&`1`|X;gm5%x}buGH9)Xsd#ipZ zW$*zrLNMUhSxZX?hl}A=@Au~r_rQbuq*u@f#9EKZ9w0j37-zE1=vg-$L@pc+F_wLw zr8gNhpSGzC7qR!uEkL6Q95R{4-c?PF)oS z(>tAgZP=RzAq;{39)f~xlZwLQKJu$;QCq;M8+`*D5Wa)0^PI`@BKl*kzAis<^kP$= z$zO?8gpsgi_MPyv;z!(ZFxH-)JH+dYU;^k#zgKEY`B=UqTW7m?)l9lnoJ4C|Hor+W zaY1rq%bpr9drAlyB`}B|F`QN_uD+^x8@MKX;OSOWk>@d{wqbnbJXMMAP2+=O1<6<{ zdr^s&(8RHfvSX(66ye`^DE?FGG5Fc$vu-3-42eQsNu@XdN+VC-18E75XhwB3ZG76_mPBVMMB`4TGV_T&nl%le2_wYXtSIaS` zoL2ikQT2J_EXB zVM2FYThYAIs`RPWe3LoUQ-NrIDCXtd$@bHb)fMB-6+b;G>N0Oqe3Z`ghg1rUk6A9& zkU;`isK0ZG_Qld$Vgw^_KQtf>Cr!IGd2*bs3N{n-yxeni_3HKk7Om1qYx3K~eW<8Q zZGrJX5Dbm{j@K-MgncZH?QZe3q$N@U$OdSOQ0U@s8O))#YfBBfjZvs8x2*sVn3%n-g9>?a_{3Iw3X{0d!0kRCm5f#`rS8rrwen*-o+ z=tU@MK*aNj>m|EWiIa0Ko>v##$qGszOhQpXtupb6k%Rg-A46C-_JhW6mcf!g3Z!+OnY$brh6}omIGBNZ&uSOgwh?I%$x%>-y z%(Chae*RNt*&F{J*GaXv?``bp5XAG6MwTihml`(IZuAK1(~JEJN(9M98>oMi66Sc)C@><@DMBAM-Xu)*oAD>;Mu6#*$<8a5RF07MlwaApq5a4NZe(FX=u{+6-OvSH%C0rmwSH^M0^|Q6Mo1E&^rH7MA#QD zMV051N1JH3w^%oE{C!7&Wx)}Vi$XF9_pU|RP-x;LEXddf+YN4&*Aacd^0w**8G)L6 z%bhCQ#(61`A;tpR{NQUA*^-Hx@C-a-b0mGd{!9@@a zDT@^_%V{q@eXL-s=)R6MUGWXxTIgH+h{EKTciyb?-{oLr>&s^*?9b7*qzk+GI}iGn zKyjk;7v&>ssoYpPI)*!TWukxI-N6DLXUa81GBqWi3?()!mf_R8|7fpjZ7I}Bx`_$` zvyx26Ais=R@{OO8go0d~$$ZrE{8DkTjXX#U{KeF`fb^2sP1hnWoIHH2^Ejqm{|Z~-=_atKv*Yjf3S#>~I1H@= znNp4sm?xhqi$+lV?nX?0^EFjt3jU+I_De7F&|A)Fv!E*vIIobR)P!ids^$gmBCm)aII z|5(R^Hju*cxUUaZ2d!KCCCU-_EPI5GY!a&fOK1tt`XQowUQ89wk}cCLBn~qg$Njk- z@{JA)yObff3ayB6zd8^dIQ>|@I`N8`fZ{QQpUVHdv+%6B5YYn95BIu5-MDn?2!(Ju zbzfUh-V|gE55t9k)-2PV@o2@(|6%EvmOiX zWY@pwIVyWtu(@IsyVM~vnwf4BNA(z;igg}5Nk9+0V$lUq)EAZRF9*~+DZk6NZ1KTZ zIY3)NX;={rI^l8>bsHn0bJ!~jf|8OrWug^z8Z3t_7aZbqYX1pJDgCM3gO$Q7{aPVA}L9&~eHlkiGGuj80+e*P2Z+P(kFk&MCR|7{N; z47Iy9MAy+@R09kMW&UA!N#YcWuFM!S%dF*isY9QCL(3zmAw7b`$RRfgmpl^p5#{rL zAQZYDK^Q7jcx6?b&Ae-W(h=oyTcwDHtoUwL$-ZHLD=a$p&1GlBf6l_O)3VZZQ0XHESSu zSocIZpeB}d@_G>L{n{sXDnbw0a`N`5s=crDY}YM{poC`1Az|lF8@<;>zTe4Ewwy6M zAS%FBznzcNiODo*2Ic|ul5?abzW%ovFsCL`L6=#y?-wPw=L#Mvzo@BSbZq+RerMb- zGx@wj&|q_r{ZFbL4hr{KFhPJqc^j9?fiQ4CbHQMecvaHo1lje0Y-2#>WpJ7VZ0pKf z4m>!VjO7WGE8i7Vlf#F*NCspU=C2|$DFX@tz`333+IHvB!^5v7>FjBx`pO#BX7t2^ zSrUz^`U1LRn~jk>AA7H5f0%JST31$uDL(F^`62x(i8-M3CNSecvP%jygHKrM z`~&vw0s9~3*jw5$a@Rx6zs0j?saan;gue*$`e>E$s6R{wSk%gGIIArThnStPSHl{G z9tdhfX~LCfyNb5IHW(LhcdQVL{Cq%ovF#!4b{fXtdrr@Hj_W=<(_K}-s(S9>C68n} zY&(&TbBh)Bzb{dpj8VIF0L=bXLGUzhPCcqp=N|2PY1F>Zm!j8?H*jC4OOD60x)ClN zV~!=Vmc2veq;Fg8i_3Y6{;}1*=Y$JIqPhO;`(hzvr8q z@YJb@2*Pw+k=?d4vq#~(d=C!M(4}2g5}OaFz7MoK3p7aJZf34Xxtq=H$&g47M;c6I zw%1yvZZ;{Ls;%FPc~{VuMa+PCE*R~Jw?UOam&b)#IWI~0>sgg~epQla@=6D}bL*SY zXR5uDa~(4ATfoJLueZ*~^h;ro`qqy59h;hcH>ZpsWcK8Esva^$*uC{3?u5e)dOi6mmf~vI}G)0L%&5v{eOUvpfD1MW?EoL!HimsdW zFJ46H^Vj-$kxj`R_CCf)9g`2&Ozn$_HFfW9s7Fv1Zu*)H(7Yn)2FX79%~1Mr?_!gz zYV2?nFlI_^OJV3Nq}#STM0^9bI5aiHefB*KpKk}d`Q`OzuT`T8CfcON&4ipk3LuD# z+eX%1!ZDMtbZnVGTdT<;o3zu5+2snAV{X$naGcgH936}VGK8Zu=}9?WI^;XHyTtn0 z1EQ2ptf$lDNmnK13_J`Z?95l+ANQx>AX-U`pn@q9DJ9zsmBj1C$({o0oQoH@5ShF* z%HN^1SNfl<(LEAB+qmH_rlDr>m?5WTB*y0zJYRHj)j?JY;rOS?B#% z8tgOMi-c`AgG=5Pxh(eDe)@@#XU+~;Qf(~bXN7lVk>}mo_hB_9I9k+yp9E=Qxq`>X zbh%#*85Po+(5Fl^FMlvD&2Zc*!-S~m|A<{K(YU+|rb5#^<`QY!wTs$-=u{o%bM(_>)vOgM1WVZmYuErD@(MwFd??EVDG%Q zs*ID|_3_5m!^TNj)GbzV4};pDzEu0ZD?yW{Mq%wId0*adp6#=P#Z=a)#yPQn;@XI( zfqlenUpb4-A3(CzDggLM_A?yiRrmcEr@YEPvzVISrq-!k*H3lWmxr80A6K2^KOvxZOd zo_?y+Zz{JIH`%PnUlH5|`GiU_47y*cT~*j}wk1>9v$(%uFX-HUNV%@knc$y;dhxLF zQqU!*QOARg5~MJoGQCKJZGOb6G9+n{n|4G@jKw8b*)%AwfMCt~)jDs4B+*n1Y>5p< w@;Z)6Aa-KRIK+3UAN6x{A+pI+>+Jj*P0!+z9_zRVyc7pLkyAlc%a{iJ9~shUQvd(} literal 0 HcmV?d00001 diff --git a/src/components/navigation/Footer.tsx b/src/components/navigation/Footer.tsx index 234d064b..fd9c0755 100644 --- a/src/components/navigation/Footer.tsx +++ b/src/components/navigation/Footer.tsx @@ -13,6 +13,7 @@ import SNAPCHAT from 'assets/icons/snapchat.svg'; import TWITTER from 'assets/icons/twitter.svg'; import VERCEL from 'assets/icons/vercel.svg'; import MAINSPONSOR from 'assets/img/mainSponsor.png'; +import NITO from 'assets/img/nito.png'; const Footer = () => { const { event } = useAnalytics(); @@ -83,6 +84,9 @@ const Footer = () => { Vercel + + NITO +
diff --git a/src/pages/NewsDetails/components/NewsRenderer.tsx b/src/pages/NewsDetails/components/NewsRenderer.tsx index 4557f0f0..7da313d9 100644 --- a/src/pages/NewsDetails/components/NewsRenderer.tsx +++ b/src/pages/NewsDetails/components/NewsRenderer.tsx @@ -34,7 +34,7 @@ const NewsRenderer = ({ data, preview = false }: NewsRendererProps) => {
-

{data.title}

+

{data.title}

{data.header}

From 016ab60d875f8c97b281b9c8ca2df8ac43f6de8d Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Wed, 10 Apr 2024 11:08:04 +0200 Subject: [PATCH 059/135] added version name to changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd2b69fa..f4e9f129 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ ### 🎨 - Designendringer ## Neste versjon + +## Versjon 2023.10.04 - 🎨 **Footer**. La til NITO logo i footer under "samarbeid" ## Versjon 2023.02.04 From 6112c181344a939c469c38d0aaf0d92888393260 Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Wed, 10 Apr 2024 11:17:26 +0200 Subject: [PATCH 060/135] trigger build From fa61a9ed3fc37cb14548ff6af5609a3bd0e464f1 Mon Sep 17 00:00:00 2001 From: Mads Nylund <73914541+MadsNyl@users.noreply.github.com> Date: Thu, 11 Apr 2024 08:55:07 +0200 Subject: [PATCH 061/135] Menu for shortcuts (#1006) * init * added shortcut navigations for external sites * Changed icon and added logout button --- CHANGELOG.md | 1 + package.json | 3 +- pnpm-lock.yaml | 148 ++++++++++++++++++ src/URLS.tsx | 7 +- .../miscellaneous/shortCutMenu/Admin.tsx | 61 ++++++++ .../miscellaneous/shortCutMenu/HotKey.tsx | 42 +++++ .../miscellaneous/shortCutMenu/Item.tsx | 29 ++++ .../miscellaneous/shortCutMenu/Logout.tsx | 22 +++ .../miscellaneous/shortCutMenu/Membership.tsx | 27 ++++ .../miscellaneous/shortCutMenu/Navigation.tsx | 88 +++++++++++ .../shortCutMenu/SectionWrapper.tsx | 17 ++ .../miscellaneous/shortCutMenu/Tools.tsx | 26 +++ .../miscellaneous/shortCutMenu/index.tsx | 86 ++++++++++ .../miscellaneous/shortCutMenu/shortcuts.ts | 37 +++++ src/components/navigation/Navigation.tsx | 3 +- src/components/ui/dialog.tsx | 4 +- src/components/ui/scroll-area.tsx | 46 ++++++ src/index.tsx | 2 + src/utils.tsx | 7 + 19 files changed, 651 insertions(+), 5 deletions(-) create mode 100644 src/components/miscellaneous/shortCutMenu/Admin.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/HotKey.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/Item.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/Logout.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/Membership.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/Navigation.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/SectionWrapper.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/Tools.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/index.tsx create mode 100644 src/components/miscellaneous/shortCutMenu/shortcuts.ts create mode 100644 src/components/ui/scroll-area.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index f4e9f129..47dbd0bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### 🎨 - Designendringer ## Neste versjon +- ✨ **Shortcuts**. La til meny med shortcuts. ## Versjon 2023.10.04 - 🎨 **Footer**. La til NITO logo i footer under "samarbeid" diff --git a/package.json b/package.json index 95e5844c..5f10889e 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", @@ -85,8 +86,8 @@ "@typescript-eslint/eslint-plugin": "^5.22.0", "@typescript-eslint/parser": "^5.38.1", "@vitejs/plugin-react": "^4.2.0", - "eslint": "^8.56.0", "autoprefixer": "^10.4.18", + "eslint": "^8.56.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import-helpers": "^1.3.1", "eslint-plugin-prettier": "^4.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9495274..b1b113b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,9 @@ dependencies: '@radix-ui/react-label': specifier: ^2.0.2 version: 2.0.2(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-scroll-area': + specifier: ^1.0.5 + version: 1.0.5(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-select': specifier: ^2.0.0 version: 2.0.0(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2) @@ -1929,6 +1932,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-compose-refs@1.0.1(react@17.0.2): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-context-menu@2.1.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: @@ -1969,6 +1985,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-context@1.0.1(react@17.0.2): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-dialog@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: @@ -2017,6 +2046,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-direction@1.0.1(react@17.0.2): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: @@ -2351,6 +2393,26 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-presence@1.0.1(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-primitive@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -2372,6 +2434,25 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-primitive@1.0.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-slot': 1.0.2(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-progress@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: @@ -2482,6 +2563,33 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: false + /@radix-ui/react-scroll-area@1.0.5(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + '@radix-ui/react-context': 1.0.1(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(react@17.0.2) + '@radix-ui/react-presence': 1.0.1(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-primitive': 1.0.3(react-dom@17.0.2)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + /@radix-ui/react-select@2.0.0(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: @@ -2590,6 +2698,20 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-slot@1.0.2(react@17.0.2): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + '@radix-ui/react-compose-refs': 1.0.1(react@17.0.2) + react: 17.0.2 + dev: false + /@radix-ui/react-switch@1.0.3(@types/react-dom@17.0.11)(@types/react@17.0.37)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: @@ -2800,6 +2922,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-callback-ref@1.0.1(react@17.0.2): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -2844,6 +2979,19 @@ packages: react: 17.0.2 dev: false + /@radix-ui/react-use-layout-effect@1.0.1(react@17.0.2): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.0 + react: 17.0.2 + dev: false + /@radix-ui/react-use-previous@1.0.1(@types/react@17.0.37)(react@17.0.2): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: diff --git a/src/URLS.tsx b/src/URLS.tsx index c679fde0..6559e08a 100644 --- a/src/URLS.tsx +++ b/src/URLS.tsx @@ -60,7 +60,12 @@ const URLS = { jobpostsAdmin: '/admin/karriere/', newsAdmin: '/admin/nyheter/', bannerAdmin: '/admin/bannere/', - jubilee: 'jubileum.tihlde.org/', + jubilee: 'https://jubileum.tihlde.org/', + fondet: 'https://fondet.tihlde.org/', + kontRes: 'https://kontres.tihlde.org/', + github: 'https://github.com/TIHLDE', + pythons: 'https://pythons.tihlde.org/', + pythonsLadies: 'https://pythons-damer.tihlde.org/', }; export default URLS; diff --git a/src/components/miscellaneous/shortCutMenu/Admin.tsx b/src/components/miscellaneous/shortCutMenu/Admin.tsx new file mode 100644 index 00000000..112a4d32 --- /dev/null +++ b/src/components/miscellaneous/shortCutMenu/Admin.tsx @@ -0,0 +1,61 @@ +import URLS from 'URLS'; + +import { PermissionApp } from 'types/Enums'; + +import { HavePermission } from 'hooks/User'; + +import { ShortCutMenuProps } from '.'; +import ShortCutLink from './Item'; +import ShortCutSectionWrapper from './SectionWrapper'; + +const ShortCutAdmin = ({ setOpen }: Pick) => { + const links = [ + { + apps: [PermissionApp.EVENT], + title: 'Arrangementer', + path: URLS.eventAdmin, + }, + { + apps: [PermissionApp.GROUP], + title: 'Grupper', + path: URLS.groups.index, + }, + { + apps: [PermissionApp.JOBPOST], + title: 'Jobbannonser', + path: URLS.jobpostsAdmin, + }, + { + apps: [PermissionApp.USER], + title: 'Medlemmer', + path: URLS.userAdmin, + }, + { + apps: [PermissionApp.NEWS], + title: 'Nyheter', + path: URLS.newsAdmin, + }, + { + apps: [PermissionApp.STRIKE], + title: 'Prikker', + path: URLS.strikeAdmin, + }, + { + apps: [PermissionApp.BANNERS], + title: 'Bannere', + path: URLS.bannerAdmin, + }, + ]; + + return ( + + {links.map((link, index) => ( + + + + ))} + + ); +}; + +export default ShortCutAdmin; diff --git a/src/components/miscellaneous/shortCutMenu/HotKey.tsx b/src/components/miscellaneous/shortCutMenu/HotKey.tsx new file mode 100644 index 00000000..01022f54 --- /dev/null +++ b/src/components/miscellaneous/shortCutMenu/HotKey.tsx @@ -0,0 +1,42 @@ +import { ArrowBigUp, Command, Option } from 'lucide-react'; +import { ReactNode } from 'react'; + +type HotKeyProps = { + modifiers: Array<'shift' | 'alt' | 'ctrl' | undefined>; + letter: string; +}; + +const HotKey = ({ modifiers, letter }: HotKeyProps) => { + const getModifierKey = (modifier: 'shift' | 'alt' | 'ctrl' | undefined): ReactNode | undefined => { + switch (modifier) { + case 'shift': + return ; + case 'alt': + return