diff --git a/apps/api/src/services/courses/activities/uploads/sub_file.py b/apps/api/src/services/courses/activities/uploads/sub_file.py
index 9ebd46f5..c6d16e74 100644
--- a/apps/api/src/services/courses/activities/uploads/sub_file.py
+++ b/apps/api/src/services/courses/activities/uploads/sub_file.py
@@ -19,5 +19,5 @@ async def upload_submission_file(
org_uuid,
contents,
f"{name_in_disk}",
- ["pdf", "docx", "mp4", "jpg", "jpeg", "png", "pptx"],
+ ["pdf", "docx", "mp4", "jpg", "jpeg", "png", "pptx", "zip"],
)
diff --git a/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py b/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py
index 56981cc0..af9814ef 100644
--- a/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py
+++ b/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py
@@ -19,5 +19,5 @@ async def upload_reference_file(
org_uuid,
contents,
f"{name_in_disk}",
- ["pdf", "docx", "mp4", "jpg", "jpeg", "png", "pptx"],
+ ["pdf", "docx", "mp4", "jpg", "jpeg", "png", "pptx", "zip"],
)
diff --git a/apps/web/app/not-found.tsx b/apps/web/app/not-found.tsx
index fe55443f..3fe99771 100644
--- a/apps/web/app/not-found.tsx
+++ b/apps/web/app/not-found.tsx
@@ -20,7 +20,7 @@ export default function NotFound() {
404!
- We are very sorry for the inconvinience. It looks like you're trying to
+ We are very sorry for the inconvenience. It looks like you're trying to
access a page that has been deleted or never existed before
diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskGeneralEdit.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskGeneralEdit.tsx
index 55d44598..d9221af0 100644
--- a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskGeneralEdit.tsx
+++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskGeneralEdit.tsx
@@ -90,7 +90,7 @@ export function AssignmentTaskGeneralEdit() {
-
Allowed formats : pdf, docx, mp4, jpg, jpeg, png, pptx
+
Allowed formats : pdf, docx, mp4, jpg, jpeg, png, pptx, zip
diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx
index 946fae70..53c8b4f5 100644
--- a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx
+++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx
@@ -263,7 +263,7 @@ export default function TaskFileObject({ view, user_id, assignmentTaskUUID }: Ta
)}
-
Allowed formats : pdf, docx, mp4, jpg, jpeg, png, pptx
+
Allowed formats : pdf, docx, mp4, jpg, jpeg, png, pptx, zip
{isLoading ? (
diff --git a/apps/web/components/Dashboard/Course/EditCourseGeneral/ThumbnailUpdate.tsx b/apps/web/components/Dashboard/Course/EditCourseGeneral/ThumbnailUpdate.tsx
index 980fd6bb..ba264bd2 100644
--- a/apps/web/components/Dashboard/Course/EditCourseGeneral/ThumbnailUpdate.tsx
+++ b/apps/web/components/Dashboard/Course/EditCourseGeneral/ThumbnailUpdate.tsx
@@ -3,10 +3,11 @@ import { useOrg } from '@components/Contexts/OrgContext'
import { getAPIUrl } from '@services/config/config'
import { updateCourseThumbnail } from '@services/courses/courses'
import { getCourseThumbnailMediaDirectory } from '@services/media/media'
-import { ArrowBigUpDash, UploadCloud } from 'lucide-react'
+import { ArrowBigUpDash, UploadCloud, Image as ImageIcon } from 'lucide-react'
import { useLHSession } from '@components/Contexts/LHSessionContext'
-import React from 'react'
+import React, { useState } from 'react'
import { mutate } from 'swr'
+import UnsplashImagePicker from './UnsplashImagePicker'
function ThumbnailUpdate() {
const course = useCourse() as any
@@ -15,10 +16,24 @@ function ThumbnailUpdate() {
const [localThumbnail, setLocalThumbnail] = React.useState(null) as any
const [isLoading, setIsLoading] = React.useState(false) as any
const [error, setError] = React.useState('') as any
+ const [showUnsplashPicker, setShowUnsplashPicker] = useState(false)
const handleFileChange = async (event: any) => {
const file = event.target.files[0]
setLocalThumbnail(file)
+ await updateThumbnail(file)
+ }
+
+ const handleUnsplashSelect = async (imageUrl: string) => {
+ setIsLoading(true)
+ const response = await fetch(imageUrl)
+ const blob = await response.blob()
+ const file = new File([blob], 'unsplash_image.jpg', { type: 'image/jpeg' })
+ setLocalThumbnail(file)
+ await updateThumbnail(file)
+ }
+
+ const updateThumbnail = async (file: File) => {
setIsLoading(true)
const res = await updateCourseThumbnail(
course.courseStructure.course_uuid,
@@ -49,8 +64,7 @@ function ThumbnailUpdate() {
{localThumbnail ? (
})
) : (
![]()
{isLoading ? (
-
-
) : (
-
+
+
)}
+ {showUnsplashPicker && (
+
setShowUnsplashPicker(false)}
+ />
+ )}
)
}
-export default ThumbnailUpdate
+export default ThumbnailUpdate
\ No newline at end of file
diff --git a/apps/web/components/Dashboard/Course/EditCourseGeneral/UnsplashImagePicker.tsx b/apps/web/components/Dashboard/Course/EditCourseGeneral/UnsplashImagePicker.tsx
new file mode 100644
index 00000000..662974af
--- /dev/null
+++ b/apps/web/components/Dashboard/Course/EditCourseGeneral/UnsplashImagePicker.tsx
@@ -0,0 +1,166 @@
+import React, { useState, useEffect, useCallback } from 'react';
+import { createApi } from 'unsplash-js';
+import { Search, X, Cpu, Briefcase, GraduationCap, Heart, Palette, Plane, Utensils,
+ Dumbbell, Music, Shirt, Book, Building, Bike, Camera, Microscope, Coins, Coffee, Gamepad,
+ Flower} from 'lucide-react';
+
+const unsplash = createApi({
+ accessKey: process.env.NEXT_PUBLIC_UNSPLASH_ACCESS_KEY as string,
+});
+
+const IMAGES_PER_PAGE = 20;
+
+const predefinedLabels = [
+ { name: 'Nature', icon: Flower },
+ { name: 'Technology', icon: Cpu },
+ { name: 'Business', icon: Briefcase },
+ { name: 'Education', icon: GraduationCap },
+ { name: 'Health', icon: Heart },
+ { name: 'Art', icon: Palette },
+ { name: 'Science', icon: Microscope },
+ { name: 'Travel', icon: Plane },
+ { name: 'Food', icon: Utensils },
+ { name: 'Sports', icon: Dumbbell },
+ { name: 'Music', icon: Music },
+ { name: 'Fashion', icon: Shirt },
+ { name: 'History', icon: Book },
+ { name: 'Architecture', icon: Building },
+ { name: 'Fitness', icon: Bike },
+ { name: 'Photography', icon: Camera },
+ { name: 'Biology', icon: Microscope },
+ { name: 'Finance', icon: Coins },
+ { name: 'Lifestyle', icon: Coffee },
+ { name: 'Gaming', icon: Gamepad },
+];
+
+interface UnsplashImagePickerProps {
+ onSelect: (imageUrl: string) => void;
+ onClose: () => void;
+}
+
+const UnsplashImagePicker: React.FC = ({ onSelect, onClose }) => {
+ const [query, setQuery] = useState('');
+ const [images, setImages] = useState([]);
+ const [page, setPage] = useState(1);
+ const [loading, setLoading] = useState(false);
+
+ const fetchImages = useCallback(async (searchQuery: string, pageNum: number) => {
+ setLoading(true);
+ try {
+ const result = await unsplash.search.getPhotos({
+ query: searchQuery,
+ page: pageNum,
+ perPage: IMAGES_PER_PAGE,
+ });
+ if (result && result.response) {
+ setImages(prevImages => pageNum === 1 ? result.response.results : [...prevImages, ...result.response.results]);
+ } else {
+ console.error('Unexpected response structure:', result);
+ }
+ } catch (error) {
+ console.error('Error fetching images:', error);
+ } finally {
+ setLoading(false);
+ }
+ }, []);
+
+ const debouncedFetchImages = useCallback(
+ debounce((searchQuery: string) => {
+ setPage(1);
+ fetchImages(searchQuery, 1);
+ }, 300),
+ [fetchImages]
+ );
+
+ useEffect(() => {
+ if (query) {
+ debouncedFetchImages(query);
+ }
+ }, [query, debouncedFetchImages]);
+
+ const handleSearch = (e: React.ChangeEvent) => {
+ setQuery(e.target.value);
+ };
+
+ const handleLabelClick = (label: string) => {
+ setQuery(label);
+ };
+
+ const handleLoadMore = () => {
+ const nextPage = page + 1;
+ setPage(nextPage);
+ fetchImages(query, nextPage);
+ };
+
+ const handleImageSelect = (imageUrl: string) => {
+ onSelect(imageUrl);
+ onClose();
+ };
+
+ return (
+
+
+
+
Choose an image from Unsplash
+
+
+
+
+
+
+
+ {predefinedLabels.map(label => (
+
+ ))}
+
+
+ {images.map(image => (
+
+

handleImageSelect(image.urls.full)}
+ />
+
+ ))}
+
+ {loading &&
Loading...
}
+ {!loading && images.length > 0 && (
+
+ )}
+
+
+ );
+};
+
+// Custom debounce function
+const debounce = (func: Function, delay: number) => {
+ let timeoutId: NodeJS.Timeout;
+ return (...args: any[]) => {
+ clearTimeout(timeoutId);
+ timeoutId = setTimeout(() => func(...args), delay);
+ };
+};
+
+export default UnsplashImagePicker;
\ No newline at end of file
diff --git a/apps/web/components/Dashboard/UserAccount/UserEditGeneral/UserEditGeneral.tsx b/apps/web/components/Dashboard/UserAccount/UserEditGeneral/UserEditGeneral.tsx
index ce8ef647..691783d4 100644
--- a/apps/web/components/Dashboard/UserAccount/UserEditGeneral/UserEditGeneral.tsx
+++ b/apps/web/components/Dashboard/UserAccount/UserEditGeneral/UserEditGeneral.tsx
@@ -175,7 +175,7 @@ function UserEditGeneral() {
}
>
- Change Thumbnail
+ Change Avatar
)}
diff --git a/apps/web/components/Objects/Activities/DynamicCanva/DynamicCanva.tsx b/apps/web/components/Objects/Activities/DynamicCanva/DynamicCanva.tsx
index e5dbf880..86460612 100644
--- a/apps/web/components/Objects/Activities/DynamicCanva/DynamicCanva.tsx
+++ b/apps/web/components/Objects/Activities/DynamicCanva/DynamicCanva.tsx
@@ -24,6 +24,9 @@ import java from 'highlight.js/lib/languages/java'
import { NoTextInput } from '@components/Objects/Editor/Extensions/NoTextInput/NoTextInput'
import EditorOptionsProvider from '@components/Contexts/Editor/EditorContext'
import AICanvaToolkit from './AI/AICanvaToolkit'
+import EmbedObjects from '@components/Objects/Editor/Extensions/EmbedObjects/EmbedObjects'
+import Badges from '@components/Objects/Editor/Extensions/Badges/Badges'
+import Buttons from '@components/Objects/Editor/Extensions/Buttons/Buttons'
interface Editor {
content: string
@@ -85,6 +88,18 @@ function Canva(props: Editor) {
CodeBlockLowlight.configure({
lowlight,
}),
+ EmbedObjects.configure({
+ editable: isEditable,
+ activity: props.activity,
+ }),
+ Badges.configure({
+ editable: isEditable,
+ activity: props.activity,
+ }),
+ Buttons.configure({
+ editable: isEditable,
+ activity: props.activity,
+ }),
],
content: props.content,
diff --git a/apps/web/components/Objects/Editor/Editor.tsx b/apps/web/components/Objects/Editor/Editor.tsx
index 185c8907..b15a8b4f 100644
--- a/apps/web/components/Objects/Editor/Editor.tsx
+++ b/apps/web/components/Objects/Editor/Editor.tsx
@@ -48,6 +48,9 @@ import Collaboration from '@tiptap/extension-collaboration'
import CollaborationCursor from '@tiptap/extension-collaboration-cursor'
import ActiveAvatars from './ActiveAvatars'
import { getUriWithOrg } from '@services/config/config'
+import EmbedObjects from './Extensions/EmbedObjects/EmbedObjects'
+import Badges from './Extensions/Badges/Badges'
+import Buttons from './Extensions/Buttons/Buttons'
interface Editor {
content: string
@@ -133,6 +136,18 @@ function Editor(props: Editor) {
CodeBlockLowlight.configure({
lowlight,
}),
+ EmbedObjects.configure({
+ editable: true,
+ activity: props.activity,
+ }),
+ Badges.configure({
+ editable: true,
+ activity: props.activity,
+ }),
+ Buttons.configure({
+ editable: true,
+ activity: props.activity,
+ }),
// Add Collaboration and CollaborationCursor only if isCollabEnabledOnThisOrg is true
...(props.isCollabEnabledOnThisOrg ? [
diff --git a/apps/web/components/Objects/Editor/Extensions/Badges/Badges.ts b/apps/web/components/Objects/Editor/Extensions/Badges/Badges.ts
new file mode 100644
index 00000000..2d2dda19
--- /dev/null
+++ b/apps/web/components/Objects/Editor/Extensions/Badges/Badges.ts
@@ -0,0 +1,39 @@
+import { ReactNodeViewRenderer } from "@tiptap/react";
+import { mergeAttributes, Node } from "@tiptap/core";
+import BadgesExtension from "@/components/Objects/Editor/Extensions/Badges/BadgesExtension";
+
+export default Node.create({
+ name: "badge",
+ group: "block",
+ draggable: true,
+ content: "text*",
+
+ // TODO : multi line support
+
+ addAttributes() {
+ return {
+ color: {
+ default: 'sky',
+ },
+ emoji: {
+ default: '💡',
+ },
+ };
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: "badge",
+ },
+ ];
+ },
+
+ renderHTML({ HTMLAttributes }) {
+ return ["badge", mergeAttributes(HTMLAttributes), 0];
+ },
+
+ addNodeView() {
+ return ReactNodeViewRenderer(BadgesExtension);
+ },
+});
diff --git a/apps/web/components/Objects/Editor/Extensions/Badges/BadgesExtension.tsx b/apps/web/components/Objects/Editor/Extensions/Badges/BadgesExtension.tsx
new file mode 100644
index 00000000..888eb730
--- /dev/null
+++ b/apps/web/components/Objects/Editor/Extensions/Badges/BadgesExtension.tsx
@@ -0,0 +1,221 @@
+import { NodeViewContent, NodeViewWrapper } from '@tiptap/react'
+import React, { useState, useRef, useEffect } from 'react'
+import Picker from '@emoji-mart/react'
+import { ArrowRight, ChevronDown, ChevronRight, EllipsisVertical, Palette, Plus } from 'lucide-react'
+import { twMerge } from 'tailwind-merge'
+import { useEditorProvider } from '@components/Contexts/Editor/EditorContext'
+
+const BadgesExtension: React.FC = (props: any) => {
+ const [color, setColor] = useState(props.node.attrs.color)
+ const [emoji, setEmoji] = useState(props.node.attrs.emoji)
+ const [showEmojiPicker, setShowEmojiPicker] = useState(false)
+ const [showColorPicker, setShowColorPicker] = useState(false)
+ const [showPredefinedCallouts, setShowPredefinedCallouts] = useState(false)
+ const pickerRef = useRef(null)
+ const colorPickerRef = useRef(null)
+ const editorState = useEditorProvider() as any
+ const isEditable = editorState.isEditable
+
+ useEffect(() => {
+ const handleClickOutside = (event: MouseEvent) => {
+ if (
+ (pickerRef.current && !pickerRef.current.contains(event.target as Node)) ||
+ (colorPickerRef.current && !colorPickerRef.current.contains(event.target as Node))
+ ) {
+ setShowEmojiPicker(false)
+ setShowColorPicker(false)
+ }
+ }
+
+ document.addEventListener('mousedown', handleClickOutside)
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside)
+ }
+ }, [])
+
+ const handleEmojiSelect = (emoji: any) => {
+ setEmoji(emoji.native)
+ setShowEmojiPicker(false)
+ props.updateAttributes({
+ emoji: emoji.native,
+ })
+ }
+
+ const handleColorSelect = (selectedColor: string) => {
+ setColor(selectedColor)
+ setShowColorPicker(false)
+ props.updateAttributes({
+ color: selectedColor,
+ })
+ }
+
+ const handlePredefinedBadgeSelect = (badge: typeof predefinedBadges[0]) => {
+ setEmoji(badge.emoji)
+ setColor(badge.color)
+
+ props.updateAttributes({
+ emoji: badge.emoji,
+ color: badge.color,
+ })
+
+ // Insert the predefined content
+ const { editor } = props
+ if (editor) {
+ editor.commands.setTextSelection({ from: props.getPos() + 1, to: props.getPos() + props.node.nodeSize - 1 })
+ editor.commands.insertContent(badge.content)
+ }
+
+ setShowPredefinedCallouts(false)
+ }
+
+ const colors = ['sky', 'green', 'yellow', 'red', 'purple', 'teal', 'amber', 'indigo', 'neutral']
+ const predefinedBadges = [
+ {
+ emoji: '📝',
+ color: 'sky',
+ content: 'Key Concept'
+ },
+ {
+ emoji: '💡',
+ color: 'yellow',
+ content: 'Example'
+ },
+ {
+ emoji: '🔍',
+ color: 'teal',
+ content: 'Deep Dive'
+ },
+ {
+ emoji: '⚠️',
+ color: 'red',
+ content: 'Important Note'
+ },
+ {
+ emoji: '🧠',
+ color: 'purple',
+ content: 'Remember This'
+ },
+ {
+ emoji: '🏋️',
+ color: 'green',
+ content: 'Exercise'
+ },
+ {
+ emoji: '🎯',
+ color: 'amber',
+ content: 'Learning Objective'
+ },
+ {
+ emoji: '📚',
+ color: 'indigo',
+ content: 'Further Reading'
+ },
+ {
+ emoji: '💬',
+ color: 'neutral',
+ content: 'Discussion Topic'
+ }
+ ]
+
+ const getBadgeColor = (color: string) => {
+ switch (color) {
+ case 'sky': return 'bg-sky-400 text-sky-50';
+ case 'green': return 'bg-green-400 text-green-50';
+ case 'yellow': return 'bg-yellow-400 text-black';
+ case 'red': return 'bg-red-500 text-red-50';
+ case 'purple': return 'bg-purple-400 text-purple-50';
+ case 'pink': return 'bg-pink-400 text-pink-50';
+ case 'teal': return 'bg-teal-400 text-teal-900';
+ case 'amber': return 'bg-amber-600 text-amber-100';
+ case 'indigo': return 'bg-indigo-400 text-indigo-50';
+ case 'neutral': return 'bg-neutral-800 text-white';
+ default: return 'bg-sky-400 text-white';
+ }
+ }
+
+ return (
+
+
+
+
+ {emoji}
+ {isEditable && (
+
+ )}
+
+
+
+ {isEditable && (
+
+
+ {showColorPicker && (
+
+
+ {colors.map((c) => (
+
+
+ )}
+
+ )}
+
+ {isEditable && (
+
+ )}
+ {isEditable && showPredefinedCallouts && (
+
+ {predefinedBadges.map((badge, index) => (
+
+ ))}
+
+ )}
+
+
+ {isEditable && showEmojiPicker && (
+
+ )}
+
+
+
+ )
+}
+
+export default BadgesExtension;
diff --git a/apps/web/components/Objects/Editor/Extensions/Buttons/Buttons.ts b/apps/web/components/Objects/Editor/Extensions/Buttons/Buttons.ts
new file mode 100644
index 00000000..298bbaa7
--- /dev/null
+++ b/apps/web/components/Objects/Editor/Extensions/Buttons/Buttons.ts
@@ -0,0 +1,43 @@
+import { ReactNodeViewRenderer } from "@tiptap/react";
+import { mergeAttributes, Node } from "@tiptap/core";
+import ButtonsExtension from "./ButtonsExtension";
+
+export default Node.create({
+ name: "button",
+ group: "block",
+ draggable: true,
+ content: "text*",
+
+ addAttributes() {
+ return {
+ emoji: {
+ default: '🔗',
+ },
+ link: {
+ default: '',
+ },
+ color: {
+ default: 'blue',
+ },
+ alignment: {
+ default: 'left',
+ },
+ };
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: "button-block",
+ },
+ ];
+ },
+
+ renderHTML({ HTMLAttributes }) {
+ return ["button-block", mergeAttributes(HTMLAttributes), 0];
+ },
+
+ addNodeView() {
+ return ReactNodeViewRenderer(ButtonsExtension);
+ },
+});
\ No newline at end of file
diff --git a/apps/web/components/Objects/Editor/Extensions/Buttons/ButtonsExtension.tsx b/apps/web/components/Objects/Editor/Extensions/Buttons/ButtonsExtension.tsx
new file mode 100644
index 00000000..63c2e65a
--- /dev/null
+++ b/apps/web/components/Objects/Editor/Extensions/Buttons/ButtonsExtension.tsx
@@ -0,0 +1,168 @@
+import { NodeViewContent, NodeViewWrapper } from '@tiptap/react'
+import React, { useState, useRef, useEffect } from 'react'
+import Picker from '@emoji-mart/react'
+import { ArrowRight, ChevronDown, Link, AlignLeft, AlignCenter, AlignRight, Palette } from 'lucide-react'
+import { twMerge } from 'tailwind-merge'
+import { useEditorProvider } from '@components/Contexts/Editor/EditorContext'
+
+const ButtonsExtension: React.FC = (props: any) => {
+ const [emoji, setEmoji] = useState(props.node.attrs.emoji)
+ const [link, setLink] = useState(props.node.attrs.link)
+ const [alignment, setAlignment] = useState(props.node.attrs.alignment)
+ const [showEmojiPicker, setShowEmojiPicker] = useState(false)
+ const [showLinkInput, setShowLinkInput] = useState(false)
+ const [color, setColor] = useState(props.node.attrs.color || 'blue')
+ const [showColorPicker, setShowColorPicker] = useState(false)
+ const pickerRef = useRef(null)
+ const linkInputRef = useRef(null)
+ const colorPickerRef = useRef(null)
+ const editorState = useEditorProvider() as any
+ const isEditable = editorState.isEditable
+
+ useEffect(() => {
+ const handleClickOutside = (event: MouseEvent) => {
+ if (pickerRef.current && !pickerRef.current.contains(event.target as Node)) {
+ setShowEmojiPicker(false)
+ }
+ if (linkInputRef.current && !linkInputRef.current.contains(event.target as Node)) {
+ setShowLinkInput(false)
+ }
+ if (colorPickerRef.current && !colorPickerRef.current.contains(event.target as Node)) {
+ setShowColorPicker(false)
+ }
+ }
+
+ document.addEventListener('mousedown', handleClickOutside)
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside)
+ }
+ }, [])
+
+ const handleEmojiSelect = (emoji: any) => {
+ setEmoji(emoji.native)
+ setShowEmojiPicker(false)
+ props.updateAttributes({
+ emoji: emoji.native,
+ })
+ }
+
+ const handleLinkChange = (e: React.ChangeEvent) => {
+ setLink(e.target.value)
+ props.updateAttributes({
+ link: e.target.value,
+ })
+ }
+
+ const handleAlignmentChange = (newAlignment: 'left' | 'center' | 'right') => {
+ setAlignment(newAlignment)
+ props.updateAttributes({
+ alignment: newAlignment,
+ })
+ }
+
+ const getAlignmentClass = () => {
+ switch (alignment) {
+ case 'left': return 'text-left';
+ case 'center': return 'text-center';
+ case 'right': return 'text-right';
+ default: return 'text-left';
+ }
+ }
+
+ const handleColorSelect = (selectedColor: string) => {
+ setColor(selectedColor)
+ setShowColorPicker(false)
+ props.updateAttributes({
+ color: selectedColor,
+ })
+ }
+
+ const getButtonColor = (color: string) => {
+ switch (color) {
+ case 'sky': return 'bg-sky-500 hover:bg-sky-600';
+ case 'green': return 'bg-green-500 hover:bg-green-600';
+ case 'yellow': return 'bg-yellow-500 hover:bg-yellow-600';
+ case 'red': return 'bg-red-500 hover:bg-red-600';
+ case 'purple': return 'bg-purple-500 hover:bg-purple-600';
+ case 'teal': return 'bg-teal-500 hover:bg-teal-600';
+ case 'amber': return 'bg-amber-500 hover:bg-amber-600';
+ case 'indigo': return 'bg-indigo-500 hover:bg-indigo-600';
+ case 'neutral': return 'bg-neutral-500 hover:bg-neutral-600';
+ default: return 'bg-blue-500 hover:bg-blue-600';
+ }
+ }
+
+ const colors = ['sky', 'green', 'yellow', 'red', 'purple', 'teal', 'amber', 'indigo', 'neutral', 'blue']
+
+ return (
+
+
+
+ {isEditable && (
+
+
+
+
+
+
+
+
+ )}
+
+ {isEditable && showEmojiPicker && (
+
+ )}
+ {isEditable && showLinkInput && (
+
+ )}
+ {isEditable && showColorPicker && (
+
+
+ {colors.map((c) => (
+
+
+ )}
+
+ )
+}
+
+export default ButtonsExtension
diff --git a/apps/web/components/Objects/Editor/Extensions/EmbedObjects/EmbedObjects.ts b/apps/web/components/Objects/Editor/Extensions/EmbedObjects/EmbedObjects.ts
new file mode 100644
index 00000000..32d8eb4f
--- /dev/null
+++ b/apps/web/components/Objects/Editor/Extensions/EmbedObjects/EmbedObjects.ts
@@ -0,0 +1,49 @@
+import { mergeAttributes, Node } from '@tiptap/core'
+import { ReactNodeViewRenderer } from '@tiptap/react'
+import EmbedObjectsComponent from './EmbedObjectsComponent'
+
+
+export default Node.create({
+ name: 'blockEmbed',
+ group: 'block',
+
+ addAttributes() {
+ return {
+ embedUrl: {
+ default: null,
+ },
+ embedCode: {
+ default: null,
+ },
+ embedType: {
+ default: null,
+ },
+ embedHeight: {
+ default: 300,
+ },
+ embedWidth: {
+ default: '100%',
+ },
+ alignment: {
+ default: 'left',
+ },
+ }
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: 'block-embed',
+ },
+ ]
+ },
+
+ renderHTML({ HTMLAttributes }) {
+ return ['block-embed', mergeAttributes(HTMLAttributes), 0]
+ },
+
+ addNodeView() {
+ return ReactNodeViewRenderer(EmbedObjectsComponent)
+ },
+
+})
\ No newline at end of file
diff --git a/apps/web/components/Objects/Editor/Extensions/EmbedObjects/EmbedObjectsComponent.tsx b/apps/web/components/Objects/Editor/Extensions/EmbedObjects/EmbedObjectsComponent.tsx
new file mode 100644
index 00000000..1cf77791
--- /dev/null
+++ b/apps/web/components/Objects/Editor/Extensions/EmbedObjects/EmbedObjectsComponent.tsx
@@ -0,0 +1,212 @@
+import { NodeViewWrapper } from '@tiptap/react'
+import React, { useState, useRef, useEffect } from 'react'
+import { Upload, Link as LinkIcon, GripVertical, GripHorizontal, AlignCenter, Cuboid, Code } from 'lucide-react'
+import { useEditorProvider } from '@components/Contexts/Editor/EditorContext'
+import { SiGithub, SiReplit, SiSpotify, SiLoom, SiGooglemaps, SiCodepen, SiCanva, SiNotion, SiGoogledocs, SiGitlab, SiX, SiFigma, SiGiphy } from '@icons-pack/react-simple-icons'
+import { useRouter } from 'next/navigation'
+import DOMPurify from 'dompurify'
+
+function EmbedObjectsComponent(props: any) {
+ const [embedType, setEmbedType] = useState<'url' | 'code'>(props.node.attrs.embedType || 'url')
+ const [embedUrl, setEmbedUrl] = useState(props.node.attrs.embedUrl || '')
+ const [embedCode, setEmbedCode] = useState(props.node.attrs.embedCode || '')
+ const [embedHeight, setEmbedHeight] = useState(props.node.attrs.embedHeight || 300)
+ const [embedWidth, setEmbedWidth] = useState(props.node.attrs.embedWidth || '100%')
+ const [alignment, setAlignment] = useState(props.node.attrs.alignment || 'left')
+
+ const resizeRef = useRef(null)
+ const editorState = useEditorProvider() as any
+ const isEditable = editorState.isEditable
+ const router = useRouter()
+
+ const supportedProducts = [
+ { name: 'GitHub', icon: SiGithub, color: '#181717', guide: 'https://emgithub.com/' },
+ { name: 'Replit', icon: SiReplit, color: '#F26207', guide: 'https://docs.replit.com/hosting/embedding-repls' },
+ { name: 'Spotify', icon: SiSpotify, color: '#1DB954', guide: 'https://developer.spotify.com/documentation/embeds' },
+ { name: 'Loom', icon: SiLoom, color: '#625DF5', guide: 'https://support.loom.com/hc/en-us/articles/360002208317-How-to-embed-your-video-into-a-webpage' },
+ { name: 'GMaps', icon: SiGooglemaps, color: '#4285F4', guide: 'https://developers.google.com/maps/documentation/embed/get-started' },
+ { name: 'CodePen', icon: SiCodepen, color: '#000000', guide: 'https://blog.codepen.io/documentation/embedded-pens/' },
+ { name: 'Canva', icon: SiCanva, color: '#00C4CC', guide: 'https://www.canva.com/help/article/embed-designs' },
+ { name: 'Notion', icon: SiNotion, color: '#878787', guide: 'https://www.notion.so/help/embed-and-connect-other-apps#7a70ac4b5c5f4ec889e69d262e0de9e7' },
+ { name: 'G Docs', icon: SiGoogledocs, color: '#4285F4', guide: 'https://support.google.com/docs/answer/183965?hl=en&co=GENIE.Platform%3DDesktop' },
+ { name: 'X', icon: SiX, color: '#000000', guide: 'https://help.twitter.com/en/using-twitter/how-to-embed-a-tweet' },
+ { name: 'Figma', icon: SiFigma, color: '#F24E1E', guide: 'https://help.figma.com/hc/en-us/articles/360041057214-Embed-files-and-prototypes' },
+ { name: 'Giphy', icon: SiGiphy, color: '#FF6666', guide: 'https://developers.giphy.com/docs/embed/' },
+ ]
+
+ const [sanitizedEmbedCode, setSanitizedEmbedCode] = useState('')
+
+ useEffect(() => {
+ if (embedType === 'code' && embedCode) {
+ const sanitized = DOMPurify.sanitize(embedCode, {
+ ADD_TAGS: ['iframe'],
+ ADD_ATTR: ['*']
+ })
+ setSanitizedEmbedCode(sanitized)
+ }
+ }, [embedCode, embedType])
+
+ const handleEmbedTypeChange = (type: 'url' | 'code') => {
+ setEmbedType(type)
+ props.updateAttributes({ embedType: type })
+ }
+
+ const handleUrlChange = (event: React.ChangeEvent) => {
+ const newUrl = event.target.value;
+ // Sanitize the URL
+ const sanitizedUrl = DOMPurify.sanitize(newUrl);
+ setEmbedUrl(sanitizedUrl);
+ props.updateAttributes({
+ embedUrl: sanitizedUrl,
+ embedType: 'url',
+ });
+ };
+
+ const handleCodeChange = (event: React.ChangeEvent) => {
+ const newCode = event.target.value;
+ setEmbedCode(newCode);
+ props.updateAttributes({
+ embedCode: newCode,
+ embedType: 'code',
+ });
+ };
+
+ const handleResizeStart = (event: React.MouseEvent, direction: 'horizontal' | 'vertical') => {
+ event.preventDefault()
+ const startX = event.clientX
+ const startY = event.clientY
+ const startWidth = resizeRef.current?.offsetWidth || 0
+ const startHeight = resizeRef.current?.offsetHeight || 0
+
+ const handleMouseMove = (e: MouseEvent) => {
+ if (resizeRef.current) {
+ if (direction === 'horizontal') {
+ const newWidth = startWidth + e.clientX - startX
+ const parentWidth = resizeRef.current.parentElement?.offsetWidth || 1
+ const widthPercentage = Math.min(100, Math.max(10, (newWidth / parentWidth) * 100))
+ const newWidthValue = `${widthPercentage}%`
+ setEmbedWidth(newWidthValue)
+ props.updateAttributes({ embedWidth: newWidthValue })
+ } else {
+ const newHeight = Math.max(100, startHeight + e.clientY - startY)
+ setEmbedHeight(newHeight)
+ props.updateAttributes({ embedHeight: newHeight })
+ }
+ }
+ }
+
+ const handleMouseUp = () => {
+ document.removeEventListener('mousemove', handleMouseMove)
+ document.removeEventListener('mouseup', handleMouseUp)
+ }
+
+ document.addEventListener('mousemove', handleMouseMove)
+ document.addEventListener('mouseup', handleMouseUp)
+ }
+
+ const handleCenterBlock = () => {
+ const newAlignment = alignment === 'center' ? 'left' : 'center'
+ setAlignment(newAlignment)
+ props.updateAttributes({ alignment: newAlignment })
+ }
+
+ const handleProductClick = (guide: string) => {
+ window.open(guide, '_blank', 'noopener,noreferrer')
+ }
+
+ return (
+
+
+ {embedType === 'url' && embedUrl ? (
+
+ ) : embedType === 'code' && sanitizedEmbedCode ? (
+
+ ) : (
+
+
Add an embed from :
+
+ {supportedProducts.map((product) => (
+
+ ))}
+
+
+ )}
+
+
+
+ {isEditable && (
+ <>
+
+
+
+ {embedType === 'url' ? (
+
+ ) : (
+
+ )}
+
+
+
handleResizeStart(e, 'horizontal')}
+ >
+
+
+
handleResizeStart(e, 'vertical')}
+ >
+
+
+ >
+ )}
+
+
+ )
+}
+
+export default EmbedObjectsComponent
diff --git a/apps/web/components/Objects/Editor/Toolbar/ToolbarButtons.tsx b/apps/web/components/Objects/Editor/Toolbar/ToolbarButtons.tsx
index 7d214700..e96deef4 100644
--- a/apps/web/components/Objects/Editor/Toolbar/ToolbarButtons.tsx
+++ b/apps/web/components/Objects/Editor/Toolbar/ToolbarButtons.tsx
@@ -13,12 +13,17 @@ import {
AlertTriangle,
BadgeHelp,
Code,
+ Cuboid,
FileText,
ImagePlus,
+ Lightbulb,
+ MousePointerClick,
Sigma,
+ Tag,
+ Tags,
Video,
- Youtube,
} from 'lucide-react'
+import { SiYoutube } from '@icons-pack/react-simple-icons'
import ToolTip from '@components/StyledElements/Tooltip/Tooltip'
export const ToolbarButtons = ({ editor, props }: any) => {
@@ -139,7 +144,7 @@ export const ToolbarButtons = ({ editor, props }: any) => {
addYoutubeVideo()}>
-
+
@@ -195,6 +200,43 @@ export const ToolbarButtons = ({ editor, props }: any) => {
+
+ editor.chain().focus().insertContent({ type: 'blockEmbed' }).run()}
+ >
+
+
+
+
+ editor.chain().focus().insertContent({
+ type: 'badge',
+ content: [
+ {
+ type: 'text',
+ text: 'This is a Badge'
+ }
+ ]
+ }).run()}
+ >
+
+
+
+
+ editor.chain().focus().insertContent({
+ type: 'button',
+ content: [
+ {
+ type: 'text',
+ text: 'Click me'
+ }
+ ]
+ }).run()}
+ >
+
+
+
)
}
diff --git a/apps/web/package.json b/apps/web/package.json
index 5fd14254..10c0d6ee 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -11,7 +11,9 @@
"lint:fix": "eslint --fix ."
},
"dependencies": {
- "@hocuspocus/provider": "^2.13.6",
+ "@emoji-mart/react": "^1.1.1",
+ "@hocuspocus/provider": "^2.13.7",
+ "@icons-pack/react-simple-icons": "^10.0.0",
"@radix-ui/colors": "^0.1.9",
"@radix-ui/react-aspect-ratio": "^1.1.0",
"@radix-ui/react-dialog": "^1.1.2",
@@ -20,8 +22,8 @@
"@radix-ui/react-switch": "^1.1.1",
"@radix-ui/react-tabs": "^1.1.1",
"@radix-ui/react-tooltip": "^1.1.3",
- "@sentry/nextjs": "^8.33.1",
- "@sentry/utils": "^8.33.1",
+ "@sentry/nextjs": "^8.34.0",
+ "@sentry/utils": "^8.34.0",
"@stitches/react": "^1.2.8",
"@tiptap/core": "^2.8.0",
"@tiptap/extension-code-block-lowlight": "^2.8.0",
@@ -32,11 +34,13 @@
"@tiptap/pm": "^2.8.0",
"@tiptap/react": "^2.8.0",
"@tiptap/starter-kit": "^2.8.0",
+ "@types/dompurify": "^3.0.5",
"@types/randomcolor": "^0.5.9",
"avvvatars-react": "^0.4.2",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
+ "dompurify": "^3.1.7",
"formik": "^2.4.6",
"framer-motion": "^10.18.0",
"get-youtube-id": "^1.0.1",
@@ -44,7 +48,7 @@
"katex": "^0.16.11",
"lowlight": "^3.1.0",
"lucide-react": "^0.424.0",
- "next": "14.2.7",
+ "next": "14.2.15",
"next-auth": "^4.24.8",
"nextjs-toploader": "^1.6.12",
"prosemirror-state": "^1.4.3",
@@ -64,6 +68,7 @@
"tailwind-merge": "^2.5.3",
"tailwind-scrollbar": "^3.1.0",
"tailwindcss-animate": "^1.0.7",
+ "unsplash-js": "^7.0.19",
"uuid": "^9.0.1",
"y-indexeddb": "^9.0.12",
"y-prosemirror": "^1.2.12",
@@ -81,7 +86,7 @@
"@types/uuid": "^9.0.8",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.1",
- "eslint-config-next": "^14.2.14",
+ "eslint-config-next": "^14.2.15",
"eslint-plugin-unused-imports": "^3.2.0",
"postcss": "^8.4.47",
"tailwindcss": "^3.4.13",
diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml
index 4e4d7875..9bd75d33 100644
--- a/apps/web/pnpm-lock.yaml
+++ b/apps/web/pnpm-lock.yaml
@@ -8,9 +8,15 @@ importers:
.:
dependencies:
+ '@emoji-mart/react':
+ specifier: ^1.1.1
+ version: 1.1.1(emoji-mart@5.6.0)(react@18.3.1)
'@hocuspocus/provider':
- specifier: ^2.13.6
- version: 2.13.6(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19)
+ specifier: ^2.13.7
+ version: 2.13.7(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19)
+ '@icons-pack/react-simple-icons':
+ specifier: ^10.0.0
+ version: 10.0.0(react@18.3.1)
'@radix-ui/colors':
specifier: ^0.1.9
version: 0.1.9
@@ -36,11 +42,11 @@ importers:
specifier: ^1.1.3
version: 1.1.3(@types/react-dom@18.2.23)(@types/react@18.2.74)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@sentry/nextjs':
- specifier: ^8.33.1
- version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0)
+ specifier: ^8.34.0
+ version: 8.34.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0)
'@sentry/utils':
- specifier: ^8.33.1
- version: 8.33.1
+ specifier: ^8.34.0
+ version: 8.34.0
'@stitches/react':
specifier: ^1.2.8
version: 1.2.8(react@18.3.1)
@@ -71,6 +77,9 @@ importers:
'@tiptap/starter-kit':
specifier: ^2.8.0
version: 2.8.0(@tiptap/extension-text-style@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0)))
+ '@types/dompurify':
+ specifier: ^3.0.5
+ version: 3.0.5
'@types/randomcolor':
specifier: ^0.5.9
version: 0.5.9
@@ -86,6 +95,9 @@ importers:
dayjs:
specifier: ^1.11.13
version: 1.11.13
+ dompurify:
+ specifier: ^3.1.7
+ version: 3.1.7
formik:
specifier: ^2.4.6
version: 2.4.6(react@18.3.1)
@@ -108,14 +120,14 @@ importers:
specifier: ^0.424.0
version: 0.424.0(react@18.3.1)
next:
- specifier: 14.2.7
- version: 14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 14.2.15
+ version: 14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-auth:
specifier: ^4.24.8
- version: 4.24.8(next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 4.24.8(next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
nextjs-toploader:
specifier: ^1.6.12
- version: 1.6.12(next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 1.6.12(next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
prosemirror-state:
specifier: ^1.4.3
version: 1.4.3
@@ -167,6 +179,9 @@ importers:
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.4.13)
+ unsplash-js:
+ specifier: ^7.0.19
+ version: 7.0.19
uuid:
specifier: ^9.0.1
version: 9.0.1
@@ -214,8 +229,8 @@ importers:
specifier: ^8.57.1
version: 8.57.1
eslint-config-next:
- specifier: ^14.2.14
- version: 14.2.14(eslint@8.57.1)(typescript@5.4.4)
+ specifier: ^14.2.15
+ version: 14.2.15(eslint@8.57.1)(typescript@5.4.4)
eslint-plugin-unused-imports:
specifier: ^3.2.0
version: 3.2.0(eslint@8.57.1)
@@ -243,12 +258,12 @@ packages:
resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.25.7':
- resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==}
+ '@babel/compat-data@7.25.8':
+ resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.25.7':
- resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==}
+ '@babel/core@7.25.8':
+ resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.25.7':
@@ -293,8 +308,8 @@ packages:
resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.25.7':
- resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==}
+ '@babel/parser@7.25.8':
+ resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -310,13 +325,19 @@ packages:
resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.25.7':
- resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==}
+ '@babel/types@7.25.8':
+ resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==}
engines: {node: '>=6.9.0'}
'@emnapi/runtime@1.3.0':
resolution: {integrity: sha512-XMBySMuNZs3DM96xcJmLW4EfGnf+uGmFNjzpehMjuX5PLB5j87ar2Zc4e3PVeZ3I5g3tYtAqskB28manlF69Zw==}
+ '@emoji-mart/react@1.1.1':
+ resolution: {integrity: sha512-NMlFNeWgv1//uPsvLxvGQoIerPuVdXwK/EUek8OOkJ6wVOWPUizRBJU0hDqWZCOROVpfBgCemaC3m6jDOXi03g==}
+ peerDependencies:
+ emoji-mart: ^5.2
+ react: ^16.8 || ^17 || ^18
+
'@emotion/is-prop-valid@0.8.8':
resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
@@ -365,11 +386,11 @@ packages:
'@floating-ui/utils@0.2.8':
resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
- '@hocuspocus/common@2.13.6':
- resolution: {integrity: sha512-jeEawHoaBckfbjMRPqjANjtQkeHgCBsk3XN7CEs/1jvUm60d86FT4y5fp3MWTEE18qkZacbZldn32za+72RBdg==}
+ '@hocuspocus/common@2.13.7':
+ resolution: {integrity: sha512-ROqYfW15XlAGd+qb/FVyp0zUC9Rosv7kdcck9LRMdfW3jT66wK9pDDWL2ily4Qj/zhbLCFtjAUPB4UKln/GYNQ==}
- '@hocuspocus/provider@2.13.6':
- resolution: {integrity: sha512-84tBdGU8275SXQirRQ5FbBGwsQ6iLNuIbmV2SV6/f361phBoAVUSobJ+CYAzdIJPlfIYSL2BwGJSRbbDhqJdJw==}
+ '@hocuspocus/provider@2.13.7':
+ resolution: {integrity: sha512-BjZIIV8tWf/MD/8IcEMSFA+sW4wtR/M9MmhN+XSssYJOZxnszw44Gdwda23TmhsXvCV+qggS8lGEs+SfZSzEag==}
peerDependencies:
y-protocols: ^1.0.6
yjs: ^13.6.8
@@ -387,6 +408,11 @@ packages:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
+ '@icons-pack/react-simple-icons@10.0.0':
+ resolution: {integrity: sha512-oU0PVDx9sbNQjRxJN555dsHbRApYN+aBq/O9+wo3JgNkEfvBMgAEtsSGtXWWXQsLAxJcYiFOCzBWege/Xj/JFQ==}
+ peerDependencies:
+ react: ^16.13 || ^17 || ^18
+
'@img/sharp-darwin-arm64@0.33.5':
resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@@ -520,62 +546,62 @@ packages:
'@lifeomic/attempt@3.1.0':
resolution: {integrity: sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==}
- '@next/env@14.2.7':
- resolution: {integrity: sha512-OTx9y6I3xE/eih+qtthppwLytmpJVPM5PPoJxChFsbjIEFXIayG0h/xLzefHGJviAa3Q5+Fd+9uYojKkHDKxoQ==}
+ '@next/env@14.2.15':
+ resolution: {integrity: sha512-S1qaj25Wru2dUpcIZMjxeMVSwkt8BK4dmWHHiBuRstcIyOsMapqT4A4jSB6onvqeygkSSmOkyny9VVx8JIGamQ==}
- '@next/eslint-plugin-next@14.2.14':
- resolution: {integrity: sha512-kV+OsZ56xhj0rnTn6HegyTGkoa16Mxjrpk7pjWumyB2P8JVQb8S9qtkjy/ye0GnTr4JWtWG4x/2qN40lKZ3iVQ==}
+ '@next/eslint-plugin-next@14.2.15':
+ resolution: {integrity: sha512-pKU0iqKRBlFB/ocOI1Ip2CkKePZpYpnw5bEItEkuZ/Nr9FQP1+p7VDWr4VfOdff4i9bFmrOaeaU1bFEyAcxiMQ==}
- '@next/swc-darwin-arm64@14.2.7':
- resolution: {integrity: sha512-UhZGcOyI9LE/tZL3h9rs/2wMZaaJKwnpAyegUVDGZqwsla6hMfeSj9ssBWQS9yA4UXun3pPhrFLVnw5KXZs3vw==}
+ '@next/swc-darwin-arm64@14.2.15':
+ resolution: {integrity: sha512-Rvh7KU9hOUBnZ9TJ28n2Oa7dD9cvDBKua9IKx7cfQQ0GoYUwg9ig31O2oMwH3wm+pE3IkAQ67ZobPfEgurPZIA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@14.2.7':
- resolution: {integrity: sha512-ys2cUgZYRc+CbyDeLAaAdZgS7N1Kpyy+wo0b/gAj+SeOeaj0Lw/q+G1hp+DuDiDAVyxLBCJXEY/AkhDmtihUTA==}
+ '@next/swc-darwin-x64@14.2.15':
+ resolution: {integrity: sha512-5TGyjFcf8ampZP3e+FyCax5zFVHi+Oe7sZyaKOngsqyaNEpOgkKB3sqmymkZfowy3ufGA/tUgDPPxpQx931lHg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@14.2.7':
- resolution: {integrity: sha512-2xoWtE13sUJ3qrC1lwE/HjbDPm+kBQYFkkiVECJWctRASAHQ+NwjMzgrfqqMYHfMxFb5Wws3w9PqzZJqKFdWcQ==}
+ '@next/swc-linux-arm64-gnu@14.2.15':
+ resolution: {integrity: sha512-3Bwv4oc08ONiQ3FiOLKT72Q+ndEMyLNsc/D3qnLMbtUYTQAmkx9E/JRu0DBpHxNddBmNT5hxz1mYBphJ3mfrrw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@14.2.7':
- resolution: {integrity: sha512-+zJ1gJdl35BSAGpkCbfyiY6iRTaPrt3KTl4SF/B1NyELkqqnrNX6cp4IjjjxKpd64/7enI0kf6b9O1Uf3cL0pw==}
+ '@next/swc-linux-arm64-musl@14.2.15':
+ resolution: {integrity: sha512-k5xf/tg1FBv/M4CMd8S+JL3uV9BnnRmoe7F+GWC3DxkTCD9aewFRH1s5rJ1zkzDa+Do4zyN8qD0N8c84Hu96FQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@14.2.7':
- resolution: {integrity: sha512-m6EBqrskeMUzykBrv0fDX/28lWIBGhMzOYaStp0ihkjzIYJiKUOzVYD1gULHc8XDf5EMSqoH/0/TRAgXqpQwmw==}
+ '@next/swc-linux-x64-gnu@14.2.15':
+ resolution: {integrity: sha512-kE6q38hbrRbKEkkVn62reLXhThLRh6/TvgSP56GkFNhU22TbIrQDEMrO7j0IcQHcew2wfykq8lZyHFabz0oBrA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@14.2.7':
- resolution: {integrity: sha512-gUu0viOMvMlzFRz1r1eQ7Ql4OE+hPOmA7smfZAhn8vC4+0swMZaZxa9CSIozTYavi+bJNDZ3tgiSdMjmMzRJlQ==}
+ '@next/swc-linux-x64-musl@14.2.15':
+ resolution: {integrity: sha512-PZ5YE9ouy/IdO7QVJeIcyLn/Rc4ml9M2G4y3kCM9MNf1YKvFY4heg3pVa/jQbMro+tP6yc4G2o9LjAz1zxD7tQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@14.2.7':
- resolution: {integrity: sha512-PGbONHIVIuzWlYmLvuFKcj+8jXnLbx4WrlESYlVnEzDsa3+Q2hI1YHoXaSmbq0k4ZwZ7J6sWNV4UZfx1OeOlbQ==}
+ '@next/swc-win32-arm64-msvc@14.2.15':
+ resolution: {integrity: sha512-2raR16703kBvYEQD9HNLyb0/394yfqzmIeyp2nDzcPV4yPjqNUG3ohX6jX00WryXz6s1FXpVhsCo3i+g4RUX+g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-ia32-msvc@14.2.7':
- resolution: {integrity: sha512-BiSY5umlx9ed5RQDoHcdbuKTUkuFORDqzYKPHlLeS+STUWQKWziVOn3Ic41LuTBvqE0TRJPKpio9GSIblNR+0w==}
+ '@next/swc-win32-ia32-msvc@14.2.15':
+ resolution: {integrity: sha512-fyTE8cklgkyR1p03kJa5zXEaZ9El+kDNM5A+66+8evQS5e/6v0Gk28LqA0Jet8gKSOyP+OTm/tJHzMlGdQerdQ==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
- '@next/swc-win32-x64-msvc@14.2.7':
- resolution: {integrity: sha512-pxsI23gKWRt/SPHFkDEsP+w+Nd7gK37Hpv0ngc5HpWy2e7cKx9zR/+Q2ptAUqICNTecAaGWvmhway7pj/JLEWA==}
+ '@next/swc-win32-x64-msvc@14.2.15':
+ resolution: {integrity: sha512-SzqGbsLsP9OwKNUG9nekShTwhj6JSB9ZLMWQ8g1gG6hdE5gQLncbnbymrwy2yVmH9nikSLYRYxYMFu78Ggp7/g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1258,86 +1284,86 @@ packages:
'@rushstack/eslint-patch@1.10.4':
resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==}
- '@sentry-internal/browser-utils@8.33.1':
- resolution: {integrity: sha512-TW6/r+Gl5jiXv54iK1xZ3mlVgTS/jaBp4vcQ0xGMdgiQ3WchEPcFSeYovL+YHT3tSud0GZqVtDQCz+5i76puqA==}
+ '@sentry-internal/browser-utils@8.34.0':
+ resolution: {integrity: sha512-4AcYOzPzD1tL5eSRQ/GpKv5enquZf4dMVUez99/Bh3va8qiJrNP55AcM7UzZ7WZLTqKygIYruJTU5Zu2SpEAPQ==}
engines: {node: '>=14.18'}
- '@sentry-internal/feedback@8.33.1':
- resolution: {integrity: sha512-qauMRTm3qDaLqZ3ibI03cj4gLF40y0ij65nj+cns6iWxGCtPrO8tjvXFWuQsE7Aye9dGMnBgmv7uN+NTUtC3RA==}
+ '@sentry-internal/feedback@8.34.0':
+ resolution: {integrity: sha512-aYSM2KPUs0FLPxxbJCFSwCYG70VMzlT04xepD1Y/tTlPPOja/02tSv2tyOdZbv8Uw7xslZs3/8Lhj74oYcTBxw==}
engines: {node: '>=14.18'}
- '@sentry-internal/replay-canvas@8.33.1':
- resolution: {integrity: sha512-nsxTFTPCT10Ty/v6+AiST3+yotGP1sUb8xqfKB9fPnS1hZHFryp0NnEls7xFjBsBbZPU1GpFkzrk/E6JFzixDQ==}
+ '@sentry-internal/replay-canvas@8.34.0':
+ resolution: {integrity: sha512-x8KhZcCDpbKHqFOykYXiamX6x0LRxv6N1OJHoH+XCrMtiDBZr4Yo30d/MaS6rjmKGMtSRij30v+Uq+YWIgxUrg==}
engines: {node: '>=14.18'}
- '@sentry-internal/replay@8.33.1':
- resolution: {integrity: sha512-fm4coIOjmanU29NOVN9MyaP4fUCOYytbtFqVSKRFNZQ/xAgNeySiBIbUd6IjujMmnOk9bY0WEUMcdm3Uotjdog==}
+ '@sentry-internal/replay@8.34.0':
+ resolution: {integrity: sha512-EoMh9NYljNewZK1quY23YILgtNdGgrkzJ9TPsj6jXUG0LZ0Q7N7eFWd0xOEDBvFxrmI3cSXF1i4d1sBb+eyKRw==}
engines: {node: '>=14.18'}
'@sentry/babel-plugin-component-annotate@2.22.3':
resolution: {integrity: sha512-OlHA+i+vnQHRIdry4glpiS/xTOtgjmpXOt6IBOUqynx5Jd/iK1+fj+t8CckqOx9wRacO/hru2wfW/jFq0iViLg==}
engines: {node: '>= 14'}
- '@sentry/browser@8.33.1':
- resolution: {integrity: sha512-c6zI/igexkLwZuGk+u8Rj26ChjxGgkhe6ZbKFsXCYaKAp5ep5X7HQRkkqgbxApiqlC0LduHdd/ymzh139JLg8w==}
+ '@sentry/browser@8.34.0':
+ resolution: {integrity: sha512-3HHG2NXxzHq1lVmDy2uRjYjGNf9NsJsTPlOC70vbQdOb+S49EdH/XMPy+J3ruIoyv6Cu0LwvA6bMOM6rHZOgNQ==}
engines: {node: '>=14.18'}
'@sentry/bundler-plugin-core@2.22.3':
resolution: {integrity: sha512-DeoUl0WffcqZZRl5Wy9aHvX4WfZbbWt0QbJ7NJrcEViq+dRAI2FQTYECFLwdZi5Gtb3oyqZICO+P7k8wDnzsjQ==}
engines: {node: '>= 14'}
- '@sentry/cli-darwin@2.36.6':
- resolution: {integrity: sha512-2yKECENqMZKrJY5weA19g4gTgQfeuadWvVu7fVQVsgqoBRIaEhSHJc64ZgiHq2ur06qOuYcQr5FO1VrwUE1pZg==}
+ '@sentry/cli-darwin@2.37.0':
+ resolution: {integrity: sha512-CsusyMvO0eCPSN7H+sKHXS1pf637PWbS4rZak/7giz/z31/6qiXmeMlcL3f9lLZKtFPJmXVFO9uprn1wbBVF8A==}
engines: {node: '>=10'}
os: [darwin]
- '@sentry/cli-linux-arm64@2.36.6':
- resolution: {integrity: sha512-sLmmbZRE7F6UksovwcqEQ7oYXVBejpeL1CtiKVFwNoq9XB5kTiKlVColn+3yPcfwKCNj4H4HoeKc+xMtdd7wow==}
+ '@sentry/cli-linux-arm64@2.37.0':
+ resolution: {integrity: sha512-2vzUWHLZ3Ct5gpcIlfd/2Qsha+y9M8LXvbZE26VxzYrIkRoLAWcnClBv8m4XsHLMURYvz3J9QSZHMZHSO7kAzw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux, freebsd]
- '@sentry/cli-linux-arm@2.36.6':
- resolution: {integrity: sha512-6zB7w5NawmdzhPHxqkjlhbvQugCBiFrFaUGvb3u1Oo/VCehdmq/v4v8ob4PNN2cJhoDRqQj2mPTfL/ppYNMJuw==}
+ '@sentry/cli-linux-arm@2.37.0':
+ resolution: {integrity: sha512-Dz0qH4Yt+gGUgoVsqVt72oDj4VQynRF1QB1/Sr8g76Vbi+WxWZmUh0iFwivYVwWxdQGu/OQrE0tx946HToCRyA==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux, freebsd]
- '@sentry/cli-linux-i686@2.36.6':
- resolution: {integrity: sha512-M1pdxv7eZdGoG1wDpRb28aRUs/qb0C5jAe+a7sWHIg463jRLAahM8NDkv2bRQv0Xhw3JIkEGGvr46mPkQrOuMQ==}
+ '@sentry/cli-linux-i686@2.37.0':
+ resolution: {integrity: sha512-MHRLGs4t/CQE1pG+mZBQixyWL6xDZfNalCjO8GMcTTbZFm44S3XRHfYJZNVCgdtnUP7b6OHGcu1v3SWE10LcwQ==}
engines: {node: '>=10'}
cpu: [x86, ia32]
os: [linux, freebsd]
- '@sentry/cli-linux-x64@2.36.6':
- resolution: {integrity: sha512-gVy/zAWY2DEERQ/i3V+oruMas/U29/tsRPcRkB67MIUWbW7W46+c3yH490O+t49qMYYhKYG2YfWoTzW6qMtSlA==}
+ '@sentry/cli-linux-x64@2.37.0':
+ resolution: {integrity: sha512-k76ClefKZaDNJZU/H3mGeR8uAzAGPzDRG/A7grzKfBeyhP3JW09L7Nz9IQcSjCK+xr399qLhM2HFCaPWQ6dlMw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux, freebsd]
- '@sentry/cli-win32-i686@2.36.6':
- resolution: {integrity: sha512-urH+i+WtPeW8Dund0xY8zObvvbMM0XxeEIUS4oFBCB3EMYHVxgNw+woQUv9Vyv7v+OBjckB/r27nxlwNBj4pbg==}
+ '@sentry/cli-win32-i686@2.37.0':
+ resolution: {integrity: sha512-FFyi5RNYQQkEg4GkP2f3BJcgQn0F4fjFDMiWkjCkftNPXQG+HFUEtrGsWr6mnHPdFouwbYg3tEPUWNxAoypvTw==}
engines: {node: '>=10'}
cpu: [x86, ia32]
os: [win32]
- '@sentry/cli-win32-x64@2.36.6':
- resolution: {integrity: sha512-ZauqOqwFAqb/Njyc8Kj2l9Fhbms7T5zB2yu5zwvq1uiqhXqLmsb9mRTF8WJWl9WmO5hwq/GTOEQowvrwK8gblw==}
+ '@sentry/cli-win32-x64@2.37.0':
+ resolution: {integrity: sha512-nSMj4OcfQmyL+Tu/jWCJwhKCXFsCZW1MUk6wjjQlRt9SDLfgeapaMlK1ZvT1eZv5ZH6bj3qJfefwj4U8160uOA==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@sentry/cli@2.36.6':
- resolution: {integrity: sha512-1fcZVwe4H6a3Z1O+7m/z/2em1u67Tf0Zrt2oGEp82bqvCOHA904Wr2otc6GBEuFESB1/Mo8QgD/qwRd9Tv0Otw==}
+ '@sentry/cli@2.37.0':
+ resolution: {integrity: sha512-fM3V4gZRJR/s8lafc3O07hhOYRnvkySdPkvL/0e0XW0r+xRwqIAgQ5ECbsZO16A5weUiXVSf03ztDL1FcmbJCQ==}
engines: {node: '>= 10'}
hasBin: true
- '@sentry/core@8.33.1':
- resolution: {integrity: sha512-3SS41suXLFzxL3OQvTMZ6q92ZapELVq2l2SoWlZopcamWhog2Ru0dp2vkunq97kFHb2TzKRTlFH4+4gbT8SJug==}
+ '@sentry/core@8.34.0':
+ resolution: {integrity: sha512-adrXCTK/zsg5pJ67lgtZqdqHvyx6etMjQW3P82NgWdj83c8fb+zH+K79Z47pD4zQjX0ou2Ws5nwwi4wJbz4bfA==}
engines: {node: '>=14.18'}
- '@sentry/nextjs@8.33.1':
- resolution: {integrity: sha512-XLUyib6bCv2iynKaoYIotVKzLsGc9lr6QI4ZV3/PstiiXKwtTm1TPdBfIlrDJMGIMxH7Z/DmkvJNSESV19Ui6Q==}
+ '@sentry/nextjs@8.34.0':
+ resolution: {integrity: sha512-REHE3E21Mnm92B3BfJz3GTMsaZM8vaDJAe7RlAMDltESRECv+ELJ5qVRLgAp8Bd6w4mG8IRNINmK2UwHrAIi9g==}
engines: {node: '>=14.18'}
peerDependencies:
next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0
@@ -1346,12 +1372,12 @@ packages:
webpack:
optional: true
- '@sentry/node@8.33.1':
- resolution: {integrity: sha512-0Xmlrl5nU5Bx6YybaIfztyOIiIXW5X64vcK0u94Sg4uHcDO7YvEbhflKjp669ds2I6ZQ/czqxnaAY8gM6P2SCA==}
+ '@sentry/node@8.34.0':
+ resolution: {integrity: sha512-Q7BPp7Y8yCcwD620xoziWSOuPi/PCIdttkczvB0BGzBRYh2s702h+qNusRijRpVNZmzmYOo9m1x7Y1O/b8/v2A==}
engines: {node: '>=14.18'}
- '@sentry/opentelemetry@8.33.1':
- resolution: {integrity: sha512-D2aE2G0DUHLLnfbOXrTjiNJKAs/RZfOBJMidI4fC2AIwqCmrp55Aex4dRq4hxd8MPLR92Kt/ikHeJxlzWB15KA==}
+ '@sentry/opentelemetry@8.34.0':
+ resolution: {integrity: sha512-WS91L+HVKGVIzOgt0szGp+24iKOs86BZsAHGt0HWnMR4kqWP6Ak+TLvqWDCxnuzniZMxdewDGA8p5hrBAPsmsA==}
engines: {node: '>=14.18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -1360,22 +1386,22 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.26.0
'@opentelemetry/semantic-conventions': ^1.27.0
- '@sentry/react@8.33.1':
- resolution: {integrity: sha512-SsEX05xfcfOvo7/pK1UyeyTAYWH8iSIsXXlsjvnSRsbuJkjb0c+q6yiZpj3A2PRdbcx43nTVE1n0lSpgaqj2HA==}
+ '@sentry/react@8.34.0':
+ resolution: {integrity: sha512-gIgzhj7h67C+Sdq2ul4fOSK142Gf0uV99bqHRdtIiUlXw9yjzZQY5TKTtzbOaevn7qBJ0xrRKtIRUbOBMl0clw==}
engines: {node: '>=14.18'}
peerDependencies:
react: ^16.14.0 || 17.x || 18.x || 19.x
- '@sentry/types@8.33.1':
- resolution: {integrity: sha512-GjoAMvwtpIemoF/IiwZ7A60g4nQv3qwzR21GvJqDVUoKD0e8pv9OLX+HyXoUat4wEDGSuDUcUyUKD2G+od73QA==}
+ '@sentry/types@8.34.0':
+ resolution: {integrity: sha512-zLRc60CzohGCo6zNsNeQ9JF3SiEeRE4aDCP9fDDdIVCOKovS+mn1rtSip0qd0Vp2fidOu0+2yY0ALCz1A3PJSQ==}
engines: {node: '>=14.18'}
- '@sentry/utils@8.33.1':
- resolution: {integrity: sha512-uzuYpiiJuFY3N4WNHMBWUQX5oNv2t/TbG0OHRp3Rr7yeu+HSfD542TIp9/gMZ+G0Cxd8AmVO3wkKIFbk0TL4Qg==}
+ '@sentry/utils@8.34.0':
+ resolution: {integrity: sha512-W1KoRlFUjprlh3t86DZPFxLfM6mzjRzshVfMY7vRlJFymBelJsnJ3A1lPeBZM9nCraOSiw6GtOWu6k5BAkiGIg==}
engines: {node: '>=14.18'}
- '@sentry/vercel-edge@8.33.1':
- resolution: {integrity: sha512-YKAsFAm4ctsKRdoS3LkYF4oG5BD1chT4Uqy4AaBhlz0s5iHxBI7YzZFbcW4YiNnDWT80tdF+FS7AvUAjy+npoA==}
+ '@sentry/vercel-edge@8.34.0':
+ resolution: {integrity: sha512-yF6043FcVO9GqPawCJZp0psEL8iF9+5bOlAdQydCyaj2BtDgFvAeBVI19qlDeAHhqsXNfTD0JsIox2aJPNupwg==}
engines: {node: '>=14.18'}
'@sentry/webpack-plugin@2.22.3':
@@ -1566,6 +1592,9 @@ packages:
'@types/connect@3.4.36':
resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==}
+ '@types/dompurify@3.0.5':
+ resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==}
+
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
@@ -1635,6 +1664,9 @@ packages:
'@types/stylis@4.2.5':
resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==}
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -1644,8 +1676,8 @@ packages:
'@types/uuid@9.0.8':
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
- '@typescript-eslint/eslint-plugin@8.8.0':
- resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==}
+ '@typescript-eslint/eslint-plugin@8.8.1':
+ resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -1655,8 +1687,8 @@ packages:
typescript:
optional: true
- '@typescript-eslint/parser@8.8.0':
- resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==}
+ '@typescript-eslint/parser@8.8.1':
+ resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1665,12 +1697,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/scope-manager@8.8.0':
- resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==}
+ '@typescript-eslint/scope-manager@8.8.1':
+ resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.8.0':
- resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==}
+ '@typescript-eslint/type-utils@8.8.1':
+ resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -1678,12 +1710,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/types@8.8.0':
- resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==}
+ '@typescript-eslint/types@8.8.1':
+ resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.8.0':
- resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==}
+ '@typescript-eslint/typescript-estree@8.8.1':
+ resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -1691,14 +1723,14 @@ packages:
typescript:
optional: true
- '@typescript-eslint/utils@8.8.0':
- resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==}
+ '@typescript-eslint/utils@8.8.1':
+ resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- '@typescript-eslint/visitor-keys@8.8.0':
- resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==}
+ '@typescript-eslint/visitor-keys@8.8.1':
+ resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.2.0':
@@ -2135,6 +2167,9 @@ packages:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
+ dompurify@3.1.7:
+ resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==}
+
dotenv@16.4.5:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
@@ -2142,8 +2177,11 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- electron-to-chromium@1.5.32:
- resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==}
+ electron-to-chromium@1.5.36:
+ resolution: {integrity: sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==}
+
+ emoji-mart@5.6.0:
+ resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2181,8 +2219,8 @@ packages:
es-get-iterator@1.1.3:
resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
- es-iterator-helpers@1.0.19:
- resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==}
+ es-iterator-helpers@1.1.0:
+ resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==}
engines: {node: '>= 0.4'}
es-module-lexer@1.5.4:
@@ -2215,8 +2253,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- eslint-config-next@14.2.14:
- resolution: {integrity: sha512-TXwyjGICAlWC9O0OufS3koTsBKQH8l1xt3SY/aDuvtKHIwjTHplJKWVb1WOEX0OsDaxGbFXmfD2EY1sNfG0Y/w==}
+ eslint-config-next@14.2.15:
+ resolution: {integrity: sha512-mKg+NC/8a4JKLZRIOBplxXNdStgxy7lzWuedUaCc8tev+Al9mwDUTujQH6W6qXDH9kycWiVo28tADWGvpBsZcQ==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1'
@@ -2496,8 +2534,8 @@ packages:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
- goober@2.1.14:
- resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==}
+ goober@2.1.15:
+ resolution: {integrity: sha512-LP0xChUqgLlr5ORa1m4LobVy++/dhP4Kta2gVla9i2pc30XvtpEFrye4JtcD265g1tEFLOjYIQEiTa+9bGGQ/g==}
peerDependencies:
csstype: ^3.0.10
@@ -2718,8 +2756,9 @@ packages:
isomorphic.js@0.2.5:
resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==}
- iterator.prototype@1.1.2:
- resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+ iterator.prototype@1.1.3:
+ resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==}
+ engines: {node: '>= 0.4'}
jackspeak@2.3.6:
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
@@ -2950,8 +2989,8 @@ packages:
nodemailer:
optional: true
- next@14.2.7:
- resolution: {integrity: sha512-4Qy2aK0LwH4eQiSvQWyKuC7JXE13bIopEQesWE0c/P3uuNRnZCQanI0vsrMLmUQJLAto+A+/8+sve2hd+BQuOQ==}
+ next@14.2.15:
+ resolution: {integrity: sha512-h9ctmOokpoDphRvMGnwOJAedT6zKhwqyZML9mDtspgf4Rh3Pn7UTYKqePNoDvhsWBAO5GoPNYshnAUGIazVGmw==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
@@ -3265,8 +3304,8 @@ packages:
prosemirror-state: ^1.4.2
prosemirror-view: ^1.33.8
- prosemirror-transform@1.10.0:
- resolution: {integrity: sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==}
+ prosemirror-transform@1.10.1:
+ resolution: {integrity: sha512-jANxn50pNsBT7042mM4pxKpGyzgJWen/GrfCEQOPtHa5gLrQ2+0OgDtuQu2noG1X0+2cQ5uPsWqCRy7w7J+obw==}
prosemirror-view@1.34.3:
resolution: {integrity: sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==}
@@ -3794,6 +3833,10 @@ packages:
unplugin@1.0.1:
resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==}
+ unsplash-js@7.0.19:
+ resolution: {integrity: sha512-j6qT2floy5Q2g2d939FJpwey1yw/GpQecFiSouyJtsHQPj3oqmqq3K4rI+GF8vU1zwGCT7ZwIGQd2dtCQLjYJw==}
+ engines: {node: '>=10'}
+
update-browserslist-db@1.1.1:
resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
hasBin: true
@@ -3994,20 +4037,20 @@ snapshots:
'@babel/highlight': 7.25.7
picocolors: 1.1.0
- '@babel/compat-data@7.25.7': {}
+ '@babel/compat-data@7.25.8': {}
- '@babel/core@7.25.7':
+ '@babel/core@7.25.8':
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.25.7
'@babel/generator': 7.25.7
'@babel/helper-compilation-targets': 7.25.7
- '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7)
+ '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8)
'@babel/helpers': 7.25.7
- '@babel/parser': 7.25.7
+ '@babel/parser': 7.25.8
'@babel/template': 7.25.7
'@babel/traverse': 7.25.7
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
convert-source-map: 2.0.0
debug: 4.3.7
gensync: 1.0.0-beta.2
@@ -4018,14 +4061,14 @@ snapshots:
'@babel/generator@7.25.7':
dependencies:
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.0.2
'@babel/helper-compilation-targets@7.25.7':
dependencies:
- '@babel/compat-data': 7.25.7
+ '@babel/compat-data': 7.25.8
'@babel/helper-validator-option': 7.25.7
browserslist: 4.24.0
lru-cache: 5.1.1
@@ -4034,13 +4077,13 @@ snapshots:
'@babel/helper-module-imports@7.25.7':
dependencies:
'@babel/traverse': 7.25.7
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)':
+ '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)':
dependencies:
- '@babel/core': 7.25.7
+ '@babel/core': 7.25.8
'@babel/helper-module-imports': 7.25.7
'@babel/helper-simple-access': 7.25.7
'@babel/helper-validator-identifier': 7.25.7
@@ -4051,7 +4094,7 @@ snapshots:
'@babel/helper-simple-access@7.25.7':
dependencies:
'@babel/traverse': 7.25.7
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
transitivePeerDependencies:
- supports-color
@@ -4064,7 +4107,7 @@ snapshots:
'@babel/helpers@7.25.7':
dependencies:
'@babel/template': 7.25.7
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
'@babel/highlight@7.25.7':
dependencies:
@@ -4073,9 +4116,9 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.0
- '@babel/parser@7.25.7':
+ '@babel/parser@7.25.8':
dependencies:
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
'@babel/runtime@7.25.7':
dependencies:
@@ -4084,22 +4127,22 @@ snapshots:
'@babel/template@7.25.7':
dependencies:
'@babel/code-frame': 7.25.7
- '@babel/parser': 7.25.7
- '@babel/types': 7.25.7
+ '@babel/parser': 7.25.8
+ '@babel/types': 7.25.8
'@babel/traverse@7.25.7':
dependencies:
'@babel/code-frame': 7.25.7
'@babel/generator': 7.25.7
- '@babel/parser': 7.25.7
+ '@babel/parser': 7.25.8
'@babel/template': 7.25.7
- '@babel/types': 7.25.7
+ '@babel/types': 7.25.8
debug: 4.3.7
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.25.7':
+ '@babel/types@7.25.8':
dependencies:
'@babel/helper-string-parser': 7.25.7
'@babel/helper-validator-identifier': 7.25.7
@@ -4110,6 +4153,11 @@ snapshots:
tslib: 2.7.0
optional: true
+ '@emoji-mart/react@1.1.1(emoji-mart@5.6.0)(react@18.3.1)':
+ dependencies:
+ emoji-mart: 5.6.0
+ react: 18.3.1
+
'@emotion/is-prop-valid@0.8.8':
dependencies:
'@emotion/memoize': 0.7.4
@@ -4166,13 +4214,13 @@ snapshots:
'@floating-ui/utils@0.2.8': {}
- '@hocuspocus/common@2.13.6':
+ '@hocuspocus/common@2.13.7':
dependencies:
lib0: 0.2.98
- '@hocuspocus/provider@2.13.6(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19)':
+ '@hocuspocus/provider@2.13.7(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19)':
dependencies:
- '@hocuspocus/common': 2.13.6
+ '@hocuspocus/common': 2.13.7
'@lifeomic/attempt': 3.1.0
lib0: 0.2.98
ws: 8.18.0
@@ -4194,6 +4242,10 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
+ '@icons-pack/react-simple-icons@10.0.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
'@img/sharp-darwin-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.0.4
@@ -4302,37 +4354,37 @@ snapshots:
'@lifeomic/attempt@3.1.0': {}
- '@next/env@14.2.7': {}
+ '@next/env@14.2.15': {}
- '@next/eslint-plugin-next@14.2.14':
+ '@next/eslint-plugin-next@14.2.15':
dependencies:
glob: 10.3.10
- '@next/swc-darwin-arm64@14.2.7':
+ '@next/swc-darwin-arm64@14.2.15':
optional: true
- '@next/swc-darwin-x64@14.2.7':
+ '@next/swc-darwin-x64@14.2.15':
optional: true
- '@next/swc-linux-arm64-gnu@14.2.7':
+ '@next/swc-linux-arm64-gnu@14.2.15':
optional: true
- '@next/swc-linux-arm64-musl@14.2.7':
+ '@next/swc-linux-arm64-musl@14.2.15':
optional: true
- '@next/swc-linux-x64-gnu@14.2.7':
+ '@next/swc-linux-x64-gnu@14.2.15':
optional: true
- '@next/swc-linux-x64-musl@14.2.7':
+ '@next/swc-linux-x64-musl@14.2.15':
optional: true
- '@next/swc-win32-arm64-msvc@14.2.7':
+ '@next/swc-win32-arm64-msvc@14.2.15':
optional: true
- '@next/swc-win32-ia32-msvc@14.2.7':
+ '@next/swc-win32-ia32-msvc@14.2.15':
optional: true
- '@next/swc-win32-x64-msvc@14.2.7':
+ '@next/swc-win32-x64-msvc@14.2.15':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -5026,49 +5078,49 @@ snapshots:
'@rushstack/eslint-patch@1.10.4': {}
- '@sentry-internal/browser-utils@8.33.1':
+ '@sentry-internal/browser-utils@8.34.0':
dependencies:
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
- '@sentry-internal/feedback@8.33.1':
+ '@sentry-internal/feedback@8.34.0':
dependencies:
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
- '@sentry-internal/replay-canvas@8.33.1':
+ '@sentry-internal/replay-canvas@8.34.0':
dependencies:
- '@sentry-internal/replay': 8.33.1
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry-internal/replay': 8.34.0
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
- '@sentry-internal/replay@8.33.1':
+ '@sentry-internal/replay@8.34.0':
dependencies:
- '@sentry-internal/browser-utils': 8.33.1
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry-internal/browser-utils': 8.34.0
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
'@sentry/babel-plugin-component-annotate@2.22.3': {}
- '@sentry/browser@8.33.1':
+ '@sentry/browser@8.34.0':
dependencies:
- '@sentry-internal/browser-utils': 8.33.1
- '@sentry-internal/feedback': 8.33.1
- '@sentry-internal/replay': 8.33.1
- '@sentry-internal/replay-canvas': 8.33.1
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry-internal/browser-utils': 8.34.0
+ '@sentry-internal/feedback': 8.34.0
+ '@sentry-internal/replay': 8.34.0
+ '@sentry-internal/replay-canvas': 8.34.0
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
'@sentry/bundler-plugin-core@2.22.3':
dependencies:
- '@babel/core': 7.25.7
+ '@babel/core': 7.25.8
'@sentry/babel-plugin-component-annotate': 2.22.3
- '@sentry/cli': 2.36.6
+ '@sentry/cli': 2.37.0
dotenv: 16.4.5
find-up: 5.0.0
glob: 9.3.5
@@ -5078,28 +5130,28 @@ snapshots:
- encoding
- supports-color
- '@sentry/cli-darwin@2.36.6':
+ '@sentry/cli-darwin@2.37.0':
optional: true
- '@sentry/cli-linux-arm64@2.36.6':
+ '@sentry/cli-linux-arm64@2.37.0':
optional: true
- '@sentry/cli-linux-arm@2.36.6':
+ '@sentry/cli-linux-arm@2.37.0':
optional: true
- '@sentry/cli-linux-i686@2.36.6':
+ '@sentry/cli-linux-i686@2.37.0':
optional: true
- '@sentry/cli-linux-x64@2.36.6':
+ '@sentry/cli-linux-x64@2.37.0':
optional: true
- '@sentry/cli-win32-i686@2.36.6':
+ '@sentry/cli-win32-i686@2.37.0':
optional: true
- '@sentry/cli-win32-x64@2.36.6':
+ '@sentry/cli-win32-x64@2.37.0':
optional: true
- '@sentry/cli@2.36.6':
+ '@sentry/cli@2.37.0':
dependencies:
https-proxy-agent: 5.0.1
node-fetch: 2.7.0
@@ -5107,38 +5159,38 @@ snapshots:
proxy-from-env: 1.1.0
which: 2.0.2
optionalDependencies:
- '@sentry/cli-darwin': 2.36.6
- '@sentry/cli-linux-arm': 2.36.6
- '@sentry/cli-linux-arm64': 2.36.6
- '@sentry/cli-linux-i686': 2.36.6
- '@sentry/cli-linux-x64': 2.36.6
- '@sentry/cli-win32-i686': 2.36.6
- '@sentry/cli-win32-x64': 2.36.6
+ '@sentry/cli-darwin': 2.37.0
+ '@sentry/cli-linux-arm': 2.37.0
+ '@sentry/cli-linux-arm64': 2.37.0
+ '@sentry/cli-linux-i686': 2.37.0
+ '@sentry/cli-linux-x64': 2.37.0
+ '@sentry/cli-win32-i686': 2.37.0
+ '@sentry/cli-win32-x64': 2.37.0
transitivePeerDependencies:
- encoding
- supports-color
- '@sentry/core@8.33.1':
+ '@sentry/core@8.34.0':
dependencies:
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
- '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0)':
+ '@sentry/nextjs@8.34.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.94.0)':
dependencies:
'@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.27.0
'@rollup/plugin-commonjs': 26.0.1(rollup@3.29.5)
- '@sentry-internal/browser-utils': 8.33.1
- '@sentry/core': 8.33.1
- '@sentry/node': 8.33.1
- '@sentry/opentelemetry': 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)
- '@sentry/react': 8.33.1(react@18.3.1)
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
- '@sentry/vercel-edge': 8.33.1
+ '@sentry-internal/browser-utils': 8.34.0
+ '@sentry/core': 8.34.0
+ '@sentry/node': 8.34.0
+ '@sentry/opentelemetry': 8.34.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)
+ '@sentry/react': 8.34.0(react@18.3.1)
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
+ '@sentry/vercel-edge': 8.34.0
'@sentry/webpack-plugin': 2.22.3(webpack@5.94.0)
chalk: 3.0.0
- next: 14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
resolve: 1.22.8
rollup: 3.29.5
stacktrace-parser: 0.1.10
@@ -5153,7 +5205,7 @@ snapshots:
- react
- supports-color
- '@sentry/node@8.33.1':
+ '@sentry/node@8.34.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 1.26.0(@opentelemetry/api@1.9.0)
@@ -5185,45 +5237,45 @@ snapshots:
'@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.27.0
'@prisma/instrumentation': 5.19.1
- '@sentry/core': 8.33.1
- '@sentry/opentelemetry': 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/core': 8.34.0
+ '@sentry/opentelemetry': 8.34.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
import-in-the-middle: 1.11.2
transitivePeerDependencies:
- supports-color
- '@sentry/opentelemetry@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)':
+ '@sentry/opentelemetry@8.34.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.27.0
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
- '@sentry/react@8.33.1(react@18.3.1)':
+ '@sentry/react@8.34.0(react@18.3.1)':
dependencies:
- '@sentry/browser': 8.33.1
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/browser': 8.34.0
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
hoist-non-react-statics: 3.3.2
react: 18.3.1
- '@sentry/types@8.33.1': {}
+ '@sentry/types@8.34.0': {}
- '@sentry/utils@8.33.1':
+ '@sentry/utils@8.34.0':
dependencies:
- '@sentry/types': 8.33.1
+ '@sentry/types': 8.34.0
- '@sentry/vercel-edge@8.33.1':
+ '@sentry/vercel-edge@8.34.0':
dependencies:
- '@sentry/core': 8.33.1
- '@sentry/types': 8.33.1
- '@sentry/utils': 8.33.1
+ '@sentry/core': 8.34.0
+ '@sentry/types': 8.34.0
+ '@sentry/utils': 8.34.0
'@sentry/webpack-plugin@2.22.3(webpack@5.94.0)':
dependencies:
@@ -5394,7 +5446,7 @@ snapshots:
prosemirror-state: 1.4.3
prosemirror-tables: 1.5.0
prosemirror-trailing-node: 3.0.0(prosemirror-model@1.23.0)(prosemirror-state@1.4.3)(prosemirror-view@1.34.3)
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-view: 1.34.3
'@tiptap/react@2.8.0(@tiptap/core@2.8.0(@tiptap/pm@2.8.0))(@tiptap/pm@2.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -5438,6 +5490,10 @@ snapshots:
dependencies:
'@types/node': 20.12.2
+ '@types/dompurify@3.0.5':
+ dependencies:
+ '@types/trusted-types': 2.0.7
+
'@types/estree@1.0.6': {}
'@types/hast@3.0.4':
@@ -5522,20 +5578,22 @@ snapshots:
'@types/stylis@4.2.5': {}
+ '@types/trusted-types@2.0.7': {}
+
'@types/unist@3.0.3': {}
'@types/use-sync-external-store@0.0.6': {}
'@types/uuid@9.0.8': {}
- '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1)(typescript@5.4.4)':
+ '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1)(typescript@5.4.4)':
dependencies:
'@eslint-community/regexpp': 4.11.1
- '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
- '@typescript-eslint/scope-manager': 8.8.0
- '@typescript-eslint/type-utils': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
- '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
- '@typescript-eslint/visitor-keys': 8.8.0
+ '@typescript-eslint/parser': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/scope-manager': 8.8.1
+ '@typescript-eslint/type-utils': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/utils': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/visitor-keys': 8.8.1
eslint: 8.57.1
graphemer: 1.4.0
ignore: 5.3.2
@@ -5546,12 +5604,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4)':
+ '@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4)':
dependencies:
- '@typescript-eslint/scope-manager': 8.8.0
- '@typescript-eslint/types': 8.8.0
- '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.4.4)
- '@typescript-eslint/visitor-keys': 8.8.0
+ '@typescript-eslint/scope-manager': 8.8.1
+ '@typescript-eslint/types': 8.8.1
+ '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.4)
+ '@typescript-eslint/visitor-keys': 8.8.1
debug: 4.3.7
eslint: 8.57.1
optionalDependencies:
@@ -5559,15 +5617,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.8.0':
+ '@typescript-eslint/scope-manager@8.8.1':
dependencies:
- '@typescript-eslint/types': 8.8.0
- '@typescript-eslint/visitor-keys': 8.8.0
+ '@typescript-eslint/types': 8.8.1
+ '@typescript-eslint/visitor-keys': 8.8.1
- '@typescript-eslint/type-utils@8.8.0(eslint@8.57.1)(typescript@5.4.4)':
+ '@typescript-eslint/type-utils@8.8.1(eslint@8.57.1)(typescript@5.4.4)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.4.4)
- '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.4)
+ '@typescript-eslint/utils': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
debug: 4.3.7
ts-api-utils: 1.3.0(typescript@5.4.4)
optionalDependencies:
@@ -5576,12 +5634,12 @@ snapshots:
- eslint
- supports-color
- '@typescript-eslint/types@8.8.0': {}
+ '@typescript-eslint/types@8.8.1': {}
- '@typescript-eslint/typescript-estree@8.8.0(typescript@5.4.4)':
+ '@typescript-eslint/typescript-estree@8.8.1(typescript@5.4.4)':
dependencies:
- '@typescript-eslint/types': 8.8.0
- '@typescript-eslint/visitor-keys': 8.8.0
+ '@typescript-eslint/types': 8.8.1
+ '@typescript-eslint/visitor-keys': 8.8.1
debug: 4.3.7
fast-glob: 3.3.2
is-glob: 4.0.3
@@ -5593,20 +5651,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.8.0(eslint@8.57.1)(typescript@5.4.4)':
+ '@typescript-eslint/utils@8.8.1(eslint@8.57.1)(typescript@5.4.4)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
- '@typescript-eslint/scope-manager': 8.8.0
- '@typescript-eslint/types': 8.8.0
- '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.4.4)
+ '@typescript-eslint/scope-manager': 8.8.1
+ '@typescript-eslint/types': 8.8.1
+ '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.4)
eslint: 8.57.1
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/visitor-keys@8.8.0':
+ '@typescript-eslint/visitor-keys@8.8.1':
dependencies:
- '@typescript-eslint/types': 8.8.0
+ '@typescript-eslint/types': 8.8.1
eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {}
@@ -5834,7 +5892,7 @@ snapshots:
avvvatars-react@0.4.2(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- goober: 2.1.14(csstype@3.1.3)
+ goober: 2.1.15(csstype@3.1.3)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
@@ -5866,7 +5924,7 @@ snapshots:
browserslist@4.24.0:
dependencies:
caniuse-lite: 1.0.30001667
- electron-to-chromium: 1.5.32
+ electron-to-chromium: 1.5.36
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.0)
@@ -6094,11 +6152,15 @@ snapshots:
dependencies:
esutils: 2.0.3
+ dompurify@3.1.7: {}
+
dotenv@16.4.5: {}
eastasianwidth@0.2.0: {}
- electron-to-chromium@1.5.32: {}
+ electron-to-chromium@1.5.36: {}
+
+ emoji-mart@5.6.0: {}
emoji-regex@8.0.0: {}
@@ -6182,7 +6244,7 @@ snapshots:
isarray: 2.0.5
stop-iteration-iterator: 1.0.0
- es-iterator-helpers@1.0.19:
+ es-iterator-helpers@1.1.0:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
@@ -6196,7 +6258,7 @@ snapshots:
has-proto: 1.0.3
has-symbols: 1.0.3
internal-slot: 1.0.7
- iterator.prototype: 1.1.2
+ iterator.prototype: 1.1.3
safe-array-concat: 1.1.2
es-module-lexer@1.5.4: {}
@@ -6227,16 +6289,16 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@14.2.14(eslint@8.57.1)(typescript@5.4.4):
+ eslint-config-next@14.2.15(eslint@8.57.1)(typescript@5.4.4):
dependencies:
- '@next/eslint-plugin-next': 14.2.14
+ '@next/eslint-plugin-next': 14.2.15
'@rushstack/eslint-patch': 1.10.4
- '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1)(typescript@5.4.4)
- '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/parser': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1)
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
eslint-plugin-react: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
@@ -6255,37 +6317,37 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1):
+ eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.3.7
enhanced-resolve: 5.17.1
eslint: 8.57.1
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.2.1
is-glob: 4.0.3
optionalDependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/parser': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -6296,7 +6358,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.4.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.8.1(eslint@8.57.1)(typescript@5.4.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -6308,7 +6370,7 @@ snapshots:
string.prototype.trimend: 1.0.8
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.4.4)
+ '@typescript-eslint/parser': 8.8.1(eslint@8.57.1)(typescript@5.4.4)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -6324,7 +6386,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- es-iterator-helpers: 1.0.19
+ es-iterator-helpers: 1.1.0
eslint: 8.57.1
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -6345,7 +6407,7 @@ snapshots:
array.prototype.flatmap: 1.3.2
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
- es-iterator-helpers: 1.0.19
+ es-iterator-helpers: 1.1.0
eslint: 8.57.1
estraverse: 5.3.0
hasown: 2.0.2
@@ -6612,7 +6674,7 @@ snapshots:
define-properties: 1.2.1
gopd: 1.0.1
- goober@2.1.14(csstype@3.1.3):
+ goober@2.1.15(csstype@3.1.3):
dependencies:
csstype: 3.1.3
@@ -6815,7 +6877,7 @@ snapshots:
isomorphic.js@0.2.5: {}
- iterator.prototype@1.1.2:
+ iterator.prototype@1.1.3:
dependencies:
define-properties: 1.2.1
get-intrinsic: 1.2.4
@@ -7017,13 +7079,13 @@ snapshots:
neo-async@2.6.2: {}
- next-auth@4.24.8(next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next-auth@4.24.8(next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.7
'@panva/hkdf': 1.2.1
cookie: 0.5.0
jose: 4.15.9
- next: 14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
oauth: 0.9.15
openid-client: 5.7.0
preact: 10.24.2
@@ -7032,9 +7094,9 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
uuid: 8.3.2
- next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@next/env': 14.2.7
+ '@next/env': 14.2.15
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001667
@@ -7042,25 +7104,25 @@ snapshots:
postcss: 8.4.31
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.1(@babel/core@7.25.7)(react@18.3.1)
+ styled-jsx: 5.1.1(@babel/core@7.25.8)(react@18.3.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.7
- '@next/swc-darwin-x64': 14.2.7
- '@next/swc-linux-arm64-gnu': 14.2.7
- '@next/swc-linux-arm64-musl': 14.2.7
- '@next/swc-linux-x64-gnu': 14.2.7
- '@next/swc-linux-x64-musl': 14.2.7
- '@next/swc-win32-arm64-msvc': 14.2.7
- '@next/swc-win32-ia32-msvc': 14.2.7
- '@next/swc-win32-x64-msvc': 14.2.7
+ '@next/swc-darwin-arm64': 14.2.15
+ '@next/swc-darwin-x64': 14.2.15
+ '@next/swc-linux-arm64-gnu': 14.2.15
+ '@next/swc-linux-arm64-musl': 14.2.15
+ '@next/swc-linux-x64-gnu': 14.2.15
+ '@next/swc-linux-x64-musl': 14.2.15
+ '@next/swc-win32-arm64-msvc': 14.2.15
+ '@next/swc-win32-ia32-msvc': 14.2.15
+ '@next/swc-win32-x64-msvc': 14.2.15
'@opentelemetry/api': 1.9.0
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- nextjs-toploader@1.6.12(next@14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ nextjs-toploader@1.6.12(next@14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- next: 14.2.7(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.15(@babel/core@7.25.8)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
nprogress: 0.2.0
prop-types: 15.8.1
react: 18.3.1
@@ -7280,7 +7342,7 @@ snapshots:
prosemirror-changeset@2.2.1:
dependencies:
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-collab@1.3.1:
dependencies:
@@ -7290,12 +7352,12 @@ snapshots:
dependencies:
prosemirror-model: 1.23.0
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-dropcursor@1.8.1:
dependencies:
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-view: 1.34.3
prosemirror-gapcursor@1.3.2:
@@ -7308,14 +7370,14 @@ snapshots:
prosemirror-history@1.4.1:
dependencies:
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-view: 1.34.3
rope-sequence: 1.3.4
prosemirror-inputrules@1.4.0:
dependencies:
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-keymap@1.2.2:
dependencies:
@@ -7347,12 +7409,12 @@ snapshots:
dependencies:
prosemirror-model: 1.23.0
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-state@1.4.3:
dependencies:
prosemirror-model: 1.23.0
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-view: 1.34.3
prosemirror-tables@1.5.0:
@@ -7360,7 +7422,7 @@ snapshots:
prosemirror-keymap: 1.2.2
prosemirror-model: 1.23.0
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
prosemirror-view: 1.34.3
prosemirror-trailing-node@3.0.0(prosemirror-model@1.23.0)(prosemirror-state@1.4.3)(prosemirror-view@1.34.3):
@@ -7371,7 +7433,7 @@ snapshots:
prosemirror-state: 1.4.3
prosemirror-view: 1.34.3
- prosemirror-transform@1.10.0:
+ prosemirror-transform@1.10.1:
dependencies:
prosemirror-model: 1.23.0
@@ -7379,7 +7441,7 @@ snapshots:
dependencies:
prosemirror-model: 1.23.0
prosemirror-state: 1.4.3
- prosemirror-transform: 1.10.0
+ prosemirror-transform: 1.10.1
proxy-from-env@1.1.0: {}
@@ -7431,7 +7493,7 @@ snapshots:
react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- goober: 2.1.14(csstype@3.1.3)
+ goober: 2.1.15(csstype@3.1.3)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
@@ -7799,12 +7861,12 @@ snapshots:
stylis: 4.3.2
tslib: 2.6.2
- styled-jsx@5.1.1(@babel/core@7.25.7)(react@18.3.1):
+ styled-jsx@5.1.1(@babel/core@7.25.8)(react@18.3.1):
dependencies:
client-only: 0.0.1
react: 18.3.1
optionalDependencies:
- '@babel/core': 7.25.7
+ '@babel/core': 7.25.8
stylis@4.3.2: {}
@@ -7998,6 +8060,8 @@ snapshots:
webpack-sources: 3.2.3
webpack-virtual-modules: 0.5.0
+ unsplash-js@7.0.19: {}
+
update-browserslist-db@1.1.1(browserslist@4.24.0):
dependencies:
browserslist: 4.24.0