diff --git a/frontend/package.json b/frontend/package.json
index af548cc6c..604608a9b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -2,7 +2,7 @@
"name": "raven-ui",
"private": true,
"license": "AGPL-3.0-only",
- "version": "1.6.7",
+ "version": "1.6.8",
"type": "module",
"scripts": {
"dev": "vite",
@@ -12,49 +12,49 @@
},
"dependencies": {
"@radix-ui/themes": "^3.1.3",
- "@tiptap/extension-code-block-lowlight": "^2.5.9",
- "@tiptap/extension-highlight": "^2.5.9",
- "@tiptap/extension-image": "^2.5.9",
- "@tiptap/extension-link": "^2.5.9",
- "@tiptap/extension-mention": "^2.5.9",
- "@tiptap/extension-placeholder": "^2.5.9",
- "@tiptap/extension-table": "^2.5.9",
- "@tiptap/extension-table-cell": "^2.5.9",
- "@tiptap/extension-table-header": "^2.5.9",
- "@tiptap/extension-table-row": "^2.5.9",
- "@tiptap/extension-typography": "^2.5.9",
- "@tiptap/extension-underline": "^2.5.9",
- "@tiptap/pm": "^2.5.9",
- "@tiptap/react": "^2.5.9",
- "@tiptap/starter-kit": "^2.5.9",
- "@tiptap/suggestion": "^2.5.9",
+ "@tiptap/extension-code-block-lowlight": "^2.6.4",
+ "@tiptap/extension-highlight": "^2.6.4",
+ "@tiptap/extension-image": "^2.6.4",
+ "@tiptap/extension-link": "^2.6.4",
+ "@tiptap/extension-mention": "^2.6.4",
+ "@tiptap/extension-placeholder": "^2.6.4",
+ "@tiptap/extension-table": "^2.6.4",
+ "@tiptap/extension-table-cell": "^2.6.4",
+ "@tiptap/extension-table-header": "^2.6.4",
+ "@tiptap/extension-table-row": "^2.6.4",
+ "@tiptap/extension-typography": "^2.6.4",
+ "@tiptap/extension-underline": "^2.6.4",
+ "@tiptap/pm": "^2.6.4",
+ "@tiptap/react": "^2.6.4",
+ "@tiptap/starter-kit": "^2.6.4",
+ "@tiptap/suggestion": "^2.6.4",
"@vitejs/plugin-react": "^4.3.1",
- "autoprefixer": "^10.4.17",
+ "autoprefixer": "^10.4.20",
"cal-sans": "^1.0.1",
"clsx": "^2.1.0",
"cmdk": "^1.0.0",
"cva": "npm:class-variance-authority",
"dayjs": "^1.11.11",
"downshift": "^8.3.1",
- "emoji-picker-element": "^1.22.2",
+ "emoji-picker-element": "^1.22.3",
"firebase": "^10.9.0",
- "frappe-react-sdk": "^1.7.1",
+ "frappe-react-sdk": "^1.8.0",
"highlight.js": "^11.9.0",
"html-react-parser": "^5.1.8",
- "jotai": "^2.9.2",
+ "jotai": "^2.9.3",
"js-cookie": "^3.0.5",
"lowlight": "^3.1.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-dropzone": "^14.2.3",
- "react-hook-form": "^7.51.5",
- "react-icons": "^5.2.1",
+ "react-hook-form": "^7.52.2",
+ "react-icons": "^5.3.0",
"react-idle-timer": "^5.7.2",
"react-intersection-observer": "^9.10.3",
- "react-router-dom": "^6.23.1",
+ "react-router-dom": "^6.26.1",
"react-zoom-pan-pinch": "^3.4.4",
"sonner": "^1.5.0",
- "tailwindcss": "^3.4.4",
+ "tailwindcss": "^3.4.10",
"tailwindcss-animate": "^1.0.7",
"tippy.js": "^6.3.7",
"turndown": "^7.2.0",
diff --git a/frontend/src/components/common/LinkField/LinkField.tsx b/frontend/src/components/common/LinkField/LinkField.tsx
new file mode 100644
index 000000000..10828203c
--- /dev/null
+++ b/frontend/src/components/common/LinkField/LinkField.tsx
@@ -0,0 +1,98 @@
+
+
+import { useCombobox } from "downshift";
+import { Filter, SearchResult, useSearch } from "frappe-react-sdk";
+import { useState } from "react";
+import { Label } from "../Form";
+import { Text, TextField } from "@radix-ui/themes";
+import { useIsDesktop } from "@/hooks/useMediaQuery";
+import clsx from "clsx";
+
+export interface LinkFieldProps {
+ doctype: string;
+ filters?: Filter[];
+ label?: string,
+ placeholder?: string,
+ value: string,
+ setValue: (value: string) => void,
+ disabled?: boolean,
+ autofocus?: boolean
+}
+
+
+const LinkField = ({ doctype, filters, label, placeholder, value, setValue, disabled, autofocus }: LinkFieldProps) => {
+
+ const [searchText, setSearchText] = useState('')
+
+ const isDesktop = useIsDesktop()
+
+ const { data } = useSearch(doctype, searchText, filters)
+
+ const items: SearchResult[] = data?.message ?? []
+
+ const {
+ isOpen,
+ // getToggleButtonProps,
+ getLabelProps,
+ getMenuProps,
+ getInputProps,
+ highlightedIndex,
+ getItemProps,
+ selectedItem,
+ } = useCombobox({
+ onInputValueChange({ inputValue }) {
+ setSearchText(inputValue ?? '')
+ },
+ items: items,
+ itemToString(item) {
+ return item ? item.value : ''
+ },
+ selectedItem: items.find(item => item.value === value),
+ onSelectedItemChange({ selectedItem }) {
+ setValue(selectedItem?.value ?? '')
+ },
+ })
+
+ return
+
+
+
+
+
+
+
+
+}
+
+export default LinkField
\ No newline at end of file
diff --git a/frontend/src/components/common/LinkField/LinkFormField.tsx b/frontend/src/components/common/LinkField/LinkFormField.tsx
new file mode 100644
index 000000000..3d1fc386c
--- /dev/null
+++ b/frontend/src/components/common/LinkField/LinkFormField.tsx
@@ -0,0 +1,30 @@
+import { Controller, ControllerProps, useFormContext } from 'react-hook-form'
+import LinkField, { LinkFieldProps } from './LinkField'
+
+interface LinkFormFieldProps extends Omit {
+ name: string,
+ rules: ControllerProps['rules'],
+ disabled?: boolean
+}
+
+const LinkFormField = ({ name, rules, ...linkFieldProps }: LinkFormFieldProps) => {
+
+ const { control } = useFormContext()
+ return (
+ (
+
+ )}
+ />
+ )
+}
+
+export default LinkFormField
\ No newline at end of file
diff --git a/frontend/src/components/feature/GlobalSearch/ChannelSearch.tsx b/frontend/src/components/feature/GlobalSearch/ChannelSearch.tsx
index e36e7f76e..d175e409d 100644
--- a/frontend/src/components/feature/GlobalSearch/ChannelSearch.tsx
+++ b/frontend/src/components/feature/GlobalSearch/ChannelSearch.tsx
@@ -11,12 +11,12 @@ import { Flex, Select, TextField, Box, Checkbox, ScrollArea, Text, Badge } from
import { Loader } from '@/components/common/Loader'
interface Props {
onToggleMyChannels: () => void,
- isOpenMyChannels: boolean,
+ isOnlyInMyChannels: boolean,
input: string,
onClose: () => void
}
-export const ChannelSearch = ({ onToggleMyChannels, isOpenMyChannels, input, onClose }: Props) => {
+export const ChannelSearch = ({ onToggleMyChannels, isOnlyInMyChannels, input, onClose }: Props) => {
const [searchText, setSearchText] = useState(input)
const debouncedText = useDebounce(searchText)
@@ -31,10 +31,9 @@ export const ChannelSearch = ({ onToggleMyChannels, isOpenMyChannels, input, onC
const { data, error, isLoading } = useFrappeGetCall<{ message: GetChannelSearchResult[] }>("raven.api.search.get_search_result", {
filter_type: 'Channel',
- doctype: 'Raven Channel',
search_text: debouncedText,
channel_type: channelType === 'any' ? undefined : channelType,
- my_channel_only: isOpenMyChannels,
+ my_channel_only: isOnlyInMyChannels,
}, undefined, {
revalidateOnFocus: false
})
@@ -94,22 +93,19 @@ export const ChannelSearch = ({ onToggleMyChannels, isOpenMyChannels, input, onC
-
-
+
- Only in my channels
+ Only in my channels
+
{data?.message?.length === 0 && }
{data?.message && data.message.length > 0 ?
-
-
+
{data.message.map((channel: GetChannelSearchResult) => {
return (
-
+
- {channel.channel_name}
+ {channel.channel_name}
{channel.is_archived ? Archived : null}
)
- }
- )}
+ })}
: null}
diff --git a/frontend/src/components/feature/GlobalSearch/FileSearch.tsx b/frontend/src/components/feature/GlobalSearch/FileSearch.tsx
index 23ef74882..393d4b89e 100644
--- a/frontend/src/components/feature/GlobalSearch/FileSearch.tsx
+++ b/frontend/src/components/feature/GlobalSearch/FileSearch.tsx
@@ -19,7 +19,7 @@ import { dateOption } from './GlobalSearch'
interface Props {
onToggleMyChannels: () => void,
- isOpenMyChannels: boolean,
+ isOnlyInMyChannels: boolean,
input: string,
fromFilter?: string,
withFilter?: string,
@@ -36,7 +36,7 @@ export interface FileSearchResult {
message_type: string
}
-export const FileSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSaved, isSaved, input, fromFilter, withFilter, inFilter }: Props) => {
+export const FileSearch = ({ onToggleMyChannels, isOnlyInMyChannels, onToggleSaved, isSaved, input, fromFilter, withFilter, inFilter }: Props) => {
const [searchText, setSearchText] = useState(input)
const debouncedText = useDebounce(searchText)
@@ -54,23 +54,20 @@ export const FileSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSaved
const users = useGetUserRecords()
-
const handleChange = (e: React.ChangeEvent) => {
setSearchText(e.target.value)
}
-
const { data, error, isLoading } = useFrappeGetCall<{ message: GetFileSearchResult[] }>("raven.api.search.get_search_result", {
filter_type: 'File',
- doctype: 'Raven Message',
search_text: debouncedText,
- message_type: fileType === 'any' || fileType === undefined ? undefined : fileType === 'image' ? 'Image' : 'File',
- file_type: fileType === 'any' ? undefined : fileType,
- in_channel: channelFilter,
- from_user: userFilter,
+ from_user: userFilter === 'any' ? undefined : userFilter,
+ in_channel: channelFilter === 'any' ? undefined : channelFilter,
saved: isSaved,
date: dateFilter,
- my_channel_only: isOpenMyChannels,
+ file_type: fileType === 'any' ? undefined : fileType,
+ message_type: fileType === 'any' || fileType === undefined ? undefined : fileType === 'image' ? 'Image' : 'File',
+ my_channel_only: isOnlyInMyChannels,
}, undefined, {
revalidateOnFocus: false
})
@@ -215,7 +212,7 @@ export const FileSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSaved
- Only in my channels
+ Only in my channels
@@ -244,7 +241,7 @@ export const FileSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSaved
/>}
- {f.file && {getFileName(f.file)} {f.file}}
+ {f.file && {getFileName(f.file)}}
{users && Shared by {Object.values(users).find((user: UserFields) => user.name === f.owner)?.full_name} on }
diff --git a/frontend/src/components/feature/GlobalSearch/GlobalSearch.tsx b/frontend/src/components/feature/GlobalSearch/GlobalSearch.tsx
index 5ceca6e0a..38f5db99e 100644
--- a/frontend/src/components/feature/GlobalSearch/GlobalSearch.tsx
+++ b/frontend/src/components/feature/GlobalSearch/GlobalSearch.tsx
@@ -19,7 +19,6 @@ interface GlobalSearchModalProps {
export default function GlobalSearch(props: GlobalSearchModalProps) {
-
const { isOpen, onClose } = props
const onOpenChange = (open: boolean) => {
@@ -56,7 +55,7 @@ export default function GlobalSearch(props: GlobalSearchModalProps) {
const GlobalSearchContent = (props: GlobalSearchModalProps) => {
- const [isOpenMyChannels, { toggle: onToggleMyChannels }] = useBoolean()
+ const [isOnlyInMyChannels, { toggle: onToggleMyChannels }] = useBoolean()
const [isSaved, { toggle: onToggleSaved }] = useBoolean()
const { tabIndex, input, fromFilter, withFilter, inFilter, onClose } = props
@@ -71,13 +70,13 @@ const GlobalSearchContent = (props: GlobalSearchModalProps) => {
-
+
-
+
-
+
diff --git a/frontend/src/components/feature/GlobalSearch/MessageSearch.tsx b/frontend/src/components/feature/GlobalSearch/MessageSearch.tsx
index 267a0bb5d..ce9caece6 100644
--- a/frontend/src/components/feature/GlobalSearch/MessageSearch.tsx
+++ b/frontend/src/components/feature/GlobalSearch/MessageSearch.tsx
@@ -2,7 +2,6 @@ import { BiSearch } from 'react-icons/bi'
import { useFrappeGetCall } from 'frappe-react-sdk'
import { useContext, useState, useMemo } from 'react'
import { useDebounce } from '../../../hooks/useDebounce'
-import { GetMessageSearchResult } from '../../../../../types/Search/Search'
import { ErrorBanner } from '../../layout/AlertBanner'
import { EmptyStateForSearch } from '../../layout/EmptyState/EmptyState'
import { useNavigate } from 'react-router-dom'
@@ -14,10 +13,11 @@ import { Box, Checkbox, Flex, Select, TextField, Text, Grid, ScrollArea } from '
import { UserAvatar } from '@/components/common/UserAvatar'
import { dateOption } from './GlobalSearch'
import { Loader } from '@/components/common/Loader'
+import { Message } from '../../../../../types/Messaging/Message'
interface Props {
onToggleMyChannels: () => void,
- isOpenMyChannels: boolean,
+ isOnlyInMyChannels: boolean,
input: string,
fromFilter?: string,
inFilter?: string,
@@ -27,15 +27,7 @@ interface Props {
isSaved: boolean
}
-interface MessageSearchResult {
- channel_id: string
- name: string,
- owner: string,
- creation: string,
- text: string,
-}
-
-export const MessageSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSaved, isSaved, input, fromFilter, inFilter, withFilter, onClose }: Props) => {
+export const MessageSearch = ({ onToggleMyChannels, isOnlyInMyChannels, onToggleSaved, isSaved, input, fromFilter, inFilter, withFilter, onClose }: Props) => {
const [searchText, setSearchText] = useState(input)
const debouncedText = useDebounce(searchText)
@@ -70,23 +62,21 @@ export const MessageSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSa
setSearchText(e.target.value)
}
-
const showResults = useMemo(() => {
- const isChannelFilterApplied = channelFilter !== 'any' && channelFilter !== undefined
+ const isChannelFilterApplied = channelFilter !== undefined
const isUserFilterApplied = userFilter !== 'any' && userFilter !== undefined
const isDateFilterApplied = dateFilter !== 'any' && dateFilter !== undefined
- return (debouncedText.length > 2 || isChannelFilterApplied || isUserFilterApplied || isDateFilterApplied || isOpenMyChannels === true)
- }, [debouncedText, channelFilter, userFilter, isOpenMyChannels, dateFilter])
+ return (debouncedText.length > 2 || isChannelFilterApplied || isUserFilterApplied || isDateFilterApplied || isOnlyInMyChannels === true)
+ }, [debouncedText, channelFilter, userFilter, isOnlyInMyChannels, dateFilter])
- const { data, error, isLoading } = useFrappeGetCall<{ message: GetMessageSearchResult[] }>("raven.api.search.get_search_result", {
+ const { data, error, isLoading } = useFrappeGetCall<{ message: Message[] }>("raven.api.search.get_search_result", {
filter_type: 'Message',
- doctype: 'Raven Message',
search_text: debouncedText,
- in_channel: channelFilter === 'any' ? undefined : channelFilter,
from_user: userFilter === 'any' ? undefined : userFilter,
- date: dateFilter === 'any' ? undefined : dateFilter,
- my_channel_only: isOpenMyChannels,
+ in_channel: channelFilter === 'any' ? undefined : channelFilter,
saved: isSaved,
+ date: dateFilter === 'any' ? undefined : dateFilter,
+ my_channel_only: isOnlyInMyChannels,
}, showResults ? undefined : null, {
revalidateOnFocus: false,
})
@@ -180,7 +170,7 @@ export const MessageSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSa
- Only in my channels
+ Only in my channels
@@ -195,7 +185,7 @@ export const MessageSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSa
{data?.message?.length === 0 && }
{data?.message?.length && data?.message.length > 0 ?
- {data.message.map((message: MessageSearchResult) => {
+ {data.message.map((message: Message) => {
return (
void,
+ message: Message
+}
+
+interface AttachFileToDocumentForm {
+ doctype: string,
+ docname: string,
+}
+
+const AttachFileToDocumentModal = ({ onClose, message }: AttachFileToDocumentModalProps) => {
+
+ const methods = useForm({
+ defaultValues: {
+ }
+ })
+
+ const { handleSubmit, reset, watch } = methods
+
+ const { call } = useContext(FrappeContext) as FrappeConfig
+
+ const [loading, setLoading] = useState(false)
+ const [error, setError] = useState(null)
+
+ const onSubmit = (data: AttachFileToDocumentForm) => {
+ if ((message as FileMessage).file) {
+ setLoading(true)
+ call.get('frappe.client.get_value', {
+ doctype: 'File',
+ filters: {
+ file_url: (message as FileMessage).file,
+ attached_to_doctype: "Raven Message",
+ attached_to_name: message.name,
+ attached_to_field: "file"
+ },
+ fieldname: ['name']
+ }).then((res) => {
+ if (res.message) {
+ call.post('upload_file', {
+ doctype: data.doctype,
+ docname: data.docname,
+ library_file_name: res.message.name,
+ })
+ }
+ }).then(() => {
+ toast.success(`File attached to ${data.doctype} - ${data.docname}`)
+ handleClose()
+ }).catch((err) => {
+ setError(err)
+ toast.error('Failed to attach file')
+ }).finally(() => {
+ setLoading(false)
+ })
+ }
+ }
+
+ const handleClose = () => {
+ reset()
+ onClose()
+ }
+
+ const doctype = watch('doctype')
+
+ const onDoctypeChange = () => {
+ // Reset docname when doctype changes
+ methods.setValue('docname', '')
+ }
+
+ return (
+
+
+
+ )
+}
+
+export default AttachFileToDocumentModal
\ No newline at end of file
diff --git a/frontend/src/components/feature/chat/ChatMessage/MessageActions/AttachFileToDocument.tsx b/frontend/src/components/feature/chat/ChatMessage/MessageActions/AttachFileToDocument.tsx
new file mode 100644
index 000000000..2beea7c08
--- /dev/null
+++ b/frontend/src/components/feature/chat/ChatMessage/MessageActions/AttachFileToDocument.tsx
@@ -0,0 +1,66 @@
+import { Dialog } from '@radix-ui/themes'
+import { useCallback, useState } from 'react'
+import { Message } from '../../../../../../../types/Messaging/Message'
+import { useIsDesktop } from '@/hooks/useMediaQuery'
+import { Drawer, DrawerContent } from '@/components/layout/Drawer'
+import { DIALOG_CONTENT_CLASS } from '@/utils/layout/dialog'
+import clsx from 'clsx'
+import AttachFileToDocumentModal from '../ActionModals/AttachFileToDocumentModal'
+
+type Props = {
+ file: string
+}
+
+export const useAttachFileToDocument = () => {
+
+ const [message, setMessage] = useState(null)
+
+ const onClose = useCallback(() => {
+ setMessage(null)
+ }, [])
+
+ return {
+ message,
+ setAttachDocument: setMessage,
+ isOpen: message !== null,
+ onClose
+ }
+
+}
+
+
+interface AttacFileToDocumentDialogProps {
+ message: Message | null,
+ isOpen: boolean,
+ onClose: () => void
+}
+const AttachFileToDocumentDialog = ({ message, isOpen, onClose }: AttacFileToDocumentDialogProps) => {
+
+ const isDesktop = useIsDesktop()
+
+ if (isDesktop) {
+ return
+
+ {message &&
+
+ }
+
+
+ } else {
+ return
+
+
+
+
+ }
+}
+
+export default AttachFileToDocumentDialog
\ No newline at end of file
diff --git a/frontend/src/components/feature/chat/ChatMessage/MessageActions/MessageActions.tsx b/frontend/src/components/feature/chat/ChatMessage/MessageActions/MessageActions.tsx
index 28d18fc49..806c119db 100644
--- a/frontend/src/components/feature/chat/ChatMessage/MessageActions/MessageActions.tsx
+++ b/frontend/src/components/feature/chat/ChatMessage/MessageActions/MessageActions.tsx
@@ -2,7 +2,7 @@ import { ContextMenu, Flex } from '@radix-ui/themes'
import { FileMessage, Message } from '../../../../../../../types/Messaging/Message'
import { useContext } from 'react'
import { UserContext } from '@/utils/auth/UserProvider'
-import { BiBookmarkMinus, BiBookmarkPlus, BiCopy, BiDownload, BiLink, BiTrash } from 'react-icons/bi'
+import { BiBookmarkMinus, BiBookmarkPlus, BiCopy, BiDownload, BiLink, BiPaperclip, BiTrash } from 'react-icons/bi'
import { FrappeConfig, FrappeContext } from 'frappe-react-sdk'
import { useMessageCopy } from './useMessageCopy'
import { RetractVote } from './RetractVote'
@@ -10,16 +10,18 @@ import { toast } from 'sonner'
import { getErrorMessage } from '@/components/layout/AlertBanner/ErrorBanner'
import { AiOutlineEdit } from 'react-icons/ai'
import { LuForward, LuReply } from 'react-icons/lu'
+import AttachFileToDocument from './AttachFileToDocument'
export interface MessageContextMenuProps {
message?: Message | null,
onDelete: VoidFunction
onEdit: VoidFunction,
onReply: VoidFunction,
- onForward: VoidFunction
+ onForward: VoidFunction,
+ onAttachDocument: VoidFunction
}
-export const MessageContextMenu = ({ message, onDelete, onEdit, onReply, onForward }: MessageContextMenuProps) => {
+export const MessageContextMenu = ({ message, onDelete, onEdit, onReply, onForward, onAttachDocument }: MessageContextMenuProps) => {
const copy = useMessageCopy(message)
const { currentUser } = useContext(UserContext)
@@ -72,6 +74,13 @@ export const MessageContextMenu = ({ message, onDelete, onEdit, onReply, onForwa
+
+
+
+
+ Attach File to Document
+
+
}
diff --git a/frontend/src/components/feature/chat/ChatMessage/MessageItem.tsx b/frontend/src/components/feature/chat/ChatMessage/MessageItem.tsx
index 6dbd65826..f376ba7dd 100644
--- a/frontend/src/components/feature/chat/ChatMessage/MessageItem.tsx
+++ b/frontend/src/components/feature/chat/ChatMessage/MessageItem.tsx
@@ -33,10 +33,11 @@ interface MessageBlockProps {
replyToMessage: (message: Message) => void,
forwardMessage: (message: Message) => void,
onReplyMessageClick: (messageID: string) => void,
+ onAttachDocument: (message: Message) => void,
isHighlighted?: boolean
}
-export const MessageItem = ({ message, setDeleteMessage, isHighlighted, onReplyMessageClick, setEditMessage, replyToMessage, forwardMessage }: MessageBlockProps) => {
+export const MessageItem = ({ message, setDeleteMessage, isHighlighted, onReplyMessageClick, setEditMessage, replyToMessage, forwardMessage, onAttachDocument }: MessageBlockProps) => {
const { name, owner: userID, is_bot_message, bot, creation: timestamp, message_reactions, is_continuation, linked_message, replied_message_details } = message
@@ -58,6 +59,10 @@ export const MessageItem = ({ message, setDeleteMessage, isHighlighted, onReplyM
forwardMessage(message)
}
+ const onAttachToDocument = () => {
+ onAttachDocument(message)
+ }
+
const isDesktop = useIsDesktop()
const [isHovered, setIsHovered] = useState(false)
@@ -170,6 +175,7 @@ export const MessageItem = ({ message, setDeleteMessage, isHighlighted, onReplyM
onEdit={onEdit}
onReply={onReply}
onForward={onForward}
+ onAttachDocument={onAttachToDocument}
/>
}
@@ -182,6 +188,7 @@ export const MessageItem = ({ message, setDeleteMessage, isHighlighted, onReplyM
onEdit={onEdit}
onReply={onReply}
onForward={onForward}
+ onAttachDocument={onAttachToDocument}
/>
diff --git a/frontend/src/components/feature/chat/ChatMessage/Renderers/ImageMessage.tsx b/frontend/src/components/feature/chat/ChatMessage/Renderers/ImageMessage.tsx
index 2405543af..8267ba0ee 100644
--- a/frontend/src/components/feature/chat/ChatMessage/Renderers/ImageMessage.tsx
+++ b/frontend/src/components/feature/chat/ChatMessage/Renderers/ImageMessage.tsx
@@ -1,13 +1,13 @@
import { getFileName } from '@/utils/operations'
import { ImageMessage } from '../../../../../../../types/Messaging/Message'
-import { Box, Button, Dialog, Flex, Link } from '@radix-ui/themes'
-import { Suspense, lazy, memo, useState } from 'react'
+import { Box, Button, Dialog, Flex, IconButton, Link, Text } from '@radix-ui/themes'
+import { Suspense, lazy, memo, useState, useRef, useEffect } from 'react'
import { DIALOG_CONTENT_CLASS } from '@/utils/layout/dialog'
-import { BiDownload } from 'react-icons/bi'
+import { BiDownload, BiChevronDown, BiChevronRight } from 'react-icons/bi'
import { UserFields } from '@/utils/users/UserListProvider'
import { DateMonthAtHourMinuteAmPm } from '@/utils/dateConversions'
import { clsx } from 'clsx'
-import { useIsDesktop, useIsMobile } from '@/hooks/useMediaQuery'
+import { useIsMobile } from '@/hooks/useMediaQuery'
const ImageViewer = lazy(() => import('@/components/common/ImageViewer'))
@@ -25,20 +25,49 @@ export const ImageMessageBlock = memo(({ message, isScrolling = false, user }: I
const isMobile = useIsMobile()
- const height = message.thumbnail_height ? isMobile ? message.thumbnail_height / 2 : message.thumbnail_height : '200'
+ const fileName = getFileName(message.file)
+
+ const [isVisible, setIsVisible] = useState(true)
+
+ const height = isVisible ? (message.thumbnail_height ? isMobile ? message.thumbnail_height / 2 : message.thumbnail_height : '200') : '0'
const width = message.thumbnail_width ? isMobile ? message.thumbnail_width / 2 : message.thumbnail_width : '300'
+ const contentRef = useRef(null);
- const fileName = getFileName(message.file)
+ useEffect(() => {
+ if (isVisible && contentRef.current) {
+ setTimeout(() => {
+ if (contentRef.current) {
+ contentRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });
+ }
+ }, 200);
+ }
+ }, [isVisible]);
return (
- {fileName}
+
+ setIsVisible(prev => !prev)}
+ >
+ {isVisible ? : }
+
+ {fileName}
+
+
setIsOpen(!isScrolling && true)}
style={{
@@ -118,4 +147,4 @@ export const ImageMessageBlock = memo(({ message, isScrolling = false, user }: I
}
)
-})
\ No newline at end of file
+})
diff --git a/frontend/src/components/feature/chat/ChatStream/ChatStream.tsx b/frontend/src/components/feature/chat/ChatStream/ChatStream.tsx
index c3578c1ae..2c68fe3d1 100644
--- a/frontend/src/components/feature/chat/ChatStream/ChatStream.tsx
+++ b/frontend/src/components/feature/chat/ChatStream/ChatStream.tsx
@@ -15,6 +15,7 @@ import { Button } from '@radix-ui/themes'
import { FiArrowDown } from 'react-icons/fi'
import { ErrorBanner } from '@/components/layout/AlertBanner'
import { ForwardMessageDialog, useForwardMessage } from '../ChatMessage/MessageActions/ForwardMessage'
+import AttachFileToDocumentDialog, { useAttachFileToDocument } from '../ChatMessage/MessageActions/AttachFileToDocument'
/**
* Anatomy of a message
@@ -76,6 +77,7 @@ const ChatStream = ({ replyToMessage }: Props) => {
const { setEditMessage, ...editProps } = useEditMessage()
const { setForwardMessage, ...forwardProps } = useForwardMessage()
+ const { setAttachDocument, ...attachDocProps } = useAttachFileToDocument()
const onReplyMessageClick = (messageID: string) => {
scrollToMessage(messageID)
@@ -137,6 +139,7 @@ const ChatStream = ({ replyToMessage }: Props) => {
setEditMessage={setEditMessage}
replyToMessage={replyToMessage}
forwardMessage={setForwardMessage}
+ onAttachDocument={setAttachDocument}
setDeleteMessage={setDeleteMessage} />
@@ -161,6 +164,7 @@ const ChatStream = ({ replyToMessage }: Props) => {
+
)
diff --git a/frontend/src/components/feature/polls/CreatePoll.tsx b/frontend/src/components/feature/polls/CreatePoll.tsx
index a9a8e1e57..54d9bfd67 100644
--- a/frontend/src/components/feature/polls/CreatePoll.tsx
+++ b/frontend/src/components/feature/polls/CreatePoll.tsx
@@ -41,8 +41,6 @@ const CreatePollContent = ({ setIsOpen }: { setIsOpen: (open: boolean) => void }
name: 'options'
})
- const optionPlaceholders = ['Cersei Lannister', 'Jon Snow', 'Daenerys Targaryen', 'Tyrion Lannister', 'Night King', 'Arya Stark', 'Sansa Stark', 'Jaime Lannister', 'Bran Stark', 'The Hound']
-
const handleAddOption = () => {
// limit the number of options to 10
if (fields.length >= 10) {
@@ -104,7 +102,7 @@ const CreatePollContent = ({ setIsOpen }: { setIsOpen: (open: boolean) => void }
+ })} placeholder="Ask a question to gather responses" required />
{errors?.question && {errors.question?.message}}
@@ -114,7 +112,7 @@ const CreatePollContent = ({ setIsOpen }: { setIsOpen: (open: boolean) => void }
{fields && fields.map((field, index) => (
- date)
+ query = query.where(message.creation > date)
if message_type:
- query = query.where(doctype.message_type == message_type)
-
- if file_type and file_type != "[]":
- file_type = json.loads(file_type)
- filters = []
- for type in file_type:
- if type != "image" and type in file_extensions:
- if isinstance(file_extensions[type], list):
- filters.append(
- reduce(
- operator.or_,
- [doctype.file.like("/private/files/%." + ext) for ext in file_extensions[type]],
- )
- )
- else:
- filters.append(doctype.file.like("/private/files/%." + file_extensions[type]))
- if filters:
- if "image" in file_type:
- query = query.where((doctype.message_type == "Image") | (reduce(operator.or_, filters)))
+ query = query.where(message.message_type == message_type)
+
+ if filter_type == "File":
+ if file_type:
+ if file_type == "image":
+ query = query.where(message.message_type == "Image")
+ elif file_type == "pdf":
+ query = query.where(file_doc.file_type == "pdf")
else:
- query = query.where(reduce(operator.or_, filters))
+ # Get the list of extensions for the given file type
+ extensions = file_extensions.get(file_type)
+ if extensions:
+ query = query.where((file_doc.file_type).isin(extensions))
+ else:
+ query = query.where(message.message_type.isin(["Image", "File"]))
if channel_type:
- query = query.where(doctype.type == channel_type)
+ query = query.where(channel.type == channel_type)
- if my_channel_only:
+ if my_channel_only == "true":
query = query.where((channel.type == "Open") | (channel_member.user_id == frappe.session.user))
if saved == "true":
query = query.where(message._liked_by.like(f"%{frappe.session.user}%"))
- return (
- query.orderby(doctype[sort_field], order=Order[sort_order])
- .limit(page_length)
- .offset(start_after)
- .run(as_dict=True)
- )
+ return query.limit(20).offset(0).run(as_dict=True)
diff --git a/raven/package.json b/raven/package.json
index 9b6cab90d..6c662cf2b 100644
--- a/raven/package.json
+++ b/raven/package.json
@@ -1,6 +1,6 @@
{
"name": "raven-app",
- "version": "1.6.7",
+ "version": "1.6.8",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/types/Search/Search.ts b/types/Search/Search.ts
index c2e74654b..f6d8e6d6a 100644
--- a/types/Search/Search.ts
+++ b/types/Search/Search.ts
@@ -7,14 +7,6 @@ export interface GetFileSearchResult {
owner: string
}
-export interface GetMessageSearchResult {
- channel_id: string
- creation: string
- text: string
- name: string
- owner: string
-}
-
export interface GetChannelSearchResult {
type: "Private" | "Public" | "Open"
name: string
diff --git a/yarn.lock b/yarn.lock
index f0e021380..efbefe55f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2379,10 +2379,10 @@
resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-2.0.2.tgz#f05eccdc69e3a65e7d524b52548f567904a11a1a"
integrity sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==
-"@remix-run/router@1.19.0":
- version "1.19.0"
- resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.0.tgz#745dbffbce67f05386d57ca22c51dfd85c979593"
- integrity sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==
+"@remix-run/router@1.19.1":
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.1.tgz#984771bfd1de2715f42394c87fb716c1349e014f"
+ integrity sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==
"@rollup/plugin-babel@^5.2.0":
version "5.3.1"
@@ -2537,181 +2537,181 @@
"@svgr/hast-util-to-babel-ast" "8.0.0"
svg-parser "^2.0.4"
-"@tiptap/core@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.5.9.tgz#1deb0b7c748e24ec32613263e0af8d55a3b3c2ca"
- integrity sha512-PPUR+0tbr+wX2G8RG4FEps4qhbnAPEeXK1FUtirLXSRh8vm+TDgafu3sms7wBc4fAyw9zTO/KNNZ90GBe04guA==
+"@tiptap/core@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.6.4.tgz#e01d560e233a3b49effbd112ca6c03538dd35717"
+ integrity sha512-lv+JyBI+5C6C7BMLYg2bloB00HvAZkcvgO3CzmFia28Vtt1P9yhS44elvBemhUf7IP7Hu12FUzDWY+2GQqiqkw==
-"@tiptap/extension-blockquote@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.5.9.tgz#d873a8496fcf572c69aaac2a7a341e035fdbae22"
- integrity sha512-LhGyigmd/v1OjYPeoVK8UvFHbH6ffh175ZuNvseZY4PsBd7kZhrSUiuMG8xYdNX8FxamsxAzr2YpsYnOzu3W7A==
+"@tiptap/extension-blockquote@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.6.4.tgz#d10a8cf520a0e460a60e219973556d79d37927a8"
+ integrity sha512-BzeQ52qHL4AEryPqgvPNRJ2siSTfSi2s3k7hVC29QYUTOidLSSDWVihn7lzJoBnqDMAOYj7yUhnEUEdjvOFGqw==
-"@tiptap/extension-bold@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.5.9.tgz#00c9b7b5211048b1e1c5d67e355935b9c92e3532"
- integrity sha512-XUJdzFb31t0+bwiRquJf0btBpqOB3axQNHTKM9XADuL4S+Z6OBPj0I5rYINeElw/Q7muvdWrHWHh/ovNJA1/5A==
+"@tiptap/extension-bold@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.6.4.tgz#10d143336879affe134caeb54c75d0c1392de56e"
+ integrity sha512-DIKUiO2aqO9D3dAQngBacWk/vYwDY13+q3t5dlawRTCIHxgV571vGb+YbcLswbWPQjOziIBc5QgwUVZLjA8OkA==
-"@tiptap/extension-bubble-menu@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.5.9.tgz#d600bbcaa1d98a99f32b3b8b8c3d35752161200c"
- integrity sha512-NddZ8Qn5dgPPa1W4yk0jdhF4tDBh0FwzBpbnDu2Xz/0TUHrA36ugB2CvR5xS1we4zUKckgpVqOqgdelrmqqFVg==
+"@tiptap/extension-bubble-menu@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.4.tgz#34c0da755aceee1c67c35fb6f18a16ba786bf163"
+ integrity sha512-rtqV6d4qfoTBcXdiYYMpFi7cRhraVaLiGOrGCsHX0mNr4imDbwxVsge279X7IzyGhTvn+kprTTQG57s67Te5aA==
dependencies:
tippy.js "^6.3.7"
-"@tiptap/extension-bullet-list@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.5.9.tgz#2852aba9a1dacbf2c673cda6a4994b1f3c33cd5c"
- integrity sha512-hJTv1x4omFgaID4LMRT5tOZb/VKmi8Kc6jsf4JNq4Grxd2sANmr9qpmKtBZvviK+XD5PpTXHvL+1c8C1SQtuHQ==
-
-"@tiptap/extension-code-block-lowlight@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.5.9.tgz#ccd6569422d98b11813df3e0dbd09b1dcf957def"
- integrity sha512-taIXxXQ/Lka9CegHFHQS+nx6cX9i9Ws63ZFMPbrXLMSJRhXk8+m4UAoGZQJH9CGGb5/Rv0p3Z8I59AGiyUHLEw==
-
-"@tiptap/extension-code-block@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.5.9.tgz#8cd99515b286fc62ad1215a411aea5da9a7d9701"
- integrity sha512-+MUwp0VFFv2aFiZ/qN6q10vfIc6VhLoFFpfuETX10eIRks0Xuj2nGiqCDj7ca0/M44bRg2VvW8+tg/ZEHFNl9g==
-
-"@tiptap/extension-code@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.5.9.tgz#93c4433eca8b2aa239ea7f408b90f152b7fc4603"
- integrity sha512-Q1PL3DUXiEe5eYUwOug1haRjSaB0doAKwx7KFVI+kSGbDwCV6BdkKAeYf3us/O2pMP9D0im8RWX4dbSnatgwBA==
-
-"@tiptap/extension-document@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.5.9.tgz#13a22b2d3bdc1463844872b1f1c926633df431a8"
- integrity sha512-VdNZYDyCzC3W430UdeRXR9IZzPeODSbi5Xz/JEdV93THVp8AC9CrZR7/qjqdBTgbTB54VP8Yr6bKfCoIAF0BeQ==
-
-"@tiptap/extension-dropcursor@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.5.9.tgz#648f683f929056a0526620f530f73e6b052c1481"
- integrity sha512-nEOb37UryG6bsU9JAs/HojE6Jg43LupNTAMISbnuB1CPAeAqNsFMwORd9eEPkyEwnQT7MkhsMOSJM44GoPGIFA==
-
-"@tiptap/extension-floating-menu@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.5.9.tgz#b970905f3c1af49a916dcbd477a4302086187974"
- integrity sha512-MWJIQQT6e5MgqHny8neeH2Dx926nVPF7sv4p84nX4E0dnkRbEYUP8mCsWYhSUvxxIif6e+yY+4654f2Q9qTx1w==
+"@tiptap/extension-bullet-list@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.4.tgz#92bf05100b72d491ff1db21b752a42f34fe66878"
+ integrity sha512-SsEqWNvbcLjgPYQXWT+gm8Mdtd6SnM9kr5xdfOvfe9W1RCYi7U7SQjaYGLGQXuy3E8NDugNiG+ss2POMj4RaUQ==
+
+"@tiptap/extension-code-block-lowlight@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.6.4.tgz#1ca7d361999d92ac6b5be46a19ae10fe15e2e849"
+ integrity sha512-MSgRoVJdztZ4y+1ffBw3xcUp7R1/p8zuNAHalSPjv3Lm+iNI+QeBoPRE1B4sC1K0NujZqb0F/LYjdXVGSSng1A==
+
+"@tiptap/extension-code-block@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.6.4.tgz#2b2941e7bfc8a5ccf909ae6e384e8ba090b72311"
+ integrity sha512-dnZYiKVNdHfqZqYgoCElLk8ETLlV3Q0rw3IVDKDTwrhanSSooGfkVts/Gn/jtJUIulRdu8lH/0qZCgM4ihznfw==
+
+"@tiptap/extension-code@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.6.4.tgz#5ab8561aecf47576905b6acb8038fc246e836d65"
+ integrity sha512-qCt/CRhV+s1E9XVCDxGgFwyQRjcLsqBuY5UTwH3Zp8MIBniyLyJDD0Rv9DgvVqalzRC8RoRxVey9Al3YhYNqsw==
+
+"@tiptap/extension-document@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.6.4.tgz#cb0a9c0591ce3e52b12f9cdf7cd2153577f37018"
+ integrity sha512-fEQzou6J/w7GWiMqxxiwX2TEB6hgjBsImkHCxU05a4IOnIkzC8C9pV+NWa8u1LGvbERmVPBQqWYJG6phDhtYkg==
+
+"@tiptap/extension-dropcursor@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.6.4.tgz#354f25c87da1fe4574d4b2d1251a56a655bc93b4"
+ integrity sha512-maTQi2R63i1S3CCJTjyuHMpk0BvnFuUxq7krZ3LBCOJgUeS78PF/XPirbbR7s2jOVsHK77LYsgdoS3ApDu1zdQ==
+
+"@tiptap/extension-floating-menu@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.4.tgz#bc5d001abc9d713c154230b1e42163216bccdf74"
+ integrity sha512-oF5utOabYQ/a0Mpt3RS21NKtz2Kd8jnwHOw+4nMgis8Crb0eO5gizWqWMyktLU7oVFU/v8CKTqMBJOAmF4a+eA==
dependencies:
tippy.js "^6.3.7"
-"@tiptap/extension-gapcursor@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.5.9.tgz#68b9e227cd7876aac353a8ac029995b4c092a763"
- integrity sha512-yW7V2ebezsa7mWEDWCg4A1ZGsmSV5bEHKse9wzHCDkb7TutSVhLZxGo72U6hNN9PnAksv+FJQk03NuZNYvNyRQ==
-
-"@tiptap/extension-hard-break@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.5.9.tgz#4f38f06dbeb5fb3e58ff7fc0c48b9db9c4ee4ecd"
- integrity sha512-8hQ63SgZRG4BqHOeSfeaowG2eMr2beced018pOGbpHbE3XSYoISkMVuFz4Z8UEVR3W9dTbKo4wxNufSTducocQ==
-
-"@tiptap/extension-heading@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.5.9.tgz#b9ec3b3b48dea939606d06eff56c4bdc7bed0662"
- integrity sha512-HHowAlGUbFn1qvmY02ydM7qiPPMTGhAJn2A46enDRjNHW5UoqeMfkMpTEYaioOexyguRFSfDT3gpK68IHkQORQ==
-
-"@tiptap/extension-highlight@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.5.9.tgz#290426538abcbb2299809d3e1274ba5af1ba9f68"
- integrity sha512-tRaSIIbCI7aBlvlmgUgBI5lVBqnMy49lc++UVAx1Pjey1j2KW031vUyvZfEwf6wk8Y7W3kVSkN0mW9IYCcOAOQ==
-
-"@tiptap/extension-history@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.5.9.tgz#f48f64ff95407f0ce27bcdd020762e49d0dd60d1"
- integrity sha512-hGPtJgoZSwnVVqi/xipC2ET/9X2G2UI/Y+M3IYV1ZlM0tCYsv4spNi3uXlZqnXRwYcBXLk5u6e/dmsy5QFbL8g==
-
-"@tiptap/extension-horizontal-rule@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.5.9.tgz#9f91a17b80700670e53e241fcee40365c57aa994"
- integrity sha512-/ES5NdxCndBmZAgIXSpCJH8YzENcpxR0S8w34coSWyv+iW0Sq7rW/mksQw8ZIVsj8a7ntpoY5OoRFpSlqcvyGw==
-
-"@tiptap/extension-image@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.5.9.tgz#2f2be205d889f6688ef85c76071d2199baab03e4"
- integrity sha512-v4WZISCvbriac6HE6v7kYYY7KX+v9rJaIZC3gbYGtqnBWfaAwZiVVu8Z03xSrqYhoc+KHuI+oQ4VubcvZ/i7OQ==
-
-"@tiptap/extension-italic@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.5.9.tgz#8ea0e19e650f0f1d6fc30425ec28291511143dda"
- integrity sha512-Bw+P139L4cy+B56zpUiRjP8BZSaAUl3JFMnr/FO+FG55QhCxFMXIc6XrC3vslNy5ef3B3zv4gCttS3ee8ByMiw==
-
-"@tiptap/extension-link@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.5.9.tgz#6cb323d36b82700963ad2b9d189a7d07c81c7d6e"
- integrity sha512-7v9yRsX7NuiY8DPslIsPIlFqcD8aGBMLqfEGXltJDvuG6kykdr+khEZeWcJ8ihHIL4yWR3/MAgeT2W72Z/nxiQ==
+"@tiptap/extension-gapcursor@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.6.4.tgz#19221791b4726968ff4002a262a70bd2ba200ebc"
+ integrity sha512-g5fa1RLNpFZoiE5PIvG/pFIz88CvtiWkBUp5OOYrPxNzByazcbBsBI8Sa5ptDVrbDqerayUZYAVFPhXnq7MSlQ==
+
+"@tiptap/extension-hard-break@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.6.4.tgz#1f592e6ac94118c5e455b274a1072d010917b33e"
+ integrity sha512-kBGGSBtp9oQlRBH7PfRvhbrauEphiJEuFUP9n/amAbrrNSabwmvBgyMl6wFXgMdfHF6CSv2YDgndE1sk8SjPSg==
+
+"@tiptap/extension-heading@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.6.4.tgz#d1d5442c71f5a3c466c93289d021c0eecd1f7f6f"
+ integrity sha512-GHwDguzRXRrB5htGPx6T0f0uN9RPAkjbjrl28T7LFXX5Lb2XO+Esr1l4LNsTU49H4wR9nL/89ZjEcd36BUWkog==
+
+"@tiptap/extension-highlight@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.6.4.tgz#67012fde696a0b47a41006dc48a8d1a3ce75c507"
+ integrity sha512-PAxZyRKEBt3LB2/s2mBLoPmKRzomIqq2pI+WLqf2Xdkn1UuVPOQEHj9XGvyIG5E6lbMa6CpJSfRDDzN0W4OMMw==
+
+"@tiptap/extension-history@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.6.4.tgz#bc9271a401736d1a2066a563c2a143decd1a08d3"
+ integrity sha512-Hr3SrvMsyDHKcsF4u3QPdY/NBYG9V0g5pPmZs/tdysXot3NUdkEYowjs9K9o5osKom364KjxQS0c9mOjyeKu1g==
+
+"@tiptap/extension-horizontal-rule@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.6.4.tgz#ed5a7ae83ab6fe4e5683b8b2f8eb81eaf294b2dc"
+ integrity sha512-lL29Hxsj1qFwRqtg41JlBOK/hmN+qnwIWvNCyZpKEVHs7d0iELj2REB/7R1KKAAdsvYo7pJrgqwBd1Ph6xRLpw==
+
+"@tiptap/extension-image@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.6.4.tgz#fa2e7a8d4050a4bade76cef24e20ca45f38fc638"
+ integrity sha512-uc2JA1qnZ6X33di3RTIDfE9oaJeWKyE6aJdWDt5OXPOW60kPKO8PIxy9n11O8v0oVb/+bZ9cnPu9UpSnJVaUCg==
+
+"@tiptap/extension-italic@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.6.4.tgz#38a4056f9d3268879f32b1680d94d380f978ed78"
+ integrity sha512-XG/zaKVuorKr1vGEWEgLQTnQwOpNn/JyGxO7oC7wfYx5eYpbbCtMTEMvuqNvkm7kpvVAUx3ugi/D8DWyWZEtYg==
+
+"@tiptap/extension-link@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.6.4.tgz#dabae0d6301e4d016671d0f72d0159626c332f71"
+ integrity sha512-Uwx9J0lfNZFYYGDDoomTB35CzEx9RDBzoIoKXjLWU+RXxAZzwgx+8W3F6otnyjrm5AcNf67JLzcvCFFN7FtrQQ==
dependencies:
linkifyjs "^4.1.0"
-"@tiptap/extension-list-item@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.5.9.tgz#0805b7216371b8b54649abe5ab29bd2c2155f05f"
- integrity sha512-d9Eo+vBz74SMxP0r25aqiErV256C+lGz+VWMjOoqJa6xWLM1keYy12JtGQWJi8UDVZrDskJKCHq81A0uLt27WA==
-
-"@tiptap/extension-mention@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.5.9.tgz#d6e56b0311767a198a5d4c396b7d34b1e3bad7b6"
- integrity sha512-O8LhClSkX5kUAyShrf2euN4oOusr5/niur7zvvbB7QZxn35kf+NtSM0i4nbyJQDMa7DnrFuQzkN5M/PCvMtr2w==
-
-"@tiptap/extension-ordered-list@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.5.9.tgz#44aab6ec3e19429a8e3b73e42c04156f2b0bc730"
- integrity sha512-9MsWpvVvzILuEOd/GdroF7RI7uDuE1M6at9rzsaVGvCPVHZBvu1XR3MSVK5OdiJbbJuPGttlzEFLaN/rQdCGFg==
-
-"@tiptap/extension-paragraph@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.5.9.tgz#05210b6e7a9940b1acc09fdd4ec769fc6406da2b"
- integrity sha512-HDXGiHTJ/V85dbDMjcFj4XfqyTQZqry6V21ucMzgBZYX60X3gIn7VpQTQnnRjvULSgtfOASSJP6BELc5TyiK0w==
-
-"@tiptap/extension-placeholder@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.5.9.tgz#c9bebc7e2bba2b0321e360d8a7a358152ffc9137"
- integrity sha512-ytKmlSiebtCBXoMPE2cup48DR0rQiekXhLKLkNyt7m8tSXkaRO4eDaFqCqPEXLeQXWdhwWEoPM6Cejaaa3ztkA==
-
-"@tiptap/extension-strike@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.5.9.tgz#f2d54161d24ee37dc8a41b5077c553048ed69f99"
- integrity sha512-QezkOZpczpl09S8lp5JL7sRkwREoPY16Y/lTvBcFKm3TZbVzYZZ/KwS0zpwK9HXTfXr8os4L9AGjQf0tHonX+w==
-
-"@tiptap/extension-table-cell@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.5.9.tgz#dffcd23cb11d3ca1239c7290297c9caf0d3b8434"
- integrity sha512-83zg+d8iY7FLZDC2qJVvHFEIwqB9e/zGPyfRMglYH7YxHeJSycG2K969DQhwkSq+z0PhHEO2XHDcD9aFnXRQNQ==
-
-"@tiptap/extension-table-header@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.5.9.tgz#405da76163ec4899b1d6b81f2fbbdb7c0f71bf59"
- integrity sha512-+FKfxpEO8RnsHUhcWFeSpsI3ZRaDtgcX2c4kBBXZGJBMWHxw71VK9gkRM+JtxCl70hNyZR13qpOw1RmByf2kdw==
-
-"@tiptap/extension-table-row@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.5.9.tgz#62e5e329b38daf6142b39d7c17de045dfc6918be"
- integrity sha512-VPmkzraT9m7g2/88qsTF9EQdFvkcwhvOD+WWZTflN92LMsRHddJt3peJ/fpuf0QKnwwn5qIB3fXWja4VcZe3wQ==
-
-"@tiptap/extension-table@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.5.9.tgz#a7b80a668a683c3abe59725812091123b2c12b88"
- integrity sha512-kLZdYBO0Ug4sNjzyDfa3W29qL4HdRK/IaMxcmcEbyKSt42qiMJlIelbGzVENzxe9AbcNTeiWje70Nhk4dbb8Ag==
-
-"@tiptap/extension-text@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.5.9.tgz#a5bef0b9c5324511dbc2804a3a5ac8b9b5d5dc4c"
- integrity sha512-W0pfiQUPsMkwaV5Y/wKW4cFsyXAIkyOFt7uN5u6LrZ/iW9KZ/IsDODPJDikWp0aeQnXzT9NNQULTpCjbHzzS6g==
-
-"@tiptap/extension-typography@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-typography/-/extension-typography-2.5.9.tgz#bd6a68889ab8479be593d31a930f98ea575f4f08"
- integrity sha512-S+r4m3J0eK4qOszUcCU7NeOEUMuOwj0pGO4YYbIJs3AjWOyLrXD04grb64u8sCGcM8hiibQ7uZKSLJOmLjuoEA==
-
-"@tiptap/extension-underline@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.5.9.tgz#dac5288eb486fe0c90e0e4c4f9d3f3f0181f03f4"
- integrity sha512-1gFBLzzphwJHsPLwUl9xosErEmtG2c2Sa2ajyS4uRjfl9X7+Li2O2WelZLHZGgTHWliE6ptA3m1MyXppHoitbg==
-
-"@tiptap/pm@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.5.9.tgz#f97889210374993a1ce78e9ecb23461d0e4644bf"
- integrity sha512-YSUaEQVtvZnGzGjif2Tl2o9utE+6tR2Djhz0EqFUcAUEVhOMk7UYUO+r/aPfcCRraIoKKuDQzyCpjKmJicjCUA==
+"@tiptap/extension-list-item@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.6.4.tgz#496a3f1e217b3bcadf6118f24aacb365c62dc9db"
+ integrity sha512-NLP0nshX8eCZMLospdCsUApUQHPL1+T/MIi/Hhr0aNeaAg7KwBNH8/rFPuxPNs4BQkHOCuYq4Fm+klkebkFYJA==
+
+"@tiptap/extension-mention@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.6.4.tgz#162bef2be05917302338887f84921f9f4642bcab"
+ integrity sha512-u+9Raq0+Kfu2XEhmZX/RieAWH9QWuJ6QLNMnrHWrlllwG1silXdSc+nppa6bT3sDhEEohyl4SBOpDVZarqAtMQ==
+
+"@tiptap/extension-ordered-list@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.4.tgz#2bfc22acdfe6f2c18a8e93c18393e04792c238b2"
+ integrity sha512-ecAEFpRKZc+b3f54EGvaRp7hsVza2i1nRhxHoPElqVR5DiCCSuSgAPCsKhUUT1rKweK9h56HiC4xswAyFrU5Ag==
+
+"@tiptap/extension-paragraph@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.6.4.tgz#3f713aac2b53933cf87d6383c908090fdf15a3f6"
+ integrity sha512-JVlvhZPzjz0Q+29KmnrmLr3A3SvAMfKOZxbZZVnzee6vtI6rqjdYGBOtyyyWwrAliNQB6GkHiKmT3GxH76dz7A==
+
+"@tiptap/extension-placeholder@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.6.4.tgz#ca55289e7bdfed513254900b72f0975f223731b4"
+ integrity sha512-2F6gmVDtXfXRU6G4aE+vSZYtkwuaJLZE2r4B8/t83ei1z+elnNT2SWD3Dy5K3zDXhBupvqcMFKgjMnIlUXG0QA==
+
+"@tiptap/extension-strike@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.6.4.tgz#aeb6253a996e74a1cb245b2688019a230b446d2e"
+ integrity sha512-EV4hEA5qnRtKViaLKcucFvXP9xEUJOFgpFeOrp2xIgSXJLSmutkaDfz7nxJ2RLzwwYvPfWUL7ay97JSCzSuaIA==
+
+"@tiptap/extension-table-cell@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.6.4.tgz#9e8696ba131ea1c042a35e36b033819f05046335"
+ integrity sha512-nI5mSg8LTgwiJr/SY/cQb/FFlaiiANu6kMHHx4Wc1YHcGLw+2XybKNN4d6RzCBbJF2VvjrtsvVOrRJIeCNvtNg==
+
+"@tiptap/extension-table-header@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.6.4.tgz#ee6ff8c85978ffc3e6c8254433b1ed3dd996d53b"
+ integrity sha512-/N6gav9qBo4Ne43WDcqrXvlw24BOzD4BoT8mFsfukBOlvYp2r7Ug6Vapxg1INyr+U/X0ph+SPfDmVClXn/hh6Q==
+
+"@tiptap/extension-table-row@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.6.4.tgz#8ded685dea96e686c965189bde31af5cc80ae5b5"
+ integrity sha512-ySTmLfAdW8yA+JXKkXPRGHrauVHZSkh1SxbATMbFyWJ6GxciI95VC4ucW/rNN6Ix9UdwXVrZbIIOkd+MARdYPQ==
+
+"@tiptap/extension-table@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.6.4.tgz#77434795801ac0a8c8dd1c5c0f3a22962eb7b390"
+ integrity sha512-rQm1HWUVh7Idw/kGfIbh/FP+oKrZ3ISyxOflRaNXAB/H9fCfSejgZf7WZH+RHCnWvGfNCD24auE5E1wS+Eqs+Q==
+
+"@tiptap/extension-text@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.6.4.tgz#b03c234dbaa69d1e9bec3f50e7a80f51c882e94d"
+ integrity sha512-QfspuCTTpmFrSLbDs2z/0W7GLaoNanwj4OCKPSPz5XcraZJgFLsWAqZxZE4aLgZbJH2hcGWMe5ZHmvLf5dJogw==
+
+"@tiptap/extension-typography@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-typography/-/extension-typography-2.6.4.tgz#8e0f5119b1ffa36101f9b611fb9bb5f39e55b9aa"
+ integrity sha512-yp7G+aLomomx7XlLRoa22VreLyS8JZyAlMoEPMtp6Cn53qdI/yssbIbahnt7J5xFKx5qIeFDhbcDAX/mWcv2bg==
+
+"@tiptap/extension-underline@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.6.4.tgz#b16135dea2d45dbed8bc5b3cabab33781a878173"
+ integrity sha512-1MSCmX4L2l8DKqIJ6BLMp/XUzWK1lW+BI1+rLBd4N/kU8CdF5UqjWFijsu3UBCibV/fliyAzCoLoKO/lHRUUcA==
+
+"@tiptap/pm@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.6.4.tgz#19e467cf66e98cf2342f25ca5d33af5808a2293f"
+ integrity sha512-k/AyigUioZVxFTcF7kWcUh5xeOV0bdGzHz+wmtP33md2jo8SJP29yEZ4Kshvk0IcFnVFEDrsfKiGhLRWpKx+YQ==
dependencies:
prosemirror-changeset "^2.2.1"
prosemirror-collab "^1.3.1"
@@ -2732,45 +2732,46 @@
prosemirror-transform "^1.9.0"
prosemirror-view "^1.33.9"
-"@tiptap/react@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.5.9.tgz#43f94a2bf1d4c55e82d97ef9d1c97ba20206f7f0"
- integrity sha512-NZYAslIb79oxIOFHx9T9ey5oX0aJ1uRbtT2vvrvvyRaO6fKWgAwMYN92bOu5/f2oUVGUp6l7wkYZGdjz/XP5bA==
+"@tiptap/react@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.6.4.tgz#b582f1ffaf7298404deb625521e59fe7d46ad0c8"
+ integrity sha512-6P0CAMakY/zBDq7HrGvM2Ku4kcoEvbZI0uEAfG36fl4wQ3JEnKT25H8NtVBmVxcrPIgtHPalHkalV4IMNu8dUw==
dependencies:
- "@tiptap/extension-bubble-menu" "^2.5.9"
- "@tiptap/extension-floating-menu" "^2.5.9"
+ "@tiptap/extension-bubble-menu" "^2.6.4"
+ "@tiptap/extension-floating-menu" "^2.6.4"
"@types/use-sync-external-store" "^0.0.6"
use-sync-external-store "^1.2.2"
-"@tiptap/starter-kit@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.5.9.tgz#fec0955b873ebcbdeefdfaab0e9254011df3f41b"
- integrity sha512-nZ4V+vRayomjxUsajFMHv1iJ5SiSaEA65LAXze/CzyZXGMXfL2OLzY7wJoaVJ4BgwINuO0dOSAtpNDN6jI+6mQ==
- dependencies:
- "@tiptap/core" "^2.5.9"
- "@tiptap/extension-blockquote" "^2.5.9"
- "@tiptap/extension-bold" "^2.5.9"
- "@tiptap/extension-bullet-list" "^2.5.9"
- "@tiptap/extension-code" "^2.5.9"
- "@tiptap/extension-code-block" "^2.5.9"
- "@tiptap/extension-document" "^2.5.9"
- "@tiptap/extension-dropcursor" "^2.5.9"
- "@tiptap/extension-gapcursor" "^2.5.9"
- "@tiptap/extension-hard-break" "^2.5.9"
- "@tiptap/extension-heading" "^2.5.9"
- "@tiptap/extension-history" "^2.5.9"
- "@tiptap/extension-horizontal-rule" "^2.5.9"
- "@tiptap/extension-italic" "^2.5.9"
- "@tiptap/extension-list-item" "^2.5.9"
- "@tiptap/extension-ordered-list" "^2.5.9"
- "@tiptap/extension-paragraph" "^2.5.9"
- "@tiptap/extension-strike" "^2.5.9"
- "@tiptap/extension-text" "^2.5.9"
-
-"@tiptap/suggestion@^2.5.9":
- version "2.5.9"
- resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.5.9.tgz#af54bd41c2146454619fcadf15129a499bb6d05d"
- integrity sha512-s7UU0j2IRreVXrMMxsFvsNjJnZeTS1SAwsjLkN2YX+/ZQss92s0BLP3HsxEr2oFHlFye8E0qR9xjWZ4vSc9asw==
+"@tiptap/starter-kit@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.6.4.tgz#856de31675703a3a8ea784b87e4f8a3f7519d936"
+ integrity sha512-uvGXOI6h+AjyyOgJOmBSFrDR7xJ841+gtwzGbAolVM2a7LCEkocyHjLBWFYVfQu2vvMIqA63+0+yAsw6ghwUgw==
+ dependencies:
+ "@tiptap/core" "^2.6.4"
+ "@tiptap/extension-blockquote" "^2.6.4"
+ "@tiptap/extension-bold" "^2.6.4"
+ "@tiptap/extension-bullet-list" "^2.6.4"
+ "@tiptap/extension-code" "^2.6.4"
+ "@tiptap/extension-code-block" "^2.6.4"
+ "@tiptap/extension-document" "^2.6.4"
+ "@tiptap/extension-dropcursor" "^2.6.4"
+ "@tiptap/extension-gapcursor" "^2.6.4"
+ "@tiptap/extension-hard-break" "^2.6.4"
+ "@tiptap/extension-heading" "^2.6.4"
+ "@tiptap/extension-history" "^2.6.4"
+ "@tiptap/extension-horizontal-rule" "^2.6.4"
+ "@tiptap/extension-italic" "^2.6.4"
+ "@tiptap/extension-list-item" "^2.6.4"
+ "@tiptap/extension-ordered-list" "^2.6.4"
+ "@tiptap/extension-paragraph" "^2.6.4"
+ "@tiptap/extension-strike" "^2.6.4"
+ "@tiptap/extension-text" "^2.6.4"
+ "@tiptap/pm" "^2.6.4"
+
+"@tiptap/suggestion@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.6.4.tgz#47019e5e628365e3c4eca6c00494c73cbdc963dd"
+ integrity sha512-t4GOEcsVSCwTlugHjZdK5Swe6or/tBej5E3ZWYOFHxkNLDod76Q7hvAeBPYrLeDo6m3sPnxrazfdqSeVclk72g==
"@types/babel__core@^7.20.5":
version "7.20.5"
@@ -3006,16 +3007,16 @@ attr-accept@^2.2.2:
resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b"
integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==
-autoprefixer@^10.4.17:
- version "10.4.19"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f"
- integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==
+autoprefixer@^10.4.20:
+ version "10.4.20"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b"
+ integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==
dependencies:
- browserslist "^4.23.0"
- caniuse-lite "^1.0.30001599"
+ browserslist "^4.23.3"
+ caniuse-lite "^1.0.30001646"
fraction.js "^4.3.7"
normalize-range "^0.1.2"
- picocolors "^1.0.0"
+ picocolors "^1.0.1"
postcss-value-parser "^4.2.0"
available-typed-arrays@^1.0.7:
@@ -3025,10 +3026,10 @@ available-typed-arrays@^1.0.7:
dependencies:
possible-typed-array-names "^1.0.0"
-axios@^1.6.7:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.3.tgz#a1125f2faf702bc8e8f2104ec3a76fab40257d85"
- integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==
+axios@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2"
+ integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==
dependencies:
follow-redirects "^1.15.6"
form-data "^4.0.0"
@@ -3090,7 +3091,7 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.23.0, browserslist@^4.23.1:
+browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3:
version "4.23.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800"
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
@@ -3141,7 +3142,7 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001646:
+caniuse-lite@^1.0.30001646:
version "1.0.30001646"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz#d472f2882259ba032dd73ee069ff01bfd059b25d"
integrity sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==
@@ -3489,10 +3490,10 @@ electron-to-chromium@^1.5.4:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz#cd477c830dd6fca41fbd5465c1ff6ce08ac22343"
integrity sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==
-emoji-picker-element@^1.22.2:
- version "1.22.2"
- resolved "https://registry.yarnpkg.com/emoji-picker-element/-/emoji-picker-element-1.22.2.tgz#97db6a4bbc85c4f694013ba5921bc1ab2effdb83"
- integrity sha512-josHZStpNbbkUvLMXpJoiOtVTJTutni9bv2c1dg7BLvLUd9rXVmfxlmIN6tJPJzh7HhLY70xU7xZ7wW87Lh2yw==
+emoji-picker-element@^1.22.3:
+ version "1.22.3"
+ resolved "https://registry.yarnpkg.com/emoji-picker-element/-/emoji-picker-element-1.22.3.tgz#45a0b975b89c72e99691469b020c047cca850d8c"
+ integrity sha512-3K6vBC2WmRf3y6MtCHY+wCBqp8H1uiCtWfT2dcZ1vAfcGk2FK4tx/vKzp+vpQ0Fz9PCiDcWdJ4NBDmQ612fKZA==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -3812,19 +3813,19 @@ fraction.js@^4.3.7:
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
-frappe-js-sdk@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.5.0.tgz#9fb161edb872136058c51adfba9f2c2927f81d2a"
- integrity sha512-KzBTvncqhBImIyIRWzZ0JcvYwEBPvGfCvvZ9JTtHE5Zn/YJtbN4GfXDG3x3AGNTVtwdU66zC8ADu20j/tBTXmQ==
+frappe-js-sdk@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.6.0.tgz#4ca25cabb21fefe0cd9b4e3b3176085643f53a92"
+ integrity sha512-Snl/Mw4LtClbpjEj6a+PW0g5CqP+5DU5RV22vdUoL5ENEyLCei/b2p9Jl/6LdNEplVXBHVilDB/0cM5U9VzOuQ==
dependencies:
- axios "^1.6.7"
+ axios "^1.7.4"
-frappe-react-sdk@^1.7.1:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.7.1.tgz#91ca070df811fd2a96b9b951022efe1425e90549"
- integrity sha512-lo0EAELC0djHT179+qPiwXUiMMUZi8feN9uV2b8AghcIyAkSVu5EkwHEtrjTZ8LhRHNxKCafrK8J3sd2vH8c5g==
+frappe-react-sdk@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.8.0.tgz#872f286915557396c87e08539938e5dc43f7220d"
+ integrity sha512-lAtssqee4VPqDMNEMHSnoz0NsfAhc80+B8NrOeHkSEjmcreMq28bZzfBVjVujhB/twfzVMLSdnyzhJrdtxp6Ag==
dependencies:
- frappe-js-sdk "^1.5.0"
+ frappe-js-sdk "^1.6.0"
socket.io-client "4.7.1"
swr "^2.2.5"
@@ -4306,10 +4307,10 @@ jiti@^1.21.0:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
-jotai@^2.9.2:
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.9.2.tgz#0b1036bc1672d02ea7cf73c6b01728de461d6ecf"
- integrity sha512-jIBXEadOHCziOuMY6HAy2KQcHipGhnsbF+twqh8Lcmcz/Yei0gdBtW5mOYdKmbQxGqkvfvXM3w/oHtJ2WNGSFg==
+jotai@^2.9.3:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.9.3.tgz#abcae49a737cd50e3144a6c9eb39840db077c727"
+ integrity sha512-IqMWKoXuEzWSShjd9UhalNsRGbdju5G2FrqNLQJT+Ih6p41VNYe2sav5hnwQx4HJr25jq9wRqvGSWGviGG6Gjw==
js-cookie@^3.0.5:
version "3.0.5"
@@ -4990,15 +4991,15 @@ react-dropzone@^14.2.3:
file-selector "^0.6.0"
prop-types "^15.8.1"
-react-hook-form@^7.51.5:
- version "7.52.1"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.52.1.tgz#ec2c96437b977f8b89ae2d541a70736c66284852"
- integrity sha512-uNKIhaoICJ5KQALYZ4TOaOLElyM+xipord+Ha3crEFhTntdLvWZqVY49Wqd/0GiVCA/f9NjemLeiNPjG7Hpurg==
+react-hook-form@^7.52.2:
+ version "7.52.2"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.52.2.tgz#ff40f4776250b86ddfcde6be68d34aa82b1c60fe"
+ integrity sha512-pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp56A==
-react-icons@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a"
- integrity sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==
+react-icons@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.3.0.tgz#ccad07a30aebd40a89f8cfa7d82e466019203f1c"
+ integrity sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==
react-idle-timer@^5.7.2:
version "5.7.2"
@@ -5068,20 +5069,20 @@ react-remove-scroll@2.5.7:
use-callback-ref "^1.3.0"
use-sidecar "^1.1.2"
-react-router-dom@^6.23.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.0.tgz#8debe13295c58605c04f93018d659a763245e58c"
- integrity sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==
+react-router-dom@^6.26.1:
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.1.tgz#a408892b41767a49dc94b3564b0e7d8e3959f623"
+ integrity sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==
dependencies:
- "@remix-run/router" "1.19.0"
- react-router "6.26.0"
+ "@remix-run/router" "1.19.1"
+ react-router "6.26.1"
-react-router@6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.0.tgz#d5af4c46835b202348ef2b7ddacd32a2db539fde"
- integrity sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==
+react-router@6.26.1:
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.1.tgz#88c64837e05ffab6899a49df2a1484a22471e4ce"
+ integrity sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==
dependencies:
- "@remix-run/router" "1.19.0"
+ "@remix-run/router" "1.19.1"
react-style-singleton@^2.2.1:
version "2.2.1"
@@ -5556,10 +5557,10 @@ tailwindcss-animate@^1.0.7:
resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4"
integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==
-tailwindcss@^3.4.4:
- version "3.4.7"
- resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201"
- integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==
+tailwindcss@^3.4.10:
+ version "3.4.10"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.10.tgz#70442d9aeb78758d1f911af29af8255ecdb8ffef"
+ integrity sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==
dependencies:
"@alloc/quick-lru" "^5.2.0"
arg "^5.0.2"