diff --git a/apps/web/pages/insights/index.tsx b/apps/web/pages/insights/index.tsx index 070d50d763..03e2d4d231 100644 --- a/apps/web/pages/insights/index.tsx +++ b/apps/web/pages/insights/index.tsx @@ -8,7 +8,6 @@ import { PopularEventsTable, } from "@calcom/features/insights/components"; import { FiltersProvider } from "@calcom/features/insights/context/FiltersProvider"; -import { useFilterContext } from "@calcom/features/insights/context/provider"; import { Filters } from "@calcom/features/insights/filters"; import Shell from "@calcom/features/shell/Shell"; import { UpgradeTip } from "@calcom/features/tips"; @@ -20,15 +19,11 @@ import { FiRefreshCcw, FiUserPlus, FiUsers } from "@calcom/ui/components/icon"; const Heading = () => { const { t } = useLocale(); - const { - filter: { selectedTeamName }, - } = useFilterContext(); + return ( -
-

- {t("analytics_for_organisation", { - organisationName: selectedTeamName, - })} +
+

+ {t("analytics_for_organisation")}

{t("subtitle_analytics")}

@@ -80,7 +75,7 @@ export default function InsightsPage() { <> ) : ( -
+
@@ -99,7 +94,7 @@ export default function InsightsPage() {
- {t("looking_for_more_analytics")} + {t("looking_for_more_insights")} diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 78f18c0c3d..148c0d076e 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -404,7 +404,7 @@ "add_time_availability": "Add new time slot", "add_an_extra_layer_of_security": "Add an extra layer of security to your account in case your password is stolen.", "2fa": "Two-Factor Authentication", - "2fa_disabled":"Two-Factor authentication can only be enabled for email and password authentication", + "2fa_disabled": "Two-Factor authentication can only be enabled for email and password authentication", "enable_2fa": "Enable two-factor authentication", "disable_2fa": "Disable two-factor authentication", "disable_2fa_recommendation": "If you need to disable 2FA, we recommend re-enabling it as soon as possible.", @@ -1673,7 +1673,7 @@ "default_conferencing_bulk_title": "Bulk update existing event types", "requires_at_least_one_schedule": "You are required to have at least one schedule", "default_conferencing_bulk_description": "Update the locations for the selected event types", - "looking_for_more_analytics": "Looking for more analytics?", + "looking_for_more_insights": "Looking for more Insights?", "add_filter": "Add filter", "select_user": "Select User", "select_event_type": "Select Event Type", @@ -1689,11 +1689,12 @@ "events_rescheduled": "Events Rescheduled", "from_last_period": "from last period", "from_to_date_period": "From: {{startDate}} To: {{endDate}}", - "redirect_url_warning": "Adding a redirect will disable the success page. Make sure to mention \"Booking Confirmed\" on your custom success page.", - "analytics_for_organisation": "Insights for {{organisationName}}", + "analytics_for_organisation": "Insights", "subtitle_analytics": "Learn more about your team's activity", + "redirect_url_warning": "Adding a redirect will disable the success page. Make sure to mention \"Booking Confirmed\" on your custom success page.", "event_trends": "Event Trends", "clear_filters": "Clear Filters", "insights": "Insights", + "insights_no_data_found_for_filter": "No data found for the selected filter or selected dates.", "email_invite_team": "{{email}} has been invited" } diff --git a/packages/features/insights/components/AverageEventDurationChart.tsx b/packages/features/insights/components/AverageEventDurationChart.tsx index e01f75caf9..f7caaf0f43 100644 --- a/packages/features/insights/components/AverageEventDurationChart.tsx +++ b/packages/features/insights/components/AverageEventDurationChart.tsx @@ -6,34 +6,45 @@ import { trpc } from "@calcom/trpc"; import { useFilterContext } from "../context/provider"; import { valueFormatter } from "../lib/valueFormatter"; import { CardInsights } from "./Card"; +import { LoadingInsight } from "./LoadingInsights"; export const AverageEventDurationChart = () => { const { t } = useLocale(); const { filter } = useFilterContext(); - const { dateRange, selectedUserId } = filter; + const { dateRange, selectedMemberUserId } = filter; const [startDate, endDate] = dateRange; - const { selectedTeamId: teamId } = filter; + const { selectedTeamId: teamId, selectedUserId } = filter; - const { data, isSuccess } = trpc.viewer.insights.averageEventDuration.useQuery({ + const { data, isSuccess, isLoading } = trpc.viewer.insights.averageEventDuration.useQuery({ startDate: startDate.toISOString(), endDate: endDate.toISOString(), - teamId, + teamId: teamId ?? undefined, + memberUserId: selectedMemberUserId ?? undefined, userId: selectedUserId ?? undefined, }); - if (!isSuccess || data?.length == 0 || !startDate || !endDate || !teamId) return null; + if (isLoading) return ; + if (!isSuccess || !startDate || !endDate || (!teamId && !selectedUserId)) return null; + const isNoData = (data && data.length === 0) || data.every((item) => item["Average"] === 0); return ( {t("average_event_duration")} - + {isNoData && ( +
+

{t("insights_no_data_found_for_filter")}

+
+ )} + {data && data.length > 0 && !isNoData && ( + + )}
); }; diff --git a/packages/features/insights/components/BookingKPICards.tsx b/packages/features/insights/components/BookingKPICards.tsx index 398dec102f..fc50b5f621 100644 --- a/packages/features/insights/components/BookingKPICards.tsx +++ b/packages/features/insights/components/BookingKPICards.tsx @@ -2,23 +2,26 @@ import { Grid } from "@tremor/react"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc"; +import { SkeletonContainer, SkeletonText } from "@calcom/ui"; import { useFilterContext } from "../context/provider"; +import { CardInsights } from "./Card"; import { KPICard } from "./KPICard"; export const BookingKPICards = () => { const { t } = useLocale(); const { filter } = useFilterContext(); - const { dateRange, selectedEventTypeId, selectedUserId } = filter; + const { dateRange, selectedEventTypeId, selectedUserId, selectedMemberUserId } = filter; const [startDate, endDate] = dateRange; const { selectedTeamId: teamId } = filter; - const { data, isSuccess } = trpc.viewer.insights.eventsByStatus.useQuery({ + const { data, isSuccess, isLoading } = trpc.viewer.insights.eventsByStatus.useQuery({ startDate: startDate.toISOString(), endDate: endDate.toISOString(), teamId, eventTypeId: selectedEventTypeId ?? undefined, + memberUserId: selectedMemberUserId ?? undefined, userId: selectedUserId ?? undefined, }); @@ -44,18 +47,41 @@ export const BookingKPICards = () => { }, ]; - if (!isSuccess || !startDate || !endDate || !teamId || data?.empty) return null; + if (isLoading) { + return ; + } + if (!isSuccess || !startDate || !endDate || (!teamId && !selectedUserId)) return null; + + return ( + <> + + {categories.map((item) => ( + + ))} + + + ); +}; + +const LoadingKPICards = (props: { categories: { title: string; index: string }[] }) => { + const { categories } = props; return ( {categories.map((item) => ( - + + + + + + + ))} ); diff --git a/packages/features/insights/components/BookingStatusLineChart.tsx b/packages/features/insights/components/BookingStatusLineChart.tsx index 1b4b9eccd2..009b943e3b 100644 --- a/packages/features/insights/components/BookingStatusLineChart.tsx +++ b/packages/features/insights/components/BookingStatusLineChart.tsx @@ -6,23 +6,37 @@ import { trpc } from "@calcom/trpc"; import { useFilterContext } from "../context/provider"; import { valueFormatter } from "../lib/valueFormatter"; import { CardInsights } from "./Card"; +import { LoadingInsight } from "./LoadingInsights"; export const BookingStatusLineChart = () => { const { t } = useLocale(); const { filter } = useFilterContext(); - const { selectedTeamId, selectedTimeView = "week", dateRange, selectedEventTypeId } = filter; + const { + selectedTeamId, + selectedUserId, + selectedTimeView = "week", + dateRange, + selectedEventTypeId, + } = filter; const [startDate, endDate] = dateRange; if (!startDate || !endDate) return null; - const { data: eventsTimeLine, isSuccess } = trpc.viewer.insights.eventsTimeline.useQuery({ + const { + data: eventsTimeLine, + isSuccess, + isLoading, + } = trpc.viewer.insights.eventsTimeline.useQuery({ timeView: selectedTimeView, startDate: startDate.toISOString(), endDate: endDate.toISOString(), - teamId: selectedTeamId || -1, + teamId: selectedTeamId ?? undefined, eventTypeId: selectedEventTypeId ?? undefined, + userId: selectedUserId ?? undefined, }); + if (isLoading) return ; + if (!isSuccess) return null; return ( diff --git a/packages/features/insights/components/Card.tsx b/packages/features/insights/components/Card.tsx index fb6911c25b..6410f1ad3d 100644 --- a/packages/features/insights/components/Card.tsx +++ b/packages/features/insights/components/Card.tsx @@ -1,5 +1,7 @@ import { Card } from "@tremor/react"; +import { classNames } from "@calcom/lib"; + interface ICardProps { children: React.ReactNode; className?: string; @@ -9,7 +11,7 @@ export const CardInsights = (props: ICardProps) => { const { children, className = "", ...rest } = props; return ( - + {children} ); diff --git a/packages/features/insights/components/LeastBookedTeamMembersTable.tsx b/packages/features/insights/components/LeastBookedTeamMembersTable.tsx index 5cf24b65c0..20a5b5e63f 100644 --- a/packages/features/insights/components/LeastBookedTeamMembersTable.tsx +++ b/packages/features/insights/components/LeastBookedTeamMembersTable.tsx @@ -5,6 +5,7 @@ import { trpc } from "@calcom/trpc"; import { useFilterContext } from "../context/provider"; import { CardInsights } from "./Card"; +import { LoadingInsight } from "./LoadingInsights"; import { TotalBookingUsersTable } from "./TotalBookingUsersTable"; export const LeastBookedTeamMembersTable = () => { @@ -13,13 +14,15 @@ export const LeastBookedTeamMembersTable = () => { const { dateRange, selectedEventTypeId, selectedTeamId: teamId } = filter; const [startDate, endDate] = dateRange; - const { data, isSuccess } = trpc.viewer.insights.membersWithLeastBookings.useQuery({ + const { data, isSuccess, isLoading } = trpc.viewer.insights.membersWithLeastBookings.useQuery({ startDate: startDate.toISOString(), endDate: endDate.toISOString(), teamId, eventTypeId: selectedEventTypeId ?? undefined, }); + if (isLoading) return ; + if (!isSuccess || !startDate || !endDate || !teamId) return null; return ( diff --git a/packages/features/insights/components/LoadingInsights.tsx b/packages/features/insights/components/LoadingInsights.tsx new file mode 100644 index 0000000000..b11d0f1dd5 --- /dev/null +++ b/packages/features/insights/components/LoadingInsights.tsx @@ -0,0 +1,26 @@ +import { classNames } from "@calcom/lib"; +import { SkeletonText } from "@calcom/ui"; + +import { CardInsights } from "./Card"; + +export const LoadingInsight = () => { + return ( + + +
+ + + + +
+
+ ); +}; diff --git a/packages/features/insights/components/MostBookedTeamMembersTable.tsx b/packages/features/insights/components/MostBookedTeamMembersTable.tsx index 978a1678c4..1dc4a8c1c7 100644 --- a/packages/features/insights/components/MostBookedTeamMembersTable.tsx +++ b/packages/features/insights/components/MostBookedTeamMembersTable.tsx @@ -5,6 +5,7 @@ import { trpc } from "@calcom/trpc"; import { useFilterContext } from "../context/provider"; import { CardInsights } from "./Card"; +import { LoadingInsight } from "./LoadingInsights"; import { TotalBookingUsersTable } from "./TotalBookingUsersTable"; export const MostBookedTeamMembersTable = () => { @@ -14,13 +15,15 @@ export const MostBookedTeamMembersTable = () => { const [startDate, endDate] = dateRange; const { selectedTeamId: teamId } = filter; - const { data, isSuccess } = trpc.viewer.insights.membersWithMostBookings.useQuery({ + const { data, isSuccess, isLoading } = trpc.viewer.insights.membersWithMostBookings.useQuery({ startDate: startDate.toISOString(), endDate: endDate.toISOString(), teamId, eventTypeId: selectedEventTypeId ?? undefined, }); + if (isLoading) return ; + if (!isSuccess || !startDate || !endDate || !teamId) return null; return ( diff --git a/packages/features/insights/components/PopularEventsTable.tsx b/packages/features/insights/components/PopularEventsTable.tsx index 05ac898097..66c61251b8 100644 --- a/packages/features/insights/components/PopularEventsTable.tsx +++ b/packages/features/insights/components/PopularEventsTable.tsx @@ -5,22 +5,26 @@ import { trpc } from "@calcom/trpc"; import { useFilterContext } from "../context/provider"; import { CardInsights } from "./Card"; +import { LoadingInsight } from "./LoadingInsights"; export const PopularEventsTable = () => { const { t } = useLocale(); const { filter } = useFilterContext(); - const { dateRange, selectedUserId } = filter; + const { dateRange, selectedMemberUserId, selectedUserId } = filter; const [startDate, endDate] = dateRange; const { selectedTeamId: teamId } = filter; - const { data, isSuccess } = trpc.viewer.insights.popularEventTypes.useQuery({ + const { data, isSuccess, isLoading } = trpc.viewer.insights.popularEventTypes.useQuery({ startDate: startDate.toISOString(), endDate: endDate.toISOString(), - teamId, + teamId: teamId ?? undefined, userId: selectedUserId ?? undefined, + memberUserId: selectedMemberUserId ?? undefined, }); - if (!isSuccess || !startDate || !endDate || !teamId || data?.length === 0) return null; + if (isLoading) return ; + + if (!isSuccess || !startDate || !endDate || (!teamId && !selectedUserId)) return null; return ( @@ -30,7 +34,7 @@ export const PopularEventsTable = () => { {data.map((item) => ( {item.eventTypeName} - + {item.count} @@ -39,6 +43,11 @@ export const PopularEventsTable = () => { ))} + {data.length === 0 && ( +
+

{t("insights_no_data_found_for_filter")}

+
+ )}
); }; diff --git a/packages/features/insights/components/TotalBookingUsersTable.tsx b/packages/features/insights/components/TotalBookingUsersTable.tsx index 926a0e4deb..f368ed27b9 100644 --- a/packages/features/insights/components/TotalBookingUsersTable.tsx +++ b/packages/features/insights/components/TotalBookingUsersTable.tsx @@ -30,7 +30,7 @@ export const TotalBookingUsersTable = ({ {item.user.name}

- + {item.count} diff --git a/packages/features/insights/context/FiltersProvider.tsx b/packages/features/insights/context/FiltersProvider.tsx index f24fe39dde..05c97ebdb2 100644 --- a/packages/features/insights/context/FiltersProvider.tsx +++ b/packages/features/insights/context/FiltersProvider.tsx @@ -10,17 +10,24 @@ import { FilterProvider } from "./provider"; export function FiltersProvider({ children }: { children: React.ReactNode }) { // useRouter to get initial values from query params const router = useRouter(); - const { startTime, endTime, teamId, userId, eventTypeId, filter } = router.query; + const { startTime, endTime, teamId, userId, eventTypeId, filter, memberUserId } = router.query; const querySchema = z.object({ startTime: z.string().optional(), endTime: z.string().optional(), teamId: z.coerce.number().optional(), userId: z.coerce.number().optional(), + memberUserId: z.coerce.number().optional(), eventTypeId: z.coerce.number().optional(), filter: z.enum(["event-type", "user"]).optional(), }); - let startTimeParsed, endTimeParsed, teamIdParsed, userIdParsed, eventTypeIdParsed, filterParsed; + let startTimeParsed, + endTimeParsed, + teamIdParsed: number | undefined, + userIdParsed, + eventTypeIdParsed, + filterParsed, + memberUserIdParsed; const safe = querySchema.safeParse({ startTime, @@ -29,6 +36,7 @@ export function FiltersProvider({ children }: { children: React.ReactNode }) { userId, eventTypeId, filter, + memberUserId, }); if (!safe.success) { @@ -40,6 +48,7 @@ export function FiltersProvider({ children }: { children: React.ReactNode }) { userIdParsed = safe.data.userId; eventTypeIdParsed = safe.data.eventTypeId; filterParsed = safe.data.filter; + memberUserIdParsed = safe.data.memberUserId; } // TODO: Sync insight filters with URL parameters @@ -48,6 +57,9 @@ export function FiltersProvider({ children }: { children: React.ReactNode }) { const [selectedUserId, setSelectedUserId] = useState( userIdParsed || null ); + const [selectedMemberUserId, setSelectedMemberUserId] = useState< + FilterContextType["filter"]["selectedMemberUserId"] + >(memberUserIdParsed || null); const [selectedTeamId, setSelectedTeamId] = useState( teamIdParsed || null ); @@ -64,21 +76,24 @@ export function FiltersProvider({ children }: { children: React.ReactNode }) { endTimeParsed ? dayjs(endTimeParsed) : dayjs(), "t", ]); + return ( { setSelectedFilter(filter); - const userId = filter?.[0] === "user" ? selectedUserId : undefined; + const userId = + filter?.[0] === "user" ? selectedMemberUserId : selectedUserId ? selectedUserId : undefined; const eventTypeId = filter?.[0] === "event-type" ? selectedEventTypeId : undefined; router.push({ query: { @@ -100,24 +115,38 @@ export function FiltersProvider({ children }: { children: React.ReactNode }) { }); }, setSelectedTimeView: (selectedTimeView) => setSelectedTimeView(selectedTimeView), - setSelectedUserId: (selectedUserId) => { - setSelectedUserId(selectedUserId); + setSelectedMemberUserId: (selectedMemberUserId) => { + setSelectedMemberUserId(selectedMemberUserId); router.push({ query: { ...router.query, - userId: selectedUserId, + memberUserId: selectedMemberUserId, }, }); }, setSelectedTeamId: (selectedTeamId) => { setSelectedTeamId(selectedTeamId); - router.push({ + setSelectedUserId(null); + const { teamId, eventTypeId, memberUserId, ...rest } = router.query; + router.replace({ query: { - ...router.query, + ...rest, teamId: selectedTeamId, }, }); }, + setSelectedUserId: (selectedUserId) => { + setSelectedUserId(selectedUserId); + setSelectedTeamId(null); + setSelectedTeamName(null); + const { teamId, eventTypeId, memberUserId, ...rest } = router.query; + router.replace({ + query: { + ...rest, + userId: selectedUserId, + }, + }); + }, setSelectedTeamName: (selectedTeamName) => setSelectedTeamName(selectedTeamName), setSelectedEventTypeId: (selectedEventTypeId) => { setSelectedEventTypeId(selectedEventTypeId); @@ -128,6 +157,30 @@ export function FiltersProvider({ children }: { children: React.ReactNode }) { }, }); }, + clearFilters: () => { + setSelectedTeamName(null); + setSelectedEventTypeId(null); + setSelectedMemberUserId(null); + setSelectedFilter(null); + const { teamId, userId, ...rest } = router.query; + const query: { teamId?: number; userId?: number } = {}; + const parsedTeamId = Number(Array.isArray(teamId) ? teamId[0] : teamId); + const parsedUserId = Number(Array.isArray(userId) ? userId[0] : userId); + + if ((teamId && !userId) || (userId && teamId)) { + query.teamId = parsedTeamId; + setSelectedTeamId(parsedTeamId); + setSelectedUserId(null); + } else if (userId && !teamId) { + query.userId = parsedUserId; + setSelectedUserId(parsedUserId); + setSelectedTeamId(null); + } + + router.push({ + query, + }); + }, }}> {children} diff --git a/packages/features/insights/context/provider.ts b/packages/features/insights/context/provider.ts index 735f02c2ff..2fd22a01d6 100644 --- a/packages/features/insights/context/provider.ts +++ b/packages/features/insights/context/provider.ts @@ -10,6 +10,7 @@ export type FilterContextType = { selectedTeamId: number | null; selectedTeamName: string | null; selectedUserId: number | null; + selectedMemberUserId: number | null; selectedEventTypeId: number | null; }; setDateRange: ([start, end, range]: [Dayjs, Dayjs, null | string]) => void; @@ -17,8 +18,10 @@ export type FilterContextType = { setSelectedTeamId: (teamId: number | null) => void; setSelectedTeamName: (teamName: string | null) => void; setSelectedUserId: (userId: number | null) => void; + setSelectedMemberUserId: (userId: number | null) => void; setSelectedEventTypeId: (eventTypeId: number | null) => void; setSelectedTimeView: (timeView: "year" | "week" | "month") => void; + clearFilters: () => void; }; export const FilterContext = React.createContext(null); diff --git a/packages/features/insights/filters/DateSelect.css b/packages/features/insights/filters/DateSelect.css index 221a23f6d7..b70bf5a31e 100644 --- a/packages/features/insights/filters/DateSelect.css +++ b/packages/features/insights/filters/DateSelect.css @@ -1,7 +1,28 @@ .custom-date > .tremor-DateRangePicker-root > .tremor-DateRangePicker-button { box-shadow: none; + max-width: 288px; } .tremor-DateRangePicker-calendarButton, .tremor-DateRangePicker-dropdownButton { @apply dark:bg-darkgray-100 dark:border-darkgray-300 border-gray-300 bg-white text-sm leading-4 placeholder:text-sm placeholder:font-normal focus-within:ring-0 focus-within:ring-gray-800 hover:border-gray-400 dark:focus-within:ring-darkgray-900 } + + +.tremor-Card-root{ + @apply p-5 +} + +.tremor-TableCell-root{ + @apply pl-0 +} + +.recharts-responsive-container{ + @apply -mx-4 +} +.tremor-Card-root > p { + @apply text-base font-semibold text-black mb-2 +} + +.tremor-Legend-legendItem{ + @apply ml-2 +} \ No newline at end of file diff --git a/packages/features/insights/filters/EventTypeListInTeam.tsx b/packages/features/insights/filters/EventTypeList.tsx similarity index 86% rename from packages/features/insights/filters/EventTypeListInTeam.tsx rename to packages/features/insights/filters/EventTypeList.tsx index d4c77756c1..805dc9a447 100644 --- a/packages/features/insights/filters/EventTypeListInTeam.tsx +++ b/packages/features/insights/filters/EventTypeList.tsx @@ -15,17 +15,18 @@ const mapEventTypeToOption = (eventType: EventType): Option => ({ label: eventType.title, }); -export const EventTypeListInTeam = () => { +export const EventTypeList = () => { const { t } = useLocale(); const { filter, setSelectedEventTypeId } = useFilterContext(); - const { selectedTeamId, selectedEventTypeId } = filter; + const { selectedTeamId, selectedEventTypeId, selectedUserId } = filter; const { selectedFilter } = filter; const { data, isSuccess } = trpc.viewer.insights.eventTypeList.useQuery({ - teamId: selectedTeamId, + teamId: selectedTeamId ?? undefined, + userId: selectedUserId ?? undefined, }); if (!selectedFilter?.includes("event-type")) return null; - if (!selectedTeamId) return null; + if (!selectedTeamId && !selectedUserId) return null; const filterOptions = data?.map(mapEventTypeToOption) ?? ([{ label: "No event types found", value: "" }] as Option[]); @@ -46,6 +47,7 @@ export const EventTypeListInTeam = () => { } }} defaultValue={eventTypeValue} + value={eventTypeValue} className="w-52 min-w-[180px]" placeholder={
diff --git a/packages/features/insights/filters/FilterType.tsx b/packages/features/insights/filters/FilterType.tsx index fd01efa067..6c983daace 100644 --- a/packages/features/insights/filters/FilterType.tsx +++ b/packages/features/insights/filters/FilterType.tsx @@ -8,10 +8,10 @@ type Option = { value: "event-type" | "user"; label: string }; export const FilterType = () => { const { t } = useLocale(); - const { setSelectedFilter, setSelectedUserId, setSelectedEventTypeId, filter } = useFilterContext(); - const { selectedFilter } = filter; + const { setSelectedFilter, filter } = useFilterContext(); + const { selectedFilter, selectedUserId } = filter; - const filterOptions: Option[] = [ + let filterOptions: Option[] = [ { label: t("event_type"), value: "event-type", @@ -22,9 +22,14 @@ export const FilterType = () => { }, ]; + if (selectedUserId) { + // remove user option from filterOptions + filterOptions = filterOptions.filter((option) => option.value !== "user"); + } + const filterValue = selectedFilter ? filterOptions.find((option) => option.value === selectedFilter[0]) - : undefined; + : null; return ( diff --git a/packages/features/insights/filters/TeamList.tsx b/packages/features/insights/filters/TeamAndSelfList.tsx similarity index 54% rename from packages/features/insights/filters/TeamList.tsx rename to packages/features/insights/filters/TeamAndSelfList.tsx index ea480067ce..27548fce89 100644 --- a/packages/features/insights/filters/TeamList.tsx +++ b/packages/features/insights/filters/TeamAndSelfList.tsx @@ -7,30 +7,42 @@ import { Select } from "@calcom/ui"; import { useFilterContext } from "../context/provider"; type Team = RouterOutputs["viewer"]["insights"]["teamListForUser"][number]; -type Option = { value: number; label: string }; +type Option = { value: number; label: string | null; userId?: number }; const mapTeamToOption = (team: Team): Option => ({ value: team.id, label: team.name ?? "", + userId: team.userId, }); -export const TeamList = () => { - const { filter, setSelectedTeamId, setSelectedTeamName } = useFilterContext(); - const { selectedTeamId } = filter; +export const TeamAndSelfList = () => { + const { filter, setSelectedTeamId, setSelectedTeamName, setSelectedUserId } = useFilterContext(); + const { selectedTeamId, selectedUserId } = filter; const { data, isSuccess } = trpc.viewer.insights.teamListForUser.useQuery(); useEffect(() => { if (data && data?.length > 0) { - setSelectedTeamId(data[0].id); - setSelectedTeamName(data[0].name); + // We have a team? + if (data[0].id) { + setSelectedTeamId(data[0].id); + setSelectedTeamName(data[0].name); + } else if (data[0].userId) { + // default to user + setSelectedUserId(data[0].userId); + } } }, [data]); const UserListOptions = data?.map(mapTeamToOption) || ([{ label: "Empty", value: -1 }] as Option[]); - const selectedTeam = data?.find((item) => item.id === selectedTeamId); + const selectedTeam = data?.find((item) => { + if (!!selectedUserId && !selectedTeamId) { + return item.userId === selectedUserId; + } + return item.id === selectedTeamId; + }); const teamValue = selectedTeam ? mapTeamToOption(selectedTeam) : null; - if (!isSuccess || !selectedTeamId || data?.length === 0) return null; + if (!isSuccess || data?.length === 0) return null; return ( <> @@ -39,10 +51,12 @@ export const TeamList = () => { isMulti={false} value={teamValue} defaultValue={selectedTeamId ? { value: data[0].id, label: data[0].name } : null} - className="h-[38px] w-[90vw] capitalize md:min-w-[100px] md:max-w-[100px]" + className="h-[38px] w-[90vw] min-w-[160px] max-w-[100px]" options={UserListOptions} onChange={(input) => { - if (input) { + if (!!input?.userId) { + setSelectedUserId(input.userId); + } else if (input && input.value) { setSelectedTeamId(input.value); setSelectedTeamName(input.label); } diff --git a/packages/features/insights/filters/UsersListInTeam.tsx b/packages/features/insights/filters/UsersListInTeam.tsx index 43bc9b6a18..fc72d1404a 100644 --- a/packages/features/insights/filters/UsersListInTeam.tsx +++ b/packages/features/insights/filters/UsersListInTeam.tsx @@ -15,8 +15,8 @@ const mapUserToOption = (user: User): Option => ({ export const UserListInTeam = () => { const { t } = useLocale(); - const { filter, setSelectedUserId } = useFilterContext(); - const { selectedFilter, selectedTeamId, selectedUserId } = filter; + const { filter, setSelectedMemberUserId } = useFilterContext(); + const { selectedFilter, selectedTeamId, selectedMemberUserId } = filter; const { data, isSuccess } = trpc.viewer.insights.userList.useQuery({ teamId: selectedTeamId, }); @@ -25,20 +25,21 @@ export const UserListInTeam = () => { if (!selectedTeamId) return null; const userListOptions = data?.map(mapUserToOption) ?? ([] as { value: number; label: string }[]); - const selectedUser = data?.find((item) => item.id === selectedUserId); - const userValue = selectedUser ? mapUserToOption(selectedUser) : null; + const selectedTeamUser = data?.find((item) => item.id === selectedMemberUserId); + const userValue = selectedTeamUser ? mapUserToOption(selectedTeamUser) : null; if (!isSuccess || data?.length === 0) return null; return ( - isSearchable={false} - className="mb-0 ml-2 h-[38px] w-40 min-w-[140px] capitalize md:min-w-[150px] md:max-w-[200px]" + isSearchable={true} + className="mb-0 h-[38px] w-40 min-w-[140px] capitalize md:min-w-[150px] md:max-w-[200px]" defaultValue={userValue} + value={userValue} options={userListOptions} onChange={(input) => { if (input) { - setSelectedUserId(input.value); + setSelectedMemberUserId(input.value); } }} placeholder={ diff --git a/packages/features/insights/filters/index.tsx b/packages/features/insights/filters/index.tsx index e172f8271c..1e56db71d5 100644 --- a/packages/features/insights/filters/index.tsx +++ b/packages/features/insights/filters/index.tsx @@ -1,17 +1,16 @@ import { useFilterContext } from "@calcom/features/insights/context/provider"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { Button, Tooltip } from "@calcom/ui"; -import { FiX } from "@calcom/ui/components/icon"; import { DateSelect } from "./DateSelect"; -import { EventTypeListInTeam } from "./EventTypeListInTeam"; +import { EventTypeList } from "./EventTypeList"; import { FilterType } from "./FilterType"; -import { TeamList } from "./TeamList"; +import { TeamAndSelfList } from "./TeamAndSelfList"; import { UserListInTeam } from "./UsersListInTeam"; const ClearFilters = () => { const { t } = useLocale(); - const { filter, setSelectedUserId, setSelectedFilter, setSelectedEventTypeId } = useFilterContext(); + const { filter, clearFilters } = useFilterContext(); const { selectedFilter } = filter; if (!selectedFilter || selectedFilter?.length < 1) return null; @@ -23,14 +22,12 @@ const ClearFilters = () => { color="secondary" target="_blank" rel="noreferrer" - StartIcon={FiX} className="h-[38px]" onClick={() => { - setSelectedFilter(null); - setSelectedUserId(null); - setSelectedEventTypeId(null); - }} - /> + clearFilters(); + }}> + {t("clear_filters")} + ); }; @@ -38,13 +35,13 @@ const ClearFilters = () => { export const Filters = () => { return (
- + - + diff --git a/packages/features/insights/server/events.ts b/packages/features/insights/server/events.ts index 157b7ac804..ac9800eed5 100644 --- a/packages/features/insights/server/events.ts +++ b/packages/features/insights/server/events.ts @@ -132,12 +132,15 @@ class EventsInsights { return resultTimeView; }; - static getWeekTimeline(startDate: Dayjs, endDate: Dayjs) { + static getWeekTimeline(startDate: Dayjs, endDate: Dayjs): string[] { + const now = dayjs(); + const endOfDay = now.endOf("day"); let pivotDate = dayjs(startDate); - const dates = []; - while (pivotDate.isBefore(endDate)) { - pivotDate = pivotDate.add(7, "day"); + const dates: string[] = []; + while (pivotDate.isBefore(endDate) && pivotDate.isBefore(endOfDay)) { + const weekEndDate = pivotDate.add(7, "day").isBefore(endOfDay) ? pivotDate.add(7, "day") : endOfDay; dates.push(pivotDate.format("YYYY-MM-DD")); + pivotDate = weekEndDate.add(1, "day"); } return dates; } diff --git a/packages/features/insights/server/trpc-router.ts b/packages/features/insights/server/trpc-router.ts index ca0c924a0d..0ba120dc75 100644 --- a/packages/features/insights/server/trpc-router.ts +++ b/packages/features/insights/server/trpc-router.ts @@ -10,7 +10,7 @@ import { TRPCError } from "@trpc/server"; import { EventsInsights } from "./events"; const UserBelongsToTeamInput = z.object({ - teamId: z.coerce.number().optional(), + teamId: z.coerce.number().optional().nullable(), }); const userBelongsToTeamMiddleware = isAuthed.unstable_pipe(async ({ ctx, next, rawInput }) => { @@ -19,14 +19,22 @@ const userBelongsToTeamMiddleware = isAuthed.unstable_pipe(async ({ ctx, next, r throw new TRPCError({ code: "BAD_REQUEST" }); } - const team = await ctx.prisma.membership.findFirst({ - where: { - userId: ctx.user.id, - teamId: parse.data.teamId, - }, + // If teamId is provided, check if user belongs to team + // If teamId is not provided, check if user belongs to any team + + const membershipWhereConditional: Prisma.MembershipWhereInput = { + userId: ctx.user.id, + }; + + if (parse.data.teamId) { + membershipWhereConditional["teamId"] = parse.data.teamId; + } + + const membership = await ctx.prisma.membership.findFirst({ + where: membershipWhereConditional, }); - if (!team) { + if (!membership) { throw new TRPCError({ code: "UNAUTHORIZED" }); } @@ -74,28 +82,59 @@ export const insightsRouter = router({ startDate: z.string(), endDate: z.string(), eventTypeId: z.coerce.number().optional(), + memberUserId: z.coerce.number().optional(), userId: z.coerce.number().optional(), }) ) .query(async ({ ctx, input }) => { - const { teamId, startDate, endDate, eventTypeId, userId } = input; + const { teamId, startDate, endDate, eventTypeId, memberUserId, userId } = input; - if (!input.teamId) { - return emptyResponseEventsByStatus; + if (userId && userId !== ctx.user.id) { + throw new TRPCError({ code: "UNAUTHORIZED" }); } - const whereConditional: Prisma.BookingWhereInput = { - eventType: { - teamId: teamId, - }, - }; + let whereConditional: Prisma.BookingWhereInput = {}; if (eventTypeId) { whereConditional["eventTypeId"] = eventTypeId; - } else if (userId) { + } + if (memberUserId) { + whereConditional["userId"] = memberUserId; + } + if (userId) { + whereConditional["eventType"] = { + teamId: null, + }; whereConditional["userId"] = userId; } + if (teamId) { + const usersFromTeam = await ctx.prisma.membership.findMany({ + where: { + teamId: teamId, + }, + select: { + userId: true, + }, + }); + const userIdsFromTeam = usersFromTeam.map((u) => u.userId); + whereConditional = { + ...whereConditional, + OR: [ + { + eventType: { + teamId: teamId, + }, + }, + { + userId: { + in: userIdsFromTeam, + }, + }, + ], + }; + } + // Migrate to use prisma views const baseBookings = await EventsInsights.getBaseBookingForEventStatus({ ...whereConditional, @@ -103,10 +142,8 @@ export const insightsRouter = router({ gte: new Date(startDate), lte: new Date(endDate), }, - eventType: { - teamId: teamId, - }, }); + const startTimeEndTimeDiff = dayjs(endDate).diff(dayjs(startDate), "day"); const baseBookingIds = baseBookings.map((b) => b.id); @@ -136,8 +173,7 @@ export const insightsRouter = router({ ); const lastPeriodTotalCancelled = await EventsInsights.getTotalCancelledEvents(lastPeriodBaseBookingIds); - - return { + const result = { empty: false, created: { count: baseBookings.length, @@ -163,16 +199,26 @@ export const insightsRouter = router({ endDate: lastPeriodEndDate.format("YYYY-MM-DD"), }, }; + if ( + result.created.count === 0 && + result.completed.count === 0 && + result.rescheduled.count === 0 && + result.cancelled.count === 0 + ) { + return emptyResponseEventsByStatus; + } + return result; }), eventsTimeline: userBelongsToTeamProcedure .input( z.object({ - teamId: z.coerce.number().optional(), + teamId: z.coerce.number().optional().nullable(), startDate: z.string(), endDate: z.string(), eventTypeId: z.coerce.number().optional(), - userId: z.coerce.number().optional(), + memberUserId: z.coerce.number().optional(), timeView: z.enum(["week", "month", "year"]), + userId: z.coerce.number().optional(), }) ) .query(async ({ ctx, input }) => { @@ -181,36 +227,75 @@ export const insightsRouter = router({ startDate: startDateString, endDate: endDateString, eventTypeId, - userId, + memberUserId, timeView: inputTimeView, + userId: selfUserId, } = input; + const startDate = dayjs(startDateString); const endDate = dayjs(endDateString); const user = ctx.user; + + if (selfUserId && user?.id !== selfUserId) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + + if (!teamId && !selfUserId) { + return []; + } + const timeView = inputTimeView; - let whereConditional: Prisma.BookingWhereInput = { - eventType: { - teamId: teamId, - }, - }; + let whereConditional: Prisma.BookingWhereInput = {}; + + if (teamId) { + const usersFromTeam = await ctx.prisma.membership.findMany({ + where: { + teamId, + }, + select: { + userId: true, + }, + }); + const userIdsFromTeams = usersFromTeam.map((u) => u.userId); - if (userId) { - delete whereConditional.eventType; whereConditional = { - ...whereConditional, - userId, + OR: [ + { + eventType: { + teamId, + }, + }, + { + userId: { + in: userIdsFromTeams, + }, + }, + ], }; } - if (eventTypeId && !!whereConditional) { - delete whereConditional.eventType; - delete whereConditional.userId; + + if (memberUserId) { whereConditional = { ...whereConditional, + userId: memberUserId, + }; + } + + if (eventTypeId && !!whereConditional) { + whereConditional = { eventTypeId: eventTypeId, }; } + if (selfUserId && !!whereConditional) { + // In this delete we are deleting the teamId filter + whereConditional["userId"] = selfUserId; + whereConditional["eventType"] = { + teamId: null, + }; + } + // Get timeline data const timeline = await EventsInsights.getTimeLine(timeView, dayjs(startDate), dayjs(endDate)); @@ -277,37 +362,73 @@ export const insightsRouter = router({ popularEventTypes: userBelongsToTeamProcedure .input( z.object({ - userId: z.coerce.number().optional(), + memberUserId: z.coerce.number().optional(), teamId: z.coerce.number().optional().nullable(), startDate: z.string(), endDate: z.string(), + userId: z.coerce.number().optional(), }) ) .query(async ({ ctx, input }) => { - const { teamId, startDate, endDate, userId } = input; + const { teamId, startDate, endDate, memberUserId, userId } = input; + const user = ctx.user; - if (!input.teamId) { + if (userId && user?.id !== userId) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + + if (!teamId && !userId) { return []; } - const eventTypeWhere: Prisma.EventTypeWhereInput = { - teamId: teamId, - }; - - const bookingWhere: Prisma.BookingWhereInput = { - eventType: eventTypeWhere, + let bookingWhere: Prisma.BookingWhereInput = { createdAt: { gte: dayjs(startDate).startOf("day").toDate(), lte: dayjs(endDate).endOf("day").toDate(), }, }; + if (teamId) { + const usersFromTeam = await ctx.prisma.membership.findMany({ + where: { + teamId, + }, + select: { + userId: true, + }, + }); + const userIdsFromTeams = usersFromTeam.map((u) => u.userId); + + bookingWhere = { + ...bookingWhere, + OR: [ + { + eventType: { + teamId, + }, + }, + { + userId: { + in: userIdsFromTeams, + }, + }, + ], + }; + } if (userId) { bookingWhere.userId = userId; + // Don't take bookings from any team + bookingWhere.eventType = { + teamId: null, + }; } - const bookingsFromTeam = await ctx.prisma.booking.groupBy({ + if (memberUserId) { + bookingWhere.userId = memberUserId; + } + + const bookingsFromSelected = await ctx.prisma.booking.groupBy({ by: ["eventTypeId"], where: bookingWhere, _count: { @@ -320,66 +441,158 @@ export const insightsRouter = router({ }, take: 10, }); - const eventTypeIds = bookingsFromTeam + + const eventTypeIds = bookingsFromSelected .filter((booking) => typeof booking.eventTypeId === "number") .map((booking) => booking.eventTypeId); - const eventTypesFromTeam = await ctx.prisma.eventType.findMany({ - where: { - teamId: teamId, - id: { - in: eventTypeIds as number[], + + const eventTypeWhereConditional: Prisma.EventTypeWhereInput = { + id: { + in: eventTypeIds as number[], + }, + }; + + const eventTypesFrom = await ctx.prisma.eventType.findMany({ + select: { + id: true, + title: true, + teamId: true, + userId: true, + slug: true, + users: { + select: { + username: true, + }, + }, + team: { + select: { + slug: true, + }, }, }, + where: eventTypeWhereConditional, }); - const eventTypeHashMap = new Map(); - eventTypesFromTeam.forEach((eventType) => { - eventTypeHashMap.set(eventType.id, eventType.title); + const eventTypeHashMap: Map< + number, + Prisma.EventTypeGetPayload<{ + select: { + id: true; + title: true; + teamId: true; + userId: true; + slug: true; + users: { + select: { + username: true; + }; + }; + team: { + select: { + slug: true; + }; + }; + }; + }> + > = new Map(); + eventTypesFrom.forEach((eventType) => { + eventTypeHashMap.set(eventType.id, eventType); }); - const result = bookingsFromTeam.map((booking) => { + const result = bookingsFromSelected.map((booking) => { + const eventTypeSelected = eventTypeHashMap.get(booking.eventTypeId ?? 0); + if (!eventTypeSelected) { + return {}; + } + + let eventSlug = ""; + if (eventTypeSelected.userId) { + eventSlug = `${eventTypeSelected?.slug}/${eventTypeSelected?.users[0]?.username}`; + } + if (eventTypeSelected?.team && eventTypeSelected?.team?.slug) { + eventSlug = `${eventTypeSelected.team.slug}/${eventTypeSelected.slug}`; + } return { eventTypeId: booking.eventTypeId, - eventTypeName: eventTypeHashMap.get(booking.eventTypeId), + eventTypeName: eventSlug, count: booking._count.id, }; }); + return result; }), averageEventDuration: userBelongsToTeamProcedure .input( z.object({ - userId: z.coerce.number().optional(), + memberUserId: z.coerce.number().optional(), teamId: z.coerce.number().optional().nullable(), startDate: z.string(), endDate: z.string(), + userId: z.coerce.number().optional(), }) ) .query(async ({ ctx, input }) => { - const { teamId, startDate: startDateString, endDate: endDateString, userId } = input; + const { teamId, startDate: startDateString, endDate: endDateString, memberUserId, userId } = input; - if (!teamId) { + if (userId && ctx.user?.id !== userId) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + + if (!teamId && !userId) { return []; } - const user = ctx.user; const startDate = dayjs(startDateString); const endDate = dayjs(endDateString); - const whereConditional: Prisma.BookingWhereInput = { - eventType: { - teamId: teamId, - }, + let whereConditional: Prisma.BookingWhereInput = { createdAt: { gte: dayjs(startDate).startOf("day").toDate(), lte: dayjs(endDate).endOf("day").toDate(), }, }; - if (userId) { + delete whereConditional.eventType; whereConditional["userId"] = userId; } + if (teamId) { + const usersFromTeam = await ctx.prisma.membership.findMany({ + where: { + teamId, + }, + select: { + userId: true, + }, + }); + const userIdsFromTeams = usersFromTeam.map((u) => u.userId); + + whereConditional = { + ...whereConditional, + OR: [ + { + eventType: { + teamId, + }, + }, + { + userId: { + in: userIdsFromTeams, + }, + }, + ], + }; + } + + if (memberUserId) { + whereConditional = { + userId: memberUserId, + eventType: { + teamId, + }, + }; + } + const timeView = EventsInsights.getTimeView("week", startDate, endDate); const timeLine = await EventsInsights.getTimeLine("week", startDate, endDate); @@ -448,15 +661,42 @@ export const insightsRouter = router({ eventTypeWhere["id"] = eventTypeId; } + const bookingWhere: Prisma.BookingWhereInput = { + eventType: eventTypeWhere, + createdAt: { + gte: dayjs(startDate).startOf("day").toDate(), + lte: dayjs(endDate).endOf("day").toDate(), + }, + }; + + if (teamId) { + const usersFromTeam = await ctx.prisma.membership.findMany({ + where: { + teamId, + }, + select: { + userId: true, + }, + }); + const userIdsFromTeams = usersFromTeam.map((u) => u.userId); + delete bookingWhere.eventType; + bookingWhere["OR"] = [ + { + eventType: { + teamId, + }, + }, + { + userId: { + in: userIdsFromTeams, + }, + }, + ]; + } + const bookingsFromTeam = await ctx.prisma.booking.groupBy({ by: ["userId"], - where: { - eventType: eventTypeWhere, - createdAt: { - gte: dayjs(startDate).startOf("day").toDate(), - lte: dayjs(endDate).endOf("day").toDate(), - }, - }, + where: bookingWhere, _count: { id: true, }, @@ -467,9 +707,13 @@ export const insightsRouter = router({ }, take: 10, }); + const userIds = bookingsFromTeam .filter((booking) => typeof booking.userId === "number") .map((booking) => booking.userId); + if (userIds.length === 0) { + return []; + } const usersFromTeam = await ctx.prisma.user.findMany({ where: { id: { @@ -487,10 +731,11 @@ export const insightsRouter = router({ return { userId: booking.userId, user: userHashMap.get(booking.userId), - emailMd5: crypto.createHash("md5").update(user.email).digest("hex"), + emailMd5: crypto.createHash("md5").update(user?.email).digest("hex"), count: booking._count.id, }; }); + return result; }), membersWithLeastBookings: userBelongsToTeamProcedure @@ -507,7 +752,7 @@ export const insightsRouter = router({ if (!teamId) { return []; } - + const user = ctx.user; const eventTypeWhere: Prisma.EventTypeWhereInput = { teamId: teamId, }; @@ -515,15 +760,42 @@ export const insightsRouter = router({ eventTypeWhere["id"] = eventTypeId; } + const bookingWhere: Prisma.BookingWhereInput = { + eventType: eventTypeWhere, + createdAt: { + gte: dayjs(startDate).startOf("day").toDate(), + lte: dayjs(endDate).endOf("day").toDate(), + }, + }; + + if (teamId) { + const usersFromTeam = await ctx.prisma.membership.findMany({ + where: { + teamId, + }, + select: { + userId: true, + }, + }); + const userIdsFromTeams = usersFromTeam.map((u) => u.userId); + delete bookingWhere.eventType; + bookingWhere["OR"] = [ + { + eventType: { + teamId, + }, + }, + { + userId: { + in: userIdsFromTeams, + }, + }, + ]; + } + const bookingsFromTeam = await ctx.prisma.booking.groupBy({ by: ["userId"], - where: { - eventType: eventTypeWhere, - createdAt: { - gte: dayjs(startDate).startOf("day").toDate(), - lte: dayjs(endDate).endOf("day").toDate(), - }, - }, + where: bookingWhere, _count: { id: true, }, @@ -535,53 +807,31 @@ export const insightsRouter = router({ take: 10, }); - // Users are obtained from bookings so if a user has 0 they won't be in the list const userIds = bookingsFromTeam .filter((booking) => typeof booking.userId === "number") .map((booking) => booking.userId); - - const usersWithNoBookings = await ctx.prisma.user.findMany({ - select: UserSelect, + if (userIds.length === 0) { + return []; + } + const usersFromTeam = await ctx.prisma.user.findMany({ where: { id: { - notIn: userIds as number[], - }, - teams: { - some: { - teamId: teamId, - }, + in: userIds as number[], }, }, }); - let usersFromTeam: Prisma.UserGetPayload<{ - select: typeof UserSelect; - }>[] = []; - if (usersWithNoBookings.length < 10) { - usersFromTeam = await ctx.prisma.user.findMany({ - where: { - id: { - in: userIds as number[], - }, - }, - select: UserSelect, - take: 10 - usersWithNoBookings.length, - }); - } - const userHashMap = new Map(); - [...usersWithNoBookings, ...usersFromTeam].forEach((user) => { + usersFromTeam.forEach((user) => { userHashMap.set(user.id, user); }); const result = bookingsFromTeam.map((booking) => { - const user = userHashMap.get(booking.userId); return { userId: booking.userId, - user, - emailMd5: crypto.createHash("md5").update(user.email).digest("hex"), + user: userHashMap.get(booking.userId), + emailMd5: crypto.createHash("md5").update(user?.email).digest("hex"), count: booking._count.id, - Username: user.name || "No Username found", }; }); @@ -590,6 +840,18 @@ export const insightsRouter = router({ teamListForUser: authedProcedure.query(async ({ ctx }) => { const user = ctx.user; + // Fetch user data + const userData = await ctx.prisma.user.findUnique({ + where: { + id: user.id, + }, + select: { + id: true, + name: true, + avatar: true, + }, + }); + // Look if user it's admin in multiple teams const belongsToTeams = await ctx.prisma.membership.findMany({ where: { @@ -617,8 +879,25 @@ export const insightsRouter = router({ }, }, }); - const result = belongsToTeams.map((membership) => membership.team); + const result: { + id: number; + slug: string | null; + name: string | null; + logo: string | null; + userId?: number; + }[] = belongsToTeams.map((membership) => { + return { ...membership.team }; + }); + if (userData && userData.id) { + result.push({ + id: 0, + slug: "", + userId: userData.id, + name: userData.name, + logo: userData.avatar, + }); + } return result; }), userList: userBelongsToTeamProcedure @@ -665,58 +944,84 @@ export const insightsRouter = router({ eventTypeList: userBelongsToTeamProcedure .input( z.object({ - teamId: z.coerce.number().nullable(), + teamId: z.coerce.number().optional().nullable(), + userId: z.coerce.number().optional().nullable(), }) ) .query(async ({ ctx, input }) => { - const user = ctx.user; + const { prisma, user } = ctx; + const { teamId, userId } = input; - if (!input.teamId) { + if (!teamId && !userId) { return []; } - const membership = await ctx.prisma.membership.findFirst({ - where: { - userId: user.id, - teamId: input.teamId, - }, - }); - - if (membership && membership.role === "MEMBER") { - const eventTypes = await ctx.prisma.eventType.findMany({ - where: { - teamId: input.teamId, - // user its listed as direct user or as part of a group - OR: [ - { - userId: user.id, - }, - { - users: { - some: { - id: user.id, - }, - }, - }, - ], - }, - }); - - return eventTypes; + const membershipWhereConditional: Prisma.MembershipWhereInput = {}; + if (teamId) { + membershipWhereConditional["teamId"] = teamId; + membershipWhereConditional["userId"] = user.id; + } + if (userId) { + membershipWhereConditional["userId"] = userId; } - const eventTypes = await ctx.prisma.eventType.findMany({ - select: { - id: true, - slug: true, - teamId: true, - title: true, - }, - where: { - teamId: input.teamId, - }, + // I'm not using unique here since when userId comes from input we should look for every + // event type that user owns + const membership = await prisma.membership.findFirst({ + where: membershipWhereConditional, }); - return eventTypes; + if (!membership) { + throw new Error("User is not part of a team"); + } + + const eventTypeWhereConditional: Prisma.EventTypeWhereInput = {}; + if (teamId) { + eventTypeWhereConditional["teamId"] = teamId; + } + if (userId) { + eventTypeWhereConditional["userId"] = userId; + } + let eventTypeResult: Prisma.EventTypeGetPayload<{ + select: { + id: true; + slug: true; + teamId: true; + title: true; + }; + }>[] = []; + + switch (membership?.role) { + case "MEMBER": + eventTypeWhereConditional["OR"] = { + userId: user.id, + users: { some: { id: user.id } }, + // @TODO this is not working as expected + // hosts: { some: { id: user.id } }, + }; + eventTypeResult = await prisma.eventType.findMany({ + select: { + id: true, + slug: true, + teamId: true, + title: true, + }, + where: eventTypeWhereConditional, + }); + break; + + default: + eventTypeResult = await prisma.eventType.findMany({ + select: { + id: true, + slug: true, + teamId: true, + title: true, + }, + where: eventTypeWhereConditional, + }); + break; + } + return eventTypeResult; }), }); diff --git a/packages/prisma/seed-insights.ts b/packages/prisma/seed-insights.ts index 9e9b9e4b0e..8a832d3ddf 100644 --- a/packages/prisma/seed-insights.ts +++ b/packages/prisma/seed-insights.ts @@ -5,6 +5,65 @@ import { v4 as uuidv4 } from "uuid"; import dayjs from "@calcom/dayjs"; import { hashPassword } from "@calcom/features/auth/lib/hashPassword"; +const shuffle = ( + booking: any, + year: number, + eventTypesToPick: Prisma.EventTypeGetPayload<{ + select: { + id: true; + userId: true; + title: true; + length: true; + description: true; + }; + }>[], + usersIdsToPick?: number[] +) => { + const startTime = dayjs(booking.startTime) + .add(Math.floor(Math.random() * 365), "day") + .add(Math.floor(Math.random() * 24), "hour") + .add(Math.floor(Math.random() * 60), "minute") + .set("y", year); + const randomEvent = eventTypesToPick[Math.floor(Math.random() * eventTypesToPick.length)]; + + const endTime = dayjs(startTime).add(Math.floor(Math.random() * randomEvent.length), "minute"); + + booking.title = randomEvent.title; + booking.description = randomEvent.description; + booking.startTime = startTime.toISOString(); + booking.endTime = endTime.toISOString(); + booking.createdAt = startTime.subtract(1, "day").toISOString(); + + // Pick a random status + const randomStatusIndex = Math.floor(Math.random() * Object.keys(BookingStatus).length); + const statusKey = Object.keys(BookingStatus)[randomStatusIndex]; + + booking.status = BookingStatus[statusKey]; + + booking.rescheduled = Math.random() > 0.5 && Math.random() > 0.5 && Math.random() > 0.5; + + if (booking.rescheduled) { + booking.status = "CANCELLED"; + } + const randomEventTypeId = randomEvent.id; + + booking.eventTypeId = randomEventTypeId; + booking.uid = uuidv4(); + + if (usersIdsToPick && usersIdsToPick.length > 0) { + booking.userId = Math.random() > 0.5 ? usersIdsToPick[0] : usersIdsToPick[1]; + } else { + booking.userId = randomEvent.userId; + } + + if (booking.userId === undefined || booking.userId === null) { + console.log({ randomEvent, usersIdsToPick }); + console.log("This should not happen"); + } + + return booking; +}; + const prisma = new PrismaClient(); async function main() { // First find if not then create everything @@ -18,25 +77,30 @@ async function main() { insightsAdmin = await prisma.user.create({ data: { email: "insights@example.com", - password: await hashPassword("insights"), + password: await hashPassword("insightsinsightsinsights...!"), name: "Insights Admin", role: "ADMIN", - username: "insights", + username: "insights-admin", completedOnboarding: true, }, }); + + if (!insightsAdmin) { + // Throw error + throw new Error("Insights Admin not created"); + } } let insightsUser = await prisma.user.findFirst({ where: { - email: "insightuser@example.com", + email: "insightsuser@example.com", }, }); if (!insightsUser) { insightsUser = await prisma.user.create({ data: { - email: "insightuser@example.com", + email: "insightsuser@example.com", password: await hashPassword("insightsuser"), name: "Insights User", role: "USER", @@ -44,6 +108,10 @@ async function main() { completedOnboarding: true, }, }); + if (!insightsUser) { + // Throw error + throw new Error("Insights Admin not created"); + } } let insightsTeam = await prisma.team.findFirst({ @@ -75,37 +143,33 @@ async function main() { }, ], }); - await prisma.team.update({ - where: { - id: insightsTeam.id, - }, - data: { - members: { - connect: { - userId_teamId: { - userId: insightsAdmin.id, - teamId: insightsTeam.id, + if (!insightsTeam) { + insightsTeam = await prisma.team.create({ + data: { + name: "Insights", + slug: "insights-team", + }, + }); + } + + if (insightsAdmin && insightsTeam) { + await prisma.team.update({ + where: { + id: insightsTeam.id, + }, + data: { + members: { + connect: { + userId_teamId: { + userId: insightsAdmin.id, + teamId: insightsTeam.id, + }, }, }, }, - }, - }); + }); + } } - await prisma.team.update({ - where: { - id: insightsTeam.id, - }, - data: { - members: { - connect: { - userId_teamId: { - userId: insightsUser.id, - teamId: insightsTeam.id, - }, - }, - }, - }, - }); let teamEvents = await prisma.eventType.findMany({ where: { @@ -113,6 +177,112 @@ async function main() { }, }); + const userSingleEventsAdmin = await prisma.eventType.findMany({ + where: { + userId: insightsUser.id, + }, + }); + + const userSingleEvents = await prisma.eventType.findMany({ + where: { + userId: insightsUser.id, + }, + }); + + if (userSingleEventsAdmin.length === 0 && userSingleEvents.length === 0) { + await prisma.eventType.create({ + data: { + title: "Single Event Admin", + slug: "single-event-admin", + description: "Single Event Admin", + length: 60, + userId: insightsAdmin.id, + users: { + connect: { + id: insightsAdmin.id, + }, + }, + }, + }); + await prisma.eventType.create({ + data: { + title: "Single Event", + slug: "single-event", + description: "Single Event", + length: 60, + userId: insightsUser.id, + users: { + connect: { + id: insightsUser.id, + }, + }, + }, + }); + const singleEventTypesAdmin = await prisma.eventType.findFirst({ + select: { + id: true, + userId: true, + title: true, + length: true, + description: true, + }, + where: { + userId: insightsAdmin.id, + }, + }); + + const singleEventTypes = await prisma.eventType.findFirst({ + select: { + id: true, + userId: true, + length: true, + title: true, + description: true, + }, + where: { + userId: insightsUser.id, + }, + }); + + if (!singleEventTypesAdmin || !singleEventTypes) { + throw new Error("Could not create single event types"); + } + + const singleEvents = [singleEventTypesAdmin, singleEventTypes]; + + // create bookings random for single event type + const baseBookingSingle: Prisma.BookingCreateManyInput = { + uid: "demoUIDSingle", + title: "Single Event", + description: "Single Event", + startTime: dayjs().toISOString(), + endTime: dayjs().toISOString(), + // This gets overriden in shuffle + userId: insightsUser.id, + }; + + // Validate if they are null of undefined throw error + if (!insightsAdmin || !insightsUser || !insightsAdmin.id || !insightsUser.id) { + throw new Error("Could not find user"); + } + + await prisma.booking.createMany({ + data: [ + ...new Array(100) + .fill(0) + .map(() => shuffle({ ...baseBookingSingle }, dayjs().get("y") - 1, singleEvents)), + ], + }); + + await prisma.booking.createMany({ + data: [ + ...new Array(100) + .fill(0) + .map(() => shuffle({ ...baseBookingSingle }, dayjs().get("y") - 0, singleEvents)), + ], + }); + } + if (teamEvents.length === 0) { await prisma.eventType.createMany({ data: [ @@ -142,7 +312,6 @@ async function main() { }, ], }); - } else { teamEvents = await prisma.eventType.findMany({ where: { teamId: insightsTeam.id, @@ -152,61 +321,52 @@ async function main() { const baseBooking: Prisma.BookingCreateManyInput = { uid: "demoUID", - title: "Team Meeting", - description: "Team Meeting", + title: "Team Meeting should be changed in shuffle", + description: "Team Meeting Should be changed in shuffle", startTime: dayjs().toISOString(), endTime: dayjs().toISOString(), userId: insightsUser.id, eventTypeId: teamEvents[0].id, }; - const shuffle = (booking: typeof baseBooking, year) => { - const startTime = dayjs(booking.startTime) - .add(Math.floor(Math.random() * 365), "day") - .add(Math.floor(Math.random() * 24), "hour") - .add(Math.floor(Math.random() * 60), "minute") - .set("y", year); - const randomEvent = teamEvents[Math.floor(Math.random() * teamEvents.length)]; - const endTime = dayjs(startTime).add(Math.floor(Math.random() * randomEvent.length), "minute"); - - booking.startTime = startTime.toISOString(); - booking.endTime = endTime.toISOString(); - booking.createdAt = startTime.subtract(1, "day").toISOString(); - - // Pick a random status - const randomStatusIndex = Math.floor(Math.random() * Object.keys(BookingStatus).length); - const statusKey = Object.keys(BookingStatus)[randomStatusIndex]; - - booking.status = BookingStatus[statusKey]; - - booking.rescheduled = Math.random() > 0.5 && Math.random() > 0.5 && Math.random() > 0.5; - - if (booking.rescheduled) { - booking.status = "CANCELLED"; - } - const randomEventTypeId = teamEvents[Math.floor(Math.random() * teamEvents.length)].id; - - booking.eventTypeId = randomEventTypeId; - booking.uid = uuidv4(); - - if (insightsUser && insightsAdmin) { - booking.userId = Math.random() > 0.5 ? insightsUser.id : insightsAdmin.id; - } - - return booking; - }; - - // Create past bookings + // Create past bookings -2y, -1y, -0y await prisma.booking.createMany({ - data: [...new Array(100).fill(0).map(() => shuffle({ ...baseBooking }, dayjs().get("y") - 2))], + data: [ + ...new Array(100) + .fill(0) + .map(() => + shuffle({ ...baseBooking }, dayjs().get("y") - 2, teamEvents, [ + insightsAdmin?.id ?? 0, + insightsUser?.id ?? 0, + ]) + ), + ], }); await prisma.booking.createMany({ - data: [...new Array(100).fill(0).map(() => shuffle({ ...baseBooking }, dayjs().get("y") - 1))], + data: [ + ...new Array(100) + .fill(0) + .map(() => + shuffle({ ...baseBooking }, dayjs().get("y") - 1, teamEvents, [ + insightsAdmin?.id ?? 0, + insightsUser?.id ?? 0, + ]) + ), + ], }); await prisma.booking.createMany({ - data: [...new Array(100).fill(0).map(() => shuffle({ ...baseBooking }, dayjs().get("y")))], + data: [ + ...new Array(100) + .fill(0) + .map(() => + shuffle({ ...baseBooking }, dayjs().get("y"), teamEvents, [ + insightsAdmin?.id ?? 0, + insightsUser?.id ?? 0, + ]) + ), + ], }); } main() diff --git a/yarn.lock b/yarn.lock index 1448fd2d19..ef4d015379 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,34 @@ __metadata: version: 6 cacheKey: 8 +"@47ng/cloak@npm:^1.1.0": + version: 1.1.0 + resolution: "@47ng/cloak@npm:1.1.0" + dependencies: + "@47ng/codec": ^1.0.1 + "@stablelib/base64": ^1.0.1 + "@stablelib/hex": ^1.0.1 + "@stablelib/utf8": ^1.0.1 + chalk: ^4.1.2 + commander: ^8.3.0 + dotenv: ^10.0.0 + s-ago: ^2.2.0 + bin: + cloak: dist/cli.js + checksum: 7d72c66ff7837368e9ca8f5ba402d72041427eb47c53c340b4640e3352f2956d8673a4a8e97591fb2b9dfe27f3d2765bcd925617273ef2488df2565c77c78299 + languageName: node + linkType: hard + +"@47ng/codec@npm:^1.0.1": + version: 1.1.0 + resolution: "@47ng/codec@npm:1.1.0" + dependencies: + "@stablelib/base64": ^1.0.1 + "@stablelib/hex": ^1.0.1 + checksum: 4f780c4413fe78bbedbaff4135340c0e5f5a30df88f5cffbec51349eb0a1c909728e6c2bbda52506ff8c12653bf39b78c67b78bbe9501b0b9741da0cdaeec6ff + languageName: node + linkType: hard + "@achrinza/event-pubsub@npm:5.0.8": version: 5.0.8 resolution: "@achrinza/event-pubsub@npm:5.0.8" @@ -52,6 +80,48 @@ __metadata: languageName: node linkType: hard +"@apidevtools/json-schema-ref-parser@npm:9.0.9": + version: 9.0.9 + resolution: "@apidevtools/json-schema-ref-parser@npm:9.0.9" + dependencies: + "@jsdevtools/ono": ^7.1.3 + "@types/json-schema": ^7.0.6 + call-me-maybe: ^1.0.1 + js-yaml: ^4.1.0 + checksum: b21f6bdd37d2942c3967ee77569bc74fadd1b922f688daf5ef85057789a2c3a7f4afc473aa2f3a93ec950dabb6ef365f8bd9cf51e4e062a1ee1e59b989f8f9b4 + languageName: node + linkType: hard + +"@apidevtools/openapi-schemas@npm:^2.0.4": + version: 2.1.0 + resolution: "@apidevtools/openapi-schemas@npm:2.1.0" + checksum: 4a8f64935b9049ef21e41fa4b188f39f6bc3f5291cebd451701db1115451ccb246a739e46cc5ce9ecdec781671431db40db7851acdac84a990a45756e0f32de3 + languageName: node + linkType: hard + +"@apidevtools/swagger-methods@npm:^3.0.2": + version: 3.0.2 + resolution: "@apidevtools/swagger-methods@npm:3.0.2" + checksum: d06b1ac5c1956613c4c6be695612ef860cd4e962b93a509ca551735a328a856cae1e33399cac1dcbf8333ba22b231746f3586074769ef0e172cf549ec9e7eaae + languageName: node + linkType: hard + +"@apidevtools/swagger-parser@npm:10.0.2": + version: 10.0.2 + resolution: "@apidevtools/swagger-parser@npm:10.0.2" + dependencies: + "@apidevtools/json-schema-ref-parser": ^9.0.6 + "@apidevtools/openapi-schemas": ^2.0.4 + "@apidevtools/swagger-methods": ^3.0.2 + "@jsdevtools/ono": ^7.1.3 + call-me-maybe: ^1.0.1 + z-schema: ^4.2.3 + peerDependencies: + openapi-types: ">=7" + checksum: fbae8e363c4944c10b9c5702a9b64d04ce2d55b5418d0ca4ef044aeaa92c7f3160ba8d3e335798f7482ab1179d947bdd7393cddf9861d76393789d7559ddf7ba + languageName: node + linkType: hard + "@aws-crypto/ie11-detection@npm:^3.0.0": version: 3.0.0 resolution: "@aws-crypto/ie11-detection@npm:3.0.0" @@ -3800,6 +3870,34 @@ __metadata: languageName: unknown linkType: soft +"@calcom/api@workspace:apps/api": + version: 0.0.0-use.local + resolution: "@calcom/api@workspace:apps/api" + dependencies: + "@calcom/prisma": "*" + "@calcom/trpc": "*" + "@calcom/tsconfig": "*" + "@calcom/types": "*" + "@sentry/nextjs": ^6.19.7 + babel-jest: ^28.1.0 + bcryptjs: ^2.4.3 + jest: ^28.1.0 + memory-cache: ^0.2.0 + modify-response-middleware: ^1.1.0 + next: ^12.2.5 + next-api-middleware: ^1.0.1 + next-axiom: ^0.10.0 + next-swagger-doc: ^0.3.4 + next-transpile-modules: ^9.0.0 + next-validations: ^0.2.0 + node-mocks-http: ^1.11.0 + typescript: ^4.7.4 + tzdata: ^1.0.30 + uuid: ^8.3.2 + zod: ^3.18.0 + languageName: unknown + linkType: soft + "@calcom/app-store-cli@*, @calcom/app-store-cli@workspace:packages/app-store-cli": version: 0.0.0-use.local resolution: "@calcom/app-store-cli@workspace:packages/app-store-cli" @@ -3916,6 +4014,43 @@ __metadata: languageName: unknown linkType: soft +"@calcom/console@workspace:apps/console": + version: 0.0.0-use.local + resolution: "@calcom/console@workspace:apps/console" + dependencies: + "@calcom/dayjs": "*" + "@calcom/features": "*" + "@calcom/lib": "*" + "@calcom/tsconfig": "*" + "@calcom/ui": "*" + "@headlessui/react": ^1.5.0 + "@heroicons/react": ^1.0.6 + "@prisma/client": ^4.11.0 + "@tailwindcss/forms": ^0.5.2 + "@types/node": 16.9.1 + "@types/react": 18.0.26 + autoprefixer: ^10.4.12 + chart.js: ^3.7.1 + client-only: ^0.0.1 + eslint: ^8.34.0 + next: ^13.2.1 + next-auth: ^4.20.1 + next-i18next: ^11.3.0 + postcss: ^8.4.18 + prisma: ^4.11.0 + prisma-field-encryption: ^1.4.0 + react: ^18.2.0 + react-chartjs-2: ^4.0.1 + react-dom: ^18.2.0 + react-hook-form: ^7.43.3 + react-live-chat-loader: ^2.7.3 + swr: ^1.2.2 + tailwindcss: ^3.2.1 + typescript: ^4.9.4 + zod: ^3.20.2 + languageName: unknown + linkType: soft + "@calcom/core@*, @calcom/core@workspace:packages/core": version: 0.0.0-use.local resolution: "@calcom/core@workspace:packages/core" @@ -4019,7 +4154,7 @@ __metadata: languageName: unknown linkType: soft -"@calcom/embed-react@workspace:*, @calcom/embed-react@workspace:packages/embeds/embed-react": +"@calcom/embed-react@workspace:*, @calcom/embed-react@workspace:^, @calcom/embed-react@workspace:packages/embeds/embed-react": version: 0.0.0-use.local resolution: "@calcom/embed-react@workspace:packages/embeds/embed-react" dependencies: @@ -4785,6 +4920,90 @@ __metadata: languageName: unknown linkType: soft +"@calcom/website@workspace:apps/website": + version: 0.0.0-use.local + resolution: "@calcom/website@workspace:apps/website" + dependencies: + "@calcom/app-store": "*" + "@calcom/config": "*" + "@calcom/dayjs": "*" + "@calcom/embed-react": "workspace:^" + "@calcom/features": "*" + "@calcom/lib": "*" + "@calcom/prisma": "*" + "@calcom/tsconfig": "*" + "@calcom/ui": "*" + "@floating-ui/react-dom": ^1.0.0 + "@headlessui/react": ^1.5.0 + "@heroicons/react": ^1.0.6 + "@hookform/resolvers": ^2.9.7 + "@juggle/resize-observer": ^3.4.0 + "@next/bundle-analyzer": ^13.1.6 + "@radix-ui/react-accordion": ^1.0.0 + "@radix-ui/react-navigation-menu": ^1.0.0 + "@radix-ui/react-portal": ^1.0.0 + "@radix-ui/react-slider": ^1.0.0 + "@radix-ui/react-tabs": ^1.0.0 + "@radix-ui/react-tooltip": ^1.0.0 + "@stripe/stripe-js": ^1.35.0 + "@tanstack/react-query": ^4.3.9 + "@typeform/embed-react": ^1.2.4 + "@types/bcryptjs": ^2.4.2 + "@types/debounce": ^1.2.1 + "@types/gtag.js": ^0.0.10 + "@types/micro": 7.3.7 + "@types/node": 16.9.1 + "@types/react": 18.0.26 + "@types/react-gtm-module": ^2.0.1 + "@vercel/analytics": ^0.1.6 + "@vercel/edge-functions-ui": ^0.2.1 + autoprefixer: ^10.4.12 + bcryptjs: ^2.4.3 + cobe: ^0.4.1 + concurrently: ^7.6.0 + cross-env: ^7.0.3 + datocms-structured-text-to-plain-text: ^2.0.4 + datocms-structured-text-utils: ^2.0.4 + debounce: ^1.2.1 + env-cmd: ^10.1.0 + eslint: ^8.34.0 + fathom-client: ^3.5.0 + globby: ^13.1.3 + gray-matter: ^4.0.3 + gsap: ^3.11.0 + iframe-resizer-react: ^1.1.0 + keen-slider: ^6.8.0 + lucide-react: ^0.125.0 + micro: ^10.0.1 + next: 13.2.4-canary.5 + next-auth: ^4.20.1 + next-i18next: ^11.3.0 + playwright: ^1.31.2 + postcss: ^8.4.18 + prism-react-renderer: ^1.3.5 + react: ^18.2.0 + react-confetti: ^6.0.1 + react-datocms: ^3.1.0 + react-device-detect: ^2.2.2 + react-dom: ^18.2.0 + react-fast-marquee: ^1.3.5 + react-github-btn: ^1.4.0 + react-hook-form: ^7.43.3 + react-hot-toast: ^2.3.0 + react-live-chat-loader: ^2.8.1 + react-merge-refs: 1.1.0 + react-twemoji: ^0.3.0 + react-use-measure: ^2.1.1 + remark: ^14.0.2 + remark-html: ^14.0.1 + stripe: ^9.16.0 + tailwindcss: ^3.2.1 + typescript: ^4.9.4 + wait-on: ^7.0.1 + zod: ^3.20.2 + languageName: unknown + linkType: soft + "@calcom/whatsapp@workspace:packages/app-store/whatsapp": version: 0.0.0-use.local resolution: "@calcom/whatsapp@workspace:packages/app-store/whatsapp" @@ -6093,7 +6312,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react-dom@npm:^1.3.0": +"@floating-ui/react-dom@npm:^1.0.0, @floating-ui/react-dom@npm:^1.3.0": version: 1.3.0 resolution: "@floating-ui/react-dom@npm:1.3.0" dependencies: @@ -6231,6 +6450,34 @@ __metadata: languageName: node linkType: hard +"@hapi/hoek@npm:^9.0.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.0.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + +"@headlessui/react@npm:^1.5.0": + version: 1.7.13 + resolution: "@headlessui/react@npm:1.7.13" + dependencies: + client-only: ^0.0.1 + peerDependencies: + react: ^16 || ^17 || ^18 + react-dom: ^16 || ^17 || ^18 + checksum: 132e5fce86978b9a6fd9d669fb556acec783debcd8f510c99226b3b3229dad50a13aeed69fc9af66465fc7029487ecfc46e6226f14218b760d5a309e08c0d059 + languageName: node + linkType: hard + "@heroicons/react@npm:^1.0.6": version: 1.0.6 resolution: "@heroicons/react@npm:1.0.6" @@ -7175,6 +7422,13 @@ __metadata: languageName: node linkType: hard +"@jsdevtools/ono@npm:^7.1.3": + version: 7.1.3 + resolution: "@jsdevtools/ono@npm:7.1.3" + checksum: 2297fcd472ba810bffe8519d2249171132844c7174f3a16634f9260761c8c78bc0428a4190b5b6d72d45673c13918ab9844d706c3ed4ef8f62ab11a2627a08ad + languageName: node + linkType: hard + "@json-rpc-tools/provider@npm:^1.5.5": version: 1.7.6 resolution: "@json-rpc-tools/provider@npm:1.7.6" @@ -7206,6 +7460,13 @@ __metadata: languageName: node linkType: hard +"@juggle/resize-observer@npm:^3.4.0": + version: 3.4.0 + resolution: "@juggle/resize-observer@npm:3.4.0" + checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 + languageName: node + linkType: hard + "@lexical/clipboard@npm:0.5.0": version: 0.5.0 resolution: "@lexical/clipboard@npm:0.5.0" @@ -7608,6 +7869,13 @@ __metadata: languageName: node linkType: hard +"@next/env@npm:12.3.4": + version: 12.3.4 + resolution: "@next/env@npm:12.3.4" + checksum: daa3fc11efd1344c503eab41311a0e503ba7fd08607eeb3dc571036a6211eb37959cc4ed48b71dcc411cc214e7623ffd02411080aad3e09dc6a1192d5b256e60 + languageName: node + linkType: hard + "@next/env@npm:13.2.3": version: 13.2.3 resolution: "@next/env@npm:13.2.3" @@ -7615,6 +7883,13 @@ __metadata: languageName: node linkType: hard +"@next/env@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/env@npm:13.2.4-canary.5" + checksum: d46767ba464334b8487b671a9b366b25e7c1b6bf262bd66afd62b07b17f52066158fe69b14db3abc8219e1e580cd60e0655af6c71550506770780d1ba28ae92d + languageName: node + linkType: hard + "@next/eslint-plugin-next@npm:13.2.1": version: 13.2.1 resolution: "@next/eslint-plugin-next@npm:13.2.1" @@ -7624,6 +7899,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-android-arm-eabi@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm-eabi@npm:12.3.4" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@next/swc-android-arm-eabi@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-android-arm-eabi@npm:13.2.3" @@ -7631,6 +7913,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-android-arm-eabi@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-android-arm-eabi@npm:13.2.4-canary.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@next/swc-android-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm64@npm:12.3.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-android-arm64@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-android-arm64@npm:13.2.3" @@ -7638,6 +7934,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-android-arm64@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-android-arm64@npm:13.2.4-canary.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-arm64@npm:12.3.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-darwin-arm64@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-darwin-arm64@npm:13.2.3" @@ -7645,6 +7955,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-arm64@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-darwin-arm64@npm:13.2.4-canary.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-x64@npm:12.3.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@next/swc-darwin-x64@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-darwin-x64@npm:13.2.3" @@ -7652,6 +7976,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-x64@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-darwin-x64@npm:13.2.4-canary.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-freebsd-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-freebsd-x64@npm:12.3.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@next/swc-freebsd-x64@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-freebsd-x64@npm:13.2.3" @@ -7659,6 +7997,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-freebsd-x64@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-freebsd-x64@npm:13.2.4-canary.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-linux-arm-gnueabihf@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm-gnueabihf@npm:12.3.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@next/swc-linux-arm-gnueabihf@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-linux-arm-gnueabihf@npm:13.2.3" @@ -7666,6 +8018,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm-gnueabihf@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-linux-arm-gnueabihf@npm:13.2.4-canary.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@next/swc-linux-arm64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-gnu@npm:12.3.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-arm64-gnu@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-linux-arm64-gnu@npm:13.2.3" @@ -7673,6 +8039,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-gnu@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-linux-arm64-gnu@npm:13.2.4-canary.5" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-arm64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-musl@npm:12.3.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-arm64-musl@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-linux-arm64-musl@npm:13.2.3" @@ -7680,6 +8060,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-musl@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-linux-arm64-musl@npm:13.2.4-canary.5" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-linux-x64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-gnu@npm:12.3.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-x64-gnu@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-linux-x64-gnu@npm:13.2.3" @@ -7687,6 +8081,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-gnu@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-linux-x64-gnu@npm:13.2.4-canary.5" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-x64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-musl@npm:12.3.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-x64-musl@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-linux-x64-musl@npm:13.2.3" @@ -7694,6 +8102,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-musl@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-linux-x64-musl@npm:13.2.4-canary.5" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-win32-arm64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-arm64-msvc@npm:12.3.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-win32-arm64-msvc@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-win32-arm64-msvc@npm:13.2.3" @@ -7701,6 +8123,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-arm64-msvc@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-win32-arm64-msvc@npm:13.2.4-canary.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-win32-ia32-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-ia32-msvc@npm:12.3.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@next/swc-win32-ia32-msvc@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-win32-ia32-msvc@npm:13.2.3" @@ -7708,6 +8144,20 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-ia32-msvc@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-win32-ia32-msvc@npm:13.2.4-canary.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@next/swc-win32-x64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-x64-msvc@npm:12.3.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@next/swc-win32-x64-msvc@npm:13.2.3": version: 13.2.3 resolution: "@next/swc-win32-x64-msvc@npm:13.2.3" @@ -7715,6 +8165,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-x64-msvc@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "@next/swc-win32-x64-msvc@npm:13.2.4-canary.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@node-ipc/js-queue@npm:2.0.3": version: 2.0.3 resolution: "@node-ipc/js-queue@npm:2.0.3" @@ -7975,6 +8432,17 @@ __metadata: languageName: node linkType: hard +"@prisma/debug@npm:4.12.0": + version: 4.12.0 + resolution: "@prisma/debug@npm:4.12.0" + dependencies: + "@types/debug": 4.1.7 + debug: 4.3.4 + strip-ansi: 6.0.1 + checksum: 0ae182634f4a25231ff946768e1da1f694b5141d21c92cb2a142580de30d67ebd1595f8575a4c63356740e415d5d64829449a4710d8421e7147016ea0acb2643 + languageName: node + linkType: hard + "@prisma/engines-version@npm:4.11.0-57.8fde8fef4033376662cad983758335009d522acb": version: 4.11.0-57.8fde8fef4033376662cad983758335009d522acb resolution: "@prisma/engines-version@npm:4.11.0-57.8fde8fef4033376662cad983758335009d522acb" @@ -7989,6 +8457,18 @@ __metadata: languageName: node linkType: hard +"@prisma/generator-helper@npm:^4.0.0": + version: 4.12.0 + resolution: "@prisma/generator-helper@npm:4.12.0" + dependencies: + "@prisma/debug": 4.12.0 + "@types/cross-spawn": 6.0.2 + chalk: 4.1.2 + cross-spawn: 7.0.3 + checksum: b844fcf736c922ce39e6aa1081b7c133b921ceb5d272f51296cf7afc3128ca6085ef1594ce63045ef47a462c56e5e37b9a1094a36d5dd484f77017d6f227641f + languageName: node + linkType: hard + "@prisma/generator-helper@npm:~3.8.1": version: 3.8.1 resolution: "@prisma/generator-helper@npm:3.8.1" @@ -8037,6 +8517,27 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-accordion@npm:^1.0.0": + version: 1.1.1 + resolution: "@radix-ui/react-accordion@npm:1.1.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-collapsible": 1.0.2 + "@radix-ui/react-collection": 1.0.2 + "@radix-ui/react-compose-refs": 1.0.0 + "@radix-ui/react-context": 1.0.0 + "@radix-ui/react-direction": 1.0.0 + "@radix-ui/react-id": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-use-controllable-state": 1.0.0 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: a666da8abca778a150e2cb6d2c0e19fa32912b2cd9aca04359a7a50f238d30b056d46a3119f93376da5ee964262a7fe1174f16e34096d9f51d6639beb9f0e8cd + languageName: node + linkType: hard + "@radix-ui/react-arrow@npm:1.0.0": version: 1.0.0 resolution: "@radix-ui/react-arrow@npm:1.0.0" @@ -8079,6 +8580,26 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-collapsible@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-collapsible@npm:1.0.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-compose-refs": 1.0.0 + "@radix-ui/react-context": 1.0.0 + "@radix-ui/react-id": 1.0.0 + "@radix-ui/react-presence": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-use-controllable-state": 1.0.0 + "@radix-ui/react-use-layout-effect": 1.0.0 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: a0fcfd3aad5159e1fb6fc54fd09210d7de9c1ee1e19739a5a82af81d3f2233e4e5eb204da326f32e2f2a4740aa4c3b42530b61e36b7ced9f857801809d1d3527 + languageName: node + linkType: hard + "@radix-ui/react-collapsible@npm:^1.0.0": version: 1.0.0 resolution: "@radix-ui/react-collapsible@npm:1.0.0" @@ -8130,6 +8651,22 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-collection@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-collection@npm:1.0.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.0 + "@radix-ui/react-context": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-slot": 1.0.1 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: f7d92f52c7f92b53c055370a5cbf077eea54366706eec9100973737577d841c0cc76a2a577fec67dd85b2853d03c20c4810058f0f511821052358439017e9e5d + languageName: node + linkType: hard + "@radix-ui/react-compose-refs@npm:0.1.0": version: 0.1.0 resolution: "@radix-ui/react-compose-refs@npm:0.1.0" @@ -8262,6 +8799,23 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-dismissable-layer@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-compose-refs": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-use-callback-ref": 1.0.0 + "@radix-ui/react-use-escape-keydown": 1.0.2 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: cb2a38a65dd129d1fd58436bedee765f46f6a6edc2ec15d534a1499c10f768ae06ad874704e030c85869b3ee4b61103076a116dfdb7e0c761a8c8cdc30a5c951 + languageName: node + linkType: hard + "@radix-ui/react-dropdown-menu@npm:^1.0.0": version: 1.0.0 resolution: "@radix-ui/react-dropdown-menu@npm:1.0.0" @@ -8421,6 +8975,32 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-navigation-menu@npm:^1.0.0": + version: 1.1.2 + resolution: "@radix-ui/react-navigation-menu@npm:1.1.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-collection": 1.0.2 + "@radix-ui/react-compose-refs": 1.0.0 + "@radix-ui/react-context": 1.0.0 + "@radix-ui/react-direction": 1.0.0 + "@radix-ui/react-dismissable-layer": 1.0.3 + "@radix-ui/react-id": 1.0.0 + "@radix-ui/react-presence": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-use-callback-ref": 1.0.0 + "@radix-ui/react-use-controllable-state": 1.0.0 + "@radix-ui/react-use-layout-effect": 1.0.0 + "@radix-ui/react-use-previous": 1.0.0 + "@radix-ui/react-visually-hidden": 1.0.2 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 2c321a10acf532cfead8f63c1eca9acb742fb94de3d67c8c8e2614845086376995e78cb3d31ac1bc4a915e961e5c19d60b52106c1c9196c9789d4da3e831fd5b + languageName: node + linkType: hard + "@radix-ui/react-popover@npm:^1.0.2": version: 1.0.2 resolution: "@radix-ui/react-popover@npm:1.0.2" @@ -8582,6 +9162,19 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-primitive@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-primitive@npm:1.0.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-slot": 1.0.1 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 070b1770749eb629425ef959c4cdbd86957b83c5286ae4423e55ab1a89fa286a51f5aeee44e3a13eb6ca44771415ac1acbaeb0ba03013b49ecb5253e1a5a8996 + languageName: node + linkType: hard + "@radix-ui/react-radio-group@npm:^1.0.0": version: 1.0.0 resolution: "@radix-ui/react-radio-group@npm:1.0.0" @@ -8626,6 +9219,27 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-roving-focus@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-roving-focus@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-collection": 1.0.2 + "@radix-ui/react-compose-refs": 1.0.0 + "@radix-ui/react-context": 1.0.0 + "@radix-ui/react-direction": 1.0.0 + "@radix-ui/react-id": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-use-callback-ref": 1.0.0 + "@radix-ui/react-use-controllable-state": 1.0.0 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 08f33c7cd2962b5603a83c67e54f4b1d43f89138bc598644bde551845a302da2fc32f53cad712aa2b17915b2c598fc36244d88fbc5f01986ea93d788faf32101 + languageName: node + linkType: hard + "@radix-ui/react-select@npm:^0.1.1": version: 0.1.1 resolution: "@radix-ui/react-select@npm:0.1.1" @@ -8735,6 +9349,26 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-tabs@npm:^1.0.0": + version: 1.0.3 + resolution: "@radix-ui/react-tabs@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.0 + "@radix-ui/react-context": 1.0.0 + "@radix-ui/react-direction": 1.0.0 + "@radix-ui/react-id": 1.0.0 + "@radix-ui/react-presence": 1.0.0 + "@radix-ui/react-primitive": 1.0.2 + "@radix-ui/react-roving-focus": 1.0.3 + "@radix-ui/react-use-controllable-state": 1.0.0 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 603b06a1c071fec7b01cf82c3058aff239079b14f7d7988b559b9877bcd4e3f23d287b8cf38ebef6bb6b0c4f238a80f67525aa5fc9db519fbf1b70777a40f0ec + languageName: node + linkType: hard + "@radix-ui/react-toggle-group@npm:^1.0.0": version: 1.0.0 resolution: "@radix-ui/react-toggle-group@npm:1.0.0" @@ -8980,6 +9614,19 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-visually-hidden@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-visually-hidden@npm:1.0.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.2 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 67c4a55cfad9a8ff519a9b4ce24d2cc9d78c34d08a128a85de1a0a41228fdeb961eaeb4e50ca0d2080c5e31cef6f6e703cb06786579b44e5c66af161b941adb6 + languageName: node + linkType: hard + "@radix-ui/rect@npm:1.0.0": version: 1.0.0 resolution: "@radix-ui/rect@npm:1.0.0" @@ -9244,6 +9891,18 @@ __metadata: languageName: node linkType: hard +"@sentry/browser@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/browser@npm:6.19.7" + dependencies: + "@sentry/core": 6.19.7 + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + tslib: ^1.9.3 + checksum: 071d00c76c2d0384580474c634c58c6196bbd1a3cf510da1309bd1565c57df7422fca8ceb717db189fa557f2c711a21664ee1ab935dfd9869faf416d388e6f78 + languageName: node + linkType: hard + "@sentry/browser@npm:7.20.0": version: 7.20.0 resolution: "@sentry/browser@npm:7.20.0" @@ -9256,6 +9915,22 @@ __metadata: languageName: node linkType: hard +"@sentry/cli@npm:^1.73.0": + version: 1.75.0 + resolution: "@sentry/cli@npm:1.75.0" + dependencies: + https-proxy-agent: ^5.0.0 + mkdirp: ^0.5.5 + node-fetch: ^2.6.7 + progress: ^2.0.3 + proxy-from-env: ^1.1.0 + which: ^2.0.2 + bin: + sentry-cli: bin/sentry-cli + checksum: d5b130bb45bc96d0f738801343455e6a113d1cc9e16166f0d6bfa022809b557159f010677d2dc05adcdfa7f8ad23c401182b6daef720fa2a0bad82fa6e3b2148 + languageName: node + linkType: hard + "@sentry/cli@npm:^1.74.6": version: 1.74.6 resolution: "@sentry/cli@npm:1.74.6" @@ -9273,6 +9948,19 @@ __metadata: languageName: node linkType: hard +"@sentry/core@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/core@npm:6.19.7" + dependencies: + "@sentry/hub": 6.19.7 + "@sentry/minimal": 6.19.7 + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + tslib: ^1.9.3 + checksum: d212e8ef07114549de4a93b81f8bfa217ca1550ca7a5eeaa611e5629faef78ff72663ce561ffa2cff48f3dc556745ef65177044f9965cdd3cbccf617cf3bf675 + languageName: node + linkType: hard + "@sentry/core@npm:7.20.0": version: 7.20.0 resolution: "@sentry/core@npm:7.20.0" @@ -9284,6 +9972,29 @@ __metadata: languageName: node linkType: hard +"@sentry/hub@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/hub@npm:6.19.7" + dependencies: + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + tslib: ^1.9.3 + checksum: 10bb1c5cba1b0f1e27a3dd0a186c22f94aeaf11c4662890ab07b2774f46f46af78d61e3ba71d76edc750a7b45af86edd032f35efecdb4efa2eaf551080ccdcb1 + languageName: node + linkType: hard + +"@sentry/integrations@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/integrations@npm:6.19.7" + dependencies: + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + localforage: ^1.8.1 + tslib: ^1.9.3 + checksum: 6ea22ef8d518e6ade96ad00c07f5346c8316264ae6ec353c299e03d1d3cf4b226f639bde07dd5d1da28feaa031338e75df25fc60a083a24d847f4cfde4dbc8e9 + languageName: node + linkType: hard + "@sentry/integrations@npm:7.20.0": version: 7.20.0 resolution: "@sentry/integrations@npm:7.20.0" @@ -9296,6 +10007,41 @@ __metadata: languageName: node linkType: hard +"@sentry/minimal@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/minimal@npm:6.19.7" + dependencies: + "@sentry/hub": 6.19.7 + "@sentry/types": 6.19.7 + tslib: ^1.9.3 + checksum: 9153ac426ee056fc34c5be898f83d74ec08f559d69f544c5944ec05e584b62ed356b92d1a9b08993a7022ad42b5661c3d72881221adc19bee5fc1af3ad3864a8 + languageName: node + linkType: hard + +"@sentry/nextjs@npm:^6.19.7": + version: 6.19.7 + resolution: "@sentry/nextjs@npm:6.19.7" + dependencies: + "@sentry/core": 6.19.7 + "@sentry/hub": 6.19.7 + "@sentry/integrations": 6.19.7 + "@sentry/node": 6.19.7 + "@sentry/react": 6.19.7 + "@sentry/tracing": 6.19.7 + "@sentry/utils": 6.19.7 + "@sentry/webpack-plugin": 1.18.8 + tslib: ^1.9.3 + peerDependencies: + next: ^10.0.8 || ^11.0 || ^12.0 + react: 15.x || 16.x || 17.x || 18.x + webpack: ">= 4.0.0" + peerDependenciesMeta: + webpack: + optional: true + checksum: f45228d9dd94457db5febca1e7f79b0689000cecc0beb8155724ea69657f871fc0116a3c884be0167196a730856aaf862db7869ef14e16183091ae0607d3a78a + languageName: node + linkType: hard + "@sentry/nextjs@npm:^7.20.0": version: 7.20.0 resolution: "@sentry/nextjs@npm:7.20.0" @@ -9324,6 +10070,22 @@ __metadata: languageName: node linkType: hard +"@sentry/node@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/node@npm:6.19.7" + dependencies: + "@sentry/core": 6.19.7 + "@sentry/hub": 6.19.7 + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + cookie: ^0.4.1 + https-proxy-agent: ^5.0.0 + lru_map: ^0.3.3 + tslib: ^1.9.3 + checksum: 2293b0d1d1f9fac3a451eb94f820bc27721c8edddd1f373064666ddd6272f0a4c70dbe58c6c4b3d3ccaf4578aab8f466d71ee69f6f6ff93521bbb02dfe829ce5 + languageName: node + linkType: hard + "@sentry/node@npm:7.20.0": version: 7.20.0 resolution: "@sentry/node@npm:7.20.0" @@ -9339,6 +10101,22 @@ __metadata: languageName: node linkType: hard +"@sentry/react@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/react@npm:6.19.7" + dependencies: + "@sentry/browser": 6.19.7 + "@sentry/minimal": 6.19.7 + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + hoist-non-react-statics: ^3.3.2 + tslib: ^1.9.3 + peerDependencies: + react: 15.x || 16.x || 17.x || 18.x + checksum: f49b74c617e3d5094109417a4ab957d4304ec5c3c6d7208c93fe484f263c70c9656259471ae0367b75a303466d7715285ae9ac4876927d6bc285dab4d8e1591d + languageName: node + linkType: hard + "@sentry/react@npm:7.20.0": version: 7.20.0 resolution: "@sentry/react@npm:7.20.0" @@ -9354,6 +10132,19 @@ __metadata: languageName: node linkType: hard +"@sentry/tracing@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/tracing@npm:6.19.7" + dependencies: + "@sentry/hub": 6.19.7 + "@sentry/minimal": 6.19.7 + "@sentry/types": 6.19.7 + "@sentry/utils": 6.19.7 + tslib: ^1.9.3 + checksum: 26e7bf435f0478356d95fab50fe4acd2cf449bfdfd457996111aeedd082f6c76f0592abd0c5f5dcfe2b582d3fd7988ffef07787e7ecc7f5d228278731ce6264e + languageName: node + linkType: hard + "@sentry/tracing@npm:7.20.0": version: 7.20.0 resolution: "@sentry/tracing@npm:7.20.0" @@ -9366,6 +10157,13 @@ __metadata: languageName: node linkType: hard +"@sentry/types@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/types@npm:6.19.7" + checksum: f46ef74a33376ad6ea9b128115515c58eb9369d89293c60aa67abca26b5d5d519aa4d0a736db56ae0d75ffd816643d62187018298523cbc2e6c2fb3a6b2a9035 + languageName: node + linkType: hard + "@sentry/types@npm:7.20.0": version: 7.20.0 resolution: "@sentry/types@npm:7.20.0" @@ -9373,6 +10171,16 @@ __metadata: languageName: node linkType: hard +"@sentry/utils@npm:6.19.7": + version: 6.19.7 + resolution: "@sentry/utils@npm:6.19.7" + dependencies: + "@sentry/types": 6.19.7 + tslib: ^1.9.3 + checksum: a000223b9c646c64e3565e79cace1eeb75114342b768367c4dddd646476c215eb1bddfb70c63f05e2352d3bce2d7d415344e4757a001605d0e01ac74da5dd306 + languageName: node + linkType: hard + "@sentry/utils@npm:7.20.0": version: 7.20.0 resolution: "@sentry/utils@npm:7.20.0" @@ -9383,6 +10191,15 @@ __metadata: languageName: node linkType: hard +"@sentry/webpack-plugin@npm:1.18.8": + version: 1.18.8 + resolution: "@sentry/webpack-plugin@npm:1.18.8" + dependencies: + "@sentry/cli": ^1.73.0 + checksum: e159ee1e4b486a6d602bcf04e08ce4f167c9148aa4b612f6871f81954fba0cf607297a77bcda22f6f882266ac715ce8cb7be55858eaebc9fdbb85737ae92eb04 + languageName: node + linkType: hard + "@sentry/webpack-plugin@npm:1.20.0": version: 1.20.0 resolution: "@sentry/webpack-plugin@npm:1.20.0" @@ -9405,6 +10222,29 @@ __metadata: languageName: node linkType: hard +"@sideway/address@npm:^4.1.3": + version: 4.1.4 + resolution: "@sideway/address@npm:4.1.4" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.24.1": version: 0.24.19 resolution: "@sinclair/typebox@npm:0.24.19" @@ -9496,13 +10336,27 @@ __metadata: languageName: node linkType: hard -"@stablelib/base64@npm:^1.0.0": +"@stablelib/base64@npm:^1.0.0, @stablelib/base64@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/base64@npm:1.0.1" checksum: 3ef4466d1d6889ac3fc67407bc21aa079953981c322eeca3b29f426d05506c63011faab1bfc042d7406e0677a94de6c9d2db2ce079afdd1eccae90031bfb5859 languageName: node linkType: hard +"@stablelib/hex@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hex@npm:1.0.1" + checksum: 557f1c5d6b42963deee7627d4be1ae3542607851c5561e9419c42682d09562ebd3a06e2d92e088c52213a71ed121ec38221abfc5acd9e65707a77ecee3c96915 + languageName: node + linkType: hard + +"@stablelib/utf8@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/utf8@npm:1.0.1" + checksum: 098d9446f38a641a8ee265a7fc3467fefd561fc46ca65e1216c1df7a9b4d004e616347ce79f4b83d62e944f0f91d6be4af029ad0b027a20c3271951921ebfac5 + languageName: node + linkType: hard + "@storybook/addon-actions@npm:6.5.13, @storybook/addon-actions@npm:^6.5.13": version: 6.5.13 resolution: "@storybook/addon-actions@npm:6.5.13" @@ -11171,6 +12025,15 @@ __metadata: languageName: node linkType: hard +"@swc/helpers@npm:0.4.11": + version: 0.4.11 + resolution: "@swc/helpers@npm:0.4.11" + dependencies: + tslib: ^2.4.0 + checksum: 736857d524b41a8a4db81094e9b027f554004e0fa3e86325d85bdb38f7e6459ce022db079edb6c61ba0f46fe8583b3e663e95f7acbd13e51b8da6c34e45bba2e + languageName: node + linkType: hard + "@swc/helpers@npm:0.4.14": version: 0.4.14 resolution: "@swc/helpers@npm:0.4.14" @@ -11501,6 +12364,25 @@ __metadata: languageName: node linkType: hard +"@typeform/embed-react@npm:^1.2.4": + version: 1.21.0 + resolution: "@typeform/embed-react@npm:1.21.0" + dependencies: + "@typeform/embed": 1.38.0 + fast-deep-equal: ^3.1.3 + peerDependencies: + react: ">=16.8.0" + checksum: 1d91cb797dfe7b27e08798f7a571f34724a8f56bf9c89a8ed2a454820efce2de4db44fd4a18f446573784c28f79478f269c1719500e1b332e7ea34ea77ffa185 + languageName: node + linkType: hard + +"@typeform/embed@npm:1.38.0": + version: 1.38.0 + resolution: "@typeform/embed@npm:1.38.0" + checksum: 41115134e5cee28f5e031181b4525c7885d23707699cf183921110262717c7544bfd101428267410b812914c235687783e373ce98e37bdc447d72f8177663597 + languageName: node + linkType: hard + "@types/accept-language-parser@npm:1.5.2": version: 1.5.2 resolution: "@types/accept-language-parser@npm:1.5.2" @@ -11713,6 +12595,13 @@ __metadata: languageName: node linkType: hard +"@types/debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "@types/debounce@npm:1.2.1" + checksum: bea6d414acefbee50adfe87cee10f8a855d033e4778567ab03bdc3cb2648b6bf9237ca53f4ee76fe4be75f77f86d4688411499626fe409bc870f53631d24231f + languageName: node + linkType: hard + "@types/debug@npm:4.1.7, @types/debug@npm:^4.0.0": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" @@ -11872,6 +12761,13 @@ __metadata: languageName: node linkType: hard +"@types/gtag.js@npm:^0.0.10": + version: 0.0.10 + resolution: "@types/gtag.js@npm:0.0.10" + checksum: 5c18ffdc64418887763ec1a564e73c9fbf222ff3eece1fbc35a182fdd884e7884bb7708f67e6e4939f157bb9f2cb7a4aff42be7834527e35c5aac4f98783164c + languageName: node + linkType: hard + "@types/hast@npm:^2.0.0": version: 2.3.4 resolution: "@types/hast@npm:2.3.4" @@ -11995,7 +12891,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d @@ -12200,7 +13096,7 @@ __metadata: languageName: node linkType: hard -"@types/parse5@npm:^6.0.3": +"@types/parse5@npm:^6.0.0, @types/parse5@npm:^6.0.3": version: 6.0.3 resolution: "@types/parse5@npm:6.0.3" checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 @@ -12278,6 +13174,13 @@ __metadata: languageName: node linkType: hard +"@types/react-gtm-module@npm:^2.0.1": + version: 2.0.1 + resolution: "@types/react-gtm-module@npm:2.0.1" + checksum: cd57eece80d80453e79b16c977e13d51dc22c19af69a16ac6ea1eda01ab471f4dbe46ce80ce04ef13a0ecd0082372addec4c2e394978d1ce7fe86dbda4dfb922 + languageName: node + linkType: hard + "@types/react-phone-number-input@npm:^3.0.14": version: 3.0.14 resolution: "@types/react-phone-number-input@npm:3.0.14" @@ -12818,6 +13721,15 @@ __metadata: languageName: node linkType: hard +"@vercel/analytics@npm:^0.1.6": + version: 0.1.11 + resolution: "@vercel/analytics@npm:0.1.11" + peerDependencies: + react: ^16.8||^17||^18 + checksum: 05b8180ac6e23ebe7c09d74c43f8ee78c408cd0b6546e676389cbf4fba44dfeeae3648c9b52e2421be64fe3aeee8b026e6ea4bdfc0589fb5780670f2b090a167 + languageName: node + linkType: hard + "@vercel/edge-config@npm:^0.1.1": version: 0.1.1 resolution: "@vercel/edge-config@npm:0.1.1" @@ -13622,7 +14534,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.5, accepts@npm:~1.3.8": +"accepts@npm:^1.3.7, accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -14254,6 +15166,13 @@ __metadata: languageName: node linkType: hard +"array-flatten@npm:^3.0.0": + version: 3.0.0 + resolution: "array-flatten@npm:3.0.0" + checksum: ad00c51ca70cf837501fb6da823ba39bc6a86b43d0b76d840daa02fe0f8e68e94ad5bc2d0d038053118b879aaca8ea6168c32c7387a2fa5b118ad28db4f1f863 + languageName: node + linkType: hard + "array-includes@npm:^3.0.3, array-includes@npm:^3.1.5": version: 3.1.5 resolution: "array-includes@npm:3.1.5" @@ -15025,7 +15944,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.0.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": +"base64-js@npm:^1.0.2, base64-js@npm:^1.1.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 @@ -15392,6 +16311,15 @@ __metadata: languageName: node linkType: hard +"brotli@npm:^1.3.2": + version: 1.3.3 + resolution: "brotli@npm:1.3.3" + dependencies: + base64-js: ^1.1.2 + checksum: 2c97329f4ccb8e4332cedd2f63b85c2e15ffb305b1cbf046df86201434caf93cb7992ca73c0f7053b6a1417f595069ec7783c26e01510cefc10035a0f466e594 + languageName: node + linkType: hard + "browser-assert@npm:^1.2.1": version: 1.2.1 resolution: "browser-assert@npm:1.2.1" @@ -16273,6 +17201,13 @@ __metadata: languageName: node linkType: hard +"chart.js@npm:^3.7.1": + version: 3.9.1 + resolution: "chart.js@npm:3.9.1" + checksum: 9ab0c0ac01215af0b3f020f2e313030fd6e347b48ed17d5484ee9c4e8ead45e78ae71bea16c397621c386b409ce0b14bf17f9f6c2492cd15b56c0f433efdfff6 + languageName: node + linkType: hard + "check-more-types@npm:2.24.0": version: 2.24.0 resolution: "check-more-types@npm:2.24.0" @@ -16466,6 +17401,16 @@ __metadata: languageName: node linkType: hard +"cleye@npm:1.2.1": + version: 1.2.1 + resolution: "cleye@npm:1.2.1" + dependencies: + terminal-columns: ^1.4.1 + type-flag: ^2.1.0 + checksum: 80ccfe7aba18d61bcf30248a7fd55848df50c1eb4215bad8b661716335ae1bca504e649e7b0204976c1d1c104cab0e8d4141d9e9b4333ec3696de11c9ed4a3b7 + languageName: node + linkType: hard + "cli-boxes@npm:^2.2.0, cli-boxes@npm:^2.2.1": version: 2.2.1 resolution: "cli-boxes@npm:2.2.1" @@ -16545,7 +17490,7 @@ __metadata: languageName: node linkType: hard -"client-only@npm:0.0.1": +"client-only@npm:0.0.1, client-only@npm:^0.0.1": version: 0.0.1 resolution: "client-only@npm:0.0.1" checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 @@ -16684,6 +17629,15 @@ __metadata: languageName: node linkType: hard +"cobe@npm:^0.4.1": + version: 0.4.2 + resolution: "cobe@npm:0.4.2" + dependencies: + phenomenon: ^1.6.0 + checksum: 4c11dd8cf3c6614a2ff2f6eacca5283278c6db06c2e441011aa90f58c66d045e66ef98a5e4b9d0282d58ee22f5b87d965538aa4c6064ed97f436f3e4cd9ee3ed + languageName: node + linkType: hard + "code-block-writer@npm:^11.0.0": version: 11.0.0 resolution: "code-block-writer@npm:11.0.0" @@ -16828,6 +17782,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:6.2.0": + version: 6.2.0 + resolution: "commander@npm:6.2.0" + checksum: 59baef90f07ba8ae941e9d41a0a15be721d69e948ff833c218d936ffbbe2141580ce1ae2b1103c41436c30eefd1eb7bc3285de8936cd283fb78409f54a93f45a + languageName: node + linkType: hard + "commander@npm:9.1.0": version: 9.1.0 resolution: "commander@npm:9.1.0" @@ -16835,7 +17796,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.8.1, commander@npm:^2.9.0": +"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.7.1, commander@npm:^2.8.1, commander@npm:^2.9.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -16972,6 +17933,26 @@ __metadata: languageName: node linkType: hard +"concurrently@npm:^7.6.0": + version: 7.6.0 + resolution: "concurrently@npm:7.6.0" + dependencies: + chalk: ^4.1.0 + date-fns: ^2.29.1 + lodash: ^4.17.21 + rxjs: ^7.0.0 + shell-quote: ^1.7.3 + spawn-command: ^0.0.2-1 + supports-color: ^8.1.0 + tree-kill: ^1.2.2 + yargs: ^17.3.1 + bin: + conc: dist/bin/concurrently.js + concurrently: dist/bin/concurrently.js + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e + languageName: node + linkType: hard + "console-browserify@npm:^1.1.0": version: 1.2.0 resolution: "console-browserify@npm:1.2.0" @@ -17003,7 +17984,7 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.2": +"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.2, content-disposition@npm:^0.5.3": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: @@ -17328,6 +18309,18 @@ __metadata: languageName: node linkType: hard +"cross-env@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-env@npm:7.0.3" + dependencies: + cross-spawn: ^7.0.1 + bin: + cross-env: src/bin/cross-env.js + cross-env-shell: src/bin/cross-env-shell.js + checksum: 26f2f3ea2ab32617f57effb70d329c2070d2f5630adc800985d8b30b56e8bf7f5f439dd3a0358b79cee6f930afc23cf8e23515f17ccfb30092c6b62c6b630a79 + languageName: node + linkType: hard + "cross-fetch@npm:3.1.5, cross-fetch@npm:^3.1.4, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" @@ -17337,7 +18330,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -17738,13 +18731,48 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.28.0, date-fns@npm:^2.29.3": +"date-fns@npm:^2.28.0, date-fns@npm:^2.29.1, date-fns@npm:^2.29.3": version: 2.29.3 resolution: "date-fns@npm:2.29.3" checksum: e01cf5b62af04e05dfff921bb9c9933310ed0e1ae9a81eb8653452e64dc841acf7f6e01e1a5ae5644d0337e9a7f936175fd2cb6819dc122fdd9c5e86c56be484 languageName: node linkType: hard +"datocms-listen@npm:^0.1.9": + version: 0.1.14 + resolution: "datocms-listen@npm:0.1.14" + checksum: 220309b8c35179160c2992b4f266cba10093984c51c16f459cc404962c8f5d859d596da42d70e3193190c227e31ac7406f2e2944830a35673be2757f895bfa93 + languageName: node + linkType: hard + +"datocms-structured-text-generic-html-renderer@npm:^2.0.1, datocms-structured-text-generic-html-renderer@npm:^2.0.4": + version: 2.0.4 + resolution: "datocms-structured-text-generic-html-renderer@npm:2.0.4" + dependencies: + datocms-structured-text-utils: ^2.0.4 + checksum: 58831e7bbcf8b8a18eb79af482898ba59b22ca18a52fafd9e855dce91933c26d0ae5ba53f002b1f34f4ebc106eb679232f3d00c560a4921b648a1787546f32b2 + languageName: node + linkType: hard + +"datocms-structured-text-to-plain-text@npm:^2.0.4": + version: 2.0.4 + resolution: "datocms-structured-text-to-plain-text@npm:2.0.4" + dependencies: + datocms-structured-text-generic-html-renderer: ^2.0.4 + datocms-structured-text-utils: ^2.0.4 + checksum: 24b36817849e6f8959bcdb3082f25487584d0f376765c0f1f94f3b549c10502220ea1c4936e6b323cc68d84da75488ce94d68528d9acecb835f3e5bcfb76a84a + languageName: node + linkType: hard + +"datocms-structured-text-utils@npm:^2.0.1, datocms-structured-text-utils@npm:^2.0.4": + version: 2.0.4 + resolution: "datocms-structured-text-utils@npm:2.0.4" + dependencies: + array-flatten: ^3.0.0 + checksum: 9e10d4faae0c47eebeee028cb0e8c459ecea6fb3dc4950ed0ab310d9b7f18d8ee014071142a42098b20c77264b60a2dd928e9a6462ae4ffea50a70d867f82f34 + languageName: node + linkType: hard + "dayjs-business-days2@npm:1.1.0": version: 1.1.0 resolution: "dayjs-business-days2@npm:1.1.0" @@ -17768,6 +18796,13 @@ __metadata: languageName: node linkType: hard +"debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -18093,7 +19128,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:~1.1.2": +"depd@npm:^1.1.0, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 @@ -18107,7 +19142,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.3": +"dequal@npm:^2.0.2, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -18281,6 +19316,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:3.0.0, doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -18290,15 +19334,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - "dom-accessibility-api@npm:^0.5.9": version: 0.5.14 resolution: "dom-accessibility-api@npm:0.5.14" @@ -18519,6 +19554,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^10.0.0": + version: 10.0.0 + resolution: "dotenv@npm:10.0.0" + checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 + languageName: node + linkType: hard + "dotenv@npm:^16.0.0, dotenv@npm:^16.0.1": version: 16.0.1 resolution: "dotenv@npm:16.0.1" @@ -20837,6 +21879,13 @@ __metadata: languageName: node linkType: hard +"fathom-client@npm:^3.5.0": + version: 3.5.0 + resolution: "fathom-client@npm:3.5.0" + checksum: 16299bd50dc6bcc716a0d6c81fdad65272ff4f08d68695b64b00e19a04de14771c96ddc1205ce7c4220eddd0d3cf70c65ee9c8fb32b8b776ef155faf61e44479 + languageName: node + linkType: hard + "fault@npm:^1.0.0": version: 1.0.4 resolution: "fault@npm:1.0.4" @@ -21420,7 +22469,7 @@ __metadata: languageName: node linkType: hard -"fresh@npm:0.5.2": +"fresh@npm:0.5.2, fresh@npm:^0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 @@ -21473,6 +22522,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^8.0.1": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + "fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" @@ -21874,6 +22934,13 @@ __metadata: languageName: node linkType: hard +"github-buttons@npm:^2.22.0": + version: 2.26.0 + resolution: "github-buttons@npm:2.26.0" + checksum: e06e8dd23195201250ba4455e3044f75306fbe76400a3978014a5d7490a24e5e360420f50912e3e00ee5a6fa2ad76afe24ec62f9144d529059bf3c1226498f2a + languageName: node + linkType: hard + "github-slugger@npm:^1.0.0, github-slugger@npm:^1.3.0": version: 1.4.0 resolution: "github-slugger@npm:1.4.0" @@ -22101,7 +23168,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.1.2": +"globby@npm:^13.1.2, globby@npm:^13.1.3": version: 13.1.3 resolution: "globby@npm:13.1.3" dependencies: @@ -22316,6 +23383,13 @@ __metadata: languageName: node linkType: hard +"gsap@npm:^3.11.0": + version: 3.11.5 + resolution: "gsap@npm:3.11.5" + checksum: 0d62c9405ed9703f8c65e6190b648d9691fa84bd03bcde0d286cd29d80c5865c22aa57a128b33299c0c15d41473e83f13be1645700325f3821dd912a3022350d + languageName: node + linkType: hard + "gtoken@npm:^5.0.4": version: 5.3.2 resolution: "gtoken@npm:5.3.2" @@ -22577,6 +23651,21 @@ __metadata: languageName: node linkType: hard +"hast-util-from-parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "hast-util-from-parse5@npm:7.1.2" + dependencies: + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + hastscript: ^7.0.0 + property-information: ^6.0.0 + vfile: ^5.0.0 + vfile-location: ^4.0.0 + web-namespaces: ^2.0.0 + checksum: 7b4ed5b508b1352127c6719f7b0c0880190cf9859fe54ccaf7c9228ecf623d36cef3097910b3874d2fe1aac6bf4cf45d3cc2303daac3135a05e9ade6534ddddb + languageName: node + linkType: hard + "hast-util-parse-selector@npm:^2.0.0": version: 2.2.5 resolution: "hast-util-parse-selector@npm:2.2.5" @@ -22584,6 +23673,15 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^3.0.0": + version: 3.1.1 + resolution: "hast-util-parse-selector@npm:3.1.1" + dependencies: + "@types/hast": ^2.0.0 + checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 + languageName: node + linkType: hard + "hast-util-raw@npm:6.0.1": version: 6.0.1 resolution: "hast-util-raw@npm:6.0.1" @@ -22602,6 +23700,34 @@ __metadata: languageName: node linkType: hard +"hast-util-raw@npm:^7.0.0": + version: 7.2.3 + resolution: "hast-util-raw@npm:7.2.3" + dependencies: + "@types/hast": ^2.0.0 + "@types/parse5": ^6.0.0 + hast-util-from-parse5: ^7.0.0 + hast-util-to-parse5: ^7.0.0 + html-void-elements: ^2.0.0 + parse5: ^6.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 + web-namespaces: ^2.0.0 + zwitch: ^2.0.0 + checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f + languageName: node + linkType: hard + +"hast-util-sanitize@npm:^4.0.0": + version: 4.1.0 + resolution: "hast-util-sanitize@npm:4.1.0" + dependencies: + "@types/hast": ^2.0.0 + checksum: 4f1786d6556bae6485a657a3e77e7e71b573fd20e4e2d70678e0f445eb8fe3dc6c4441cda6d18b89a79b53e2c03b6232eb6c470ecd478737050724ea09398603 + languageName: node + linkType: hard + "hast-util-to-estree@npm:^2.0.0": version: 2.0.2 resolution: "hast-util-to-estree@npm:2.0.2" @@ -22624,6 +23750,25 @@ __metadata: languageName: node linkType: hard +"hast-util-to-html@npm:^8.0.0": + version: 8.0.4 + resolution: "hast-util-to-html@npm:8.0.4" + dependencies: + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + ccount: ^2.0.0 + comma-separated-tokens: ^2.0.0 + hast-util-raw: ^7.0.0 + hast-util-whitespace: ^2.0.0 + html-void-elements: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + stringify-entities: ^4.0.0 + zwitch: ^2.0.4 + checksum: 8f2ae071df2ced5afb4f19f76af8fd3a2f837dc47bcc1c0e0c1578d29dafcd28738f9617505d13c4a2adf13d70e043143e2ad8f130d5554ab4fc11bfa8f74094 + languageName: node + linkType: hard + "hast-util-to-parse5@npm:^6.0.0": version: 6.0.0 resolution: "hast-util-to-parse5@npm:6.0.0" @@ -22637,6 +23782,20 @@ __metadata: languageName: node linkType: hard +"hast-util-to-parse5@npm:^7.0.0": + version: 7.1.0 + resolution: "hast-util-to-parse5@npm:7.1.0" + dependencies: + "@types/hast": ^2.0.0 + comma-separated-tokens: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + web-namespaces: ^2.0.0 + zwitch: ^2.0.0 + checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b + languageName: node + linkType: hard + "hast-util-whitespace@npm:^2.0.0": version: 2.0.0 resolution: "hast-util-whitespace@npm:2.0.0" @@ -22657,6 +23816,19 @@ __metadata: languageName: node linkType: hard +"hastscript@npm:^7.0.0": + version: 7.2.0 + resolution: "hastscript@npm:7.2.0" + dependencies: + "@types/hast": ^2.0.0 + comma-separated-tokens: ^2.0.0 + hast-util-parse-selector: ^3.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae + languageName: node + linkType: hard + "he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -22803,6 +23975,13 @@ __metadata: languageName: node linkType: hard +"html-void-elements@npm:^2.0.0": + version: 2.0.1 + resolution: "html-void-elements@npm:2.0.1" + checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 + languageName: node + linkType: hard + "html-webpack-plugin@npm:^4.0.0": version: 4.5.2 resolution: "html-webpack-plugin@npm:4.5.2" @@ -23205,6 +24384,13 @@ __metadata: languageName: node linkType: hard +"immer@npm:^9.0.15": + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 + languageName: node + linkType: hard + "immutable@npm:^3.8.2, immutable@npm:^3.x.x": version: 3.8.2 resolution: "immutable@npm:3.8.2" @@ -25027,6 +26213,19 @@ __metadata: languageName: node linkType: hard +"joi@npm:^17.7.0": + version: 17.9.1 + resolution: "joi@npm:17.9.1" + dependencies: + "@hapi/hoek": ^9.0.0 + "@hapi/topo": ^5.0.0 + "@sideway/address": ^4.1.3 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 055df3841e00d7ed065ef1cc3330cf69097ab2ffec3083d8b1d6edfd2e25504bf2983f5249d6f0459bcad99fe21bb0c9f6f1cc03569713af27cd5eb00ee7bb7d + languageName: node + linkType: hard + "jose@npm:4.12.0": version: 4.12.0 resolution: "jose@npm:4.12.0" @@ -25403,6 +26602,19 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^5.0.0": + version: 5.0.0 + resolution: "jsonfile@npm:5.0.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^0.1.2 + dependenciesMeta: + graceful-fs: + optional: true + checksum: e0ecff572dba34153a66e3a3bc5c6cb01a2c1d2cf4a2c19b6728dcfcab39d94be9cca4a0fc86a17ff2c815f2aeb43768ac75545780dbea4009433fdc32aa14d1 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -25565,6 +26777,13 @@ __metadata: languageName: node linkType: hard +"keen-slider@npm:^6.8.0": + version: 6.8.5 + resolution: "keen-slider@npm:6.8.5" + checksum: 1ef25cde02636068a0c66de994eb1e5ac1935a1a1f28e5cf4dcbf2c9cf2b802e0e23bdcd97dd9a9ae93de335ccc990379ab21bda75637fe04e86cbb7d799e23a + languageName: node + linkType: hard + "keypress@npm:~0.2.1": version: 0.2.1 resolution: "keypress@npm:0.2.1" @@ -26088,6 +27307,13 @@ __metadata: languageName: node linkType: hard +"lodash.mergewith@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + "lodash.once@npm:^4.0.0, lodash.once@npm:^4.1.1": version: 4.1.1 resolution: "lodash.once@npm:4.1.1" @@ -26331,6 +27557,15 @@ __metadata: languageName: node linkType: hard +"lucide-react@npm:^0.125.0": + version: 0.125.0 + resolution: "lucide-react@npm:0.125.0" + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + checksum: 6d86330fd4316a42624d537cc07adc3c51c18a699a02ef3abbd221c3140ae5ac5685396e1f5cb20f5f5ba80fa100523a5a6811c22a51bd13bbfdf65546cfffdf + languageName: node + linkType: hard + "luxon@npm:^1.26.0": version: 1.28.0 resolution: "luxon@npm:1.28.0" @@ -26768,6 +28003,23 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-hast@npm:^11.0.0": + version: 11.3.0 + resolution: "mdast-util-to-hast@npm:11.3.0" + dependencies: + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + "@types/mdurl": ^1.0.0 + mdast-util-definitions: ^5.0.0 + mdurl: ^1.0.0 + unist-builder: ^3.0.0 + unist-util-generated: ^2.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + checksum: a968d034613aa5cfb44b9c03d8e61a08bb563bfde3a233fb3d83a28857357e2beef56b6767bab2867d3c3796dc5dd796af4d03fb83e3133aeb7f4187b5cc9327 + languageName: node + linkType: hard + "mdast-util-to-hast@npm:^12.1.0": version: 12.1.1 resolution: "mdast-util-to-hast@npm:12.1.1" @@ -26987,7 +28239,7 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": +"merge-descriptors@npm:1.0.1, merge-descriptors@npm:^1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 @@ -27629,6 +28881,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.7": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -27832,6 +29091,15 @@ __metadata: languageName: node linkType: hard +"modify-response-middleware@npm:^1.1.0": + version: 1.1.0 + resolution: "modify-response-middleware@npm:1.1.0" + dependencies: + brotli: ^1.3.2 + checksum: eeee5c14ae9492f8b3949b10786af35e7ff362c1f54ef2015ee4db770492b1ba41ec8b5ffd08dee6401346c94bffff663ef93187c3487913cd3a79df10379081 + languageName: node + linkType: hard + "module-alias@npm:^2.2.2": version: 2.2.2 resolution: "module-alias@npm:2.2.2" @@ -28203,6 +29471,17 @@ __metadata: languageName: node linkType: hard +"next-api-middleware@npm:^1.0.1": + version: 1.0.1 + resolution: "next-api-middleware@npm:1.0.1" + dependencies: + debug: ^4.3.2 + peerDependencies: + next: ">=10" + checksum: c370494616edaef7f8a4efa33c35fe18b1b15405c74f3d77f6475efa5b792346fffd87679affb5936c2fc604bfcd4e64a8e679049a8fc432bf8426eada48c9fc + languageName: node + linkType: hard + "next-auth@npm:^4.20.1": version: 4.20.1 resolution: "next-auth@npm:4.20.1" @@ -28228,6 +29507,17 @@ __metadata: languageName: node linkType: hard +"next-axiom@npm:^0.10.0": + version: 0.10.0 + resolution: "next-axiom@npm:0.10.0" + dependencies: + whatwg-fetch: ^3.6.2 + peerDependencies: + next: ^12.1.4 + checksum: 57aea4edbdab1a4da59eb16644e850a082a23657128f1f953a2b3601b09fa4558090d42b616f8a3e6022c0deef0d95937321f373caa9ca591178dd8445528921 + languageName: node + linkType: hard + "next-axiom@npm:^0.16.0": version: 0.16.0 resolution: "next-axiom@npm:0.16.0" @@ -28281,6 +29571,21 @@ __metadata: languageName: node linkType: hard +"next-swagger-doc@npm:^0.3.4": + version: 0.3.6 + resolution: "next-swagger-doc@npm:0.3.6" + dependencies: + cleye: 1.2.1 + isarray: 2.0.5 + swagger-jsdoc: 6.2.5 + peerDependencies: + next: ">=9" + bin: + next-swagger-doc-cli: dist/cli.js + checksum: b9e11ecda6327e4a881a61f17b96407d9a260a532467b3552eb4bdb874c48889fc437db437395c121c80b33ba3be87cbff00f34c6f103259df78588227c83a2e + languageName: node + linkType: hard + "next-themes@npm:^0.0.8": version: 0.0.8 resolution: "next-themes@npm:0.0.8" @@ -28320,6 +29625,165 @@ __metadata: languageName: node linkType: hard +"next-transpile-modules@npm:^9.0.0": + version: 9.1.0 + resolution: "next-transpile-modules@npm:9.1.0" + dependencies: + enhanced-resolve: ^5.10.0 + escalade: ^3.1.1 + checksum: 8cc46196db3c2d2063fb29fe5b4d03c21065ab08130085b24d61e4ed512d99c12083d28179771cf02f70f8bf5970db0781a228aacf6cc61662dbdcabaddfc472 + languageName: node + linkType: hard + +"next-validations@npm:^0.2.0": + version: 0.2.1 + resolution: "next-validations@npm:0.2.1" + peerDependencies: + next: "*" + checksum: f0af51cd0e07e5ece3353b290f36c36f859436b465071a0765cc0dcea630ecccaaa217cf992e174b9f357a6ca24ea65c85084bb0c4bc2029d4b2ac93c1a66ca2 + languageName: node + linkType: hard + +"next@npm:13.2.4-canary.5": + version: 13.2.4-canary.5 + resolution: "next@npm:13.2.4-canary.5" + dependencies: + "@next/env": 13.2.4-canary.5 + "@next/swc-android-arm-eabi": 13.2.4-canary.5 + "@next/swc-android-arm64": 13.2.4-canary.5 + "@next/swc-darwin-arm64": 13.2.4-canary.5 + "@next/swc-darwin-x64": 13.2.4-canary.5 + "@next/swc-freebsd-x64": 13.2.4-canary.5 + "@next/swc-linux-arm-gnueabihf": 13.2.4-canary.5 + "@next/swc-linux-arm64-gnu": 13.2.4-canary.5 + "@next/swc-linux-arm64-musl": 13.2.4-canary.5 + "@next/swc-linux-x64-gnu": 13.2.4-canary.5 + "@next/swc-linux-x64-musl": 13.2.4-canary.5 + "@next/swc-win32-arm64-msvc": 13.2.4-canary.5 + "@next/swc-win32-ia32-msvc": 13.2.4-canary.5 + "@next/swc-win32-x64-msvc": 13.2.4-canary.5 + "@swc/helpers": 0.4.14 + caniuse-lite: ^1.0.30001406 + postcss: 8.4.14 + styled-jsx: 5.1.1 + peerDependencies: + "@opentelemetry/api": ^1.4.0 + fibers: ">= 3.1.0" + node-sass: ^6.0.0 || ^7.0.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-android-arm-eabi": + optional: true + "@next/swc-android-arm64": + optional: true + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-freebsd-x64": + optional: true + "@next/swc-linux-arm-gnueabihf": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: 47616f1ebbf0e716ca67313d247d56f646e1f663dcfc99125a0e882ed74a6ebc2c776a7e05438b4e928d38d8dae42933c5b314dfb8e4c0a566edd0e26647335a + languageName: node + linkType: hard + +"next@npm:^12.2.5": + version: 12.3.4 + resolution: "next@npm:12.3.4" + dependencies: + "@next/env": 12.3.4 + "@next/swc-android-arm-eabi": 12.3.4 + "@next/swc-android-arm64": 12.3.4 + "@next/swc-darwin-arm64": 12.3.4 + "@next/swc-darwin-x64": 12.3.4 + "@next/swc-freebsd-x64": 12.3.4 + "@next/swc-linux-arm-gnueabihf": 12.3.4 + "@next/swc-linux-arm64-gnu": 12.3.4 + "@next/swc-linux-arm64-musl": 12.3.4 + "@next/swc-linux-x64-gnu": 12.3.4 + "@next/swc-linux-x64-musl": 12.3.4 + "@next/swc-win32-arm64-msvc": 12.3.4 + "@next/swc-win32-ia32-msvc": 12.3.4 + "@next/swc-win32-x64-msvc": 12.3.4 + "@swc/helpers": 0.4.11 + caniuse-lite: ^1.0.30001406 + postcss: 8.4.14 + styled-jsx: 5.0.7 + use-sync-external-store: 1.2.0 + peerDependencies: + fibers: ">= 3.1.0" + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-android-arm-eabi": + optional: true + "@next/swc-android-arm64": + optional: true + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-freebsd-x64": + optional: true + "@next/swc-linux-arm-gnueabihf": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: d96fc4f5bcd5a630d74111519f4820dcbd75dddf16c6d00d2167bd3cb8d74965d46d83c8e5ec301bf999013c7d96f1bfff9424f0221317d68b594c4d01f5825e + languageName: node + linkType: hard + "next@npm:^13.2.1": version: 13.2.3 resolution: "next@npm:13.2.3" @@ -28574,6 +30038,24 @@ __metadata: languageName: node linkType: hard +"node-mocks-http@npm:^1.11.0": + version: 1.12.2 + resolution: "node-mocks-http@npm:1.12.2" + dependencies: + accepts: ^1.3.7 + content-disposition: ^0.5.3 + depd: ^1.1.0 + fresh: ^0.5.2 + merge-descriptors: ^1.0.1 + methods: ^1.1.2 + mime: ^1.3.4 + parseurl: ^1.3.3 + range-parser: ^1.2.0 + type-is: ^1.6.18 + checksum: 39e50b7146bd37fd56a0588ee3df46fd310f76395d52e9b8889545910aca6cc8e8a41de3cdd3e103903d4bbfc556e67624fcbe934c0bd3b0cca6ee1358a0f440 + languageName: node + linkType: hard + "node-releases@npm:^2.0.2": version: 2.0.2 resolution: "node-releases@npm:2.0.2" @@ -28871,6 +30353,13 @@ __metadata: languageName: node linkType: hard +"object-path@npm:^0.11.8": + version: 0.11.8 + resolution: "object-path@npm:0.11.8" + checksum: 684ccf0fb6b82f067dc81e2763481606692b8485bec03eb2a64e086a44dbea122b2b9ef44423a08e09041348fe4b4b67bd59985598f1652f67df95f0618f5968 + languageName: node + linkType: hard + "object-visit@npm:^1.0.0": version: 1.0.1 resolution: "object-visit@npm:1.0.1" @@ -29662,7 +31151,7 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": +"parseurl@npm:^1.3.3, parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 @@ -29943,6 +31432,13 @@ __metadata: languageName: node linkType: hard +"phenomenon@npm:^1.6.0": + version: 1.6.0 + resolution: "phenomenon@npm:1.6.0" + checksum: e05ca8223a9df42c5cee02c082103ef96a349424fec18a8478d2171060a63095e21bef394529263c64d8082aff43204a0fa1355211fd7ac2a338c2839fffbca3 + languageName: node + linkType: hard + "phin@npm:^2.9.1": version: 2.9.3 resolution: "phin@npm:2.9.3" @@ -30103,6 +31599,26 @@ __metadata: languageName: node linkType: hard +"playwright-core@npm:1.32.2": + version: 1.32.2 + resolution: "playwright-core@npm:1.32.2" + bin: + playwright: cli.js + checksum: ff000cbf280e5d558fe70fd3edf14910a2e86ec68b04e28327176268345be7b3f88a5d22d78e8dae677dd633dce6cd493237df199773b55312f2ae1ab85d711f + languageName: node + linkType: hard + +"playwright@npm:^1.31.2": + version: 1.32.2 + resolution: "playwright@npm:1.32.2" + dependencies: + playwright-core: 1.32.2 + bin: + playwright: cli.js + checksum: 36967299a5c4c02830bcb7fb94b96d6c6a7a2d7e749feb924509e89b1fdc34f8ee2218cfaf75e5f32572663568b468ad28fdc170bced41869d5ed69f9a7ff384 + languageName: node + linkType: hard + "pngjs@npm:^3.0.0, pngjs@npm:^3.3.0, pngjs@npm:^3.3.3": version: 3.4.0 resolution: "pngjs@npm:3.4.0" @@ -30649,6 +32165,33 @@ __metadata: languageName: node linkType: hard +"prism-react-renderer@npm:^1.3.5": + version: 1.3.5 + resolution: "prism-react-renderer@npm:1.3.5" + peerDependencies: + react: ">=0.14.9" + checksum: c18806dcbc4c0b4fd6fd15bd06b4f7c0a6da98d93af235c3e970854994eb9b59e23315abb6cfc29e69da26d36709a47e25da85ab27fed81b6812f0a52caf6dfa + languageName: node + linkType: hard + +"prisma-field-encryption@npm:^1.4.0": + version: 1.4.1 + resolution: "prisma-field-encryption@npm:1.4.1" + dependencies: + "@47ng/cloak": ^1.1.0 + "@prisma/generator-helper": ^4.0.0 + debug: ^4.3.4 + immer: ^9.0.15 + object-path: ^0.11.8 + zod: ^3.17.3 + peerDependencies: + "@prisma/client": ^3.8.0 || ^4 + bin: + prisma-field-encryption: dist/generator/main.js + checksum: cf059abc1c39ae9252494aaf6ce2bfa0f415583b8cd11b9d84eeadfbb504e00f61570b0e3158ba4b7d52daf91353ffe92766a717c03b9965c421cc08ed49c303 + languageName: node + linkType: hard + "prisma@npm:^4.11.0": version: 4.11.0 resolution: "prisma@npm:4.11.0" @@ -31134,7 +32677,7 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": +"range-parser@npm:^1.2.0, range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 @@ -31243,6 +32786,16 @@ __metadata: languageName: node linkType: hard +"react-chartjs-2@npm:^4.0.1": + version: 4.3.1 + resolution: "react-chartjs-2@npm:4.3.1" + peerDependencies: + chart.js: ^3.5.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 574d12cc43b9b4a0f1e04cc692982e16ef7083c03da2a8a9fc2180fe9bcadc793008f81d8f4eec5465925eff84c95d7c523cb74376858b363ae75a83bb3c2a5d + languageName: node + linkType: hard + "react-colorful@npm:^5.6.0": version: 5.6.0 resolution: "react-colorful@npm:5.6.0" @@ -31253,6 +32806,17 @@ __metadata: languageName: node linkType: hard +"react-confetti@npm:^6.0.1": + version: 6.1.0 + resolution: "react-confetti@npm:6.1.0" + dependencies: + tween-functions: ^1.2.0 + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 + checksum: 24b6975df144d2bf09d8e1c95ddc49e547775f911efaa8d96b49e522659d931539e9d9e48cc0db3a01f3a671be7e3824e6e728db85096f5527db5d1c69ebb153 + languageName: node + linkType: hard + "react-copy-to-clipboard@npm:5.0.4": version: 5.0.4 resolution: "react-copy-to-clipboard@npm:5.0.4" @@ -31286,6 +32850,23 @@ __metadata: languageName: node linkType: hard +"react-datocms@npm:^3.1.0": + version: 3.1.4 + resolution: "react-datocms@npm:3.1.4" + dependencies: + datocms-listen: ^0.1.9 + datocms-structured-text-generic-html-renderer: ^2.0.1 + datocms-structured-text-utils: ^2.0.1 + react-intersection-observer: ^8.33.1 + react-string-replace: ^1.1.0 + universal-base64: ^2.1.0 + use-deep-compare-effect: ^1.6.1 + peerDependencies: + react: ">= 16.12.0" + checksum: 54aba12aef4937175c2011548a8a576c96c8d8a596e84d191826910624c1d596e76a49782689dc236388a10803b02e700ac820cb7500cca7fd147a81f6c544c3 + languageName: node + linkType: hard + "react-debounce-input@npm:=3.2.4": version: 3.2.4 resolution: "react-debounce-input@npm:3.2.4" @@ -31298,6 +32879,18 @@ __metadata: languageName: node linkType: hard +"react-device-detect@npm:^2.2.2": + version: 2.2.3 + resolution: "react-device-detect@npm:2.2.3" + dependencies: + ua-parser-js: ^1.0.33 + peerDependencies: + react: ">= 0.14.0" + react-dom: ">= 0.14.0" + checksum: 42d9b3182b9d2495bf0d7914c9f370da51d8bdb853a3eba2acaf433894ae760386a075ba103185be825b33d42f50d85ef462087f261656d433f4c74dab23861f + languageName: node + linkType: hard + "react-devtools-core@npm:^4.19.1": version: 4.24.6 resolution: "react-devtools-core@npm:4.24.6" @@ -31403,6 +32996,16 @@ __metadata: languageName: node linkType: hard +"react-fast-marquee@npm:^1.3.5": + version: 1.3.5 + resolution: "react-fast-marquee@npm:1.3.5" + peerDependencies: + react: ">= 16.8.0 || 18.0.0" + react-dom: ">= 16.8.0 || 18.0.0" + checksum: 95301d63faa858ac0e8c2ab32e1e864ed49d8b36e96216960af0ac797bc30fe11c7747b9c3bed3728f5371e57a93277a064fd433c6f8e1a24a9a32bbf1d354e8 + languageName: node + linkType: hard + "react-feather@npm:^2.0.10": version: 2.0.10 resolution: "react-feather@npm:2.0.10" @@ -31428,6 +33031,17 @@ __metadata: languageName: node linkType: hard +"react-github-btn@npm:^1.4.0": + version: 1.4.0 + resolution: "react-github-btn@npm:1.4.0" + dependencies: + github-buttons: ^2.22.0 + peerDependencies: + react: ">=16.3.0" + checksum: 33a416ad76ab4cc9238ac5cf5cfcab636bb2127c48fb30805385350fd3a3c2aa0aaeb78f6c726c52a0d3d133ca469be35d4b3d188c8e40c735c7ff458d2c8c3c + languageName: node + linkType: hard + "react-hook-form@npm:^7.43.3": version: 7.43.3 resolution: "react-hook-form@npm:7.43.3" @@ -31521,6 +33135,15 @@ __metadata: languageName: node linkType: hard +"react-intersection-observer@npm:^8.33.1": + version: 8.34.0 + resolution: "react-intersection-observer@npm:8.34.0" + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0|| ^18.0.0 + checksum: 7713fecfd1512c7f5a60f9f0bf15403b8f8bbd4110bcafaeaea6de36a0e0eb60368c3638f99e9c97b75ad8fc787ea48c241dcb5c694f821d7f2976f709082cc5 + languageName: node + linkType: hard + "react-intl@npm:^5.25.1": version: 5.25.1 resolution: "react-intl@npm:5.25.1" @@ -31582,7 +33205,16 @@ __metadata: languageName: node linkType: hard -"react-merge-refs@npm:^1.0.0": +"react-live-chat-loader@npm:^2.8.1": + version: 2.8.1 + resolution: "react-live-chat-loader@npm:2.8.1" + peerDependencies: + react: ^16.14.0 || ^17.0.0 || ^18.0.0 + checksum: 784648dc5c8e56ad11517433b2685c4e562efde6116d03444d2e8a0f87076860712800551698f82e980939ed3ac305947b78a514187ae2d5a1a0fc0a659c5c22 + languageName: node + linkType: hard + +"react-merge-refs@npm:1.1.0, react-merge-refs@npm:^1.0.0": version: 1.1.0 resolution: "react-merge-refs@npm:1.1.0" checksum: 90884352999002d868ab9f1bcfe3222fb0f2178ed629f1da7e98e5a9b02a2c96b4aa72800db92aabd69d2483211b4be57a2088e89a11a0b660e7ada744d4ddf7 @@ -31836,6 +33468,13 @@ __metadata: languageName: node linkType: hard +"react-string-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "react-string-replace@npm:1.1.0" + checksum: 5df67fbdb49cacdc9f4488d4bc3dedef1f85d6156b3626d9b4b6c317ec8cc534494def078ab0b2df7aea8fa3cbcecd8d3f76a161f04bf8b29869daccf33785ec + languageName: node + linkType: hard + "react-style-singleton@npm:^2.1.0": version: 2.1.1 resolution: "react-style-singleton@npm:2.1.1" @@ -31944,6 +33583,20 @@ __metadata: languageName: node linkType: hard +"react-twemoji@npm:^0.3.0": + version: 0.3.0 + resolution: "react-twemoji@npm:0.3.0" + dependencies: + lodash.isequal: ^4.5.0 + prop-types: ^15.7.2 + twemoji: ^13.0.1 + peerDependencies: + react: ^16.4.2 + react-dom: ^16.4.2 + checksum: d4e56477c28c0ad65b98a062a2e9a1777b808a16c05dfa35d77d84fea26f7d1e884d2e30f95a8f14c94c31330d3d4f53a4fd0bfce917bc4be9fb21d34a05db8a + languageName: node + linkType: hard + "react-use-intercom@npm:1.5.1": version: 1.5.1 resolution: "react-use-intercom@npm:1.5.1" @@ -31954,6 +33607,18 @@ __metadata: languageName: node linkType: hard +"react-use-measure@npm:^2.1.1": + version: 2.1.1 + resolution: "react-use-measure@npm:2.1.1" + dependencies: + debounce: ^1.2.1 + peerDependencies: + react: ">=16.13" + react-dom: ">=16.13" + checksum: b8e8939229d463c3c505f7b617925c0228efae0cd6f651371f463846417b06c9170be57df51293a61027c41770f8a090fdb8a08717c4e36290ccb496e0318f1f + languageName: node + linkType: hard + "react-virtual@npm:^2.8.2": version: 2.10.4 resolution: "react-virtual@npm:2.10.4" @@ -32379,6 +34044,19 @@ __metadata: languageName: node linkType: hard +"remark-html@npm:^14.0.1": + version: 14.0.1 + resolution: "remark-html@npm:14.0.1" + dependencies: + "@types/mdast": ^3.0.0 + hast-util-sanitize: ^4.0.0 + hast-util-to-html: ^8.0.0 + mdast-util-to-hast: ^11.0.0 + unified: ^10.0.0 + checksum: 5d689b05dc6b4f24e08ece07aabca98685949198a8b6ceacb2fbf7fba8f45f55cea5623caddfd92aaf6e6f082bc1c93797dfb82dc48a6f6e1c5263947a4779c9 + languageName: node + linkType: hard + "remark-mdx@npm:1.6.22": version: 1.6.22 resolution: "remark-mdx@npm:1.6.22" @@ -33050,6 +34728,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.0.0, rxjs@npm:^7.8.0": + version: 7.8.0 + resolution: "rxjs@npm:7.8.0" + dependencies: + tslib: ^2.1.0 + checksum: 61b4d4fd323c1043d8d6ceb91f24183b28bcf5def4f01ca111511d5c6b66755bc5578587fe714ef5d67cf4c9f2e26f4490d4e1d8cabf9bd5967687835e9866a2 + languageName: node + linkType: hard + "rxjs@npm:^7.5.5": version: 7.5.5 resolution: "rxjs@npm:7.5.5" @@ -33059,6 +34746,13 @@ __metadata: languageName: node linkType: hard +"s-ago@npm:^2.2.0": + version: 2.2.0 + resolution: "s-ago@npm:2.2.0" + checksum: f665fef44d9d88322ce5a798ca3c49b40f96231ddc7bd46dc23c883e98215675aa422985760d45d3779faa3c0bc94edb2a50630bf15f54c239d11963e53d998c + languageName: node + linkType: hard + "sade@npm:^1.7.3": version: 1.8.1 resolution: "sade@npm:1.8.1" @@ -33685,6 +35379,13 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.7.3": + version: 1.8.0 + resolution: "shell-quote@npm:1.8.0" + checksum: 6ef7c5e308b9c77eedded882653a132214fa98b4a1512bb507588cf6cd2fc78bfee73e945d0c3211af028a1eabe09c6a19b96edd8977dc149810797e93809749 + languageName: node + linkType: hard + "short-uuid@npm:^4.2.0": version: 4.2.0 resolution: "short-uuid@npm:4.2.0" @@ -34021,6 +35722,13 @@ __metadata: languageName: node linkType: hard +"spawn-command@npm:^0.0.2-1": + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.1.1 resolution: "spdx-correct@npm:3.1.1" @@ -34850,6 +36558,20 @@ __metadata: languageName: node linkType: hard +"styled-jsx@npm:5.0.7": + version: 5.0.7 + resolution: "styled-jsx@npm:5.0.7" + peerDependencies: + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + checksum: 61959993915f4b1662a682dbbefb3512de9399cf6901969bcadd26ba5441d2b5ca5c1021b233bbd573da2541b41efb45d56c6f618dbc8d88a381ebc62461fefe + languageName: node + linkType: hard + "styled-jsx@npm:5.1.1": version: 5.1.1 resolution: "styled-jsx@npm:5.1.1" @@ -34959,7 +36681,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -35047,6 +36769,31 @@ __metadata: languageName: node linkType: hard +"swagger-jsdoc@npm:6.2.5": + version: 6.2.5 + resolution: "swagger-jsdoc@npm:6.2.5" + dependencies: + commander: 6.2.0 + doctrine: 3.0.0 + glob: 7.1.6 + lodash.mergewith: ^4.6.2 + swagger-parser: 10.0.2 + yaml: 2.0.0-1 + bin: + swagger-jsdoc: bin/swagger-jsdoc.js + checksum: 8ad468bce4934fdca4e5a857fda9cbf98f305b73ffa0ca3ebb5dc34e8c53452c01684010bfa487f17179b860b6b3291e7e5b14433007ca79109dfc7a10441864 + languageName: node + linkType: hard + +"swagger-parser@npm:10.0.2": + version: 10.0.2 + resolution: "swagger-parser@npm:10.0.2" + dependencies: + "@apidevtools/swagger-parser": 10.0.2 + checksum: 02aa7d6caa5dde20fe93f00928a7803b11099a7cffa70c1750b89add23e8dfb220ee5354d3f691dce91300f25dd155060be9a28ed7772d6aa4ff4ab3f5a36db0 + languageName: node + linkType: hard + "swagger-ui-react@npm:4.11.1": version: 4.11.1 resolution: "swagger-ui-react@npm:4.11.1" @@ -35120,6 +36867,15 @@ __metadata: languageName: node linkType: hard +"swr@npm:^1.2.2": + version: 1.3.0 + resolution: "swr@npm:1.3.0" + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + checksum: e7a184f0d560e9c8be85c023cc8e65e56a88a6ed46f9394b301b07f838edca23d2e303685319a4fcd620b81d447a7bcb489c7fa0a752c259f91764903c690cdb + languageName: node + linkType: hard + "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -35344,6 +37100,13 @@ __metadata: languageName: node linkType: hard +"terminal-columns@npm:^1.4.1": + version: 1.4.1 + resolution: "terminal-columns@npm:1.4.1" + checksum: 54a3d625963fa9cb2110bd2af982f31865438c7cf3dfe95d8e9c453c3cd67b7352fa4a78e8b31dc6f4955ccd9fe2ab8ac8224c5b1db61c6226364a12150739bc + languageName: node + linkType: hard + "terminal-link@npm:^2.0.0": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" @@ -35821,6 +37584,15 @@ __metadata: languageName: node linkType: hard +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + "trim-newlines@npm:^1.0.0": version: 1.0.0 resolution: "trim-newlines@npm:1.0.0" @@ -36214,6 +37986,13 @@ __metadata: languageName: node linkType: hard +"tween-functions@npm:^1.2.0": + version: 1.2.0 + resolution: "tween-functions@npm:1.2.0" + checksum: 880708d680eff5c347ddcb9f922ad121703a91c78ce308ed309073e73a794b633eb0b80589a839365803f150515ad34c9646809ae8a0e90f09e62686eefb1ab6 + languageName: node + linkType: hard + "tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -36228,6 +38007,25 @@ __metadata: languageName: node linkType: hard +"twemoji-parser@npm:13.1.0": + version: 13.1.0 + resolution: "twemoji-parser@npm:13.1.0" + checksum: 8046ce003c03dd92d68c2648cfbfa39c659fca4f05c10da8d14957985dc3c0c680f3ecf2de8245dc1ddffedc5b2a675f2032053e1e77cc7474301a88fe192ad3 + languageName: node + linkType: hard + +"twemoji@npm:^13.0.1": + version: 13.1.1 + resolution: "twemoji@npm:13.1.1" + dependencies: + fs-extra: ^8.0.1 + jsonfile: ^5.0.0 + twemoji-parser: 13.1.0 + universalify: ^0.1.2 + checksum: f60a8785ad6eb1a673c4f1bccb00a852ead13639db9f763c0e3e9dee6e3e67d88f1d2b481bcee34c35570ab060918b30b6ee68aa65ea1042ad35cd83212a102a + languageName: node + linkType: hard + "twilio@npm:^3.80.1": version: 3.80.1 resolution: "twilio@npm:3.80.1" @@ -36328,7 +38126,14 @@ __metadata: languageName: node linkType: hard -"type-is@npm:~1.6.18": +"type-flag@npm:^2.1.0": + version: 2.2.0 + resolution: "type-flag@npm:2.2.0" + checksum: 728218708795c84b81a4923049b357be1ad12880e15f39940cba89472664b590368d3383f254246876edbd2eb01872b4675be62570088d7377f052420f5e9c9a + languageName: node + linkType: hard + +"type-is@npm:^1.6.18, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -36450,6 +38255,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^4.7.4": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + languageName: node + linkType: hard + "typescript@npm:^4.9.4": version: 4.9.4 resolution: "typescript@npm:4.9.4" @@ -36460,6 +38275,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^4.7.4#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=23ec76" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ab417a2f398380c90a6cf5a5f74badd17866adf57f1165617d6a551f059c3ba0a3e4da0d147b3ac5681db9ac76a303c5876394b13b3de75fdd5b1eaa06181c9d + languageName: node + linkType: hard + "typescript@patch:typescript@^4.9.4#~builtin": version: 4.9.4 resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=23ec76" @@ -36470,6 +38295,20 @@ __metadata: languageName: node linkType: hard +"tzdata@npm:^1.0.30": + version: 1.0.38 + resolution: "tzdata@npm:1.0.38" + checksum: 866abff1316bd1311057f5de9da702c78a27f3bba213aa6986e8e4d22d0d25b554dda2330e6d853e2c34566270bb327babe467ad9a5f069ad466f09571872800 + languageName: node + linkType: hard + +"ua-parser-js@npm:^1.0.33": + version: 1.0.35 + resolution: "ua-parser-js@npm:1.0.35" + checksum: 02370d38a0c8b586f2503d1c3bbba5cbc0b97d407282f9023201a99e4c03eae4357a2800fdf50cf80d73ec25c0b0cc5bfbaa03975b0add4043d6e4c86712c9c1 + languageName: node + linkType: hard + "uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5": version: 1.0.6 resolution: "uc.micro@npm:1.0.6" @@ -36854,6 +38693,13 @@ __metadata: languageName: node linkType: hard +"universal-base64@npm:^2.1.0": + version: 2.1.0 + resolution: "universal-base64@npm:2.1.0" + checksum: 03bc6f7de04aee83038c26038cd2639f470fd9665f99b3613934c4ccde5d59047d45e34ea4c843ac582da83ea1b050bf8defba8eb390e566f0be314646ddbc9b + languageName: node + linkType: hard + "universalify@npm:^0.1.0, universalify@npm:^0.1.2": version: 0.1.2 resolution: "universalify@npm:0.1.2" @@ -37093,6 +38939,18 @@ __metadata: languageName: node linkType: hard +"use-deep-compare-effect@npm:^1.6.1": + version: 1.8.1 + resolution: "use-deep-compare-effect@npm:1.8.1" + dependencies: + "@babel/runtime": ^7.12.5 + dequal: ^2.0.2 + peerDependencies: + react: ">=16.13" + checksum: 2b9b6291df3f772f44d259b352e5d998963ccee0db2efeb76bb05525d928064aeeb69bb0dee5a5e428fea7cf3db67c097a770ebd30caa080662b565f6ef02b2e + languageName: node + linkType: hard + "use-isomorphic-layout-effect@npm:^1.1.1, use-isomorphic-layout-effect@npm:^1.1.2": version: 1.1.2 resolution: "use-isomorphic-layout-effect@npm:1.1.2" @@ -37330,6 +39188,13 @@ __metadata: languageName: node linkType: hard +"validator@npm:^13.6.0": + version: 13.9.0 + resolution: "validator@npm:13.9.0" + checksum: e2c936f041f61faa42bafd17c6faddf939498666cd82e88d733621c286893730b008959f4cb12ab3e236148a4f3805c30b85e3dcf5e0efd8b0cbcd36c02bfc0c + languageName: node + linkType: hard + "varint@npm:^5.0.0": version: 5.0.2 resolution: "varint@npm:5.0.2" @@ -37362,6 +39227,16 @@ __metadata: languageName: node linkType: hard +"vfile-location@npm:^4.0.0": + version: 4.1.0 + resolution: "vfile-location@npm:4.1.0" + dependencies: + "@types/unist": ^2.0.0 + vfile: ^5.0.0 + checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 + languageName: node + linkType: hard + "vfile-message@npm:^2.0.0": version: 2.0.4 resolution: "vfile-message@npm:2.0.4" @@ -37545,6 +39420,21 @@ __metadata: languageName: node linkType: hard +"wait-on@npm:^7.0.1": + version: 7.0.1 + resolution: "wait-on@npm:7.0.1" + dependencies: + axios: ^0.27.2 + joi: ^17.7.0 + lodash: ^4.17.21 + minimist: ^1.2.7 + rxjs: ^7.8.0 + bin: + wait-on: bin/wait-on + checksum: 1e8a17d8ee6436f71d3ab82781ce31267481fcd7bbccde49b0f8124871e6e40a1acac3401f04f775ba6203853a5813352fa131620fc139914351f3b2894d573f + languageName: node + linkType: hard + "walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -37622,6 +39512,13 @@ __metadata: languageName: node linkType: hard +"web-namespaces@npm:^2.0.0": + version: 2.0.1 + resolution: "web-namespaces@npm:2.0.1" + checksum: b6d9f02f1a43d0ef0848a812d89c83801d5bbad57d8bb61f02eb6d7eb794c3736f6cc2e1191664bb26136594c8218ac609f4069722c6f56d9fc2d808fa9271c6 + languageName: node + linkType: hard + "web-streams-polyfill@npm:4.0.0-beta.1": version: 4.0.0-beta.1 resolution: "web-streams-polyfill@npm:4.0.0-beta.1" @@ -38734,6 +40631,13 @@ __metadata: languageName: node linkType: hard +"yaml@npm:2.0.0-1": + version: 2.0.0-1 + resolution: "yaml@npm:2.0.0-1" + checksum: ccfbd1424dbf205a8828593faa91dfd40bd21e3fb575e257280d3526ade9508f3ea0acbe7605abc81bac6b4d6729ddb5b3de6bd818232f48480fd1eda8d7fd4c + languageName: node + linkType: hard + "yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" @@ -38926,6 +40830,23 @@ __metadata: languageName: node linkType: hard +"z-schema@npm:^4.2.3": + version: 4.2.4 + resolution: "z-schema@npm:4.2.4" + dependencies: + commander: ^2.7.1 + lodash.get: ^4.4.2 + lodash.isequal: ^4.5.0 + validator: ^13.6.0 + dependenciesMeta: + commander: + optional: true + bin: + z-schema: bin/z-schema + checksum: 9afc0b8d4f75122fbbac8835b0398fc6ab3cfa3f68792e4e86edcd9be1e9ae9d982368a8ae25a4eeea6aad3ab35a24379b76e1525b105c23169c4f93b3185004 + languageName: node + linkType: hard + "zenscroll@npm:^4.0.2": version: 4.0.2 resolution: "zenscroll@npm:4.0.2" @@ -38953,6 +40874,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.17.3, zod@npm:^3.18.0": + version: 3.21.4 + resolution: "zod@npm:3.21.4" + checksum: f185ba87342ff16f7a06686767c2b2a7af41110c7edf7c1974095d8db7a73792696bcb4a00853de0d2edeb34a5b2ea6a55871bc864227dace682a0a28de33e1f + languageName: node + linkType: hard + "zod@npm:^3.20.2": version: 3.20.2 resolution: "zod@npm:3.20.2" @@ -39007,3 +40935,10 @@ __metadata: checksum: 8edd7af8375f12f64d8dbef815af32cd77bd9237d0b013210ba4e3aef25fdc460fe264cd0a19deabe9f86ef0c607240ebac1a336bf4a70bf06ef53e0652de116 languageName: node linkType: hard + +"zwitch@npm:^2.0.4": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 + languageName: node + linkType: hard