From c764216a9c67963c582458e852dfeaa71e5129a9 Mon Sep 17 00:00:00 2001 From: Alder Whiteford Date: Sun, 9 Jun 2024 19:44:40 -0400 Subject: [PATCH] Calendar init --- frontend/mobile/app.json | 2 +- frontend/mobile/app/(app)/(tabs)/calendar.tsx | 60 +- frontend/mobile/app/(app)/(tabs)/index.tsx | 3 - .../Calendar/Agenda/AgendaDateSection.tsx | 53 - .../components/Calendar/Agenda/AgendaList.tsx | 130 -- .../components/Calendar/Calendar.tsx | 639 ++++-- .../{TestComponent => Calendar}/Day.tsx | 11 +- ...endaTimeSection.tsx => DayTimeSection.tsx} | 46 +- .../components/Calendar/mockData.ts | 343 ---- .../Calendar/parser/calendarParser.ts | 220 +++ .../TestComponent/TestComponent.tsx | 543 ------ .../TestComponent/mock/mockData.tsx | 135 -- frontend/mobile/app/_layout.tsx | 4 +- frontend/mobile/package.json | 11 +- frontend/mobile/store/store.ts | 16 +- frontend/mobile/yarn.lock | 1723 +---------------- 16 files changed, 848 insertions(+), 3091 deletions(-) delete mode 100644 frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaDateSection.tsx delete mode 100644 frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaList.tsx rename frontend/mobile/app/(design-system)/components/{TestComponent => Calendar}/Day.tsx (84%) rename frontend/mobile/app/(design-system)/components/Calendar/{Agenda/AgendaTimeSection.tsx => DayTimeSection.tsx} (71%) delete mode 100644 frontend/mobile/app/(design-system)/components/Calendar/mockData.ts create mode 100644 frontend/mobile/app/(design-system)/components/Calendar/parser/calendarParser.ts delete mode 100644 frontend/mobile/app/(design-system)/components/TestComponent/TestComponent.tsx delete mode 100644 frontend/mobile/app/(design-system)/components/TestComponent/mock/mockData.tsx diff --git a/frontend/mobile/app.json b/frontend/mobile/app.json index 7e6b9e368..c5018a02a 100644 --- a/frontend/mobile/app.json +++ b/frontend/mobile/app.json @@ -2,7 +2,7 @@ "expo": { "name": "sac-mobile", "slug": "student-activity-calendar", - "version": "1.0.2", + "version": "1.0.3", "orientation": "portrait", "icon": "./assets/images/icon.png", "scheme": "myapp", diff --git a/frontend/mobile/app/(app)/(tabs)/calendar.tsx b/frontend/mobile/app/(app)/(tabs)/calendar.tsx index 8f35e2cd8..a6d2233d4 100644 --- a/frontend/mobile/app/(app)/(tabs)/calendar.tsx +++ b/frontend/mobile/app/(app)/(tabs)/calendar.tsx @@ -1,36 +1,39 @@ import { SafeAreaView } from 'react-native'; -import InfiniteScrollCarousel, { DAY_EPOCH_TIME, FetchNewEventsPropsUnion, RefreshDirection } from '@/app/(design-system)/components/TestComponent/TestComponent'; import { useCallback, useEffect, useRef, useState } from 'react'; -import { EventSection } from '@/app/(design-system)/components/Calendar/mockData'; -import { getEvents } from '@/app/(design-system)/components/TestComponent/mock/mockData'; import { CalendarProvider, ExpandableCalendar } from 'react-native-calendars-sac'; import { Box, createStyles } from '@/app/(design-system)'; import { Theme } from 'react-native-calendars-sac/src/types'; +import { EventSection } from '@/app/(design-system)/components/Calendar/DayTimeSection'; +import Calendar, { DAY_EPOCH_TIME, FetchNewEventsPropsUnion } from '@/app/(design-system)/components/Calendar/Calendar'; +import { eventApi } from '@generatesac/lib'; +import { parseData } from '@/app/(design-system)/components/Calendar/parser/calendarParser'; const TODAY = new Date(); -const calendarTheme: Theme = { - selectedDayBackgroundColor: 'black', - todayTextColor: 'black', - arrowColor: 'black', - textMonthFontWeight: 'bold' -}; - const BATCH_SIZE = 15 const BATCH_SIZE_HALF = Math.floor(BATCH_SIZE / 2); const CalendarPage = () => { const [loadedEvents, setLoadedEvents] = useState([]); - const [isLoading, setIsLoading] = useState(true); const [minDate, setMinDate] = useState(TODAY.getTime() - DAY_EPOCH_TIME * BATCH_SIZE_HALF); const [maxDate, setMaxDate] = useState(TODAY.getTime() + DAY_EPOCH_TIME * BATCH_SIZE_HALF); const [datePress, setDatePress] = useState(false); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(false); const oldEvents = useRef([]); const recentRefresh = useRef(); + const [getEvents] = eventApi.useLazyEventsQuery({}); const emptyDatePlaceholder = new Array(BATCH_SIZE_HALF).fill({}); + const calendarTheme: Theme = { + selectedDayBackgroundColor: 'black', + todayTextColor: 'black', + arrowColor: 'black', + textMonthFontWeight: 'bold' + }; + useEffect(() => { fetchNewEvents({ direction: 'base', @@ -39,17 +42,23 @@ const CalendarPage = () => { }, []); const fetchEvents = async (startTime: number, endTime: number) => { - const events = getEvents(startTime, endTime); - return events; - }; + const start = new Date(startTime).toISOString().split('T')[0]; + const end = new Date(endTime).toISOString().split('T')[0]; + + return await getEvents({ start, end }).then(({ data, error }) => { + if (error) { + setError(true); + } + + return parseData(startTime, endTime, data); + }) + } const fetchNewEvents = useCallback(async (props: FetchNewEventsPropsUnion) => { - // Create a random string identifier for the refresh: + const { direction } = props; const refreshId = Math.random().toString(36).substring(7); recentRefresh.current = refreshId; - console.log('refreshID:', refreshId); - const { direction } = props; if (direction === 'start') { // Store the old events: oldEvents.current = [...loadedEvents]; @@ -57,12 +66,12 @@ const CalendarPage = () => { setIsLoading(true); setTimeout(async () => { - const newEvents = await fetchEvents(minDate - DAY_EPOCH_TIME * BATCH_SIZE_HALF, minDate - DAY_EPOCH_TIME); + const newEvents = await fetchEvents(minDate - DAY_EPOCH_TIME * BATCH_SIZE_HALF, minDate); if (recentRefresh.current !== refreshId) return; setMinDate(minDate - DAY_EPOCH_TIME * BATCH_SIZE_HALF); setLoadedEvents([...newEvents, ...oldEvents.current]); - setIsLoading(false) - }, 2000) + setIsLoading(false); + }, 200); } if (direction === 'end') { // Store the old events: @@ -71,12 +80,12 @@ const CalendarPage = () => { setIsLoading(true); setTimeout(async () => { - const newEvents = await fetchEvents(maxDate + DAY_EPOCH_TIME, maxDate + DAY_EPOCH_TIME * (BATCH_SIZE_HALF + 1)); + const newEvents = await fetchEvents(maxDate, maxDate + DAY_EPOCH_TIME * (BATCH_SIZE_HALF + 1)); if (recentRefresh.current !== refreshId) return; setMaxDate(maxDate + DAY_EPOCH_TIME * (BATCH_SIZE_HALF + 1)); setLoadedEvents([...oldEvents.current, ...newEvents]); setIsLoading(false); - }, 2000); + }, 200) } if (direction === 'base') { const { date } = props; @@ -88,12 +97,10 @@ const CalendarPage = () => { setIsLoading(true); setTimeout(async () => { const newEvents = await fetchEvents(minDateNew, maxDateNew); - console.log(new Date(minDateNew), new Date(maxDateNew)); if (recentRefresh.current !== refreshId) return; - console.log('request not cancelled!'); setLoadedEvents(newEvents); setIsLoading(false); - }, 3000) + }, 200) } else return; }, [minDate, maxDate, loadedEvents]); @@ -118,7 +125,7 @@ const CalendarPage = () => { /> - { refetchEvents={fetchNewEvents} datePress={datePress} setDatePress={setDatePress} + error={error} /> diff --git a/frontend/mobile/app/(app)/(tabs)/index.tsx b/frontend/mobile/app/(app)/(tabs)/index.tsx index 47e719396..ce8d2a90b 100644 --- a/frontend/mobile/app/(app)/(tabs)/index.tsx +++ b/frontend/mobile/app/(app)/(tabs)/index.tsx @@ -1,9 +1,6 @@ import { SafeAreaView, StyleSheet, Text } from 'react-native'; import { GlobalLayout } from '@/app/(design-system)/components/GlobalLayout/GlobalLayout'; -import InfiniteScrollCarousel from '@/app/(design-system)/components/TestComponent/TestComponent'; -import { getEvents } from '@/app/(design-system)/components/TestComponent/mock/mockData'; -import { EventSection } from '@/app/(design-system)/components/Calendar/mockData'; import { useCallback, useEffect, useState } from 'react'; const HomePage = () => { diff --git a/frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaDateSection.tsx b/frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaDateSection.tsx deleted file mode 100644 index ace00cf51..000000000 --- a/frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaDateSection.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { forwardRef } from 'react'; - -import { formatTime } from '@/utils/time'; - -import { Box } from '../../Box/Box'; -import { Text } from '../../Text/Text'; -import { EventSection } from '../mockData'; -import AgendaTimeSection from './AgendaTimeSection'; - -type AgendaSectionProps = { - section: EventSection; -}; - -function formatSectionHeader(date: string) { - let addedZero = false; - const { date: dayOfMonth, dayOfWeek } = formatTime( - new Date(date + 'T00:00:00') - ); - if (dayOfMonth.length < 2) { - addedZero = true; - } - - return `${dayOfWeek} ${addedZero ? '0' : ''}${dayOfMonth}`; -} - -export const AgendaDateSection = forwardRef(function AgendaDateSection( - { section }: AgendaSectionProps, - ref -) { - const keys = Object.keys(section.data).sort(); - - return ( - - - {formatSectionHeader(section.date)} - - {keys.map((key, index) => { - return ( - - ); - })} - {keys.length === 0 && ( - - No Events Today - - )} - - ); -}); diff --git a/frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaList.tsx b/frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaList.tsx deleted file mode 100644 index df1152df5..000000000 --- a/frontend/mobile/app/(design-system)/components/Calendar/Agenda/AgendaList.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import React, { useCallback, useContext, useEffect, useRef, useState } from 'react'; -import { Dimensions, ListRenderItem, ViewToken } from 'react-native'; -import { CalendarContext } from 'react-native-calendars-sac'; -import { UpdateSources } from 'react-native-calendars-sac/src/expandableCalendar/commons'; -import { FlatList } from 'react-native-gesture-handler'; - -import { Box } from '../../Box/Box'; -import { EventCardCalendarSkeleton } from '../../EventCard/Skeletons/EventCardCalendarSkeleton'; -import { EventSection } from '../mockData'; -import { AgendaDateSection } from './AgendaDateSection'; -import { Spacing } from '@/app/(design-system)/shared/spacing'; - -const { width: screenWidth } = Dimensions.get('window'); -const width = screenWidth - (Spacing.s * 2); - -export type AgendaListProps = { - sections: EventSection[]; - fetchData: (direction: 'up' | 'down') => void; - isLoading: boolean; - autoScroll: boolean; - setAutoScroll: React.Dispatch>; - setCurrentIndex: React.Dispatch>; - ref: React.MutableRefObject | null>; -}; - -export default function AgendaList({ - sections, - fetchData, - isLoading, - autoScroll, - setAutoScroll, - setCurrentIndex, - ref, -}: AgendaListProps) { - const { date, setDate } = useContext(CalendarContext); - const currentSection = useRef(null); - const [scrolling, setScrolling] = useState(false); - - const scrollToDate = useCallback( - (dateSections: EventSection[]) => { - const index = dateSections.findIndex( - (section) => section.date === date - ); - if (index !== -1) { - setScrolling(true); - ref.current?.scrollToIndex({ - index, - animated: true, - viewOffset: 1, - viewPosition: 0 - }); - setTimeout(() => { - setScrolling(false); - setAutoScroll(false); - }, 500); - currentSection.current = dateSections[index].date; - } - }, - [date, setAutoScroll] - ); - - const onViewableItemsChanged = ({ - viewableItems - }: { - viewableItems: ViewToken[]; - }) => { - const currentItem = viewableItems?.[0]?.item.date; - if (currentItem && currentItem !== date && !scrolling) { - currentSection.current = currentItem; - setDate?.(viewableItems[0].item.date, UpdateSources.LIST_DRAG); - } - setCurrentIndex(viewableItems[0].index); - }; - - useEffect(() => { - if (currentSection.current === date || !autoScroll) return; - scrollToDate(sections); - }, [date, autoScroll, scrollToDate, sections]); - - const renderItem: ListRenderItem = ({ item, index }) => { - return ( - - - - ); - }; - - const loadingComponent = () => { - if (isLoading) { - return ( - - - - - - ); - } else { - return null; - } - }; - - return ( - fetchData('down')} - onStartReached={() => fetchData('up')} - ref={ref} - showsVerticalScrollIndicator={false} - onViewableItemsChanged={onViewableItemsChanged} - horizontal - snapToAlignment="center" - decelerationRate="fast" - pagingEnabled - getItemLayout={(_, index) => ({ - length: width, - offset: width * index, - index, - })} - initialScrollIndex={7} - maintainVisibleContentPosition={{ - minIndexForVisible: 1, - autoscrollToTopThreshold: 10, - }} - /> - ); -} \ No newline at end of file diff --git a/frontend/mobile/app/(design-system)/components/Calendar/Calendar.tsx b/frontend/mobile/app/(design-system)/components/Calendar/Calendar.tsx index 66bec4cba..2d79fa4c6 100644 --- a/frontend/mobile/app/(design-system)/components/Calendar/Calendar.tsx +++ b/frontend/mobile/app/(design-system)/components/Calendar/Calendar.tsx @@ -1,130 +1,527 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { - CalendarProvider, - ExpandableCalendar -} from 'react-native-calendars-sac'; -import { Theme } from 'react-native-calendars-sac/src/types'; - -import { getMarkedDates } from '@/utils/mock'; - -import { createStyles } from '../../theme'; -import { Box } from '../Box/Box'; -import { GlobalLayout } from '../GlobalLayout/GlobalLayout'; -import AgendaList from './Agenda/AgendaList'; -import { EventSection, fetchEvents } from './mockData'; -import { Dimensions } from 'react-native'; -import { FlatList } from 'react-native-gesture-handler'; - -const FETCH_RANGE = 1000 * 60 * 60 * 24 * 13; -const NEXT_DAY = 1000 * 60 * 60 * 24; - -const calendarTheme: Theme = { - selectedDayBackgroundColor: 'black', - todayTextColor: 'black', - arrowColor: 'black', - textMonthFontWeight: 'bold' -}; - -export default function Calendar() { - const [isLoading, setIsLoading] = useState(true); - const [events, setEvents] = useState([]); - const [autoScroll, setAutoScroll] = useState(false); - const [minDate, _] = useState(new Date().getTime()); - const [maxDate, setMaxDate] = useState(new Date().getTime()); - const [currentIndex, setCurrentIndex] = useState(null); - const eventList = useRef | null>(null); - - const fetchData = useCallback( - async (direction = 'up') => { - console.log('fetching data!') - setIsLoading(true); - setTimeout(() => { - const time = - direction === 'up' ? minDate - FETCH_RANGE : maxDate; - fetchEvents(time, FETCH_RANGE).then((data) => { - if (direction === 'down') { - console.log('setting date end') - setEvents((oldData) => [...oldData, ...data]); - } else { - console.log('setting date beginning') - prependData(data) - } - setIsLoading(false); - setMaxDate((oldDate) => oldDate + FETCH_RANGE + NEXT_DAY); - }); - }, 0); - }, - [minDate, maxDate] - ); +import { Dimensions, Animated, Easing } from "react-native"; +import { useContext, useEffect, useRef, useState } from "react"; +import { GestureEventPayload, PanGestureHandler, PanGestureHandlerEventPayload, ScrollView, State } from "react-native-gesture-handler"; +import Day from "@/app/(design-system)/components/Calendar/Day"; +import { Spacing } from "@/app/(design-system)/shared/spacing"; +import { EventCardCalendarSkeleton } from "@/app/(design-system)/components/EventCard/Skeletons/EventCardCalendarSkeleton"; +import { CalendarContext } from "react-native-calendars-sac"; +import { UpdateSources } from "react-native-calendars-sac/src/expandableCalendar/commons"; +import { EventSection } from "@/app/(design-system)/components/Calendar/DayTimeSection"; +import { Box } from "@/app/(design-system)/components/Box/Box"; +import { Text } from "../Text/Text"; + +type SwipeDirection = 'left' | 'right'; + +type FetchNewEventsProps = { + direction: 'base'; + date: string; + } +type FetchNewEventsPropsWithoutDate = { + direction: 'start' | 'end'; +} + +export type FetchNewEventsPropsUnion = FetchNewEventsProps | FetchNewEventsPropsWithoutDate; +export type RefreshDirection = 'start' | 'end' | 'base'; + + +export const DAY_EPOCH_TIME = 1000 * 60 * 60 * 24; + +type InfiniteScrollCarouselProps = { + // The events currently loaded waiting to be rendered / currently being rendered + loadedEvents: EventSection[]; + // The number of events to load at a time + loadBatchSize: number, + // Whether the component is currently loading a full batch of new events + isLoading: boolean, + // Refresh threshhold for loading new events: a number between 0 and 1: + refreshThreshhold: number, + // Callback function to intiate on threshold reach: + refetchEvents: (props: FetchNewEventsPropsUnion) => Promise, + // Check to see if the API call has errored: + error?: boolean, + // State variable to track whether a date was pressed or not: + datePress: boolean, + // Function to set the date press state: + setDatePress: React.Dispatch>, +} + +export default function Calendar({ + loadedEvents, + loadBatchSize, + isLoading, + refreshThreshhold, + refetchEvents, + error, + datePress, + setDatePress, +}: InfiniteScrollCarouselProps) { + // Ensure that the load batch size is at least 3: + if (loadBatchSize < 3) { + throw new Error('Load batch size must be at least 3'); + } + + // Extract the width of the view: + const { width } = Dimensions.get('window'); + + // Keep track of the index being viewed: + const main_index = useRef(1); + + // Keep track of the index of the data being viewed: + const data_index_array = useRef([ + Math.floor(loadBatchSize / 2) - 1, + Math.floor(loadBatchSize / 2), + Math.floor(loadBatchSize / 2) + 1 + ]); - const fetchNextPage = async (direction: 'up' | 'down') => { - if (isLoading) return; - fetchData(direction); - }; + // Keep track of the animated translation of each of the views: + const translateX_array = useRef([ + new Animated.Value(-width), + new Animated.Value(0), + new Animated.Value(width), + ]); + // Keep track of the translations in number form for use in logical operations: + const record_translateX_array = useRef([-width, 0, width]) + + // Keep track of the old translation value: + const old_translateX = useRef(0) + + // Keep track of the number of events loaded on most recent batch: + const old_events = useRef([]); + + const recent_refresh_direction = useRef('end'); + + // The number of items away from the edge that will trigger a refetch: + const refresh_threshold_item_count = Math.floor(Math.floor(loadBatchSize / 2) * Math.min(Math.abs(refreshThreshhold), 1)); + + // Current events being rendered: + const [events, setEvents] = useState([]) + + // Keep track if the page has been initially loaded: + const [initialLoadComplete, setInitialLoadComplete] = useState(false); + + /** + * CODE FOR CONNECTING COMPONENT TO CALENDAR + * - Is entirely dependent on the react-native-calendars dep + **/ + const { date, setDate } = useContext(CalendarContext) + + // useEffect for handling the initial load: useEffect(() => { - fetchData('down'); - }, []); + if (!isLoading && !initialLoadComplete) { + console.log('handling initial load', loadedEvents) + updateEventsToCurrent(loadedEvents, 'base'); + setInitialLoadComplete(true); + old_events.current = [...loadedEvents]; + } + }, [isLoading]); + + // useEffect for handling events added after initial load is complete: + useEffect(() => { + if (loadedEvents && initialLoadComplete) { + const totalNewEvents = loadedEvents.length - old_events.current.length; + if (recent_refresh_direction.current === 'start') { + data_index_array.current = data_index_array.current.map((index) => index + totalNewEvents) + } - const prependData = (newSections: EventSection[]) => { - console.log(currentIndex); - if (currentIndex !== null) { - const newScrollOffset = (currentIndex + newSections.length) * Dimensions.get('window').width; - console.log(newScrollOffset); - setEvents((prevSections) => [...newSections, ...prevSections]); - console.log("scrolling"); - eventList.current?.scrollToOffset({ offset: newScrollOffset, animated: false }); + // Handle when the user is looking at a loading screen: + if (!old_events.current[data_index_array.current[main_index.current]]?.date) { + updateEventsToCurrent(loadedEvents, 'base'); + } + old_events.current = [...loadedEvents] } - }; + }, [loadedEvents]) - return ( - - - - setAutoScroll(true)} - closeOnDayPress={false} - disableWeekScroll={true} - /> - - - - - - + useEffect(() => { + if (datePress) { + handleCalendarDateSelect( + loadedEvents, + date, + data_index_array.current, + main_index.current + ); + setDatePress(false); + } + }, [datePress]) + + // Handle swipe gestures: + const handleGestureEvent = Animated.event( + [{}], + { + listener: ({ nativeEvent }: { nativeEvent: Readonly }) => { + // Record the translation of each view: + record_translateX_array.current.forEach((_, index, arr) => { + arr[index] += (nativeEvent.translationX - old_translateX.current) + }) + + // Update the animated values: + translateX_array.current.forEach((translateX, index) => { + translateX.setValue(record_translateX_array.current[index]) + }) + + old_translateX.current = nativeEvent.translationX + }, + useNativeDriver: false, + } ); -} -const styles = createStyles({ - expandableCalendarContainer: { - backgroundColor: 'white', - borderBottomStartRadius: 'lg', - borderBottomEndRadius: 'lg', - shadowColor: 'black', - shadowOffset: { width: 0, height: 5 }, - shadowOpacity: 0.2 - }, - expandableCalendarSubContainer: { - borderBottomStartRadius: 'lg', - borderBottomEndRadius: 'lg', - backgroundColor: 'white', - overflow: 'hidden' + const handleCalendarDateSelect = async ( + loadedEvents: EventSection[], + newSelectedDateString: string, + dataIndexArray: number[], + mainIndex: number, + ) => { + // If there are no events loaded: + if (loadedEvents.length === 0) { + return; + } + + const earliestDate = new Date(loadedEvents[0].date); + const latestDate = new Date(loadedEvents[loadedEvents.length - 1].date); + const currentDate = new Date(loadedEvents[dataIndexArray[mainIndex]].date) + const newSelectedDate = new Date(newSelectedDateString); + + // If the calendar is currently fetching and the last fetch was an initial load: + if (isLoading && recent_refresh_direction.current === 'base') { + await triggerRefresh('base'); + return; + } + + // Determine the direction of the click: + const direction = newSelectedDate.getTime() > currentDate.getTime() ? 'end' : 'start'; + + // Compute how many indices the select jump is - the number of days between the current day and the selected day: + const daysBetween = Math.floor((newSelectedDate.getTime() - currentDate.getTime()) / DAY_EPOCH_TIME); + + // If date is in the range of the loaded dates: + if (newSelectedDate.getTime() >= earliestDate.getTime() && newSelectedDate.getTime() <= latestDate.getTime()) { + // Update indices: + data_index_array.current = dataIndexArray.map((index) => index + daysBetween) + + // Compute how far away the new index is from the end of the list: + const distanceFromListEnd = direction === 'end' + ? loadedEvents.length - data_index_array.current[mainIndex] + : data_index_array.current[mainIndex]; + + + // Update the events in view: + updateEventsToCurrent(loadedEvents, "base"); + + // Fetch more dates in the direction of click: + if (distanceFromListEnd <= refresh_threshold_item_count) { + await triggerRefresh(direction); + } + } + // If the date is outside the range of the loaded dates: + else { + // Reset initial load: + setInitialLoadComplete(false); + + const indexes = [ + Math.floor(loadBatchSize / 2) - 1, + Math.floor(loadBatchSize / 2), + Math.floor(loadBatchSize / 2) + 1 + ] + + // Reset the data index array: + data_index_array.current = [ + main_index.current === 1 ? indexes[0] : main_index.current === 0 ? indexes[1] : indexes[2], + main_index.current === 1 ? indexes[1] : main_index.current === 0 ? indexes[2] : indexes[0], + main_index.current === 1 ? indexes[2] : main_index.current === 0 ? indexes[0] : indexes[1] + ]; + + // Trigger date refresh: + await triggerRefresh("base"); + } + } + + // Trigger a refresh of events: + const triggerRefresh = async (refreshDirection: RefreshDirection) => { + recent_refresh_direction.current = refreshDirection; + if (refreshDirection === 'base') { + await refetchEvents({ direction: refreshDirection, date: date }); + } else { + await refetchEvents({ direction: refreshDirection }); + } } -}); + + // Update the events to what is currently been viewed: + const updateEventsToCurrent = (loadedEvents: EventSection[], type: SwipeDirection | 'base', targetIndex?: number) => { + if (type === 'base') { + setEvents([ + loadedEvents[data_index_array.current[0]], + loadedEvents[data_index_array.current[1]], + loadedEvents[data_index_array.current[2]] + ]) + old_events.current = [...loadedEvents] + return; + } + + if (targetIndex === undefined) { + throw new Error('Target index must be defined'); + } + if (type === 'left') { + setEvents((prevEvents) => { + prevEvents[targetIndex] = loadedEvents[data_index_array.current[targetIndex]] + return [...prevEvents] + }) + } else { + setEvents((prevEvents) => { + prevEvents[targetIndex] = loadedEvents[data_index_array.current[targetIndex]] + return [...prevEvents] + }) + } + } + + // Used for triggering a date change on the calendar when the user scrolls: + const handleDateChangeOnPan = (direction: SwipeDirection) => { + let directionMultiplier = direction === 'left' ? 1 : -1; + const newDateTimeStamp = new Date(date).getTime() + DAY_EPOCH_TIME * directionMultiplier; + setDate(new Date(newDateTimeStamp).toISOString().split('T')[0], UpdateSources.PAGE_SCROLL); + } + + // Used to handle re-render on pan of react components and trigger data refetch: + const handleCalendarDatePan = async (swipeDirection: SwipeDirection, mainIndex: number) => { + // Update the calendar to reflect the pan: + handleDateChangeOnPan(swipeDirection); + + let targetIndex: number; + if (swipeDirection === 'left') { + targetIndex = mainIndex === 0 ? 2 : mainIndex - 1 + data_index_array.current[targetIndex] += 3; + + // Update the current events in view: + updateEventsToCurrent(loadedEvents, 'left', targetIndex); + + const distanceFromEnd = loadedEvents.length - data_index_array.current[targetIndex] + if (distanceFromEnd === refresh_threshold_item_count) { + await triggerRefresh('end') + } + } + else { + targetIndex = (mainIndex + 1) % 3 + data_index_array.current[targetIndex] -= 3; + + // Update the current events in view: + updateEventsToCurrent(loadedEvents, 'right', targetIndex); + + const distanceFromStart = data_index_array.current[targetIndex] + console.log(distanceFromStart); + console.log(refresh_threshold_item_count); + if (distanceFromStart === refresh_threshold_item_count) { + await triggerRefresh('start') + } + } + } + + // Handle the pan animation: + const handlePanAnimation = async (mainIndex: number) => { + const currIndex = data_index_array.current[mainIndex]; + const beforeThreshold = currIndex === refresh_threshold_item_count + 2 + || currIndex === loadedEvents.length - refresh_threshold_item_count - 1; + + // Card not been fully swiped: + if ((record_translateX_array.current[mainIndex] < width / 3 + && record_translateX_array.current[mainIndex] > -width / 3) + || (isLoading && beforeThreshold)) { + // Set the current translateX value of main index to 0: + record_translateX_array.current[mainIndex] = 0; + + // Set the translate value of the next index to the width of the view: + record_translateX_array.current[(mainIndex + 1) % 3] = width; + + // Set the translate value of the previous index to the negative width of the view: + record_translateX_array.current[mainIndex === 0 ? 2 : (mainIndex - 1) % 3] = -width; + + // Animate the views back to their original positions: + let animation_array = translateX_array.current.map((_, mainIndex) => + Animated.timing(translateX_array.current[mainIndex], { + toValue: record_translateX_array.current[mainIndex], + useNativeDriver: false, + duration: 200, + easing: Easing.out(Easing.ease) + }) + ) + Animated.parallel(animation_array, { stopTogether: true }).start() + return; + } + // Card full swipe left: + if (record_translateX_array.current[mainIndex] < -width / 3) { + // Set the current index translateX value to the negative width of the view: + record_translateX_array.current[mainIndex] = -width; + + // Set the next index translateX value to 0: + record_translateX_array.current[(mainIndex + 1) % 3] = 0; + + // Set the previous index translateX value to be the width of the view: + record_translateX_array.current[mainIndex === 0 ? 2 : mainIndex - 1] = width; + + // Animate the views to their new positions: + let animation_array = translateX_array.current.map((_, index) => { + if (index !== (mainIndex === 0 ? 2 : mainIndex - 1)) { + return Animated.timing(translateX_array.current[index], { + toValue: record_translateX_array.current[index], + useNativeDriver: false, + duration: 150, + easing: Easing.out(Easing.ease) + }) + } + }) as Animated.CompositeAnimation[]; + Animated.parallel(animation_array, { stopTogether: true }).start(async () => { + // Update the main index: + main_index.current = (mainIndex + 1) % 3; + + await handleCalendarDatePan('left', mainIndex) + }) + + + return; + } + // Card full swipe right: + else { + // Set the current index translateX value to the positive width of the view: + record_translateX_array.current[mainIndex] = width; + + // Set the previous index translateX value to 0: + record_translateX_array.current[mainIndex === 0 ? 2 : mainIndex - 1] = 0; + + // Set the next index translateX value to be the negative width of the view: + record_translateX_array.current[(mainIndex + 1) % 3] = -width; + + // Animate the views to their new positions: + let animation_array = translateX_array.current.map((_, index) => { + if (index !== ((mainIndex + 1) % 3)) { + return Animated.timing(translateX_array.current[index], { + toValue: record_translateX_array.current[index], + useNativeDriver: false, + duration: 150, + easing: Easing.out(Easing.ease) + }) + } + }) as Animated.CompositeAnimation[]; + Animated.parallel(animation_array, { stopTogether: true }).start(async () => { + await handleCalendarDatePan('right', mainIndex) + // Update the main index: + main_index.current = mainIndex === 0 ? 2 : mainIndex - 1; + }) + return; + } + } + + const handleStateChanged = ({ nativeEvent }: { nativeEvent: Readonly }) => { + // If the finger has been lifted + if (nativeEvent.state === State.END) { + old_translateX.current = 0; + handlePanAnimation(main_index.current); + } + } + + const renderLoading = () => { + return ( + + + + + + ) + } + + const renderItem = (index: number) => { + const item = events[index]; + + if (item?.date) { + return ( + + + + ) + } + + // If we are waiting to return data: + if (isLoading) { + return (renderLoading()); + } + else { + return ( + + + + ) + } + } + + if (!initialLoadComplete) { + return renderLoading(); + } + + return ( + + + + {renderItem(0)} + + + + + {renderItem(1)} + + + + + {renderItem(2)} + + + + ) +} \ No newline at end of file diff --git a/frontend/mobile/app/(design-system)/components/TestComponent/Day.tsx b/frontend/mobile/app/(design-system)/components/Calendar/Day.tsx similarity index 84% rename from frontend/mobile/app/(design-system)/components/TestComponent/Day.tsx rename to frontend/mobile/app/(design-system)/components/Calendar/Day.tsx index 197d46753..4aec7edab 100644 --- a/frontend/mobile/app/(design-system)/components/TestComponent/Day.tsx +++ b/frontend/mobile/app/(design-system)/components/Calendar/Day.tsx @@ -1,10 +1,7 @@ -import { forwardRef } from 'react'; - import { formatTime } from '@/utils/time'; -import { EventSection } from '../Calendar/mockData'; import { Text } from '../Text/Text'; -import { Box } from '../Box/Box'; -import AgendaTimeSection from '../Calendar/Agenda/AgendaTimeSection'; +import { Box } from '@/app/(design-system)/components/Box/Box'; +import DayTimeSection, { EventSection } from '@/app/(design-system)/components/Calendar/DayTimeSection'; type DayProps = { section: EventSection; @@ -26,6 +23,8 @@ function formatSectionHeader(date: string) { export default function Day({ section, error }: DayProps) { const keys = Object.keys(section.data).sort(); + console.log(error); + return ( @@ -33,7 +32,7 @@ export default function Day({ section, error }: DayProps) { {keys.map((key, index) => { return ( - @@ -69,11 +91,9 @@ export default function AgendaTimeSection({ event={event.title} variant="calendar" tags={event.tags} - club={event.host} - startTime={new Date()} - endTime={ - new Date(new Date().getTime() + 1000000) - } + club={'Generate'} + startTime={new Date(event.startTime)} + endTime={new Date(event.endTime)} logo="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT800M6T7YVq_f6W49g_UNL29US7gC63nTitg&s" image="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQfT6p6kCen0-GphSDogJRd2KoYjg0-QQWuAw9e5JBIBEVTc3Hxho_UwRsZ0IrEi6Ap5oo&usqp=CAU" /> diff --git a/frontend/mobile/app/(design-system)/components/Calendar/mockData.ts b/frontend/mobile/app/(design-system)/components/Calendar/mockData.ts deleted file mode 100644 index 450dd6b8f..000000000 --- a/frontend/mobile/app/(design-system)/components/Calendar/mockData.ts +++ /dev/null @@ -1,343 +0,0 @@ -/** - * TODO: - * - Change the background color the app to white -*/ - -import { Tag } from "@generatesac/lib"; - -const tags: Tag[] = [ - { - id: '1', - created_at: new Date(), - updated_at: new Date(), - name: 'Software', - category_id: '1' - }, - { - id: '2', - created_at: new Date(), - updated_at: new Date(), - name: 'Free Food', - category_id: '2' - }, - { - id: '3', - created_at: new Date(), - updated_at: new Date(), - name: 'Panel Discussion', - category_id: '3' - }, - { - id: '4', - created_at: new Date(), - updated_at: new Date(), - name: 'Seminar', - category_id: '4' - }, - { - id: '5', - created_at: new Date(), - updated_at: new Date(), - name: 'Hackathon', - category_id: '5' - } -]; - -export type EventSection = { - date: string; - data: EventSectionTimes; -}; - -export type EventSectionTimes = { - [key: string]: EventSectionData; -}; - -export type EventSectionData = { - overflow: boolean; - events: EventPreview[]; -}; - -export type EventPreview = { - title: string; - startTime: string; - endTime: string; - host: string; - tags: Tag[]; -}; - -async function generateEvents(startTime: number, dateSpan: number) { - let time = startTime; - const increment = 1000 * 60 * 60 * 24; - const events: EventSection[] = []; - - while (time <= startTime + dateSpan) { - const date = new Date(time).toISOString().split('T')[0]; - events.push({ - date, - data: { - 2000: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: date, - endTime: new Date( - new Date(date).getTime() + 1000 * 60 * 60 - ).toISOString(), - host: 'Generate', - tags: tags - } - ] - }, - 2015: { - overflow: false, - events: [ - { - title: 'Gym Workout', - startTime: date, - endTime: new Date( - new Date(date).getTime() + 1000 * 60 * 60 - ).toISOString(), - host: 'Generate', - tags: tags - } - ] - } - } - }); - time += increment; - } - - return events; -} - -// function generateEvents(endTime: number) { -// let startTime = endTime; -// const events: EventSection[] = []; -// const randomNum = Math.floor(Math.random() * 10) + 1 - -// for (let i = 0; i < randomNum; i++) { -// startTime += 1000 * 60 * 60 * 24; -// const dateStart = new Date(startTime); - -// events.push({ -// date: dateStart.toISOString().split('T')[0], -// data: { -// 2000: [{ -// title: 'Gym Workout', -// startTime: dateStart.toISOString(), -// endTime: dateStart.toISOString(), -// host: 'Generate', -// tags: tags, -// }] -// } -// }) -// } - -// return { events, startTime }; -// } - -export async function fetchEvents(startTime: number, dateSpan: number) { - const events = await generateEvents(startTime, dateSpan); - return events; -} - -export const mockEvents: EventSection[] = [ - { - date: '2024-06-03', - data: {} - }, - { - date: '2024-06-05', - data: { - 2000: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2015: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2100: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - } - } - }, - { - date: '2024-06-07', - data: { - 1900: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 1800: { - overflow: false, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2100: { - overflow: false, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - } - } - }, - { - date: '2024-06-08', - data: { - 2000: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2015: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2100: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - } - } - } -]; diff --git a/frontend/mobile/app/(design-system)/components/Calendar/parser/calendarParser.ts b/frontend/mobile/app/(design-system)/components/Calendar/parser/calendarParser.ts new file mode 100644 index 000000000..3537a032d --- /dev/null +++ b/frontend/mobile/app/(design-system)/components/Calendar/parser/calendarParser.ts @@ -0,0 +1,220 @@ +import { Event } from "@generatesac/lib"; +import { DAY_EPOCH_TIME } from "@/app/(design-system)/components/Calendar/Calendar"; +import { EventPreview, EventSection } from "@/app/(design-system)/components/Calendar/DayTimeSection"; + +export const mockData: Event[] = + [ + { + "id": "ae6e7813-7f9a-48d9-a83d-8d313268617b", + "created_at": "2024-06-07T23:36:29.326493-04:00", + "updated_at": "2024-06-07T23:36:29.326493-04:00", + "name": "All Hands", + "preview": "Join us for mid-semester presentations on all the amazing projects!", + "description": "Wowza", + "host": "464f73bc-198b-48a1-8c38-77bd9ed173be", + "event_type": "hybrid", + "location": "ISEC Auditorium", + "link": "http://www.applytogenerate.com", + "is_public": true, + "is_draft": false, + "is_archived": false, + "start_time": "2024-02-27T14:00:00-05:00", + "end_time": "2024-02-27T16:00:00-05:00" + }, + { + "id": "4b8123f8-82be-4096-b5c9-1c325d97b733", + "created_at": "2024-06-07T23:42:15.588637-04:00", + "updated_at": "2024-06-07T23:42:15.588637-04:00", + "name": "All Hands", + "preview": "Join us for mid-semester presentations on all the amazing projects!", + "description": "Wowza", + "host": "464f73bc-198b-48a1-8c38-77bd9ed173be", + "event_type": "hybrid", + "location": "ISEC Auditorium", + "link": "http://www.applytogenerate.com", + "is_public": true, + "is_draft": false, + "is_archived": false, + "start_time": "2024-02-27T14:00:00-05:00", + "end_time": "2024-02-27T16:00:00-05:00" + } + ] + +export function parseData(start: number, end: number, data?: Event[]) { + // Parsed data: + const parsedData: EventSection[] = []; + + // Compute the number of dates between start and end: + const numDates = Math.floor((end - start) / DAY_EPOCH_TIME); + + // For each day, create an instance in the data array: + for (let i = 0 ; i < numDates ; i++) { + const additionalTime = i * DAY_EPOCH_TIME; + + // Parse the date string: + const date = new Date(start + additionalTime).toISOString().split('T')[0]; + + // Create a new EventSection: + const eventSection: EventSection = { + date: date, + data: {} + }; + + // Add the EventSection to the parsed data: + parsedData.push(eventSection); + } + + // Loop over the data and add the events to the correct date: + data?.forEach(( event ) => { + // Parse the event date: + const date = new Date(event.start_time); + + // Parse the event start date: + const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; + const formattedDate = new Intl.DateTimeFormat('en-US', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + timeZone: tz + }).format(date); + const [month, day, year] = formattedDate.split('/'); + const isoFormattedDate = `${year}-${month}-${day}`; + + // Parse the event start time: + const startTime = parseTime(date); + + // Find the index of the date in the parsed data: + const index = parsedData.findIndex((section) => section.date === isoFormattedDate); + + // Create an event preview: + const eventPreview: EventPreview = { + title: event.name, + startTime: event.start_time, + endTime: event.end_time, + host: event.host, + tags: [] + }; + + // If the date is found, add the event to the data: + if (index !== -1) { + // Check if the start time already exists: + if (parsedData[index].data[startTime]) { + // Check to see if the events are overflowing: + if (parsedData[index].data[startTime].events.length >= 3) { + parsedData[index].data[startTime].overflow = true; + } else { + parsedData[index].data[startTime].events.push(eventPreview); + } + } else { + // Create a new time: + parsedData[index].data[startTime] = { + overflow: false, + events: [eventPreview] + }; + } + } + }); + + return parsedData; +} + +function parseTime(date: Date) { + const minutes = date.getMinutes() === 0 ? '00' : date.getMinutes().toString(); + const time = date.getHours().toString() + minutes; + return parseInt(time); +} + +// export const DAY = { +// date: '2024-06-05', +// data: { +// 2000: { +// overflow: true, +// events: [ +// { +// title: 'Gym Workout', +// startTime: '12am', +// endTime: '1am', +// host: 'Generate', +// tags: tags +// }, +// { +// title: 'Gym Workout', +// startTime: '12am', +// endTime: '1am', +// host: 'Generate', +// tags: tags +// }, +// { +// title: 'Gym Workout', +// startTime: '12am', +// endTime: '1am', +// host: 'Generate', +// tags: tags +// } +// ] +// }, +// 2015: { +// overflow: true, +// events: [ +// { +// title: 'Gym Workout', +// startTime: '12am', +// endTime: '1am', +// host: 'Generate', +// tags: tags +// }, +// { +// title: 'Gym Workout', +// startTime: '12am', +// endTime: '1am', +// host: 'Generate', +// tags: tags +// } +// ] +// }, +// 2100: { +// overflow: true, +// events: [ +// { +// title: 'Gym Workout', +// startTime: '12am', +// endTime: '1am', +// host: 'Generate', +// tags: tags +// } +// ] +// } +// } +// }; + +// export async function getEvents(startTime: number, endTime: number) { +// let time = startTime; +// const increment = 1000 * 60 * 60 * 24; +// const events: EventSection[] = []; + +// while (time <= endTime) { +// const date = new Date(time).toISOString().split('T')[0]; +// events.push({ +// date, +// data: { +// 2000: { +// overflow: true, +// events: [ +// { +// title: 'Gym Workout', +// startTime: date, +// endTime: new Date( +// new Date(date).getTime() + 1000 * 60 * 60 +// ).toISOString(), +// host: 'Generate', +// tags: tags +// } +// ] +// }, +// } +// }); +// time += increment; +// } + +// return events; +// } \ No newline at end of file diff --git a/frontend/mobile/app/(design-system)/components/TestComponent/TestComponent.tsx b/frontend/mobile/app/(design-system)/components/TestComponent/TestComponent.tsx deleted file mode 100644 index 43b632299..000000000 --- a/frontend/mobile/app/(design-system)/components/TestComponent/TestComponent.tsx +++ /dev/null @@ -1,543 +0,0 @@ -import { Dimensions, Animated, Easing } from "react-native"; -import { useContext, useEffect, useRef, useState } from "react"; -import { GestureEventPayload, PanGestureHandler, PanGestureHandlerEventPayload, ScrollView, State } from "react-native-gesture-handler"; -import { Box } from "../Box/Box"; -import Day from "./Day"; -import { Spacing } from "../../shared/spacing"; -import { EventSection } from "../Calendar/mockData"; -import { EventCardCalendarSkeleton } from "../EventCard/Skeletons/EventCardCalendarSkeleton"; -import { CalendarContext } from "react-native-calendars-sac"; -import { UpdateSources } from "react-native-calendars-sac/src/expandableCalendar/commons"; - -type SwipeDirection = 'left' | 'right'; - -type FetchNewEventsProps = { - direction: 'base'; - date: string; - } -type FetchNewEventsPropsWithoutDate = { - direction: 'start' | 'end'; -} - -export type FetchNewEventsPropsUnion = FetchNewEventsProps | FetchNewEventsPropsWithoutDate; -export type RefreshDirection = 'start' | 'end' | 'base'; - - -export const DAY_EPOCH_TIME = 1000 * 60 * 60 * 24; - -type InfiniteScrollCarouselProps = { - // The events currently loaded waiting to be rendered / currently being rendered - loadedEvents: EventSection[]; - // The number of events to load at a time - loadBatchSize: number, - // Whether the component is currently loading a full batch of new events - isLoading: boolean, - // Refresh threshhold for loading new events: a number between 0 and 1: - refreshThreshhold: number, - // Callback function to intiate on threshold reach: - refetchEvents: (props: FetchNewEventsPropsUnion) => void, - // Check to see if the API call has errored: - error?: boolean, - // State variable to track whether a date was pressed or not: - datePress: boolean, - // Function to set the date press state: - setDatePress: React.Dispatch>, -} - -export default function InfiniteScrollCarousel({ - loadedEvents, - loadBatchSize, - isLoading, - refreshThreshhold, - refetchEvents, - error, - datePress, - setDatePress, -}: InfiniteScrollCarouselProps) { - // Ensure that the loaded events are at least 3: - if (loadedEvents.length < 3 && !isLoading) { - throw new Error('Loaded events must be at least 3'); - } - // Ensure that the load batch size is at least 3: - if (loadBatchSize < 3) { - throw new Error('Load batch size must be at least 3'); - } - - // Extract the width of the view: - const { width } = Dimensions.get('window'); - - // Keep track of the index being viewed: - const main_index = useRef(1); - - // Keep track of the index of the data being viewed: - const data_index_array = useRef([ - Math.floor(loadBatchSize / 2) - 1, - Math.floor(loadBatchSize / 2), - Math.floor(loadBatchSize / 2) + 1 - ]); - - // Keep track of the animated translation of each of the views: - const translateX_array = useRef([ - new Animated.Value(-width), - new Animated.Value(0), - new Animated.Value(width), - ]); - - // Keep track of the translations in number form for use in logical operations: - const record_translateX_array = useRef([-width, 0, width]) - - // Keep track of the old translation value: - const old_translateX = useRef(0) - - // Keep track of the number of events loaded on most recent batch: - const old_events = useRef([]); - - const recent_refresh_direction = useRef('end'); - - // The number of items away from the edge that will trigger a refetch: - const refresh_threshold_item_count = Math.floor(Math.floor(loadBatchSize / 2) * Math.min(Math.abs(refreshThreshhold), 1)); - - // Current events being rendered: - const [events, setEvents] = useState([]) - - // Keep track if the page has been initially loaded: - const [initialLoadComplete, setInitialLoadComplete] = useState(false); - - /** - * CODE FOR CONNECTING COMPONENT TO CALENDAR - * - Is entirely dependent on the react-native-calendars dep - **/ - const { date, setDate } = useContext(CalendarContext) - - // useEffect for handling the initial load: - useEffect(() => { - if (!isLoading && !initialLoadComplete) { - updateEventsToCurrent(loadedEvents, 'base'); - setInitialLoadComplete(true); - old_events.current = [...loadedEvents]; - } - }, [isLoading]); - - // useEffect for handling events added after initial load is complete: - useEffect(() => { - if (loadedEvents && initialLoadComplete) { - const totalNewEvents = loadedEvents.length - old_events.current.length; - if (recent_refresh_direction.current === 'start') { - data_index_array.current = data_index_array.current.map((index) => index + totalNewEvents) - } - - // Handle when the user is looking at a loading screen: - console.log('main_index:', main_index.current); - console.log('new events: ', loadedEvents); - if (!old_events.current[data_index_array.current[main_index.current]].date) { - updateEventsToCurrent(loadedEvents, 'base'); - } - old_events.current = [...loadedEvents] - } - }, [loadedEvents]) - - useEffect(() => { - console.log(datePress); - if (datePress) { - handleCalendarDateSelect( - loadedEvents, - date, - data_index_array.current, - main_index.current - ); - setDatePress(false); - } - }, [datePress]) - - // Handle swipe gestures: - const handleGestureEvent = Animated.event( - [{}], - { - listener: ({ nativeEvent }: { nativeEvent: Readonly }) => { - // Record the translation of each view: - record_translateX_array.current.forEach((_, index, arr) => { - arr[index] += (nativeEvent.translationX - old_translateX.current) - }) - - // Update the animated values: - translateX_array.current.forEach((translateX, index) => { - translateX.setValue(record_translateX_array.current[index]) - }) - - old_translateX.current = nativeEvent.translationX - }, - useNativeDriver: false, - } - ); - - const handleCalendarDateSelect = ( - loadedEvents: EventSection[], - newSelectedDateString: string, - dataIndexArray: number[], - mainIndex: number, - ) => { - // If there are no events loaded: - if (loadedEvents.length === 0) { - return; - } - - const earliestDate = new Date(loadedEvents[0].date); - const latestDate = new Date(loadedEvents[loadedEvents.length - 1].date); - const currentDate = new Date(loadedEvents[dataIndexArray[mainIndex]].date) - const newSelectedDate = new Date(newSelectedDateString); - - // If the calendar is currently fetching and the last fetch was an initial load: - if (isLoading && recent_refresh_direction.current === 'base') { - triggerRefresh('base'); - return; - } - - // Determine the direction of the click: - const direction = newSelectedDate.getTime() > currentDate.getTime() ? 'end' : 'start'; - - // Compute how many indices the select jump is - the number of days between the current day and the selected day: - const daysBetween = Math.floor((newSelectedDate.getTime() - currentDate.getTime()) / DAY_EPOCH_TIME); - - // If date is in the range of the loaded dates: - if (newSelectedDate.getTime() >= earliestDate.getTime() && newSelectedDate.getTime() <= latestDate.getTime()) { - // Update indices: - data_index_array.current = dataIndexArray.map((index) => index + daysBetween) - - // Compute how far away the new index is from the end of the list: - const distanceFromListEnd = direction === 'end' - ? loadedEvents.length - data_index_array.current[mainIndex] - : data_index_array.current[mainIndex]; - - - // Update the events in view: - updateEventsToCurrent(loadedEvents, "base"); - - // Fetch more dates in the direction of click: - if (distanceFromListEnd <= refresh_threshold_item_count) { - triggerRefresh(direction); - } - } - // If the date is outside the range of the loaded dates: - else { - // Reset initial load: - setInitialLoadComplete(false); - - const indexes = [ - Math.floor(loadBatchSize / 2) - 1, - Math.floor(loadBatchSize / 2), - Math.floor(loadBatchSize / 2) + 1 - ] - - // Reset the data index array: - data_index_array.current = [ - main_index.current === 1 ? indexes[0] : main_index.current === 0 ? indexes[1] : indexes[2], - main_index.current === 1 ? indexes[1] : main_index.current === 0 ? indexes[2] : indexes[0], - main_index.current === 1 ? indexes[2] : main_index.current === 0 ? indexes[0] : indexes[1] - ]; - - // Trigger date refresh: - triggerRefresh("base"); - } - } - - // Trigger a refresh of events: - const triggerRefresh = (refreshDirection: RefreshDirection) => { - recent_refresh_direction.current = refreshDirection; - if (refreshDirection === 'base') { - console.log('trigger refresh ', refreshDirection) - refetchEvents({ direction: refreshDirection, date: date }); - } else { - console.log('trigger refresh ', refreshDirection) - refetchEvents({ direction: refreshDirection }); - } - } - - // Update the events to what is currently been viewed: - const updateEventsToCurrent = (loadedEvents: EventSection[], type: SwipeDirection | 'base', targetIndex?: number) => { - if (type === 'base') { - setEvents([ - loadedEvents[data_index_array.current[0]], - loadedEvents[data_index_array.current[1]], - loadedEvents[data_index_array.current[2]] - ]) - old_events.current = [...loadedEvents] - return; - } - - if (targetIndex === undefined) { - throw new Error('Target index must be defined'); - } - if (type === 'left') { - setEvents((prevEvents) => { - prevEvents[targetIndex] = loadedEvents[data_index_array.current[targetIndex]] - return [...prevEvents] - }) - } else { - setEvents((prevEvents) => { - prevEvents[targetIndex] = loadedEvents[data_index_array.current[targetIndex]] - return [...prevEvents] - }) - } - } - - // Used for triggering a date change on the calendar when the user scrolls: - const handleDateChangeOnPan = (direction: SwipeDirection) => { - let directionMultiplier = direction === 'left' ? 1 : -1; - const newDateTimeStamp = new Date(date).getTime() + DAY_EPOCH_TIME * directionMultiplier; - setDate(new Date(newDateTimeStamp).toISOString().split('T')[0], UpdateSources.PAGE_SCROLL); - } - - // Used to handle re-render on pan of react components and trigger data refetch: - const handleCalendarDatePan = (swipeDirection: SwipeDirection, mainIndex: number) => { - let targetIndex: number; - if (swipeDirection === 'left') { - targetIndex = mainIndex === 0 ? 2 : mainIndex - 1 - data_index_array.current[targetIndex] += 3; - - // Update the current events in view: - updateEventsToCurrent(loadedEvents, 'left', targetIndex); - - const distanceFromEnd = loadedEvents.length - data_index_array.current[targetIndex] - if (distanceFromEnd === refresh_threshold_item_count) { - triggerRefresh('end') - } - } - else { - targetIndex = (mainIndex + 1) % 3 - data_index_array.current[targetIndex] -= 3; - - // Update the current events in view: - updateEventsToCurrent(loadedEvents, 'right', targetIndex); - - const distanceFromStart = data_index_array.current[targetIndex] - console.log(distanceFromStart); - console.log(refresh_threshold_item_count); - if (distanceFromStart === refresh_threshold_item_count) { - triggerRefresh('start') - } - } - - // Update the calendar to reflect the pan: - handleDateChangeOnPan(swipeDirection); - } - - // Handle the pan animation: - const handlePanAnimation = (mainIndex: number) => { - const currIndex = data_index_array.current[mainIndex]; - const beforeThreshold = currIndex === refresh_threshold_item_count + 2 - || currIndex === loadedEvents.length - refresh_threshold_item_count - 1; - - // Card not been fully swiped: - if ((record_translateX_array.current[mainIndex] < width / 2 - && record_translateX_array.current[mainIndex] > -width / 2) - || (isLoading && beforeThreshold)) { - // Set the current translateX value of main index to 0: - record_translateX_array.current[mainIndex] = 0; - - // Set the translate value of the next index to the width of the view: - record_translateX_array.current[(mainIndex + 1) % 3] = width; - - // Set the translate value of the previous index to the negative width of the view: - record_translateX_array.current[mainIndex === 0 ? 2 : (mainIndex - 1) % 3] = -width; - - // Animate the views back to their original positions: - let animation_array = translateX_array.current.map((_, mainIndex) => - Animated.timing(translateX_array.current[mainIndex], { - toValue: record_translateX_array.current[mainIndex], - useNativeDriver: false, - duration: 200, - easing: Easing.out(Easing.ease) - }) - ) - Animated.parallel(animation_array, { stopTogether: true }).start() - return; - } - // Card full swipe left: - if (record_translateX_array.current[mainIndex] < -width / 2) { - // Set the current index translateX value to the negative width of the view: - record_translateX_array.current[mainIndex] = -width; - - // Set the next index translateX value to 0: - record_translateX_array.current[(mainIndex + 1) % 3] = 0; - - // Set the previous index translateX value to be the width of the view: - record_translateX_array.current[mainIndex === 0 ? 2 : mainIndex - 1] = width; - - // Animate the views to their new positions: - let animation_array = translateX_array.current.map((_, index) => { - if (index !== (mainIndex === 0 ? 2 : mainIndex - 1)) { - return Animated.timing(translateX_array.current[index], { - toValue: record_translateX_array.current[index], - useNativeDriver: false, - duration: 150, - easing: Easing.out(Easing.ease) - }) - } - }) as Animated.CompositeAnimation[]; - Animated.parallel(animation_array, { stopTogether: true }).start(() => { - handleCalendarDatePan('left', mainIndex) - // Update the main index: - main_index.current = (mainIndex + 1) % 3; - }) - - return; - } - // Card full swipe right: - else { - // Set the current index translateX value to the positive width of the view: - record_translateX_array.current[mainIndex] = width; - - // Set the previous index translateX value to 0: - record_translateX_array.current[mainIndex === 0 ? 2 : mainIndex - 1] = 0; - - // Set the next index translateX value to be the negative width of the view: - record_translateX_array.current[(mainIndex + 1) % 3] = -width; - - // Animate the views to their new positions: - let animation_array = translateX_array.current.map((_, index) => { - if (index !== ((mainIndex + 1) % 3)) { - return Animated.timing(translateX_array.current[index], { - toValue: record_translateX_array.current[index], - useNativeDriver: false, - duration: 150, - easing: Easing.out(Easing.ease) - }) - } - }) as Animated.CompositeAnimation[]; - Animated.parallel(animation_array, { stopTogether: true }).start(() => { - handleCalendarDatePan('right', mainIndex) - // Update the main index: - main_index.current = mainIndex === 0 ? 2 : mainIndex - 1; - }) - return; - } - } - - const handleStateChanged = ({ nativeEvent }: { nativeEvent: Readonly }) => { - // If the finger has been lifted - if (nativeEvent.state === State.END) { - old_translateX.current = 0; - handlePanAnimation(main_index.current); - } - } - - const renderLoading = () => { - return ( - - - - - - ) - } - - const renderItem = (index: number) => { - const item = events[index]; - - // If the item exists: - if (item?.date) { - return ( - - - - ) - } - // If we are waiting to return data: - if (isLoading) { - return renderLoading(); - } - // If there was an API error: - if (error) { - return ( - - - - ) - } - else { - return ( - - - - ) - } - } - - if (!initialLoadComplete) { - return renderLoading(); - } - - return ( - - - - {renderItem(0)} - - - - - {renderItem(1)} - - - - - {renderItem(2)} - - - - ) -} \ No newline at end of file diff --git a/frontend/mobile/app/(design-system)/components/TestComponent/mock/mockData.tsx b/frontend/mobile/app/(design-system)/components/TestComponent/mock/mockData.tsx deleted file mode 100644 index 8bc6ac628..000000000 --- a/frontend/mobile/app/(design-system)/components/TestComponent/mock/mockData.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import { Tag } from "@generatesac/lib"; -import { EventSection } from "../../Calendar/mockData"; - -const tags: Tag[] = [ - { - id: '1', - created_at: new Date(), - updated_at: new Date(), - name: 'Software', - category_id: '1' - }, - { - id: '2', - created_at: new Date(), - updated_at: new Date(), - name: 'Free Food', - category_id: '2' - }, - { - id: '3', - created_at: new Date(), - updated_at: new Date(), - name: 'Panel Discussion', - category_id: '3' - }, - { - id: '4', - created_at: new Date(), - updated_at: new Date(), - name: 'Seminar', - category_id: '4' - }, - { - id: '5', - created_at: new Date(), - updated_at: new Date(), - name: 'Hackathon', - category_id: '5' - } -]; - -export const DAY = { - date: '2024-06-05', - data: { - 2000: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2015: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - }, - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - }, - 2100: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: '12am', - endTime: '1am', - host: 'Generate', - tags: tags - } - ] - } - } -}; - -export async function getEvents(startTime: number, endTime: number) { - let time = startTime; - const increment = 1000 * 60 * 60 * 24; - const events: EventSection[] = []; - - while (time <= endTime) { - const date = new Date(time).toISOString().split('T')[0]; - events.push({ - date, - data: { - 2000: { - overflow: true, - events: [ - { - title: 'Gym Workout', - startTime: date, - endTime: new Date( - new Date(date).getTime() + 1000 * 60 * 60 - ).toISOString(), - host: 'Generate', - tags: tags - } - ] - }, - } - }); - time += increment; - } - - return events; -} \ No newline at end of file diff --git a/frontend/mobile/app/_layout.tsx b/frontend/mobile/app/_layout.tsx index 193122542..fb2d320c8 100644 --- a/frontend/mobile/app/_layout.tsx +++ b/frontend/mobile/app/_layout.tsx @@ -56,8 +56,8 @@ const RootLayout = () => { - - + + diff --git a/frontend/mobile/package.json b/frontend/mobile/package.json index d7fd14cc7..83bcec3b4 100644 --- a/frontend/mobile/package.json +++ b/frontend/mobile/package.json @@ -24,7 +24,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-fontawesome": "^0.2.2", "@fortawesome/react-native-fontawesome": "^0.3.2", - "@generatesac/lib": "0.0.1", + "@generatesac/lib": "0.0.12", "@react-navigation/native": "^6.0.2", "@reduxjs/toolkit": "^2.2.5", "@rneui/base": "^4.0.0-rc.8", @@ -44,8 +44,8 @@ "expo-web-browser": "~13.0.3", "font-awesome": "^4.7.0", "path-dirname": "^1.0.2", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-native": "0.74.1", "react-native-bidirectional-infinite-scroll": "^0.3.3", "react-native-calendars-sac": "1.22.22", @@ -57,7 +57,8 @@ "react-native-svg-transformer": "^1.4.0", "react-native-vector-icons": "^10.1.0", "react-native-web": "~0.19.10", - "react-redux": "^9.1.2" + "react-redux": "^9.1.2", + "redux": "^5.0.1" }, "devDependencies": { "@babel/core": "^7.24.0", @@ -69,7 +70,7 @@ "jest": "^29.2.1", "jest-expo": "~51.0.2", "prettier": "^3.2.4", - "react-test-renderer": "18.2.0", + "react-test-renderer": "18.3.1", "typescript": "~5.4.5" }, "private": true diff --git a/frontend/mobile/store/store.ts b/frontend/mobile/store/store.ts index 031415127..9abeaa8d1 100644 --- a/frontend/mobile/store/store.ts +++ b/frontend/mobile/store/store.ts @@ -1,17 +1,25 @@ import { baseApi } from '@generatesac/lib'; import { configureStore } from '@reduxjs/toolkit'; import { setupListeners } from '@reduxjs/toolkit/query'; +import { useDispatch, useSelector } from 'react-redux'; export const store = configureStore({ reducer: { - [baseApi.reducerPath]: baseApi.reducer + [baseApi.reducerPath]: baseApi.reducer, }, middleware: (getDefaultMiddleware) => - getDefaultMiddleware().concat(baseApi.middleware) + getDefaultMiddleware() + .concat(baseApi.middleware) }); setupListeners(store.dispatch); -export type RootState = ReturnType; -export type AppDispatch = typeof store.dispatch; +// Redux types: +export type AppStore = typeof store +export type RootState = ReturnType +export type AppDispatch = AppStore['dispatch'] + +// Typed Redux interactive methods: +export const useAppDispatch = useDispatch.withTypes() +export const useAppSelector = useSelector.withTypes() diff --git a/frontend/mobile/yarn.lock b/frontend/mobile/yarn.lock index 710244a78..66c3ab9a1 100644 --- a/frontend/mobile/yarn.lock +++ b/frontend/mobile/yarn.lock @@ -814,7 +814,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.13": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0": version "7.24.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.6.tgz#5b76eb89ad45e2e4a0a8db54c456251469a3358e" integrity sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw== @@ -884,69 +884,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@blocknote/core@^0.12.4": - version "0.12.4" - resolved "https://registry.yarnpkg.com/@blocknote/core/-/core-0.12.4.tgz#339e01a7a7b34caab322e02abe78c2940bf9e619" - integrity sha512-njnrEZUZ7sPm0CIwxSfFfnP1IgB+H+Kvk5+2Etr3tozuQgwdQ0X6wn6E+MTCP97Nxl/aPA7S1F/XUoy1L8ICXQ== - dependencies: - "@tiptap/core" "^2.0.3" - "@tiptap/extension-bold" "^2.0.3" - "@tiptap/extension-code" "^2.0.3" - "@tiptap/extension-collaboration" "^2.0.3" - "@tiptap/extension-collaboration-cursor" "^2.0.3" - "@tiptap/extension-dropcursor" "^2.0.3" - "@tiptap/extension-gapcursor" "^2.0.3" - "@tiptap/extension-hard-break" "^2.0.3" - "@tiptap/extension-history" "^2.0.3" - "@tiptap/extension-horizontal-rule" "^2.0.3" - "@tiptap/extension-italic" "^2.0.3" - "@tiptap/extension-link" "^2.0.3" - "@tiptap/extension-paragraph" "^2.0.3" - "@tiptap/extension-strike" "^2.0.3" - "@tiptap/extension-table-cell" "^2.0.3" - "@tiptap/extension-table-header" "^2.0.3" - "@tiptap/extension-table-row" "^2.0.3" - "@tiptap/extension-text" "^2.0.3" - "@tiptap/extension-underline" "^2.0.3" - "@tiptap/pm" "^2.0.3" - hast-util-from-dom "^4.2.0" - prosemirror-model "^1.18.3" - prosemirror-state "^1.4.3" - prosemirror-tables "^1.3.4" - prosemirror-transform "^1.7.2" - prosemirror-view "^1.31.4" - rehype-format "^5.0.0" - rehype-parse "^8.0.4" - rehype-remark "^9.1.2" - rehype-stringify "^9.0.3" - remark-gfm "^3.0.1" - remark-parse "^10.0.1" - remark-rehype "^10.1.0" - remark-stringify "^10.0.2" - unified "^10.1.2" - uuid "^8.3.2" - y-prosemirror "1.2.1" - y-protocols "^1.0.5" - yjs "^13.6.1" - -"@blocknote/react@^0.12.4": - version "0.12.4" - resolved "https://registry.yarnpkg.com/@blocknote/react/-/react-0.12.4.tgz#572f8d6ddf500fde17743cbe2b04af8ba457c7da" - integrity sha512-cgtQmPUhRmWwHifskhfuwq7SflXTagilblzkfKmkvHYsldeH2WcOHGbgskX5bdx7ulvryrLnTSbXszLuTGd5Hw== - dependencies: - "@blocknote/core" "^0.12.4" - "@floating-ui/react" "^0.26.4" - "@mantine/core" "^7.7.1" - "@mantine/hooks" "^7.7.1" - "@mantine/utils" "^6.0.21" - "@tiptap/core" "^2.0.3" - "@tiptap/react" "^2.0.3" - lodash.merge "^4.6.2" - react "^18" - react-dom "^18.2.0" - react-icons "^4.3.1" - use-prefers-color-scheme "^1.1.3" - "@egjs/hammerjs@^2.0.17": version "2.0.17" resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124" @@ -1334,42 +1271,6 @@ find-up "^5.0.0" js-yaml "^4.1.0" -"@floating-ui/core@^1.0.0": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.2.tgz#d37f3e0ac1f1c756c7de45db13303a266226851a" - integrity sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg== - dependencies: - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/dom@^1.0.0": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.5.tgz#323f065c003f1d3ecf0ff16d2c2c4d38979f4cb9" - integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw== - dependencies: - "@floating-ui/core" "^1.0.0" - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/react-dom@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.0.tgz#4f0e5e9920137874b2405f7d6c862873baf4beff" - integrity sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA== - dependencies: - "@floating-ui/dom" "^1.0.0" - -"@floating-ui/react@^0.26.4", "@floating-ui/react@^0.26.9": - version "0.26.16" - resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.16.tgz#3415a087f452165161c2d313d1d57e8142894679" - integrity sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow== - dependencies: - "@floating-ui/react-dom" "^2.1.0" - "@floating-ui/utils" "^0.2.0" - tabbable "^6.0.0" - -"@floating-ui/utils@^0.2.0": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5" - integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== - "@fortawesome/fontawesome-common-types@6.5.2": version "6.5.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz#eaf2f5699f73cef198454ebc0c414e3688898179" @@ -1418,15 +1319,12 @@ humps "^2.0.1" prop-types "^15.7.2" -"@generatesac/lib@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@generatesac/lib/-/lib-0.0.1.tgz#ffcbed9a98669ee46d8c639c4d2cf178ec21b1b8" - integrity sha512-E7Vw3fZlRdxdBUl06H4s/0IzFb7BCAAWP/iHwA/ju0p4ILy0f6mq2hpWvIDqRFLri6NFWdO3eCd23yjN1VQFNQ== +"@generatesac/lib@0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@generatesac/lib/-/lib-0.0.12.tgz#afc3aef10e03ad07f00e6b1dd19c4e70536ab048" + integrity sha512-kTaFY7Scze0LZrurKgZNzHB+dOjxbksyRnWky8rRcMPwo95SN6ss3u81V6I3eZNnOxGAz/jesxwAlIH9XFuQLQ== dependencies: - "@blocknote/core" "^0.12.4" - "@blocknote/react" "^0.12.4" "@reduxjs/toolkit" "^2.2.3" - "@tiptap/pm" "^2.3.1" react "^18.2.0" react-dom "^18.2.0" react-icons "^5.2.1" @@ -1752,28 +1650,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mantine/core@^7.7.1": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@mantine/core/-/core-7.10.0.tgz#bfaafc92cf2346e5a6cbb49289f577ce3f7c05f7" - integrity sha512-hNqhdn/+4x8+FDWzR5fu1eMgnG1Mw4fZHw4WjIYjKrSv0NeKHY263RiesZz8RwcUQ8r7LlD95/2tUOMnKVTV5Q== - dependencies: - "@floating-ui/react" "^0.26.9" - clsx "^2.1.1" - react-number-format "^5.3.1" - react-remove-scroll "^2.5.7" - react-textarea-autosize "8.5.3" - type-fest "^4.12.0" - -"@mantine/hooks@^7.7.1": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-7.10.0.tgz#10a259e204a8af29df6aeeb24090c1e2c6debca0" - integrity sha512-fnalwYS2WQEFS4wmhmAetDZ/VdJPLNeUXPX9t+S21o3p/dRTX1xhU2mS7yWaQUKM0hPD1TcujqXGlP2M2g/A9A== - -"@mantine/utils@^6.0.21": - version "6.0.21" - resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-6.0.21.tgz#6185506e91cba3e308aaa8ea9ababc8e767995d6" - integrity sha512-33RVDRop5jiWFao3HKd3Yp7A9mEq4HAJxJPTuYm1NkdqX6aTKOQK7wT8v8itVodBp+sb4cJK6ZVdD1UurK/txQ== - "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" @@ -1819,11 +1695,6 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@popperjs/core@^2.9.0": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - "@radix-ui/react-compose-refs@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" @@ -2228,11 +2099,6 @@ redux-thunk "^3.1.0" reselect "^5.1.0" -"@remirror/core-constants@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-2.0.2.tgz#f05eccdc69e3a65e7d524b52548f567904a11a1a" - integrity sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ== - "@remix-run/node@^2.7.2": version "2.9.2" resolved "https://registry.yarnpkg.com/@remix-run/node/-/node-2.9.2.tgz#0dedfb0d2177ebe71de16dba00abe941081b3ba8" @@ -2482,149 +2348,6 @@ deepmerge "^4.3.1" svgo "^3.0.2" -"@tiptap/core@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.4.0.tgz#6f8eee8beb5b89363582366b201ccc4798ac98a9" - integrity sha512-YJSahk8pkxpCs8SflCZfTnJpE7IPyUWIylfgXM2DefjRQa5DZ+c6sNY0s/zbxKYFQ6AuHVX40r9pCfcqHChGxQ== - -"@tiptap/extension-bold@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.4.0.tgz#b5ced2c3bf51f304890137dbdf394d58c01eb208" - integrity sha512-csnW6hMDEHoRfxcPRLSqeJn+j35Lgtt1YRiOwn7DlS66sAECGRuoGfCvQSPij0TCDp4VCR9if5Sf8EymhnQumQ== - -"@tiptap/extension-bubble-menu@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.4.0.tgz#a079329318fc21407f9a3c9c3da6ef72cb0b4ab6" - integrity sha512-s99HmttUtpW3rScWq8rqk4+CGCwergNZbHLTkF6Rp6TSboMwfp+rwL5Q/JkcAG9KGLso1vGyXKbt1xHOvm8zMw== - dependencies: - tippy.js "^6.3.7" - -"@tiptap/extension-code@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.4.0.tgz#3a9fed3585bf49f445505c2e9ad71fd66e117304" - integrity sha512-wjhBukuiyJMq4cTcK3RBTzUPV24k5n1eEPlpmzku6ThwwkMdwynnMGMAmSF3fErh3AOyOUPoTTjgMYN2d10SJA== - -"@tiptap/extension-collaboration-cursor@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-collaboration-cursor/-/extension-collaboration-cursor-2.4.0.tgz#bcc85f83b3f6d51372831e223eac422d2302ead4" - integrity sha512-BTVy9FCTGdHxYieJ4lteVLrRY5qAPQyfunhMwakVf1NT3iU9quE6CaeaIwt6wEDJPMPPKzOHg1/ltSz9nIDe4A== - -"@tiptap/extension-collaboration@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-collaboration/-/extension-collaboration-2.4.0.tgz#d830694ac61a4b9857ffb77f24585e13a9cd6a0c" - integrity sha512-achU+GU9tqxn3zsU61CbwWrCausf0U23MJIpo8vnywOIx6E955by6okHEHoUazLIGVFXVc5DBzBP7bf+Snzk0Q== - -"@tiptap/extension-dropcursor@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.4.0.tgz#8f54908f84a4ab7d2d7de7fc0197511138445740" - integrity sha512-c46HoG2PEEpSZv5rmS5UX/lJ6/kP1iVO0Ax+6JrNfLEIiDULUoi20NqdjolEa38La2VhWvs+o20OviiTOKEE9g== - -"@tiptap/extension-floating-menu@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.4.0.tgz#75c48b98d0f833251eab70f269ed186f48fc398e" - integrity sha512-vLb9v+htbHhXyty0oaXjT3VC8St4xuGSHWUB9GuAJAQ+NajIO6rBPbLUmm9qM0Eh2zico5mpSD1Qtn5FM6xYzg== - dependencies: - tippy.js "^6.3.7" - -"@tiptap/extension-gapcursor@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.4.0.tgz#2a738509d40f5f856492c11e32b10e4462f71216" - integrity sha512-F4y/0J2lseohkFUw9P2OpKhrJ6dHz69ZScABUvcHxjznJLd6+0Zt7014Lw5PA8/m2d/w0fX8LZQ88pZr4quZPQ== - -"@tiptap/extension-hard-break@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.4.0.tgz#b5bf5b065827280e450fba8f53d137654509d836" - integrity sha512-3+Z6zxevtHza5IsDBZ4lZqvNR3Kvdqwxq/QKCKu9UhJN1DUjsg/l1Jn2NilSQ3NYkBYh2yJjT8CMo9pQIu776g== - -"@tiptap/extension-history@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.4.0.tgz#1dbf8410c091175627414d48a0d857232a8f4094" - integrity sha512-gr5qsKAXEVGr1Lyk1598F7drTaEtAxqZiuuSwTCzZzkiwgEQsWMWTWc9F8FlneCEaqe1aIYg6WKWlmYPaFwr0w== - -"@tiptap/extension-horizontal-rule@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.4.0.tgz#7f27c0778004602686251af7e2f7a8461a3d77ba" - integrity sha512-yDgxy+YxagcEsBbdWvbQiXYxsv3noS1VTuGwc9G7ZK9xPmBHJ5y0agOkB7HskwsZvJHoaSqNRsh7oZTkf0VR3g== - -"@tiptap/extension-italic@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.4.0.tgz#42ab003e04e1e8d825f698914c0e80ac849144f1" - integrity sha512-aaW/L9q+KNHHK+X73MPloHeIsT191n3VLd3xm6uUcFDnUNvzYJ/q65/1ZicdtCaOLvTutxdrEvhbkrVREX6a8g== - -"@tiptap/extension-link@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.4.0.tgz#e44edfe2f8d878959bd3ad64fda1b9e232f1f011" - integrity sha512-r3PjT0bjSKAorHAEBPA0icSMOlqALbxVlWU9vAc+Q3ndzt7ht0CTPNewzFF9kjzARABVt1cblXP/2+c0qGzcsg== - dependencies: - linkifyjs "^4.1.0" - -"@tiptap/extension-paragraph@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.4.0.tgz#5b9aea8775937b327bbe6754be12ae3144fb09ff" - integrity sha512-+yse0Ow67IRwcACd9K/CzBcxlpr9OFnmf0x9uqpaWt1eHck1sJnti6jrw5DVVkyEBHDh/cnkkV49gvctT/NyCw== - -"@tiptap/extension-strike@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.4.0.tgz#f09c4f51f7fed01c356026d7e8d8a1d1f2ac8f18" - integrity sha512-pE1uN/fQPOMS3i+zxPYMmPmI3keubnR6ivwM+KdXWOMnBiHl9N4cNpJgq1n2eUUGKLurC2qrQHpnVyGAwBS6Vg== - -"@tiptap/extension-table-cell@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.4.0.tgz#048d869acbf6cfbcd31076adf8130ffd679990a7" - integrity sha512-zylResMWLvV17Z6+GEDjvvl+YpJqJhNMyJsZPZNx/72OcNCDN3p2d6RGFwhpnCpdzZDD6LGaIgWaTj9oeg53SA== - -"@tiptap/extension-table-header@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.4.0.tgz#618a86bc5e66149661129b7e8fbe2fd363882c2d" - integrity sha512-FZCOyJHSFsMTCfBh49J1DlwgpUIM5Ivpr57Za8FVvUkk8RKUIOKpNsZqxE+Wrw+2Bvy5H4X7Azb588x0NDqfOQ== - -"@tiptap/extension-table-row@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.4.0.tgz#751ecd4ce49ebe1ccdea153f27c3a61e4449cfd4" - integrity sha512-K4FDI4YzyLWZbhIZYYL15uqs6M3QsPZGTpTdkSaxcKMLholcskDSHhJmySxnrjI0+JNAtyIiqlWBfA1/9Zyhng== - -"@tiptap/extension-text@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.4.0.tgz#a3a5f45a9856d513e574f24e2c9b6028273f8eb3" - integrity sha512-LV0bvE+VowE8IgLca7pM8ll7quNH+AgEHRbSrsI3SHKDCYB9gTHMjWaAkgkUVaO1u0IfCrjnCLym/PqFKa+vvg== - -"@tiptap/extension-underline@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.4.0.tgz#fb554333aed8a9ac1400b94f362a774c650f5a90" - integrity sha512-guWojb7JxUwLz4OKzwNExJwOkhZjgw/ttkXCMBT0PVe55k998MMYe1nvN0m2SeTW9IxurEPtScH4kYJ0XuSm8Q== - -"@tiptap/pm@^2.0.3", "@tiptap/pm@^2.3.1": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.4.0.tgz#f6fe81d24569da584658d2e8a3a378aea3619fb3" - integrity sha512-B1HMEqGS4MzIVXnpgRZDLm30mxDWj51LkBT/if1XD+hj5gm8B9Q0c84bhvODX6KIs+c6z+zsY9VkVu8w9Yfgxg== - dependencies: - prosemirror-changeset "^2.2.1" - prosemirror-collab "^1.3.1" - prosemirror-commands "^1.5.2" - prosemirror-dropcursor "^1.8.1" - prosemirror-gapcursor "^1.3.2" - prosemirror-history "^1.3.2" - prosemirror-inputrules "^1.3.0" - prosemirror-keymap "^1.2.2" - prosemirror-markdown "^1.12.0" - prosemirror-menu "^1.2.4" - prosemirror-model "^1.19.4" - prosemirror-schema-basic "^1.2.2" - prosemirror-schema-list "^1.3.0" - prosemirror-state "^1.4.3" - prosemirror-tables "^1.3.5" - prosemirror-trailing-node "^2.0.7" - prosemirror-transform "^1.8.0" - prosemirror-view "^1.32.7" - -"@tiptap/react@^2.0.3": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.4.0.tgz#3d28944e10affa7aaf01bf291196dd9e27850e51" - integrity sha512-baxnIr6Dy+5iGagOEIKFeHzdl1ZRa6Cg+SJ3GDL/BVLpO6KiCM3Mm5ymB726UKP1w7icrBiQD2fGY3Bx8KaiSA== - dependencies: - "@tiptap/extension-bubble-menu" "^2.4.0" - "@tiptap/extension-floating-menu" "^2.4.0" - "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -2685,18 +2408,6 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/extend@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/extend/-/extend-3.0.4.tgz#5f9aa502299e1b9beb9ade57ea9e36898de0ff52" - integrity sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA== - "@types/graceful-fs@^4.1.3": version "4.1.9" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" @@ -2709,20 +2420,6 @@ resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.45.tgz#ffa764bb68a66c08db6efb9c816eb7be850577b1" integrity sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ== -"@types/hast@^2.0.0": - version "2.3.10" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" - integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== - dependencies: - "@types/unist" "^2" - -"@types/hast@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" @@ -2756,18 +2453,6 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/mdast@^3.0.0": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" - integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== - dependencies: - "@types/unist" "^2" - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - "@types/node-forge@^1.3.0": version "1.3.11" resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" @@ -2789,11 +2474,6 @@ dependencies: undici-types "~5.26.4" -"@types/parse5@^6.0.0": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" - integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== - "@types/prop-types@*": version "15.7.12" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" @@ -2845,16 +2525,6 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" - integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== - -"@types/unist@^2", "@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" @@ -3466,11 +3136,6 @@ babel-preset-jest@^29.6.3: babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3676,11 +3341,6 @@ caniuse-lite@^1.0.30001587: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz#0ec4c8fa7a46e5b785477c70b38a56d0b10058eb" integrity sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA== -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3716,21 +3376,6 @@ char-regex@^2.0.0: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - charenc@0.0.2, charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -3836,11 +3481,6 @@ clone@^2.1.2: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -clsx@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3911,11 +3551,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - command-exists@^1.2.4, command-exists@^1.2.8: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" @@ -4046,11 +3681,6 @@ create-jest@^29.7.0: jest-util "^29.7.0" prompts "^2.0.1" -crelt@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" - integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== - cross-fetch@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -4227,7 +3857,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4251,13 +3881,6 @@ decimal.js@^10.4.2: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -4350,11 +3973,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4370,21 +3988,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -diff@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4688,11 +4296,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - escodegen@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" @@ -5140,11 +4743,6 @@ expo@~51.0.2: fbemitter "^3.0.0" whatwg-url-without-unicode "8.0.0-3" -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5474,11 +5072,6 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" -get-nonce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" - integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== - get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -5682,214 +5275,6 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hast-util-embedded@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-embedded/-/hast-util-embedded-2.0.1.tgz#979e07ecc6bc42b560ccac755cab926c354f24c7" - integrity sha512-QUdSOP1/o+/TxXtpPFXR2mUg2P+ySrmlX7QjwHZCXqMFyYk7YmcGSvqRW+4XgXAoHifdE1t2PwFaQK33TqVjSw== - dependencies: - hast-util-is-element "^2.0.0" - -hast-util-embedded@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz#be4477780fbbe079cdba22982e357a0de4ba853e" - integrity sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA== - dependencies: - "@types/hast" "^3.0.0" - hast-util-is-element "^3.0.0" - -hast-util-from-dom@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hast-util-from-dom/-/hast-util-from-dom-4.2.0.tgz#25836ddecc3cc0849d32749c2a7aec03e94b59a7" - integrity sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ== - dependencies: - hastscript "^7.0.0" - web-namespaces "^2.0.0" - -hast-util-from-parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0" - integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw== - 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" - -hast-util-has-property@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-2.0.1.tgz#8ec99c3e8f02626304ee438cdb9f0528b017e083" - integrity sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg== - -hast-util-has-property@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz#4e595e3cddb8ce530ea92f6fc4111a818d8e7f93" - integrity sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-body-ok-link@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-2.0.0.tgz#e0df6947b2676d2acac55c611755d359f264958e" - integrity sha512-S58hCexyKdD31vMsErvgLfflW6vYWo/ixRLPJTtkOvLld24vyI8vmYmkgLA5LG3la2ME7nm7dLGdm48gfLRBfw== - dependencies: - "@types/hast" "^2.0.0" - hast-util-has-property "^2.0.0" - hast-util-is-element "^2.0.0" - -hast-util-is-body-ok-link@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.0.tgz#6b2d808813a6f73eb20e61bdd2b203591af85eb4" - integrity sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-element@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz#cd3279cfefb70da6d45496068f020742256fc471" - integrity sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA== - dependencies: - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - -hast-util-is-element@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz#6e31a6532c217e5b533848c7e52c9d9369ca0932" - integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-parse-selector@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" - integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== - dependencies: - "@types/hast" "^2.0.0" - -hast-util-phrasing@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hast-util-phrasing/-/hast-util-phrasing-2.0.2.tgz#0747ba8000a8d5598bef4000819d92fda8f8843c" - integrity sha512-yGkCfPkkfCyiLfK6KEl/orMDr/zgCnq/NaO9HfULx6/Zga5fso5eqQA5Ov/JZVqACygvw9shRYWgXNcG2ilo7w== - dependencies: - "@types/hast" "^2.0.0" - hast-util-embedded "^2.0.0" - hast-util-has-property "^2.0.0" - hast-util-is-body-ok-link "^2.0.0" - hast-util-is-element "^2.0.0" - -hast-util-phrasing@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz#fa284c0cd4a82a0dd6020de8300a7b1ebffa1690" - integrity sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ== - dependencies: - "@types/hast" "^3.0.0" - hast-util-embedded "^3.0.0" - hast-util-has-property "^3.0.0" - hast-util-is-body-ok-link "^3.0.0" - hast-util-is-element "^3.0.0" - -hast-util-raw@^7.0.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99" - integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg== - 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" - -hast-util-to-html@^8.0.0: - version "8.0.4" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz#0269ef33fa3f6599b260a8dc94f733b8e39e41fc" - integrity sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA== - 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" - -hast-util-to-mdast@^8.3.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/hast-util-to-mdast/-/hast-util-to-mdast-8.4.1.tgz#f953027e0688c52439b11a433ab9ed8b43e1e17b" - integrity sha512-tfmBLASuCgyhCzpkTXM5kU8xeuS5jkMZ17BYm2YftGT5wvgc7uHXTZ/X8WfNd6F5NV/IGmrLsuahZ+jXQir4zQ== - dependencies: - "@types/extend" "^3.0.0" - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - extend "^3.0.0" - hast-util-has-property "^2.0.0" - hast-util-is-element "^2.0.0" - hast-util-phrasing "^2.0.0" - hast-util-to-text "^3.0.0" - mdast-util-phrasing "^3.0.0" - mdast-util-to-string "^3.0.0" - rehype-minify-whitespace "^5.0.0" - trim-trailing-lines "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit "^4.0.0" - -hast-util-to-parse5@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3" - integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw== - 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" - -hast-util-to-text@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz#ecf30c47141f41e91a5d32d0b1e1859fd2ac04f2" - integrity sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw== - dependencies: - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - hast-util-is-element "^2.0.0" - unist-util-find-after "^4.0.0" - -hast-util-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" - integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" - integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== - 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" - hermes-estree@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.19.1.tgz#d5924f5fac2bf0532547ae9f506d6db8f3c96392" @@ -5947,16 +5332,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" - integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== - -html-whitespace-sensitive-tag-names@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.0.tgz#c7c8c11d93c014fba642e240d7f3da39656ab301" - integrity sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w== - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6171,11 +5546,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-buffer@~1.1.1, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -6314,11 +5684,6 @@ is-path-inside@^3.0.2, is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -6446,11 +5811,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic.js@^0.2.4: - version "0.2.5" - resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" - integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -7151,11 +6511,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -kleur@^4.0.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -7169,13 +6524,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lib0@^0.2.42, lib0@^0.2.85, lib0@^0.2.86: - version "0.2.94" - resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.94.tgz#fc28b4b65f816599f1e2f59d3401e231709535b3" - integrity sha512-hZ3p54jL4Wpu7IOg26uC7dnEWiMyNlUrb9KoG7+xYs45WkQwpVvKFndVq2+pqLYKe1u8Fp3+zAfZHVvTK34PvQ== - dependencies: - isomorphic.js "^0.2.4" - lighthouse-logger@^1.0.0: version "1.4.2" resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" @@ -7245,18 +6593,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -linkify-it@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" - integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== - dependencies: - uc.micro "^2.0.0" - -linkifyjs@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.1.3.tgz#0edbc346428a7390a23ea2e5939f76112c9ae07f" - integrity sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg== - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7323,11 +6659,6 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -7383,23 +6714,6 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -markdown-it@^14.0.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" - integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== - dependencies: - argparse "^2.0.1" - entities "^4.4.0" - linkify-it "^5.0.0" - mdurl "^2.0.0" - punycode.js "^2.3.1" - uc.micro "^2.1.0" - -markdown-table@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" - integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== - marky@^1.2.2: version "1.2.5" resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" @@ -7435,144 +6749,6 @@ md5hex@^1.0.0: resolved "https://registry.yarnpkg.com/md5hex/-/md5hex-1.0.0.tgz#ed74b477a2ee9369f75efee2f08d5915e52a42e8" integrity sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ== -mdast-util-definitions@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" - integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - -mdast-util-find-and-replace@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz#cc2b774f7f3630da4bd592f61966fecade8b99b1" - integrity sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw== - dependencies: - "@types/mdast" "^3.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.0.0" - -mdast-util-from-markdown@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" - integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - decode-named-character-reference "^1.0.0" - mdast-util-to-string "^3.1.0" - micromark "^3.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-decode-string "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-stringify-position "^3.0.0" - uvu "^0.5.0" - -mdast-util-gfm-autolink-literal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz#67a13abe813d7eba350453a5333ae1bc0ec05c06" - integrity sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA== - dependencies: - "@types/mdast" "^3.0.0" - ccount "^2.0.0" - mdast-util-find-and-replace "^2.0.0" - micromark-util-character "^1.0.0" - -mdast-util-gfm-footnote@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz#ce5e49b639c44de68d5bf5399877a14d5020424e" - integrity sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - micromark-util-normalize-identifier "^1.0.0" - -mdast-util-gfm-strikethrough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz#5470eb105b483f7746b8805b9b989342085795b7" - integrity sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm-table@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz#3552153a146379f0f9c4c1101b071d70bbed1a46" - integrity sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg== - dependencies: - "@types/mdast" "^3.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm-task-list-item@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz#b280fcf3b7be6fd0cc012bbe67a59831eb34097b" - integrity sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz#e92f4d8717d74bdba6de57ed21cc8b9552e2d0b6" - integrity sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg== - dependencies: - mdast-util-from-markdown "^1.0.0" - mdast-util-gfm-autolink-literal "^1.0.0" - mdast-util-gfm-footnote "^1.0.0" - mdast-util-gfm-strikethrough "^1.0.0" - mdast-util-gfm-table "^1.0.0" - mdast-util-gfm-task-list-item "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-phrasing@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" - integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg== - dependencies: - "@types/mdast" "^3.0.0" - unist-util-is "^5.0.0" - -mdast-util-to-hast@^12.1.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" - integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-definitions "^5.0.0" - micromark-util-sanitize-uri "^1.1.0" - trim-lines "^3.0.0" - unist-util-generated "^2.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - -mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" - integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^3.0.0" - mdast-util-to-string "^3.0.0" - micromark-util-decode-string "^1.0.0" - unist-util-visit "^4.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" - integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== - dependencies: - "@types/mdast" "^3.0.0" - mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -7588,11 +6764,6 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -mdurl@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" - integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== - memoize-one@^5.0.0, memoize-one@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" @@ -7802,279 +6973,6 @@ metro@0.80.9, metro@^0.80.3: ws "^7.5.1" yargs "^17.6.2" -micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" - integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-factory-destination "^1.0.0" - micromark-factory-label "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-factory-title "^1.0.0" - micromark-factory-whitespace "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-html-tag-name "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromark-extension-gfm-autolink-literal@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz#5853f0e579bbd8ef9e39a7c0f0f27c5a063a66e7" - integrity sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-extension-gfm-footnote@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz#05e13034d68f95ca53c99679040bc88a6f92fe2e" - integrity sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q== - dependencies: - micromark-core-commonmark "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-strikethrough@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz#c8212c9a616fa3bf47cb5c711da77f4fdc2f80af" - integrity sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-table@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz#dcb46074b0c6254c3fc9cc1f6f5002c162968008" - integrity sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-tagfilter@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz#aa7c4dd92dabbcb80f313ebaaa8eb3dac05f13a7" - integrity sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g== - dependencies: - micromark-util-types "^1.0.0" - -micromark-extension-gfm-task-list-item@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz#b52ce498dc4c69b6a9975abafc18f275b9dde9f4" - integrity sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz#e517e8579949a5024a493e49204e884aa74f5acf" - integrity sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ== - dependencies: - micromark-extension-gfm-autolink-literal "^1.0.0" - micromark-extension-gfm-footnote "^1.0.0" - micromark-extension-gfm-strikethrough "^1.0.0" - micromark-extension-gfm-table "^1.0.0" - micromark-extension-gfm-tagfilter "^1.0.0" - micromark-extension-gfm-task-list-item "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-destination@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" - integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-label@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" - integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-factory-space@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-title@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" - integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-whitespace@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" - integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-chunked@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" - integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-classify-character@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" - integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-combine-extensions@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" - integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-decode-numeric-character-reference@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" - integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-decode-string@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" - integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" - integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== - -micromark-util-html-tag-name@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" - integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== - -micromark-util-normalize-identifier@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" - integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-resolve-all@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" - integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== - dependencies: - micromark-util-types "^1.0.0" - -micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" - integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-subtokenize@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" - integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-util-symbol@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" - integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== - -micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" - integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== - -micromark@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" - integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" @@ -8197,11 +7095,6 @@ moment@^2.29.4: resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - mrmime@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" @@ -8548,11 +7441,6 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -orderedmap@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2" - integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -8655,11 +7543,6 @@ parse-png@^2.1.0: dependencies: pngjs "^3.3.0" -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -8882,164 +7765,6 @@ prop-types@15.8.1, prop-types@^15.5.10, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -prosemirror-changeset@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" - integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== - dependencies: - prosemirror-transform "^1.0.0" - -prosemirror-collab@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33" - integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ== - dependencies: - prosemirror-state "^1.0.0" - -prosemirror-commands@^1.0.0, prosemirror-commands@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz#e94aeea52286f658cd984270de9b4c3fff580852" - integrity sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ== - dependencies: - prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" - prosemirror-transform "^1.0.0" - -prosemirror-dropcursor@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz#49b9fb2f583e0d0f4021ff87db825faa2be2832d" - integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== - dependencies: - prosemirror-state "^1.0.0" - prosemirror-transform "^1.1.0" - prosemirror-view "^1.1.0" - -prosemirror-gapcursor@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4" - integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ== - dependencies: - prosemirror-keymap "^1.0.0" - prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" - prosemirror-view "^1.0.0" - -prosemirror-history@^1.0.0, prosemirror-history@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.4.0.tgz#1edbce630aaf21b808e5a5cd798a09976ecb1827" - integrity sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ== - dependencies: - prosemirror-state "^1.2.2" - prosemirror-transform "^1.0.0" - prosemirror-view "^1.31.0" - rope-sequence "^1.3.0" - -prosemirror-inputrules@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz#ef1519bb2cb0d1e0cec74bad1a97f1c1555068bb" - integrity sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg== - dependencies: - prosemirror-state "^1.0.0" - prosemirror-transform "^1.0.0" - -prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" - integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== - dependencies: - prosemirror-state "^1.0.0" - w3c-keyname "^2.2.0" - -prosemirror-markdown@^1.12.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.0.tgz#67ebfa40af48a22d1e4ed6cad2e29851eb61e649" - integrity sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g== - dependencies: - markdown-it "^14.0.0" - prosemirror-model "^1.20.0" - -prosemirror-menu@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz#3cfdc7c06d10f9fbd1bce29082c498bd11a0a79a" - integrity sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA== - dependencies: - crelt "^1.0.0" - prosemirror-commands "^1.0.0" - prosemirror-history "^1.0.0" - prosemirror-state "^1.0.0" - -prosemirror-model@^1.0.0, prosemirror-model@^1.18.3, prosemirror-model@^1.19.0, prosemirror-model@^1.19.4, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.8.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.21.0.tgz#2d69ed04b4e7c441c3eb87c1c964fab4f9b217df" - integrity sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA== - dependencies: - orderedmap "^2.0.0" - -prosemirror-schema-basic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.2.tgz#6695f5175e4628aab179bf62e5568628b9cfe6c7" - integrity sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw== - dependencies: - prosemirror-model "^1.19.0" - -prosemirror-schema-list@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz#05374702cf35a3ba5e7ec31079e355a488d52519" - integrity sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A== - dependencies: - prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" - prosemirror-transform "^1.7.3" - -prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" - integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== - dependencies: - prosemirror-model "^1.0.0" - prosemirror-transform "^1.0.0" - prosemirror-view "^1.27.0" - -prosemirror-tables@^1.3.4, prosemirror-tables@^1.3.5: - version "1.3.7" - resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.3.7.tgz#9d296bd432d2bc7dca90f14e5c3b5c5f61277f7a" - integrity sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA== - dependencies: - prosemirror-keymap "^1.1.2" - prosemirror-model "^1.8.1" - prosemirror-state "^1.3.1" - prosemirror-transform "^1.2.1" - prosemirror-view "^1.13.3" - -prosemirror-trailing-node@^2.0.7: - version "2.0.8" - resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.8.tgz#233ddcbda72de06f9b5d758d2a65a8cac482ea10" - integrity sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA== - dependencies: - "@remirror/core-constants" "^2.0.2" - escape-string-regexp "^4.0.0" - -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.2, prosemirror-transform@^1.7.3, prosemirror-transform@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.9.0.tgz#81fd1fbd887929a95369e6dd3d240c23c19313f8" - integrity sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg== - dependencies: - prosemirror-model "^1.21.0" - -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.31.4, prosemirror-view@^1.32.7: - version "1.33.6" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.33.6.tgz#85804eb922411af8e300a07f4f376722b15900b9" - integrity sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw== - dependencies: - prosemirror-model "^1.20.0" - prosemirror-state "^1.0.0" - prosemirror-transform "^1.1.0" - psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -9053,11 +7778,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode.js@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" - integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== - punycode@^2.1.0, punycode@^2.1.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -9128,15 +7848,7 @@ react-devtools-core@^5.0.0: shell-quote "^1.6.1" ws "^7" -react-dom@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-dom@^18.2.0: +react-dom@18.3.1, react-dom@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -9154,17 +7866,12 @@ react-freeze@^1.0.0: resolved "https://registry.yarnpkg.com/react-freeze/-/react-freeze-1.0.4.tgz#cbbea2762b0368b05cbe407ddc9d518c57c6f3ad" integrity sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA== -react-icons@^4.3.1: - version "4.12.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.12.0.tgz#54806159a966961bfd5cdb26e492f4dafd6a8d78" - integrity sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw== - react-icons@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a" integrity sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw== -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0, react-is@^18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== @@ -9346,13 +8053,6 @@ react-native@0.74.1: ws "^6.2.2" yargs "^17.6.2" -react-number-format@^5.3.1: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-5.3.4.tgz#4780522ba1fdaff20aaa0732716490c6758b8557" - integrity sha512-2hHN5mbLuCDUx19bv0Q8wet67QqYK6xmtLQeY5xx+h7UXiMmRtaCwqko4mMPoKXLc6xAzwRrutg8XbTRlsfjRg== - dependencies: - prop-types "^15.7.2" - react-redux@^9.1.2: version "9.1.2" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b" @@ -9366,25 +8066,6 @@ react-refresh@^0.14.0, react-refresh@^0.14.2: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== -react-remove-scroll-bar@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" - integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - -react-remove-scroll@^2.5.7: - version "2.5.10" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz#5fae456a23962af6d3c38ca1978bcfe0806c4061" - integrity sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA== - dependencies: - react-remove-scroll-bar "^2.3.6" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - react-shallow-renderer@^16.15.0: version "16.15.0" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" @@ -9393,15 +8074,6 @@ react-shallow-renderer@^16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== - dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" - react-test-renderer@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" @@ -9411,23 +8083,16 @@ react-test-renderer@18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" -react-textarea-autosize@8.5.3: - version "8.5.3" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz#d1e9fe760178413891484847d3378706052dd409" - integrity sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ== - dependencies: - "@babel/runtime" "^7.20.13" - use-composed-ref "^1.3.0" - use-latest "^1.2.1" - -react@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react-test-renderer@18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.3.1.tgz#e693608a1f96283400d4a3afead6893f958b80b4" + integrity sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA== dependencies: - loose-envify "^1.1.0" + react-is "^18.3.1" + react-shallow-renderer "^16.15.0" + scheduler "^0.23.2" -react@^18, react@^18.2.0: +react@18.3.1, react@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -9554,110 +8219,6 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -rehype-format@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/rehype-format/-/rehype-format-5.0.0.tgz#e51cc8edece2aee0e88e1efdd0625bc0cbef387b" - integrity sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg== - dependencies: - "@types/hast" "^3.0.0" - hast-util-embedded "^3.0.0" - hast-util-is-element "^3.0.0" - hast-util-phrasing "^3.0.0" - hast-util-whitespace "^3.0.0" - html-whitespace-sensitive-tag-names "^3.0.0" - rehype-minify-whitespace "^6.0.0" - unist-util-visit-parents "^6.0.0" - -rehype-minify-whitespace@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/rehype-minify-whitespace/-/rehype-minify-whitespace-5.0.1.tgz#79729a0146aa97a9d43e1eb4b5884974e2f37e77" - integrity sha512-PPp4lWJiBPlePI/dv1BeYktbwkfgXkrK59MUa+tYbMPgleod+4DvFK2PLU0O0O60/xuhHfiR9GUIUlXTU8sRIQ== - dependencies: - "@types/hast" "^2.0.0" - hast-util-embedded "^2.0.0" - hast-util-is-element "^2.0.0" - hast-util-whitespace "^2.0.0" - unified "^10.0.0" - unist-util-is "^5.0.0" - -rehype-minify-whitespace@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.0.tgz#fe97c5e9e48c5629458166753f2249afaa2e1fd1" - integrity sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA== - dependencies: - "@types/hast" "^3.0.0" - hast-util-embedded "^3.0.0" - hast-util-is-element "^3.0.0" - hast-util-whitespace "^3.0.0" - unist-util-is "^6.0.0" - -rehype-parse@^8.0.4: - version "8.0.5" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-8.0.5.tgz#ccffc21e08e288c7846614f8dc1dc23d603a4a80" - integrity sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A== - dependencies: - "@types/hast" "^2.0.0" - hast-util-from-parse5 "^7.0.0" - parse5 "^6.0.0" - unified "^10.0.0" - -rehype-remark@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/rehype-remark/-/rehype-remark-9.1.2.tgz#b4ed84d7e692426c3269e72ec477906cec659c05" - integrity sha512-c0fG3/CrJ95zAQ07xqHSkdpZybwdsY7X5dNWvgL2XqLKZuqmG3+vk6kP/4miCnp+R+x/0uKKRSpfXb9aGR8Z5w== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - hast-util-to-mdast "^8.3.0" - unified "^10.0.0" - -rehype-stringify@^9.0.3: - version "9.0.4" - resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-9.0.4.tgz#31dbb9de6f5034c6964760a1b1083218059c4343" - integrity sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ== - dependencies: - "@types/hast" "^2.0.0" - hast-util-to-html "^8.0.0" - unified "^10.0.0" - -remark-gfm@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" - integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-gfm "^2.0.0" - micromark-extension-gfm "^2.0.0" - unified "^10.0.0" - -remark-parse@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" - integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - unified "^10.0.0" - -remark-rehype@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" - integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-to-hast "^12.1.0" - unified "^10.0.0" - -remark-stringify@^10.0.2: - version "10.0.3" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-10.0.3.tgz#83b43f2445c4ffbb35b606f967d121b2b6d69717" - integrity sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.0.0" - unified "^10.0.0" - remove-trailing-slash@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" @@ -9798,11 +8359,6 @@ rimraf@~2.6.2: dependencies: glob "^7.1.3" -rope-sequence@^1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" - integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9810,13 +8366,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -10146,11 +8695,6 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -10342,14 +8886,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -10504,11 +9040,6 @@ synckit@^0.8.6: "@pkgr/core" "^0.1.0" tslib "^2.6.2" -tabbable@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - tar@^6.0.5, tar@^6.1.11: version "6.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" @@ -10622,13 +9153,6 @@ through@2: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tippy.js@^6.3.7: - version "6.3.7" - resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" - integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== - dependencies: - "@popperjs/core" "^2.9.0" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10689,21 +9213,6 @@ traverse@~0.6.6: typedarray.prototype.slice "^1.0.3" which-typed-array "^1.1.15" -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trim-trailing-lines@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz#9aac7e89b09cb35badf663de7133c6de164f86df" - integrity sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -10719,7 +9228,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -10773,11 +9282,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^4.12.0: - version "4.18.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.18.3.tgz#5249f96e7c2c3f0f1561625f54050e343f1c8f68" - integrity sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ== - typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -10844,11 +9348,6 @@ ua-parser-js@^1.0.35: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== -uc.micro@^2.0.0, uc.micro@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" - integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -10892,19 +9391,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unified@^10.0.0, unified@^10.1.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== - dependencies: - "@types/unist" "^2.0.0" - bail "^2.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^5.0.0" - unique-filename@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" @@ -10933,72 +9419,6 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -unist-util-find-after@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz#80c69c92b0504033638ce11973f4135f2c822e2d" - integrity sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-generated@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" - integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== - -unist-util-is@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" - integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" - integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-stringify-position@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" - integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" - integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" - integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -11052,48 +9472,11 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -use-callback-ref@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" - integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== - dependencies: - tslib "^2.0.0" - -use-composed-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" - integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== - -use-isomorphic-layout-effect@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - use-latest-callback@^0.1.9: version "0.1.9" resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a" integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw== -use-latest@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" - integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== - dependencies: - use-isomorphic-layout-effect "^1.1.1" - -use-prefers-color-scheme@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/use-prefers-color-scheme/-/use-prefers-color-scheme-1.1.3.tgz#18945cecbe33566f961fac1b90c079d1ce2d10b5" - integrity sha512-ZRgDfb5BFLum/Sud4SpZ+d1YcV+lRbsupw0qQ/rGy5kGrpE3KMUQgEQOKiQQSa4Wslex46n5fKFO+9FGMTosUQ== - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - use-sync-external-store@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" @@ -11130,16 +9513,6 @@ uuid@^8.0.0, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uvu@^0.5.0: - version "0.5.6" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" - integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" - v8-to-istanbul@^9.0.1: version "9.2.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" @@ -11166,42 +9539,11 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vfile-location@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0" - integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw== - dependencies: - "@types/unist" "^2.0.0" - vfile "^5.0.0" - -vfile-message@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" - integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - -vfile@^5.0.0: - version "5.3.7" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" - integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -w3c-keyname@^2.2.0: - version "2.2.8" - resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" - integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== - w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" @@ -11237,11 +9579,6 @@ web-encoding@1.1.5: optionalDependencies: "@zxing/text-encoding" "0.9.0" -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - web-streams-polyfill@^3.1.1: version "3.3.3" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" @@ -11505,20 +9842,6 @@ xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y-prosemirror@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/y-prosemirror/-/y-prosemirror-1.2.1.tgz#a8b5c50b8fd445e556dfa831f295765f4ca022bd" - integrity sha512-czMBfB1eL2awqmOSxQM8cS/fsUOGE6fjvyPLInrh4crPxFiw67wDpwIW+EGBYKRa04sYbS0ScGj7ZgvWuDrmBQ== - dependencies: - lib0 "^0.2.42" - -y-protocols@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.6.tgz#66dad8a95752623443e8e28c0e923682d2c0d495" - integrity sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q== - dependencies: - lib0 "^0.2.85" - y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -11605,13 +9928,6 @@ yargs@^17.3.1, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yjs@^13.6.1: - version "13.6.15" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.6.15.tgz#5a2402632aabf83e5baf56342b4c82fe40859306" - integrity sha512-moFv4uNYhp8BFxIk3AkpoAnnjts7gwdpiG8RtyFiKbMtxKCS0zVZ5wPaaGpwC3V2N/K8TK8MwtSI3+WO9CHWjQ== - dependencies: - lib0 "^0.2.86" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" @@ -11621,8 +9937,3 @@ zod@^3.23.6: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== - -zwitch@^2.0.0, zwitch@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==