From dd5ff737d110c35270c38d6d80b315bd92340342 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Wed, 2 Aug 2023 23:00:47 +0530 Subject: [PATCH 01/42] remirror instances commented out to avoid prosemirror conflicts --- .../command-palette/command-pallette.tsx | 5 +- apps/app/components/core/feeds.tsx | 26 ++-- .../core/modals/gpt-assistant-modal.tsx | 48 +++---- .../components/issues/comment/add-comment.tsx | 60 ++++----- .../issues/comment/comment-card.tsx | 36 +++--- apps/app/components/issues/main-content.tsx | 63 +++++---- .../pages/create-update-block-inline.tsx | 122 +++++++++--------- apps/app/components/pages/page-form.tsx | 16 +-- .../components/pages/single-page-block.tsx | 40 +++--- apps/app/package.json | 11 +- 10 files changed, 214 insertions(+), 213 deletions(-) diff --git a/apps/app/components/command-palette/command-pallette.tsx b/apps/app/components/command-palette/command-pallette.tsx index 0b4c9577bc8..2a8a4aa4db0 100644 --- a/apps/app/components/command-palette/command-pallette.tsx +++ b/apps/app/components/command-palette/command-pallette.tsx @@ -49,7 +49,7 @@ export const CommandPalette: React.FC = () => { workspaceSlug && projectId && issueId ? ISSUE_DETAILS(issueId as string) : null, workspaceSlug && projectId && issueId ? () => - issuesService.retrieve(workspaceSlug as string, projectId as string, issueId as string) + issuesService.retrieve(workspaceSlug as string, projectId as string, issueId as string) : null ); @@ -81,7 +81,8 @@ export const CommandPalette: React.FC = () => { if ( !(e.target instanceof HTMLTextAreaElement) && !(e.target instanceof HTMLInputElement) && - !(e.target as Element).classList?.contains("remirror-editor") + // !(e.target as Element).classList?.contains("remirror-editor") && + !(e.target as Element).closest(".tiptap-editor-container") ) { if ((ctrlKey || metaKey) && keyPressed === "k") { e.preventDefault(); diff --git a/apps/app/components/core/feeds.tsx b/apps/app/components/core/feeds.tsx index 2924ec45685..8144bfc97ca 100644 --- a/apps/app/components/core/feeds.tsx +++ b/apps/app/components/core/feeds.tsx @@ -16,7 +16,7 @@ import { Icon } from "components/ui"; import { renderShortDateWithYearFormat, timeAgo } from "helpers/date-time.helper"; import { addSpaceIfCamelCase } from "helpers/string.helper"; // types -import RemirrorRichTextEditor from "components/rich-text-editor"; +// import RemirrorRichTextEditor from "components/rich-text-editor"; const activityDetails: { [key: string]: { @@ -250,18 +250,18 @@ export const Feeds: React.FC = ({ activities }) => { Commented {timeAgo(activity.created_at)}

-
- -
+ {/*
*/} + {/* */} + {/*
*/} diff --git a/apps/app/components/core/modals/gpt-assistant-modal.tsx b/apps/app/components/core/modals/gpt-assistant-modal.tsx index 7c05e036a1d..1d3af7a5142 100644 --- a/apps/app/components/core/modals/gpt-assistant-modal.tsx +++ b/apps/app/components/core/modals/gpt-assistant-modal.tsx @@ -32,17 +32,17 @@ type FormData = { task: string; }; -const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { - ssr: false, -}); - -import { IRemirrorRichTextEditor } from "components/rich-text-editor"; - -const WrappedRemirrorRichTextEditor = forwardRef( - (props, ref) => -); - -WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { +// ssr: false, +// }); +// +// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; +// +// const WrappedRemirrorRichTextEditor = forwardRef( +// (props, ref) => +// ); +// +// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; export const GptAssistantModal: React.FC = ({ isOpen, @@ -150,19 +150,19 @@ export const GptAssistantModal: React.FC = ({ isOpen ? "block" : "hidden" }`} > - {((content && content !== "") || (htmlContent && htmlContent !== "

")) && ( -
- Content: - {content}

} - customClassName="-m-3" - noBorder - borderOnFocus={false} - editable={false} - ref={editorRef} - /> -
- )} + {/* {((content && content !== "") || (htmlContent && htmlContent !== "

")) && ( */} + {/*
*/} + {/* Content: */} + {/* {content}

} */} + {/* customClassName="-m-3" */} + {/* noBorder */} + {/* borderOnFocus={false} */} + {/* editable={false} */} + {/* ref={editorRef} */} + {/* /> */} + {/*
*/} + {/* )} */} {response !== "" && (
Response: diff --git a/apps/app/components/issues/comment/add-comment.tsx b/apps/app/components/issues/comment/add-comment.tsx index b7504d932e6..3b3cd21b081 100644 --- a/apps/app/components/issues/comment/add-comment.tsx +++ b/apps/app/components/issues/comment/add-comment.tsx @@ -18,23 +18,23 @@ import type { ICurrentUserResponse, IIssueComment } from "types"; // fetch-keys import { PROJECT_ISSUES_ACTIVITY } from "constants/fetch-keys"; -const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { - ssr: false, - loading: () => ( - - - - ), -}); -import { IRemirrorRichTextEditor } from "components/rich-text-editor"; - -const WrappedRemirrorRichTextEditor = React.forwardRef< - IRemirrorRichTextEditor, - IRemirrorRichTextEditor ->((props, ref) => ); - -WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; - +// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { +// ssr: false, +// loading: () => ( +// +// +// +// ), +// }); +// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; +// +// const WrappedRemirrorRichTextEditor = React.forwardRef< +// IRemirrorRichTextEditor, +// IRemirrorRichTextEditor +// >((props, ref) => ); +// +// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +// const defaultValues: Partial = { comment_json: "", comment_html: "", @@ -98,19 +98,19 @@ export const AddComment: React.FC = ({ issueId, user, disabled = false })
- ( - setValue("comment_json", jsonValue)} - onHTMLChange={(htmlValue) => setValue("comment_html", htmlValue)} - placeholder="Enter your comment..." - ref={editorRef} - /> - )} - /> + {/* ( */} + {/* setValue("comment_json", jsonValue)} */} + {/* onHTMLChange={(htmlValue) => setValue("comment_html", htmlValue)} */} + {/* placeholder="Enter your comment..." */} + {/* ref={editorRef} */} + {/* /> */} + {/* )} */} + {/* /> */} {isSubmitting ? "Adding..." : "Comment"} diff --git a/apps/app/components/issues/comment/comment-card.tsx b/apps/app/components/issues/comment/comment-card.tsx index 987254f3b57..008290f433a 100644 --- a/apps/app/components/issues/comment/comment-card.tsx +++ b/apps/app/components/issues/comment/comment-card.tsx @@ -16,17 +16,17 @@ import { timeAgo } from "helpers/date-time.helper"; // types import type { IIssueComment } from "types"; -const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { ssr: false }); - -import { IRemirrorRichTextEditor } from "components/rich-text-editor"; - -const WrappedRemirrorRichTextEditor = React.forwardRef< - IRemirrorRichTextEditor, - IRemirrorRichTextEditor ->((props, ref) => ); - -WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; - +// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { ssr: false }); +// +// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; +// +// const WrappedRemirrorRichTextEditor = React.forwardRef< +// IRemirrorRichTextEditor, +// IRemirrorRichTextEditor +// >((props, ref) => ); +// +// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +// type Props = { comment: IIssueComment; onSubmit: (comment: IIssueComment) => void; @@ -132,13 +132,13 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD
- + {/* */}
diff --git a/apps/app/components/issues/main-content.tsx b/apps/app/components/issues/main-content.tsx index 316d39e8a26..7c29f08106b 100644 --- a/apps/app/components/issues/main-content.tsx +++ b/apps/app/components/issues/main-content.tsx @@ -50,11 +50,11 @@ export const IssueMainContent: React.FC = ({ workspaceSlug && projectId && issueDetails?.parent ? SUB_ISSUES(issueDetails.parent) : null, workspaceSlug && projectId && issueDetails?.parent ? () => - issuesService.subIssues( - workspaceSlug as string, - projectId as string, - issueDetails.parent ?? "" - ) + issuesService.subIssues( + workspaceSlug as string, + projectId as string, + issueDetails.parent ?? "" + ) : null ); const siblingIssuesList = siblingIssues?.sub_issues.filter((i) => i.id !== issueDetails.id); @@ -97,9 +97,8 @@ export const IssueMainContent: React.FC = ({ @@ -130,30 +129,30 @@ export const IssueMainContent: React.FC = ({ isAllowed={memberRole.isMember || memberRole.isOwner || !uneditable} /> - - -
- -
-
-
-

Attachments

-
- - -
-
-
-

Comments/Activity

- - + {/* */} + {/**/} + {/*
*/} + {/* */} + {/*
*/} + {/*
*/} + {/*
*/} + {/*

Attachments

*/} + {/*
*/} + {/* */} + {/* */} + {/*
*/} + {/*
*/} + {/*
*/} + {/*

Comments/Activity

*/} + {/* */} + {/* */}
); diff --git a/apps/app/components/pages/create-update-block-inline.tsx b/apps/app/components/pages/create-update-block-inline.tsx index 5e2dcb43c5d..3b73e041b68 100644 --- a/apps/app/components/pages/create-update-block-inline.tsx +++ b/apps/app/components/pages/create-update-block-inline.tsx @@ -39,22 +39,22 @@ const defaultValues = { description_html: null, }; -const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { - ssr: false, - loading: () => ( - - - - ), -}); -import { IRemirrorRichTextEditor } from "components/rich-text-editor"; - -const WrappedRemirrorRichTextEditor = React.forwardRef< - IRemirrorRichTextEditor, - IRemirrorRichTextEditor ->((props, ref) => ); - -WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { +// ssr: false, +// loading: () => ( +// +// +// +// ), +// }); +// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; +// +// const WrappedRemirrorRichTextEditor = React.forwardRef< +// IRemirrorRichTextEditor, +// IRemirrorRichTextEditor +// >((props, ref) => ); +// +// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; export const CreateUpdateBlockInline: React.FC = ({ handleClose, @@ -296,51 +296,51 @@ export const CreateUpdateBlockInline: React.FC = ({ />
- { - if (!data) - return ( - setValue("description", jsonValue)} - onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} - placeholder="Write something..." - customClassName="text-sm" - noBorder - borderOnFocus={false} - ref={editorRef} - /> - ); - else if (!value || !watch("description_html")) - return ( -
- ); - - return ( - 0 - ? value - : watch("description_html") && watch("description_html") !== "" - ? watch("description_html") - : { type: "doc", content: [{ type: "paragraph" }] } - } - onJSONChange={(jsonValue) => setValue("description", jsonValue)} - onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} - placeholder="Write something..." - customClassName="text-sm" - noBorder - borderOnFocus={false} - ref={editorRef} - /> - ); - }} - /> + {/* { */} + {/* if (!data) */} + {/* return ( */} + {/* setValue("description", jsonValue)} */} + {/* onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} */} + {/* placeholder="Write something..." */} + {/* customClassName="text-sm" */} + {/* noBorder */} + {/* borderOnFocus={false} */} + {/* ref={editorRef} */} + {/* /> */} + {/* ); */} + {/* else if (!value || !watch("description_html")) */} + {/* return ( */} + {/*
*/} + {/* ); */} + {/**/} + {/* return ( */} + {/* 0 */} + {/* ? value */} + {/* : watch("description_html") && watch("description_html") !== "" */} + {/* ? watch("description_html") */} + {/* : { type: "doc", content: [{ type: "paragraph" }] } */} + {/* } */} + {/* onJSONChange={(jsonValue) => setValue("description", jsonValue)} */} + {/* onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} */} + {/* placeholder="Write something..." */} + {/* customClassName="text-sm" */} + {/* noBorder */} + {/* borderOnFocus={false} */} + {/* ref={editorRef} */} + {/* /> */} + {/* ); */} + {/* }} */} + {/* /> */}
- {showBlockDetails - ? block.description_html.length > 7 && ( - - ) - : block.description_stripped.length > 0 && ( -

- {block.description_stripped} -

- )} + {/* {showBlockDetails */} + {/* ? block.description_html.length > 7 && ( */} + {/* */} + {/* ) */} + {/* : block.description_stripped.length > 0 && ( */} + {/*

*/} + {/* {block.description_stripped} */} + {/*

*/} + {/* )} */}
Date: Wed, 2 Aug 2023 23:04:55 +0530 Subject: [PATCH 02/42] styles migrated for remirror to tiptap transition --- .../components/issues/description-form.tsx | 75 +++++++++++-------- apps/app/components/issues/form.tsx | 64 ++++++++-------- apps/app/components/issues/props.tsx | 7 ++ apps/app/components/issues/tiptap.tsx | 43 +++++++++++ apps/app/styles/editor.css | 8 ++ 5 files changed, 132 insertions(+), 65 deletions(-) create mode 100644 apps/app/components/issues/props.tsx create mode 100644 apps/app/components/issues/tiptap.tsx diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index e81c8c1b34f..fb7d574ee12 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -8,14 +8,16 @@ import { Controller, useForm } from "react-hook-form"; import useReloadConfirmations from "hooks/use-reload-confirmation"; // components import { Loader, TextArea } from "components/ui"; -const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { - ssr: false, - loading: () => ( - - - - ), -}); +// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { +// ssr: false, +// loading: () => ( +// +// +// +// ), +// }); + +import Tiptap from "./tiptap"; // types import { IIssue } from "types"; @@ -106,9 +108,8 @@ export const IssueDescriptionForm: FC = ({ {characterLimit && (
255 ? "text-red-500" : "" - }`} + className={`${watch("name").length === 0 || watch("name").length > 255 ? "text-red-500" : "" + }`} > {watch("name").length} @@ -125,31 +126,39 @@ export const IssueDescriptionForm: FC = ({ if (!value && !watch("description_html")) return <>; return ( - { - setShowAlert(true); - setValue("description", jsonValue); - }} - onHTMLChange={(htmlValue) => { - setShowAlert(true); - setValue("description_html", htmlValue); - }} - onBlur={() => { - setIsSubmitting(true); - handleSubmit(handleDescriptionFormSubmit)() - .then(() => setShowAlert(false)) - .finally(() => setIsSubmitting(false)); - }} - placeholder="Description" - editable={isAllowed} + ? watch("description_html") + : value + } /> + // { + // setShowAlert(true); + // setValue("description", jsonValue); + // }} + // onHTMLChange={(htmlValue) => { + // setShowAlert(true); + // setValue("description_html", htmlValue); + // }} + // onBlur={() => { + // setIsSubmitting(true); + // handleSubmit(handleDescriptionFormSubmit)() + // .then(() => setShowAlert(false)) + // .finally(() => setIsSubmitting(false)); + // }} + // placeholder="Description" + // editable={isAllowed} + // /> ); }} /> diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index e6fc11ae258..e16bd317f06 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -37,23 +37,23 @@ import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline"; // types import type { ICurrentUserResponse, IIssue, ISearchIssueResponse } from "types"; // rich-text-editor -const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { - ssr: false, - loading: () => ( - - - - ), -}); +// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { +// ssr: false, +// loading: () => ( +// +// +// +// ), +// }); -import { IRemirrorRichTextEditor } from "components/rich-text-editor"; +// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; -const WrappedRemirrorRichTextEditor = React.forwardRef< - IRemirrorRichTextEditor, - IRemirrorRichTextEditor ->((props, ref) => ); - -WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +// const WrappedRemirrorRichTextEditor = React.forwardRef< +// IRemirrorRichTextEditor, +// IRemirrorRichTextEditor +// >((props, ref) => ); +// +// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; const defaultValues: Partial = { project: "", @@ -362,23 +362,23 @@ export const IssueForm: FC = ({ AI
- ( - setValue("description", jsonValue)} - onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} - placeholder="Description" - ref={editorRef} - /> - )} - /> + {/* ( */} + {/* setValue("description", jsonValue)} */} + {/* onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} */} + {/* placeholder="Description" */} + {/* ref={editorRef} */} + {/* /> */} + {/* )} */} + {/* /> */} { diff --git a/apps/app/components/issues/props.tsx b/apps/app/components/issues/props.tsx new file mode 100644 index 00000000000..54306429c6a --- /dev/null +++ b/apps/app/components/issues/props.tsx @@ -0,0 +1,7 @@ +import { EditorProps } from "@tiptap/pm/view"; + +export const TiptapEditorProps: EditorProps = { + attributes: { + class: `prose prose-brand max-w-full prose-headings:font-display font-default focus:outline-none`, + } +}; diff --git a/apps/app/components/issues/tiptap.tsx b/apps/app/components/issues/tiptap.tsx new file mode 100644 index 00000000000..d3f554d4cdd --- /dev/null +++ b/apps/app/components/issues/tiptap.tsx @@ -0,0 +1,43 @@ +import Placeholder from '@tiptap/extension-placeholder'; +import { useEditor, EditorContent } from '@tiptap/react'; +import StarterKit from '@tiptap/starter-kit'; +import { EditorBubbleMenu } from './EditorBubbleMenu'; +import { TiptapEditorProps } from "./props"; + +type TiptapProps = { + value: string; + noBorder?: boolean; + borderOnFocus?: boolean; + customClassName?: string; +} + +const Tiptap = ({ value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { + const editor = useEditor({ + editorProps: TiptapEditorProps, + extensions: [ + StarterKit, + Placeholder.configure({ + placeholder: 'Description...', + }) + ], + content: value, + }); + + const editorClassNames = `mt-2 p-3 relative focus:outline-none rounded-md focus:border-custom-border-200 + ${noBorder ? '' : 'border border-custom-border-200' + } ${borderOnFocus ? 'focus:border border-custom-border-200' : 'focus:border-0' + } ${customClassName}`; + + return ( +
{ + editor?.chain().focus().run(); + }} + className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} + > + +
+ ); +}; + +export default Tiptap; diff --git a/apps/app/styles/editor.css b/apps/app/styles/editor.css index ea4b2e60138..293a017b2c1 100644 --- a/apps/app/styles/editor.css +++ b/apps/app/styles/editor.css @@ -8,6 +8,14 @@ margin-left: 1px; } +.ProseMirror p.is-editor-empty:first-child::before { + color: rgb(var(--color-text-400)); + content: attr(data-placeholder); + float: left; + height: 0; + pointer-events: none; +} + .ProseMirror { position: relative; word-wrap: break-word; From b078e24d828c68782302a52b111d5ce6900b9445 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 3 Aug 2023 00:15:02 +0530 Subject: [PATCH 03/42] added bubblemenu support with extensions --- .../components/issues/EditorBubbleMenu.tsx | 116 +++++++++++++++ apps/app/components/issues/extensions.tsx | 127 ++++++++++++++++ apps/app/components/issues/link-selector.tsx | 78 ++++++++++ apps/app/components/issues/node-selector.tsx | 135 ++++++++++++++++++ apps/app/components/issues/props.tsx | 13 +- apps/app/components/issues/tiptap.tsx | 15 +- apps/app/components/issues/utils.ts | 6 + apps/app/package.json | 12 ++ apps/app/styles/editor.css | 89 +++++++++++- 9 files changed, 583 insertions(+), 8 deletions(-) create mode 100644 apps/app/components/issues/EditorBubbleMenu.tsx create mode 100644 apps/app/components/issues/extensions.tsx create mode 100644 apps/app/components/issues/link-selector.tsx create mode 100644 apps/app/components/issues/node-selector.tsx create mode 100644 apps/app/components/issues/utils.ts diff --git a/apps/app/components/issues/EditorBubbleMenu.tsx b/apps/app/components/issues/EditorBubbleMenu.tsx new file mode 100644 index 00000000000..7945c458919 --- /dev/null +++ b/apps/app/components/issues/EditorBubbleMenu.tsx @@ -0,0 +1,116 @@ +import { BubbleMenu, BubbleMenuProps } from "@tiptap/react"; +import { FC, useState } from "react"; +import { + BoldIcon, + ItalicIcon, + UnderlineIcon, + StrikethroughIcon, + CodeIcon, +} from "lucide-react"; + +import { NodeSelector } from "./node-selector"; +import { LinkSelector } from "./link-selector"; +import { cn } from "./utils"; + +export interface BubbleMenuItem { + name: string; + isActive: () => boolean; + command: () => void; + icon: typeof BoldIcon; +} + +type EditorBubbleMenuProps = Omit; + +export const EditorBubbleMenu: FC = (props) => { + const items: BubbleMenuItem[] = [ + { + name: "bold", + isActive: () => props.editor.isActive("bold"), + command: () => props.editor.chain().focus().toggleBold().run(), + icon: BoldIcon, + }, + { + name: "italic", + isActive: () => props.editor.isActive("italic"), + command: () => props.editor.chain().focus().toggleItalic().run(), + icon: ItalicIcon, + }, + { + name: "underline", + isActive: () => props.editor.isActive("underline"), + command: () => props.editor.chain().focus().toggleUnderline().run(), + icon: UnderlineIcon, + }, + { + name: "strike", + isActive: () => props.editor.isActive("strike"), + command: () => props.editor.chain().focus().toggleStrike().run(), + icon: StrikethroughIcon, + }, + { + name: "code", + isActive: () => props.editor.isActive("code"), + command: () => props.editor.chain().focus().toggleCode().run(), + icon: CodeIcon, + }, + ]; + + const bubbleMenuProps: EditorBubbleMenuProps = { + ...props, + shouldShow: ({ editor }) => { + if (editor.isActive("image")) { + return false; + } + return editor.view.state.selection.content().size > 0; + }, + tippyOptions: { + moveTransition: "transform 0.15s ease-out", + onHidden: () => { + setIsNodeSelectorOpen(false); + setIsLinkSelectorOpen(false); + }, + }, + }; + + const [isNodeSelectorOpen, setIsNodeSelectorOpen] = useState(false); + const [isLinkSelectorOpen, setIsLinkSelectorOpen] = useState(false); + + return ( + + { + setIsNodeSelectorOpen(!isNodeSelectorOpen); + setIsLinkSelectorOpen(false); + }} + /> + { + setIsLinkSelectorOpen(!isLinkSelectorOpen); + setIsNodeSelectorOpen(false); + }} + /> +
+ {items.map((item, index) => ( + + ))} +
+
+ ); +}; diff --git a/apps/app/components/issues/extensions.tsx b/apps/app/components/issues/extensions.tsx new file mode 100644 index 00000000000..7e5a2d6a68f --- /dev/null +++ b/apps/app/components/issues/extensions.tsx @@ -0,0 +1,127 @@ +import StarterKit from "@tiptap/starter-kit"; +import HorizontalRule from "@tiptap/extension-horizontal-rule"; +import TiptapLink from "@tiptap/extension-link"; +import TiptapImage from "@tiptap/extension-image"; +import Placeholder from "@tiptap/extension-placeholder"; +import TiptapUnderline from "@tiptap/extension-underline"; +import TextStyle from "@tiptap/extension-text-style"; +import { Color } from "@tiptap/extension-color"; +import TaskItem from "@tiptap/extension-task-item"; +import TaskList from "@tiptap/extension-task-list"; +import { Markdown } from "tiptap-markdown"; +import Highlight from "@tiptap/extension-highlight"; + +// import SlashCommand from "./slash-command"; +import { InputRule } from "@tiptap/core"; + +export const TiptapExtensions = [ + StarterKit.configure({ + bulletList: { + HTMLAttributes: { + class: "list-disc list-outside leading-3 -mt-2", + }, + }, + orderedList: { + HTMLAttributes: { + class: "list-decimal list-outside leading-3 -mt-2", + }, + }, + listItem: { + HTMLAttributes: { + class: "leading-normal -mb-2", + }, + }, + blockquote: { + HTMLAttributes: { + class: "border-l-4 border-stone-700", + }, + }, + codeBlock: { + HTMLAttributes: { + class: + "rounded-sm bg-stone-100 p-5 font-mono font-medium text-stone-800", + }, + }, + code: { + HTMLAttributes: { + class: + "rounded-md bg-stone-200 px-1.5 py-1 font-mono font-medium text-stone-900", + spellcheck: "false", + }, + }, + horizontalRule: false, + dropcursor: { + color: "#DBEAFE", + width: 4, + }, + gapcursor: false, + }), + HorizontalRule.extend({ + addInputRules() { + return [ + new InputRule({ + find: /^(?:---|—-|___\s|\*\*\*\s)$/, + handler: ({ state, range }) => { + const attributes = {}; + + const { tr } = state; + const start = range.from; + const end = range.to; + + tr.insert(start - 1, this.type.create(attributes)).delete( + tr.mapping.map(start), + tr.mapping.map(end), + ); + }, + }), + ]; + }, + }).configure({ + HTMLAttributes: { + class: "mt-4 mb-6 border-t border-stone-300", + }, + }), + TiptapLink.configure({ + HTMLAttributes: { + class: + "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", + }, + }), + TiptapImage.configure({ + allowBase64: true, + HTMLAttributes: { + class: "rounded-lg border border-stone-200", + }, + }), + Placeholder.configure({ + placeholder: ({ node }) => { + if (node.type.name === "heading") { + return `Heading ${node.attrs.level}`; + } + return "Press '/' for commands, or '++' for AI autocomplete..."; + }, + includeChildren: true, + }), + // SlashCommand, + TiptapUnderline, + TextStyle, + Color, + Highlight.configure({ + multicolor: true, + }), + TaskList.configure({ + HTMLAttributes: { + class: "not-prose pl-2", + }, + }), + TaskItem.configure({ + HTMLAttributes: { + class: "flex items-start my-4", + }, + nested: true, + }), + Markdown.configure({ + html: false, + transformCopiedText: true, + }), +]; diff --git a/apps/app/components/issues/link-selector.tsx b/apps/app/components/issues/link-selector.tsx new file mode 100644 index 00000000000..7bc3ea2e940 --- /dev/null +++ b/apps/app/components/issues/link-selector.tsx @@ -0,0 +1,78 @@ +import { Editor } from "@tiptap/core"; +import { Check, Trash } from "lucide-react"; +import { Dispatch, FC, SetStateAction, useEffect, useRef } from "react"; +import { cn } from './utils'; + +interface LinkSelectorProps { + editor: Editor; + isOpen: boolean; + setIsOpen: Dispatch>; +} + +export const LinkSelector: FC = ({ + editor, + isOpen, + setIsOpen, +}) => { + const inputRef = useRef(null); + + // Autofocus on input by default + useEffect(() => { + inputRef.current && inputRef.current?.focus(); + }); + + return ( +
+ + {isOpen && ( +
{ + e.preventDefault(); + const input = e.target[0] as HTMLInputElement; + editor.chain().focus().setLink({ href: input.value }).run(); + setIsOpen(false); + }} + className="fixed top-full z-[99999] mt-1 flex w-60 overflow-hidden rounded border border-stone-200 bg-white p-1 shadow-xl animate-in fade-in slide-in-from-top-1" + > + + {editor.getAttributes("link").href ? ( + + ) : ( + + )} +
+ )} +
+ ); +}; + diff --git a/apps/app/components/issues/node-selector.tsx b/apps/app/components/issues/node-selector.tsx new file mode 100644 index 00000000000..4591e8707e6 --- /dev/null +++ b/apps/app/components/issues/node-selector.tsx @@ -0,0 +1,135 @@ +import { Editor } from "@tiptap/core"; +import { + Check, + ChevronDown, + Heading1, + Heading2, + Heading3, + TextQuote, + ListOrdered, + TextIcon, + Code, + CheckSquare, +} from "lucide-react"; +import { Dispatch, FC, SetStateAction } from "react"; + +import { BubbleMenuItem } from "./EditorBubbleMenu"; + +interface NodeSelectorProps { + editor: Editor; + isOpen: boolean; + setIsOpen: Dispatch>; +} + +export const NodeSelector: FC = ({ + editor, + isOpen, + setIsOpen, +}) => { + const items: BubbleMenuItem[] = [ + { + name: "Text", + icon: TextIcon, + command: () => + editor.chain().focus().toggleNode("paragraph", "paragraph").run(), + // I feel like there has to be a more efficient way to do this – feel free to PR if you know how! + isActive: () => + editor.isActive("paragraph") && + !editor.isActive("bulletList") && + !editor.isActive("orderedList"), + }, + { + name: "Heading 1", + icon: Heading1, + command: () => editor.chain().focus().toggleHeading({ level: 1 }).run(), + isActive: () => editor.isActive("heading", { level: 1 }), + }, + { + name: "Heading 2", + icon: Heading2, + command: () => editor.chain().focus().toggleHeading({ level: 2 }).run(), + isActive: () => editor.isActive("heading", { level: 2 }), + }, + { + name: "Heading 3", + icon: Heading3, + command: () => editor.chain().focus().toggleHeading({ level: 3 }).run(), + isActive: () => editor.isActive("heading", { level: 3 }), + }, + { + name: "To-do List", + icon: CheckSquare, + command: () => editor.chain().focus().toggleTaskList().run(), + isActive: () => editor.isActive("taskItem"), + }, + { + name: "Bullet List", + icon: ListOrdered, + command: () => editor.chain().focus().toggleBulletList().run(), + isActive: () => editor.isActive("bulletList"), + }, + { + name: "Numbered List", + icon: ListOrdered, + command: () => editor.chain().focus().toggleOrderedList().run(), + isActive: () => editor.isActive("orderedList"), + }, + { + name: "Quote", + icon: TextQuote, + command: () => + editor + .chain() + .focus() + .toggleNode("paragraph", "paragraph") + .toggleBlockquote() + .run(), + isActive: () => editor.isActive("blockquote"), + }, + { + name: "Code", + icon: Code, + command: () => editor.chain().focus().toggleCodeBlock().run(), + isActive: () => editor.isActive("codeBlock"), + }, + ]; + + const activeItem = items.filter((item) => item.isActive()).pop() ?? { + name: "Multiple", + }; + + return ( +
+ + + {isOpen && ( +
+ {items.map((item, index) => ( + + ))} +
+ )} +
+ ); +}; diff --git a/apps/app/components/issues/props.tsx b/apps/app/components/issues/props.tsx index 54306429c6a..6470b37c13d 100644 --- a/apps/app/components/issues/props.tsx +++ b/apps/app/components/issues/props.tsx @@ -3,5 +3,16 @@ import { EditorProps } from "@tiptap/pm/view"; export const TiptapEditorProps: EditorProps = { attributes: { class: `prose prose-brand max-w-full prose-headings:font-display font-default focus:outline-none`, - } + }, + handleDOMEvents: { + keydown: (_view, event) => { + // prevent default event listeners from firing when slash command is active + if (["ArrowUp", "ArrowDown", "Enter"].includes(event.key)) { + const slashCommand = document.querySelector("#slash-command"); + if (slashCommand) { + return true; + } + } + }, + }, }; diff --git a/apps/app/components/issues/tiptap.tsx b/apps/app/components/issues/tiptap.tsx index d3f554d4cdd..9e298ef3c9e 100644 --- a/apps/app/components/issues/tiptap.tsx +++ b/apps/app/components/issues/tiptap.tsx @@ -2,6 +2,7 @@ import Placeholder from '@tiptap/extension-placeholder'; import { useEditor, EditorContent } from '@tiptap/react'; import StarterKit from '@tiptap/starter-kit'; import { EditorBubbleMenu } from './EditorBubbleMenu'; +import { TiptapExtensions } from './extensions'; import { TiptapEditorProps } from "./props"; type TiptapProps = { @@ -14,12 +15,13 @@ type TiptapProps = { const Tiptap = ({ value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { const editor = useEditor({ editorProps: TiptapEditorProps, - extensions: [ - StarterKit, - Placeholder.configure({ - placeholder: 'Description...', - }) - ], + extensions: TiptapExtensions, + // extensions: [ + // StarterKit, + // Placeholder.configure({ + // placeholder: 'Description...', + // }) + // ], content: value, }); @@ -35,6 +37,7 @@ const Tiptap = ({ value, noBorder, borderOnFocus, customClassName }: TiptapProps }} className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} > + {editor && }
); diff --git a/apps/app/components/issues/utils.ts b/apps/app/components/issues/utils.ts new file mode 100644 index 00000000000..a5ef193506d --- /dev/null +++ b/apps/app/components/issues/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/apps/app/package.json b/apps/app/package.json index 8c8c0d1f76e..eb8bbaae04b 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -27,17 +27,27 @@ "@nivo/scatterplot": "0.80.0", "@sentry/nextjs": "^7.36.0", "@tailwindcss/typography": "^0.5.9", + "@tiptap/extension-color": "^2.0.4", + "@tiptap/extension-highlight": "^2.0.4", + "@tiptap/extension-image": "^2.0.4", + "@tiptap/extension-link": "^2.0.4", "@tiptap/extension-placeholder": "^2.0.4", + "@tiptap/extension-task-item": "^2.0.4", + "@tiptap/extension-task-list": "^2.0.4", + "@tiptap/extension-text-style": "^2.0.4", + "@tiptap/extension-underline": "^2.0.4", "@tiptap/pm": "^2.0.4", "@tiptap/react": "^2.0.4", "@tiptap/starter-kit": "^2.0.4", "@types/lodash.debounce": "^4.0.7", "@types/react-datepicker": "^4.8.0", "axios": "^1.1.3", + "clsx": "^2.0.0", "cmdk": "^0.2.0", "dotenv": "^16.0.3", "js-cookie": "^3.0.1", "lodash.debounce": "^4.0.8", + "lucide-react": "^0.263.1", "next": "12.3.2", "next-pwa": "^5.6.0", "next-themes": "^0.2.1", @@ -51,6 +61,8 @@ "react-hook-form": "^7.38.0", "react-markdown": "^8.0.7", "swr": "^2.1.3", + "tailwind-merge": "^1.14.0", + "tiptap-markdown": "^0.8.2", "tlds": "^1.238.0", "uuid": "^9.0.0" }, diff --git a/apps/app/styles/editor.css b/apps/app/styles/editor.css index 293a017b2c1..6f45ecc2a17 100644 --- a/apps/app/styles/editor.css +++ b/apps/app/styles/editor.css @@ -9,13 +9,100 @@ } .ProseMirror p.is-editor-empty:first-child::before { - color: rgb(var(--color-text-400)); content: attr(data-placeholder); float: left; + color: rgb(var(--color-text-400)); + pointer-events: none; height: 0; +} + +.ProseMirror .is-empty::before { + content: attr(data-placeholder); + float: left; + color: rgb(var(--color-text-400)); pointer-events: none; + height: 0; +} + +/* Custom image styles */ + +.ProseMirror img { + transition: filter 0.1s ease-in-out; + + &:hover { + cursor: pointer; + filter: brightness(90%); + } + + &.ProseMirror-selectednode { + outline: 3px solid #5abbf7; + filter: brightness(90%); + } +} + +/* Custom TODO list checkboxes – shoutout to this awesome tutorial: https://moderncss.dev/pure-css-custom-checkbox-style/ */ + +ul[data-type="taskList"] li > label { + margin-right: 0.2rem; + user-select: none; +} + +@media screen and (max-width: 768px) { + ul[data-type="taskList"] li > label { + margin-right: 0.5rem; + } +} + +ul[data-type="taskList"] li > label input[type="checkbox"] { + -webkit-appearance: none; + appearance: none; + background-color: var(--novel-white); + margin: 0; + cursor: pointer; + width: 1.2em; + height: 1.2em; + position: relative; + top: 5px; + border: 2px solid var(--novel-stone-900); + margin-right: 0.3rem; + display: grid; + place-content: center; + + &:hover { + background-color: var(--novel-stone-50); + } + + &:active { + background-color: var(--novel-stone-200); + } + + &::before { + content: ""; + width: 0.65em; + height: 0.65em; + transform: scale(0); + transition: 120ms transform ease-in-out; + box-shadow: inset 1em 1em; + transform-origin: center; + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); + } + + &:checked::before { + transform: scale(1); + } } +ul[data-type="taskList"] li[data-checked="true"] > div > p { + color: var(--novel-stone-400); + text-decoration: line-through; + text-decoration-thickness: 2px; +} + +/* Overwrite tippy-box original max-width */ + +.tippy-box { + max-width: 400px !important; +} .ProseMirror { position: relative; word-wrap: break-word; From 727570e34742408bf3d83a38b5f695192a5827e0 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Sat, 5 Aug 2023 04:50:18 +0530 Subject: [PATCH 04/42] fixed css for task lists and code with syntax highlighting --- apps/app/postcss.config.js | 1 + apps/app/styles/editor.css | 50 +++++++++++++++++++++---------------- apps/app/tailwind.config.js | 5 +++- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/apps/app/postcss.config.js b/apps/app/postcss.config.js index 12a703d900d..cbfea5ea20f 100644 --- a/apps/app/postcss.config.js +++ b/apps/app/postcss.config.js @@ -1,5 +1,6 @@ module.exports = { plugins: { + "tailwindcss/nesting": {}, tailwindcss: {}, autoprefixer: {}, }, diff --git a/apps/app/styles/editor.css b/apps/app/styles/editor.css index 6f45ecc2a17..f8f91ca34b8 100644 --- a/apps/app/styles/editor.css +++ b/apps/app/styles/editor.css @@ -1,13 +1,3 @@ -.empty-node::after { - content: attr(data-placeholder); - color: rgb(var(--color-text-400)); - - position: absolute; - pointer-events: none; - top: 15px; - margin-left: 1px; -} - .ProseMirror p.is-editor-empty:first-child::before { content: attr(data-placeholder); float: left; @@ -42,38 +32,37 @@ /* Custom TODO list checkboxes – shoutout to this awesome tutorial: https://moderncss.dev/pure-css-custom-checkbox-style/ */ -ul[data-type="taskList"] li > label { +ul[data-type="taskList"] li>label { margin-right: 0.2rem; user-select: none; } @media screen and (max-width: 768px) { - ul[data-type="taskList"] li > label { + ul[data-type="taskList"] li>label { margin-right: 0.5rem; } } -ul[data-type="taskList"] li > label input[type="checkbox"] { +ul[data-type="taskList"] li>label input[type="checkbox"] { -webkit-appearance: none; appearance: none; - background-color: var(--novel-white); + background-color: rgb(var(--color-background-100)); margin: 0; cursor: pointer; - width: 1.2em; - height: 1.2em; + width: 1.2rem; + height: 1.2rem; position: relative; - top: 5px; - border: 2px solid var(--novel-stone-900); + border: 2px solid rgb(var(--color-text-100)); margin-right: 0.3rem; display: grid; place-content: center; &:hover { - background-color: var(--novel-stone-50); + background-color: rgb(var(--color-background-80)); } &:active { - background-color: var(--novel-stone-200); + background-color: rgb(var(--color-background-90)); } &::before { @@ -92,8 +81,8 @@ ul[data-type="taskList"] li > label input[type="checkbox"] { } } -ul[data-type="taskList"] li[data-checked="true"] > div > p { - color: var(--novel-stone-400); +ul[data-type="taskList"] li[data-checked="true"]>div>p { + color: rgb(var(--color-text-200)); text-decoration: line-through; text-decoration-thickness: 2px; } @@ -103,6 +92,7 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p { .tippy-box { max-width: 400px !important; } + .ProseMirror { position: relative; word-wrap: break-word; @@ -126,6 +116,22 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p { -moz-appearance: textfield; } +.ProseMirror pre { + background: #121212; + border-radius: 0.375rem; + border-color: rgba(var(--color-background-100)); + border: 0.5px solid; + font-family: "JetBrainsMono", monospace; + padding: 0.75rem 1rem; +} + +.ProseMirror pre code { + background: none; + color: inherit; + font-size: 0.8rem; + padding: 0; +} + .ProseMirror-icon { display: inline-block; line-height: 0.8; diff --git a/apps/app/tailwind.config.js b/apps/app/tailwind.config.js index fbe0994b447..11e1946a5aa 100644 --- a/apps/app/tailwind.config.js +++ b/apps/app/tailwind.config.js @@ -182,5 +182,8 @@ module.exports = { custom: ["Inter", "sans-serif"], }, }, - plugins: [require("@tailwindcss/typography")], + plugins: [ + require("tailwindcss-animate"), + require("@tailwindcss/typography") + ], }; From 60f1b7346d21465d343b60162b263d433fb5d057 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Sat, 5 Aug 2023 04:50:59 +0530 Subject: [PATCH 05/42] added support for slash command --- apps/app/components/issues/slash-command.tsx | 350 +++++++++++++++++++ 1 file changed, 350 insertions(+) create mode 100644 apps/app/components/issues/slash-command.tsx diff --git a/apps/app/components/issues/slash-command.tsx b/apps/app/components/issues/slash-command.tsx new file mode 100644 index 00000000000..d869001cd2f --- /dev/null +++ b/apps/app/components/issues/slash-command.tsx @@ -0,0 +1,350 @@ +import React, { + useState, + useEffect, + useCallback, + ReactNode, + useRef, + useLayoutEffect, +} from "react"; +import { Editor, Range, Extension } from "@tiptap/core"; +import Suggestion from "@tiptap/suggestion"; +import { ReactRenderer } from "@tiptap/react"; +import tippy from "tippy.js"; +import { + Heading1, + Heading2, + Heading3, + List, + ListOrdered, + Text, + TextQuote, + Code, + MinusSquare, + CheckSquare, +} from "lucide-react"; + +interface CommandItemProps { + title: string; + description: string; + icon: ReactNode; +} + +interface CommandProps { + editor: Editor; + range: Range; +} + +const Command = Extension.create({ + name: "slash-command", + addOptions() { + return { + suggestion: { + char: "/", + command: ({ + editor, + range, + props, + }: { + editor: Editor; + range: Range; + props: any; + }) => { + props.command({ editor, range }); + }, + }, + }; + }, + addProseMirrorPlugins() { + return [ + Suggestion({ + editor: this.editor, + ...this.options.suggestion, + }), + ]; + }, +}); + +const getSuggestionItems = ({ query }: { query: string }) => + [ + { + title: "Text", + description: "Just start typing with plain text.", + searchTerms: ["p", "paragraph"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor + .chain() + .focus() + .deleteRange(range) + .toggleNode("paragraph", "paragraph") + .run(); + }, + }, + { + title: "Heading 1", + description: "Big section heading.", + searchTerms: ["title", "big", "large"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor + .chain() + .focus() + .deleteRange(range) + .setNode("heading", { level: 1 }) + .run(); + }, + }, + { + title: "Heading 2", + description: "Medium section heading.", + searchTerms: ["subtitle", "medium"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor + .chain() + .focus() + .deleteRange(range) + .setNode("heading", { level: 2 }) + .run(); + }, + }, + { + title: "Heading 3", + description: "Small section heading.", + searchTerms: ["subtitle", "small"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor + .chain() + .focus() + .deleteRange(range) + .setNode("heading", { level: 3 }) + .run(); + }, + }, + { + title: "To-do List", + description: "Track tasks with a to-do list.", + searchTerms: ["todo", "task", "list", "check", "checkbox"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor.chain().focus().deleteRange(range).toggleTaskList().run(); + }, + }, + { + title: "Bullet List", + description: "Create a simple bullet list.", + searchTerms: ["unordered", "point"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor.chain().focus().deleteRange(range).toggleBulletList().run(); + }, + }, + { + title: "Divider", + description: "Visually divide blocks", + searchTerms: ["line", "divider", "horizontal", "rule", "separate"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor.chain().focus().deleteRange(range).setHorizontalRule().run() + }, + }, + { + title: "Numbered List", + description: "Create a list with numbering.", + searchTerms: ["ordered"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor.chain().focus().deleteRange(range).toggleOrderedList().run(); + }, + }, + { + title: "Quote", + description: "Capture a quote.", + searchTerms: ["blockquote"], + icon: , + command: ({ editor, range }: CommandProps) => + editor + .chain() + .focus() + .deleteRange(range) + .toggleNode("paragraph", "paragraph") + .toggleBlockquote() + .run(), + }, + { + title: "Code", + description: "Capture a code snippet.", + searchTerms: ["codeblock"], + icon: , + command: ({ editor, range }: CommandProps) => + editor.chain().focus().deleteRange(range).toggleCodeBlock().run(), + }, + ].filter((item) => { + if (typeof query === "string" && query.length > 0) { + const search = query.toLowerCase(); + return ( + item.title.toLowerCase().includes(search) || + item.description.toLowerCase().includes(search) || + (item.searchTerms && + item.searchTerms.some((term: string) => term.includes(search))) + ); + } + return true; + });; + +export const updateScrollView = (container: HTMLElement, item: HTMLElement) => { + const containerHeight = container.offsetHeight; + const itemHeight = item ? item.offsetHeight : 0; + + const top = item.offsetTop; + const bottom = top + itemHeight; + + if (top < container.scrollTop) { + container.scrollTop -= container.scrollTop - top + 5; + } else if (bottom > containerHeight + container.scrollTop) { + container.scrollTop += bottom - containerHeight - container.scrollTop + 5; + } +}; + +const CommandList = ({ + items, + command, + editor, + range, +}: { + items: CommandItemProps[]; + command: any; + editor: any; + range: any; +}) => { + const [selectedIndex, setSelectedIndex] = useState(0); + + const selectItem = useCallback( + (index: number) => { + const item = items[index]; + if (item) { + command(item); + } + }, + [command, items], + ); + + useEffect(() => { + const navigationKeys = ["ArrowUp", "ArrowDown", "Enter"]; + const onKeyDown = (e: KeyboardEvent) => { + if (navigationKeys.includes(e.key)) { + e.preventDefault(); + if (e.key === "ArrowUp") { + setSelectedIndex((selectedIndex + items.length - 1) % items.length); + return true; + } + if (e.key === "ArrowDown") { + setSelectedIndex((selectedIndex + 1) % items.length); + return true; + } + if (e.key === "Enter") { + selectItem(selectedIndex); + return true; + } + return false; + } + }; + document.addEventListener("keydown", onKeyDown); + return () => { + document.removeEventListener("keydown", onKeyDown); + }; + }, [items, selectedIndex, setSelectedIndex, selectItem]); + + useEffect(() => { + setSelectedIndex(0); + }, [items]); + + const commandListContainer = useRef(null); + + useLayoutEffect(() => { + const container = commandListContainer?.current; + + const item = container?.children[selectedIndex] as HTMLElement; + + if (item && container) updateScrollView(container, item); + }, [selectedIndex]); + + return items.length > 0 ? ( +
+ {items.map((item: CommandItemProps, index: number) => + + )} +
+ ) : null; +}; + +const renderItems = () => { + let component: ReactRenderer | null = null; + let popup: any | null = null; + + return { + onStart: (props: { editor: Editor; clientRect: DOMRect }) => { + component = new ReactRenderer(CommandList, { + props, + editor: props.editor, + }); + + // @ts-ignore + popup = tippy("body", { + getReferenceClientRect: props.clientRect, + appendTo: () => document.body, + content: component.element, + showOnCreate: true, + interactive: true, + trigger: "manual", + placement: "bottom-start", + }); + }, + onUpdate: (props: { editor: Editor; clientRect: DOMRect }) => { + component?.updateProps(props); + + popup && + popup[0].setProps({ + getReferenceClientRect: props.clientRect, + }); + }, + onKeyDown: (props: { event: KeyboardEvent }) => { + if (props.event.key === "Escape") { + popup?.[0].hide(); + + return true; + } + + // @ts-ignore + return component?.ref?.onKeyDown(props); + }, + onExit: () => { + popup?.[0].destroy(); + component?.destroy(); + }, + }; +}; + +const SlashCommand = Command.configure({ + suggestion: { + items: getSuggestionItems, + render: renderItems, + }, +}); + +export default SlashCommand; From 50e7c5924c906bf521748ebc4623fcec3217f20a Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Sat, 5 Aug 2023 04:51:58 +0530 Subject: [PATCH 06/42] fixed bubble menu to match styles and added better seperation in UI --- .../components/issues/EditorBubbleMenu.tsx | 4 +-- apps/app/components/issues/extensions.tsx | 30 +++++++++++-------- apps/app/components/issues/link-selector.tsx | 11 ++++--- apps/app/components/issues/node-selector.tsx | 21 ++++++------- apps/app/package.json | 8 +++++ 5 files changed, 44 insertions(+), 30 deletions(-) diff --git a/apps/app/components/issues/EditorBubbleMenu.tsx b/apps/app/components/issues/EditorBubbleMenu.tsx index 7945c458919..32ad3f2a9d2 100644 --- a/apps/app/components/issues/EditorBubbleMenu.tsx +++ b/apps/app/components/issues/EditorBubbleMenu.tsx @@ -78,7 +78,7 @@ export const EditorBubbleMenu: FC = (props) => { return ( = (props) => { ) : ( - )} diff --git a/apps/app/components/issues/node-selector.tsx b/apps/app/components/issues/node-selector.tsx index 4591e8707e6..ebb9767ec18 100644 --- a/apps/app/components/issues/node-selector.tsx +++ b/apps/app/components/issues/node-selector.tsx @@ -14,6 +14,7 @@ import { import { Dispatch, FC, SetStateAction } from "react"; import { BubbleMenuItem } from "./EditorBubbleMenu"; +import { cn } from "./utils"; interface NodeSelectorProps { editor: Editor; @@ -32,26 +33,25 @@ export const NodeSelector: FC = ({ icon: TextIcon, command: () => editor.chain().focus().toggleNode("paragraph", "paragraph").run(), - // I feel like there has to be a more efficient way to do this – feel free to PR if you know how! isActive: () => editor.isActive("paragraph") && !editor.isActive("bulletList") && !editor.isActive("orderedList"), }, { - name: "Heading 1", + name: "H1", icon: Heading1, command: () => editor.chain().focus().toggleHeading({ level: 1 }).run(), isActive: () => editor.isActive("heading", { level: 1 }), }, { - name: "Heading 2", + name: "H2", icon: Heading2, command: () => editor.chain().focus().toggleHeading({ level: 2 }).run(), isActive: () => editor.isActive("heading", { level: 2 }), }, { - name: "Heading 3", + name: "H3", icon: Heading3, command: () => editor.chain().focus().toggleHeading({ level: 3 }).run(), isActive: () => editor.isActive("heading", { level: 3 }), @@ -101,7 +101,7 @@ export const NodeSelector: FC = ({ return (
{isOpen && ( -
+
{items.map((item, index) => ( ))}
- )} -
+ ) + } + ); }; diff --git a/apps/app/package.json b/apps/app/package.json index eb8bbaae04b..77860d7d0e5 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -27,8 +27,10 @@ "@nivo/scatterplot": "0.80.0", "@sentry/nextjs": "^7.36.0", "@tailwindcss/typography": "^0.5.9", + "@tiptap/extension-code-block-lowlight": "^2.0.4", "@tiptap/extension-color": "^2.0.4", "@tiptap/extension-highlight": "^2.0.4", + "@tiptap/extension-horizontal-rule": "^2.0.4", "@tiptap/extension-image": "^2.0.4", "@tiptap/extension-link": "^2.0.4", "@tiptap/extension-placeholder": "^2.0.4", @@ -39,14 +41,17 @@ "@tiptap/pm": "^2.0.4", "@tiptap/react": "^2.0.4", "@tiptap/starter-kit": "^2.0.4", + "@tiptap/suggestion": "^2.0.4", "@types/lodash.debounce": "^4.0.7", "@types/react-datepicker": "^4.8.0", "axios": "^1.1.3", "clsx": "^2.0.0", "cmdk": "^0.2.0", "dotenv": "^16.0.3", + "highlight.js": "^11.8.0", "js-cookie": "^3.0.1", "lodash.debounce": "^4.0.8", + "lowlight": "^2.9.0", "lucide-react": "^0.263.1", "next": "12.3.2", "next-pwa": "^5.6.0", @@ -60,10 +65,13 @@ "react-dropzone": "^14.2.3", "react-hook-form": "^7.38.0", "react-markdown": "^8.0.7", + "sonner": "^0.6.2", "swr": "^2.1.3", "tailwind-merge": "^1.14.0", + "tailwindcss-animate": "^1.0.6", "tiptap-markdown": "^0.8.2", "tlds": "^1.238.0", + "use-debounce": "^9.0.4", "uuid": "^9.0.0" }, "devDependencies": { From a6ae849a810a432aff60cee45f3704e40a1e2dce Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Sat, 5 Aug 2023 04:53:10 +0530 Subject: [PATCH 07/42] saving with debounce logic added and it's stored in backend --- .../components/issues/description-form.tsx | 69 +++++-------------- apps/app/components/issues/tiptap.tsx | 25 ++++--- 2 files changed, 35 insertions(+), 59 deletions(-) diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index fb7d574ee12..4353036b347 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -1,21 +1,11 @@ import { FC, useCallback, useEffect, useState } from "react"; -import dynamic from "next/dynamic"; - // react-hook-form import { Controller, useForm } from "react-hook-form"; // hooks import useReloadConfirmations from "hooks/use-reload-confirmation"; // components -import { Loader, TextArea } from "components/ui"; -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { -// ssr: false, -// loading: () => ( -// -// -// -// ), -// }); +import { TextArea } from "components/ui"; import Tiptap from "./tiptap"; // types @@ -65,7 +55,8 @@ export const IssueDescriptionForm: FC = ({ const handleDescriptionFormSubmit = useCallback( async (formData: Partial) => { - if (!formData.name || formData.name.length === 0 || formData.name.length > 255) return; + console.log("formdata", formData) + if (!formData?.name || formData?.name.length === 0 || formData?.name.length > 255) return; await handleFormSubmit({ name: formData.name ?? "", @@ -122,51 +113,29 @@ export const IssueDescriptionForm: FC = ({ { + render={({ field: { value, onChange } }) => { if (!value && !watch("description_html")) return <>; return ( - { + onChange(description); + setValue("description_html", description_html); + handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting(false)); + }} /> - // { - // setShowAlert(true); - // setValue("description", jsonValue); - // }} - // onHTMLChange={(htmlValue) => { - // setShowAlert(true); - // setValue("description_html", htmlValue); - // }} - // onBlur={() => { - // setIsSubmitting(true); - // handleSubmit(handleDescriptionFormSubmit)() - // .then(() => setShowAlert(false)) - // .finally(() => setIsSubmitting(false)); - // }} - // placeholder="Description" - // editable={isAllowed} - // /> ); }} /> - {isSubmitting && ( -
- Saving... -
- )} +
+ {isSubmitting ? "Saving..." : "Saved"} +
); diff --git a/apps/app/components/issues/tiptap.tsx b/apps/app/components/issues/tiptap.tsx index 9e298ef3c9e..8909e4de198 100644 --- a/apps/app/components/issues/tiptap.tsx +++ b/apps/app/components/issues/tiptap.tsx @@ -1,6 +1,5 @@ -import Placeholder from '@tiptap/extension-placeholder'; import { useEditor, EditorContent } from '@tiptap/react'; -import StarterKit from '@tiptap/starter-kit'; +import { useDebouncedCallback } from 'use-debounce'; import { EditorBubbleMenu } from './EditorBubbleMenu'; import { TiptapExtensions } from './extensions'; import { TiptapEditorProps } from "./props"; @@ -10,21 +9,29 @@ type TiptapProps = { noBorder?: boolean; borderOnFocus?: boolean; customClassName?: string; + onChange?: (json: any, html: string) => void; + setIsSubmitting?: (isSubmitting: boolean) => void; } -const Tiptap = ({ value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { +const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { const editor = useEditor({ editorProps: TiptapEditorProps, extensions: TiptapExtensions, - // extensions: [ - // StarterKit, - // Placeholder.configure({ - // placeholder: 'Description...', - // }) - // ], content: value, + onUpdate: async ({ editor }) => { + setIsSubmitting(true); + debouncedUpdates({ onChange, editor }); + } }); + const debouncedUpdates = useDebouncedCallback(async ({ onChange, editor }) => { + setTimeout(async () => { + if (onChange) { + onChange(editor.getJSON(), editor.getHTML()); + } + }, 500); + }, 1000); + const editorClassNames = `mt-2 p-3 relative focus:outline-none rounded-md focus:border-custom-border-200 ${noBorder ? '' : 'border border-custom-border-200' } ${borderOnFocus ? 'focus:border border-custom-border-200' : 'focus:border-0' From 63c7bc2d684e395a484e6cef9e2526372b2882cb Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Mon, 7 Aug 2023 21:02:39 +0530 Subject: [PATCH 08/42] added migration support by updating to html --- apps/app/components/command-palette/command-pallette.tsx | 2 +- apps/app/components/issues/description-form.tsx | 7 ++++--- apps/app/components/issues/extensions.tsx | 4 ++-- apps/app/components/issues/tiptap.tsx | 9 ++++++--- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/app/components/command-palette/command-pallette.tsx b/apps/app/components/command-palette/command-pallette.tsx index 2a8a4aa4db0..0d5b37ada40 100644 --- a/apps/app/components/command-palette/command-pallette.tsx +++ b/apps/app/components/command-palette/command-pallette.tsx @@ -82,7 +82,7 @@ export const CommandPalette: React.FC = () => { !(e.target instanceof HTMLTextAreaElement) && !(e.target instanceof HTMLInputElement) && // !(e.target as Element).classList?.contains("remirror-editor") && - !(e.target as Element).closest(".tiptap-editor-container") + !(e.target as Element)?.closest(".tiptap-editor-container") ) { if ((ctrlKey || metaKey) && keyPressed === "k") { e.preventDefault(); diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index 4353036b347..d190a4092ca 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -111,7 +111,7 @@ export const IssueDescriptionForm: FC = ({ {errors.name ? errors.name.message : null}
{ if (!value && !watch("description_html")) return <>; @@ -125,8 +125,9 @@ export const IssueDescriptionForm: FC = ({ } setIsSubmitting={setIsSubmitting} onChange={(description: Object, description_html: string) => { - onChange(description); - setValue("description_html", description_html); + onChange(description_html); + // setValue("description_html", description_html); + setValue("description", description); handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting(false)); }} /> diff --git a/apps/app/components/issues/extensions.tsx b/apps/app/components/issues/extensions.tsx index 15e59a1c5f1..403495fa4de 100644 --- a/apps/app/components/issues/extensions.tsx +++ b/apps/app/components/issues/extensions.tsx @@ -104,7 +104,7 @@ export const TiptapExtensions = [ return `Heading ${node.attrs.level}`; } - return "Press '/' for commands, or 'Ctrl + Space' for AI autocomplete..."; + return "Press '/' for commands..."; }, includeChildren: true, }), @@ -127,7 +127,7 @@ export const TiptapExtensions = [ nested: true, }), Markdown.configure({ - html: false, + html: true, transformCopiedText: true, }), ]; diff --git a/apps/app/components/issues/tiptap.tsx b/apps/app/components/issues/tiptap.tsx index 8909e4de198..67380a74219 100644 --- a/apps/app/components/issues/tiptap.tsx +++ b/apps/app/components/issues/tiptap.tsx @@ -1,4 +1,5 @@ -import { useEditor, EditorContent } from '@tiptap/react'; +import { useEditor, EditorContent, generateText } from '@tiptap/react'; +import StarterKit from '@tiptap/starter-kit'; import { useDebouncedCallback } from 'use-debounce'; import { EditorBubbleMenu } from './EditorBubbleMenu'; import { TiptapExtensions } from './extensions'; @@ -10,7 +11,7 @@ type TiptapProps = { borderOnFocus?: boolean; customClassName?: string; onChange?: (json: any, html: string) => void; - setIsSubmitting?: (isSubmitting: boolean) => void; + setIsSubmitting: (isSubmitting: boolean) => void; } const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { @@ -45,7 +46,9 @@ const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, cus className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} > {editor && } - +
+ +
); }; From c078d59916f75755a6d3229ec75441c4ec56785b Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Tue, 8 Aug 2023 16:20:19 +0530 Subject: [PATCH 09/42] Image uploads done --- .../command-palette/command-pallette.tsx | 2 +- apps/app/components/issues/extensions.tsx | 9 +- .../issues/plugins/UploadHelper.tsx | 28 +++++ .../issues/plugins/upload-image.tsx | 119 ++++++++++++++++++ apps/app/components/issues/props.ts | 54 ++++++++ apps/app/components/issues/props.tsx | 18 --- apps/app/components/issues/tiptap.tsx | 5 +- .../projects/[projectId]/issues/[issueId].tsx | 1 + 8 files changed, 213 insertions(+), 23 deletions(-) create mode 100644 apps/app/components/issues/plugins/UploadHelper.tsx create mode 100644 apps/app/components/issues/plugins/upload-image.tsx create mode 100644 apps/app/components/issues/props.ts delete mode 100644 apps/app/components/issues/props.tsx diff --git a/apps/app/components/command-palette/command-pallette.tsx b/apps/app/components/command-palette/command-pallette.tsx index 0d5b37ada40..151002c9eab 100644 --- a/apps/app/components/command-palette/command-pallette.tsx +++ b/apps/app/components/command-palette/command-pallette.tsx @@ -82,7 +82,7 @@ export const CommandPalette: React.FC = () => { !(e.target instanceof HTMLTextAreaElement) && !(e.target instanceof HTMLInputElement) && // !(e.target as Element).classList?.contains("remirror-editor") && - !(e.target as Element)?.closest(".tiptap-editor-container") + (e.target === document || (e.target instanceof Element && !e.target.closest(".tiptap-editor-container"))) ) { if ((ctrlKey || metaKey) && keyPressed === "k") { e.preventDefault(); diff --git a/apps/app/components/issues/extensions.tsx b/apps/app/components/issues/extensions.tsx index 403495fa4de..f34d32fe447 100644 --- a/apps/app/components/issues/extensions.tsx +++ b/apps/app/components/issues/extensions.tsx @@ -18,9 +18,16 @@ import { InputRule } from "@tiptap/core"; import ts from 'highlight.js/lib/languages/typescript' import 'highlight.js/styles/github-dark.css'; +import UploadImagesPlugin from "./plugins/upload-image"; lowlight.registerLanguage('ts', ts) +const CustomImage = TiptapImage.extend({ + addProseMirrorPlugins() { + return [UploadImagesPlugin()]; + }, +}); + export const TiptapExtensions = [ StarterKit.configure({ bulletList: { @@ -92,7 +99,7 @@ export const TiptapExtensions = [ "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", }, }), - TiptapImage.configure({ + CustomImage.configure({ allowBase64: true, HTMLAttributes: { class: "rounded-lg border border-stone-200", diff --git a/apps/app/components/issues/plugins/UploadHelper.tsx b/apps/app/components/issues/plugins/UploadHelper.tsx new file mode 100644 index 00000000000..5a64d4c0a55 --- /dev/null +++ b/apps/app/components/issues/plugins/UploadHelper.tsx @@ -0,0 +1,28 @@ +import fileService from 'services/file.service'; + +const UploadImageHandler = (file: File): Promise => { + try { + const formData = new FormData(); + formData.append("asset", file); + formData.append("attributes", JSON.stringify({})); + + return new Promise(async (resolve, reject) => { + const imageUrl = await fileService + .uploadFile("plane", formData) + .then((response) => response.asset); + + console.log(imageUrl, "imageurl") + const image = new Image(); + image.src = imageUrl; + image.onload = () => { + resolve(imageUrl); + }; + }) + } + catch (error) { + console.log(error) + return Promise.reject(error); + } +}; + +export default UploadImageHandler; diff --git a/apps/app/components/issues/plugins/upload-image.tsx b/apps/app/components/issues/plugins/upload-image.tsx new file mode 100644 index 00000000000..b1ea94cc259 --- /dev/null +++ b/apps/app/components/issues/plugins/upload-image.tsx @@ -0,0 +1,119 @@ +import { EditorState, Plugin, PluginKey } from "@tiptap/pm/state"; +import { Decoration, DecorationSet, EditorView } from "@tiptap/pm/view"; +import fileService from "services/file.service"; + +const uploadKey = new PluginKey("upload-image"); + +const UploadImagesPlugin = () => + new Plugin({ + key: uploadKey, + state: { + init() { + return DecorationSet.empty; + }, + apply(tr, set) { + set = set.map(tr.mapping, tr.doc); + // See if the transaction adds or removes any placeholders + const action = tr.getMeta(this); + if (action && action.add) { + const { id, pos, src } = action.add; + + const placeholder = document.createElement("div"); + placeholder.setAttribute("class", "img-placeholder"); + const image = document.createElement("img"); + image.setAttribute( + "class", + "opacity-10 rounded-lg border border-stone-200", + ); + image.src = src; + placeholder.appendChild(image); + const deco = Decoration.widget(pos + 1, placeholder, { + id, + }); + set = set.add(tr.doc, [deco]); + } else if (action && action.remove) { + set = set.remove( + set.find(null, null, (spec) => spec.id == action.remove.id), + ); + } + return set; + }, + }, + props: { + decorations(state) { + return this.getState(state); + }, + }, + }); + +export default UploadImagesPlugin; + +function findPlaceholder(state: EditorState, id: {}) { + const decos = uploadKey.getState(state); + const found = decos.find(null, null, (spec) => spec.id == id); + return found.length ? found[0].from : null; +} + +export async function startImageUpload(file: File, view: EditorView, pos: number) { + if (!file.type.includes("image/")) { + return; + } else if (file.size / 1024 / 1024 > 20) { + return; + } + + const id = {}; + + const tr = view.state.tr; + if (!tr.selection.empty) tr.deleteSelection(); + + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = () => { + tr.setMeta(uploadKey, { + add: { + id, + pos, + src: reader.result, + }, + }); + view.dispatch(tr); + }; + + const src = await UploadImageHandler(file); + console.log(src, "src") + const { schema } = view.state; + pos = findPlaceholder(view.state, id); + + if (pos == null) return; + const imageSrc = typeof src === "object" ? reader.result : src; + + const node = schema.nodes.image.create({ src: imageSrc }); + const transaction = view.state.tr + .replaceWith(pos, pos, node) + .setMeta(uploadKey, { remove: { id } }); + view.dispatch(transaction); +} + +const UploadImageHandler = (file: File): Promise => { + try { + const formData = new FormData(); + formData.append("asset", file); + formData.append("attributes", JSON.stringify({})); + + return new Promise(async (resolve, reject) => { + const imageUrl = await fileService + .uploadFile("plane", formData) + .then((response) => response.asset); + + const image = new Image(); + image.src = imageUrl; + image.onload = () => { + resolve(imageUrl); + }; + }) + } + catch (error) { + console.log(error) + return Promise.reject(error); + } +}; diff --git a/apps/app/components/issues/props.ts b/apps/app/components/issues/props.ts new file mode 100644 index 00000000000..ea7f71b59ae --- /dev/null +++ b/apps/app/components/issues/props.ts @@ -0,0 +1,54 @@ +import { EditorProps } from "@tiptap/pm/view"; +import { startImageUpload } from "./plugins/upload-image"; + +export const TiptapEditorProps: EditorProps = { + attributes: { + class: `prose prose-brand max-w-full prose-headings:font-display font-default focus:outline-none`, + }, + handleDOMEvents: { + keydown: (_view, event) => { + // prevent default event listeners from firing when slash command is active + if (["ArrowUp", "ArrowDown", "Enter"].includes(event.key)) { + const slashCommand = document.querySelector("#slash-command"); + if (slashCommand) { + return true; + } + } + }, + }, + handlePaste: (view, event) => { + if ( + event.clipboardData && + event.clipboardData.files && + event.clipboardData.files[0] + ) { + event.preventDefault(); + const file = event.clipboardData.files[0]; + const pos = view.state.selection.from; + + startImageUpload(file, view, pos); + return true; + } + return false; + }, + handleDrop: (view, event, _slice, moved) => { + if ( + !moved && + event.dataTransfer && + event.dataTransfer.files && + event.dataTransfer.files[0] + ) { + event.preventDefault(); + const file = event.dataTransfer.files[0]; + const coordinates = view.posAtCoords({ + left: event.clientX, + top: event.clientY, + }); + // here we deduct 1 from the pos or else the image will create an extra node + startImageUpload(file, view, coordinates.pos - 1); + return true; + } + return false; + }, +}; + diff --git a/apps/app/components/issues/props.tsx b/apps/app/components/issues/props.tsx deleted file mode 100644 index 6470b37c13d..00000000000 --- a/apps/app/components/issues/props.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { EditorProps } from "@tiptap/pm/view"; - -export const TiptapEditorProps: EditorProps = { - attributes: { - class: `prose prose-brand max-w-full prose-headings:font-display font-default focus:outline-none`, - }, - handleDOMEvents: { - keydown: (_view, event) => { - // prevent default event listeners from firing when slash command is active - if (["ArrowUp", "ArrowDown", "Enter"].includes(event.key)) { - const slashCommand = document.querySelector("#slash-command"); - if (slashCommand) { - return true; - } - } - }, - }, -}; diff --git a/apps/app/components/issues/tiptap.tsx b/apps/app/components/issues/tiptap.tsx index 67380a74219..ddadc9d13a8 100644 --- a/apps/app/components/issues/tiptap.tsx +++ b/apps/app/components/issues/tiptap.tsx @@ -1,9 +1,8 @@ -import { useEditor, EditorContent, generateText } from '@tiptap/react'; -import StarterKit from '@tiptap/starter-kit'; +import { useEditor, EditorContent } from '@tiptap/react'; import { useDebouncedCallback } from 'use-debounce'; import { EditorBubbleMenu } from './EditorBubbleMenu'; import { TiptapExtensions } from './extensions'; -import { TiptapEditorProps } from "./props"; +import { TiptapEditorProps } from './props'; type TiptapProps = { value: string; diff --git a/apps/app/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx b/apps/app/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx index d5f7c8ec622..cf0aa5de70e 100644 --- a/apps/app/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx +++ b/apps/app/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx @@ -42,6 +42,7 @@ const defaultValues = { const IssueDetailsPage: NextPage = () => { const router = useRouter(); const { workspaceSlug, projectId, issueId } = router.query; + console.log(workspaceSlug, "workspaceSlug") const { user } = useUserAuth(); From 5228ab8d0a25c441c2333c35efd9ead7a1900458 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Wed, 9 Aug 2023 01:57:08 +0530 Subject: [PATCH 10/42] improved file structure and delete image function implemented --- .gitignore | 4 +- .../components/issues/description-form.tsx | 3 +- .../issues/plugins/UploadHelper.tsx | 28 ----- apps/app/components/issues/tiptap.tsx | 55 --------- .../bubble-menu/index.tsx} | 2 +- .../bubble-menu}/link-selector.tsx | 2 +- .../bubble-menu}/node-selector.tsx | 4 +- .../extensions/index.tsx} | 8 +- apps/app/components/tiptap/index.tsx | 110 ++++++++++++++++++ .../plugins/upload-image.tsx | 2 +- .../{issues/props.ts => tiptap/props.tsx} | 0 .../slash-command/index.tsx} | 23 ++++ .../components/{issues => tiptap}/utils.ts | 0 apps/app/package.json | 1 + apps/app/services/file.service.ts | 9 +- 15 files changed, 152 insertions(+), 99 deletions(-) delete mode 100644 apps/app/components/issues/plugins/UploadHelper.tsx delete mode 100644 apps/app/components/issues/tiptap.tsx rename apps/app/components/{issues/EditorBubbleMenu.tsx => tiptap/bubble-menu/index.tsx} (99%) rename apps/app/components/{issues => tiptap/bubble-menu}/link-selector.tsx (98%) rename apps/app/components/{issues => tiptap/bubble-menu}/node-selector.tsx (97%) rename apps/app/components/{issues/extensions.tsx => tiptap/extensions/index.tsx} (93%) create mode 100644 apps/app/components/tiptap/index.tsx rename apps/app/components/{issues => tiptap}/plugins/upload-image.tsx (99%) rename apps/app/components/{issues/props.ts => tiptap/props.tsx} (100%) rename apps/app/components/{issues/slash-command.tsx => tiptap/slash-command/index.tsx} (92%) rename apps/app/components/{issues => tiptap}/utils.ts (100%) diff --git a/.gitignore b/.gitignore index 921881df4db..1e99e102ad5 100644 --- a/.gitignore +++ b/.gitignore @@ -70,4 +70,6 @@ package-lock.json # lock files package-lock.json pnpm-lock.yaml -pnpm-workspace.yaml \ No newline at end of file +pnpm-workspace.yaml + +.npmrc diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index d190a4092ca..fcf10073dc8 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -7,9 +7,9 @@ import useReloadConfirmations from "hooks/use-reload-confirmation"; // components import { TextArea } from "components/ui"; -import Tiptap from "./tiptap"; // types import { IIssue } from "types"; +import Tiptap from "components/tiptap"; export interface IssueDescriptionFormValues { name: string; @@ -126,7 +126,6 @@ export const IssueDescriptionForm: FC = ({ setIsSubmitting={setIsSubmitting} onChange={(description: Object, description_html: string) => { onChange(description_html); - // setValue("description_html", description_html); setValue("description", description); handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting(false)); }} diff --git a/apps/app/components/issues/plugins/UploadHelper.tsx b/apps/app/components/issues/plugins/UploadHelper.tsx deleted file mode 100644 index 5a64d4c0a55..00000000000 --- a/apps/app/components/issues/plugins/UploadHelper.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import fileService from 'services/file.service'; - -const UploadImageHandler = (file: File): Promise => { - try { - const formData = new FormData(); - formData.append("asset", file); - formData.append("attributes", JSON.stringify({})); - - return new Promise(async (resolve, reject) => { - const imageUrl = await fileService - .uploadFile("plane", formData) - .then((response) => response.asset); - - console.log(imageUrl, "imageurl") - const image = new Image(); - image.src = imageUrl; - image.onload = () => { - resolve(imageUrl); - }; - }) - } - catch (error) { - console.log(error) - return Promise.reject(error); - } -}; - -export default UploadImageHandler; diff --git a/apps/app/components/issues/tiptap.tsx b/apps/app/components/issues/tiptap.tsx deleted file mode 100644 index ddadc9d13a8..00000000000 --- a/apps/app/components/issues/tiptap.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useEditor, EditorContent } from '@tiptap/react'; -import { useDebouncedCallback } from 'use-debounce'; -import { EditorBubbleMenu } from './EditorBubbleMenu'; -import { TiptapExtensions } from './extensions'; -import { TiptapEditorProps } from './props'; - -type TiptapProps = { - value: string; - noBorder?: boolean; - borderOnFocus?: boolean; - customClassName?: string; - onChange?: (json: any, html: string) => void; - setIsSubmitting: (isSubmitting: boolean) => void; -} - -const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { - const editor = useEditor({ - editorProps: TiptapEditorProps, - extensions: TiptapExtensions, - content: value, - onUpdate: async ({ editor }) => { - setIsSubmitting(true); - debouncedUpdates({ onChange, editor }); - } - }); - - const debouncedUpdates = useDebouncedCallback(async ({ onChange, editor }) => { - setTimeout(async () => { - if (onChange) { - onChange(editor.getJSON(), editor.getHTML()); - } - }, 500); - }, 1000); - - const editorClassNames = `mt-2 p-3 relative focus:outline-none rounded-md focus:border-custom-border-200 - ${noBorder ? '' : 'border border-custom-border-200' - } ${borderOnFocus ? 'focus:border border-custom-border-200' : 'focus:border-0' - } ${customClassName}`; - - return ( -
{ - editor?.chain().focus().run(); - }} - className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} - > - {editor && } -
- -
-
- ); -}; - -export default Tiptap; diff --git a/apps/app/components/issues/EditorBubbleMenu.tsx b/apps/app/components/tiptap/bubble-menu/index.tsx similarity index 99% rename from apps/app/components/issues/EditorBubbleMenu.tsx rename to apps/app/components/tiptap/bubble-menu/index.tsx index 32ad3f2a9d2..00b67139336 100644 --- a/apps/app/components/issues/EditorBubbleMenu.tsx +++ b/apps/app/components/tiptap/bubble-menu/index.tsx @@ -10,7 +10,7 @@ import { import { NodeSelector } from "./node-selector"; import { LinkSelector } from "./link-selector"; -import { cn } from "./utils"; +import { cn } from "../utils" export interface BubbleMenuItem { name: string; diff --git a/apps/app/components/issues/link-selector.tsx b/apps/app/components/tiptap/bubble-menu/link-selector.tsx similarity index 98% rename from apps/app/components/issues/link-selector.tsx rename to apps/app/components/tiptap/bubble-menu/link-selector.tsx index 7649c271ca7..62331ebeee9 100644 --- a/apps/app/components/issues/link-selector.tsx +++ b/apps/app/components/tiptap/bubble-menu/link-selector.tsx @@ -1,7 +1,7 @@ import { Editor } from "@tiptap/core"; import { Check, Trash } from "lucide-react"; import { Dispatch, FC, SetStateAction, useEffect, useRef } from "react"; -import { cn } from './utils'; +import { cn } from '../utils'; interface LinkSelectorProps { editor: Editor; diff --git a/apps/app/components/issues/node-selector.tsx b/apps/app/components/tiptap/bubble-menu/node-selector.tsx similarity index 97% rename from apps/app/components/issues/node-selector.tsx rename to apps/app/components/tiptap/bubble-menu/node-selector.tsx index ebb9767ec18..e74bfa40097 100644 --- a/apps/app/components/issues/node-selector.tsx +++ b/apps/app/components/tiptap/bubble-menu/node-selector.tsx @@ -13,8 +13,8 @@ import { } from "lucide-react"; import { Dispatch, FC, SetStateAction } from "react"; -import { BubbleMenuItem } from "./EditorBubbleMenu"; -import { cn } from "./utils"; +import { BubbleMenuItem } from "../bubble-menu"; +import { cn } from "../utils"; interface NodeSelectorProps { editor: Editor; diff --git a/apps/app/components/issues/extensions.tsx b/apps/app/components/tiptap/extensions/index.tsx similarity index 93% rename from apps/app/components/issues/extensions.tsx rename to apps/app/components/tiptap/extensions/index.tsx index f34d32fe447..81a6aa6eb7d 100644 --- a/apps/app/components/issues/extensions.tsx +++ b/apps/app/components/tiptap/extensions/index.tsx @@ -12,13 +12,14 @@ import { Markdown } from "tiptap-markdown"; import Highlight from "@tiptap/extension-highlight"; import CodeBlockLowlight from "@tiptap/extension-code-block-lowlight"; import { lowlight } from 'lowlight/lib/core' -import SlashCommand from "./slash-command"; +import SlashCommand from "../slash-command"; import { InputRule } from "@tiptap/core"; import ts from 'highlight.js/lib/languages/typescript' import 'highlight.js/styles/github-dark.css'; -import UploadImagesPlugin from "./plugins/upload-image"; +import UploadImagesPlugin from "../plugins/upload-image"; +import UniqueID from "@tiptap-pro/extension-unique-id"; lowlight.registerLanguage('ts', ts) @@ -115,6 +116,9 @@ export const TiptapExtensions = [ }, includeChildren: true, }), + UniqueID.configure({ + types: ['heading', 'paragraph', 'image'], + }), SlashCommand, TiptapUnderline, TextStyle, diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx new file mode 100644 index 00000000000..d0365769d78 --- /dev/null +++ b/apps/app/components/tiptap/index.tsx @@ -0,0 +1,110 @@ +import { useEditor, EditorContent } from '@tiptap/react'; +import { useDebouncedCallback } from 'use-debounce'; +import { EditorBubbleMenu } from './bubble-menu'; +import { TiptapExtensions } from './extensions'; +import { TiptapEditorProps } from './props'; +import { Node } from "@tiptap/pm/model"; +import { Editor as CoreEditor } from "@tiptap/core"; +import { useCallback, useRef } from 'react'; +import { EditorState } from '@tiptap/pm/state'; +import fileService from 'services/file.service'; + +type TiptapProps = { + value: string; + noBorder?: boolean; + borderOnFocus?: boolean; + customClassName?: string; + onChange?: (json: any, html: string) => void; + setIsSubmitting: (isSubmitting: boolean) => void; +} + +const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { + const editor = useEditor({ + editorProps: TiptapEditorProps, + extensions: TiptapExtensions, + content: value, + onUpdate: async ({ editor }) => { + setIsSubmitting(true); + checkForNodeDeletions(editor) + debouncedUpdates({ onChange, editor }); + } + }); + + const previousState = useRef(); + + const extractPath = useCallback((url: string, searchString: string) => { + if (url.startsWith(searchString)) { + console.log("chala", url, searchString) + return url.substring(searchString.length); + } + }, []); + + const onNodeDeleted = useCallback( + async (node: Node) => { + if (node.type.name === 'image') { + const assetUrlWithWorkspaceId = new URL(node.attrs.src).pathname.substring(1); + const resStatus = await fileService.deleteFile(assetUrlWithWorkspaceId); + if (resStatus === 204) { + console.log("file deleted successfully"); + } + } + }, + [], + ); + + const checkForNodeDeletions = useCallback( + (editor: CoreEditor) => { + const prevNodesById: Record = {}; + previousState.current?.doc.forEach((node) => { + if (node.attrs.id) { + prevNodesById[node.attrs.id] = node; + } + }); + + const nodesById: Record = {}; + editor.state?.doc.forEach((node) => { + if (node.attrs.id) { + nodesById[node.attrs.id] = node; + } + }); + + previousState.current = editor.state; + + for (const [id, node] of Object.entries(prevNodesById)) { + if (nodesById[id] === undefined) { + onNodeDeleted(node); + } + } + }, + [onNodeDeleted], + ); + + const debouncedUpdates = useDebouncedCallback(async ({ onChange, editor }) => { + setTimeout(async () => { + if (onChange) { + onChange(editor.getJSON(), editor.getHTML()); + } + }, 500); + }, 1000); + + const editorClassNames = `mt-2 p-3 relative focus:outline-none rounded-md focus:border-custom-border-200 + ${noBorder ? '' : 'border border-custom-border-200' + } ${borderOnFocus ? 'focus:border border-custom-border-200' : 'focus:border-0' + } ${customClassName}`; + + return ( +
{ + editor?.chain().focus().run(); + }} + className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} + > + {editor && } +
+ +
+
+ ); +}; + +export default Tiptap; diff --git a/apps/app/components/issues/plugins/upload-image.tsx b/apps/app/components/tiptap/plugins/upload-image.tsx similarity index 99% rename from apps/app/components/issues/plugins/upload-image.tsx rename to apps/app/components/tiptap/plugins/upload-image.tsx index b1ea94cc259..d92aa38aacf 100644 --- a/apps/app/components/issues/plugins/upload-image.tsx +++ b/apps/app/components/tiptap/plugins/upload-image.tsx @@ -42,7 +42,7 @@ const UploadImagesPlugin = () => props: { decorations(state) { return this.getState(state); - }, + } }, }); diff --git a/apps/app/components/issues/props.ts b/apps/app/components/tiptap/props.tsx similarity index 100% rename from apps/app/components/issues/props.ts rename to apps/app/components/tiptap/props.tsx diff --git a/apps/app/components/issues/slash-command.tsx b/apps/app/components/tiptap/slash-command/index.tsx similarity index 92% rename from apps/app/components/issues/slash-command.tsx rename to apps/app/components/tiptap/slash-command/index.tsx index d869001cd2f..ab93945a927 100644 --- a/apps/app/components/issues/slash-command.tsx +++ b/apps/app/components/tiptap/slash-command/index.tsx @@ -21,7 +21,9 @@ import { Code, MinusSquare, CheckSquare, + ImageIcon, } from "lucide-react"; +import { startImageUpload } from "../plugins/upload-image"; interface CommandItemProps { title: string; @@ -180,6 +182,27 @@ const getSuggestionItems = ({ query }: { query: string }) => command: ({ editor, range }: CommandProps) => editor.chain().focus().deleteRange(range).toggleCodeBlock().run(), }, + { + title: "Image", + description: "Upload an image from your computer.", + searchTerms: ["photo", "picture", "media"], + icon: , + command: ({ editor, range }: CommandProps) => { + editor.chain().focus().deleteRange(range).run(); + // upload image + const input = document.createElement("input"); + input.type = "file"; + input.accept = "image/*"; + input.onchange = async () => { + if (input.files?.length) { + const file = input.files[0]; + const pos = editor.view.state.selection.from; + startImageUpload(file, editor.view, pos); + } + }; + input.click(); + }, + }, ].filter((item) => { if (typeof query === "string" && query.length > 0) { const search = query.toLowerCase(); diff --git a/apps/app/components/issues/utils.ts b/apps/app/components/tiptap/utils.ts similarity index 100% rename from apps/app/components/issues/utils.ts rename to apps/app/components/tiptap/utils.ts diff --git a/apps/app/package.json b/apps/app/package.json index 77860d7d0e5..d9911841cc4 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -27,6 +27,7 @@ "@nivo/scatterplot": "0.80.0", "@sentry/nextjs": "^7.36.0", "@tailwindcss/typography": "^0.5.9", + "@tiptap-pro/extension-unique-id": "^2.1.0", "@tiptap/extension-code-block-lowlight": "^2.0.4", "@tiptap/extension-color": "^2.0.4", "@tiptap/extension-highlight": "^2.0.4", diff --git a/apps/app/services/file.service.ts b/apps/app/services/file.service.ts index ad87e3a1903..a80b2ce800c 100644 --- a/apps/app/services/file.service.ts +++ b/apps/app/services/file.service.ts @@ -40,12 +40,9 @@ class FileServices extends APIService { }); } - async deleteFile(workspaceId: string, assetUrl: string): Promise { - const lastIndex = assetUrl.lastIndexOf("/"); - const assetId = assetUrl.substring(lastIndex + 1); - - return this.delete(`/api/workspaces/file-assets/${workspaceId}/${assetId}/`) - .then((response) => response?.data) + async deleteFile(assetUrlWithWorkspaceId: string): Promise { + return this.delete(`/api/workspaces/file-assets/${assetUrlWithWorkspaceId}/`) + .then((response) => response?.status) .catch((error) => { throw error?.response?.data; }); From 5c290e1302bfd3d63b824c7ccee475cf4a88d6fa Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Wed, 9 Aug 2023 09:42:57 +0530 Subject: [PATCH 11/42] Integrated tiptap with Issue Modal --- apps/app/components/issues/form.tsx | 52 +++++++++++-------- .../components/tiptap/extensions/index.tsx | 6 +-- .../tiptap/hooks/useDebouncedUpdates.tsx | 18 +++++++ .../tiptap/hooks/useNodeDeletion.tsx | 51 ++++++++++++++++++ apps/app/components/tiptap/index.tsx | 13 ++--- 5 files changed, 104 insertions(+), 36 deletions(-) create mode 100644 apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx create mode 100644 apps/app/components/tiptap/hooks/useNodeDeletion.tsx diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index e16bd317f06..8d66edd219b 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -36,6 +36,7 @@ import { import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline"; // types import type { ICurrentUserResponse, IIssue, ISearchIssueResponse } from "types"; +import Tiptap from "components/tiptap"; // rich-text-editor // const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { // ssr: false, @@ -145,6 +146,8 @@ export const IssueForm: FC = ({ reValidateMode: "onChange", }); + console.log("values", getValues()); + const issueName = watch("name"); const handleCreateUpdateIssue = async (formData: Partial) => { @@ -338,9 +341,8 @@ export const IssueForm: FC = ({ {issueName && issueName !== "" && ( - {/* ( */} - {/* setValue("description", jsonValue)} */} - {/* onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} */} - {/* placeholder="Description" */} - {/* ref={editorRef} */} - {/* /> */} - {/* )} */} - {/* /> */} + { + if (!value && !watch("description_html")) return <>; + + return ( + { + onChange(description_html); + setValue("description", description); + }} + /> + ); + }} + /> { @@ -523,7 +529,7 @@ export const IssueForm: FC = ({ onClick={() => setCreateMore((prevData) => !prevData)} > Create more - {}} size="md" /> + { }} size="md" />
Discard @@ -533,8 +539,8 @@ export const IssueForm: FC = ({ ? "Updating Issue..." : "Update Issue" : isSubmitting - ? "Adding Issue..." - : "Add Issue"} + ? "Adding Issue..." + : "Add Issue"}
diff --git a/apps/app/components/tiptap/extensions/index.tsx b/apps/app/components/tiptap/extensions/index.tsx index 81a6aa6eb7d..14d7106eb4c 100644 --- a/apps/app/components/tiptap/extensions/index.tsx +++ b/apps/app/components/tiptap/extensions/index.tsx @@ -54,7 +54,7 @@ export const TiptapExtensions = [ code: { HTMLAttributes: { class: - "rounded-md bg-stone-200 px-1 py-1 font-mono font-medium text-stone-900", + "rounded-md bg-custom-bg-1000 px-1 py-1 font-mono font-medium text-stone-900", spellcheck: "false", }, }, @@ -62,7 +62,7 @@ export const TiptapExtensions = [ horizontalRule: false, dropcursor: { color: "#DBEAFE", - width: 4, + width: 2, }, gapcursor: false, }), @@ -117,7 +117,7 @@ export const TiptapExtensions = [ includeChildren: true, }), UniqueID.configure({ - types: ['heading', 'paragraph', 'image'], + types: ['image'], }), SlashCommand, TiptapUnderline, diff --git a/apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx b/apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx new file mode 100644 index 00000000000..0fc835a98bb --- /dev/null +++ b/apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx @@ -0,0 +1,18 @@ +import { useDebouncedCallback } from 'use-debounce'; +import { Editor as CoreEditor } from "@tiptap/core"; + +type DebouncedUpdatesProps = { + onChange?: (json: any, html: string) => void; + editor: CoreEditor | null; +}; + +export const useDebouncedUpdates = (props: DebouncedUpdatesProps) => + useDebouncedCallback(async () => { + setTimeout(async () => { + if (props.onChange) { + props.onChange(props.editor.getJSON(), props.editor.getHTML()); + } + }, 500); + }, 1000); +; + diff --git a/apps/app/components/tiptap/hooks/useNodeDeletion.tsx b/apps/app/components/tiptap/hooks/useNodeDeletion.tsx new file mode 100644 index 00000000000..9370947b667 --- /dev/null +++ b/apps/app/components/tiptap/hooks/useNodeDeletion.tsx @@ -0,0 +1,51 @@ +import { useCallback, useRef } from 'react'; +import { Node } from "@tiptap/pm/model"; +import { Editor as CoreEditor } from "@tiptap/core"; +import { EditorState } from '@tiptap/pm/state'; +import fileService from 'services/file.service'; + +export const useNodeDeletion = () => { + const previousState = useRef(); + + const onNodeDeleted = useCallback( + async (node: Node) => { + if (node.type.name === 'image') { + const assetUrlWithWorkspaceId = new URL(node.attrs.src).pathname.substring(1); + const resStatus = await fileService.deleteFile(assetUrlWithWorkspaceId); + if (resStatus === 204) { + console.log("file deleted successfully"); + } + } + }, + [], + ); + + const checkForNodeDeletions = useCallback( + (editor: CoreEditor) => { + const prevNodesById: Record = {}; + previousState.current?.doc.forEach((node) => { + if (node.attrs.id) { + prevNodesById[node.attrs.id] = node; + } + }); + + const nodesById: Record = {}; + editor.state?.doc.forEach((node) => { + if (node.attrs.id) { + nodesById[node.attrs.id] = node; + } + }); + + previousState.current = editor.state; + + for (const [id, node] of Object.entries(prevNodesById)) { + if (nodesById[id] === undefined) { + onNodeDeleted(node); + } + } + }, + [onNodeDeleted], + ); + + return { checkForNodeDeletions }; +}; diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index d0365769d78..d2103d50635 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -15,7 +15,7 @@ type TiptapProps = { borderOnFocus?: boolean; customClassName?: string; onChange?: (json: any, html: string) => void; - setIsSubmitting: (isSubmitting: boolean) => void; + setIsSubmitting?: (isSubmitting: boolean) => void; } const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { @@ -24,7 +24,7 @@ const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, cus extensions: TiptapExtensions, content: value, onUpdate: async ({ editor }) => { - setIsSubmitting(true); + setIsSubmitting?.(true); checkForNodeDeletions(editor) debouncedUpdates({ onChange, editor }); } @@ -32,13 +32,6 @@ const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, cus const previousState = useRef(); - const extractPath = useCallback((url: string, searchString: string) => { - if (url.startsWith(searchString)) { - console.log("chala", url, searchString) - return url.substring(searchString.length); - } - }, []); - const onNodeDeleted = useCallback( async (node: Node) => { if (node.type.name === 'image') { @@ -100,7 +93,7 @@ const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, cus className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} > {editor && } -
+
From 0b6d510cc7aeae9e318a4d7157ecb75715762e9a Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:20:15 +0530 Subject: [PATCH 12/42] added additional props and Tiptap Integration with Comments --- .../components/issues/comment/add-comment.tsx | 47 +++++++++++------- .../issues/comment/comment-card.tsx | 47 +++++++++++++----- .../components/issues/description-form.tsx | 4 ++ apps/app/components/issues/form.tsx | 1 + apps/app/components/issues/main-content.tsx | 48 +++++++++---------- 5 files changed, 96 insertions(+), 51 deletions(-) diff --git a/apps/app/components/issues/comment/add-comment.tsx b/apps/app/components/issues/comment/add-comment.tsx index 3b3cd21b081..157f56dce01 100644 --- a/apps/app/components/issues/comment/add-comment.tsx +++ b/apps/app/components/issues/comment/add-comment.tsx @@ -1,7 +1,6 @@ import React from "react"; import { useRouter } from "next/router"; -import dynamic from "next/dynamic"; import { mutate } from "swr"; @@ -12,11 +11,12 @@ import issuesServices from "services/issues.service"; // hooks import useToast from "hooks/use-toast"; // ui -import { Loader, SecondaryButton } from "components/ui"; +import { SecondaryButton } from "components/ui"; // types import type { ICurrentUserResponse, IIssueComment } from "types"; // fetch-keys import { PROJECT_ISSUES_ACTIVITY } from "constants/fetch-keys"; +import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; // const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { // ssr: false, @@ -34,7 +34,14 @@ import { PROJECT_ISSUES_ACTIVITY } from "constants/fetch-keys"; // >((props, ref) => ); // // WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; -// + +const TiptapEditor = React.forwardRef< + ITiptapRichTextEditor, + ITiptapRichTextEditor +>((props, ref) => ); + +TiptapEditor.displayName = "TiptapEditor"; + const defaultValues: Partial = { comment_json: "", comment_html: "", @@ -51,6 +58,7 @@ export const AddComment: React.FC = ({ issueId, user, disabled = false }) handleSubmit, control, setValue, + watch, formState: { isSubmitting }, reset, } = useForm({ defaultValues }); @@ -98,19 +106,26 @@ export const AddComment: React.FC = ({ issueId, user, disabled = false })
- {/* ( */} - {/* setValue("comment_json", jsonValue)} */} - {/* onHTMLChange={(htmlValue) => setValue("comment_html", htmlValue)} */} - {/* placeholder="Enter your comment..." */} - {/* ref={editorRef} */} - {/* /> */} - {/* )} */} - {/* /> */} + + { + onChange(comment_html); + setValue("comment_json", comment_json); + }} + /> + } + /> {isSubmitting ? "Adding..." : "Comment"} diff --git a/apps/app/components/issues/comment/comment-card.tsx b/apps/app/components/issues/comment/comment-card.tsx index 008290f433a..10da0b74e58 100644 --- a/apps/app/components/issues/comment/comment-card.tsx +++ b/apps/app/components/issues/comment/comment-card.tsx @@ -15,6 +15,7 @@ import { CommentReaction } from "components/issues"; import { timeAgo } from "helpers/date-time.helper"; // types import type { IIssueComment } from "types"; +import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; // const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { ssr: false }); // @@ -26,7 +27,14 @@ import type { IIssueComment } from "types"; // >((props, ref) => ); // // WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; -// + +const TiptapEditor = React.forwardRef< + ITiptapRichTextEditor, + ITiptapRichTextEditor +>((props, ref) => ); + +TiptapEditor.displayName = "TiptapEditor"; + type Props = { comment: IIssueComment; onSubmit: (comment: IIssueComment) => void; @@ -45,6 +53,7 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD formState: { isSubmitting }, handleSubmit, setFocus, + watch, setValue, } = useForm({ defaultValues: comment, @@ -55,9 +64,10 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD setIsEditing(false); onSubmit(formData); + console.log("watching", formData.comment_html) - editorRef.current?.setEditorValue(formData.comment_json); - showEditorRef.current?.setEditorValue(formData.comment_json); + editorRef.current?.setEditorValue(formData.comment_html); + showEditorRef.current?.setEditorValue(formData.comment_html); }; useEffect(() => { @@ -105,14 +115,24 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD className={`flex-col gap-2 ${isEditing ? "flex" : "hidden"}`} onSubmit={handleSubmit(onEnter)} > - { - setValue("comment_json", jsonValue); - setValue("comment_html", htmlValue); - }} - placeholder="Enter Your comment..." + {/* { */} + {/* setValue("comment_json", jsonValue); */} + {/* setValue("comment_html", htmlValue); */} + {/* }} */} + {/* placeholder="Enter Your comment..." */} + {/* ref={editorRef} */} + {/* /> */} + { + setValue("comment_json", comment_json); + setValue("comment_html", comment_html); + }} />
+ {/* = ({ comment, onSubmit, handleCommentD {/* customClassName="text-xs border border-custom-border-200 bg-custom-background-100" */} {/* ref={showEditorRef} */} {/* /> */} -
diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index fcf10073dc8..1eb02915f28 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -123,8 +123,12 @@ export const IssueDescriptionForm: FC = ({ ? watch("description_html") : value } + debouncedUpdatesEnabled={true} setIsSubmitting={setIsSubmitting} + customClassName="min-h-[150px]" + editorContentCustomClassNames="pt-9" onChange={(description: Object, description_html: string) => { + setIsSubmitting(true); onChange(description_html); setValue("description", description); handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting(false)); diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index 8d66edd219b..8f71c8e53c8 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -372,6 +372,7 @@ export const IssueForm: FC = ({ return ( = ({ isAllowed={memberRole.isMember || memberRole.isOwner || !uneditable} /> - {/* */} - {/**/} - {/*
*/} - {/* */} - {/*
*/} - {/*
*/} - {/*
*/} - {/*

Attachments

*/} - {/*
*/} - {/* */} - {/* */} - {/*
*/} - {/*
*/} - {/*
*/} - {/*

Comments/Activity

*/} - {/* */} - {/* */} + + +
+ +
+
+
+

Attachments

+
+ + +
+
+
+

Comments/Activity

+ +
); From b1dc5f3da16f1c1cb4286e694c2bd14493fa3c42 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:20:40 +0530 Subject: [PATCH 13/42] added tiptap integration with user activity feeds --- apps/app/components/core/feeds.tsx | 38 ++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/apps/app/components/core/feeds.tsx b/apps/app/components/core/feeds.tsx index 8144bfc97ca..d4781398d6b 100644 --- a/apps/app/components/core/feeds.tsx +++ b/apps/app/components/core/feeds.tsx @@ -15,6 +15,7 @@ import { Icon } from "components/ui"; // helpers import { renderShortDateWithYearFormat, timeAgo } from "helpers/date-time.helper"; import { addSpaceIfCamelCase } from "helpers/string.helper"; +import Tiptap from "components/tiptap"; // types // import RemirrorRichTextEditor from "components/rich-text-editor"; @@ -200,7 +201,7 @@ export const Feeds: React.FC = ({ activities }) => { } else if (activity.field === "estimate_point") { value = activity.new_value ? activity.new_value + - ` Point${parseInt(activity.new_value ?? "", 10) > 1 ? "s" : ""}` + ` Point${parseInt(activity.new_value ?? "", 10) > 1 ? "s" : ""}` : "None"; } @@ -250,18 +251,29 @@ export const Feeds: React.FC = ({ activities }) => { Commented {timeAgo(activity.created_at)}

- {/*
*/} - {/* */} - {/*
*/} +
+ + {/**/} + {/* */} +
From 95358503ed3ede622839f209d34ee59252e031e6 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:21:15 +0530 Subject: [PATCH 14/42] added ref control support and bubble menu support for readonly editor --- .../components/tiptap/bubble-menu/index.tsx | 3 ++ apps/app/components/tiptap/index.tsx | 41 +++++++++++++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/apps/app/components/tiptap/bubble-menu/index.tsx b/apps/app/components/tiptap/bubble-menu/index.tsx index 00b67139336..a70481b8829 100644 --- a/apps/app/components/tiptap/bubble-menu/index.tsx +++ b/apps/app/components/tiptap/bubble-menu/index.tsx @@ -58,6 +58,9 @@ export const EditorBubbleMenu: FC = (props) => { const bubbleMenuProps: EditorBubbleMenuProps = { ...props, shouldShow: ({ editor }) => { + if (!editor.isEditable) { + return false; + } if (editor.isActive("image")) { return false; } diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index d2103d50635..ddf0fd4cda5 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -1,35 +1,59 @@ -import { useEditor, EditorContent } from '@tiptap/react'; +import { useEditor, EditorContent, Editor } from '@tiptap/react'; import { useDebouncedCallback } from 'use-debounce'; import { EditorBubbleMenu } from './bubble-menu'; import { TiptapExtensions } from './extensions'; import { TiptapEditorProps } from './props'; import { Node } from "@tiptap/pm/model"; import { Editor as CoreEditor } from "@tiptap/core"; -import { useCallback, useRef } from 'react'; +import { useCallback, useImperativeHandle, useRef } from 'react'; import { EditorState } from '@tiptap/pm/state'; import fileService from 'services/file.service'; -type TiptapProps = { +export interface ITiptapRichTextEditor { value: string; noBorder?: boolean; borderOnFocus?: boolean; customClassName?: string; + editorContentCustomClassNames?: string; onChange?: (json: any, html: string) => void; setIsSubmitting?: (isSubmitting: boolean) => void; + editable?: boolean; + forwardedRef?: any; + debouncedUpdatesEnabled?: boolean; } -const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, customClassName }: TiptapProps) => { +const Tiptap = ({ onChange, debouncedUpdatesEnabled, forwardedRef, editable, setIsSubmitting, editorContentCustomClassNames, value, noBorder, borderOnFocus, customClassName }: ITiptapRichTextEditor) => { const editor = useEditor({ + editable: editable ?? true, editorProps: TiptapEditorProps, extensions: TiptapExtensions, content: value, onUpdate: async ({ editor }) => { + // for instant feedback loop setIsSubmitting?.(true); checkForNodeDeletions(editor) - debouncedUpdates({ onChange, editor }); + if (debouncedUpdatesEnabled) { + debouncedUpdates({ onChange, editor }); + } else { + onChange?.(editor.getJSON(), editor.getHTML()); + } } }); + const editorRef: React.MutableRefObject = useRef(null) + + useImperativeHandle(forwardedRef, () => ({ + clearEditor: () => { + console.log('clearContent') + console.log(editorRef) + editorRef.current?.commands.clearContent() + }, + setEditorValue: (content: string) => { + console.log(editorRef, forwardedRef, content) + editorRef.current?.commands.setContent(content) + } + })) + const previousState = useRef(); const onNodeDeleted = useCallback( @@ -85,15 +109,18 @@ const Tiptap = ({ onChange, setIsSubmitting, value, noBorder, borderOnFocus, cus } ${borderOnFocus ? 'focus:border border-custom-border-200' : 'focus:border-0' } ${customClassName}`; + if (!editor) return null + editorRef.current = editor + return (
{ editor?.chain().focus().run(); }} - className={`tiptap-editor-container relative min-h-[150px] ${editorClassNames}`} + className={`tiptap-editor-container relative ${editorClassNames}`} > {editor && } -
+
From c2a4cdfebb361267a316f46927c32a278057cde9 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:21:36 +0530 Subject: [PATCH 15/42] added tiptap support for plane pages --- .../pages/create-update-block-inline.tsx | 143 +++++++++++------- .../components/pages/single-page-block.tsx | 49 +++--- 2 files changed, 116 insertions(+), 76 deletions(-) diff --git a/apps/app/components/pages/create-update-block-inline.tsx b/apps/app/components/pages/create-update-block-inline.tsx index 3b73e041b68..620d47241d6 100644 --- a/apps/app/components/pages/create-update-block-inline.tsx +++ b/apps/app/components/pages/create-update-block-inline.tsx @@ -23,6 +23,7 @@ import { Loader, PrimaryButton, SecondaryButton, TextArea } from "components/ui" import { ICurrentUserResponse, IPageBlock } from "types"; // fetch-keys import { PAGE_BLOCKS_LIST } from "constants/fetch-keys"; +import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; type Props = { handleClose: () => void; @@ -56,6 +57,13 @@ const defaultValues = { // // WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +const TiptapEditor = React.forwardRef< + ITiptapRichTextEditor, + ITiptapRichTextEditor +>((props, ref) => ); + +TiptapEditor.displayName = "TiptapEditor"; + export const CreateUpdateBlockInline: React.FC = ({ handleClose, data, @@ -242,9 +250,9 @@ export const CreateUpdateBlockInline: React.FC = ({ description: !data.description || data.description === "" ? { - type: "doc", - content: [{ type: "paragraph" }], - } + type: "doc", + content: [{ type: "paragraph" }], + } : data.description, description_html: data.description_html ?? "

", }); @@ -296,57 +304,86 @@ export const CreateUpdateBlockInline: React.FC = ({ />
- {/* { */} - {/* if (!data) */} - {/* return ( */} - {/* setValue("description", jsonValue)} */} - {/* onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} */} - {/* placeholder="Write something..." */} - {/* customClassName="text-sm" */} - {/* noBorder */} - {/* borderOnFocus={false} */} - {/* ref={editorRef} */} - {/* /> */} - {/* ); */} - {/* else if (!value || !watch("description_html")) */} - {/* return ( */} - {/*
*/} - {/* ); */} - {/**/} - {/* return ( */} - {/* 0 */} - {/* ? value */} - {/* : watch("description_html") && watch("description_html") !== "" */} - {/* ? watch("description_html") */} - {/* : { type: "doc", content: [{ type: "paragraph" }] } */} - {/* } */} - {/* onJSONChange={(jsonValue) => setValue("description", jsonValue)} */} - {/* onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} */} - {/* placeholder="Write something..." */} - {/* customClassName="text-sm" */} - {/* noBorder */} - {/* borderOnFocus={false} */} - {/* ref={editorRef} */} - {/* /> */} - {/* ); */} - {/* }} */} - {/* /> */} + { + if (!data) + return ( +

"} + debouncedUpdatesEnabled={false} + customClassName="text-sm" + noBorder + borderOnFocus={false} + onChange={(description: Object, description_html: string) => { + onChange(description_html); + setValue("description", description); + }} + /> + // setValue("description", jsonValue)} + // onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} + // placeholder="Write something..." + // customClassName="text-sm" + // noBorder + // borderOnFocus={false} + // ref={editorRef} + // /> + ); + else if (!value || !watch("description_html")) + return ( +
+ ); + + return ( + 0 + ? value + : watch("description_html") && watch("description_html") !== "" + ? watch("description_html") + : { type: "doc", content: [{ type: "paragraph" }] } + } + debouncedUpdatesEnabled={false} + customClassName="text-sm" + noBorder + borderOnFocus={false} + onChange={(description: Object, description_html: string) => { + onChange(description_html); + setValue("description", description); + }} + /> + // 0 + // ? value + // : watch("description_html") && watch("description_html") !== "" + // ? watch("description_html") + // : { type: "doc", content: [{ type: "paragraph" }] } + // } + // onJSONChange={(jsonValue) => setValue("description", jsonValue)} + // onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} + // placeholder="Write something..." + // customClassName="text-sm" + // noBorder + // borderOnFocus={false} + // ref={editorRef} + // /> + ); + }} + />
diff --git a/apps/app/components/pages/single-page-block.tsx b/apps/app/components/pages/single-page-block.tsx index e9ceb5fab69..6ecf98ba52e 100644 --- a/apps/app/components/pages/single-page-block.tsx +++ b/apps/app/components/pages/single-page-block.tsx @@ -39,6 +39,7 @@ import { copyTextToClipboard } from "helpers/string.helper"; import { ICurrentUserResponse, IIssue, IPageBlock, IProject } from "types"; // fetch-keys import { PAGE_BLOCKS_LIST } from "constants/fetch-keys"; +import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; type Props = { block: IPageBlock; @@ -54,6 +55,12 @@ type Props = { // >((props, ref) => ); // WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +const TiptapEditor = React.forwardRef< + ITiptapRichTextEditor, + ITiptapRichTextEditor +>((props, ref) => ); + +TiptapEditor.displayName = "TiptapEditor"; export const SinglePageBlock: React.FC = ({ block, @@ -328,9 +335,8 @@ export const SinglePageBlock: React.FC = ({
) : (
@@ -344,9 +350,8 @@ export const SinglePageBlock: React.FC = ({
Date: Thu, 10 Aug 2023 01:22:07 +0530 Subject: [PATCH 16/42] added tiptap support to gpt assistant modal (yet to be tested) --- .../core/modals/gpt-assistant-modal.tsx | 73 ++++++++++++------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/apps/app/components/core/modals/gpt-assistant-modal.tsx b/apps/app/components/core/modals/gpt-assistant-modal.tsx index 1d3af7a5142..0c5e0eded7a 100644 --- a/apps/app/components/core/modals/gpt-assistant-modal.tsx +++ b/apps/app/components/core/modals/gpt-assistant-modal.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState, forwardRef, useRef } from "react"; +import React, { useEffect, useState, forwardRef, useRef } from "react"; import { useRouter } from "next/router"; import dynamic from "next/dynamic"; @@ -15,6 +15,7 @@ import useUserAuth from "hooks/use-user-auth"; import { Input, PrimaryButton, SecondaryButton } from "components/ui"; import { IIssue, IPageBlock } from "types"; +import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; type Props = { isOpen: boolean; handleClose: () => void; @@ -44,6 +45,14 @@ type FormData = { // // WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +const TiptapEditor = React.forwardRef< + ITiptapRichTextEditor, + ITiptapRichTextEditor +>((props, ref) => ); + +TiptapEditor.displayName = "TiptapEditor"; + + export const GptAssistantModal: React.FC = ({ isOpen, handleClose, @@ -146,33 +155,48 @@ export const GptAssistantModal: React.FC = ({ return (
- {/* {((content && content !== "") || (htmlContent && htmlContent !== "

")) && ( */} - {/*
*/} - {/* Content: */} - {/* {content}

} */} - {/* customClassName="-m-3" */} - {/* noBorder */} - {/* borderOnFocus={false} */} - {/* editable={false} */} - {/* ref={editorRef} */} - {/* /> */} - {/*
*/} - {/* )} */} + {((content && content !== "") || (htmlContent && htmlContent !== "

")) && ( +
+ Content: + ${content}

`} + customClassName="-m-3" + noBorder + borderOnFocus={false} + editable={false} + ref={editorRef} + /> + {/* {content}

} */} + {/* customClassName="-m-3" */} + {/* noBorder */} + {/* borderOnFocus={false} */} + {/* editable={false} */} + {/* ref={editorRef} */} + {/* /> */} +
+ )} {response !== "" && (
Response: - ${response}

`} customClassName="-mx-3 -my-3" noBorder borderOnFocus={false} editable={false} /> + + {/* ${response}

`} */} + {/* customClassName="-mx-3 -my-3" */} + {/* noBorder */} + {/* borderOnFocus={false} */} + {/* editable={false} */} + {/* /> */}
)} {invalidResponse && ( @@ -185,11 +209,10 @@ export const GptAssistantModal: React.FC = ({ type="text" name="task" register={register} - placeholder={`${ - content && content !== "" - ? "Tell AI what action to perform on this content..." - : "Ask AI anything..." - }`} + placeholder={`${content && content !== "" + ? "Tell AI what action to perform on this content..." + : "Ask AI anything..." + }`} autoComplete="off" />
@@ -225,8 +248,8 @@ export const GptAssistantModal: React.FC = ({ {isSubmitting ? "Generating response..." : response === "" - ? "Generate response" - : "Generate again"} + ? "Generate response" + : "Generate again"}
From 96ef0a1e4f4b9374c4cb24154fe96b16e1c930f5 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:28:40 +0530 Subject: [PATCH 17/42] removed remirror instances and cleaned up code --- apps/app/components/core/feeds.tsx | 13 ----- .../core/modals/gpt-assistant-modal.tsx | 30 ------------ .../components/issues/comment/add-comment.tsx | 17 ------- .../issues/comment/comment-card.tsx | 29 ----------- apps/app/components/issues/form.tsx | 20 +------- .../pages/create-update-block-inline.tsx | 49 +------------------ apps/app/components/pages/page-form.tsx | 12 ----- .../components/pages/single-page-block.tsx | 7 --- 8 files changed, 2 insertions(+), 175 deletions(-) diff --git a/apps/app/components/core/feeds.tsx b/apps/app/components/core/feeds.tsx index d4781398d6b..92f6e634f3e 100644 --- a/apps/app/components/core/feeds.tsx +++ b/apps/app/components/core/feeds.tsx @@ -16,8 +16,6 @@ import { Icon } from "components/ui"; import { renderShortDateWithYearFormat, timeAgo } from "helpers/date-time.helper"; import { addSpaceIfCamelCase } from "helpers/string.helper"; import Tiptap from "components/tiptap"; -// types -// import RemirrorRichTextEditor from "components/rich-text-editor"; const activityDetails: { [key: string]: { @@ -262,17 +260,6 @@ export const Feeds: React.FC = ({ activities }) => { noBorder customClassName="text-xs border border-custom-border-200 bg-custom-background-100" /> - {/**/} - {/* */}
diff --git a/apps/app/components/core/modals/gpt-assistant-modal.tsx b/apps/app/components/core/modals/gpt-assistant-modal.tsx index 0c5e0eded7a..b9bf09aced5 100644 --- a/apps/app/components/core/modals/gpt-assistant-modal.tsx +++ b/apps/app/components/core/modals/gpt-assistant-modal.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useState, forwardRef, useRef } from "react"; import { useRouter } from "next/router"; -import dynamic from "next/dynamic"; // react-hook-form import { useForm } from "react-hook-form"; @@ -33,18 +32,6 @@ type FormData = { task: string; }; -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { -// ssr: false, -// }); -// -// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; -// -// const WrappedRemirrorRichTextEditor = forwardRef( -// (props, ref) => -// ); -// -// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; - const TiptapEditor = React.forwardRef< ITiptapRichTextEditor, ITiptapRichTextEditor @@ -52,7 +39,6 @@ const TiptapEditor = React.forwardRef< TiptapEditor.displayName = "TiptapEditor"; - export const GptAssistantModal: React.FC = ({ isOpen, handleClose, @@ -169,14 +155,6 @@ export const GptAssistantModal: React.FC = ({ editable={false} ref={editorRef} /> - {/* {content}

} */} - {/* customClassName="-m-3" */} - {/* noBorder */} - {/* borderOnFocus={false} */} - {/* editable={false} */} - {/* ref={editorRef} */} - {/* /> */} )} {response !== "" && ( @@ -189,14 +167,6 @@ export const GptAssistantModal: React.FC = ({ borderOnFocus={false} editable={false} /> - - {/* ${response}

`} */} - {/* customClassName="-mx-3 -my-3" */} - {/* noBorder */} - {/* borderOnFocus={false} */} - {/* editable={false} */} - {/* /> */} )} {invalidResponse && ( diff --git a/apps/app/components/issues/comment/add-comment.tsx b/apps/app/components/issues/comment/add-comment.tsx index 157f56dce01..87fb745a792 100644 --- a/apps/app/components/issues/comment/add-comment.tsx +++ b/apps/app/components/issues/comment/add-comment.tsx @@ -18,23 +18,6 @@ import type { ICurrentUserResponse, IIssueComment } from "types"; import { PROJECT_ISSUES_ACTIVITY } from "constants/fetch-keys"; import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { -// ssr: false, -// loading: () => ( -// -// -// -// ), -// }); -// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; -// -// const WrappedRemirrorRichTextEditor = React.forwardRef< -// IRemirrorRichTextEditor, -// IRemirrorRichTextEditor -// >((props, ref) => ); -// -// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; - const TiptapEditor = React.forwardRef< ITiptapRichTextEditor, ITiptapRichTextEditor diff --git a/apps/app/components/issues/comment/comment-card.tsx b/apps/app/components/issues/comment/comment-card.tsx index 10da0b74e58..f2770cc77a1 100644 --- a/apps/app/components/issues/comment/comment-card.tsx +++ b/apps/app/components/issues/comment/comment-card.tsx @@ -1,7 +1,5 @@ import React, { useEffect, useState } from "react"; -import dynamic from "next/dynamic"; - // react-hook-form import { useForm } from "react-hook-form"; // icons @@ -17,17 +15,6 @@ import { timeAgo } from "helpers/date-time.helper"; import type { IIssueComment } from "types"; import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { ssr: false }); -// -// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; -// -// const WrappedRemirrorRichTextEditor = React.forwardRef< -// IRemirrorRichTextEditor, -// IRemirrorRichTextEditor -// >((props, ref) => ); -// -// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; - const TiptapEditor = React.forwardRef< ITiptapRichTextEditor, ITiptapRichTextEditor @@ -115,15 +102,6 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD className={`flex-col gap-2 ${isEditing ? "flex" : "hidden"}`} onSubmit={handleSubmit(onEnter)} > - {/* { */} - {/* setValue("comment_json", jsonValue); */} - {/* setValue("comment_html", htmlValue); */} - {/* }} */} - {/* placeholder="Enter Your comment..." */} - {/* ref={editorRef} */} - {/* /> */} = ({ comment, onSubmit, handleCommentD editable={false} customClassName="text-xs border border-custom-border-200 bg-custom-background-100" /> - {/* */} diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index 8f71c8e53c8..c2a32b4e49f 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -1,6 +1,5 @@ import React, { FC, useState, useEffect, useRef } from "react"; -import dynamic from "next/dynamic"; import { useRouter } from "next/router"; // react-hook-form @@ -36,25 +35,8 @@ import { import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline"; // types import type { ICurrentUserResponse, IIssue, ISearchIssueResponse } from "types"; -import Tiptap from "components/tiptap"; // rich-text-editor -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { -// ssr: false, -// loading: () => ( -// -// -// -// ), -// }); - -// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; - -// const WrappedRemirrorRichTextEditor = React.forwardRef< -// IRemirrorRichTextEditor, -// IRemirrorRichTextEditor -// >((props, ref) => ); -// -// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; +import Tiptap from "components/tiptap"; const defaultValues: Partial = { project: "", diff --git a/apps/app/components/pages/create-update-block-inline.tsx b/apps/app/components/pages/create-update-block-inline.tsx index 620d47241d6..da73849213b 100644 --- a/apps/app/components/pages/create-update-block-inline.tsx +++ b/apps/app/components/pages/create-update-block-inline.tsx @@ -1,7 +1,6 @@ import React, { useCallback, useEffect, useState } from "react"; import { useRouter } from "next/router"; -import dynamic from "next/dynamic"; import { mutate } from "swr"; @@ -18,7 +17,7 @@ import useToast from "hooks/use-toast"; // components import { GptAssistantModal } from "components/core"; // ui -import { Loader, PrimaryButton, SecondaryButton, TextArea } from "components/ui"; +import { PrimaryButton, SecondaryButton, TextArea } from "components/ui"; // types import { ICurrentUserResponse, IPageBlock } from "types"; // fetch-keys @@ -40,23 +39,6 @@ const defaultValues = { description_html: null, }; -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { -// ssr: false, -// loading: () => ( -// -// -// -// ), -// }); -// import { IRemirrorRichTextEditor } from "components/rich-text-editor"; -// -// const WrappedRemirrorRichTextEditor = React.forwardRef< -// IRemirrorRichTextEditor, -// IRemirrorRichTextEditor -// >((props, ref) => ); -// -// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; - const TiptapEditor = React.forwardRef< ITiptapRichTextEditor, ITiptapRichTextEditor @@ -322,19 +304,6 @@ export const CreateUpdateBlockInline: React.FC = ({ setValue("description", description); }} /> - // setValue("description", jsonValue)} - // onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} - // placeholder="Write something..." - // customClassName="text-sm" - // noBorder - // borderOnFocus={false} - // ref={editorRef} - // /> ); else if (!value || !watch("description_html")) return ( @@ -360,22 +329,6 @@ export const CreateUpdateBlockInline: React.FC = ({ setValue("description", description); }} /> - // 0 - // ? value - // : watch("description_html") && watch("description_html") !== "" - // ? watch("description_html") - // : { type: "doc", content: [{ type: "paragraph" }] } - // } - // onJSONChange={(jsonValue) => setValue("description", jsonValue)} - // onHTMLChange={(htmlValue) => setValue("description_html", htmlValue)} - // placeholder="Write something..." - // customClassName="text-sm" - // noBorder - // borderOnFocus={false} - // ref={editorRef} - // /> ); }} /> diff --git a/apps/app/components/pages/page-form.tsx b/apps/app/components/pages/page-form.tsx index ff435d3e592..c4c669e1e71 100644 --- a/apps/app/components/pages/page-form.tsx +++ b/apps/app/components/pages/page-form.tsx @@ -1,7 +1,5 @@ import { useEffect } from "react"; -import dynamic from "next/dynamic"; - // react-hook-form import { useForm } from "react-hook-form"; // ui @@ -16,16 +14,6 @@ type Props = { data?: IPage | null; }; -// rich-text-editor -// const RemirrorRichTextEditor = dynamic(() => import("components/rich-text-editor"), { -// ssr: false, -// loading: () => ( -// -// -// -// ), -// }); - const defaultValues = { name: "", description: "", diff --git a/apps/app/components/pages/single-page-block.tsx b/apps/app/components/pages/single-page-block.tsx index 6ecf98ba52e..8a13e3ea190 100644 --- a/apps/app/components/pages/single-page-block.tsx +++ b/apps/app/components/pages/single-page-block.tsx @@ -19,7 +19,6 @@ import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { GptAssistantModal } from "components/core"; import { CreateUpdateBlockInline } from "components/pages"; -// import RemirrorRichTextEditor, { IRemirrorRichTextEditor } from "components/rich-text-editor"; // ui import { CustomMenu, TextArea } from "components/ui"; // icons @@ -49,12 +48,6 @@ type Props = { user: ICurrentUserResponse | undefined; }; -// const WrappedRemirrorRichTextEditor = React.forwardRef< -// IRemirrorRichTextEditor, -// IRemirrorRichTextEditor -// >((props, ref) => ); - -// WrappedRemirrorRichTextEditor.displayName = "WrappedRemirrorRichTextEditor"; const TiptapEditor = React.forwardRef< ITiptapRichTextEditor, ITiptapRichTextEditor From 78a77cf5605b1821ad2c79b52774a1b2b47e495f Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 02:50:34 +0530 Subject: [PATCH 18/42] improved code structure for extracting props in Tiptap --- apps/app/components/tiptap/index.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index ddf0fd4cda5..da5e0db7a67 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -22,7 +22,20 @@ export interface ITiptapRichTextEditor { debouncedUpdatesEnabled?: boolean; } -const Tiptap = ({ onChange, debouncedUpdatesEnabled, forwardedRef, editable, setIsSubmitting, editorContentCustomClassNames, value, noBorder, borderOnFocus, customClassName }: ITiptapRichTextEditor) => { +const Tiptap = (props: ITiptapRichTextEditor) => { + const { + onChange, + debouncedUpdatesEnabled, + forwardedRef, + editable, + setIsSubmitting, + editorContentCustomClassNames, + value, + noBorder, + borderOnFocus, + customClassName + } = props; + const editor = useEditor({ editable: editable ?? true, editorProps: TiptapEditorProps, From a96514dc3710554e808244220540f60d32d640bc Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 03:20:20 +0530 Subject: [PATCH 19/42] fixing ts errors for next build --- .../app/components/rich-text-editor/index.tsx | 236 ------------- .../rich-text-editor/mention-autocomplete.tsx | 64 ---- .../components/rich-text-editor/sample.tsx | 145 -------- .../toolbar/float-tool-tip.tsx | 316 ------------------ .../toolbar/heading-controls.tsx | 57 ---- .../rich-text-editor/toolbar/index.tsx | 35 -- .../rich-text-editor/toolbar/link.tsx | 215 ------------ .../toolbar/table-controls.tsx | 55 --- .../tiptap/bubble-menu/link-selector.tsx | 3 +- .../tiptap/hooks/useDebouncedUpdates.tsx | 18 - .../tiptap/hooks/useNodeDeletion.tsx | 51 --- apps/app/components/tiptap/index.tsx | 2 +- .../tiptap/plugins/upload-image.tsx | 6 +- apps/app/components/tiptap/props.tsx | 4 +- apps/app/services/file.service.ts | 12 +- 15 files changed, 20 insertions(+), 1199 deletions(-) delete mode 100644 apps/app/components/rich-text-editor/index.tsx delete mode 100644 apps/app/components/rich-text-editor/mention-autocomplete.tsx delete mode 100644 apps/app/components/rich-text-editor/sample.tsx delete mode 100644 apps/app/components/rich-text-editor/toolbar/float-tool-tip.tsx delete mode 100644 apps/app/components/rich-text-editor/toolbar/heading-controls.tsx delete mode 100644 apps/app/components/rich-text-editor/toolbar/index.tsx delete mode 100644 apps/app/components/rich-text-editor/toolbar/link.tsx delete mode 100644 apps/app/components/rich-text-editor/toolbar/table-controls.tsx delete mode 100644 apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx delete mode 100644 apps/app/components/tiptap/hooks/useNodeDeletion.tsx diff --git a/apps/app/components/rich-text-editor/index.tsx b/apps/app/components/rich-text-editor/index.tsx deleted file mode 100644 index 1a657b6e4f0..00000000000 --- a/apps/app/components/rich-text-editor/index.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import { useCallback, useState, useImperativeHandle } from "react"; -import { useRouter } from "next/router"; - -import { InvalidContentHandler } from "remirror"; -import { - BoldExtension, - ItalicExtension, - CalloutExtension, - PlaceholderExtension, - CodeBlockExtension, - CodeExtension, - HistoryExtension, - LinkExtension, - UnderlineExtension, - HeadingExtension, - OrderedListExtension, - ListItemExtension, - BulletListExtension, - ImageExtension, - DropCursorExtension, - StrikeExtension, - MentionAtomExtension, - FontSizeExtension, -} from "remirror/extensions"; -import { - Remirror, - useRemirror, - EditorComponent, - OnChangeJSON, - OnChangeHTML, - FloatingToolbar, - FloatingWrapper, -} from "@remirror/react"; -import { TableExtension } from "@remirror/extension-react-tables"; -// tlds -import tlds from "tlds"; -// services -import fileService from "services/file.service"; -// components -import { CustomFloatingToolbar } from "./toolbar/float-tool-tip"; -import { MentionAutoComplete } from "./mention-autocomplete"; - -export interface IRemirrorRichTextEditor { - placeholder?: string; - mentions?: any[]; - tags?: any[]; - onBlur?: (jsonValue: any, htmlValue: any) => void; - onJSONChange?: (jsonValue: any) => void; - onHTMLChange?: (htmlValue: any) => void; - value?: any; - showToolbar?: boolean; - editable?: boolean; - customClassName?: string; - gptOption?: boolean; - noBorder?: boolean; - borderOnFocus?: boolean; - forwardedRef?: any; -} - -const RemirrorRichTextEditor: React.FC = (props) => { - const { - placeholder, - mentions = [], - tags = [], - onBlur = () => {}, - onJSONChange = () => {}, - onHTMLChange = () => {}, - value = "", - showToolbar = true, - editable = true, - customClassName, - gptOption = false, - noBorder = false, - borderOnFocus = true, - forwardedRef, - } = props; - - const [disableToolbar, setDisableToolbar] = useState(false); - - const router = useRouter(); - const { workspaceSlug } = router.query; - - // remirror error handler - const onError: InvalidContentHandler = useCallback( - ({ json, invalidContent, transformers }: any) => - // Automatically remove all invalid nodes and marks. - transformers.remove(json, invalidContent), - [] - ); - - const uploadImageHandler = (value: any): any => { - try { - const formData = new FormData(); - formData.append("asset", value[0].file); - formData.append("attributes", JSON.stringify({})); - - return [ - () => - new Promise(async (resolve, reject) => { - const imageUrl = await fileService - .uploadFile(workspaceSlug as string, formData) - .then((response) => response.asset); - - resolve({ - align: "left", - alt: "Not Found", - height: "100%", - width: "35%", - src: imageUrl, - }); - }), - ]; - } catch { - return []; - } - }; - - // remirror manager - const { manager, state } = useRemirror({ - extensions: () => [ - new BoldExtension(), - new ItalicExtension(), - new UnderlineExtension(), - new HeadingExtension({ levels: [1, 2, 3] }), - new FontSizeExtension({ defaultSize: "16", unit: "px" }), - new OrderedListExtension(), - new ListItemExtension(), - new BulletListExtension({ enableSpine: true }), - new CalloutExtension({ defaultType: "warn" }), - new CodeBlockExtension(), - new CodeExtension(), - new PlaceholderExtension({ - placeholder: placeholder || "Enter text...", - emptyNodeClass: "empty-node", - }), - new HistoryExtension(), - new LinkExtension({ - autoLink: true, - autoLinkAllowedTLDs: tlds, - selectTextOnClick: true, - defaultTarget: "_blank", - }), - new ImageExtension({ - enableResizing: true, - uploadHandler: uploadImageHandler, - createPlaceholder() { - const div = document.createElement("div"); - div.className = - "w-[35%] aspect-video bg-custom-background-80 text-custom-text-200 animate-pulse"; - return div; - }, - }), - new DropCursorExtension(), - new StrikeExtension(), - new MentionAtomExtension({ - matchers: [ - { name: "at", char: "@" }, - { name: "tag", char: "#" }, - ], - }), - new TableExtension(), - ], - content: value, - selection: "start", - stringHandler: "html", - onError, - }); - - useImperativeHandle(forwardedRef, () => ({ - clearEditor: () => { - manager.view.updateState(manager.createState({ content: "", selection: "start" })); - }, - setEditorValue: (value: any) => { - manager.view.updateState( - manager.createState({ - content: value, - selection: "end", - }) - ); - }, - })); - - return ( -
- { - const html = event.helpers.getHTML(); - const json = event.helpers.getJSON(); - - setDisableToolbar(true); - - onBlur(json, html); - }} - onFocus={() => setDisableToolbar(false)} - > -
- -
- - {editable && !disableToolbar && ( - - - - - - )} - - - {} - {} -
-
- ); -}; - -RemirrorRichTextEditor.displayName = "RemirrorRichTextEditor"; - -export default RemirrorRichTextEditor; diff --git a/apps/app/components/rich-text-editor/mention-autocomplete.tsx b/apps/app/components/rich-text-editor/mention-autocomplete.tsx deleted file mode 100644 index b0ba6955e7b..00000000000 --- a/apps/app/components/rich-text-editor/mention-autocomplete.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { useState, useEffect, FC } from "react"; -// remirror imports -import { cx } from "@remirror/core"; -import { useMentionAtom, MentionAtomNodeAttributes, FloatingWrapper } from "@remirror/react"; - -// export const; - -export interface IMentionAutoComplete { - mentions?: any[]; - tags?: any[]; -} - -export const MentionAutoComplete: FC = (props) => { - const { mentions = [], tags = [] } = props; - // states - const [options, setOptions] = useState([]); - - const { state, getMenuProps, getItemProps, indexIsHovered, indexIsSelected } = useMentionAtom({ - items: options, - }); - - useEffect(() => { - if (!state) { - return; - } - const searchTerm = state.query.full.toLowerCase(); - let filteredOptions: MentionAtomNodeAttributes[] = []; - - if (state.name === "tag") { - filteredOptions = tags.filter((tag) => tag?.label.toLowerCase().includes(searchTerm)); - } else if (state.name === "at") { - filteredOptions = mentions.filter((user) => user?.label.toLowerCase().includes(searchTerm)); - } - - filteredOptions = filteredOptions.sort().slice(0, 5); - setOptions(filteredOptions); - }, [state, mentions, tags]); - - const enabled = Boolean(state); - return ( - -
- {enabled && - options.map((user, index) => { - const isHighlighted = indexIsSelected(index); - const isHovered = indexIsHovered(index); - - return ( -
- {user.label} -
- ); - })} -
-
- ); -}; diff --git a/apps/app/components/rich-text-editor/sample.tsx b/apps/app/components/rich-text-editor/sample.tsx deleted file mode 100644 index f4b7c84fe68..00000000000 --- a/apps/app/components/rich-text-editor/sample.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { TableExtension } from "@remirror/extension-react-tables"; -import { - EditorComponent, - ReactComponentExtension, - Remirror, - TableComponents, - tableControllerPluginKey, - ThemeProvider, - useCommands, - useRemirror, - useRemirrorContext, -} from "@remirror/react"; -import type { AnyExtension } from "remirror"; - -const CommandMenu: React.FC = () => { - const { createTable, ...commands } = useCommands(); - - return ( -
-

commands:

-

- - - - - - - - -

-
- ); -}; - -const ProsemirrorDocData: React.FC = () => { - const ctx = useRemirrorContext({ autoUpdate: false }); - const [jsonPluginState, setJsonPluginState] = useState(""); - const [jsonDoc, setJsonDoc] = useState(""); - const { addHandler, view } = ctx; - - useEffect(() => { - addHandler("updated", () => { - setJsonDoc(JSON.stringify(view.state.doc.toJSON(), null, 2)); - - const pluginStateValues = tableControllerPluginKey.getState(view.state)?.values; - setJsonPluginState( - JSON.stringify({ ...pluginStateValues, tableNodeResult: "hidden" }, null, 2) - ); - }); - }, [addHandler, view]); - - return ( -
-

tableControllerPluginKey.getState(view.state)

-
-        {jsonPluginState}
-      
-

view.state.doc.toJSON()

-
-        {jsonDoc}
-      
-
- ); -}; - -const Table = ({ - children, - extensions, -}: { - children?: React.ReactElement; - extensions: () => AnyExtension[]; -}): JSX.Element => { - const { manager, state } = useRemirror({ extensions }); - - return ( - - - - - - - {children} - - - ); -}; - -const Basic = (): JSX.Element => ; - -const defaultExtensions = () => [new ReactComponentExtension(), new TableExtension()]; - -export default Basic; diff --git a/apps/app/components/rich-text-editor/toolbar/float-tool-tip.tsx b/apps/app/components/rich-text-editor/toolbar/float-tool-tip.tsx deleted file mode 100644 index 9fd82580746..00000000000 --- a/apps/app/components/rich-text-editor/toolbar/float-tool-tip.tsx +++ /dev/null @@ -1,316 +0,0 @@ -import React, { - ChangeEvent, - HTMLProps, - KeyboardEvent, - useCallback, - useEffect, - useLayoutEffect, - useMemo, - useRef, - useState, -} from "react"; - -import { createMarkPositioner, LinkExtension, ShortcutHandlerProps } from "remirror/extensions"; -// buttons -import { - ToggleBoldButton, - ToggleItalicButton, - ToggleUnderlineButton, - ToggleStrikeButton, - ToggleOrderedListButton, - ToggleBulletListButton, - ToggleCodeButton, - ToggleHeadingButton, - useActive, - CommandButton, - useAttrs, - useChainedCommands, - useCurrentSelection, - useExtensionEvent, - useUpdateReason, -} from "@remirror/react"; -import { EditorState } from "remirror"; - -type Props = { - gptOption?: boolean; - editorState: Readonly; - setDisableToolbar: React.Dispatch>; -}; - -const useLinkShortcut = () => { - const [linkShortcut, setLinkShortcut] = useState(); - const [isEditing, setIsEditing] = useState(false); - - useExtensionEvent( - LinkExtension, - "onShortcut", - useCallback( - (props) => { - if (!isEditing) { - setIsEditing(true); - } - - return setLinkShortcut(props); - }, - [isEditing] - ) - ); - - return { linkShortcut, isEditing, setIsEditing }; -}; - -const useFloatingLinkState = () => { - const chain = useChainedCommands(); - const { isEditing, linkShortcut, setIsEditing } = useLinkShortcut(); - const { to, empty } = useCurrentSelection(); - - const url = (useAttrs().link()?.href as string) ?? ""; - const [href, setHref] = useState(url); - - // A positioner which only shows for links. - const linkPositioner = useMemo(() => createMarkPositioner({ type: "link" }), []); - - const onRemove = useCallback(() => chain.removeLink().focus().run(), [chain]); - - const updateReason = useUpdateReason(); - - useLayoutEffect(() => { - if (!isEditing) { - return; - } - - if (updateReason.doc || updateReason.selection) { - setIsEditing(false); - } - }, [isEditing, setIsEditing, updateReason.doc, updateReason.selection]); - - useEffect(() => { - setHref(url); - }, [url]); - - const submitHref = useCallback(() => { - setIsEditing(false); - const range = linkShortcut ?? undefined; - - if (href === "") { - chain.removeLink(); - } else { - chain.updateLink({ href, auto: false }, range); - } - - chain.focus(range?.to ?? to).run(); - }, [setIsEditing, linkShortcut, chain, href, to]); - - const cancelHref = useCallback(() => { - setIsEditing(false); - }, [setIsEditing]); - - const clickEdit = useCallback(() => { - if (empty) { - chain.selectLink(); - } - - setIsEditing(true); - }, [chain, empty, setIsEditing]); - - return useMemo( - () => ({ - href, - setHref, - linkShortcut, - linkPositioner, - isEditing, - setIsEditing, - clickEdit, - onRemove, - submitHref, - cancelHref, - }), - [ - href, - linkShortcut, - linkPositioner, - isEditing, - clickEdit, - onRemove, - submitHref, - cancelHref, - setIsEditing, - ] - ); -}; - -const DelayAutoFocusInput = ({ - autoFocus, - setDisableToolbar, - ...rest -}: HTMLProps & { - setDisableToolbar: React.Dispatch>; -}) => { - const inputRef = useRef(null); - - useEffect(() => { - if (!autoFocus) { - return; - } - - setDisableToolbar(false); - - const frame = window.requestAnimationFrame(() => { - inputRef.current?.focus(); - }); - - return () => { - window.cancelAnimationFrame(frame); - }; - }, [autoFocus, setDisableToolbar]); - - useEffect(() => { - setDisableToolbar(false); - }, [setDisableToolbar]); - - return ( - <> - - { - if (rest.onKeyDown) rest.onKeyDown(e); - setDisableToolbar(false); - }} - className={`${rest.className} mt-1`} - onFocus={() => { - setDisableToolbar(false); - }} - onBlur={() => { - setDisableToolbar(true); - }} - /> - - ); -}; - -export const CustomFloatingToolbar: React.FC = ({ - gptOption, - editorState, - setDisableToolbar, -}) => { - const { isEditing, setIsEditing, clickEdit, onRemove, submitHref, href, setHref, cancelHref } = - useFloatingLinkState(); - - const active = useActive(); - const activeLink = active.link(); - - const handleClickEdit = useCallback(() => { - clickEdit(); - }, [clickEdit]); - - return ( -
-
-
- - - -
-
- - - - -
-
- - -
- {gptOption && ( -
- -
- )} -
- -
- {activeLink ? ( -
- { - window.open(href, "_blank"); - }} - icon="externalLinkFill" - enabled - /> - - -
- ) : ( - { - if (isEditing) { - setIsEditing(false); - } else { - handleClickEdit(); - } - }} - icon="link" - enabled - active={isEditing} - /> - )} -
- - {isEditing && ( -
- ) => setHref(e.target.value)} - value={href} - onKeyDown={(e: KeyboardEvent) => { - const { code } = e; - - if (code === "Enter") { - submitHref(); - } - - if (code === "Escape") { - cancelHref(); - } - }} - /> -
- )} -
- ); -}; diff --git a/apps/app/components/rich-text-editor/toolbar/heading-controls.tsx b/apps/app/components/rich-text-editor/toolbar/heading-controls.tsx deleted file mode 100644 index 3297958f0a8..00000000000 --- a/apps/app/components/rich-text-editor/toolbar/heading-controls.tsx +++ /dev/null @@ -1,57 +0,0 @@ -// remirror -import { useCommands, useActive } from "@remirror/react"; -// ui -import { CustomMenu } from "components/ui"; - -const HeadingControls = () => { - const { toggleHeading, focus } = useCommands(); - - const active = useActive(); - - return ( -
- - { - toggleHeading({ level: 1 }); - focus(); - }} - className={`${active.heading({ level: 1 }) ? "bg-indigo-50" : ""}`} - > - Heading 1 - - { - toggleHeading({ level: 2 }); - focus(); - }} - className={`${active.heading({ level: 2 }) ? "bg-indigo-50" : ""}`} - > - Heading 2 - - { - toggleHeading({ level: 3 }); - focus(); - }} - className={`${active.heading({ level: 3 }) ? "bg-indigo-50" : ""}`} - > - Heading 3 - - -
- ); -}; - -export default HeadingControls; diff --git a/apps/app/components/rich-text-editor/toolbar/index.tsx b/apps/app/components/rich-text-editor/toolbar/index.tsx deleted file mode 100644 index 8362ced5788..00000000000 --- a/apps/app/components/rich-text-editor/toolbar/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -// buttons -import { - ToggleBoldButton, - ToggleItalicButton, - ToggleUnderlineButton, - ToggleStrikeButton, - ToggleOrderedListButton, - ToggleBulletListButton, - RedoButton, - UndoButton, -} from "@remirror/react"; -// headings -import HeadingControls from "./heading-controls"; - -export const RichTextToolbar: React.FC = () => ( -
-
- - -
-
- -
-
- - - - -
-
- - -
-
-); diff --git a/apps/app/components/rich-text-editor/toolbar/link.tsx b/apps/app/components/rich-text-editor/toolbar/link.tsx deleted file mode 100644 index 045736b995d..00000000000 --- a/apps/app/components/rich-text-editor/toolbar/link.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import React, { - ChangeEvent, - HTMLProps, - KeyboardEvent, - useCallback, - useEffect, - useLayoutEffect, - useMemo, - useRef, - useState, -} from "react"; - -import { createMarkPositioner, LinkExtension, ShortcutHandlerProps } from "remirror/extensions"; -import { - CommandButton, - FloatingToolbar, - FloatingWrapper, - useActive, - useAttrs, - useChainedCommands, - useCurrentSelection, - useExtensionEvent, - useUpdateReason, -} from "@remirror/react"; - -const useLinkShortcut = () => { - const [linkShortcut, setLinkShortcut] = useState(); - const [isEditing, setIsEditing] = useState(false); - - useExtensionEvent( - LinkExtension, - "onShortcut", - useCallback( - (props) => { - if (!isEditing) { - setIsEditing(true); - } - - return setLinkShortcut(props); - }, - [isEditing] - ) - ); - - return { linkShortcut, isEditing, setIsEditing }; -}; - -const useFloatingLinkState = () => { - const chain = useChainedCommands(); - const { isEditing, linkShortcut, setIsEditing } = useLinkShortcut(); - const { to, empty } = useCurrentSelection(); - - const url = (useAttrs().link()?.href as string) ?? ""; - const [href, setHref] = useState(url); - - // A positioner which only shows for links. - const linkPositioner = useMemo(() => createMarkPositioner({ type: "link" }), []); - - const onRemove = useCallback(() => chain.removeLink().focus().run(), [chain]); - - const updateReason = useUpdateReason(); - - useLayoutEffect(() => { - if (!isEditing) { - return; - } - - if (updateReason.doc || updateReason.selection) { - setIsEditing(false); - } - }, [isEditing, setIsEditing, updateReason.doc, updateReason.selection]); - - useEffect(() => { - setHref(url); - }, [url]); - - const submitHref = useCallback(() => { - setIsEditing(false); - const range = linkShortcut ?? undefined; - - if (href === "") { - chain.removeLink(); - } else { - chain.updateLink({ href, auto: false }, range); - } - - chain.focus(range?.to ?? to).run(); - }, [setIsEditing, linkShortcut, chain, href, to]); - - const cancelHref = useCallback(() => { - setIsEditing(false); - }, [setIsEditing]); - - const clickEdit = useCallback(() => { - if (empty) { - chain.selectLink(); - } - - setIsEditing(true); - }, [chain, empty, setIsEditing]); - - return useMemo( - () => ({ - href, - setHref, - linkShortcut, - linkPositioner, - isEditing, - clickEdit, - onRemove, - submitHref, - cancelHref, - }), - [href, linkShortcut, linkPositioner, isEditing, clickEdit, onRemove, submitHref, cancelHref] - ); -}; - -const DelayAutoFocusInput = ({ autoFocus, ...rest }: HTMLProps) => { - const inputRef = useRef(null); - - useEffect(() => { - if (!autoFocus) { - return; - } - - const frame = window.requestAnimationFrame(() => { - inputRef.current?.focus(); - }); - - return () => { - window.cancelAnimationFrame(frame); - }; - }, [autoFocus]); - - return ; -}; - -export const FloatingLinkToolbar = () => { - const { isEditing, linkPositioner, clickEdit, onRemove, submitHref, href, setHref, cancelHref } = - useFloatingLinkState(); - - const active = useActive(); - const activeLink = active.link(); - - const { empty } = useCurrentSelection(); - - const handleClickEdit = useCallback(() => { - clickEdit(); - }, [clickEdit]); - - const linkEditButtons = activeLink ? ( - <> - { - window.open(href, "_blank"); - }} - icon="externalLinkFill" - enabled - /> - - - - ) : ( - - ); - - return ( - <> - {!isEditing && ( - - {linkEditButtons} - - )} - {!isEditing && empty && ( - - {linkEditButtons} - - )} - - - ) => setHref(e.target.value)} - value={href} - onKeyDown={(e: KeyboardEvent) => { - const { code } = e; - - if (code === "Enter") { - submitHref(); - } - - if (code === "Escape") { - cancelHref(); - } - }} - /> - - - ); -}; diff --git a/apps/app/components/rich-text-editor/toolbar/table-controls.tsx b/apps/app/components/rich-text-editor/toolbar/table-controls.tsx deleted file mode 100644 index 20f49b6dba3..00000000000 --- a/apps/app/components/rich-text-editor/toolbar/table-controls.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useCommands } from "@remirror/react"; - -export const TableControls = () => { - const { createTable, ...commands } = useCommands(); - - return ( -
- - -
- ); -}; diff --git a/apps/app/components/tiptap/bubble-menu/link-selector.tsx b/apps/app/components/tiptap/bubble-menu/link-selector.tsx index 62331ebeee9..c58c0de0b5e 100644 --- a/apps/app/components/tiptap/bubble-menu/link-selector.tsx +++ b/apps/app/components/tiptap/bubble-menu/link-selector.tsx @@ -41,7 +41,8 @@ export const LinkSelector: FC = ({
{ e.preventDefault(); - const input = e.target[0] as HTMLInputElement; + const form = e.target as HTMLFormElement; + const input = form.elements[0] as HTMLInputElement; editor.chain().focus().setLink({ href: input.value }).run(); setIsOpen(false); }} diff --git a/apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx b/apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx deleted file mode 100644 index 0fc835a98bb..00000000000 --- a/apps/app/components/tiptap/hooks/useDebouncedUpdates.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useDebouncedCallback } from 'use-debounce'; -import { Editor as CoreEditor } from "@tiptap/core"; - -type DebouncedUpdatesProps = { - onChange?: (json: any, html: string) => void; - editor: CoreEditor | null; -}; - -export const useDebouncedUpdates = (props: DebouncedUpdatesProps) => - useDebouncedCallback(async () => { - setTimeout(async () => { - if (props.onChange) { - props.onChange(props.editor.getJSON(), props.editor.getHTML()); - } - }, 500); - }, 1000); -; - diff --git a/apps/app/components/tiptap/hooks/useNodeDeletion.tsx b/apps/app/components/tiptap/hooks/useNodeDeletion.tsx deleted file mode 100644 index 9370947b667..00000000000 --- a/apps/app/components/tiptap/hooks/useNodeDeletion.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useCallback, useRef } from 'react'; -import { Node } from "@tiptap/pm/model"; -import { Editor as CoreEditor } from "@tiptap/core"; -import { EditorState } from '@tiptap/pm/state'; -import fileService from 'services/file.service'; - -export const useNodeDeletion = () => { - const previousState = useRef(); - - const onNodeDeleted = useCallback( - async (node: Node) => { - if (node.type.name === 'image') { - const assetUrlWithWorkspaceId = new URL(node.attrs.src).pathname.substring(1); - const resStatus = await fileService.deleteFile(assetUrlWithWorkspaceId); - if (resStatus === 204) { - console.log("file deleted successfully"); - } - } - }, - [], - ); - - const checkForNodeDeletions = useCallback( - (editor: CoreEditor) => { - const prevNodesById: Record = {}; - previousState.current?.doc.forEach((node) => { - if (node.attrs.id) { - prevNodesById[node.attrs.id] = node; - } - }); - - const nodesById: Record = {}; - editor.state?.doc.forEach((node) => { - if (node.attrs.id) { - nodesById[node.attrs.id] = node; - } - }); - - previousState.current = editor.state; - - for (const [id, node] of Object.entries(prevNodesById)) { - if (nodesById[id] === undefined) { - onNodeDeleted(node); - } - } - }, - [onNodeDeleted], - ); - - return { checkForNodeDeletions }; -}; diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index da5e0db7a67..26f6d86af40 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -73,7 +73,7 @@ const Tiptap = (props: ITiptapRichTextEditor) => { async (node: Node) => { if (node.type.name === 'image') { const assetUrlWithWorkspaceId = new URL(node.attrs.src).pathname.substring(1); - const resStatus = await fileService.deleteFile(assetUrlWithWorkspaceId); + const resStatus = await fileService.deleteImage(assetUrlWithWorkspaceId); if (resStatus === 204) { console.log("file deleted successfully"); } diff --git a/apps/app/components/tiptap/plugins/upload-image.tsx b/apps/app/components/tiptap/plugins/upload-image.tsx index d92aa38aacf..692dd2ca459 100644 --- a/apps/app/components/tiptap/plugins/upload-image.tsx +++ b/apps/app/components/tiptap/plugins/upload-image.tsx @@ -14,7 +14,7 @@ const UploadImagesPlugin = () => apply(tr, set) { set = set.map(tr.mapping, tr.doc); // See if the transaction adds or removes any placeholders - const action = tr.getMeta(this); + const action = tr.getMeta(uploadKey); if (action && action.add) { const { id, pos, src } = action.add; @@ -33,7 +33,7 @@ const UploadImagesPlugin = () => set = set.add(tr.doc, [deco]); } else if (action && action.remove) { set = set.remove( - set.find(null, null, (spec) => spec.id == action.remove.id), + set.find(undefined, undefined, (spec) => spec.id == action.remove.id), ); } return set; @@ -50,7 +50,7 @@ export default UploadImagesPlugin; function findPlaceholder(state: EditorState, id: {}) { const decos = uploadKey.getState(state); - const found = decos.find(null, null, (spec) => spec.id == id); + const found = decos.find(undefined, undefined, (spec: { id: number | undefined }) => spec.id == id); return found.length ? found[0].from : null; } diff --git a/apps/app/components/tiptap/props.tsx b/apps/app/components/tiptap/props.tsx index ea7f71b59ae..1ffbebe6db2 100644 --- a/apps/app/components/tiptap/props.tsx +++ b/apps/app/components/tiptap/props.tsx @@ -45,7 +45,9 @@ export const TiptapEditorProps: EditorProps = { top: event.clientY, }); // here we deduct 1 from the pos or else the image will create an extra node - startImageUpload(file, view, coordinates.pos - 1); + if (coordinates) { + startImageUpload(file, view, coordinates.pos - 1); + } return true; } return false; diff --git a/apps/app/services/file.service.ts b/apps/app/services/file.service.ts index a80b2ce800c..d2f01428da4 100644 --- a/apps/app/services/file.service.ts +++ b/apps/app/services/file.service.ts @@ -40,7 +40,7 @@ class FileServices extends APIService { }); } - async deleteFile(assetUrlWithWorkspaceId: string): Promise { + async deleteImage(assetUrlWithWorkspaceId: string): Promise { return this.delete(`/api/workspaces/file-assets/${assetUrlWithWorkspaceId}/`) .then((response) => response?.status) .catch((error) => { @@ -48,6 +48,16 @@ class FileServices extends APIService { }); } + async deleteFile(workspaceId: string, assetUrl: string): Promise { + const lastIndex = assetUrl.lastIndexOf("/"); + const assetId = assetUrl.substring(lastIndex + 1); + + return this.delete(`/api/workspaces/file-assets/${workspaceId}/${assetId}/`) + .then((response) => response?.data) + .catch((error) => { + throw error?.response?.data; + }); + } async uploadUserFile(file: FormData): Promise { return this.mediaUpload(`/api/users/file-assets/`, file) .then((response) => response?.data) From ee6a6ecf3f9bea83476cbe49aea4628ccf3e5584 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 03:31:38 +0530 Subject: [PATCH 20/42] fixing node ts error for Horizontal Rule --- apps/app/components/tiptap/extensions/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/app/components/tiptap/extensions/index.tsx b/apps/app/components/tiptap/extensions/index.tsx index 14d7106eb4c..5af1415865c 100644 --- a/apps/app/components/tiptap/extensions/index.tsx +++ b/apps/app/components/tiptap/extensions/index.tsx @@ -14,6 +14,7 @@ import CodeBlockLowlight from "@tiptap/extension-code-block-lowlight"; import { lowlight } from 'lowlight/lib/core' import SlashCommand from "../slash-command"; import { InputRule } from "@tiptap/core"; +import { Node as ProseMirrorNode } from '@tiptap/pm/model'; import ts from 'highlight.js/lib/languages/typescript' @@ -80,8 +81,8 @@ export const TiptapExtensions = [ const { tr } = state; const start = range.from; const end = range.to; - - tr.insert(start - 1, this.type.create(attributes)).delete( + const node = this.type.create(attributes) as unknown as ProseMirrorNode; + tr.insert(start - 1, node).delete( tr.mapping.map(start), tr.mapping.map(end), ); From 2329abe7dd5fd7398d1f214defe8272d2ab4caca Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 03:40:01 +0530 Subject: [PATCH 21/42] added ts fix for node types --- apps/app/components/tiptap/extensions/index.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/app/components/tiptap/extensions/index.tsx b/apps/app/components/tiptap/extensions/index.tsx index 5af1415865c..6eed0108a40 100644 --- a/apps/app/components/tiptap/extensions/index.tsx +++ b/apps/app/components/tiptap/extensions/index.tsx @@ -75,18 +75,16 @@ export const TiptapExtensions = [ return [ new InputRule({ find: /^(?:---|—-|___\s|\*\*\*\s)$/, - handler: ({ state, range }) => { - const attributes = {}; + handler: ({ state, range, commands }) => { + commands.splitBlock(); + const attributes = {}; const { tr } = state; const start = range.from; const end = range.to; - const node = this.type.create(attributes) as unknown as ProseMirrorNode; - tr.insert(start - 1, node).delete( - tr.mapping.map(start), - tr.mapping.map(end), - ); - }, + // @ts-ignore + tr.replaceWith(start - 1, end, this.type.create(attributes)); + } }), ]; }, From 1c08ad506a22592a82fffef2a03c8a68b888df4b Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 03:50:59 +0530 Subject: [PATCH 22/42] temp fix --- apps/app/components/tiptap/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index 26f6d86af40..14e77825b73 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -1,3 +1,4 @@ +// @ts-nocheck import { useEditor, EditorContent, Editor } from '@tiptap/react'; import { useDebouncedCallback } from 'use-debounce'; import { EditorBubbleMenu } from './bubble-menu'; From 6c9b31a2c4fe51500541196b83ea77b8a25f2ba9 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 03:57:16 +0530 Subject: [PATCH 23/42] temp fix --- apps/app/components/tiptap/plugins/upload-image.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/app/components/tiptap/plugins/upload-image.tsx b/apps/app/components/tiptap/plugins/upload-image.tsx index 692dd2ca459..3f372d9d456 100644 --- a/apps/app/components/tiptap/plugins/upload-image.tsx +++ b/apps/app/components/tiptap/plugins/upload-image.tsx @@ -1,3 +1,4 @@ +// @ts-nocheck import { EditorState, Plugin, PluginKey } from "@tiptap/pm/state"; import { Decoration, DecorationSet, EditorView } from "@tiptap/pm/view"; import fileService from "services/file.service"; From b86081d788cd46e9d5d2889444f2ff784d6b8cad Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 04:11:44 +0530 Subject: [PATCH 24/42] added min height for issue description in modal --- apps/app/components/issues/form.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index c2a32b4e49f..035d6451e2a 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -35,8 +35,8 @@ import { import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline"; // types import type { ICurrentUserResponse, IIssue, ISearchIssueResponse } from "types"; -// rich-text-editor import Tiptap from "components/tiptap"; +// rich-text-editor const defaultValues: Partial = { project: "", @@ -360,6 +360,7 @@ export const IssueForm: FC = ({ ? watch("description_html") : value } + customClassName="min-h-[150px]" onChange={(description: Object, description_html: string) => { onChange(description_html); setValue("description", description); From c1d2b41a80140ab7e62044027fc42cf3e593f634 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:23:33 +0530 Subject: [PATCH 25/42] added resolutions to prosemirror-model version --- apps/app/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/app/package.json b/apps/app/package.json index d9911841cc4..ea1f41f1a4c 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -95,5 +95,8 @@ "tailwindcss": "^3.1.6", "tsconfig": "*", "typescript": "4.7.4" + }, + "resolutions": { + "prosemirror-model": "1.9.1" } } From 7b3862a3dd7a653c921fee301bc9b2343e2f9c0b Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:17:53 +0530 Subject: [PATCH 26/42] trying pnpm overrides --- apps/app/package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/app/package.json b/apps/app/package.json index ea1f41f1a4c..403cb6fd8d3 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -98,5 +98,10 @@ }, "resolutions": { "prosemirror-model": "1.9.1" + }, + "pnpm": { + "overrides": { + "prosemirror-model": "1.9.1" + } } } From 124383ebb430cb17303cbebdb1b20e0bcf369250 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Thu, 10 Aug 2023 13:16:25 +0530 Subject: [PATCH 27/42] explicitly added prosemirror deps --- apps/app/package.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/app/package.json b/apps/app/package.json index 403cb6fd8d3..6b9a9d9a7d1 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -58,6 +58,13 @@ "next-pwa": "^5.6.0", "next-themes": "^0.2.1", "nprogress": "^0.2.0", + "prosemirror-commands": "^1.5.2", + "prosemirror-keymap": "^1.2.2", + "prosemirror-model": "^1.19.3", + "prosemirror-schema-list": "^1.3.0", + "prosemirror-state": "^1.4.3", + "prosemirror-transform": "^1.7.4", + "prosemirror-view": "^1.31.7", "react": "18.2.0", "react-beautiful-dnd": "^13.1.1", "react-color": "^2.19.3", @@ -97,11 +104,6 @@ "typescript": "4.7.4" }, "resolutions": { - "prosemirror-model": "1.9.1" - }, - "pnpm": { - "overrides": { - "prosemirror-model": "1.9.1" - } + "prosemirror-model": "1.18.1" } } From be5bc765fc54cc3485f6ea6176f63a81adde495e Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Thu, 10 Aug 2023 16:00:55 +0530 Subject: [PATCH 28/42] bugfixes --- .../command-palette/command-pallette.tsx | 12 +- .../app/components/workspace/help-section.tsx | 2 - apps/app/package.json | 8 - yarn.lock | 2495 ++++------------- 4 files changed, 510 insertions(+), 2007 deletions(-) diff --git a/apps/app/components/command-palette/command-pallette.tsx b/apps/app/components/command-palette/command-pallette.tsx index e87ed84d8ca..b0fb03efa05 100644 --- a/apps/app/components/command-palette/command-pallette.tsx +++ b/apps/app/components/command-palette/command-pallette.tsx @@ -1,11 +1,8 @@ import React, { useCallback, useEffect, useState } from "react"; import { useRouter } from "next/router"; - import useSWR from "swr"; - // hooks -import useTheme from "hooks/use-theme"; import useToast from "hooks/use-toast"; import useUser from "hooks/use-user"; // components @@ -47,7 +44,6 @@ export const CommandPalette: React.FC = () => { const { user } = useUser(); const { setToastAlert } = useToast(); - const { toggleCollapsed } = useTheme(); const { data: issueDetails } = useSWR( workspaceSlug && projectId && issueId ? ISSUE_DETAILS(issueId as string) : null, @@ -86,8 +82,7 @@ export const CommandPalette: React.FC = () => { if ( !(e.target instanceof HTMLTextAreaElement) && !(e.target instanceof HTMLInputElement) && - // !(e.target as Element).classList?.contains("remirror-editor") && - (e.target === document || (e.target instanceof Element && !e.target.closest(".tiptap-editor-container"))) + !(e.target as Element).classList?.contains("tiptap-editor-container") ) { if ((ctrlKey || metaKey) && keyPressed === "k") { e.preventDefault(); @@ -97,8 +92,9 @@ export const CommandPalette: React.FC = () => { copyIssueUrlToClipboard(); } else if (keyPressed === "b") { e.preventDefault(); - toggleCollapsed(); + store.theme.setSidebarCollapsed(); } else if (keyPressed === "backspace") { + console.log("KEYDOWN") e.preventDefault(); setIsBulkDeleteIssuesModalOpen(true); } @@ -120,7 +116,7 @@ export const CommandPalette: React.FC = () => { } } }, - [copyIssueUrlToClipboard, toggleCollapsed] + [copyIssueUrlToClipboard] ); useEffect(() => { diff --git a/apps/app/components/workspace/help-section.tsx b/apps/app/components/workspace/help-section.tsx index 10548a24853..965a9e8a30b 100644 --- a/apps/app/components/workspace/help-section.tsx +++ b/apps/app/components/workspace/help-section.tsx @@ -49,8 +49,6 @@ export const WorkspaceHelpSection: React.FC = ({ setS const helpOptionsRef = useRef(null); - const { collapsed: sidebarCollapse, toggleCollapsed } = useTheme(); - useOutsideClickDetector(helpOptionsRef, () => setIsNeedHelpOpen(false)); return ( diff --git a/apps/app/package.json b/apps/app/package.json index dec75df03c3..89b5de61129 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -60,13 +60,6 @@ "next-pwa": "^5.6.0", "next-themes": "^0.2.1", "nprogress": "^0.2.0", - "prosemirror-commands": "^1.5.2", - "prosemirror-keymap": "^1.2.2", - "prosemirror-model": "^1.19.3", - "prosemirror-schema-list": "^1.3.0", - "prosemirror-state": "^1.4.3", - "prosemirror-transform": "^1.7.4", - "prosemirror-view": "^1.31.7", "react": "18.2.0", "react-beautiful-dnd": "^13.1.1", "react-color": "^2.19.3", @@ -75,7 +68,6 @@ "react-dropzone": "^14.2.3", "react-hook-form": "^7.38.0", "react-markdown": "^8.0.7", - "remirror": "^2.0.23", "sharp": "^0.32.1", "sonner": "^0.6.2", "swr": "^2.1.3", diff --git a/yarn.lock b/yarn.lock index 9f1999d0463..f9b113608f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,7 +49,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== -"@babel/core@^7.11.1", "@babel/core@^7.22.9": +"@babel/core@^7.11.1": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== @@ -70,7 +70,7 @@ json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.22.10", "@babel/generator@^7.22.9": +"@babel/generator@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== @@ -192,7 +192,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== @@ -299,14 +299,6 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" @@ -927,7 +919,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.3", "@babel/runtime@^7.22.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== @@ -943,7 +935,7 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.22.10", "@babel/traverse@^7.22.8": +"@babel/traverse@^7.22.10": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== @@ -1042,17 +1034,6 @@ "@emotion/weak-memoize" "^0.3.1" stylis "4.2.0" -"@emotion/css@^11.11.0": - version "11.11.2" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" - integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== - dependencies: - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/hash@^0.9.1": version "0.9.1" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" @@ -1070,7 +1051,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/react@^11.11.0": +"@emotion/react@^11.11.1": version "11.11.1" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== @@ -1194,42 +1175,6 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== - dependencies: - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/dom@^1.3.0": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7" - integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw== - dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/react-dom@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.1.tgz#7972a4fc488a8c746cded3cfe603b6057c308a91" - integrity sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA== - dependencies: - "@floating-ui/dom" "^1.3.0" - -"@floating-ui/react@^0.24.3": - version "0.24.8" - resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.24.8.tgz#e079e2836990be3fce9665ab509360a5447251a1" - integrity sha512-AuYeDoaR8jtUlUXtZ1IJ/6jtBkGnSpJXbGNzokBL87VDJ8opMq1Bgrc0szhK482ReQY6KZsMoZCVSb4xwalkBA== - dependencies: - "@floating-ui/react-dom" "^2.0.1" - aria-hidden "^1.2.3" - tabbable "^6.0.1" - -"@floating-ui/utils@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" - integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== - "@headlessui/react@^1.7.13", "@headlessui/react@^1.7.3": version "1.7.16" resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.16.tgz#9c458c9c4dbb708258c9e8da3fe5363f915f7b11" @@ -1341,78 +1286,6 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== -"@linaria/core@4.2.10": - version "4.2.10" - resolved "https://registry.yarnpkg.com/@linaria/core/-/core-4.2.10.tgz#3f8d45b20205c167d326d558ee9a926039483767" - integrity sha512-S1W01W7L4SQnGpWzp8awyCpPIYUOEJ+OLjjXqKpIXOU+ozPwBt86Mjjdas9aZccVhNBWDja74cMCUAVp8yUpDQ== - dependencies: - "@linaria/logger" "^4.0.0" - "@linaria/tags" "^4.3.5" - "@linaria/utils" "^4.3.4" - -"@linaria/logger@^4.0.0", "@linaria/logger@^4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@linaria/logger/-/logger-4.5.0.tgz#e5de815ffe7806822f47a559a512b98f66acea13" - integrity sha512-XdQLk242Cpcsc9a3Cz1ktOE5ysTo2TpxdeFQEPwMm8Z/+F/S6ZxBDdHYJL09srXWz3hkJr3oS2FPuMZNH1HIxw== - dependencies: - debug "^4.1.1" - picocolors "^1.0.0" - -"@linaria/tags@^4.3.5": - version "4.5.4" - resolved "https://registry.yarnpkg.com/@linaria/tags/-/tags-4.5.4.tgz#071ab024227433f783ea2d948904fc164731a912" - integrity sha512-HPxLB6HlJWLi6o8+8lTLegOmDnbMbuzEE+zzunaPZEGSoIIYx8HAv5VbY/sG/zNyxDElk6laiAwEVWN8h5/zxg== - dependencies: - "@babel/generator" "^7.22.9" - "@linaria/logger" "^4.5.0" - "@linaria/utils" "^4.5.3" - -"@linaria/utils@^4.3.4", "@linaria/utils@^4.5.3": - version "4.5.3" - resolved "https://registry.yarnpkg.com/@linaria/utils/-/utils-4.5.3.tgz#cf54f4096927ea347d01e814c1fb7aca7cf4063a" - integrity sha512-tSpxA3Zn0DKJ2n/YBnYAgiDY+MNvkmzAHrD8R9PKrpGaZ+wz1jQEmE1vGn1cqh8dJyWK0NzPAA8sf1cqa+RmAg== - dependencies: - "@babel/core" "^7.22.9" - "@babel/generator" "^7.22.9" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" - "@linaria/logger" "^4.5.0" - babel-merge "^3.0.0" - find-up "^5.0.0" - minimatch "^9.0.3" - -"@lingui/core@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@lingui/core/-/core-4.4.0.tgz#d043c2770673d70bafa6b850cfeec3c859844085" - integrity sha512-0ngEP+g4bt6f3cNqEzkU5796VkEEamxNXF/JD/QV9Ftxp8QBw91WqAoHjNYs3aYZOctCsRBR7FlvRQ6o2fDWDg== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/message-utils" "4.4.0" - unraw "^2.0.1" - -"@lingui/detect-locale@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@lingui/detect-locale/-/detect-locale-4.4.0.tgz#6101a75833af9a4e27e9c9948238df351d1b324a" - integrity sha512-Mh4oLJ4KHSwcyWw7+bhQ8ErUCZjXDrZyILyHCcgq2S+HE2NG8M8OD/VBFajLW3dEUJPC9sRE8L2XTxYRNKlK6g== - -"@lingui/message-utils@4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@lingui/message-utils/-/message-utils-4.4.0.tgz#88a7ff9c0ca10fdce25374a92fc27b932a96778a" - integrity sha512-SScnNuemsyHx2vyLvLsHgmAaCBHwnaAxUg3LkKoulqXe2Po8CmLBh1/28oNQ20ZhjwadUmy0unGalp9qqEBOkw== - dependencies: - "@messageformat/parser" "^5.0.0" - -"@messageformat/parser@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.1.0.tgz#05e4851c782d633ad735791dd0a68ee65d2a7201" - integrity sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ== - dependencies: - moo "^0.5.1" - "@mui/base@5.0.0-beta.10": version "5.0.0-beta.10" resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.10.tgz#b9a2de21c7de45aa4275c7ecf5aa803ecc236ba6" @@ -1439,7 +1312,7 @@ dependencies: "@babel/runtime" "^7.22.6" -"@mui/material@^5.13.2", "@mui/material@^5.14.1": +"@mui/material@^5.14.1": version "5.14.4" resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.4.tgz#9d4d1834a929a4acc59e550e34ca64c0fd60b3a6" integrity sha512-2XUV3KyRC07BQPPzEgd+ss3x/ezXtHeKtOGCMCNmx3MauZojPYUpSwFkE0fYgYCD9dMQMVG4DY/VF38P0KShsg== @@ -1830,26 +1703,7 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@ocavue/svgmoji-cjs@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@ocavue/svgmoji-cjs/-/svgmoji-cjs-0.1.1.tgz#7240e6860c907187e4cd95b39858507384e4025f" - integrity sha512-tCP6ggbtgIL4hPM5goVFSjL51jH/BLl/yBLy98wAV9a2L/Sn9iS3abfprPeQw6/nan5lLaz4Vz8ZP37LKh+xfQ== - dependencies: - svgmoji "^3.2.0" - -"@pkgr/utils@^2.3.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" - integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== - dependencies: - cross-spawn "^7.0.3" - fast-glob "^3.3.0" - is-glob "^4.0.3" - open "^9.1.0" - picocolors "^1.0.0" - tslib "^2.6.0" - -"@popperjs/core@^2.11.7", "@popperjs/core@^2.11.8", "@popperjs/core@^2.9.2": +"@popperjs/core@^2.11.7", "@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0", "@popperjs/core@^2.9.2": version "2.11.8" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== @@ -2042,7 +1896,7 @@ "@react-spring/shared" "~9.4.5" "@react-spring/types" "~9.4.5" -"@remirror/core-constants@^2.0.1", "@remirror/core-constants@^2.0.2": +"@remirror/core-constants@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-2.0.2.tgz#f05eccdc69e3a65e7d524b52548f567904a11a1a" integrity sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ== @@ -2066,863 +1920,6 @@ object.pick "^1.3.0" throttle-debounce "^3.0.1" -"@remirror/core-types@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@remirror/core-types/-/core-types-2.0.5.tgz#f6a5c56a555b57a9b88b2e8c2b7edba8bcc1042a" - integrity sha512-K4pd23sQnBGjdzow7qvdkDfTM8klUxBgdOvo2qBOmd0XsjrtIy7t41CcBR3B5lQM9GsCA2J+XeMUN2bxyJFyEg== - dependencies: - "@remirror/core-constants" "^2.0.1" - "@remirror/types" "^1.0.1" - -"@remirror/core-utils@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/core-utils/-/core-utils-2.0.13.tgz#a46bde5d18ea252664fa76f2428cb3cd9c20cd3d" - integrity sha512-5UggNc6Z2d7M8SVkstsVitID8DAHSKPrqet7Hfn4/dY+p4iMCOdwf9cLqcHMg3467k5/5/RvJPMTr9GQOEx7Hg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - "@remirror/core-types" "^2.0.5" - "@remirror/messages" "^2.0.6" - "@types/min-document" "^2.19.0" - css-in-js-utils "^3.1.0" - get-dom-document "^0.1.3" - min-document "^2.19.0" - parenthesis "^3.1.8" - -"@remirror/core@^2.0.11", "@remirror/core@^2.0.13", "@remirror/core@^2.0.16", "@remirror/core@^2.0.17", "@remirror/core@^2.0.18", "@remirror/core@^2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@remirror/core/-/core-2.0.19.tgz#1ef089497e9404cd008ea6768b6a56223a0736fc" - integrity sha512-TGvDPUdKYqOiDQmt3+58GNBi4PX6QhBhII1qk9btZ/uFvG2/LLHEe+KN/BfBdvykGAu8CK9codLzg8NZd2fDEg== - dependencies: - "@babel/runtime" "^7.22.3" - "@linaria/core" "4.2.10" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - "@remirror/core-types" "^2.0.5" - "@remirror/core-utils" "^2.0.13" - "@remirror/i18n" "^2.0.5" - "@remirror/icons" "^2.0.3" - "@remirror/messages" "^2.0.6" - nanoevents "^5.1.13" - tiny-warning "^1.0.3" - -"@remirror/dom@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@remirror/dom/-/dom-2.0.16.tgz#2823b4d92f057213d01cff927b7a0308fdeb2819" - integrity sha512-DxjEFgQc24O93WN/YL7nHUanER/a1FIGQGRgsFoN9Px2t+Op39i2PZ0hm1ZE7ivp9/gE7obaMbgsXnjEJ8RX+A== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/preset-core" "^2.0.16" - -"@remirror/extension-annotation@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@remirror/extension-annotation/-/extension-annotation-2.0.16.tgz#b720526be83155b9878721bc223b3f3135e49b60" - integrity sha512-jtLfWaNWQFfsE3lguQbYds4W3HJGLM0Ezrsc1q1w17EQxr5aJnjA2tNMjZL+6IdFzqEjuxd7Y9aRln3rU4WbnA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-bidi@^2.0.13", "@remirror/extension-bidi@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-bidi/-/extension-bidi-2.0.14.tgz#ab72e9cdf8847fc2c4a79daa850499ebc96315e2" - integrity sha512-tM0Ov4UpwIAs665T6kcsqb8sCZ2OwDcesGTHbBNI+NAxf9gpr/IALFA/xhzzQbpSj44yli1EYzVjQgcbKYfsKA== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.17" - "@remirror/messages" "^2.0.5" - "@types/direction" "^1.0.0" - direction "^1.0.4" - -"@remirror/extension-blockquote@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-blockquote/-/extension-blockquote-2.0.14.tgz#6a125f047ecc733df31941f40f6b1c662fcfdca9" - integrity sha512-jWko6/spZ49OvZVZVFUSPhOIZR8VY9aUFiMKJQfclkL3fESJPSPshkm6rANrnY24sk7VKfpXgpwCSqmJVJ8EiA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - "@remirror/theme" "^2.0.7" - -"@remirror/extension-bold@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-bold/-/extension-bold-2.0.13.tgz#4d38f75768f75323241236f089c6f87a4b92267b" - integrity sha512-b4yaQcU0m/tXxUVAlDSHcm3Z4dVnWKXfUmlpP8QDjISQ0F0vloRWSK2U9yvcldhmnTNJ/il0kn9PmJeoRbqkeA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-callout@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@remirror/extension-callout/-/extension-callout-2.0.15.tgz#1e5b882c66323e6429ac50b2f882bca5a24135a7" - integrity sha512-qn7o1JCy7k0rsybh57EtC8qRoZyEDkncxAtr4Rq1Z2PH/axuOJwwdIgeDadEGITpviRsqrh2L4ddogpDVWVImg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.17" - "@remirror/messages" "^2.0.5" - "@remirror/theme" "^2.0.8" - -"@remirror/extension-code-block@^2.0.14", "@remirror/extension-code-block@^2.0.15", "@remirror/extension-code-block@^2.0.18": - version "2.0.18" - resolved "https://registry.yarnpkg.com/@remirror/extension-code-block/-/extension-code-block-2.0.18.tgz#62140479751018f41e863a937281a7672508ae17" - integrity sha512-Qu51glo0xQMUlSYiFR20HmYEnOJF1OcbZYLTcF32oa8Uq1JWStv1DacQaACUQEhZ6DKgxFZxFBWbPLonzZ1bmw== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/messages" "^2.0.6" - "@remirror/theme" "^2.0.9" - "@types/refractor" "^3.0.2" - refractor "^3.6.0" - -"@remirror/extension-code@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-code/-/extension-code-2.0.13.tgz#065cd7fdf02838bdcca1fe997e133ac4691537be" - integrity sha512-uf4mkIHcw5RIscw1YcOMwikMMu+x5cqUkFdo5jjA3cssirh/87xDQJAeXLB4weN/ZNexbaJ2tSslWpMFrNBW8A== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-codemirror5@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-codemirror5/-/extension-codemirror5-2.0.13.tgz#f592adf23b8e0570a490972aed057719dd9476e9" - integrity sha512-9p9kYtBJLIC7kIQJOCa+xIg3IdaH2gb9OBDRo1AmjDAN68f8x2Ta8VAJD/h+wYhdSS96Q+4LMUBzxgZwssRDpw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-collaboration@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-collaboration/-/extension-collaboration-2.0.13.tgz#a066ab32fc69773640904773246a0e889ebb7888" - integrity sha512-sqkUjsPYQnuBIbyMW/FsSkQSyQ9GbQcawrigcCOxwlQp3f1snzKzfEcGRMPrUAG06UfDRedoGv/HVb+K4uIiIw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-columns@^2.0.13", "@remirror/extension-columns@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-columns/-/extension-columns-2.0.14.tgz#0d9da438d2b3dcf278216a49971daf59cd1b52b8" - integrity sha512-0WROpbsdCsuoHFTJB5daAIwjO4tGy9hVWx5kQk4P6bkLOW/qo5hSN6iQLi2mQsAG8pi7tn/NZtMNc1awWrRWhQ== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.17" - "@remirror/messages" "^2.0.5" - -"@remirror/extension-diff@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-diff/-/extension-diff-2.0.13.tgz#8540cd935aefc2ba25d9d75702ffd80149962524" - integrity sha512-6IxewTYkiFTOqEB7W3uZHBCS6pTw76qJVceWziFnSzwlf0JPqs80C4y6BLOdC6rIa3nB9USSlDkf8y1HDubVZw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-doc@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@remirror/extension-doc/-/extension-doc-2.1.5.tgz#ddc2f2c6c381f9113c52b1e74fccf5551d4305fe" - integrity sha512-LwXEVWytMUKldjniQ9Xet1kQ97aIubmh8ECK0I3mp7wwxx8Uotg1oYHRruWZHDBK9zH/H2yLaRWrQPF/FOYjmw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-drop-cursor@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-drop-cursor/-/extension-drop-cursor-2.0.13.tgz#2209bf41f86a2f730df27c16ef203dcd005daaa2" - integrity sha512-To6YtaBZ4v4XWaoD1oMd/EGsKMw2plLizZHrH70q7voP5rJjjzQ1O0Z8N/qgeM6Ai7ZM1O8PAozUW1OpqQQJJA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-embed@^2.0.13", "@remirror/extension-embed@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-embed/-/extension-embed-2.0.14.tgz#db24479d44f16c8a7c60a856801e5e7e61ceb952" - integrity sha512-O0UzrmMWBNWZvaWPpc9ZafhJx4QgzpPqJ3p+7jDgEbtaB5VArTuKsYReSpyyGU8a0PcPOx7s9aFFbh+i7IkL7A== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/messages" "^2.0.6" - "@types/querystringify" "^2.0.0" - prosemirror-resizable-view "^2.0.14" - querystringify "^2.2.0" - -"@remirror/extension-emoji@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@remirror/extension-emoji/-/extension-emoji-2.0.17.tgz#48ad559ec119a8288187291e4d9974ba58ac6c03" - integrity sha512-JFAx2/xDf0Pg7lUn4/HneU/Rq3alXa5uwdVXcAiCF7jqiryO/qdgH0qQ7DIiL9lvBvfpBvJYXTeuScnofvDkvw== - dependencies: - "@babel/runtime" "^7.21.0" - "@ocavue/svgmoji-cjs" "^0.1.1" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - "@remirror/theme" "^2.0.7" - emojibase "^6.1.0" - emojibase-data "^6.2.0" - emojibase-regex "^6.0.1" - escape-string-regexp "^4.0.0" - svgmoji "^3.2.0" - -"@remirror/extension-entity-reference@^2.2.6": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@remirror/extension-entity-reference/-/extension-entity-reference-2.2.6.tgz#b9c96edbb2ca99280ae9683693db18e6f257a563" - integrity sha512-rhmGchMv5jxaaLAvj3gPRjPxzAP8b0QzKToxGDBxQJkNRpLzik3h5Z3JDg3EdMa3fg75X1/+9UFdS1g/LDlJhQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-events" "^2.1.14" - "@remirror/extension-positioner" "^2.1.8" - -"@remirror/extension-epic-mode@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-epic-mode/-/extension-epic-mode-2.0.13.tgz#2ec5fe99a7b04240103f09987504d7a035d40790" - integrity sha512-KDHF0Uyr0RevWtp1ca4VOL+4iD6SXlPpEbRKz7Mlg5Fnl9IGTEsraHwg9OthoTN1Kc8fzYMzOxv6qwyTsvMuVw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-events@^2.1.14", "@remirror/extension-events@^2.1.15", "@remirror/extension-events@^2.1.16": - version "2.1.16" - resolved "https://registry.yarnpkg.com/@remirror/extension-events/-/extension-events-2.1.16.tgz#3e74c35a24c75b69ed6e51be446c5ba4a4427c37" - integrity sha512-QHmYyLqKSaYnxsbZOVI3cx543lrTOzooHdH3FKjh5KBiZ84vmqBdngKvZIMWj6/2iPMIE6y+kp4VOXqm8qrLKA== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/messages" "^2.0.6" - -"@remirror/extension-find@^0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@remirror/extension-find/-/extension-find-0.1.6.tgz#efdb5b6ca28aa0e517b031c2f3817425bbdeb6af" - integrity sha512-WWcA6B4HXUU6kj4SP3OxKByFk07JQj99qQOw8nTFSTZ1AtUD4N2T/D5kSK2Uzmkreh/lCI5VJvTFwVEjft+3qg== - dependencies: - "@remirror/core" "^2.0.13" - "@types/string.prototype.matchall" "^4.0.1" - escape-string-regexp "^4.0.0" - string.prototype.matchall "^4.0.8" - -"@remirror/extension-font-family@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-font-family/-/extension-font-family-2.0.13.tgz#4b52be3f111ec72ae79c2debe490ebb5b60ce5a7" - integrity sha512-sGq1ChvxlwlfKnrYlKtlynG8/vbQhYznf3FlrMHycpzZTn4DW16SOlJMZlYD/bPbCFIY/5T6ZSOdUVeDOv6zoQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-font-size@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-font-size/-/extension-font-size-2.0.13.tgz#9b667538238588ff0347d7f0f5ab36765b29a91b" - integrity sha512-j7wXaOrIVdj4PapC7g4yqpPVULUqCIiUOqt2lwKVXFbET/sXMD2RujR8zSng+VFTLFQyem53jHOkJmD+B5QJKw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - round "^2.0.1" - -"@remirror/extension-gap-cursor@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-gap-cursor/-/extension-gap-cursor-2.0.13.tgz#ac0ee4907f04fc3c853c864cdf0c10ce8d6dc6d8" - integrity sha512-oaLrh/6cRhAdEksDNmrEcqnVixRjzARDr+cq2jJfPdVG0316xgNi7CkTnWJJCWSqQ4D6lrriMY5pQO3Qwlv5Kg== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-hard-break@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-hard-break/-/extension-hard-break-2.0.13.tgz#e3ee9e15837f655beadb17f1a7d4dd0094fa09ba" - integrity sha512-86T5bWl7O6feaXYIUylAuzq6lbpWhF6cM7CY7IW5c9+l8qpUMSktylfgAVAajjAtIfIB+g83m0D2AjL5VXksvg== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-heading@^2.0.13", "@remirror/extension-heading@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-heading/-/extension-heading-2.0.14.tgz#b9ccca44d9cb2c4cc48f16e7352f6c71d5f65cc1" - integrity sha512-jBBQhLSbEvR/IbSyzBLPN6P69zGoYrW/lxclMPccBxiqr/Rzc1ynJqrbXPQOzj3P43bRLdjXBKiy2VJWzqqO8Q== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.17" - "@remirror/messages" "^2.0.5" - -"@remirror/extension-history@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-history/-/extension-history-2.0.13.tgz#1bb1883b598fe5f7b9fd594795025afd76481435" - integrity sha512-LjW60KVpniRawttyhrWxM6ieE8sTYprqpCdMRbc7RuxBhdHaxlcQJGAjJvnBM7078qV/55S616P620YGYaBU4w== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-horizontal-rule@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-horizontal-rule/-/extension-horizontal-rule-2.0.13.tgz#76554e58b60841a4bac8e957a316bf4d238bc782" - integrity sha512-CV1lIWZ0n8btANKIP4xiUzTFbWRhOiBfdncePZvoRSYTa4UwfAQ6KapUVkcUHEL20UtDkDX8fGpF6kjtEGRCCQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-image@^2.1.10", "@remirror/extension-image@^2.1.9": - version "2.1.10" - resolved "https://registry.yarnpkg.com/@remirror/extension-image/-/extension-image-2.1.10.tgz#e42da0ba0274c9b7979b61f184a319052e2dc38e" - integrity sha512-x2Sa/cXVcavOks6k5CkTrGGj0lDnDrc7PhRBbOqQCIzKXB36idRZWGBIzBkjvZrifqfxY2UUZ73BuABc0HHg6Q== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/messages" "^2.0.6" - "@remirror/theme" "^2.0.9" - prosemirror-resizable-view "^2.0.14" - -"@remirror/extension-italic@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-italic/-/extension-italic-2.0.13.tgz#089d80673d35372cd61148a0be3acd6dd4b4a609" - integrity sha512-DZ7BoIxQqwTWoTYgc7GpK+SCBKfDoJjh4xKQIrC/45tcK+WdPaaxNRhdtGUzwOhHL2psYT6HtDOyN/DpO5hjWQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-link@^2.0.15", "@remirror/extension-link@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@remirror/extension-link/-/extension-link-2.0.17.tgz#5bdcc2c47880f9004fbd776203f226545f81b22f" - integrity sha512-LZguN6F/3DyXqPdtCZn/WPXErhe5jWLoMNEsNDttKpX9kZRgqHYFuGBjOdIWP/lRa5Fh0tMk9c34+6RsWH1zdg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.16" - "@remirror/extension-events" "^2.1.15" - "@remirror/messages" "^2.0.4" - extract-domain "2.2.1" - -"@remirror/extension-list@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@remirror/extension-list/-/extension-list-2.0.16.tgz#ea0bd0aac797e25f2ab1e10408249ed073672dbb" - integrity sha512-nqRvlQotHubZxpWxwdt+3FyV6AmEifx5aytKtz0i/jub9cM8AUKHqkRrsQchvw1Y5jaSAjHJr3J7I2sLBiH78w== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-events" "^2.1.14" - "@remirror/messages" "^2.0.3" - "@remirror/theme" "^2.0.7" - -"@remirror/extension-markdown@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-markdown/-/extension-markdown-2.0.13.tgz#4d40f68a70d6281a675c078e3389a8ea0d11870e" - integrity sha512-f++5Sc9yfUFlt6YHPXId+KuzfK0gQSWYY67Vv4oz2pzP92AINKa+YULpySCxkKKj1gqvpkFlmDAUIsG5AGA+Aw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - "@types/marked" "^4.0.8" - "@types/turndown" "^5.0.1" - marked "^4.3.0" - turndown "^7.1.2" - turndown-plugin-gfm "^1.0.2" - -"@remirror/extension-mention-atom@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@remirror/extension-mention-atom/-/extension-mention-atom-2.0.17.tgz#2662c4f770b0ffa5ba0b9f88528004b7146bb471" - integrity sha512-RTHmhCrz8YVcMaifpKH8NB1aNxtgLRBG6ETyZgaPN2l9xcaRvtN5YHUb5myZsw0U4rUBXePI57/91j7QkxXw0Q== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.16" - "@remirror/extension-events" "^2.1.15" - "@remirror/messages" "^2.0.4" - "@remirror/theme" "^2.0.8" - -"@remirror/extension-mention@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@remirror/extension-mention/-/extension-mention-2.0.15.tgz#1bfe713db515c1ce62720ced36b112875780bf67" - integrity sha512-6w+859yva48+Kg6ELIoj9+MHKljdKuXdSKU3X7USZNNiH+qb2zxdL3AHw0ifMC9ltzC3zg/ePYM5mE9SYPBt3w== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-events" "^2.1.14" - "@remirror/messages" "^2.0.3" - escape-string-regexp "^4.0.0" - -"@remirror/extension-node-formatting@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-node-formatting/-/extension-node-formatting-2.0.13.tgz#fc1b58ee4e441084e934e2c8ded82e5964deee20" - integrity sha512-yL1Jk1Qjs2VmruGltV++D4QenmpDdAiOa4KQvRx0cgTvIuQ/rxQBV19IXkAj+rTzYfZmtI6W1DdScVY9bqCZ9w== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-paragraph@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-paragraph/-/extension-paragraph-2.0.13.tgz#eac5767364ff2abf4f8bc1e9b3e2cd80b6cb536a" - integrity sha512-/iEYz6Sn/RLqTefa/vjjyfhMQAGcpNQY7hdW0rSox+IiwDKeeY+uR2TCi3hs/D9IMzNERZXMKD5Wk8ver1kYCg== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-placeholder@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-placeholder/-/extension-placeholder-2.0.14.tgz#3d9e8b1a48d0b1c6f3fe931703f86f2c75d3153d" - integrity sha512-YyrDs1Plyrpy5N6ehG3QOZNxpsQpDdI34yFQst+g2t/amnY6ScCnAJJ4GE666P4xnPF2V9gY0478Re09JmJ1KQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - "@remirror/theme" "^2.0.7" - -"@remirror/extension-positioner@^2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@remirror/extension-positioner/-/extension-positioner-2.1.8.tgz#2aa14df658dc0cb8892ac7f424226cb09c6b5063" - integrity sha512-7svqCFayauNSFCXejvitFqkTUhxk74FCCoWNI2S4p8m0y80TzJDVrASjc2m8/kZALjVeIE4Byg1gE58zj3r9SA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-events" "^2.1.14" - "@remirror/messages" "^2.0.3" - "@remirror/theme" "^2.0.7" - nanoevents "^5.1.13" - -"@remirror/extension-react-component@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-react-component/-/extension-react-component-2.0.13.tgz#8c64a661112632c1f680a4a9a289adbb90b0dee4" - integrity sha512-xKzfgrmhncUQXkTjGqlYUxjG/QmxWjtEzpXRpND3YYULTPcxlVK4dNXtPvk0aczD6cvZVZohOeRSl8ESSLSo6A== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - nanoevents "^5.1.13" - -"@remirror/extension-react-tables@^2.2.11", "@remirror/extension-react-tables@^2.2.18": - version "2.2.18" - resolved "https://registry.yarnpkg.com/@remirror/extension-react-tables/-/extension-react-tables-2.2.18.tgz#914db5daac8059f3658e39bc9e29758baa5e09d5" - integrity sha512-hv4edyYEBzZ0VhAHbzcfFxbLGbHhw1jGb20jU+qx1zPrgpMakdAl5qESMdy+1yyB7kHPRPGOpzpH62pkvm9HgQ== - dependencies: - "@babel/runtime" "^7.22.3" - "@emotion/css" "^11.11.0" - "@linaria/core" "4.2.10" - "@remirror/core" "^2.0.19" - "@remirror/core-utils" "^2.0.13" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/extension-tables" "^2.3.1" - "@remirror/icons" "^2.0.3" - "@remirror/messages" "^2.0.6" - "@remirror/preset-core" "^2.0.16" - "@remirror/react-components" "^2.1.17" - "@remirror/react-core" "^2.0.21" - "@remirror/react-hooks" "^2.0.25" - "@remirror/theme" "^2.0.9" - jsx-dom-cjs "^8.0.6" - -"@remirror/extension-search@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-search/-/extension-search-2.0.14.tgz#a8b5429411041a437e1f92b12cb21e220f15819c" - integrity sha512-PZrf20bqr8n+E1kgeb6uQJG5ZeD8nHTzzICZRe01ltwmO4vqnWMXr7Tm5Z6Byh+ZqwLbMWkIeUzoaV7RdBQ94Q== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - escape-string-regexp "^4.0.0" - -"@remirror/extension-shortcuts@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-shortcuts/-/extension-shortcuts-2.0.13.tgz#eeeda18a5ebf842d3efb74acf688cac7bb78a976" - integrity sha512-LHHn7lnbicL9CQet9w9Aayw25SqsA5s9ysGWO9R9DbrYKJWWL1EijvZ3rz+N6nlb9/ItFWA6eNSSUSausnv+iA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - -"@remirror/extension-strike@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-strike/-/extension-strike-2.0.13.tgz#0bd65d983cc250b5ae21030b82ce5593ede74ae8" - integrity sha512-42aEM12xux3RoxTZHJ6OBPpHux96btiMC7btPz7lJ/mqcAtVvIP3RHb8D01esU7KEpqIaI6H6n2WKc/JmvCdMQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-sub@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-sub/-/extension-sub-2.0.13.tgz#718e9890b9c78c870f0d106a505d4e86d83c640d" - integrity sha512-eeEdHBWynyoU6YXc6Xt+n93nK2JJ0ry2TGqr8nzomssm2gddASPJKXFoPELuwME/iqzz64SxU/RcI7BRc/lbdw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-sup@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-sup/-/extension-sup-2.0.13.tgz#8f3a8bafcca1925ec5bbf5cf336fd10db292cdc1" - integrity sha512-8Pz+K8aSlxVCeqk9ZSX+JiSBNeCau8EbGkfTg1wAatq1jCrNhFHOHoazYOqA+nJjYP7/c5hiCoPYLpyXweIX3w== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-tables@^2.2.10", "@remirror/extension-tables@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@remirror/extension-tables/-/extension-tables-2.3.1.tgz#43cbec67366f2810f877c3eb9c69eacfd788b20e" - integrity sha512-SJ/vIrEql+dSC1K2vWr+g9fGONGYMId4D4AZWq0E/ttENZo8jZqEeUAV+Z6NIfPJyScVsXKxolZAVGWfZ4JK6g== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/extension-events" "^2.1.16" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/messages" "^2.0.6" - "@remirror/theme" "^2.0.9" - -"@remirror/extension-text-case@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-text-case/-/extension-text-case-2.0.13.tgz#d3bd5923f48befe7fe9f5d275ed7301c3b88e7d3" - integrity sha512-sC0VoHUf2DHKAznn6+19eJTc2z8H6diz49MGodOtnGU9eCYbkKa1aoVB1ZMQndLAIQJ6kR9ElEOMvk4bpu++UA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-text-color@^2.0.14", "@remirror/extension-text-color@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@remirror/extension-text-color/-/extension-text-color-2.0.15.tgz#9aab912e041fe71298313b5aa7389268f3c877b6" - integrity sha512-BCcJ2zyt+pu7WGru9D9SfnodtPz0zxRibVqZOsRvNGJQN29Bvxs89e5tV+xTlAoXUz9gwxJrM6cn03umu18mbA== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.17" - "@remirror/i18n" "^2.0.4" - "@remirror/messages" "^2.0.5" - "@remirror/theme" "^2.0.8" - color2k "^2.0.2" - -"@remirror/extension-text-highlight@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/extension-text-highlight/-/extension-text-highlight-2.0.14.tgz#b3c36646fa9a200676a93078f31f57e48dc7dd7d" - integrity sha512-stZ58DDD9jJYHUbSVeJ/r61Ywp7Zt7OtdJFeeD6fjWE6gs/SwQ7MCpIMD9GpFuwOgXsRu6FlOUPllzocpsga6Q== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-text-color" "^2.0.14" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-text@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-text/-/extension-text-2.0.13.tgz#98c6ddeb09910e113b3964009df6baf6fa2bb062" - integrity sha512-0lGw8zz3OZzRY5zGrI1gXJIfuv23Yf3IdK3507oqE0oVAnP61vPB5WMaYv3EtGez9g3RoXO8S0bIJJ3syzdILg== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-trailing-node@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-trailing-node/-/extension-trailing-node-2.0.13.tgz#283fa1cf778430fc9074c4133d1ec714ec4daeb4" - integrity sha512-DCeovi8yJ8HzTHZ/8bIxalm7aSjngN2B+DazGb5b6iLPFiEi00zucsw81bnVkHMa8DKDeH7WVbe13wZI+tn+KA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-underline@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-underline/-/extension-underline-2.0.13.tgz#7b4cae752290a5c1bee21300e4a3a7f35bd9a39c" - integrity sha512-wrNDSqNvwqtZBiz0nOEQaWOEthxOtBVwkuTku83Sh7ftK6rNWJXtHKNKGUAFW6A9FXxvvqrnr8+n0DSgYdIAMA== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-whitespace@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/extension-whitespace/-/extension-whitespace-2.0.13.tgz#a71b077f4ce7dca737371855626d2acf2c2066cd" - integrity sha512-daRoiH2/xZWrz8tzV14rfG8Catd0ThPJdWgoQ0en3QxcwYsTOP1+DXE1ZwUdP/uukuHg6DMAvgMvsWwJMtVx9A== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/messages" "^2.0.3" - -"@remirror/extension-yjs@^3.0.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@remirror/extension-yjs/-/extension-yjs-3.0.15.tgz#3fd4cef6b11fd7b16162d0d4581f7e0b6fbeffb0" - integrity sha512-XLKWueyyXsdmv5KSitW86kwAYUrKKE5dAazv+WlHZMtKWjWhfhxMMWgct8R1Gp1sOfVHZhbGf+KxgOfxxMDsRg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/messages" "^2.0.6" - prosemirror-model "^1.19.3" - prosemirror-state "^1.4.3" - prosemirror-view "^1.31.7" - y-prosemirror "^1.0.19" - y-protocols "^1.0.5" - -"@remirror/i18n@^2.0.4", "@remirror/i18n@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@remirror/i18n/-/i18n-2.0.5.tgz#783e9118a875cd639576af26999d013f3e4523a6" - integrity sha512-oZ2umZav60iu+lBoVZxr7i11yUNRYpczVUXCsClNiHN55PDPMyYwNQ9CaEJdyQCvt0lb5WCmBNpnw1mbLaj7lQ== - dependencies: - "@babel/runtime" "^7.22.3" - "@lingui/core" "^4.2.0" - "@lingui/detect-locale" "^4.2.0" - "@remirror/core-helpers" "^3.0.0" - make-plural "^6.2.2" - -"@remirror/icons@^2.0.2", "@remirror/icons@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@remirror/icons/-/icons-2.0.3.tgz#977e93b7f5cc1f0be03c77dc02005e1a70180c1e" - integrity sha512-ruOGU4FT6WJdXsdVwfNOurSaQvnk2Uo4AkMxxyLYkBPowxmR9Xe0lOn7d7UARai0wxmwFgX6IYaMSUVLIaaMCQ== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-helpers" "^3.0.0" - -"@remirror/messages@^2.0.3", "@remirror/messages@^2.0.4", "@remirror/messages@^2.0.5", "@remirror/messages@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@remirror/messages/-/messages-2.0.6.tgz#6b87a69001c691354cef3fa03f43e634edec69ce" - integrity sha512-JVnfuzuul4tcvnjiSM7Jj6iKDOP4hfaw79SciZ7t+cc2+iWyAcDYSrFMDV4Q50T+2IfWTYlWtKGpIhG6sfZaWw== - dependencies: - "@babel/runtime" "^7.22.3" - "@lingui/core" "^4.2.0" - "@remirror/core-helpers" "^3.0.0" - -"@remirror/pm@^2.0.3": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@remirror/pm/-/pm-2.0.8.tgz#98c722d7bb5f3cc14e9255897fb6813ab0b0cb9a" - integrity sha512-aHJQKcPkv0dUCcpM61JpKqRhPUA0YBlGJGF1p9zrc2a7fxmwt31UOGFVk4qSdZ2UIMczCuSEy/D6Trp/fl8x2g== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - prosemirror-collab "^1.3.1" - prosemirror-commands "^1.5.2" - prosemirror-dropcursor "^1.8.1" - prosemirror-gapcursor "^1.3.2" - prosemirror-history "^1.3.2" - prosemirror-inputrules "^1.2.1" - prosemirror-keymap "^1.2.2" - prosemirror-model "^1.19.3" - prosemirror-paste-rules "^2.0.7" - prosemirror-schema-list "^1.3.0" - prosemirror-state "^1.4.3" - prosemirror-suggest "^2.0.6" - prosemirror-tables "^1.3.4" - prosemirror-trailing-node "^2.0.7" - prosemirror-transform "^1.7.4" - prosemirror-view "^1.31.7" - -"@remirror/preset-core@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@remirror/preset-core/-/preset-core-2.0.16.tgz#3194a7786850e9a6a1069da85183d727f49f1637" - integrity sha512-Qg5kDJIoSqSCtqwuT/+xq1pXf5XHonnqE4oRL5Z7Tu9RRmQ6evMhdc6CqehP5xwI+52g7q9CCRQYyNAtAhS3LQ== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-doc" "^2.1.5" - "@remirror/extension-events" "^2.1.14" - "@remirror/extension-gap-cursor" "^2.0.13" - "@remirror/extension-history" "^2.0.13" - "@remirror/extension-paragraph" "^2.0.13" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/extension-text" "^2.0.13" - -"@remirror/preset-formatting@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/preset-formatting/-/preset-formatting-2.0.14.tgz#4c2939954a3ec733038e44f69029b3228e18ba2a" - integrity sha512-Dn8AITrTycEsO3kmR3kiWE8tCjWQUmK4vvyE/aGTyvHQHsDt1KhK6X42os7D+ePxeRf4OkhaZJhdpVmujmCCUw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-bold" "^2.0.13" - "@remirror/extension-columns" "^2.0.13" - "@remirror/extension-font-size" "^2.0.13" - "@remirror/extension-heading" "^2.0.13" - "@remirror/extension-italic" "^2.0.13" - "@remirror/extension-node-formatting" "^2.0.13" - "@remirror/extension-strike" "^2.0.13" - "@remirror/extension-sub" "^2.0.13" - "@remirror/extension-sup" "^2.0.13" - "@remirror/extension-text-case" "^2.0.13" - "@remirror/extension-text-color" "^2.0.14" - "@remirror/extension-text-highlight" "^2.0.14" - "@remirror/extension-underline" "^2.0.13" - "@remirror/extension-whitespace" "^2.0.13" - -"@remirror/preset-react@^2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@remirror/preset-react/-/preset-react-2.0.14.tgz#58eec4853e6582dec37d4d8df81b0b0d15885e3b" - integrity sha512-brsNceisHfXbBqmuCFEj8bBlc3Ggnz8uGynS5bHDzfFP7EZgsOjIaHu6BpkifX/3qaJlzPSj3p1keoUgeqt6Zg== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-placeholder" "^2.0.14" - "@remirror/extension-react-component" "^2.0.13" - "@remirror/react-utils" "^2.0.5" - -"@remirror/preset-wysiwyg@^2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@remirror/preset-wysiwyg/-/preset-wysiwyg-2.0.19.tgz#58e7050a29ba2cf2b35177c1e1916615ea8d67e4" - integrity sha512-yYDfHy3WJzBmYkTd1R8WgY0xND4ZhSOQSmWWxYcCb9QJOWqeX/LREk6Ac+FV2Ygc+aoRGx5HI2R6POehe1fb5g== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - "@remirror/extension-bidi" "^2.0.13" - "@remirror/extension-blockquote" "^2.0.14" - "@remirror/extension-bold" "^2.0.13" - "@remirror/extension-code" "^2.0.13" - "@remirror/extension-code-block" "^2.0.14" - "@remirror/extension-drop-cursor" "^2.0.13" - "@remirror/extension-embed" "^2.0.13" - "@remirror/extension-gap-cursor" "^2.0.13" - "@remirror/extension-hard-break" "^2.0.13" - "@remirror/extension-heading" "^2.0.13" - "@remirror/extension-horizontal-rule" "^2.0.13" - "@remirror/extension-image" "^2.1.9" - "@remirror/extension-italic" "^2.0.13" - "@remirror/extension-link" "^2.0.15" - "@remirror/extension-list" "^2.0.16" - "@remirror/extension-search" "^2.0.14" - "@remirror/extension-shortcuts" "^2.0.13" - "@remirror/extension-strike" "^2.0.13" - "@remirror/extension-trailing-node" "^2.0.13" - "@remirror/extension-underline" "^2.0.13" - "@remirror/preset-core" "^2.0.16" - -"@remirror/react-components@^2.1.17": - version "2.1.17" - resolved "https://registry.yarnpkg.com/@remirror/react-components/-/react-components-2.1.17.tgz#e9f68e1302b58c90c2a6671001946054140aa779" - integrity sha512-25BIEfYJO10cxpChyA2fKdmQw5VSDD/Ltcjlxps9DuXTYtjPD1WQnwVdpUyW43W2r7UsvZ2OcVGtQLdJw+RBiw== - dependencies: - "@babel/runtime" "^7.22.3" - "@emotion/react" "^11.11.0" - "@emotion/styled" "^11.11.0" - "@floating-ui/react" "^0.24.3" - "@lingui/core" "^4.2.0" - "@mui/material" "^5.13.2" - "@remirror/core" "^2.0.17" - "@remirror/extension-blockquote" "^2.0.14" - "@remirror/extension-bold" "^2.0.13" - "@remirror/extension-callout" "^2.0.15" - "@remirror/extension-code" "^2.0.13" - "@remirror/extension-code-block" "^2.0.15" - "@remirror/extension-columns" "^2.0.14" - "@remirror/extension-find" "^0.1.6" - "@remirror/extension-font-size" "^2.0.13" - "@remirror/extension-heading" "^2.0.14" - "@remirror/extension-history" "^2.0.13" - "@remirror/extension-horizontal-rule" "^2.0.13" - "@remirror/extension-italic" "^2.0.13" - "@remirror/extension-list" "^2.0.16" - "@remirror/extension-node-formatting" "^2.0.13" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/extension-strike" "^2.0.13" - "@remirror/extension-sub" "^2.0.13" - "@remirror/extension-sup" "^2.0.13" - "@remirror/extension-tables" "^2.2.10" - "@remirror/extension-text-color" "^2.0.15" - "@remirror/extension-underline" "^2.0.13" - "@remirror/extension-whitespace" "^2.0.13" - "@remirror/i18n" "^2.0.4" - "@remirror/icons" "^2.0.2" - "@remirror/messages" "^2.0.5" - "@remirror/react-core" "^2.0.20" - "@remirror/react-hooks" "^2.0.25" - "@remirror/react-utils" "^2.0.5" - "@remirror/theme" "^2.0.8" - "@seznam/compose-react-refs" "^1.0.6" - "@types/react-color" "^3.0.6" - create-context-state "^2.0.2" - match-sorter "^6.3.1" - multishift "^2.0.8" - react-color "^2.19.3" - -"@remirror/react-core@^2.0.20", "@remirror/react-core@^2.0.21": - version "2.0.21" - resolved "https://registry.yarnpkg.com/@remirror/react-core/-/react-core-2.0.21.tgz#11ab05e476bf53849aa28680321957c1154b791f" - integrity sha512-8c7+e0Y0LmwErqR4nPdUs73WLFKGqVs/DuE9q0wxSfXWbArAFVAAZB4PWrpcbYMbb0jSvG7rKDgnFN8NM/1f5A== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.18" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/extension-react-component" "^2.0.13" - "@remirror/i18n" "^2.0.4" - "@remirror/preset-core" "^2.0.16" - "@remirror/preset-react" "^2.0.14" - "@remirror/react-renderer" "^2.0.13" - "@remirror/react-utils" "^2.0.5" - "@remirror/theme" "^2.0.8" - "@seznam/compose-react-refs" "^1.0.6" - create-context-state "^2.0.2" - fast-deep-equal "^3.1.3" - resize-observer-polyfill "^1.5.1" - tiny-warning "^1.0.3" - -"@remirror/react-hooks@^2.0.25": - version "2.0.25" - resolved "https://registry.yarnpkg.com/@remirror/react-hooks/-/react-hooks-2.0.25.tgz#ff459872ba4222ac248edb083e9ffa1fd6ed4a44" - integrity sha512-/qByk9+OSDVBFD5N3CalsXNvbHF0GEfOEhNstsBGvg0xxf0NsuvPj1rYcXnVHk+9mgx2TMh+EiOhfURRR2A9vg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.17" - "@remirror/extension-emoji" "^2.0.17" - "@remirror/extension-events" "^2.1.15" - "@remirror/extension-history" "^2.0.13" - "@remirror/extension-mention" "^2.0.15" - "@remirror/extension-mention-atom" "^2.0.17" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/i18n" "^2.0.4" - "@remirror/react-core" "^2.0.20" - "@remirror/react-utils" "^2.0.5" - multishift "^2.0.8" - use-isomorphic-layout-effect "^1.1.2" - use-previous "^1.2.0" - -"@remirror/react-renderer@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@remirror/react-renderer/-/react-renderer-2.0.13.tgz#2af76c30629c1c9782c7118984e103ae3a8baf2b" - integrity sha512-72K/+j+6H1QPPXzQJT3DxY4I+Anc9W5XvqEyPE2GQST4Q6W1Lib10Rvdh/hxcC0TuPEa+Nam2DkRWBxSSsIATw== - dependencies: - "@babel/runtime" "^7.21.0" - "@remirror/core" "^2.0.13" - -"@remirror/react-utils@^2.0.5", "@remirror/react-utils@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@remirror/react-utils/-/react-utils-2.0.7.tgz#487ce2de395a27c089eec4ba67eb1494b90a5c59" - integrity sha512-FowQ47k0IV+8qVvQZu5OOS014FTPQ1x2BsXgfikvrMlggx5mRgsFkJ5Sf56iieyUUHqBwVXIWHtR2KVanQWbVQ== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - "@remirror/core-types" "^2.0.5" - -"@remirror/react@^2.0.24": - version "2.0.35" - resolved "https://registry.yarnpkg.com/@remirror/react/-/react-2.0.35.tgz#6fc9a4fcef2ffdb810b6a88cbb81a0a2b5a6f73c" - integrity sha512-SFs64SiQoHUatR+guSo9G1EVwBLqZec+tUtxdun11zC/5iiye0qIk+gnvu2h5pl0zwdqpK+b0ZQ/lR7JKzwagA== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/extension-placeholder" "^2.0.14" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/extension-react-component" "^2.0.13" - "@remirror/extension-react-tables" "^2.2.18" - "@remirror/preset-react" "^2.0.14" - "@remirror/react-components" "^2.1.17" - "@remirror/react-core" "^2.0.21" - "@remirror/react-hooks" "^2.0.25" - "@remirror/react-renderer" "^2.0.13" - "@remirror/react-utils" "^2.0.7" - -"@remirror/theme@^2.0.7", "@remirror/theme@^2.0.8", "@remirror/theme@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@remirror/theme/-/theme-2.0.9.tgz#0ae990448e90cfead0a6ff7d36b414165a9c663d" - integrity sha512-MI6j7C9KImVyfSBh9GR/WQCuLQKXRKQkE0HsS8Sc/BC8a/0n4QTt7dAg5/a/+MbakyymNaGlibCdts8URgGStg== - dependencies: - "@babel/runtime" "^7.22.3" - "@linaria/core" "4.2.10" - "@remirror/core-types" "^2.0.5" - color2k "^2.0.2" - csstype "^3.1.2" - "@remirror/types@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@remirror/types/-/types-1.0.1.tgz#768502497a0fbbc23338a1586b893f729310cf70" @@ -2993,26 +1990,26 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69" integrity sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw== -"@sentry-internal/tracing@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.61.1.tgz#8055b7dfbf89b7089a591b27e05484d5f6773948" - integrity sha512-E8J6ZMXHGdWdmgKBK/ounuUppDK65c4Hphin6iVckDGMEATn0auYAKngeyRUMLof1167DssD8wxcIA4aBvmScA== +"@sentry-internal/tracing@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.62.0.tgz#f14400f20a32844f2895a8a333080d52fa32cd1d" + integrity sha512-LHT8i2c93JhQ1uBU1cqb5AIhmHPWlyovE4ZQjqEizk6Fk7jXc9L8kKhaIWELVPn8Xg6YtfGWhRBZk3ssj4JpfQ== dependencies: - "@sentry/core" "7.61.1" - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry/core" "7.62.0" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/browser@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.61.1.tgz#ce5005ea76d4c2e91c09a43b218c25cc5e9c1340" - integrity sha512-v6Wv0O/PF+sqji+WWpJmxAlQafsiKmsXQLzKAIntVjl3HbYO5oVS3ubCyqfxSlLxIhM5JuHcEOLn6Zi3DPtpcw== +"@sentry/browser@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.62.0.tgz#0b00a0ed8e4cd4873f7ec413b094ec6b170bb085" + integrity sha512-e52EPiRtPTZv+9iFIZT3n8qNozc8ymqT0ra7QwkwbVuF9fWSCOc1gzkTa9VKd/xwcGzOfglozl2O+Zz4GtoGUg== dependencies: - "@sentry-internal/tracing" "7.61.1" - "@sentry/core" "7.61.1" - "@sentry/replay" "7.61.1" - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry-internal/tracing" "7.62.0" + "@sentry/core" "7.62.0" + "@sentry/replay" "7.62.0" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" tslib "^2.4.1 || ^1.9.3" "@sentry/cli@^1.74.6": @@ -3027,88 +2024,88 @@ proxy-from-env "^1.1.0" which "^2.0.2" -"@sentry/core@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.61.1.tgz#8043c7cecf5ca0601f6c61979fb2880ceac37287" - integrity sha512-WTRt0J33KhUbYuDQZ5G58kdsNeQ5JYrpi6o+Qz+1xTv60DQq/tBGRJ7d86SkmdnGIiTs6W1hsxAtyiLS0y9d2A== +"@sentry/core@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.62.0.tgz#3d9571741b052b1f2fa8fb8ae0088de8e79b4f4e" + integrity sha512-l6n+c3mSlWa+FhT/KBrAU1BtbaLYCljf5MuGlH6NKRpnBcrZCbzk8ZuFcSND+gr2SqxycQkhEWX1zxVHPDdZxw== dependencies: - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/integrations@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.61.1.tgz#ca9bf2fc59c852f5e73543bb7e69b181a4ef2d45" - integrity sha512-mdmWzUQmW1viOiW0/Gi6AQ5LXukqhuefjzLdn5o6HMxiAgskIpNX+0+BOQ/6162/o7mHWSTNEHqEzMNTK2ppLw== +"@sentry/integrations@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.62.0.tgz#fad35d8de97890b35269d132636218ae157dab22" + integrity sha512-BNlW4xczhbL+zmmc8kFZunjKBrVYZsAltQ/gMuaHw5iiEr+chVMgQDQ2A9EVB7WEtuTJQ0XmeqofH2nAk2qYHg== dependencies: - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" localforage "^1.8.1" tslib "^2.4.1 || ^1.9.3" "@sentry/nextjs@^7.36.0": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.61.1.tgz#556bd48740dd67694ee54aaed042a22c255290ed" - integrity sha512-ssq0AX+QaDzLSeA45lQLt3OVkzUNiNsI5loMU9gq+Bsts3KOHnykturFvdrb5T3WuIucE6PsswNjZIWqP+lrMg== + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.62.0.tgz#6a5362dc03c768e8ef855ea7c26f94dddc40d7eb" + integrity sha512-Hg5D8dAgGkn+ZoTh2SSOx35hcVJUf9QO4D2FKFmPwFpnrpP/thcusE7m2k6jsUlK6jBvZhtC0rcZk26K3WsioA== dependencies: "@rollup/plugin-commonjs" "24.0.0" - "@sentry/core" "7.61.1" - "@sentry/integrations" "7.61.1" - "@sentry/node" "7.61.1" - "@sentry/react" "7.61.1" - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry/core" "7.62.0" + "@sentry/integrations" "7.62.0" + "@sentry/node" "7.62.0" + "@sentry/react" "7.62.0" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" "@sentry/webpack-plugin" "1.20.0" chalk "3.0.0" rollup "2.78.0" stacktrace-parser "^0.1.10" tslib "^2.4.1 || ^1.9.3" -"@sentry/node@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.61.1.tgz#bc49d321d0a511936f8bdd0bbd3ddc5e01b8d98c" - integrity sha512-+crVAeymXdWZcDuwU9xySf4sVv2fHOFlr13XqeXl73q4zqKJM1IX4VUO9On3+jTyGfB5SCAuBBYpzA3ehBfeYw== +"@sentry/node@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.62.0.tgz#8ccac64974748705103fccd3cf40f76003bad94a" + integrity sha512-2z1JmYV97eJ8zwshJA15hppjRdUeMhbaL8LSsbdtx7vTMmjuaIGfPR4EnI4Fhuw+J1Nnf5sE/CRKpZCCa74vXw== dependencies: - "@sentry-internal/tracing" "7.61.1" - "@sentry/core" "7.61.1" - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry-internal/tracing" "7.62.0" + "@sentry/core" "7.62.0" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/react@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.61.1.tgz#88a62fe9a847ffb0feeff935c49737abd7904007" - integrity sha512-n8xNT05gdERpETvq3GJZ2lP6HZYLRQQoUDc13egDzKf840MzCjle0LiLmsVhRv8AL1GnWaIPwnvTGvS4BuNlvw== +"@sentry/react@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.62.0.tgz#8fa7246ba61f57c007893d76dcd5784b4e12d34e" + integrity sha512-jCQEs6lYGQdqj6XXWdR+i5IzJMgrSzTFI/TSMSeTdAeldmppg7uuRuJlBJGaWsxoiwed539Vn3kitRswn1ugeA== dependencies: - "@sentry/browser" "7.61.1" - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry/browser" "7.62.0" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" hoist-non-react-statics "^3.3.2" tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.61.1.tgz#20cdb5f31b5ce25a7afe11bcaaf67b1f875d2833" - integrity sha512-Nsnnzx8c+DRjnfQ0Md11KGdY21XOPa50T2B3eBEyFAhibvYEc/68PuyVWkMBQ7w9zo/JV+q6HpIXKD0THUtqZA== +"@sentry/replay@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.62.0.tgz#9131c24ae2e797ae47983834ba88b3b5c7f6e566" + integrity sha512-mSbqtV6waQAvWTG07uR211jft63HduRXdHq+1xuaKulDcZ9chOkYqOCMpL0HjRIANEiZRTDDKlIo4s+3jkY5Ug== dependencies: - "@sentry/core" "7.61.1" - "@sentry/types" "7.61.1" - "@sentry/utils" "7.61.1" + "@sentry/core" "7.62.0" + "@sentry/types" "7.62.0" + "@sentry/utils" "7.62.0" -"@sentry/types@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.61.1.tgz#225912689459c92e62f0b6e3ff145f6dbf72ff0e" - integrity sha512-CpPKL+OfwYOduRX9AT3p+Ie1fftgcCPd5WofTVVq7xeWRuerOOf2iJd0v+8yHQ25omgres1YOttDkCcvQRn4Jw== +"@sentry/types@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.62.0.tgz#f15729f656459ffa3a5998fafe9d17ee7fb1c9ff" + integrity sha512-oPy/fIT3o2VQWLTq01R2W/jt13APYMqZCVa0IT3lF9lgxzgfTbeZl3nX2FgCcc8ntDZC0dVw03dL+wLvjPqQpQ== -"@sentry/utils@7.61.1": - version "7.61.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.61.1.tgz#1545db778b7309d122a7f04eb0e803173c80c581" - integrity sha512-pUPXoiuYrTEPcBHjRizFB6eZEGm/6cTBwdWSHUjkGKvt19zuZ1ixFJQV6LrIL/AMeiQbmfQ+kTd/8SR7E9rcTQ== +"@sentry/utils@7.62.0": + version "7.62.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.62.0.tgz#915501c6056d704a9625239a1f584a7b2e4492ea" + integrity sha512-12w+Lpvn2iaocgjf6AxhtBz7XG8iFE5aMyt9BTuQp1/7sOjtEVNHlDlGrHbtPqxNCmL2SEcmNHka1panLqWHDw== dependencies: - "@sentry/types" "7.61.1" + "@sentry/types" "7.62.0" tslib "^2.4.1 || ^1.9.3" "@sentry/webpack-plugin@1.20.0": @@ -3119,11 +2116,6 @@ "@sentry/cli" "^1.74.6" webpack-sources "^2.0.0 || ^3.0.0" -"@seznam/compose-react-refs@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@seznam/compose-react-refs/-/compose-react-refs-1.0.6.tgz#6ec4e70bdd6e32f8e70b4100f27267cf306bd8df" - integrity sha512-izzOXQfeQLonzrIQb8u6LQ8dk+ymz3WXTIXjvOlTXHq6sbzROg3NWU+9TTAOpEoK9Bth24/6F/XrfHJ5yR5n6Q== - "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" @@ -3134,50 +2126,6 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@svgmoji/blob@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@svgmoji/blob/-/blob-3.2.0.tgz#62a0ab1ba22a0d27f23cb38aacf6d4fb13123dfb" - integrity sha512-N96WOrH9GxPSPZ/FuvZl6T9Rh54stAEuUcBppIRFh9/WwkU7Hczrjabw4uunwxFLX5TgR+rHlKJl3/jaTnXJrQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@svgmoji/core" "^3.2.0" - -"@svgmoji/core@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@svgmoji/core/-/core-3.2.0.tgz#792326078ded3446747691d633278010f322f460" - integrity sha512-QsD78Op3S/5kUVsa5ierr4Wu/xwAdYuMI3Zmc/Y2ekYBEMGEUY8QxilXQRSAQ4ku4PnNV4xlB9e7xhD5hy113A== - dependencies: - "@babel/runtime" "^7.12.5" - emojibase "^5.1.0" - emojibase-regex "^5.1.1" - idb-keyval "^5.0.2" - match-sorter "^6.2.0" - type-fest "^1.2.0" - -"@svgmoji/noto@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@svgmoji/noto/-/noto-3.2.0.tgz#ff99dc95f2d098050d9d19696d019fe22677760b" - integrity sha512-JgtNciB06hMDI1Pb1N2IgLh44XRMZUUNwBANzjY5jXTPqOCu1A1VA35ENvUsRhEUZOm8I+hbdAEHkwMVqxLeIQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@svgmoji/core" "^3.2.0" - -"@svgmoji/openmoji@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@svgmoji/openmoji/-/openmoji-3.2.0.tgz#776fece19f8c253206182cb65685c864ba9bebd2" - integrity sha512-USHbG+O80HfmdoNAHbOnlO+2gppXJfHFWKSRFj53Th4aimWEx4/9MB3cFbC3KZ1NOqXaLBq9jDaw4vFuGDVTUQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@svgmoji/core" "^3.2.0" - -"@svgmoji/twemoji@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@svgmoji/twemoji/-/twemoji-3.2.0.tgz#0a12df9f5b30af457b4a1779051de470a15c1b00" - integrity sha512-6xqZgh9viFDKf5wvrxw56ImCR3Ni84IqwK45lxojOe1Gc1Mni1GpPfr4gb7WHDKjumfx+K7BHSvX0KXt3Nr3CQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@svgmoji/core" "^3.2.0" - "@swc/helpers@0.4.11": version "0.4.11" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" @@ -3202,12 +2150,235 @@ lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@types/codemirror@^5.60.7": - version "5.60.8" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.8.tgz#b647d04b470e8e1836dd84b2879988fc55c9de68" - integrity sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw== +"@tiptap-pro/extension-unique-id@^2.1.0": + version "2.1.0" + resolved "https://registry.tiptap.dev/@tiptap-pro%2fextension-unique-id/-/extension-unique-id-2.1.0.tgz#7f5e7cc2d068eff11531e2b8c894ddf13c8d41d8" + integrity sha512-RdkDqFV0adN/NXJ31I64mD3VmoGhQfNMmOyF5X92fbIymHaonAGzDeoXoindd+6MUUd6e3cm75x5VQLdsddG4Q== + dependencies: + uuid "^8.3.2" + +"@tiptap/core@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.4.tgz#0a2047150ae537e75f96841a603699526f7b4ec5" + integrity sha512-2YOMjRqoBGEP4YGgYpuPuBBJHMeqKOhLnS0WVwjVP84zOmMgZ7A8M6ILC9Xr7Q/qHZCvyBGWOSsI7+3HsEzzYQ== + +"@tiptap/extension-blockquote@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.4.tgz#1e87f8f157573deec65b54d8a8b5568d79066a86" + integrity sha512-z5qfuLi04OgCBI6/odzB2vhulT/wpjymYOnON65vLXGZZbUw4cbPloykhqgWvQp+LzKH+HBhl4fz53d5CgnbOA== + +"@tiptap/extension-bold@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.4.tgz#debba8b0d957fe0b6943354834d8f1f0f8c0695c" + integrity sha512-CWSQy1uWkVsen8HUsqhm+oEIxJrCiCENABUbhaVcJL/MqhnP4Trrh1B6O00Yfoc0XToPRRibDaHMFs4A3MSO0g== + +"@tiptap/extension-bubble-menu@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.4.tgz#f9dde09d3984e9879b1fe13d3e8c1859f0779ef5" + integrity sha512-+cRZwj0YINNNDElSAiX1pvY2K98S2j9MQW2dXV5oLqsJhqGPZsKxVo8I1u7ZtqUla3QE1V18RYPAzVgTiMRkBg== + dependencies: + tippy.js "^6.3.7" + +"@tiptap/extension-bullet-list@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.4.tgz#d192767d39e45253c5e9d974e949f271e09c72d7" + integrity sha512-JSZKBVTaKSuLl5fR4EKE4dOINOrgeRHYA25Vj6cWjgdvpTw5ef7vcUdn9yP4JwTmLRI+VnnMlYL3rqigU3iZNg== + +"@tiptap/extension-code-block-lowlight@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.0.4.tgz#e641f08d2ea77271722e848c6efa819b63638b1a" + integrity sha512-fKM/4MY9R75IJJVt7P+aD+GX3yzzL6oHo1dn4hNFJlYp2x5+yH6kneaqKcTglVicBCGc8Ks6wJLEZTxxG35MOA== + +"@tiptap/extension-code-block@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.0.4.tgz#d551ee7c13fef379bbbad298f1be757d1125cd54" + integrity sha512-In2tV3rgm/MznVF0N7qYsYugPWSzhZHaCRCWcFKNvllMExpo91bUWvk+hXaIhhPxvuqGIVezjybwrYuU3bJW0g== + +"@tiptap/extension-code@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.0.4.tgz#6952d402e7372dd2d129e962bf9bd54d68ee6183" + integrity sha512-HuwJSJkipZf4hkns9witv1CABNIPiB9C8lgAQXK4xJKcoUQChcnljEL+PQ2NqeEeMTEeV3nG3A/0QafH0pgTgg== + +"@tiptap/extension-color@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.0.4.tgz#564265c2bcadd268e6b5745d2a06571744cb4090" + integrity sha512-7Eb5Gk9v3sj2i1Q8dfqmpnc5aDPC/t0ZEsSLRi4C6SNo1nBeUxteXzpzxWwYjTvK+Um40STR89Z6PY14FIYXSA== + +"@tiptap/extension-document@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.4.tgz#f94e6da23a7d93a8ea34c6767d4e2e31f5ab8849" + integrity sha512-mCj2fAhnNhIHttPSqfTPSSTGwClGaPYvhT56Ij/Pi4iCrWjPXzC4XnIkIHSS34qS2tJN4XJzr/z7lm3NeLkF1w== + +"@tiptap/extension-dropcursor@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.4.tgz#f4a7542866c9100fee8e78eca5eebefff58989ca" + integrity sha512-1OmKBv/E+nJo2vsosvu8KwFiBB+gZM1pY61qc7JbwEKHSYAxUFHfvLkIA0IQ53Z0DHMrFSKgWmHEcbnqtGevCA== + +"@tiptap/extension-floating-menu@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.4.tgz#82f12c2415b7ddbfd782a03b100f717e9905bab0" + integrity sha512-0YRE738k+kNKuSHhAb3jj9ZQ7Kda78RYRr+cX2jrQVueIMKebPIY07eBt6JcKmob9V9vcNn9qLtBfmygfcPUQg== + dependencies: + tippy.js "^6.3.7" + +"@tiptap/extension-gapcursor@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.4.tgz#c100a792fd41535ad6382aa8133d0d9c0b2cb2b8" + integrity sha512-VxmKfBQjSSu1mNvHlydA4dJW/zawGKyqmnryiFNcUV9s+/HWLR5i9SiUl4wJM/B8sG8cQxClne5/LrCAeGNYuA== + +"@tiptap/extension-hard-break@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.0.4.tgz#a4f70fa9a473270f7ec89f20a14b9122af5657bc" + integrity sha512-4j8BZa6diuoRytWoIc7j25EYWWut5TZDLbb+OVURdkHnsF8B8zeNTo55W40CdwSaSyTtXtxbTIldV80ShQarGQ== + +"@tiptap/extension-heading@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.0.4.tgz#5372e346c5d69cfa0060d7238d1a0bf440442f6f" + integrity sha512-EfitUbew5ljH3xVlBXAxqqcJ4rjv15b8379LYOV6KQCf+Y1wY0gy9Q8wXSnrsAagqrvqipja4Ihn3OZeyIM+CA== + +"@tiptap/extension-highlight@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.0.4.tgz#5d54232ac573d0b04c3e705ca38f207fb6cf7270" + integrity sha512-z1hcpf0eHHdaBE0pewXiNIu+QBodw4IAbZykTXMaY1xCsbYWfOJxeIb5o+CEG5HBsmaoJrCYenQw71xzgV0hKA== + +"@tiptap/extension-history@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.0.4.tgz#761a9c4b2a875817acc73137660552bd49e94fca" + integrity sha512-3GAUszn1xZx3vniHMiX9BSKmfvb5QOb0oSLXInN+hx80CgJDIHqIFuhx2dyV9I/HWpa0cTxaLWj64kfDzb1JVg== + +"@tiptap/extension-horizontal-rule@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.4.tgz#6988dd63fb00ca144feb1baac84142782e8ebe38" + integrity sha512-OMx2ImQseKbSUjPbbRCuYGOJshxYedh9giWAqwgWWokhYkH4nGxXn5m7+Laj+1wLre4bnWgHWVY4wMGniEj3aw== + +"@tiptap/extension-image@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.0.4.tgz#a41d5ca246bd41dd293194e359a80cb97f477ab3" + integrity sha512-5iQ96pt9xppM8sWzwhGgc99PPoYPQuokTaCXAQKDI0Y1CFCjZ+/duUG3al1VUMpBXsjJw3/RVO1+7CEhRTd3mA== + +"@tiptap/extension-italic@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.4.tgz#4c6d0938542e4f7276f9dd18db395c040f76dcd8" + integrity sha512-C/6+qs4Jh8xERRP0wcOopA1+emK8MOkBE4RQx5NbPnT2iCpERP0GlmHBFQIjaYPctZgKFHxsCfRnneS5Xe76+A== + +"@tiptap/extension-link@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.0.4.tgz#2899f9060ca722f11bd10ceb572ceb5178f111d6" + integrity sha512-CliImI1hmC+J6wHxqgz9P4wMjoNSSgm3fnNHsx5z0Bn6JRA4Evh2E3KZAdMaE8xCTx89rKxMYNbamZf4VLSoqQ== + dependencies: + linkifyjs "^4.1.0" + +"@tiptap/extension-list-item@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.0.4.tgz#8ca7c9959a07bf94602f8957d784d526568f2069" + integrity sha512-tSkbLgRo1QMNDJttWs9FeRywkuy5T2HdLKKfUcUNzT3s0q5AqIJl7VyimsBL4A6MUfN1qQMZCMHB4pM9Mkluww== + +"@tiptap/extension-ordered-list@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.4.tgz#e3e220e9c15114b07c952c32fa58e96601db6bd7" + integrity sha512-Kfg+8k9p4iJCUKP/yIa18LfUpl9trURSMP/HX3/yQTz9Ul1vDrjxeFjSE5uWNvupcXRAM24js+aYrCmV7zpU+Q== + +"@tiptap/extension-paragraph@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.4.tgz#9cffa3f8a980349ca068b1b3c12596bf5f3aef0f" + integrity sha512-nDxpopi9WigVqpfi8nU3B0fWYB14EMvKIkutNZo8wJvKGTZufNI8hw66wupIx/jZH1gFxEa5dHerw6aSYuWjgQ== + +"@tiptap/extension-placeholder@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.0.4.tgz#74259783757c59751d78fcdd1aade7e928809187" + integrity sha512-Y8hjUYBGTbytgrsplSZdHGciqbuVHQX+h0JcuvVaIlAy1kR7hmbxJLqL8tNa7qLtTqo2MfS2942OtSv85JOCzA== + +"@tiptap/extension-strike@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.4.tgz#13286dcf8780c55610ed65b24238b8395a5be824" + integrity sha512-Men7LK6N/Dh3/G4/z2Z9WkDHM2Gxx1XyxYix2ZMf5CnqY37SeDNUnGDqit65pdIN3Y/TQnOZTkKSBilSAtXfJA== + +"@tiptap/extension-task-item@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.0.4.tgz#71f46d35ac629ca10c5c23d4ad170007338a436e" + integrity sha512-0FfYWrOslDzzN7Ehnt3yBekOSH45tiB/3gzFRvGdLBUv0PiYQolUpyfHGsdNzeKYuWLF1yiacJkCeLgNDgCLDw== + +"@tiptap/extension-task-list@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.0.4.tgz#69b2b23d1e757044c05f3d7dcbd30194c71f9324" + integrity sha512-3RGoEgGJdWpGf8aWl7O7+jnnvfpF0or2YHYYvJv13t5G4dNIS9E7QXT3/rU9QtHNYkbcJYFjHligIFuBTAhZNg== + +"@tiptap/extension-text-style@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.0.4.tgz#4ba3fd6b204badc43ac6a00285315fe868f07e52" + integrity sha512-HQk8c7HasDdeAJxlHrztkgprxocZecZVUMlvPvFAhkq8E/5+nfmr/Gm9qudiStEARZrIYBATNA2PbnQuIGMx3A== + +"@tiptap/extension-text@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.0.4.tgz#318b0105491a5976d220871dccabe6c4d2cbeedd" + integrity sha512-i8/VFlVZh7TkAI49KKX5JmC0tM8RGwyg5zUpozxYbLdCOv07AkJt+E1fLJty9mqH4Y5HJMNnyNxsuZ9Ol/ySRA== + +"@tiptap/extension-underline@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.0.4.tgz#c1e5df75a4c9f2d9e691d48438ee0894f8bb01f1" + integrity sha512-Hvhy3iV5dWs0SFTww6sIzyQSSgVzcQuiozhDs11iP+gvFjK7ejg86KZ8wAVvyCi9K3bOMhohsw1Q2b8JSnIxcg== + +"@tiptap/pm@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.0.4.tgz#c3df31a29120e1e3334f8f063df23ccb1ace7851" + integrity sha512-DNgxntpEaiW7ciW0BTNTL0TFqAreZTrAROWakI4XaYRAyi5H9NfZW8jmwGwMBkoZ1KB3pfy+jT/Bisy4okEQGQ== + dependencies: + prosemirror-changeset "^2.2.0" + prosemirror-collab "^1.3.0" + prosemirror-commands "^1.3.1" + prosemirror-dropcursor "^1.5.0" + prosemirror-gapcursor "^1.3.1" + prosemirror-history "^1.3.0" + prosemirror-inputrules "^1.2.0" + prosemirror-keymap "^1.2.0" + prosemirror-markdown "^1.10.1" + prosemirror-menu "^1.2.1" + prosemirror-model "^1.18.1" + prosemirror-schema-basic "^1.2.0" + prosemirror-schema-list "^1.2.2" + prosemirror-state "^1.4.1" + prosemirror-tables "^1.3.0" + prosemirror-trailing-node "^2.0.2" + prosemirror-transform "^1.7.0" + prosemirror-view "^1.28.2" + +"@tiptap/react@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.0.4.tgz#b879faeabd67859254d594eafe0f8232f5d78116" + integrity sha512-NcrZL4Tu3+1Xfj/us5AOD7+kJhwYo2XViOB2iRRnfwS80PUtiLWDis6o3ngMGot/jBWzaMn4gofXnMWHtFdIAw== dependencies: - "@types/tern" "*" + "@tiptap/extension-bubble-menu" "^2.0.4" + "@tiptap/extension-floating-menu" "^2.0.4" + +"@tiptap/starter-kit@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.4.tgz#20456eb4a4ae0ac8d5bf2ac5e9771b3c617c51a6" + integrity sha512-9WtVXhujyp5cOlE7qlcQMFr0FEx3Cvo1isvfQGzhKKPzXa3rR7FT8bnOFsten31/Ia/uwvGXAvRDQy24YfHdNA== + dependencies: + "@tiptap/core" "^2.0.4" + "@tiptap/extension-blockquote" "^2.0.4" + "@tiptap/extension-bold" "^2.0.4" + "@tiptap/extension-bullet-list" "^2.0.4" + "@tiptap/extension-code" "^2.0.4" + "@tiptap/extension-code-block" "^2.0.4" + "@tiptap/extension-document" "^2.0.4" + "@tiptap/extension-dropcursor" "^2.0.4" + "@tiptap/extension-gapcursor" "^2.0.4" + "@tiptap/extension-hard-break" "^2.0.4" + "@tiptap/extension-heading" "^2.0.4" + "@tiptap/extension-history" "^2.0.4" + "@tiptap/extension-horizontal-rule" "^2.0.4" + "@tiptap/extension-italic" "^2.0.4" + "@tiptap/extension-list-item" "^2.0.4" + "@tiptap/extension-ordered-list" "^2.0.4" + "@tiptap/extension-paragraph" "^2.0.4" + "@tiptap/extension-strike" "^2.0.4" + "@tiptap/extension-text" "^2.0.4" + +"@tiptap/suggestion@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.0.4.tgz#08e6c47a723200d02238d845cb09684c481f0066" + integrity sha512-C5LGGjH8VFET34V7vKkqlwpSzrPl+7oAcj9h+P3jvJQ076iYpmpnMtz6dNLSFGKpHp5mtyl4RoJzh7lTvlfyiA== "@types/debug@^4.0.0": version "4.1.8" @@ -3216,11 +2387,6 @@ dependencies: "@types/ms" "*" -"@types/direction@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/direction/-/direction-1.0.0.tgz#6a0962feade8502f9e986e87abe1130b611b13be" - integrity sha512-et1wmqXm/5smJ8lTJfBnwD12/2Y7eVJLKbuaRT0h2xaKAoo1h8Dz2Io22GObDLFwxY1ddXRTLH3Gq5v44Fl/2w== - "@types/dom4@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.2.tgz#6495303f049689ce936ed328a3e5ede9c51408ee" @@ -3274,6 +2440,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/linkify-it@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" + integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + "@types/lodash.debounce@^4.0.7": version "4.0.7" resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.7.tgz#0285879defb7cdb156ae633cecd62d5680eded9f" @@ -3282,14 +2453,17 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.196" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.196.tgz#a7c3d6fc52d8d71328b764e28e080b4169ec7a95" - integrity sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ== + version "4.14.197" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" + integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== -"@types/marked@^4.0.8": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.3.1.tgz#45fb6dfd47afb595766c71ed7749ead23f137de3" - integrity sha512-vSSbKZFbNktrQ15v7o1EaH78EbWV+sPQbPjHG+Cp8CaNcPFUEfjZ0Iml/V0bFDwsTlYe8o6XC5Hfdp91cqPV2g== +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" "@types/mdast@^3.0.0": version "3.0.12" @@ -3298,10 +2472,10 @@ dependencies: "@types/unist" "^2" -"@types/min-document@^2.19.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@types/min-document/-/min-document-2.19.0.tgz#4f9919e789917c00de967a2c38fa8d234cbcd7d6" - integrity sha512-lsYeSW1zfNqHTL1RuaOgfAhoiOWV1RAQDKT0BZ26z4Faz8llVIj1r1ablUo5QY6yzHMketuvu4+N0sv0eZpXTg== +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== "@types/minimatch@*": version "5.1.2" @@ -3348,21 +2522,11 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prismjs@*": - version "1.26.0" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.0.tgz#a1c3809b0ad61c62cac6d4e0c56d610c910b7654" - integrity sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== - "@types/prop-types@*", "@types/prop-types@^15.0.0", "@types/prop-types@^15.7.5": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/querystringify@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/querystringify/-/querystringify-2.0.0.tgz#d1eab3214ee2b57c3bd7eba0ab94b231028522fb" - integrity sha512-9WgEGTevECrXJC2LSWPqiPYWq8BRmeaOyZn47js/3V6UF0PWtcVfvvR43YjeO8BzBsthTz98jMczujOwTw+WYg== - "@types/react-beautiful-dnd@^13.1.2": version "13.1.4" resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.4.tgz#bcec72da719c18c0d8b4a7cb00e7fb443211d6d7" @@ -3434,9 +2598,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.17": - version "18.2.19" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.19.tgz#f77cb2c8307368e624d464a25b9675fa35f95a8b" - integrity sha512-e2S8wmY1ePfM517PqCG80CcE48Xs5k0pwJzuDZsfE8IZRRBfOMCF+XqnFxu6mWtyivum1MQm4aco+WIt6Coimw== + version "18.2.20" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2" + integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3467,13 +2631,6 @@ dependencies: "@types/react" "*" -"@types/refractor@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/refractor/-/refractor-3.0.2.tgz#2d42128d59f78f84d2c799ffc5ab5cadbcba2d82" - integrity sha512-2HMXuwGuOqzUG+KUTm9GDJCHl0LCBKsB5cg28ujEmVi/0qgTb6jOmkVSO5K48qXksyl2Fr3C0Q2VrgD4zbwyXg== - dependencies: - "@types/prismjs" "*" - "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -3491,18 +2648,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== -"@types/string.prototype.matchall@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/string.prototype.matchall/-/string.prototype.matchall-4.0.1.tgz#f418c53cf4b95f152b870e43c41fa3825caea942" - integrity sha512-jVQQq9YbEcLwWejeHs4CMVZkereuGPgflaOH/BGqHOYT45f3LV0Ah2Cmc0Cby/DZ9qhIp2V3lqPTHnLXlK7VLQ== - -"@types/tern@*": - version "0.23.4" - resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" - integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== - dependencies: - "@types/estree" "*" - "@types/throttle-debounce@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" @@ -3513,11 +2658,6 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== -"@types/turndown@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/turndown/-/turndown-5.0.1.tgz#fcda7b02cda4c9d445be1440036df20f335b9387" - integrity sha512-N8Ad4e3oJxh9n9BiZx9cbe/0M3kqDpOTm2wzj13wdDUxDPjfjloWIJaquZzWE1cYTAHpjOH3rcTnXQdpEfS/SQ== - "@types/unist@^2", "@types/unist@^2.0.0": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.7.tgz#5b06ad6894b236a1d2bd6b2f07850ca5c59cf4d6" @@ -3617,15 +2757,6 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -a11y-status@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/a11y-status/-/a11y-status-2.0.1.tgz#a7883105910b9e3cd09ea90e5acf8404dc01b47e" - integrity sha512-VcW0aF3xb5wYFDYEfK7u41HBIU/bCE9zWl4zG+RhW1g0jGgTdS3h4ulVjVs7/2+KbGMpZvafP7wf/CDs/duNtA== - dependencies: - "@babel/runtime" "^7.21.0" - "@types/throttle-debounce" "^2.1.0" - throttle-debounce "^3.0.1" - acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -3727,7 +2858,7 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.1.1, aria-hidden@^1.2.3: +aria-hidden@^1.1.1: version "1.2.3" resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== @@ -3914,14 +3045,6 @@ babel-loader@^8.2.5: make-dir "^3.1.0" schema-utils "^2.6.5" -babel-merge@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-merge/-/babel-merge-3.0.0.tgz#9bd368d48116dab18b8f3e8022835479d80f3b50" - integrity sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw== - dependencies: - deepmerge "^2.2.1" - object.omit "^3.0.0" - babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" @@ -3970,11 +3093,6 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3994,13 +3112,6 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4051,13 +3162,6 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -bundle-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" - integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== - dependencies: - run-applescript "^5.0.0" - busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -4153,26 +3257,11 @@ change-case@^4.1.2: snake-case "^3.0.4" tslib "^2.0.3" -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - character-entities@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -4223,11 +3312,6 @@ cmdk@^0.2.0: "@radix-ui/react-dialog" "1.0.0" command-score "0.1.2" -codemirror@^5.65.13: - version "5.65.14" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.14.tgz#e75fbc7247453f1baa71463c33b52adba7e41b2a" - integrity sha512-VSNugIBDGt0OU9gDjeVr6fNkoFQznrWEUdAApMlXQNbfE8gGO19776D6MwSqF/V/w/sDwonsQ0z7KmmI9guScg== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -4260,11 +3344,6 @@ color-string@^1.9.0: color-name "^1.0.0" simple-swizzle "^0.2.2" -color2k@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.2.tgz#ac2b4aea11c822a6bcb70c768b5a289f4fffcebb" - integrity sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w== - color@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" @@ -4280,11 +3359,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - comma-separated-tokens@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" @@ -4315,11 +3389,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compute-scroll-into-view@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -4367,14 +3436,12 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -create-context-state@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/create-context-state/-/create-context-state-2.0.2.tgz#3a811c8e5bb082b35601747e501d1ec970ee4f7f" - integrity sha512-WIz5i5QYt0xvlpbpSnhl4RY7WfcPy8gWtqzE6xtr2hfhuR3WJTsa5V4Y7jgPt+Knp5r0yKbKK0myK59HW2+HHw== - dependencies: - "@babel/runtime" "^7.21.5" +crelt@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" + integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4395,13 +3462,6 @@ css-box-model@^1.2.0: dependencies: tiny-invariant "^1.0.6" -css-in-js-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz#640ae6a33646d401fc720c54fc61c42cd76ae2bb" - integrity sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A== - dependencies: - hyphenate-style-name "^1.0.3" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -4565,39 +3625,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-browser-id@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-browser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" - integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== - dependencies: - bundle-name "^3.0.0" - default-browser-id "^3.0.0" - execa "^7.1.1" - titleize "^3.0.0" - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" @@ -4661,11 +3693,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -direction@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - dlv@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" @@ -4693,21 +3720,11 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - dom4@^2.1.5: version "2.1.6" resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== -domino@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" - integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -4734,9 +3751,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.477: - version "1.4.488" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz#442b1855f8c84fb1ed79f518985c65db94f64cc9" - integrity sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ== + version "1.4.490" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz#d99286f6e915667fa18ea4554def1aa60eb4d5f1" + integrity sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A== emoji-regex@^8.0.0: version "8.0.0" @@ -4748,31 +3765,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -emojibase-data@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-6.2.0.tgz#db6c75c36905284fa623f4aa5f468d2be6ed364a" - integrity sha512-SWKaXD2QeQs06IE7qfJftsI5924Dqzp+V9xaa5RzZIEWhmlrG6Jt2iKwfgOPHu+5S8MEtOI7GdpKsXj46chXOw== - -emojibase-regex@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-5.1.3.tgz#f0ef621ed6ec624becd2326f999fd4ea01b94554" - integrity sha512-gT8T9LxLA8VJdI+8KQtyykB9qKzd7WuUL3M2yw6y9tplFeufOUANg3UKVaKUvkMcRNvZsSElWhxcJrx8WPE12g== - -emojibase-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/emojibase-regex/-/emojibase-regex-6.0.1.tgz#dc0b33d05c02f045ea44795d453698b205d41f0f" - integrity sha512-Mj1UT6IIk4j91yMFE0QetpUYcmsr5ZDkkOIMSGafhIgC086mBMaCh2Keaykx8YEllmV7hmx5zdANDzCYBYAVDw== - -emojibase@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/emojibase/-/emojibase-5.2.0.tgz#3b53899f9a9f8aae1280db446c83ce28f1d286d5" - integrity sha512-5T02oTJaWpScAtYbukKVc8vQ1367MyfVtFHUMoOVZ9/r1kFcbYqjSktD56TICBAeyW9uc1t+7qQuXEtntM6p5A== - -emojibase@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/emojibase/-/emojibase-6.1.0.tgz#c3bc281e998a0e06398416090c23bac8c5ed3ee8" - integrity sha512-1GkKJPXP6tVkYJHOBSJHoGOr/6uaDxZ9xJ6H7m6PfdGXTmQgbALHLWaVRY4Gi/qf5x/gT/NUXLPuSHYLqtLtrQ== - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -4801,6 +3793,11 @@ enquirer@^2.3.5: ansi-colors "^4.1.1" strip-ansi "^6.0.1" +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -4971,18 +3968,17 @@ eslint-import-resolver-typescript@^2.7.1: tsconfig-paths "^3.14.1" eslint-import-resolver-typescript@^3.5.2: - version "3.5.5" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" - integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" + integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== dependencies: debug "^4.3.4" enhanced-resolve "^5.12.0" eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" get-tsconfig "^4.5.0" - globby "^13.1.3" is-core-module "^2.11.0" is-glob "^4.0.3" - synckit "^0.8.5" eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.0" @@ -5331,36 +4327,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -5371,11 +4337,6 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extract-domain@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/extract-domain/-/extract-domain-2.2.1.tgz#1deeae633a5cbf05ae2fd7b3ff87cb98cbc4cb5b" - integrity sha512-lOq1adCJha0tFFBci4quxC4XLa6+Rs2WgAwTo9qbO9OsElvJmGgCvOzmHo/yg5CiqeP4+sHjkXYGkrCcIEprMg== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5386,7 +4347,7 @@ fast-fifo@^1.1.0, fast-fifo@^1.2.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b" integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw== -fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== @@ -5414,6 +4375,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fault@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== + dependencies: + format "^0.2.0" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -5506,6 +4474,11 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== + fraction.js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" @@ -5566,11 +4539,6 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-dom-document@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/get-dom-document/-/get-dom-document-0.1.3.tgz#d0188090e43d38dd146c467ac6e3e1f2ace7af52" - integrity sha512-bZ0O00gSQgMo+wz7gU6kbbWCPh4dfDsL9ZOmVhA8TOXszl5GV56TpTuW1/Qq/QctgpjK56yyvB1vBO+wzz8Szw== - get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" @@ -5591,11 +4559,6 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -5605,9 +4568,9 @@ get-symbol-description@^1.0.0: get-intrinsic "^1.1.1" get-tsconfig@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" - integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== + version "4.7.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" + integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== dependencies: resolve-pkg-maps "^1.0.0" @@ -5713,17 +4676,6 @@ globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.3: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -5808,27 +4760,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - hast-util-whitespace@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== -hastscript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" - integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== - dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - header-case@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" @@ -5837,6 +4773,11 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" +highlight.js@^11.8.0, highlight.js@~11.8.0: + version "11.8.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.8.0.tgz#966518ea83257bae2e7c9a48596231856555bb65" + integrity sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg== + hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -5852,28 +4793,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - -idb-keyval@^5.0.2: - version "5.1.5" - resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-5.1.5.tgz#be11174bac0cb756dba4cc86fb36b6cd63f5ce6d" - integrity sha512-J1utxYWQokYjy01LvDQ7WmiAtZCGUSkVi9EIBfUSyLOr/BesnMIxNGASTh9A1LzeISSjSqEPsfFdTss7EE7ofQ== - dependencies: - safari-14-idb-fix "^1.0.6" - idb@^7.0.1: version "7.1.1" resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" @@ -5889,7 +4808,7 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -5956,19 +4875,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -6042,21 +4948,6 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - is-extendable@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" @@ -6069,18 +4960,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-finite@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha512-e+gU0KGrlbqjEcV80SAqg4g7PQYOm3/IrdwAJ+kPwHqGhLKhtuTJGGxGtrsc8RXlHt2A8Vlnv+79Vq2B1GQasg== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -6093,25 +4972,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-integer@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c" - integrity sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg== - dependencies: - is-finite "^1.0.0" - is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -6207,11 +5067,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -6240,13 +5095,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -6262,11 +5110,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic.js@^0.2.4: - version "0.2.5" - resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" - integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw== - jake@^10.8.5: version "10.8.7" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" @@ -6401,13 +5244,6 @@ jsonpointer@^5.0.0: object.assign "^4.1.4" object.values "^1.1.6" -jsx-dom-cjs@^8.0.6: - version "8.0.7" - resolved "https://registry.yarnpkg.com/jsx-dom-cjs/-/jsx-dom-cjs-8.0.7.tgz#098c54680ebf5bb6f6d12cdea5cde3799c172212" - integrity sha512-dQWnuQ+bTm7o72ZlJU4glzeMX8KLxx5U+ZwmEAzVP1+roL7BSM0MrkWdHjdsuNgmxobZCJ+qgiot9EgbJPOoEg== - dependencies: - csstype "^3.1.2" - kleur@^4.0.3: version "4.1.5" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" @@ -6438,13 +5274,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lib0@^0.2.42, lib0@^0.2.74: - version "0.2.79" - resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.79.tgz#b82ee41bfab31a4358bbc0c8ad0645394149a4a9" - integrity sha512-fIdPbxzMVq10wt3ou1lp3/f9n5ciHZ6t+P1vyGy3XXr018AntTYM4eg24sNFcNq8SYDQwmhhoGdS58IlYBzfBw== - dependencies: - isomorphic.js "^0.2.4" - lie@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" @@ -6462,6 +5291,18 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + +linkifyjs@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.1.1.tgz#73d427e3bbaaf4ca8e71c589ad4ffda11a9a5fde" + integrity sha512-zFN/CTVmbcVef+WaDXT63dNzzkfRBKT1j464NJQkV7iSgJU0sLBus9W0HBwnXK13/hf168pbrx/V/bjEHOXNHA== + loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" @@ -6546,6 +5387,15 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lowlight@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-2.9.0.tgz#70da647a4319c7bfd8e97721a679b13ef5621496" + integrity sha512-OpcaUTCLmHuVuBcyNckKfH5B0oA4JUavb/M/8n9iAvanJYNQkrVm4pvyX0SUaqkBG4dnWHKt7p50B3ngAG2Rfw== + dependencies: + "@types/hast" "^2.0.0" + fault "^2.0.0" + highlight.js "~11.8.0" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6565,6 +5415,11 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== +lucide-react@^0.263.1: + version "0.263.1" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.263.1.tgz#a456ee0d171aa373929bd3ee20d6f9fb4429c301" + integrity sha512-keqxAx97PlaEN89PXZ6ki1N8nRjGWtDa4021GFYLNj0RgruM5odbpl8GHTExj0hhPq3sF6Up0gnxt6TSHu+ovw== + magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -6591,23 +5446,21 @@ make-error@^1.3.6: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-plural@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-6.2.2.tgz#beb5fd751355e72660eeb2218bb98eec92853c6c" - integrity sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA== - -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +markdown-it-task-lists@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz#f68f4d2ac2bad5a2c373ba93081a1a6848417088" + integrity sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA== -match-sorter@^6.2.0, match-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== +markdown-it@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" material-colors@^1.2.1: version "1.2.6" @@ -6662,6 +5515,11 @@ mdast-util-to-string@^3.1.0: dependencies: "@types/mdast" "^3.0.0" +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" @@ -6891,28 +5749,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -6927,13 +5768,6 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -6963,11 +5797,6 @@ mobx@^6.10.0: resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.10.0.tgz#3537680fe98d45232cc19cc8f76280bd8bb6b0b7" integrity sha512-WMbVpCMFtolbB8swQ5E2YRrU+Yu8iLozCVx3CdGjbBKlP7dFiCSuiG06uea3JCFN5DnvtAX7+G5Bp82e2xu0ww== -moo@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - mri@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" @@ -6983,20 +5812,6 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multishift@^2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/multishift/-/multishift-2.0.9.tgz#cb0926c901f3c3355582fe53d796e8f5c7b885ac" - integrity sha512-55vFZ0xLvZV0RO4sUyIS2+DfJREtpTLSLGTgdUfmVvANCm0cRbyNLPmmXWn9iy+NFipecsKxN64qO90KucJWHQ== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-helpers" "^3.0.0" - "@remirror/core-types" "^2.0.5" - "@seznam/compose-react-refs" "^1.0.6" - a11y-status "^2.0.1" - compute-scroll-into-view "^1.0.20" - tiny-warning "^1.0.3" - w3c-keyname "^2.2.7" - mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -7006,11 +5821,6 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoevents@^5.1.13: - version "5.1.13" - resolved "https://registry.yarnpkg.com/nanoevents/-/nanoevents-5.1.13.tgz#0e49c30acbcf847c10f29f1d1e7147c0f88fa3d1" - integrity sha512-JFAeG9fp0QZnRoESHjkbVFbZ9BkOXkkagUVwZVo/pkSX+Fq1VKlY+5og/8X9CYc6C7vje/CV+bwJ5M2X0+IY9Q== - nanoid@^3.3.4, nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" @@ -7145,30 +5955,11 @@ normalize.css@^8.0.1: resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -7273,30 +6064,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" - integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== - dependencies: - default-browser "^4.0.0" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^2.2.0" - optionator@^0.9.1, optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -7367,28 +6134,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parenthesis@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.8.tgz#3457fccb8f05db27572b841dad9d2630b912f125" - integrity sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw== - -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-exponential@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-exponential/-/parse-exponential-1.0.1.tgz#ddf8181c454a9a4b131765381efa43f5c1c61019" - integrity sha512-QUa7PaOc7O6ei3hb0NmADJGrDYLbPBdcSKFUBGfwlMdHsrg8LOsliPEkpP0qHSKQOyzyyxCB00fxJKcP75Gl7w== - parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -7430,16 +6175,11 @@ path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -7587,14 +6327,6 @@ prebuild-install@^7.1.1: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -precision@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/precision/-/precision-1.0.1.tgz#5cf489b9d4a114700d300479cb8b9d85a502cfe8" - integrity sha512-cBMxnM2nzEF1xx75NhhOaKjsDNt92WUZv17t/p3wrvCfA+2RL0twbgfvXvgDbxxsfUUb5C5he5tla8Xa2ny1Ew== - dependencies: - is-finite "~1.0.1" - parse-exponential "~1.0.1" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7615,11 +6347,6 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -prismjs@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" - integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== - progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -7634,26 +6361,26 @@ prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2, object-assign "^4.1.1" react-is "^16.13.1" -property-information@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - property-information@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg== -prosemirror-collab@^1.3.1: +prosemirror-changeset@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" + integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== + dependencies: + prosemirror-transform "^1.0.0" + +prosemirror-collab@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33" integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ== dependencies: prosemirror-state "^1.0.0" -prosemirror-commands@^1.5.2: +prosemirror-commands@^1.0.0, prosemirror-commands@^1.3.1: version "1.5.2" resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz#e94aeea52286f658cd984270de9b4c3fff580852" integrity sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ== @@ -7662,7 +6389,7 @@ prosemirror-commands@^1.5.2: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-dropcursor@^1.8.1: +prosemirror-dropcursor@^1.5.0: version "1.8.1" resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz#49b9fb2f583e0d0f4021ff87db825faa2be2832d" integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== @@ -7671,7 +6398,7 @@ prosemirror-dropcursor@^1.8.1: prosemirror-transform "^1.1.0" prosemirror-view "^1.1.0" -prosemirror-gapcursor@^1.3.2: +prosemirror-gapcursor@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4" integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ== @@ -7681,7 +6408,7 @@ prosemirror-gapcursor@^1.3.2: prosemirror-state "^1.0.0" prosemirror-view "^1.0.0" -prosemirror-history@^1.3.2: +prosemirror-history@^1.0.0, prosemirror-history@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.3.2.tgz#ce6ad7ab9db83e761aee716f3040d74738311b15" integrity sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g== @@ -7691,7 +6418,7 @@ prosemirror-history@^1.3.2: prosemirror-view "^1.31.0" rope-sequence "^1.3.0" -prosemirror-inputrules@^1.2.1: +prosemirror-inputrules@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.2.1.tgz#8faf3d78c16150aedac71d326a3e3947417ce557" integrity sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ== @@ -7699,7 +6426,7 @@ prosemirror-inputrules@^1.2.1: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: +prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== @@ -7707,35 +6434,39 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.19.3, prosemirror-model@^1.8.1: +prosemirror-markdown@^1.10.1, prosemirror-markdown@^1.11.1: + version "1.11.2" + resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.11.2.tgz#f6e529e669d11fa3eec859e93c0d2c91788d6c80" + integrity sha512-Eu5g4WPiCdqDTGhdSsG9N6ZjACQRYrsAkrF9KYfdMaCmjIApH75aVncsWYOJvEk2i1B3i8jZppv3J/tnuHGiUQ== + dependencies: + markdown-it "^13.0.1" + prosemirror-model "^1.0.0" + +prosemirror-menu@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.2.tgz#c545a2de0b8cb79babc07682b1d93de0f273aa33" + integrity sha512-437HIWTq4F9cTX+kPfqZWWm+luJm95Aut/mLUy+9OMrOml0bmWDS26ceC6SNfb2/S94et1sZ186vLO7pDHzxSw== + dependencies: + crelt "^1.0.0" + prosemirror-commands "^1.0.0" + prosemirror-history "^1.0.0" + prosemirror-state "^1.0.0" + +prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.18.1, prosemirror-model@^1.19.0, prosemirror-model@^1.8.1: version "1.19.3" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.19.3.tgz#f0d55285487fefd962d0ac695f716f4ec6705006" integrity sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ== dependencies: orderedmap "^2.0.0" -prosemirror-paste-rules@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/prosemirror-paste-rules/-/prosemirror-paste-rules-2.0.7.tgz#e308ff0a12db94181c4070c6757d3c4a81fd05cd" - integrity sha512-0vQ+S8wksW1c9W88pzNEg3T4XHihl1QJy+i8fuF2HpCEkNkKM44P8x71XKh8QBdANuGQynDVKCVJRCvJfB5F4g== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - escape-string-regexp "^4.0.0" - -prosemirror-resizable-view@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/prosemirror-resizable-view/-/prosemirror-resizable-view-2.0.14.tgz#78dcbc93cd4e7d8f24a6efdc23a5c8c6c4e59ddb" - integrity sha512-TgCaOWaMdR/R34AYsxHtHuQlC9rtHTuSBEgcmD5V9ldVe1+Ul72xz9G73xo9wLhVpTwt3YxzpenTcRWPZIofow== +prosemirror-schema-basic@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.2.tgz#6695f5175e4628aab179bf62e5568628b9cfe6c7" + integrity sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw== dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-helpers" "^3.0.0" - "@remirror/core-utils" "^2.0.13" - prosemirror-model "^1.19.3" - prosemirror-view "^1.31.7" + prosemirror-model "^1.19.0" -prosemirror-schema-list@^1.3.0: +prosemirror-schema-list@^1.2.2: version "1.3.0" resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz#05374702cf35a3ba5e7ec31079e355a488d52519" integrity sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A== @@ -7744,7 +6475,7 @@ prosemirror-schema-list@^1.3.0: prosemirror-state "^1.0.0" prosemirror-transform "^1.7.3" -prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.3: +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== @@ -7753,18 +6484,7 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, pr prosemirror-transform "^1.0.0" prosemirror-view "^1.27.0" -prosemirror-suggest@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/prosemirror-suggest/-/prosemirror-suggest-2.0.6.tgz#59600766a05fee5380185ae4b277895039c28c4e" - integrity sha512-plcfFPyLFQ/egCn6DR+Ml3ONFhO+tR3Wt3yO5aJo6dnhoyudKiRQsf0rgQDPoWBPc8L7l9opUfDWFXHrDQYvkg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - "@remirror/types" "^1.0.1" - escape-string-regexp "^4.0.0" - -prosemirror-tables@^1.3.4: +prosemirror-tables@^1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.3.4.tgz#0b7cc16d49f90c5b834c9f29291c545478ce9ab0" integrity sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw== @@ -7775,7 +6495,7 @@ prosemirror-tables@^1.3.4: prosemirror-transform "^1.2.1" prosemirror-view "^1.13.3" -prosemirror-trailing-node@^2.0.7: +prosemirror-trailing-node@^2.0.2: version "2.0.7" resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.7.tgz#ba782a7929f18bcae650b1c7082a2d10443eab19" integrity sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q== @@ -7784,14 +6504,14 @@ prosemirror-trailing-node@^2.0.7: "@remirror/core-helpers" "^3.0.0" escape-string-regexp "^4.0.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.3, prosemirror-transform@^1.7.4: +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.0, prosemirror-transform@^1.7.3: version "1.7.4" resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.7.4.tgz#ea878c90563f3586064dd5ccf6cabb50b2753fd9" integrity sha512-GO38mvqJ2yeI0BbL5E1CdHcly032Dlfn9nHqlnCHqlNf9e9jZwJixxp6VRtOeDZ1uTDpDIziezMKbA41LpAx3A== dependencies: prosemirror-model "^1.0.0" -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.31.7: +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.28.2, prosemirror-view@^1.31.0: version "1.31.7" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.31.7.tgz#dccb2879314e1e1a24d48044c15374754e50ef00" integrity sha512-Pr7w93yOYmxQwzGIRSaNLZ/1uM6YjnenASzN2H6fO6kGekuzRbgZ/4bHbBTd1u4sIQmL33/TcGmzxxidyPwCjg== @@ -7818,11 +6538,6 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -querystringify@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -8081,15 +6796,6 @@ redux@^4.0.0, redux@^4.0.4: dependencies: "@babel/runtime" "^7.9.2" -refractor@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" - integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== - dependencies: - hastscript "^6.0.0" - parse-entities "^2.0.0" - prismjs "~1.27.0" - regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -8166,94 +6872,11 @@ remark-rehype@^10.0.0: mdast-util-to-hast "^12.1.0" unified "^10.0.0" -remirror@^2.0.23: - version "2.0.36" - resolved "https://registry.yarnpkg.com/remirror/-/remirror-2.0.36.tgz#bafb14d20152c01e53a99621fc0b38f71e1653c5" - integrity sha512-oGOeEaYFILgxNrL33qCEJ/kGE+wNhYgcCiHwuTXOHFCmPnHn32+l0aZaQ2FRHeMW602i2wpkwy8HWWsBFz5PXg== - dependencies: - "@babel/runtime" "^7.22.3" - "@remirror/core" "^2.0.19" - "@remirror/core-constants" "^2.0.2" - "@remirror/core-helpers" "^3.0.0" - "@remirror/core-types" "^2.0.5" - "@remirror/core-utils" "^2.0.13" - "@remirror/dom" "^2.0.16" - "@remirror/extension-annotation" "^2.0.16" - "@remirror/extension-bidi" "^2.0.14" - "@remirror/extension-blockquote" "^2.0.14" - "@remirror/extension-bold" "^2.0.13" - "@remirror/extension-callout" "^2.0.15" - "@remirror/extension-code" "^2.0.13" - "@remirror/extension-code-block" "^2.0.18" - "@remirror/extension-codemirror5" "^2.0.13" - "@remirror/extension-collaboration" "^2.0.13" - "@remirror/extension-columns" "^2.0.14" - "@remirror/extension-diff" "^2.0.13" - "@remirror/extension-doc" "^2.1.5" - "@remirror/extension-drop-cursor" "^2.0.13" - "@remirror/extension-embed" "^2.0.14" - "@remirror/extension-emoji" "^2.0.17" - "@remirror/extension-entity-reference" "^2.2.6" - "@remirror/extension-epic-mode" "^2.0.13" - "@remirror/extension-events" "^2.1.16" - "@remirror/extension-font-family" "^2.0.13" - "@remirror/extension-font-size" "^2.0.13" - "@remirror/extension-gap-cursor" "^2.0.13" - "@remirror/extension-hard-break" "^2.0.13" - "@remirror/extension-heading" "^2.0.14" - "@remirror/extension-history" "^2.0.13" - "@remirror/extension-horizontal-rule" "^2.0.13" - "@remirror/extension-image" "^2.1.10" - "@remirror/extension-italic" "^2.0.13" - "@remirror/extension-link" "^2.0.17" - "@remirror/extension-list" "^2.0.16" - "@remirror/extension-markdown" "^2.0.13" - "@remirror/extension-mention" "^2.0.15" - "@remirror/extension-mention-atom" "^2.0.17" - "@remirror/extension-node-formatting" "^2.0.13" - "@remirror/extension-paragraph" "^2.0.13" - "@remirror/extension-placeholder" "^2.0.14" - "@remirror/extension-positioner" "^2.1.8" - "@remirror/extension-search" "^2.0.14" - "@remirror/extension-shortcuts" "^2.0.13" - "@remirror/extension-strike" "^2.0.13" - "@remirror/extension-sub" "^2.0.13" - "@remirror/extension-sup" "^2.0.13" - "@remirror/extension-tables" "^2.3.1" - "@remirror/extension-text" "^2.0.13" - "@remirror/extension-text-case" "^2.0.13" - "@remirror/extension-text-color" "^2.0.15" - "@remirror/extension-text-highlight" "^2.0.14" - "@remirror/extension-trailing-node" "^2.0.13" - "@remirror/extension-underline" "^2.0.13" - "@remirror/extension-whitespace" "^2.0.13" - "@remirror/extension-yjs" "^3.0.15" - "@remirror/icons" "^2.0.3" - "@remirror/preset-core" "^2.0.16" - "@remirror/preset-formatting" "^2.0.14" - "@remirror/preset-wysiwyg" "^2.0.19" - "@remirror/theme" "^2.0.9" - "@types/codemirror" "^5.60.7" - "@types/refractor" "^3.0.2" - codemirror "^5.65.13" - refractor "^3.6.0" - yjs "^13.6.1" - -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -8330,29 +6953,6 @@ rope-sequence@^1.3.0: resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== -round-precision@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/round-precision/-/round-precision-1.0.0.tgz#f5a2beb7ed59e6fe85312fbf553769102ea8f64f" - integrity sha512-L2a0XDSNeaaBTEGmzuENMK4T8c0HqKYeS3pCDurW4MRPo8O6LeCLqVPWUt5+xW9rrEcG9QaYrAFcApEFXKziyw== - dependencies: - is-finite "~1.0.1" - is-integer "~1.0.4" - -round@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/round/-/round-2.0.1.tgz#ec1bbb87cb1cab9ff2c81b7c43c84a5d1ed97e65" - integrity sha512-wzT6PF3wNEd2PCLTBQxteheeSwViBrD89E1XZjl4sj505C4LwTpqOQSNXLEROHDQw35NoylYbMxoUhgf2hb4qw== - dependencies: - precision "~1.0.0" - round-precision "~1.0.0" - -run-applescript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" - integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== - dependencies: - execa "^5.0.0" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8367,11 +6967,6 @@ sade@^1.7.3: dependencies: mri "^1.1.0" -safari-14-idb-fix@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-1.0.6.tgz#cbaabc33a4500c44b5c432d6c525b0ed9b68bb65" - integrity sha512-oTEQOdMwRX+uCtWCKT1nx2gAeSdpr8elg/2gcaKUH00SJU2xWESfkx11nmXwTRHy7xfQoj1o4TTQvdmuBosTnA== - safe-array-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" @@ -8491,11 +7086,6 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -8522,11 +7112,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -8544,6 +7129,11 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +sonner@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/sonner/-/sonner-0.6.2.tgz#d87420e80d8b25b6d2bd6aabcc28465f03962bdc" + integrity sha512-bh4FWhYoNN481ZIW94W4e0kSLBTMGislYg2YXvDS1px1AJJz4erQe9jHV8s5pS1VMVDgfh3CslNSFLaU6Ldrnw== + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -8584,11 +7174,6 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - space-separated-tokens@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" @@ -8702,16 +7287,6 @@ strip-comments@^2.0.1: resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -8785,18 +7360,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svgmoji@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/svgmoji/-/svgmoji-3.2.0.tgz#2214f4930e76e82c33bae23139c85b3973610b32" - integrity sha512-tjmdQhIju2ZQ81FLBlPngg1aWMOhQjP9ErXb2ROikM0aBGA/hqI0/DN/5J0sDsXzJPHmODpSFhWfiSsUieU3bA== - dependencies: - "@babel/runtime" "^7.12.5" - "@svgmoji/blob" "^3.2.0" - "@svgmoji/core" "^3.2.0" - "@svgmoji/noto" "^3.2.0" - "@svgmoji/openmoji" "^3.2.0" - "@svgmoji/twemoji" "^3.2.0" - swr@^2.1.3: version "2.2.0" resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.0.tgz#575c6ac1bec087847f4c86a39ccbc0043c834d6a" @@ -8804,19 +7367,6 @@ swr@^2.1.3: dependencies: use-sync-external-store "^1.2.0" -synckit@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" - integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== - dependencies: - "@pkgr/utils" "^2.3.1" - tslib "^2.5.0" - -tabbable@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - table@^6.0.9: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -8828,6 +7378,16 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" +tailwind-merge@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" + integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== + +tailwindcss-animate@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.6.tgz#c7195037481552cc47962ea50113830360fd0c28" + integrity sha512-4WigSGMvbl3gCCact62ZvOngA+PRqhAn7si3TQ3/ZuPuQZcIEtVap+ENSXbzWhpojKB8CpvnIsrwBu8/RnHtuw== + tailwindcss@^3.1.6, tailwindcss@^3.2.7: version "3.3.3" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" @@ -8965,25 +7525,32 @@ tiny-invariant@^1.0.6: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - tinycolor2@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== -titleize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" - integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== +tippy.js@^6.3.7: + version "6.3.7" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" + +tiptap-markdown@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/tiptap-markdown/-/tiptap-markdown-0.8.2.tgz#93d42ef6225042d8bfe77861b93450aab184d67b" + integrity sha512-RyfpnH475+FYVh1fCiWF9+wBvA8T6X3PqxZR1MApEewxkoQ5kREQFiVwjZiez9qUQk/Bxu3RerFSJot65V6cbQ== + dependencies: + "@types/markdown-it" "^12.2.3" + markdown-it "^13.0.1" + markdown-it-task-lists "^2.1.1" + prosemirror-markdown "^1.11.1" tlds@^1.238.0: - version "1.240.0" - resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.240.0.tgz#3d3d776d97aa079e43ef4d2f9ef9845e55cff08e" - integrity sha512-1OYJQenswGZSOdRw7Bql5Qu7uf75b+F3HFBXbqnG/ifHa0fev1XcG+3pJf3pA/KC6RtHQzfKgIf1vkMlMG7mtQ== + version "1.242.0" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.242.0.tgz#da136a9c95b0efa1a4cd57dca8ef240c08ada4b7" + integrity sha512-aP3dXawgmbfU94mA32CJGHmJUE1E58HCB1KmlKRhBNtqBL27mSQcAEmcaMaQ1Za9kIVvOdbxJD3U5ycDy7nJ3w== to-fast-properties@^2.0.0: version "2.0.0" @@ -9039,7 +7606,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3", tslib@^2.5.0, tslib@^2.6.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3": version "2.6.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== @@ -9105,18 +7672,6 @@ turbo@latest: turbo-windows-64 "1.10.12" turbo-windows-arm64 "1.10.12" -turndown-plugin-gfm@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz#6f8678a361f35220b2bdf5619e6049add75bf1c7" - integrity sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg== - -turndown@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/turndown/-/turndown-7.1.2.tgz#7feb838c78f14241e79ed92a416e0d213e044a29" - integrity sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg== - dependencies: - domino "^2.1.6" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -9139,11 +7694,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - type-fest@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" @@ -9203,6 +7753,11 @@ typescript@4.9.5, typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -9304,16 +7859,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unraw@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unraw/-/unraw-2.0.1.tgz#7b51dcdfb1e43d59d5e52cdb44d349d029edbaba" - integrity sha512-tdOvLfRzHolwYcHS6HIX860MkK9LQ4+oLuNwFYL7bpgTEO64PZrcQxkisgwJYCfF8sKiWLwwu1c83DvMkbefIQ== - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -9355,23 +7900,16 @@ use-callback-ref@^1.3.0: dependencies: tslib "^2.0.0" -use-isomorphic-layout-effect@^1.1.0, use-isomorphic-layout-effect@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== +use-debounce@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-9.0.4.tgz#51d25d856fbdfeb537553972ce3943b897f1ac85" + integrity sha512-6X8H/mikbrt0XE8e+JXRtZ8yYVvKkdYRfmIhWZYsP8rcNs9hk3APV8Ua2mFkKRLcJKVdnX2/Vwrmg2GWKUQEaQ== use-memo-one@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-previous@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-previous/-/use-previous-1.2.0.tgz#df7f0c6d5dc7c9e81650eb29c36575306a6898c0" - integrity sha512-tK7Ne779nqTKGeh0rsFvxnQcEqePFRYlM0rfmNy9JH+h+2ndja7P0017nda0Q1gkqfcOD//pKZbDyyLIUH2s+Q== - dependencies: - use-isomorphic-layout-effect "^1.1.0" - use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" @@ -9390,6 +7928,11 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uuid@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" @@ -9428,7 +7971,7 @@ vfile@^5.0.0: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" -w3c-keyname@^2.2.0, w3c-keyname@^2.2.7: +w3c-keyname@^2.2.0: version "2.2.8" resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== @@ -9691,25 +8234,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y-prosemirror@^1.0.19: - version "1.2.1" - resolved "https://registry.yarnpkg.com/y-prosemirror/-/y-prosemirror-1.2.1.tgz#a8b5c50b8fd445e556dfa831f295765f4ca022bd" - integrity sha512-czMBfB1eL2awqmOSxQM8cS/fsUOGE6fjvyPLInrh4crPxFiw67wDpwIW+EGBYKRa04sYbS0ScGj7ZgvWuDrmBQ== - dependencies: - lib0 "^0.2.42" - -y-protocols@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.5.tgz#91d574250060b29fcac8f8eb5e276fbad594245e" - integrity sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A== - dependencies: - lib0 "^0.2.42" - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -9730,13 +8254,6 @@ yaml@^2.1.1: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== -yjs@^13.6.1: - version "13.6.7" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.6.7.tgz#f1176c37f65eb566cf390bd813e2099d598795f4" - integrity sha512-mCZTh4kjvUS2DnaktsYN6wLH3WZCJBLqrTdkWh1bIDpA/sB/GNFaLA/dyVJj2Hc7KwONuuoC/vWe9bwBBosZLQ== - dependencies: - lib0 "^0.2.74" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 6112a4ab31cbcb9da9763d59308602c60f219820 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Fri, 11 Aug 2023 10:45:22 +0530 Subject: [PATCH 29/42] removed extra gap at top and moved saved indicator to bottom --- apps/app/components/issues/description-form.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index 4914cdcbe18..e5bb2c0e245 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -129,7 +129,7 @@ export const IssueDescriptionForm: FC = ({ debouncedUpdatesEnabled={true} setIsSubmitting={setIsSubmitting} customClassName="min-h-[150px]" - editorContentCustomClassNames="pt-9" + editorContentCustomClassNames="pb-9" onChange={(description: Object, description_html: string) => { setIsSubmitting(true); onChange(description_html); @@ -140,7 +140,7 @@ export const IssueDescriptionForm: FC = ({ ); }} /> -
+
{isSubmitting ? "Saving..." : "Saved"}
From 78bb3085f343fbde632f00cf595b00cb30254442 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Mon, 14 Aug 2023 18:30:46 +0530 Subject: [PATCH 30/42] fix: slash command scroll posiiton --- .../core/modals/gpt-assistant-modal.tsx | 27 +++---- .../components/issues/comment/add-comment.tsx | 17 ++--- .../issues/comment/comment-card.tsx | 31 ++++---- .../components/issues/description-form.tsx | 2 +- apps/app/components/issues/form.tsx | 17 +++-- .../pages/create-update-block-inline.tsx | 31 ++++---- apps/app/components/tiptap/index.tsx | 71 +++++++++---------- .../components/tiptap/slash-command/index.tsx | 71 +++++-------------- .../projects/[projectId]/pages/[pageId].tsx | 24 ++++--- apps/app/styles/editor.css | 8 +-- 10 files changed, 137 insertions(+), 162 deletions(-) diff --git a/apps/app/components/core/modals/gpt-assistant-modal.tsx b/apps/app/components/core/modals/gpt-assistant-modal.tsx index b9bf09aced5..e8fd0812c8f 100644 --- a/apps/app/components/core/modals/gpt-assistant-modal.tsx +++ b/apps/app/components/core/modals/gpt-assistant-modal.tsx @@ -32,10 +32,9 @@ type FormData = { task: string; }; -const TiptapEditor = React.forwardRef< - ITiptapRichTextEditor, - ITiptapRichTextEditor ->((props, ref) => ); +const TiptapEditor = React.forwardRef( + (props, ref) => +); TiptapEditor.displayName = "TiptapEditor"; @@ -141,11 +140,12 @@ export const GptAssistantModal: React.FC = ({ return (
{((content && content !== "") || (htmlContent && htmlContent !== "

")) && ( -
+
Content: ${content}

`} @@ -179,10 +179,11 @@ export const GptAssistantModal: React.FC = ({ type="text" name="task" register={register} - placeholder={`${content && content !== "" - ? "Tell AI what action to perform on this content..." - : "Ask AI anything..." - }`} + placeholder={`${ + content && content !== "" + ? "Tell AI what action to perform on this content..." + : "Ask AI anything..." + }`} autoComplete="off" />
@@ -218,8 +219,8 @@ export const GptAssistantModal: React.FC = ({ {isSubmitting ? "Generating response..." : response === "" - ? "Generate response" - : "Generate again"} + ? "Generate response" + : "Generate again"}
diff --git a/apps/app/components/issues/comment/add-comment.tsx b/apps/app/components/issues/comment/add-comment.tsx index 87fb745a792..6f49e900aa4 100644 --- a/apps/app/components/issues/comment/add-comment.tsx +++ b/apps/app/components/issues/comment/add-comment.tsx @@ -18,10 +18,9 @@ import type { ICurrentUserResponse, IIssueComment } from "types"; import { PROJECT_ISSUES_ACTIVITY } from "constants/fetch-keys"; import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; -const TiptapEditor = React.forwardRef< - ITiptapRichTextEditor, - ITiptapRichTextEditor ->((props, ref) => ); +const TiptapEditor = React.forwardRef( + (props, ref) => +); TiptapEditor.displayName = "TiptapEditor"; @@ -88,15 +87,17 @@ export const AddComment: React.FC = ({ issueId, user, disabled = false }) return (
-
+
+ render={({ field: { value, onChange } }) => ( = ({ issueId, user, disabled = false }) setValue("comment_json", comment_json); }} /> - } + )} /> diff --git a/apps/app/components/issues/comment/comment-card.tsx b/apps/app/components/issues/comment/comment-card.tsx index 5a340609a95..169e2f83361 100644 --- a/apps/app/components/issues/comment/comment-card.tsx +++ b/apps/app/components/issues/comment/comment-card.tsx @@ -15,10 +15,9 @@ import { timeAgo } from "helpers/date-time.helper"; import type { IIssueComment } from "types"; import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; -const TiptapEditor = React.forwardRef< - ITiptapRichTextEditor, - ITiptapRichTextEditor ->((props, ref) => ); +const TiptapEditor = React.forwardRef( + (props, ref) => +); TiptapEditor.displayName = "TiptapEditor"; @@ -51,7 +50,7 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD setIsEditing(false); onSubmit(formData); - console.log("watching", formData.comment_html) + console.log("watching", formData.comment_html); editorRef.current?.setEditorValue(formData.comment_html); showEditorRef.current?.setEditorValue(formData.comment_html); @@ -103,16 +102,18 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD className={`flex-col gap-2 ${isEditing ? "flex" : "hidden"}`} onSubmit={handleSubmit(onEnter)} > - { - setValue("comment_json", comment_json); - setValue("comment_html", comment_html); - }} - /> +
+ { + setValue("comment_json", comment_json); + setValue("comment_html", comment_html); + }} + /> +
{errors.name ? errors.name.message : null} -
+
= ({
)} {(fieldsToShow.includes("all") || fieldsToShow.includes("description")) && ( -
+
{issueName && issueName !== "" && (
Discard @@ -555,8 +558,8 @@ export const IssueForm: FC = ({ ? "Updating Issue..." : "Update Issue" : isSubmitting - ? "Adding Issue..." - : "Add Issue"} + ? "Adding Issue..." + : "Add Issue"}
diff --git a/apps/app/components/pages/create-update-block-inline.tsx b/apps/app/components/pages/create-update-block-inline.tsx index da73849213b..18ff9257951 100644 --- a/apps/app/components/pages/create-update-block-inline.tsx +++ b/apps/app/components/pages/create-update-block-inline.tsx @@ -39,10 +39,9 @@ const defaultValues = { description_html: null, }; -const TiptapEditor = React.forwardRef< - ITiptapRichTextEditor, - ITiptapRichTextEditor ->((props, ref) => ); +const TiptapEditor = React.forwardRef( + (props, ref) => +); TiptapEditor.displayName = "TiptapEditor"; @@ -232,9 +231,9 @@ export const CreateUpdateBlockInline: React.FC = ({ description: !data.description || data.description === "" ? { - type: "doc", - content: [{ type: "paragraph" }], - } + type: "doc", + content: [{ type: "paragraph" }], + } : data.description, description_html: data.description_html ?? "

", }); @@ -285,7 +284,10 @@ export const CreateUpdateBlockInline: React.FC = ({ maxLength={255} />
-
+
= ({ value && value !== "" && Object.keys(value).length > 0 ? value : watch("description_html") && watch("description_html") !== "" - ? watch("description_html") - : { type: "doc", content: [{ type: "paragraph" }] } + ? watch("description_html") + : { type: "doc", content: [{ type: "paragraph" }] } } debouncedUpdatesEnabled={false} customClassName="text-sm" @@ -335,8 +337,9 @@ export const CreateUpdateBlockInline: React.FC = ({
diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index 14e77825b73..8f28f834a83 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -1,14 +1,14 @@ // @ts-nocheck -import { useEditor, EditorContent, Editor } from '@tiptap/react'; -import { useDebouncedCallback } from 'use-debounce'; -import { EditorBubbleMenu } from './bubble-menu'; -import { TiptapExtensions } from './extensions'; -import { TiptapEditorProps } from './props'; +import { useEditor, EditorContent, Editor } from "@tiptap/react"; +import { useDebouncedCallback } from "use-debounce"; +import { EditorBubbleMenu } from "./bubble-menu"; +import { TiptapExtensions } from "./extensions"; +import { TiptapEditorProps } from "./props"; import { Node } from "@tiptap/pm/model"; import { Editor as CoreEditor } from "@tiptap/core"; -import { useCallback, useImperativeHandle, useRef } from 'react'; -import { EditorState } from '@tiptap/pm/state'; -import fileService from 'services/file.service'; +import { useCallback, useImperativeHandle, useRef } from "react"; +import { EditorState } from "@tiptap/pm/state"; +import fileService from "services/file.service"; export interface ITiptapRichTextEditor { value: string; @@ -34,7 +34,7 @@ const Tiptap = (props: ITiptapRichTextEditor) => { value, noBorder, borderOnFocus, - customClassName + customClassName, } = props; const editor = useEditor({ @@ -45,43 +45,40 @@ const Tiptap = (props: ITiptapRichTextEditor) => { onUpdate: async ({ editor }) => { // for instant feedback loop setIsSubmitting?.(true); - checkForNodeDeletions(editor) + checkForNodeDeletions(editor); if (debouncedUpdatesEnabled) { debouncedUpdates({ onChange, editor }); } else { onChange?.(editor.getJSON(), editor.getHTML()); } - } + }, }); - const editorRef: React.MutableRefObject = useRef(null) + const editorRef: React.MutableRefObject = useRef(null); useImperativeHandle(forwardedRef, () => ({ clearEditor: () => { - console.log('clearContent') - console.log(editorRef) - editorRef.current?.commands.clearContent() + console.log("clearContent"); + console.log(editorRef); + editorRef.current?.commands.clearContent(); }, setEditorValue: (content: string) => { - console.log(editorRef, forwardedRef, content) - editorRef.current?.commands.setContent(content) - } - })) + console.log(editorRef, forwardedRef, content); + editorRef.current?.commands.setContent(content); + }, + })); const previousState = useRef(); - const onNodeDeleted = useCallback( - async (node: Node) => { - if (node.type.name === 'image') { - const assetUrlWithWorkspaceId = new URL(node.attrs.src).pathname.substring(1); - const resStatus = await fileService.deleteImage(assetUrlWithWorkspaceId); - if (resStatus === 204) { - console.log("file deleted successfully"); - } + const onNodeDeleted = useCallback(async (node: Node) => { + if (node.type.name === "image") { + const assetUrlWithWorkspaceId = new URL(node.attrs.src).pathname.substring(1); + const resStatus = await fileService.deleteImage(assetUrlWithWorkspaceId); + if (resStatus === 204) { + console.log("file deleted successfully"); } - }, - [], - ); + } + }, []); const checkForNodeDeletions = useCallback( (editor: CoreEditor) => { @@ -107,7 +104,7 @@ const Tiptap = (props: ITiptapRichTextEditor) => { } } }, - [onNodeDeleted], + [onNodeDeleted] ); const debouncedUpdates = useDebouncedCallback(async ({ onChange, editor }) => { @@ -119,19 +116,19 @@ const Tiptap = (props: ITiptapRichTextEditor) => { }, 1000); const editorClassNames = `mt-2 p-3 relative focus:outline-none rounded-md focus:border-custom-border-200 - ${noBorder ? '' : 'border border-custom-border-200' - } ${borderOnFocus ? 'focus:border border-custom-border-200' : 'focus:border-0' - } ${customClassName}`; + ${noBorder ? "" : "border border-custom-border-200"} ${ + borderOnFocus ? "focus:border border-custom-border-200" : "focus:border-0" + } ${customClassName}`; - if (!editor) return null - editorRef.current = editor + if (!editor) return null; + editorRef.current = editor; return (
{ editor?.chain().focus().run(); }} - className={`tiptap-editor-container relative ${editorClassNames}`} + className={`tiptap-editor-container cursor-text relative ${editorClassNames}`} > {editor && }
diff --git a/apps/app/components/tiptap/slash-command/index.tsx b/apps/app/components/tiptap/slash-command/index.tsx index ab93945a927..94899d41c43 100644 --- a/apps/app/components/tiptap/slash-command/index.tsx +++ b/apps/app/components/tiptap/slash-command/index.tsx @@ -1,11 +1,4 @@ -import React, { - useState, - useEffect, - useCallback, - ReactNode, - useRef, - useLayoutEffect, -} from "react"; +import React, { useState, useEffect, useCallback, ReactNode, useRef, useLayoutEffect } from "react"; import { Editor, Range, Extension } from "@tiptap/core"; import Suggestion from "@tiptap/suggestion"; import { ReactRenderer } from "@tiptap/react"; @@ -42,15 +35,7 @@ const Command = Extension.create({ return { suggestion: { char: "/", - command: ({ - editor, - range, - props, - }: { - editor: Editor; - range: Range; - props: any; - }) => { + command: ({ editor, range, props }: { editor: Editor; range: Range; props: any }) => { props.command({ editor, range }); }, }, @@ -74,12 +59,7 @@ const getSuggestionItems = ({ query }: { query: string }) => searchTerms: ["p", "paragraph"], icon: , command: ({ editor, range }: CommandProps) => { - editor - .chain() - .focus() - .deleteRange(range) - .toggleNode("paragraph", "paragraph") - .run(); + editor.chain().focus().deleteRange(range).toggleNode("paragraph", "paragraph").run(); }, }, { @@ -88,12 +68,7 @@ const getSuggestionItems = ({ query }: { query: string }) => searchTerms: ["title", "big", "large"], icon: , command: ({ editor, range }: CommandProps) => { - editor - .chain() - .focus() - .deleteRange(range) - .setNode("heading", { level: 1 }) - .run(); + editor.chain().focus().deleteRange(range).setNode("heading", { level: 1 }).run(); }, }, { @@ -102,12 +77,7 @@ const getSuggestionItems = ({ query }: { query: string }) => searchTerms: ["subtitle", "medium"], icon: , command: ({ editor, range }: CommandProps) => { - editor - .chain() - .focus() - .deleteRange(range) - .setNode("heading", { level: 2 }) - .run(); + editor.chain().focus().deleteRange(range).setNode("heading", { level: 2 }).run(); }, }, { @@ -116,12 +86,7 @@ const getSuggestionItems = ({ query }: { query: string }) => searchTerms: ["subtitle", "small"], icon: , command: ({ editor, range }: CommandProps) => { - editor - .chain() - .focus() - .deleteRange(range) - .setNode("heading", { level: 3 }) - .run(); + editor.chain().focus().deleteRange(range).setNode("heading", { level: 3 }).run(); }, }, { @@ -148,7 +113,7 @@ const getSuggestionItems = ({ query }: { query: string }) => searchTerms: ["line", "divider", "horizontal", "rule", "separate"], icon: , command: ({ editor, range }: CommandProps) => { - editor.chain().focus().deleteRange(range).setHorizontalRule().run() + editor.chain().focus().deleteRange(range).setHorizontalRule().run(); }, }, { @@ -209,12 +174,11 @@ const getSuggestionItems = ({ query }: { query: string }) => return ( item.title.toLowerCase().includes(search) || item.description.toLowerCase().includes(search) || - (item.searchTerms && - item.searchTerms.some((term: string) => term.includes(search))) + (item.searchTerms && item.searchTerms.some((term: string) => term.includes(search))) ); } return true; - });; + }); export const updateScrollView = (container: HTMLElement, item: HTMLElement) => { const containerHeight = container.offsetHeight; @@ -250,7 +214,7 @@ const CommandList = ({ command(item); } }, - [command, items], + [command, items] ); useEffect(() => { @@ -297,12 +261,13 @@ const CommandList = ({
- {items.map((item: CommandItemProps, index: number) => + {items.map((item: CommandItemProps, index: number) => (
- )} + ))}
) : null; }; @@ -320,6 +285,8 @@ const renderItems = () => { let component: ReactRenderer | null = null; let popup: any | null = null; + const container = document.querySelector("#tiptap-container") as HTMLElement; + return { onStart: (props: { editor: Editor; clientRect: DOMRect }) => { component = new ReactRenderer(CommandList, { @@ -330,7 +297,7 @@ const renderItems = () => { // @ts-ignore popup = tippy("body", { getReferenceClientRect: props.clientRect, - appendTo: () => document.body, + appendTo: () => container, content: component.element, showOnCreate: true, interactive: true, diff --git a/apps/app/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx b/apps/app/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx index ed52f447ad7..0502e9e8771 100644 --- a/apps/app/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx +++ b/apps/app/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx @@ -629,17 +629,19 @@ const SinglePage: NextPage = () => { ref={provided.innerRef} {...provided.droppableProps} > - {pageBlocks.map((block, index) => ( - - ))} - {provided.placeholder} + <> + {pageBlocks.map((block, index) => ( + + ))} + {provided.placeholder} +
)} diff --git a/apps/app/styles/editor.css b/apps/app/styles/editor.css index f8f91ca34b8..f76f690af97 100644 --- a/apps/app/styles/editor.css +++ b/apps/app/styles/editor.css @@ -32,18 +32,18 @@ /* Custom TODO list checkboxes – shoutout to this awesome tutorial: https://moderncss.dev/pure-css-custom-checkbox-style/ */ -ul[data-type="taskList"] li>label { +ul[data-type="taskList"] li > label { margin-right: 0.2rem; user-select: none; } @media screen and (max-width: 768px) { - ul[data-type="taskList"] li>label { + ul[data-type="taskList"] li > label { margin-right: 0.5rem; } } -ul[data-type="taskList"] li>label input[type="checkbox"] { +ul[data-type="taskList"] li > label input[type="checkbox"] { -webkit-appearance: none; appearance: none; background-color: rgb(var(--color-background-100)); @@ -81,7 +81,7 @@ ul[data-type="taskList"] li>label input[type="checkbox"] { } } -ul[data-type="taskList"] li[data-checked="true"]>div>p { +ul[data-type="taskList"] li[data-checked="true"] > div > p { color: rgb(var(--color-text-200)); text-decoration: line-through; text-decoration-thickness: 2px; From b1c6eaf2f04453c989bf46ac6c16ee2f76276fd4 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Mon, 14 Aug 2023 18:51:54 +0530 Subject: [PATCH 31/42] chore: update custom css variables --- .../components/tiptap/bubble-menu/index.tsx | 14 +++------- .../tiptap/bubble-menu/link-selector.tsx | 15 ++++------ .../tiptap/bubble-menu/node-selector.tsx | 28 +++++++------------ .../components/tiptap/extensions/index.tsx | 25 ++++++++--------- .../tiptap/plugins/upload-image.tsx | 26 ++++++++--------- .../components/tiptap/slash-command/index.tsx | 8 +++--- 6 files changed, 47 insertions(+), 69 deletions(-) diff --git a/apps/app/components/tiptap/bubble-menu/index.tsx b/apps/app/components/tiptap/bubble-menu/index.tsx index a70481b8829..a3f11049b7a 100644 --- a/apps/app/components/tiptap/bubble-menu/index.tsx +++ b/apps/app/components/tiptap/bubble-menu/index.tsx @@ -1,16 +1,10 @@ import { BubbleMenu, BubbleMenuProps } from "@tiptap/react"; import { FC, useState } from "react"; -import { - BoldIcon, - ItalicIcon, - UnderlineIcon, - StrikethroughIcon, - CodeIcon, -} from "lucide-react"; +import { BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, CodeIcon } from "lucide-react"; import { NodeSelector } from "./node-selector"; import { LinkSelector } from "./link-selector"; -import { cn } from "../utils" +import { cn } from "../utils"; export interface BubbleMenuItem { name: string; @@ -81,7 +75,7 @@ export const EditorBubbleMenu: FC = (props) => { return ( = (props) => { > diff --git a/apps/app/components/tiptap/bubble-menu/link-selector.tsx b/apps/app/components/tiptap/bubble-menu/link-selector.tsx index c58c0de0b5e..d4248e3cc5d 100644 --- a/apps/app/components/tiptap/bubble-menu/link-selector.tsx +++ b/apps/app/components/tiptap/bubble-menu/link-selector.tsx @@ -1,7 +1,7 @@ import { Editor } from "@tiptap/core"; import { Check, Trash } from "lucide-react"; import { Dispatch, FC, SetStateAction, useEffect, useRef } from "react"; -import { cn } from '../utils'; +import { cn } from "../utils"; interface LinkSelectorProps { editor: Editor; @@ -9,11 +9,7 @@ interface LinkSelectorProps { setIsOpen: Dispatch>; } -export const LinkSelector: FC = ({ - editor, - isOpen, - setIsOpen, -}) => { +export const LinkSelector: FC = ({ editor, isOpen, setIsOpen }) => { const inputRef = useRef(null); useEffect(() => { @@ -46,13 +42,13 @@ export const LinkSelector: FC = ({ editor.chain().focus().setLink({ href: input.value }).run(); setIsOpen(false); }} - className="fixed top-full z-[99999] mt-1 flex w-60 overflow-hidden rounded border border-custom-border-100 bg-custom-background-100 dow-xl animate-in fade-in slide-in-from-top-1" + className="fixed top-full z-[99999] mt-1 flex w-60 overflow-hidden rounded border border-custom-border-300 bg-custom-background-100 dow-xl animate-in fade-in slide-in-from-top-1" > {editor.getAttributes("link").href ? ( @@ -66,7 +62,7 @@ export const LinkSelector: FC = ({ ) : ( - )} @@ -75,4 +71,3 @@ export const LinkSelector: FC = ({
); }; - diff --git a/apps/app/components/tiptap/bubble-menu/node-selector.tsx b/apps/app/components/tiptap/bubble-menu/node-selector.tsx index e74bfa40097..c671f436229 100644 --- a/apps/app/components/tiptap/bubble-menu/node-selector.tsx +++ b/apps/app/components/tiptap/bubble-menu/node-selector.tsx @@ -22,17 +22,12 @@ interface NodeSelectorProps { setIsOpen: Dispatch>; } -export const NodeSelector: FC = ({ - editor, - isOpen, - setIsOpen, -}) => { +export const NodeSelector: FC = ({ editor, isOpen, setIsOpen }) => { const items: BubbleMenuItem[] = [ { name: "Text", icon: TextIcon, - command: () => - editor.chain().focus().toggleNode("paragraph", "paragraph").run(), + command: () => editor.chain().focus().toggleNode("paragraph", "paragraph").run(), isActive: () => editor.isActive("paragraph") && !editor.isActive("bulletList") && @@ -78,12 +73,7 @@ export const NodeSelector: FC = ({ name: "Quote", icon: TextQuote, command: () => - editor - .chain() - .focus() - .toggleNode("paragraph", "paragraph") - .toggleBlockquote() - .run(), + editor.chain().focus().toggleNode("paragraph", "paragraph").toggleBlockquote().run(), isActive: () => editor.isActive("blockquote"), }, { @@ -117,10 +107,13 @@ export const NodeSelector: FC = ({ item.command(); setIsOpen(false); }} - className={cn("flex items-center justify-between rounded-sm px-2 py-1 text-sm text-custom-text-200 hover:bg-gray-800 hover:text-custom-text-100", { "bg-gray-800": activeItem.name === item.name })} + className={cn( + "flex items-center justify-between rounded-sm px-2 py-1 text-sm text-custom-text-200 hover:bg-custom-background-100/5 hover:text-custom-text-100", + { "bg-custom-primary-100/5": activeItem.name === item.name } + )} >
-
+
{item.name} @@ -129,8 +122,7 @@ export const NodeSelector: FC = ({ ))} - ) - } -
+ )} +
); }; diff --git a/apps/app/components/tiptap/extensions/index.tsx b/apps/app/components/tiptap/extensions/index.tsx index 6eed0108a40..9ca078b10ca 100644 --- a/apps/app/components/tiptap/extensions/index.tsx +++ b/apps/app/components/tiptap/extensions/index.tsx @@ -11,18 +11,18 @@ import TaskList from "@tiptap/extension-task-list"; import { Markdown } from "tiptap-markdown"; import Highlight from "@tiptap/extension-highlight"; import CodeBlockLowlight from "@tiptap/extension-code-block-lowlight"; -import { lowlight } from 'lowlight/lib/core' +import { lowlight } from "lowlight/lib/core"; import SlashCommand from "../slash-command"; import { InputRule } from "@tiptap/core"; -import { Node as ProseMirrorNode } from '@tiptap/pm/model'; +import { Node as ProseMirrorNode } from "@tiptap/pm/model"; -import ts from 'highlight.js/lib/languages/typescript' +import ts from "highlight.js/lib/languages/typescript"; -import 'highlight.js/styles/github-dark.css'; +import "highlight.js/styles/github-dark.css"; import UploadImagesPlugin from "../plugins/upload-image"; import UniqueID from "@tiptap-pro/extension-unique-id"; -lowlight.registerLanguage('ts', ts) +lowlight.registerLanguage("ts", ts); const CustomImage = TiptapImage.extend({ addProseMirrorPlugins() { @@ -49,13 +49,12 @@ export const TiptapExtensions = [ }, blockquote: { HTMLAttributes: { - class: "border-l-4 border-stone-700", + class: "border-l-4 border-custom-border-300", }, }, code: { HTMLAttributes: { - class: - "rounded-md bg-custom-bg-1000 px-1 py-1 font-mono font-medium text-stone-900", + class: "rounded-md bg-custom-bg-1000 px-1 py-1 font-mono font-medium text-custom-text-200", spellcheck: "false", }, }, @@ -84,25 +83,25 @@ export const TiptapExtensions = [ const end = range.to; // @ts-ignore tr.replaceWith(start - 1, end, this.type.create(attributes)); - } + }, }), ]; }, }).configure({ HTMLAttributes: { - class: "mb-6 border-t border-custom-border-400", + class: "mb-6 border-t border-custom-border-300", }, }), TiptapLink.configure({ HTMLAttributes: { class: - "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", + "text-custom-text-200 underline underline-offset-[3px] hover:text-custom-text-100 transition-colors cursor-pointer", }, }), CustomImage.configure({ allowBase64: true, HTMLAttributes: { - class: "rounded-lg border border-stone-200", + class: "rounded-lg border border-custom-border-300", }, }), Placeholder.configure({ @@ -116,7 +115,7 @@ export const TiptapExtensions = [ includeChildren: true, }), UniqueID.configure({ - types: ['image'], + types: ["image"], }), SlashCommand, TiptapUnderline, diff --git a/apps/app/components/tiptap/plugins/upload-image.tsx b/apps/app/components/tiptap/plugins/upload-image.tsx index 3f372d9d456..547a516a5fd 100644 --- a/apps/app/components/tiptap/plugins/upload-image.tsx +++ b/apps/app/components/tiptap/plugins/upload-image.tsx @@ -22,10 +22,7 @@ const UploadImagesPlugin = () => const placeholder = document.createElement("div"); placeholder.setAttribute("class", "img-placeholder"); const image = document.createElement("img"); - image.setAttribute( - "class", - "opacity-10 rounded-lg border border-stone-200", - ); + image.setAttribute("class", "opacity-10 rounded-lg border border-custom-border-300"); image.src = src; placeholder.appendChild(image); const deco = Decoration.widget(pos + 1, placeholder, { @@ -33,9 +30,7 @@ const UploadImagesPlugin = () => }); set = set.add(tr.doc, [deco]); } else if (action && action.remove) { - set = set.remove( - set.find(undefined, undefined, (spec) => spec.id == action.remove.id), - ); + set = set.remove(set.find(undefined, undefined, (spec) => spec.id == action.remove.id)); } return set; }, @@ -43,7 +38,7 @@ const UploadImagesPlugin = () => props: { decorations(state) { return this.getState(state); - } + }, }, }); @@ -51,7 +46,11 @@ export default UploadImagesPlugin; function findPlaceholder(state: EditorState, id: {}) { const decos = uploadKey.getState(state); - const found = decos.find(undefined, undefined, (spec: { id: number | undefined }) => spec.id == id); + const found = decos.find( + undefined, + undefined, + (spec: { id: number | undefined }) => spec.id == id + ); return found.length ? found[0].from : null; } @@ -81,7 +80,7 @@ export async function startImageUpload(file: File, view: EditorView, pos: number }; const src = await UploadImageHandler(file); - console.log(src, "src") + console.log(src, "src"); const { schema } = view.state; pos = findPlaceholder(view.state, id); @@ -111,10 +110,9 @@ const UploadImageHandler = (file: File): Promise => { image.onload = () => { resolve(imageUrl); }; - }) - } - catch (error) { - console.log(error) + }); + } catch (error) { + console.log(error); return Promise.reject(error); } }; diff --git a/apps/app/components/tiptap/slash-command/index.tsx b/apps/app/components/tiptap/slash-command/index.tsx index 94899d41c43..7f8b5648585 100644 --- a/apps/app/components/tiptap/slash-command/index.tsx +++ b/apps/app/components/tiptap/slash-command/index.tsx @@ -261,19 +261,19 @@ const CommandList = ({
{items.map((item: CommandItemProps, index: number) => ( ))} From 70955b48d8f6ae6ee069955a53ba4e1864192fbd Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Mon, 14 Aug 2023 19:10:24 +0530 Subject: [PATCH 32/42] build fixes --- .../app/components/command-palette/change-interface-theme.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/app/components/command-palette/change-interface-theme.tsx b/apps/app/components/command-palette/change-interface-theme.tsx index 489d8ac31e5..34ebf35625e 100644 --- a/apps/app/components/command-palette/change-interface-theme.tsx +++ b/apps/app/components/command-palette/change-interface-theme.tsx @@ -28,13 +28,13 @@ export const ChangeInterfaceTheme: React.FC = ({ setIsPaletteOpen }) => { setTheme(newTheme); - mutateUser((prevData) => { + mutateUser((prevData: any) => { if (!prevData) return prevData; return { ...prevData, theme: { - ...prevData.theme, + ...prevData?.theme, theme: newTheme, }, }; From b2e6dc3dbc2b1464f482b1751ca978ba2f30f929 Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Mon, 14 Aug 2023 19:39:34 +0530 Subject: [PATCH 33/42] type fixes --- apps/app/components/core/views/board-view/single-issue.tsx | 2 +- apps/app/components/core/views/list-view/single-issue.tsx | 2 +- apps/app/components/cycles/cycles-list-gantt-chart.tsx | 4 ++-- apps/app/components/estimates/single-estimate.tsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/app/components/core/views/board-view/single-issue.tsx b/apps/app/components/core/views/board-view/single-issue.tsx index 689020bb511..e87ea434f35 100644 --- a/apps/app/components/core/views/board-view/single-issue.tsx +++ b/apps/app/components/core/views/board-view/single-issue.tsx @@ -125,7 +125,7 @@ export const SingleBoardIssue: React.FC = ({ ); } else { mutateIssues( - (prevData) => + (prevData: any) => handleIssuesMutation( formData, groupTitle ?? "", diff --git a/apps/app/components/core/views/list-view/single-issue.tsx b/apps/app/components/core/views/list-view/single-issue.tsx index 07ce7a55a4a..7d1cea37e7e 100644 --- a/apps/app/components/core/views/list-view/single-issue.tsx +++ b/apps/app/components/core/views/list-view/single-issue.tsx @@ -108,7 +108,7 @@ export const SingleListIssue: React.FC = ({ ); } else { mutateIssues( - (prevData) => + (prevData: any) => handleIssuesMutation( formData, groupTitle ?? "", diff --git a/apps/app/components/cycles/cycles-list-gantt-chart.tsx b/apps/app/components/cycles/cycles-list-gantt-chart.tsx index c5d60015c43..4ad0029d830 100644 --- a/apps/app/components/cycles/cycles-list-gantt-chart.tsx +++ b/apps/app/components/cycles/cycles-list-gantt-chart.tsx @@ -38,10 +38,10 @@ export const CyclesListGanttChartView: FC = ({ cycles, mutateCycles }) => const handleCycleUpdate = (cycle: ICycle, payload: IBlockUpdateData) => { if (!workspaceSlug || !user) return; - mutateCycles((prevData) => { + mutateCycles((prevData: any) => { if (!prevData) return prevData; - const newList = prevData.map((p) => ({ + const newList = prevData.map((p: any) => ({ ...p, ...(p.id === cycle.id ? { diff --git a/apps/app/components/estimates/single-estimate.tsx b/apps/app/components/estimates/single-estimate.tsx index 17c11155920..3adf986ae69 100644 --- a/apps/app/components/estimates/single-estimate.tsx +++ b/apps/app/components/estimates/single-estimate.tsx @@ -47,7 +47,7 @@ export const SingleEstimate: React.FC = ({ estimate: estimate.id, }; - mutateProjectDetails((prevData) => { + mutateProjectDetails((prevData: any) => { if (!prevData) return prevData; return { ...prevData, estimate: estimate.id }; From e03c4487d1b4971e6958e71c96bd523a3784ff95 Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Mon, 14 Aug 2023 19:40:01 +0530 Subject: [PATCH 34/42] type fixes --- apps/app/components/gantt-chart/hooks/block-update.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/app/components/gantt-chart/hooks/block-update.tsx b/apps/app/components/gantt-chart/hooks/block-update.tsx index 5d183305b78..68e1f6d1216 100644 --- a/apps/app/components/gantt-chart/hooks/block-update.tsx +++ b/apps/app/components/gantt-chart/hooks/block-update.tsx @@ -15,10 +15,10 @@ export const updateGanttIssue = ( ) => { if (!issue || !workspaceSlug || !user) return; - mutate((prevData: IIssue[]) => { + mutate((prevData: any) => { if (!prevData) return prevData; - const newList = prevData.map((p) => ({ + const newList = prevData.map((p: any) => ({ ...p, ...(p.id === issue.id ? payload : {}), })); From b885f14dc42f882d23fab1c9f6748a397c63927f Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Mon, 14 Aug 2023 19:43:28 +0530 Subject: [PATCH 35/42] type fixes --- apps/app/components/inbox/inbox-action-headers.tsx | 4 ++-- apps/app/components/issues/activity.tsx | 5 ++++- apps/app/components/issues/sidebar-select/label.tsx | 2 +- apps/app/components/labels/labels-list-modal.tsx | 4 ++-- apps/app/components/modules/modules-list-gantt-chart.tsx | 4 ++-- apps/app/components/profile/profile-issues-view.tsx | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/apps/app/components/inbox/inbox-action-headers.tsx b/apps/app/components/inbox/inbox-action-headers.tsx index 6659485edc3..86bc15d01aa 100644 --- a/apps/app/components/inbox/inbox-action-headers.tsx +++ b/apps/app/components/inbox/inbox-action-headers.tsx @@ -72,8 +72,8 @@ export const InboxActionHeader = () => { false ); mutateInboxIssues( - (prevData) => - (prevData ?? []).map((i) => + (prevData: any) => + (prevData ?? []).map((i: any) => i.bridge_id === inboxIssueId ? { ...i, issue_inbox: [{ ...i.issue_inbox[0], ...data }] } : i diff --git a/apps/app/components/issues/activity.tsx b/apps/app/components/issues/activity.tsx index 9eb5d0c8b53..1b5cd6e4c69 100644 --- a/apps/app/components/issues/activity.tsx +++ b/apps/app/components/issues/activity.tsx @@ -54,7 +54,10 @@ export const IssueActivitySection: React.FC = ({ issueId, user }) => { const handleCommentDelete = async (commentId: string) => { if (!workspaceSlug || !projectId || !issueId) return; - mutateIssueActivities((prevData) => prevData?.filter((p) => p.id !== commentId), false); + mutateIssueActivities( + (prevData: any) => prevData?.filter((p: any) => p.id !== commentId), + false + ); await issuesService .deleteIssueComment( diff --git a/apps/app/components/issues/sidebar-select/label.tsx b/apps/app/components/issues/sidebar-select/label.tsx index 30ea71b043e..5f3539c86c4 100644 --- a/apps/app/components/issues/sidebar-select/label.tsx +++ b/apps/app/components/issues/sidebar-select/label.tsx @@ -85,7 +85,7 @@ export const SidebarLabelSelect: React.FC = ({ .then((res) => { reset(defaultValues); - issueLabelMutate((prevData) => [...(prevData ?? []), res], false); + issueLabelMutate((prevData: any) => [...(prevData ?? []), res], false); submitChanges({ labels_list: [...(issueDetails?.labels ?? []), res.id] }); diff --git a/apps/app/components/labels/labels-list-modal.tsx b/apps/app/components/labels/labels-list-modal.tsx index 265b42908c2..9042bde3a1b 100644 --- a/apps/app/components/labels/labels-list-modal.tsx +++ b/apps/app/components/labels/labels-list-modal.tsx @@ -49,8 +49,8 @@ export const LabelsListModal: React.FC = ({ isOpen, handleClose, parent, if (!workspaceSlug || !projectId) return; mutate( - (prevData) => - prevData?.map((l) => { + (prevData: any) => + prevData?.map((l: any) => { if (l.id === label.id) return { ...l, parent: parent?.id ?? "" }; return l; diff --git a/apps/app/components/modules/modules-list-gantt-chart.tsx b/apps/app/components/modules/modules-list-gantt-chart.tsx index 64ceccd1a3d..7dc281fb3f7 100644 --- a/apps/app/components/modules/modules-list-gantt-chart.tsx +++ b/apps/app/components/modules/modules-list-gantt-chart.tsx @@ -42,10 +42,10 @@ export const ModulesListGanttChartView: FC = ({ modules, mutateModules }) const handleModuleUpdate = (module: IModule, payload: IBlockUpdateData) => { if (!workspaceSlug || !user) return; - mutateModules((prevData) => { + mutateModules((prevData: any) => { if (!prevData) return prevData; - const newList = prevData.map((p) => ({ + const newList = prevData.map((p: any) => ({ ...p, ...(p.id === module.id ? { diff --git a/apps/app/components/profile/profile-issues-view.tsx b/apps/app/components/profile/profile-issues-view.tsx index 0b63f87a5be..44120a61c40 100644 --- a/apps/app/components/profile/profile-issues-view.tsx +++ b/apps/app/components/profile/profile-issues-view.tsx @@ -110,7 +110,7 @@ export const ProfileIssuesView = () => { draggedItem[groupByProperty] = destinationGroup; - mutateProfileIssues((prevData) => { + mutateProfileIssues((prevData: any) => { if (!prevData) return prevData; const sourceGroupArray = [...groupedIssues[sourceGroup]]; From b590cb60fd1cbfd3e9f914faeaf1a3c141ff184c Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:53:57 +0530 Subject: [PATCH 36/42] matched theme colors --- .../components/tiptap/bubble-menu/index.tsx | 6 +- .../tiptap/bubble-menu/link-selector.tsx | 6 +- .../tiptap/bubble-menu/node-selector.tsx | 9 +-- .../components/tiptap/extensions/index.tsx | 6 +- apps/app/components/tiptap/index.tsx | 10 +-- .../tiptap/plugins/upload-image.tsx | 5 +- .../components/tiptap/slash-command/index.tsx | 11 +-- apps/app/styles/editor.css | 80 ------------------- 8 files changed, 26 insertions(+), 107 deletions(-) diff --git a/apps/app/components/tiptap/bubble-menu/index.tsx b/apps/app/components/tiptap/bubble-menu/index.tsx index a3f11049b7a..590dfab5e02 100644 --- a/apps/app/components/tiptap/bubble-menu/index.tsx +++ b/apps/app/components/tiptap/bubble-menu/index.tsx @@ -98,11 +98,13 @@ export const EditorBubbleMenu: FC = (props) => { diff --git a/apps/app/components/tiptap/bubble-menu/link-selector.tsx b/apps/app/components/tiptap/bubble-menu/link-selector.tsx index d4248e3cc5d..f843db0ac9b 100644 --- a/apps/app/components/tiptap/bubble-menu/link-selector.tsx +++ b/apps/app/components/tiptap/bubble-menu/link-selector.tsx @@ -19,7 +19,7 @@ export const LinkSelector: FC = ({ editor, isOpen, setIsOpen return (
{isOpen && ( -
+
{items.map((item, index) => ( ))} diff --git a/apps/app/styles/editor.css b/apps/app/styles/editor.css index f76f690af97..7ffb7a0ac4a 100644 --- a/apps/app/styles/editor.css +++ b/apps/app/styles/editor.css @@ -115,83 +115,3 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p { -webkit-appearance: textfield; -moz-appearance: textfield; } - -.ProseMirror pre { - background: #121212; - border-radius: 0.375rem; - border-color: rgba(var(--color-background-100)); - border: 0.5px solid; - font-family: "JetBrainsMono", monospace; - padding: 0.75rem 1rem; -} - -.ProseMirror pre code { - background: none; - color: inherit; - font-size: 0.8rem; - padding: 0; -} - -.ProseMirror-icon { - display: inline-block; - line-height: 0.8; - vertical-align: -2px; - color: #666; - cursor: pointer; - margin: 0 3px; - padding: 3px 8px; - border-radius: 3px; - border: 1px solid transparent; - transition: background 50ms ease-in-out; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.ProseMirror-menu-disabled.ProseMirror-icon { - opacity: 0.3; - cursor: default; - pointer-events: none; -} - -.ProseMirror-icon svg { - fill: currentColor; - height: 1em; -} - -.ProseMirror-icon span { - vertical-align: text-top; -} - -.remirror-editor-wrapper .remirror-editor { - min-height: 150px; -} - -.issue-comments-section .remirror-editor-wrapper .remirror-editor, -.page-block-section .remirror-editor-wrapper .remirror-editor { - min-height: 50px; -} - -.remirror-section .remirror-editor-wrapper .remirror-editor { - min-height: 0 !important; -} - -.remirror-editor-wrapper { - padding-top: 8px; -} - -.MuiButtonBase-root { - border: none !important; - border-radius: 0.25rem !important; - padding: 0.25rem !important; -} - -.MuiButtonBase-root svg { - fill: rgb(var(--color-text-100)) !important; -} - -.MuiButtonBase-root.Mui-selected, -.MuiButtonBase-root:hover { - background-color: rgb(var(--color-background-100)) !important; -} From cd2c632929c5fbbb832b1e9fa596fcc7ee53b16e Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:54:15 +0530 Subject: [PATCH 37/42] fixed gpt-assistant modal --- .../components/core/modals/gpt-assistant-modal.tsx | 2 +- apps/app/components/issues/form.tsx | 12 ++++++++++-- apps/app/components/tiptap/index.tsx | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/app/components/core/modals/gpt-assistant-modal.tsx b/apps/app/components/core/modals/gpt-assistant-modal.tsx index e8fd0812c8f..6b06256cf0b 100644 --- a/apps/app/components/core/modals/gpt-assistant-modal.tsx +++ b/apps/app/components/core/modals/gpt-assistant-modal.tsx @@ -145,7 +145,7 @@ export const GptAssistantModal: React.FC = ({ }`} > {((content && content !== "") || (htmlContent && htmlContent !== "

")) && ( -
+
Content: ${content}

`} diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index 20b06b7a89c..d32c1e043a4 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -35,9 +35,15 @@ import { import { SparklesIcon, XMarkIcon } from "@heroicons/react/24/outline"; // types import type { ICurrentUserResponse, IIssue, ISearchIssueResponse } from "types"; -import Tiptap from "components/tiptap"; +import Tiptap, { ITiptapRichTextEditor } from "components/tiptap"; // rich-text-editor +const TiptapEditor = React.forwardRef( + (props, ref) => +); + +TiptapEditor.displayName = "TiptapEditor"; + const defaultValues: Partial = { project: "", name: "", @@ -158,6 +164,7 @@ export const IssueForm: FC = ({ const handleAiAssistance = async (response: string) => { if (!workspaceSlug || !projectId) return; + console.log(response) setValue("description", {}); setValue("description_html", `${watch("description_html")}

${response}

`); editorRef.current?.setEditorValue(`${watch("description_html")}`); @@ -365,7 +372,8 @@ export const IssueForm: FC = ({ if (!value && !watch("description_html")) return <>; return ( - { }, 500); }, 1000); - const editorClassNames = `relative w-full max-w-screen-lg sm:rounded-lg sm:border sm:shadow-lg mt-2 p-3 relative focus:outline-none rounded-md + const editorClassNames = `relative w-full max-w-screen-lg sm:rounded-lg sm:shadow-lg mt-2 p-3 relative focus:outline-none rounded-md ${noBorder ? '' : 'border border-custom-border-200' } ${borderOnFocus ? 'focus:border border-custom-border-300' : 'focus:border-0' } ${customClassName}`; From b6329da50fd47588e9d0577ccaf255cf2ce108d4 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:56:45 +0530 Subject: [PATCH 38/42] updated yarn lock --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 3cb2e8d126e..4d62e7f7cbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6452,7 +6452,14 @@ prosemirror-menu@^1.2.1: prosemirror-history "^1.0.0" prosemirror-state "^1.0.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.18.1, prosemirror-model@^1.19.0, prosemirror-model@^1.8.1: +prosemirror-model@^1.0.0, prosemirror-model@^1.16.0, prosemirror-model@^1.18.1, prosemirror-model@^1.8.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.18.1.tgz#1d5d6b6de7b983ee67a479dc607165fdef3935bd" + integrity sha512-IxSVBKAEMjD7s3n8cgtwMlxAXZrC7Mlag7zYsAKDndAqnDScvSmp/UdnRTV/B33lTCVU3CCm7dyAn/rVVD0mcw== + dependencies: + orderedmap "^2.0.0" + +prosemirror-model@^1.19.0: version "1.19.3" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.19.3.tgz#f0d55285487fefd962d0ac695f716f4ec6705006" integrity sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ== From 8b02f5849850d51da48dd34dc1f84d3c72faa411 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Mon, 14 Aug 2023 21:50:13 +0530 Subject: [PATCH 39/42] added debounced updates for title and removed saved state after timout --- .../issues/comment/comment-card.tsx | 1 - .../components/issues/description-form.tsx | 46 ++++++++++++------- apps/app/components/issues/form.tsx | 3 -- apps/app/components/tiptap/index.tsx | 5 +- .../tiptap/plugins/upload-image.tsx | 1 - 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/apps/app/components/issues/comment/comment-card.tsx b/apps/app/components/issues/comment/comment-card.tsx index 169e2f83361..21e503a094e 100644 --- a/apps/app/components/issues/comment/comment-card.tsx +++ b/apps/app/components/issues/comment/comment-card.tsx @@ -50,7 +50,6 @@ export const CommentCard: React.FC = ({ comment, onSubmit, handleCommentD setIsEditing(false); onSubmit(formData); - console.log("watching", formData.comment_html); editorRef.current?.setEditorValue(formData.comment_html); showEditorRef.current?.setEditorValue(formData.comment_html); diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index fb530f5bc2c..b39cf7b5b8d 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -10,6 +10,7 @@ import { TextArea } from "components/ui"; // types import { IIssue } from "types"; import Tiptap from "components/tiptap"; +import { useDebouncedCallback } from "use-debounce"; export interface IssueDescriptionFormValues { name: string; @@ -32,7 +33,7 @@ export const IssueDescriptionForm: FC = ({ handleFormSubmit, isAllowed, }) => { - const [isSubmitting, setIsSubmitting] = useState(false); + const [isSubmitting, setIsSubmitting] = useState<"submitting" | "submitted" | "saved">("saved"); const [characterLimit, setCharacterLimit] = useState(false); const { setShowAlert } = useReloadConfirmations(); @@ -55,7 +56,6 @@ export const IssueDescriptionForm: FC = ({ const handleDescriptionFormSubmit = useCallback( async (formData: Partial) => { - // console.log("formdata", formData) if (!formData?.name || formData?.name.length === 0 || formData?.name.length > 255) return; await handleFormSubmit({ @@ -67,6 +67,14 @@ export const IssueDescriptionForm: FC = ({ [handleFormSubmit] ); + useEffect(() => { + if (isSubmitting === "submitted") { + setTimeout(async () => { + setIsSubmitting("saved"); + }, 1000); + } + }, [isSubmitting]); + // reset form values useEffect(() => { if (!issue) return; @@ -76,6 +84,12 @@ export const IssueDescriptionForm: FC = ({ }); }, [issue, reset]); + const debouncedTitleSave = useDebouncedCallback(async () => { + setTimeout(async () => { + handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting("submitted")); + }, 500); + }, 1000); + return (
@@ -85,11 +99,10 @@ export const IssueDescriptionForm: FC = ({ placeholder="Enter issue name" register={register} onFocus={() => setCharacterLimit(true)} - onBlur={() => { + onChange={(e) => { setCharacterLimit(false); - - setIsSubmitting(true); - handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting(false)); + setIsSubmitting("submitting"); + debouncedTitleSave(); }} required={true} className="min-h-10 block w-full resize-none overflow-hidden rounded border-none bg-transparent px-3 py-2 text-xl outline-none ring-0 focus:ring-1 focus:ring-custom-primary" @@ -99,9 +112,8 @@ export const IssueDescriptionForm: FC = ({ {characterLimit && (
255 ? "text-red-500" : "" - }`} + className={`${watch("name").length === 0 || watch("name").length > 255 ? "text-red-500" : "" + }`} > {watch("name").length} @@ -121,8 +133,8 @@ export const IssueDescriptionForm: FC = ({ = ({ customClassName="min-h-[150px]" editorContentCustomClassNames="pb-9" onChange={(description: Object, description_html: string) => { - setIsSubmitting(true); + setIsSubmitting("submitting"); onChange(description_html); setValue("description", description); - handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting(false)); + handleSubmit(handleDescriptionFormSubmit)().finally(() => { + setIsSubmitting("submitted"); + }); }} /> ); }} /> -
- {isSubmitting ? "Saving..." : "Saved"} -
+ {isSubmitting !== "saved" && (
+ {isSubmitting === "submitting" ? "Saving..." : "Saved"} +
)}
); diff --git a/apps/app/components/issues/form.tsx b/apps/app/components/issues/form.tsx index d32c1e043a4..a7913b3cf87 100644 --- a/apps/app/components/issues/form.tsx +++ b/apps/app/components/issues/form.tsx @@ -136,8 +136,6 @@ export const IssueForm: FC = ({ reValidateMode: "onChange", }); - console.log("values", getValues()); - const issueName = watch("name"); const handleCreateUpdateIssue = async (formData: Partial) => { @@ -164,7 +162,6 @@ export const IssueForm: FC = ({ const handleAiAssistance = async (response: string) => { if (!workspaceSlug || !projectId) return; - console.log(response) setValue("description", {}); setValue("description_html", `${watch("description_html")}

${response}

`); editorRef.current?.setEditorValue(`${watch("description_html")}`); diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index f28726445ea..b4850ed7ebc 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -17,7 +17,7 @@ export interface ITiptapRichTextEditor { customClassName?: string; editorContentCustomClassNames?: string; onChange?: (json: any, html: string) => void; - setIsSubmitting?: (isSubmitting: boolean) => void; + setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void; editable?: boolean; forwardedRef?: any; debouncedUpdatesEnabled?: boolean; @@ -44,7 +44,7 @@ const Tiptap = (props: ITiptapRichTextEditor) => { content: value, onUpdate: async ({ editor }) => { // for instant feedback loop - setIsSubmitting?.(true); + setIsSubmitting?.("submitting"); checkForNodeDeletions(editor); if (debouncedUpdatesEnabled) { debouncedUpdates({ onChange, editor }); @@ -58,7 +58,6 @@ const Tiptap = (props: ITiptapRichTextEditor) => { useImperativeHandle(forwardedRef, () => ({ clearEditor: () => { - console.log("clearContent"); console.log(editorRef); editorRef.current?.commands.clearContent(); }, diff --git a/apps/app/components/tiptap/plugins/upload-image.tsx b/apps/app/components/tiptap/plugins/upload-image.tsx index 4a57bc88fd8..ed44aa3793a 100644 --- a/apps/app/components/tiptap/plugins/upload-image.tsx +++ b/apps/app/components/tiptap/plugins/upload-image.tsx @@ -83,7 +83,6 @@ export async function startImageUpload(file: File, view: EditorView, pos: number }; const src = await UploadImageHandler(file); - console.log(src, "src"); const { schema } = view.state; pos = findPlaceholder(view.state, id); From cdb07fc3c48847c2ac0093f3e7b41ac70f5d1ad9 Mon Sep 17 00:00:00 2001 From: Palanikannan1437 <73993394+Palanikannan1437@users.noreply.github.com> Date: Mon, 14 Aug 2023 22:27:41 +0530 Subject: [PATCH 40/42] added css animations for saved state --- apps/app/components/issues/description-form.tsx | 8 ++++---- apps/app/components/tiptap/index.tsx | 2 -- apps/app/styles/editor.css | 11 +++++++++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/app/components/issues/description-form.tsx b/apps/app/components/issues/description-form.tsx index b39cf7b5b8d..7c163527a5e 100644 --- a/apps/app/components/issues/description-form.tsx +++ b/apps/app/components/issues/description-form.tsx @@ -71,7 +71,7 @@ export const IssueDescriptionForm: FC = ({ if (isSubmitting === "submitted") { setTimeout(async () => { setIsSubmitting("saved"); - }, 1000); + }, 2000); } }, [isSubmitting]); @@ -154,9 +154,9 @@ export const IssueDescriptionForm: FC = ({ ); }} /> - {isSubmitting !== "saved" && (
- {isSubmitting === "submitting" ? "Saving..." : "Saved"} -
)} +
+ {isSubmitting === 'submitting' ? 'Saving...' : 'Saved'} +
); diff --git a/apps/app/components/tiptap/index.tsx b/apps/app/components/tiptap/index.tsx index b4850ed7ebc..3220d127bd3 100644 --- a/apps/app/components/tiptap/index.tsx +++ b/apps/app/components/tiptap/index.tsx @@ -58,11 +58,9 @@ const Tiptap = (props: ITiptapRichTextEditor) => { useImperativeHandle(forwardedRef, () => ({ clearEditor: () => { - console.log(editorRef); editorRef.current?.commands.clearContent(); }, setEditorValue: (content: string) => { - console.log(editorRef, forwardedRef, content); editorRef.current?.commands.setContent(content); }, })); diff --git a/apps/app/styles/editor.css b/apps/app/styles/editor.css index 7ffb7a0ac4a..05817c0dc3d 100644 --- a/apps/app/styles/editor.css +++ b/apps/app/styles/editor.css @@ -115,3 +115,14 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p { -webkit-appearance: textfield; -moz-appearance: textfield; } + +.fadeIn { + opacity: 1; + transition: opacity 0.3s ease-in; +} + +.fadeOut { + opacity: 0; + transition: opacity 0.2s ease-out; +} + From 92cc66e85d5c1c503e31da65a97cc6f98d37ac68 Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Tue, 15 Aug 2023 14:44:49 +0530 Subject: [PATCH 41/42] build fixes and removing remirror instances --- apps/app/contexts/inbox-view-context.tsx | 4 ++-- apps/app/contexts/issue-view.context.tsx | 12 ++++++------ .../app/contexts/user-notification-context.tsx | 13 +++++++------ apps/app/hooks/use-comment-reaction.tsx | 6 +++--- apps/app/hooks/use-issue-properties.tsx | 2 +- apps/app/hooks/use-issue-reaction.tsx | 6 +++--- apps/app/hooks/use-user-notifications.tsx | 18 +++++++++--------- .../[workspaceSlug]/me/profile/activity.tsx | 12 ++++++++++-- .../pages/[workspaceSlug]/me/profile/index.tsx | 4 ++-- .../projects/[projectId]/settings/members.tsx | 5 +++-- .../pages/[workspaceSlug]/settings/members.tsx | 11 ++++++----- 11 files changed, 52 insertions(+), 41 deletions(-) diff --git a/apps/app/contexts/inbox-view-context.tsx b/apps/app/contexts/inbox-view-context.tsx index f6201fbb94d..b7b452f120d 100644 --- a/apps/app/contexts/inbox-view-context.tsx +++ b/apps/app/contexts/inbox-view-context.tsx @@ -122,7 +122,7 @@ export const InboxViewContextProvider: React.FC<{ children: React.ReactNode }> = }, }; - mutateInboxDetails((prevData) => { + mutateInboxDetails((prevData: any) => { if (!prevData) return prevData; return { @@ -156,7 +156,7 @@ export const InboxViewContextProvider: React.FC<{ children: React.ReactNode }> = filters: { ...initialState.filters }, }; - mutateInboxDetails((prevData) => { + mutateInboxDetails((prevData: any) => { if (!prevData) return prevData; return { diff --git a/apps/app/contexts/issue-view.context.tsx b/apps/app/contexts/issue-view.context.tsx index aa59f4998df..dbf1d9a83bc 100644 --- a/apps/app/contexts/issue-view.context.tsx +++ b/apps/app/contexts/issue-view.context.tsx @@ -401,7 +401,7 @@ export const IssueViewContextProvider: React.FC<{ children: React.ReactNode }> = if (!workspaceSlug || !projectId) return; - mutateMyViewProps((prevData) => { + mutateMyViewProps((prevData: any) => { if (!prevData) return prevData; return { @@ -432,7 +432,7 @@ export const IssueViewContextProvider: React.FC<{ children: React.ReactNode }> = if (!workspaceSlug || !projectId) return; - mutateMyViewProps((prevData) => { + mutateMyViewProps((prevData: any) => { if (!prevData) return prevData; return { @@ -463,7 +463,7 @@ export const IssueViewContextProvider: React.FC<{ children: React.ReactNode }> = if (!workspaceSlug || !projectId) return; - mutateMyViewProps((prevData) => { + mutateMyViewProps((prevData: any) => { if (!prevData) return prevData; return { @@ -494,7 +494,7 @@ export const IssueViewContextProvider: React.FC<{ children: React.ReactNode }> = if (!workspaceSlug || !projectId) return; - mutateMyViewProps((prevData) => { + mutateMyViewProps((prevData: any) => { if (!prevData) return prevData; return { @@ -525,7 +525,7 @@ export const IssueViewContextProvider: React.FC<{ children: React.ReactNode }> = if (!workspaceSlug || !projectId) return; - mutateMyViewProps((prevData) => { + mutateMyViewProps((prevData: any) => { if (!prevData) return prevData; return { @@ -647,7 +647,7 @@ export const IssueViewContextProvider: React.FC<{ children: React.ReactNode }> = user ); } else { - mutateMyViewProps((prevData) => { + mutateMyViewProps((prevData: any) => { if (!prevData) return prevData; return { diff --git a/apps/app/contexts/user-notification-context.tsx b/apps/app/contexts/user-notification-context.tsx index 456773f8c44..32e93842e65 100644 --- a/apps/app/contexts/user-notification-context.tsx +++ b/apps/app/contexts/user-notification-context.tsx @@ -120,7 +120,7 @@ const UserNotificationContextProvider: React.FC<{ const handleReadMutation = (action: "read" | "unread") => { const notificationCountNumber = action === "read" ? -1 : 1; - mutateNotificationCount((prev) => { + mutateNotificationCount((prev: any) => { if (!prev) return prev; const notificationType: keyof NotificationCount = @@ -143,8 +143,8 @@ const UserNotificationContextProvider: React.FC<{ notifications?.find((notification) => notification.id === notificationId)?.read_at !== null; notificationsMutate( - (previousNotifications) => - previousNotifications?.map((notification) => + (previousNotifications: any) => + previousNotifications?.map((notification: any) => notification.id === notificationId ? { ...notification, read_at: isRead ? null : new Date() } : notification @@ -199,7 +199,8 @@ const UserNotificationContextProvider: React.FC<{ }); } else { notificationsMutate( - (prev) => prev?.filter((prevNotification) => prevNotification.id !== notificationId), + (prev: any) => + prev?.filter((prevNotification: any) => prevNotification.id !== notificationId), false ); await userNotificationServices @@ -222,8 +223,8 @@ const UserNotificationContextProvider: React.FC<{ null; notificationsMutate( - (previousNotifications) => - previousNotifications?.map((notification) => + (previousNotifications: any) => + previousNotifications?.map((notification: any) => notification.id === notificationId ? { ...notification, snoozed_till: isSnoozed ? null : new Date(dateTime!) } : notification diff --git a/apps/app/hooks/use-comment-reaction.tsx b/apps/app/hooks/use-comment-reaction.tsx index 6deb4d9fb18..92b4b9c1791 100644 --- a/apps/app/hooks/use-comment-reaction.tsx +++ b/apps/app/hooks/use-comment-reaction.tsx @@ -56,7 +56,7 @@ const useCommentReaction = ( user.user ); - mutateCommentReactions((prev) => [...(prev || []), data]); + mutateCommentReactions((prev: any) => [...(prev || []), data]); }; /** @@ -69,8 +69,8 @@ const useCommentReaction = ( if (!workspaceSlug || !projectId || !commendId) return; mutateCommentReactions( - (prevData) => - prevData?.filter((r) => r.actor !== user?.user?.id || r.reaction !== reaction) || [], + (prevData: any) => + prevData?.filter((r: any) => r.actor !== user?.user?.id || r.reaction !== reaction) || [], false ); diff --git a/apps/app/hooks/use-issue-properties.tsx b/apps/app/hooks/use-issue-properties.tsx index fe2a0cf5e78..d5d1072cedf 100644 --- a/apps/app/hooks/use-issue-properties.tsx +++ b/apps/app/hooks/use-issue-properties.tsx @@ -64,7 +64,7 @@ const useIssuesProperties = (workspaceSlug?: string, projectId?: string) => { if (issueProperties && projectId) { mutateIssueProperties( - (prev) => + (prev: any) => ({ ...prev, properties: { ...prev?.properties, [key]: !prev?.properties?.[key] }, diff --git a/apps/app/hooks/use-issue-reaction.tsx b/apps/app/hooks/use-issue-reaction.tsx index 89c65c5ed31..fabab98d285 100644 --- a/apps/app/hooks/use-issue-reaction.tsx +++ b/apps/app/hooks/use-issue-reaction.tsx @@ -56,7 +56,7 @@ const useIssueReaction = ( user.user ); - mutateReaction((prev) => [...(prev || []), data]); + mutateReaction((prev: any) => [...(prev || []), data]); }; /** @@ -69,8 +69,8 @@ const useIssueReaction = ( if (!workspaceSlug || !projectId || !issueId) return; mutateReaction( - (prevData) => - prevData?.filter((r) => r.actor !== user?.user?.id || r.reaction !== reaction) || [], + (prevData: any) => + prevData?.filter((r: any) => r.actor !== user?.user?.id || r.reaction !== reaction) || [], false ); diff --git a/apps/app/hooks/use-user-notifications.tsx b/apps/app/hooks/use-user-notifications.tsx index 868633db04f..fe539d80534 100644 --- a/apps/app/hooks/use-user-notifications.tsx +++ b/apps/app/hooks/use-user-notifications.tsx @@ -75,7 +75,7 @@ const useUserNotification = () => { const handleReadMutation = (action: "read" | "unread") => { const notificationCountNumber = action === "read" ? -1 : 1; - mutateNotificationCount((prev) => { + mutateNotificationCount((prev: any) => { if (!prev) return prev; const notificationType: keyof NotificationCount = @@ -93,18 +93,18 @@ const useUserNotification = () => { }; const mutateNotification = (notificationId: string, value: Object) => { - notificationMutate((previousNotifications) => { + notificationMutate((previousNotifications: any) => { if (!previousNotifications) return previousNotifications; const notificationIndex = Math.floor( previousNotifications - .map((d) => d.results) + .map((d: any) => d.results) .flat() - .findIndex((notification) => notification.id === notificationId) / PER_PAGE + .findIndex((notification: any) => notification.id === notificationId) / PER_PAGE ); let notificationIndexInPage = previousNotifications[notificationIndex].results.findIndex( - (notification) => notification.id === notificationId + (notification: any) => notification.id === notificationId ); if (notificationIndexInPage === -1) return previousNotifications; @@ -126,18 +126,18 @@ const useUserNotification = () => { }; const removeNotification = (notificationId: string) => { - notificationMutate((previousNotifications) => { + notificationMutate((previousNotifications: any) => { if (!previousNotifications) return previousNotifications; const notificationIndex = Math.floor( previousNotifications - .map((d) => d.results) + .map((d: any) => d.results) .flat() - .findIndex((notification) => notification.id === notificationId) / PER_PAGE + .findIndex((notification: any) => notification.id === notificationId) / PER_PAGE ); let notificationIndexInPage = previousNotifications[notificationIndex].results.findIndex( - (notification) => notification.id === notificationId + (notification: any) => notification.id === notificationId ); if (notificationIndexInPage === -1) return previousNotifications; diff --git a/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx b/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx index 1b04388e64f..600699d4074 100644 --- a/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx +++ b/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx @@ -10,7 +10,6 @@ import { WorkspaceAuthorizationLayout } from "layouts/auth-layout"; import SettingsNavbar from "layouts/settings-navbar"; // components import { ActivityIcon, ActivityMessage } from "components/core"; -import RemirrorRichTextEditor from "components/rich-text-editor"; // icons import { ArrowTopRightOnSquareIcon, ChatBubbleLeftEllipsisIcon } from "@heroicons/react/24/outline"; // ui @@ -105,7 +104,7 @@ const ProfileActivity = () => {

- { editable={false} noBorder customClassName="text-xs border border-custom-border-200 bg-custom-background-100" + /> */} + {/* // TODO: Check these styles */} +
diff --git a/apps/app/pages/[workspaceSlug]/me/profile/index.tsx b/apps/app/pages/[workspaceSlug]/me/profile/index.tsx index c91776f5512..4ea92d49d1a 100644 --- a/apps/app/pages/[workspaceSlug]/me/profile/index.tsx +++ b/apps/app/pages/[workspaceSlug]/me/profile/index.tsx @@ -77,7 +77,7 @@ const Profile: NextPage = () => { await userService .updateUser(payload) .then((res) => { - mutateUser((prevData) => { + mutateUser((prevData: any) => { if (!prevData) return prevData; return { ...prevData, ...res }; @@ -112,7 +112,7 @@ const Profile: NextPage = () => { title: "Success!", message: "Profile picture removed successfully.", }); - mutateUser((prevData) => { + mutateUser((prevData: any) => { if (!prevData) return prevData; return { ...prevData, avatar: "" }; }, false); diff --git a/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx b/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx index aca7c384e06..480451be07a 100644 --- a/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx +++ b/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx @@ -139,7 +139,7 @@ const MembersSettings: NextPage = () => { selectedRemoveMember ); mutateMembers( - (prevData) => prevData?.filter((item: any) => item.id !== selectedRemoveMember), + (prevData: any) => prevData?.filter((item: any) => item.id !== selectedRemoveMember), false ); } @@ -150,7 +150,8 @@ const MembersSettings: NextPage = () => { selectedInviteRemoveMember ); mutateInvitations( - (prevData) => prevData?.filter((item: any) => item.id !== selectedInviteRemoveMember), + (prevData: any) => + prevData?.filter((item: any) => item.id !== selectedInviteRemoveMember), false ); } diff --git a/apps/app/pages/[workspaceSlug]/settings/members.tsx b/apps/app/pages/[workspaceSlug]/settings/members.tsx index 8626d86a027..7c578942366 100644 --- a/apps/app/pages/[workspaceSlug]/settings/members.tsx +++ b/apps/app/pages/[workspaceSlug]/settings/members.tsx @@ -139,14 +139,15 @@ const MembersSettings: NextPage = () => { }); }) .finally(() => { - mutateMembers((prevData) => - prevData?.filter((item) => item.id !== selectedRemoveMember) + mutateMembers((prevData: any) => + prevData?.filter((item: any) => item.id !== selectedRemoveMember) ); }); } if (selectedInviteRemoveMember) { mutateInvitations( - (prevData) => prevData?.filter((item) => item.id !== selectedInviteRemoveMember), + (prevData: any) => + prevData?.filter((item: any) => item.id !== selectedInviteRemoveMember), false ); workspaceService @@ -258,8 +259,8 @@ const MembersSettings: NextPage = () => { if (!workspaceSlug) return; mutateMembers( - (prevData) => - prevData?.map((m) => + (prevData: any) => + prevData?.map((m: any) => m.id === member.id ? { ...m, role: value } : m ), false From 48e6ac4732dc28bf88e4e1899a014c773dc40527 Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Tue, 15 Aug 2023 14:57:47 +0530 Subject: [PATCH 42/42] minor commenting fixes --- apps/app/pages/[workspaceSlug]/me/profile/activity.tsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx b/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx index 600699d4074..fcf30aca02a 100644 --- a/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx +++ b/apps/app/pages/[workspaceSlug]/me/profile/activity.tsx @@ -104,16 +104,6 @@ const ProfileActivity = () => {

- {/* */} {/* // TODO: Check these styles */}