diff --git a/__tests__/AddNoteRichEditor.test.tsx b/__tests__/AddNoteRichEditor.test.tsx
index 00b630e..14c4fca 100644
--- a/__tests__/AddNoteRichEditor.test.tsx
+++ b/__tests__/AddNoteRichEditor.test.tsx
@@ -54,7 +54,12 @@ describe("AddNoteScreen", () => {
beforeEach(() => {
setNoteContentMock = jest.fn();
React.useState = jest.fn(() => ['', setNoteContentMock]);
- wrapper = shallow();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
+ wrapper = shallow();
});
afterEach(() => {
@@ -68,10 +73,15 @@ describe("AddNoteScreen", () => {
it('calls setNoteContent when the Rich Text Editor content changes', () => {
// Set up the mock function
const setNoteContentMock = jest.fn();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
// Shallow render the AddNoteScreen component and pass the mock function as a prop
// Ensure that this matches how your actual component receives the setNoteContent prop
- const wrapper = shallow();
+ const wrapper = shallow();
// Simulate the content change on the Rich Text Editor component
// The selector needs to match the test ID or the component name/class
diff --git a/__tests__/AddNoteScreen.test.tsx b/__tests__/AddNoteScreen.test.tsx
index 5691997..34dcda5 100644
--- a/__tests__/AddNoteScreen.test.tsx
+++ b/__tests__/AddNoteScreen.test.tsx
@@ -44,7 +44,12 @@ describe("AddNoteScreen", () => {
beforeEach(() => {
setNoteContentMock = jest.fn();
React.useState = jest.fn(() => ['', setNoteContentMock]);
- wrapper = shallow();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
+ wrapper = shallow();
});
afterEach(() => {
@@ -58,10 +63,15 @@ describe("AddNoteScreen", () => {
it('calls setNoteContent when the Rich Text Editor content changes', () => {
// Set up the mock function
const setNoteContentMock = jest.fn();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
// Shallow render the AddNoteScreen component and pass the mock function as a prop
// Ensure that this matches how your actual component receives the setNoteContent prop
- const wrapper = shallow();
+ const wrapper = shallow();
// Simulate the content change on the Rich Text Editor component
// The selector needs to match the test ID or the component name/class
diff --git a/__tests__/DifferentPlatformTimes.test.tsx b/__tests__/DifferentPlatformTimes.test.tsx
index cedebbe..0be00a5 100644
--- a/__tests__/DifferentPlatformTimes.test.tsx
+++ b/__tests__/DifferentPlatformTimes.test.tsx
@@ -38,7 +38,12 @@ jest.mock('react-native/Libraries/Utilities/Platform', () => ({
describe("AddNoteScreen", () => {
it("renders without crashing", () => {
- const wrapper = shallow();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
+ const wrapper = shallow();
expect(wrapper).toMatchSnapshot();
});
});
diff --git a/__tests__/InsertImageNoteScreen.test.tsx b/__tests__/InsertImageNoteScreen.test.tsx
index bf40a82..b0224e1 100644
--- a/__tests__/InsertImageNoteScreen.test.tsx
+++ b/__tests__/InsertImageNoteScreen.test.tsx
@@ -15,7 +15,12 @@ jest.mock('../lib/components/ThemeProvider', () => ({
describe("AddNoteScreen", () => {
it("adds image to editor", () => {
- const wrapper = shallow();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
+ const wrapper = shallow();
// Mock richTextRef
const richTextRef = { current: { insertImage: jest.fn() } };
diff --git a/__tests__/SetTime.test.tsx b/__tests__/SetTime.test.tsx
index d8e161e..cb33528 100644
--- a/__tests__/SetTime.test.tsx
+++ b/__tests__/SetTime.test.tsx
@@ -36,7 +36,12 @@ beforeAll(() => {
describe("AddNoteScreen", () => {
it("renders without crashing", () => {
- const wrapper = shallow();
+ const routeMock = {
+ params: {
+ untitledNumber: 1 // or any other value that makes sense for your tests
+ }
+ };
+ const wrapper = shallow();
expect(wrapper).toMatchSnapshot();
});
});
diff --git a/app.json b/app.json
index 239b953..8330b32 100644
--- a/app.json
+++ b/app.json
@@ -43,7 +43,6 @@
},
"updates": {
"url": "https://u.expo.dev/801029ef-db83-4668-a97a-5adcc4c333e2"
-
},
"extra": {
diff --git a/lib/components/loadingImage.tsx b/lib/components/loadingImage.tsx
index 78fa207..bc42840 100644
--- a/lib/components/loadingImage.tsx
+++ b/lib/components/loadingImage.tsx
@@ -122,4 +122,4 @@ const styles = StyleSheet.create({
position: "absolute",
alignSelf: "center",
},
-});
+});
\ No newline at end of file
diff --git a/lib/components/photoScroller.tsx b/lib/components/photoScroller.tsx
index 80bfabc..1b3a068 100644
--- a/lib/components/photoScroller.tsx
+++ b/lib/components/photoScroller.tsx
@@ -102,7 +102,7 @@ const PhotoScroller = forwardRef(
});
setNewMedia([...newMedia, newMediaItem]);
if (insertImageToEditor) {
- insertImageToEditor(uploadedUrl, 'Captured Image');
+ insertImageToEditor(uploadedUrl);
}
} else if (
uri.endsWith(".MOV") ||
diff --git a/lib/screens/AddNoteScreen.tsx b/lib/screens/AddNoteScreen.tsx
index 9f62378..79276da 100644
--- a/lib/screens/AddNoteScreen.tsx
+++ b/lib/screens/AddNoteScreen.tsx
@@ -38,6 +38,8 @@ const user = User.getInstance();
const AddNoteScreen: React.FC = ({ navigation, route }) => {
const [titleText, setTitleText] = useState("");
+ const [isSaveButtonEnabled, setIsSaveButtonEnabled] = useState(true);
+ const [untitledNumber, setUntitledNumber] = useState("0");
const [bodyText, setBodyText] = useState("");
const [newMedia, setNewMedia] = useState([]);
const [newAudio, setNewAudio] = useState([]);
@@ -56,13 +58,14 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
const [initialLoad, setInitialLoad] = useState(true);
const [promptedMissingTitle, setPromptedMissingTitle] = useState(false);
const [isUpdating, setIsUpdating] = useState(false);
- const [location, setLocation] = useState<{
+ const [isLocationIconPressed, setIsLocationIconPressed] = useState(false);
+ let [location, setLocation] = useState<{
latitude: number;
longitude: number;
} | null>(null);
const { theme } = useTheme();
-
+
useEffect(() => {
const keyboardDidShowListener = Keyboard.addListener(
"keyboardDidShow",
@@ -94,6 +97,15 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
checkLocationPermission();
}, []);
+ useEffect(() => {
+ const { untitledNumber } = route.params;
+ if (untitledNumber) {
+ setUntitledNumber(untitledNumber.toString());
+ }
+ }, [route.params]);
+
+ const [isLocationShown, setIsLocationShown] = useState(true);
+
const grabLocation = async () => {
try {
const userLocation = await Location.getCurrentPositionAsync({});
@@ -194,6 +206,60 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
});
};
+ const [latitude, setLatitude] = useState(
+ location?.latitude?.toString() || ""
+ );
+ const [longitude, setLongitude] = useState(
+ location?.longitude?.toString() || ""
+ );
+
+ async function getLocation() {
+ try {
+ let { status } = await Location.requestForegroundPermissionsAsync();
+ if (status !== "granted") {
+ console.log("Permission to access location was denied");
+ return null;
+ }
+ return await Location.getCurrentPositionAsync({});
+ } catch (error) {
+ console.error("Error getting location:", error);
+ return null;
+ }
+ }
+
+ const toggleLocationVisibility = async () => {
+ if (isLocationShown) {
+ // Hide Location
+ setLocation({
+ latitude: 0,
+ longitude: 0,
+ });
+ setLatitude("0");
+ setLongitude("0");
+ } else {
+ // Show Location
+ try {
+ let userLocation = await getLocation();
+
+ if (userLocation?.coords?.latitude !== undefined && userLocation?.coords?.longitude !== undefined) {
+ setLocation({
+ latitude: userLocation.coords.latitude,
+ longitude: userLocation.coords.longitude,
+ });
+
+ setLatitude(userLocation.coords.latitude.toString());
+ setLongitude(userLocation.coords.longitude.toString());
+ } else {
+ console.log("Location data is not available.");
+ }
+ } catch (error) {
+ console.error("Error setting location:", error);
+ }
+ }
+ setIsLocationShown((prev) => !prev);
+ setIsLocationIconPressed((prev) => !prev);
+ };
+
const checkLocationPermission = async () => {
try {
let { status } = await Location.getForegroundPermissionsAsync();
@@ -234,18 +300,23 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
const saveNote = async () => {
const locationPermissionGranted = await checkLocationPermission();
- if (titleText === "") {
- if (!promptedMissingTitle) {
- setPromptedMissingTitle(true);
- Alert.alert(
- "Title is empty",
- "Please enter a title to save the note, or press back again to confirm not saving the note.",
- );
- return;
- } else {
- navigation.goBack();
- return;
- }
+ setIsSaveButtonEnabled(false);
+ let finalTitle = titleText.trim();
+ if (finalTitle === "") {
+ finalTitle = `Untitled ${untitledNumber}`;
+ }
+
+ if (finalTitle.trim() === "") {
+ Alert.alert(
+ "Empty Title",
+ "Please enter a title to save the note or delete the note.",
+ [
+ { text: "Delete Note", onPress: () => navigation.goBack() },
+ { text: "OK", onPress: () => console.log("OK Pressed") }
+ ],
+ { cancelable: false }
+ );
+ return;
}
if (!locationPermissionGranted) {
return;
@@ -254,26 +325,21 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
setIsUpdating(true);
try {
- const userLocation = await Location.getCurrentPositionAsync({});
const userID = await user.getId();
- let latitude, longitude;
-
- if (Platform.OS === 'ios') {
- latitude = location?.latitude.toString();
- longitude = location?.longitude.toString();
- } else if (Platform.OS === 'android') {
- latitude = userLocation.coords.latitude.toString();
- longitude = userLocation.coords.longitude.toString();
- }
-
+ const userLocation = await Location.getCurrentPositionAsync({});
+ const latitudeToSave = location ? location.latitude.toString() : userLocation.coords.latitude.toString();
+ const longitudeToSave = location ? location.longitude.toString() : userLocation.coords.longitude.toString();
+
+ setTime(new Date()); // force a fresh time date grab on note save
+
const newNote = {
- title: titleText,
+ title: finalTitle,
text: bodyText,
media: newMedia,
audio: newAudio,
creator: userID,
- latitude: latitude,
- longitude: longitude,
+ latitude: latitudeToSave,
+ longitude: longitudeToSave,
published: isPublished,
tags: tags,
time: time,
@@ -291,6 +357,7 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
setIsUpdating(false);
}
}
+ setIsSaveButtonEnabled(true);
};
return (
@@ -298,7 +365,7 @@ const AddNoteScreen: React.FC = ({ navigation, route }) => {
-
+
= ({ navigation, route }) => {
setViewMedia(false);
setViewAudio(false);
setIsTagging(false);
- setIsLocation(!isLocation);
+ //setIsLocation(!isLocation);
+ toggleLocationVisibility();
setIsTime(false);
+
}}
>
-
+
{
diff --git a/lib/screens/EditNoteScreen.tsx b/lib/screens/EditNoteScreen.tsx
index d9ad82f..2e8d710 100644
--- a/lib/screens/EditNoteScreen.tsx
+++ b/lib/screens/EditNoteScreen.tsx
@@ -29,6 +29,8 @@ import NotePageStyles from "../../styles/pages/NoteStyles";
import ToastMessage from 'react-native-toast-message';
import { useTheme } from "../components/ThemeProvider";
import LoadingModal from "../components/LoadingModal";
+import * as Location from 'expo-location';
+
const user = User.getInstance();
@@ -54,10 +56,14 @@ const EditNoteScreen: React.FC = ({
const [keyboardOpen, setKeyboard] = useState(false);
const [keyboardHeight, setKeyboardHeight] = useState(0);
const [isLocation, setIsLocation] = useState(false);
+ let [isLocationShown, setIsLocationShown] = useState(
+ note.latitude === "0" && note.longitude === "0" );
+ let [isLocationIconPressed, setIsLocationIconPressed] = useState(
+ note.latitude === "0" && note.longitude === "0" );
const richTextRef = useRef(null);
const [isTime, setIsTime] = useState(false);
const [isUpdating, setIsUpdating] = useState(false);
- const [location, setLocation] = useState<{
+ let [location, setLocation] = useState<{
latitude: number;
longitude: number;
} | null>(
@@ -68,6 +74,8 @@ const EditNoteScreen: React.FC = ({
}
: null
);
+ console.log(note.latitude);
+ console.log(note.longitude);
const { height, width } = useWindowDimensions();
const { theme } = useTheme();
@@ -115,6 +123,13 @@ const EditNoteScreen: React.FC = ({
}
};
+ const [latitude, setLatitude] = useState(
+ location?.latitude?.toString() || ""
+ );
+ const [longitude, setLongitude] = useState(
+ location?.longitude?.toString() || ""
+ );
+
const photoScrollerRef = useRef<{ goBig(index: number): void } | null>(
null
);
@@ -125,6 +140,20 @@ const EditNoteScreen: React.FC = ({
}
};
+ async function getLocation() {
+ try {
+ let { status } = await Location.requestForegroundPermissionsAsync();
+ if (status !== "granted") {
+ console.log("Permission to access location was denied");
+ return null;
+ }
+ return await Location.getCurrentPositionAsync({});
+ } catch (error) {
+ console.error("Error getting location:", error);
+ return null;
+ }
+ }
+
const handleShareButtonPress = () => {
setIsPublished(!isPublished); // Toggle the share status
ToastMessage.show({
@@ -198,19 +227,55 @@ const EditNoteScreen: React.FC = ({
console.error("Error adding video with thumbnail: ", error);
}
}
+ const toggleLocationVisibility = async () => {
+ if (isLocationShown) {
+ // Hide Location
+ setLocation({
+ latitude: 0,
+ longitude: 0,
+ });
+ setLatitude("0");
+ setLongitude("0");
+ } else {
+ // Show Location
+ try {
+ let userLocation = await getLocation();
+
+ if (userLocation?.coords?.latitude !== undefined && userLocation?.coords?.longitude !== undefined) {
+ setLocation({
+ latitude: userLocation.coords.latitude,
+ longitude: userLocation.coords.longitude,
+ });
+
+ setLatitude(userLocation.coords.latitude.toString());
+ setLongitude(userLocation.coords.longitude.toString());
+ } else {
+ console.log("Location data is not available.");
+ }
+ } catch (error) {
+ console.error("Error setting location:", error);
+ }
+ }
+ setIsLocationShown((prev) => !prev);
+ setIsLocationIconPressed((prev) => !prev);
+ };
const handleSaveNote = async () => {
setIsUpdating(true);
try {
- const editedNote = {
+ let userLocation = await getLocation();
+ const finalLatitude = !isLocationShown ? userLocation?.coords.latitude.toString() || "" : "0";
+ const finalLongitude = !isLocationShown ? userLocation?.coords.longitude.toString() || "" : "0";
+
+ const editedNote: Note = {
id: note.id,
title: title,
text: text,
creator: (await user.getId()) || "",
- media: media,
- latitude: location?.latitude.toString() || "",
- longitude: location?.longitude.toString() || "",
+ media,
+ latitude: finalLatitude,
+ longitude: finalLongitude,
audio: newAudio,
published: isPublished,
time: time,
@@ -271,8 +336,8 @@ const EditNoteScreen: React.FC = ({
setViewAudio(!viewAudio)}>
- setIsLocation(!isLocation)}>
-
+ toggleLocationVisibility()}>
+
setIsTime(!isTime)}>
diff --git a/lib/screens/HomeScreen.tsx b/lib/screens/HomeScreen.tsx
index 2280741..8d5ffaa 100644
--- a/lib/screens/HomeScreen.tsx
+++ b/lib/screens/HomeScreen.tsx
@@ -20,8 +20,9 @@ import { SwipeListView } from "react-native-swipe-list-view";
import NoteSkeleton from "../components/noteSkeleton";
import LoadingImage from "../components/loadingImage";
import { formatToLocalDateString } from "../components/time";
-import { ThemeProvider, useTheme } from '../components/ThemeProvider';
+import { useTheme } from '../components/ThemeProvider';
import Constants from "expo-constants";
+import ToastMessage from 'react-native-toast-message';
import DropDownPicker from 'react-native-dropdown-picker';
import NoteDetailModal from "./mapPage/NoteDetailModal";
@@ -146,6 +147,21 @@ const HomeScreen: React.FC = ({ navigation, route }) => {
setUpdateCounter(updateCounter + 1);
};
+ const findNextUntitledNumber = (notes : Note[]) => {
+ let maxNumber = 0;
+ notes.forEach((note) => {
+ const match = note.title.match(/^Untitled (\d+)$/);
+ if (match) {
+ const number = parseInt(match[1]);
+ if (number > maxNumber) {
+ maxNumber = number;
+ }
+ }
+ });
+ return maxNumber + 1;
+ };
+
+
const styles = StyleSheet.create({
container: {
paddingTop: Constants.statusBarHeight - 20,
@@ -454,6 +470,9 @@ const HomeScreen: React.FC = ({ navigation, route }) => {
imageURI={ImageURI}
type={ImageType}
isImage={true}
+ useCustomDimensions={true}
+ customWidth={100}
+ customHeight={100}
/>
) : (
@@ -571,7 +590,10 @@ const HomeScreen: React.FC = ({ navigation, route }) => {
{rendering ? : renderList(notes)}
navigation.navigate("AddNote", { refreshPage })}
+ onPress={() => {
+ const untitledNumber = findNextUntitledNumber(notes);
+ navigation.navigate("AddNote", { untitledNumber, refreshPage });
+ }}
>
diff --git a/package.json b/package.json
index 8774aac..2f3a590 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
]
},
"dependencies": {
+ "@10play/tentap-editor": "^0.4.55",
"@gapur/react-native-accordion": "^1.0.7",
"@react-native-async-storage/async-storage": "1.18.2",
"@react-native-community/datetimepicker": "7.2.0",
@@ -72,7 +73,7 @@
"react-native-uuid": "^2.0.1",
"react-native-vector-icons": "^10.0.0",
"react-native-video": "^5.2.1",
- "react-native-webview": "13.2.2",
+ "react-native-webview": "^13.8.4",
"rn-placeholder": "^3.0.3"
},
"devDependencies": {
diff --git a/yarn.lock b/yarn.lock
index e830123..ca92c5e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,6 +7,40 @@
resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.4.tgz#9606eb651955499525d068ce0ad8bea596286ce2"
integrity sha512-W3ezhHGfO0MS1PtGloaTpg0PbaT8aZSmmaerL7idtU5F7oCI+uu25k+MsMS31BVFlp4aMkHSrNRxiD72IlK8TA==
+"@10play/tentap-editor@^0.4.55":
+ version "0.4.55"
+ resolved "https://registry.yarnpkg.com/@10play/tentap-editor/-/tentap-editor-0.4.55.tgz#cdec1b808caf1d903f1f5fa4eb462ba9181061a9"
+ integrity sha512-5dEIYHvkWkfg00nTYiUcJoibRU5EpjQyfE1I0wcdOgJrW2W6YQiuYc5sN/uJjOklDexI777qYzHmZ4lvYQ3mbw==
+ dependencies:
+ "@tiptap/extension-blockquote" "^2.2.1"
+ "@tiptap/extension-bold" "^2.2.1"
+ "@tiptap/extension-bullet-list" "^2.2.1"
+ "@tiptap/extension-code" "^2.2.1"
+ "@tiptap/extension-code-block" "^2.2.1"
+ "@tiptap/extension-color" "^2.1.16"
+ "@tiptap/extension-document" "^2.2.1"
+ "@tiptap/extension-dropcursor" "^2.2.4"
+ "@tiptap/extension-heading" "^2.2.1"
+ "@tiptap/extension-highlight" "^2.1.16"
+ "@tiptap/extension-history" "^2.2.1"
+ "@tiptap/extension-horizontal-rule" "^2.2.1"
+ "@tiptap/extension-image" "^2.2.1"
+ "@tiptap/extension-italic" "^2.2.1"
+ "@tiptap/extension-link" "^2.1.16"
+ "@tiptap/extension-list-item" "^2.2.1"
+ "@tiptap/extension-ordered-list" "^2.2.1"
+ "@tiptap/extension-placeholder" "^2.2.1"
+ "@tiptap/extension-strike" "^2.2.1"
+ "@tiptap/extension-task-item" "^2.1.16"
+ "@tiptap/extension-task-list" "^2.1.16"
+ "@tiptap/extension-text-style" "^2.1.16"
+ "@tiptap/extension-underline" "^2.1.16"
+ "@tiptap/pm" "^2.1.16"
+ "@tiptap/react" "^2.1.16"
+ "@tiptap/starter-kit" "^2.1.16"
+ lodash "^4.17.21"
+ react-dom "^18.2.0"
+
"@ampproject/remapping@^2.2.0":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
@@ -2164,6 +2198,11 @@
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+"@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==
+
"@react-native-async-storage/async-storage@1.18.2":
version "1.18.2"
resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.18.2.tgz#ec8fd487a0b6c9500b43ece4b8779d1561f12e91"
@@ -2742,6 +2781,11 @@
color "^4.2.3"
warn-once "^0.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==
+
"@segment/loosely-validate-event@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681"
@@ -2827,6 +2871,219 @@
"@testing-library/dom" "^9.0.0"
"@types/react-dom" "^18.0.0"
+"@tiptap/core@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.2.4.tgz#6f957678eb733e70b9282fb5098d284a77bd09a3"
+ integrity sha512-cRrI8IlLIhCE1hacBQzXIC8dsRvGq6a4lYWQK/BaHuZg21CG7szp3Vd8Ix+ra1f5v0xPOT+Hy+QFNQooRMKMCw==
+
+"@tiptap/extension-blockquote@^2.2.1", "@tiptap/extension-blockquote@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.2.4.tgz#d733bea016986c0017e308a2540378c9551c7f10"
+ integrity sha512-FrfPnn0VgVrUwWLwja1afX99JGLp6PE9ThVcmri+tLwUZQvTTVcCvHoCdOakav3/nge1+aV4iE3tQdyq1tWI9Q==
+
+"@tiptap/extension-bold@^2.2.1", "@tiptap/extension-bold@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.2.4.tgz#3690eea1ebef49f8d30043fdcfc7bf2866a9b887"
+ integrity sha512-v3tTLc8YESFZPOGj5ByFr8VbmQ/PTo49T1vsK50VubxIN/5r9cXlKH8kb3dZlZxCxJa3FrXNO/M8rdGBSWQvSg==
+
+"@tiptap/extension-bubble-menu@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.2.4.tgz#2477901c78a18c629f7ae828394ff1f91a500c60"
+ integrity sha512-Nx1fS9jcFlhxaTDYlnayz2UulhK6CMaePc36+7PQIVI+u20RhgTCRNr25zKNemvsiM0RPZZVUjlHkxC0l5as1Q==
+ dependencies:
+ tippy.js "^6.3.7"
+
+"@tiptap/extension-bullet-list@^2.2.1", "@tiptap/extension-bullet-list@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.2.4.tgz#1763ae7686bc3f209c1662d571e738280d190ff8"
+ integrity sha512-z/MPmW8bhRougMuorl6MAQBXeK4rhlP+jBWlNwT+CT8h5IkXqPnDbM1sZeagp2nYfVV6Yc4RWpzimqHHtGnYTA==
+
+"@tiptap/extension-code-block@^2.2.1", "@tiptap/extension-code-block@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.2.4.tgz#6d72f3e458cf417a4be6b9cc1f9409ad89f55b78"
+ integrity sha512-h6WV9TmaBEZmvqe1ezMR83DhCPUap6P2mSR5pwVk0WVq6rvZjfgU0iF3EetBJOeDgPlz7cNe2NMDfVb1nGTM/g==
+
+"@tiptap/extension-code@^2.2.1", "@tiptap/extension-code@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.2.4.tgz#ba77dc56daac75bdf83a2aaecff896e9301c2cdf"
+ integrity sha512-JB4SJ2mUU/9qXFUf+K5K9szvovnN9AIcCb0f0UlcVBuddKHSqCl3wO3QJgYt44BfQTLMNuyzr+zVqfFd6BNt/g==
+
+"@tiptap/extension-color@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.2.4.tgz#c6de7a471c6021466ea8c2e891a7935562804707"
+ integrity sha512-R3caThbG25gQz5b1+3PoJnVmuMF0lnqxPJ86l2ZWRAuqRSSEOJDYMGY5rlnPkAVW23Ej2FOuDFVxV/18pFHo3w==
+
+"@tiptap/extension-document@^2.2.1", "@tiptap/extension-document@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.2.4.tgz#d46c1fdd1ea5b7191112fae4e9f8a63a46309afc"
+ integrity sha512-z+05xGK0OFoXV1GL+/8bzcZuWMdMA3+EKwk5c+iziG60VZcvGTF7jBRsZidlu9Oaj0cDwWHCeeo6L9SgSh6i2A==
+
+"@tiptap/extension-dropcursor@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.2.4.tgz#df39861159a022029f733924e9a3977a76dfed17"
+ integrity sha512-IHwkEKmqpqXyJi16h7871NrcIqeyN7I6XRE2qdqi+MhGigVWI8nWHoYbjRKa7K/1uhs5zeRYyDlq5EuZyL6mgA==
+
+"@tiptap/extension-floating-menu@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.2.4.tgz#a97becec8cedfa1fb282a7a52caed35a80098581"
+ integrity sha512-U25l7PEzOmlAPugNRl8t8lqyhQZS6W/+3f92+FdwW9qXju3i62iX/3OGCC3Gv+vybmQ4fbZmMjvl+VDfenNi3A==
+ dependencies:
+ tippy.js "^6.3.7"
+
+"@tiptap/extension-gapcursor@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.2.4.tgz#607b2682376c5ced086258f8329eb080e8047627"
+ integrity sha512-Y6htT/RDSqkQ1UwG2Ia+rNVRvxrKPOs3RbqKHPaWr3vbFWwhHyKhMCvi/FqfI3d5pViVHOZQ7jhb5hT/a0BmNw==
+
+"@tiptap/extension-hard-break@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.2.4.tgz#2be463b2f23fc8f57004f3481829aa0b236c17f6"
+ integrity sha512-FPvS57GcqHIeLbPKGJa3gnH30Xw+YB1PXXnAWG2MpnMtc2Vtj1l5xaYYBZB+ADdXLAlU0YMbKhFLQO4+pg1Isg==
+
+"@tiptap/extension-heading@^2.2.1", "@tiptap/extension-heading@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.2.4.tgz#a90469a879713dc074ce45e3d7d8cf7a02ae6a1f"
+ integrity sha512-gkq7Ns2FcrOCRq7Q+VRYt5saMt2R9g4REAtWy/jEevJ5UV5vA2AiGnYDmxwAkHutoYU0sAUkjqx37wE0wpamNw==
+
+"@tiptap/extension-highlight@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.2.4.tgz#f94c3bf794ddd7f0ac8613243b0c95e4c6ff8b0f"
+ integrity sha512-GGl6ehKQ0Q0gGgUQhkWg2XYPfhVU5c0JD3NHzV4OrBP6JAtFeMYeSLdfYzFcmoYnGafvSZaJ3NukUvnDHZGzRg==
+
+"@tiptap/extension-history@^2.2.1", "@tiptap/extension-history@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.2.4.tgz#2d37ccfce9a8b7997bb4d46ebb19e986c5eb6f39"
+ integrity sha512-FDM32XYF5NU4mzh+fJ8w2CyUqv0l2Nl15sd6fOhQkVxSj8t57z+DUXc9ZR3zkH+1RAagYJo/2Gu3e99KpMr0tg==
+
+"@tiptap/extension-horizontal-rule@^2.2.1", "@tiptap/extension-horizontal-rule@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.2.4.tgz#e1fc33a05d337c2871180f569a7af1774c74658a"
+ integrity sha512-iCRHjFQQHApWg3R4fkKkJQhWEOdu1Fdc4YEAukdOXPSg3fg36IwjvsMXjt9SYBtVZ+iio3rORCZGXyMvgCH9uw==
+
+"@tiptap/extension-image@^2.2.1":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.2.4.tgz#55c267e9ff77e2bf3c514896331ad91d18da08c3"
+ integrity sha512-xOnqZpnP/fAfmK5AKmXplVQdXBtY5AoZ9B+qllH129aLABaDRzl3e14ZRHC8ahQawOmCe6AOCCXYUBXDOlY5Jg==
+
+"@tiptap/extension-italic@^2.2.1", "@tiptap/extension-italic@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.2.4.tgz#67403ec3aed630062c7063b7e9e7699d07db683e"
+ integrity sha512-qIhGNvWnsQswSgEMRA8jQQjxfkOGNAuNWKEVQX9DPoqAUgknT41hQcAMP8L2+OdACpb2jbVMOO5Cy5Dof2L8/w==
+
+"@tiptap/extension-link@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.2.4.tgz#1cb4c89e15f1fdfb1b7f3f6f26c62f7d51a6c3cb"
+ integrity sha512-Qsx0cFZm4dxbkToXs5TcXbSoUdicv8db1gV1DYIZdETqjBm4wFjlzCUP7hPHFlvNfeSy1BzAMRt+RpeuiwvxWQ==
+ dependencies:
+ linkifyjs "^4.1.0"
+
+"@tiptap/extension-list-item@^2.2.1", "@tiptap/extension-list-item@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.2.4.tgz#2412dd92e51c3cbc4f2abc3c38ec2ab8348c1af9"
+ integrity sha512-lPLKGKsHpM9ClUa8n7GEUn8pG6HCYU0vFruIy3l2t6jZdHkrgBnYtVGMZ13K8UDnj/hlAlccxku0D0P4mA1Vrg==
+
+"@tiptap/extension-ordered-list@^2.2.1", "@tiptap/extension-ordered-list@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.2.4.tgz#dfa6c6869a3d16fe5b2a10749ffe5b999346efd2"
+ integrity sha512-TpFy140O9Af1JciXt+xwqYUXxcJ6YG8zi/B5UDJujp+FH5sCmlYYBBnWxiFMhVaj6yEmA2eafu1qUkic/1X5Aw==
+
+"@tiptap/extension-paragraph@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.2.4.tgz#9126fafbf984e324bfb3fab34deb689def7eb98d"
+ integrity sha512-m1KwyvTNJxsq7StbspbcOhxO4Wk4YpElDbqOouWi+H4c8azdpI5Pn96ZqhFeE9bSyjByg6OcB/wqoJsLbeFWdQ==
+
+"@tiptap/extension-placeholder@^2.2.1":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.2.4.tgz#d75572f6fb0cb3bbbedfa2ced49c55285ae8fdd5"
+ integrity sha512-UL4Fn9T33SoS7vdI3NnSxBJVeGUIgCIutgXZZ5J8CkcRoDIeS78z492z+6J+qGctHwTd0xUL5NzNJI82HfiTdg==
+
+"@tiptap/extension-strike@^2.2.1", "@tiptap/extension-strike@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.2.4.tgz#f987a6fe7b85e3179b413792ae3f33dd9c086e01"
+ integrity sha512-/a2EwQgA+PpG17V2tVRspcrIY0SN3blwcgM7lxdW4aucGkqSKnf7+91dkhQEwCZ//o8kv9mBCyRoCUcGy6S5Xg==
+
+"@tiptap/extension-task-item@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.2.4.tgz#303a561a315c13cc983ab1c4283e256c2cde000d"
+ integrity sha512-Ixzv7bPcgrWelSD0Jy6yAlHxmGWpD5lPt6Ey4POYy7u98duyUFOBMHLcsV24ipQsRacuB+htgmuqOrkiL+hg7w==
+
+"@tiptap/extension-task-list@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.2.4.tgz#138ebeeb8f0bedd58926094d0e0f52ab36dd7548"
+ integrity sha512-URh1Yzj/YZBOMkobK4/U8s1QYwIIqHm4b0YadLPPZx9IzTjyV/2bvIakphCmBtxWxeTXW5TbO9eNod3qatq21w==
+
+"@tiptap/extension-text-style@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.2.4.tgz#078f7fc1712e1b0ac7b6597156b8a9bf12a5eaab"
+ integrity sha512-8Mcxy+HUHPUgK7bOv34m8zhbhzPm6f1/hgbgwz9m+Oel7MNPElsMXtxxygbwtr7Hbj6S4NBoBl/Ir4BkziYRbQ==
+
+"@tiptap/extension-text@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.2.4.tgz#aa101c568aa78a4ddc06a944eefcd3ac944987d4"
+ integrity sha512-NlKHMPnRJXB+0AGtDlU0P2Pg+SdesA2lMMd7JzDUgJgL7pX2jOb8eUqSeOjFKuSzFSqYfH6C3o6mQiNhuQMv+g==
+
+"@tiptap/extension-underline@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.2.4.tgz#7be1a616e16452dd17a9c6fd03e40636bc676972"
+ integrity sha512-jCHgIJMwtXlGHVy/j3L8/QvglHCikkHJw7YS5yf8E/8HlPh1tZfVy/IxdgacDOpUN30X+UPJZQDdVKymafgwdA==
+
+"@tiptap/pm@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.2.4.tgz#701975e3221ac40b1bfba52d89e1345024212411"
+ integrity sha512-Po0klR165zgtinhVp1nwMubjyKx6gAY9kH3IzcniYLCkqhPgiqnAcCr61TBpp4hfK8YURBS4ihvCB1dyfCyY8A==
+ 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.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.2.4.tgz#bfb6a484a26d85df7a6f9636b98c38f4e83de4c0"
+ integrity sha512-HkYmMZWcETPZn3KpzdDg/ns2TKeFh54TvtCEInA4ljYtWGLoZc/A+KaiEtMIgVs+Mo1XwrhuoNGjL9c0OK2HJw==
+ dependencies:
+ "@tiptap/extension-bubble-menu" "^2.2.4"
+ "@tiptap/extension-floating-menu" "^2.2.4"
+
+"@tiptap/starter-kit@^2.1.16":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.2.4.tgz#7d9c35fc423bb0bb6a9b2e660c41a080d8caa7e7"
+ integrity sha512-Kbk7qUfIZg3+bNa3e/wBeDQt4jJB46uQgM+xy5NSY6H8NZP6gdmmap3aIrn9S/W/hGpxJl4RcXAeaT0CQji9XA==
+ dependencies:
+ "@tiptap/core" "^2.2.4"
+ "@tiptap/extension-blockquote" "^2.2.4"
+ "@tiptap/extension-bold" "^2.2.4"
+ "@tiptap/extension-bullet-list" "^2.2.4"
+ "@tiptap/extension-code" "^2.2.4"
+ "@tiptap/extension-code-block" "^2.2.4"
+ "@tiptap/extension-document" "^2.2.4"
+ "@tiptap/extension-dropcursor" "^2.2.4"
+ "@tiptap/extension-gapcursor" "^2.2.4"
+ "@tiptap/extension-hard-break" "^2.2.4"
+ "@tiptap/extension-heading" "^2.2.4"
+ "@tiptap/extension-history" "^2.2.4"
+ "@tiptap/extension-horizontal-rule" "^2.2.4"
+ "@tiptap/extension-italic" "^2.2.4"
+ "@tiptap/extension-list-item" "^2.2.4"
+ "@tiptap/extension-ordered-list" "^2.2.4"
+ "@tiptap/extension-paragraph" "^2.2.4"
+ "@tiptap/extension-strike" "^2.2.4"
+ "@tiptap/extension-text" "^2.2.4"
+
"@tootallnate/once@2":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
@@ -4266,6 +4523,11 @@ 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"
@@ -7274,6 +7536,18 @@ 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"
@@ -7416,6 +7690,18 @@ 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"
+
marky@^1.2.2:
version "1.2.5"
resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0"
@@ -7451,6 +7737,11 @@ md5hex@^1.0.0:
resolved "https://registry.yarnpkg.com/md5hex/-/md5hex-1.0.0.tgz#ed74b477a2ee9369f75efee2f08d5915e52a42e8"
integrity sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==
+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==
+
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -8408,6 +8699,11 @@ 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"
@@ -8755,6 +9051,159 @@ prop-types@*, prop-types@^15.5.7, prop-types@^15.6.2, prop-types@^15.7.2, prop-t
object-assign "^4.1.1"
react-is "^16.13.1"
+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.12.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.12.0.tgz#d2de09d37897abf7adb6293d925ff132dac5b0a6"
+ integrity sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==
+ dependencies:
+ markdown-it "^14.0.0"
+ prosemirror-model "^1.0.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.16.0, prosemirror-model@^1.19.0, prosemirror-model@^1.19.4, prosemirror-model@^1.8.1:
+ version "1.19.4"
+ resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.19.4.tgz#e45e84480c97dd3922095dbe579e1c98c86c0704"
+ integrity sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==
+ 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.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.3, prosemirror-transform@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.8.0.tgz#a47c64a3c373c1bd0ff46e95be3210c8dda0cd11"
+ integrity sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==
+ dependencies:
+ prosemirror-model "^1.0.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.32.7:
+ version "1.33.3"
+ resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.33.3.tgz#e93564b3aa4beac6ad0244e9b368563d0cc25727"
+ integrity sha512-P4Ao/bc4OrU/2yLIf8dL4lJaEtjLR3QjIvQHgJYp2jUS7kYM4bSR6okbBjkqzOs/FwUon6UGjTLdKMnPL1MZqw==
+ dependencies:
+ prosemirror-model "^1.16.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.1.0"
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
@@ -8773,6 +9222,11 @@ 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.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
@@ -8880,7 +9334,7 @@ react-devtools-core@^4.27.2, react-devtools-core@^4.27.7:
shell-quote "^1.6.1"
ws "^7"
-react-dom@18.2.0:
+react-dom@18.2.0, react-dom@^18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
@@ -9048,10 +9502,10 @@ react-native-video@^5.2.1:
prop-types "^15.7.2"
shaka-player "^2.5.9"
-react-native-webview@13.2.2:
- version "13.2.2"
- resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.2.2.tgz#06b04db8e1f4ed57a9dc92f4094aa0e41271b89b"
- integrity sha512-uT70y2GUqQzaj2RwRb/QuKRdXeDjXM6oN3DdPqYQlOOMFTCT8r62fybyjVVRoik8io+KLa5KnmuSoS5B2O1BmA==
+react-native-webview@^13.8.4:
+ version "13.8.4"
+ resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.8.4.tgz#03b2870090ad6c326a6460ba2f50e5243eb65a94"
+ integrity sha512-dFoM9EfkAb++ZzycZyKRnjZtNUn85cf6bWp1iBlkgyNml7ULzR1gfaPT3qESoA3K1RfTmf5Xhw0M2In2A3a3wg==
dependencies:
escape-string-regexp "2.0.0"
invariant "2.2.4"
@@ -9431,6 +9885,11 @@ rn-placeholder@^3.0.3:
resolved "https://registry.yarnpkg.com/rn-placeholder/-/rn-placeholder-3.0.3.tgz#98f635b263ee003af2a984eed32d86ade308df35"
integrity sha512-EmVeLT8zDcTPilQZ2OHO/IiYUy2gApKGgbshDZBX0C4qxsn0cFATwgwOwyz8O7Vwg1Hul97Ci95hu7d6Js6XMQ==
+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==
+
rst-selector-parser@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91"
@@ -10200,6 +10659,13 @@ tinycolor2@^1.4.1:
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
+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"
@@ -10385,6 +10851,11 @@ ua-parser-js@^1.0.35:
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f"
integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==
+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==
+
uglify-es@^3.1.9:
version "3.3.9"
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
@@ -10571,6 +11042,11 @@ vlq@^1.0.0:
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"