abstracted upload and delete functions

This commit is contained in:
Palanikannan1437 2023-09-19 13:42:54 +05:30
parent e9e6f439b4
commit 8e76809c9b
30 changed files with 271 additions and 196 deletions

4
.gitignore vendored
View File

@ -73,3 +73,7 @@ pnpm-lock.yaml
pnpm-workspace.yaml pnpm-workspace.yaml
.npmrc .npmrc
## packages
dist

View File

@ -27,11 +27,15 @@
"dependencies": { "dependencies": {
"@blueprintjs/popover2": "^2.0.10", "@blueprintjs/popover2": "^2.0.10",
"@tiptap/core": "^2.1.7", "@tiptap/core": "^2.1.7",
"@tiptap/extension-blockquote": "^2.1.10",
"@tiptap/extension-bullet-list": "^2.1.10",
"@tiptap/extension-code-block-lowlight": "^2.0.4", "@tiptap/extension-code-block-lowlight": "^2.0.4",
"@tiptap/extension-highlight": "^2.1.7", "@tiptap/extension-highlight": "^2.1.7",
"@tiptap/extension-horizontal-rule": "^2.1.7", "@tiptap/extension-horizontal-rule": "^2.1.7",
"@tiptap/extension-image": "^2.1.7", "@tiptap/extension-image": "^2.1.7",
"@tiptap/extension-link": "^2.1.7", "@tiptap/extension-link": "^2.1.7",
"@tiptap/extension-list-item": "^2.1.10",
"@tiptap/extension-ordered-list": "^2.1.10",
"@tiptap/extension-placeholder": "2.0.3", "@tiptap/extension-placeholder": "2.0.3",
"@tiptap/extension-table": "^2.1.6", "@tiptap/extension-table": "^2.1.6",
"@tiptap/extension-table-cell": "^2.1.6", "@tiptap/extension-table-cell": "^2.1.6",
@ -43,7 +47,7 @@
"@tiptap/extension-underline": "^2.1.7", "@tiptap/extension-underline": "^2.1.7",
"@tiptap/pm": "^2.1.7", "@tiptap/pm": "^2.1.7",
"@tiptap/react": "^2.1.7", "@tiptap/react": "^2.1.7",
"@tiptap/starter-kit": "^2.1.7", "@tiptap/starter-kit": "^2.1.10",
"@tiptap/suggestion": "^2.1.7", "@tiptap/suggestion": "^2.1.7",
"@types/node": "18.15.3", "@types/node": "18.15.3",
"@types/react": "18.0.28", "@types/react": "18.0.28",

View File

@ -0,0 +1,4 @@
import "@/styles/tailwind.css";
import "@/styles/editor.css";
export { TipTapEditor } from "@/ui/editor";

View File

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@ -0,0 +1 @@
export type DeleteImage = (assetUrlWithWorkspaceId: string) => Promise<any>;

View File

@ -0,0 +1 @@
export type UploadImage = (workspaceSlug: string, formData: FormData) => Promise<string>;

View File

@ -1,10 +1,11 @@
import Image from "@tiptap/extension-image"; import Image from "@tiptap/extension-image";
import TrackImageDeletionPlugin from "../plugins/delete-image"; import TrackImageDeletionPlugin from "@/ui/editor/plugins/delete-image";
import UploadImagesPlugin from "../plugins/upload-image"; import UploadImagesPlugin from "@/ui/editor/plugins/upload-image";
import { DeleteFileFunction } from "@/types/delete-file";
const UpdatedImage = Image.extend({ const UpdatedImage = (deleteImage: DeleteFileFunction) => Image.extend({
addProseMirrorPlugins() { addProseMirrorPlugins() {
return [UploadImagesPlugin(), TrackImageDeletionPlugin()]; return [UploadImagesPlugin(), TrackImageDeletionPlugin(deleteImage)];
}, },
addAttributes() { addAttributes() {
return { return {

View File

@ -10,23 +10,34 @@ import TaskList from "@tiptap/extension-task-list";
import { Markdown } from "tiptap-markdown"; import { Markdown } from "tiptap-markdown";
import Highlight from "@tiptap/extension-highlight"; import Highlight from "@tiptap/extension-highlight";
import CodeBlockLowlight from "@tiptap/extension-code-block-lowlight"; import CodeBlockLowlight from "@tiptap/extension-code-block-lowlight";
import { lowlight } from "lowlight/lib/core";
import { InputRule } from "@tiptap/core"; import { InputRule } from "@tiptap/core";
import Gapcursor from "@tiptap/extension-gapcursor"; import Gapcursor from "@tiptap/extension-gapcursor";
import OrderedList from "@tiptap/extension-ordered-list";
import ListItem from "@tiptap/extension-list-item";
import BulletList from "@tiptap/extension-bullet-list";
import { Table } from "@/ui/editor/extensions/table/table";
import { TableHeader } from "@/ui/editor/extensions/table/table-header";
import { TableRow } from "@tiptap/extension-table-row";
import { CustomTableCell } from "@/ui/editor/extensions/table/table-cell";
import UpdatedImage from "@/ui/editor/extensions/image/updated-image";
import SlashCommand from "@/ui/editor/extensions/slash-command";
import { DeleteFileFunction } from "@/types/delete-file";
import { UploadFileFunction } from "@/types/upload-file";
import isValidHttpUrl from "@/ui/editor/menus/bubble-menu/utils"
import ts from "highlight.js/lib/languages/typescript"; import ts from "highlight.js/lib/languages/typescript";
import { lowlight } from "lowlight/lib/core";
import "highlight.js/styles/github-dark.css"; import "highlight.js/styles/github-dark.css";
import UniqueID from "@tiptap-pro/extension-unique-id";
import { CustomTableCell } from "./table/table-cell";
import { Table } from "./table/table";
import { TableHeader } from "./table/table-header";
import { TableRow } from "@tiptap/extension-table-row";
lowlight.registerLanguage("ts", ts); lowlight.registerLanguage("ts", ts);
export const TiptapExtensions = ( export const TiptapExtensions = (
workspaceSlug: string, workspaceSlug: string,
uploadFile: UploadFileFunction,
deleteFile: DeleteFileFunction,
setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void
) => [ ) => [
StarterKit.configure({ StarterKit.configure({
@ -100,7 +111,7 @@ export const TiptapExtensions = (
"text-custom-primary-300 underline underline-offset-[3px] hover:text-custom-primary-500 transition-colors cursor-pointer", "text-custom-primary-300 underline underline-offset-[3px] hover:text-custom-primary-500 transition-colors cursor-pointer",
}, },
}), }),
UpdatedImage.configure({ UpdatedImage(deleteFile).configure({
HTMLAttributes: { HTMLAttributes: {
class: "rounded-lg border border-custom-border-300", class: "rounded-lg border border-custom-border-300",
}, },
@ -118,10 +129,7 @@ export const TiptapExtensions = (
}, },
includeChildren: true, includeChildren: true,
}), }),
UniqueID.configure({ SlashCommand(workspaceSlug, uploadFile, setIsSubmitting),
types: ["image"],
}),
SlashCommand(workspaceSlug, setIsSubmitting),
TiptapUnderline, TiptapUnderline,
TextStyle, TextStyle,
Color, Color,

View File

@ -17,8 +17,9 @@ import {
ImageIcon, ImageIcon,
Table, Table,
} from "lucide-react"; } from "lucide-react";
import { startImageUpload } from "../plugins/upload-image"; import { startImageUpload } from "@/ui/editor/plugins/upload-image";
import { cn } from "../utils"; import { cn } from "@/lib/utils";
import { UploadImage } from "@/types/upload-file";
interface CommandItemProps { interface CommandItemProps {
title: string; title: string;
@ -59,6 +60,7 @@ const Command = Extension.create({
const getSuggestionItems = const getSuggestionItems =
( (
workspaceSlug: string, workspaceSlug: string,
uploadFile: UploadImage,
setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void
) => ) =>
({ query }: { query: string }) => ({ query }: { query: string }) =>
@ -114,6 +116,7 @@ const getSuggestionItems =
searchTerms: ["unordered", "point"], searchTerms: ["unordered", "point"],
icon: <List size={18} />, icon: <List size={18} />,
command: ({ editor, range }: CommandProps) => { command: ({ editor, range }: CommandProps) => {
// @ts-ignore
editor.chain().focus().deleteRange(range).toggleBulletList().run(); editor.chain().focus().deleteRange(range).toggleBulletList().run();
}, },
}, },
@ -146,6 +149,7 @@ const getSuggestionItems =
searchTerms: ["ordered"], searchTerms: ["ordered"],
icon: <ListOrdered size={18} />, icon: <ListOrdered size={18} />,
command: ({ editor, range }: CommandProps) => { command: ({ editor, range }: CommandProps) => {
// @ts-ignore
editor.chain().focus().deleteRange(range).toggleOrderedList().run(); editor.chain().focus().deleteRange(range).toggleOrderedList().run();
}, },
}, },
@ -155,13 +159,8 @@ const getSuggestionItems =
searchTerms: ["blockquote"], searchTerms: ["blockquote"],
icon: <TextQuote size={18} />, icon: <TextQuote size={18} />,
command: ({ editor, range }: CommandProps) => command: ({ editor, range }: CommandProps) =>
editor // @ts-ignore
.chain() editor.chain().focus().deleteRange(range).toggleNode("paragraph", "paragraph").toggleBlockquote().run(),
.focus()
.deleteRange(range)
.toggleNode("paragraph", "paragraph")
.toggleBlockquote()
.run(),
}, },
{ {
title: "Code", title: "Code",
@ -186,7 +185,7 @@ const getSuggestionItems =
if (input.files?.length) { if (input.files?.length) {
const file = input.files[0]; const file = input.files[0];
const pos = editor.view.state.selection.from; const pos = editor.view.state.selection.from;
startImageUpload(file, editor.view, pos, workspaceSlug, setIsSubmitting); startImageUpload(file, editor.view, pos, workspaceSlug, uploadFile, setIsSubmitting);
} }
}; };
input.click(); input.click();
@ -353,11 +352,12 @@ const renderItems = () => {
export const SlashCommand = ( export const SlashCommand = (
workspaceSlug: string, workspaceSlug: string,
uploadFile: UploadImage,
setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void
) => ) =>
Command.configure({ Command.configure({
suggestion: { suggestion: {
items: getSuggestionItems(workspaceSlug, setIsSubmitting), items: getSuggestionItems(workspaceSlug, uploadFile, setIsSubmitting),
render: renderItems, render: renderItems,
}, },
}); });

View File

@ -1,12 +1,20 @@
"use client"
import * as React from 'react'; import * as React from 'react';
import { useImperativeHandle, useRef, forwardRef } from "react"; import { useImperativeHandle, useRef, forwardRef } from "react";
import { useEditor, EditorContent, Editor } from "@tiptap/react"; import { useEditor, EditorContent, Editor } from "@tiptap/react";
import { useDebouncedCallback } from "use-debounce"; import { useDebouncedCallback } from "use-debounce";
import { TableMenu } from '@/ui/editor/menus/table-menu'; import { TableMenu } from '@/ui/editor/menus/table-menu';
import { TiptapExtensions } from '@/ui/editor/extensions'; import { TiptapExtensions } from '@/ui/editor/extensions';
import { EditorBubbleMenu } from '@/ui/editor/menus/bubble-menu';
import { ImageResizer } from '@/ui/editor/extensions/image/image-resize';
import { TiptapEditorProps } from '@/ui/editor/props';
import { UploadImage } from '@/types/upload-file';
import { DeleteImage } from '@/types/delete-file';
export interface ITipTapRichTextEditor { export interface ITipTapRichTextEditor {
value: string; value: string;
uploadFile: UploadImage;
deleteFile: DeleteImage;
noBorder?: boolean; noBorder?: boolean;
borderOnFocus?: boolean; borderOnFocus?: boolean;
customClassName?: string; customClassName?: string;
@ -30,6 +38,8 @@ const Tiptap = (props: ITipTapRichTextEditor) => {
setShouldShowAlert, setShouldShowAlert,
editorContentCustomClassNames, editorContentCustomClassNames,
value, value,
uploadFile,
deleteFile,
noBorder, noBorder,
workspaceSlug, workspaceSlug,
borderOnFocus, borderOnFocus,
@ -38,9 +48,10 @@ const Tiptap = (props: ITipTapRichTextEditor) => {
const editor = useEditor({ const editor = useEditor({
editable: editable ?? true, editable: editable ?? true,
editorProps: TiptapEditorProps(workspaceSlug, setIsSubmitting), editorProps: TiptapEditorProps(workspaceSlug, uploadFile, setIsSubmitting),
extensions: TiptapExtensions(workspaceSlug, setIsSubmitting), // @ts-ignore
content: value, extensions: TiptapExtensions(workspaceSlug, uploadFile, deleteFile, setIsSubmitting),
content: (typeof value === "string" && value.trim() !== "") ? value : "<p></p>",
onUpdate: async ({ editor }) => { onUpdate: async ({ editor }) => {
// for instant feedback loop // for instant feedback loop
setIsSubmitting?.("submitting"); setIsSubmitting?.("submitting");

View File

@ -4,7 +4,7 @@ import { BoldIcon, ItalicIcon, UnderlineIcon, StrikethroughIcon, CodeIcon } from
import { NodeSelector } from "./node-selector"; import { NodeSelector } from "./node-selector";
import { LinkSelector } from "./link-selector"; import { LinkSelector } from "./link-selector";
import { cn } from "../utils"; import { cn } from "@/lib/utils";
export interface BubbleMenuItem { export interface BubbleMenuItem {
name: string; name: string;

View File

@ -1,8 +1,9 @@
import { cn } from "@/lib/utils";
import { Editor } from "@tiptap/core"; import { Editor } from "@tiptap/core";
import { Check, Trash } from "lucide-react"; import { Check, Trash } from "lucide-react";
import { Dispatch, FC, SetStateAction, useCallback, useEffect, useRef } from "react"; import { Dispatch, FC, SetStateAction, useCallback, useEffect, useRef } from "react";
import { cn } from "../utils"; import isValidHttpUrl from "@/ui/editor/menus/bubble-menu/utils";
import isValidHttpUrl from "./utils/link-validator";
interface LinkSelectorProps { interface LinkSelectorProps {
editor: Editor; editor: Editor;
isOpen: boolean; isOpen: boolean;

View File

@ -1,3 +1,4 @@
import { cn } from "@/lib/utils";
import { Editor } from "@tiptap/core"; import { Editor } from "@tiptap/core";
import { import {
Check, Check,
@ -14,7 +15,6 @@ import {
import { Dispatch, FC, SetStateAction } from "react"; import { Dispatch, FC, SetStateAction } from "react";
import { BubbleMenuItem } from "."; import { BubbleMenuItem } from ".";
import { cn } from "../utils";
interface NodeSelectorProps { interface NodeSelectorProps {
editor: Editor; editor: Editor;

View File

@ -1,5 +1,5 @@
export default function isValidHttpUrl(string: string): boolean { export default function isValidHttpUrl(string: string): boolean {
let url; let url: URL;
try { try {
url = new URL(string); url = new URL(string);

View File

@ -1,11 +1,11 @@
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { Rows, Columns, ToggleRight } from "lucide-react"; import { Rows, Columns, ToggleRight } from "lucide-react";
import { cn } from "../utils";
import { Tooltip } from "components/ui";
import InsertLeftTableIcon from "./InsertLeftTableIcon"; import InsertLeftTableIcon from "./InsertLeftTableIcon";
import InsertRightTableIcon from "./InsertRightTableIcon"; import InsertRightTableIcon from "./InsertRightTableIcon";
import InsertTopTableIcon from "./InsertTopTableIcon"; import InsertTopTableIcon from "./InsertTopTableIcon";
import InsertBottomTableIcon from "./InsertBottomTableIcon"; import InsertBottomTableIcon from "./InsertBottomTableIcon";
import { cn } from "@/lib/utils";
import { Tooltip } from "./tooltip";
interface TableMenuItem { interface TableMenuItem {
command: () => void; command: () => void;

View File

@ -1,6 +1,6 @@
import { EditorState, Plugin, PluginKey, Transaction } from "@tiptap/pm/state"; import { EditorState, Plugin, PluginKey, Transaction } from "@tiptap/pm/state";
import { Node as ProseMirrorNode } from "@tiptap/pm/model"; import { Node as ProseMirrorNode } from "@tiptap/pm/model";
import fileService from "services/file.service"; import { DeleteFileFunction } from "@/types/delete-file";
const deleteKey = new PluginKey("delete-image"); const deleteKey = new PluginKey("delete-image");
const IMAGE_NODE_TYPE = "image"; const IMAGE_NODE_TYPE = "image";
@ -12,7 +12,7 @@ interface ImageNode extends ProseMirrorNode {
}; };
} }
const TrackImageDeletionPlugin = (): Plugin => const TrackImageDeletionPlugin = (deleteImage: DeleteFileFunction): Plugin =>
new Plugin({ new Plugin({
key: deleteKey, key: deleteKey,
appendTransaction: (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => { appendTransaction: (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => {
@ -45,7 +45,7 @@ const TrackImageDeletionPlugin = (): Plugin =>
removedImages.forEach(async (node) => { removedImages.forEach(async (node) => {
const src = node.attrs.src; const src = node.attrs.src;
await onNodeDeleted(src); await onNodeDeleted(src, deleteImage);
}); });
}); });
@ -55,10 +55,10 @@ const TrackImageDeletionPlugin = (): Plugin =>
export default TrackImageDeletionPlugin; export default TrackImageDeletionPlugin;
async function onNodeDeleted(src: string): Promise<void> { async function onNodeDeleted(src: string, deleteImage: DeleteFileFunction): Promise<void> {
try { try {
const assetUrlWithWorkspaceId = new URL(src).pathname.substring(1); const assetUrlWithWorkspaceId = new URL(src).pathname.substring(1);
const resStatus = await fileService.deleteImage(assetUrlWithWorkspaceId); const resStatus = await deleteImage(assetUrlWithWorkspaceId);
if (resStatus === 204) { if (resStatus === 204) {
console.log("Image deleted successfully"); console.log("Image deleted successfully");
} }

View File

@ -1,6 +1,6 @@
import { UploadFileFunction, UploadImage } from "@/types/upload-file";
import { EditorState, Plugin, PluginKey } from "@tiptap/pm/state"; import { EditorState, Plugin, PluginKey } from "@tiptap/pm/state";
import { Decoration, DecorationSet, EditorView } from "@tiptap/pm/view"; import { Decoration, DecorationSet, EditorView } from "@tiptap/pm/view";
import fileService from "services/file.service";
const uploadKey = new PluginKey("upload-image"); const uploadKey = new PluginKey("upload-image");
@ -58,6 +58,7 @@ export async function startImageUpload(
view: EditorView, view: EditorView,
pos: number, pos: number,
workspaceSlug: string, workspaceSlug: string,
uploadFile: UploadImage,
setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void
) { ) {
if (!file.type.includes("image/")) { if (!file.type.includes("image/")) {
@ -86,7 +87,7 @@ export async function startImageUpload(
return; return;
} }
setIsSubmitting?.("submitting"); setIsSubmitting?.("submitting");
const src = await UploadImageHandler(file, workspaceSlug); const src = await UploadImageHandler(file, workspaceSlug, uploadFile);
const { schema } = view.state; const { schema } = view.state;
pos = findPlaceholder(view.state, id); pos = findPlaceholder(view.state, id);
@ -100,7 +101,9 @@ export async function startImageUpload(
view.dispatch(transaction); view.dispatch(transaction);
} }
const UploadImageHandler = (file: File, workspaceSlug: string): Promise<string> => { const UploadImageHandler = (file: File, workspaceSlug: string,
uploadFile: UploadFileFunction
): Promise<string> => {
if (!workspaceSlug) { if (!workspaceSlug) {
return Promise.reject("Workspace slug is missing"); return Promise.reject("Workspace slug is missing");
} }
@ -110,18 +113,26 @@ const UploadImageHandler = (file: File, workspaceSlug: string): Promise<string>
formData.append("attributes", JSON.stringify({})); formData.append("attributes", JSON.stringify({}));
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const imageUrl = await fileService try {
.uploadFile(workspaceSlug, formData) const imageUrl = await uploadFile(workspaceSlug, formData)
.then((response) => response.asset); .then((response: { asset: string }) => response.asset);
const image = new Image(); const image = new Image();
image.src = imageUrl; image.src = imageUrl;
image.onload = () => { image.onload = () => {
resolve(imageUrl); resolve(imageUrl);
}; };
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
}
reject(error);
}
}); });
} catch (error) { } catch (error) {
console.log(error); if (error instanceof Error) {
console.log(error.message);
}
return Promise.reject(error); return Promise.reject(error);
} }
}; };

View File

@ -1,9 +1,11 @@
import { EditorProps } from "@tiptap/pm/view"; import { EditorProps } from "@tiptap/pm/view";
import { findTableAncestor } from "@/ui/editor/menus/table-menu"; import { findTableAncestor } from "@/ui/editor/menus/table-menu";
import { startImageUpload } from "@/ui/editor/plugins/upload-image"; import { startImageUpload } from "@/ui/editor/plugins/upload-image";
import { UploadImage } from "@/types/upload-file";
export function TiptapEditorProps( export function TiptapEditorProps(
workspaceSlug: string, workspaceSlug: string,
uploadFile: UploadImage,
setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void setIsSubmitting?: (isSubmitting: "submitting" | "submitted" | "saved") => void
): EditorProps { ): EditorProps {
return { return {
@ -35,7 +37,7 @@ export function TiptapEditorProps(
event.preventDefault(); event.preventDefault();
const file = event.clipboardData.files[0]; const file = event.clipboardData.files[0];
const pos = view.state.selection.from; const pos = view.state.selection.from;
startImageUpload(file, view, pos, workspaceSlug, setIsSubmitting); startImageUpload(file, view, pos, workspaceSlug, uploadFile, setIsSubmitting);
return true; return true;
} }
return false; return false;
@ -59,7 +61,7 @@ export function TiptapEditorProps(
}); });
// here we deduct 1 from the pos or else the image will create an extra node // here we deduct 1 from the pos or else the image will create an extra node
if (coordinates) { if (coordinates) {
startImageUpload(file, view, coordinates.pos - 1, workspaceSlug, setIsSubmitting); startImageUpload(file, view, coordinates.pos - 1, workspaceSlug, uploadFile, setIsSubmitting);
} }
return true; return true;
} }

View File

@ -1,6 +0,0 @@
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}

View File

@ -2,8 +2,8 @@
"extends": "tsconfig/react.json", "extends": "tsconfig/react.json",
"include": ["."], "include": ["."],
"exclude": ["dist", "build", "node_modules"], "exclude": ["dist", "build", "node_modules"],
"compilerOptions": { "compilerOptions": {
"jsx": "react-jsx",
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@/*": ["src/*"] "@/*": ["src/*"]

View File

@ -2,9 +2,6 @@ import { defineConfig, Options } from "tsup";
export default defineConfig((options: Options) => ({ export default defineConfig((options: Options) => ({
entry: ["src/index.ts"], entry: ["src/index.ts"],
banner: {
js: "'use client'",
},
format: ["cjs", "esm"], format: ["cjs", "esm"],
dts: true, dts: true,
clean: true, clean: true,

View File

@ -14,7 +14,14 @@
"noUnusedParameters": false, "noUnusedParameters": false,
"preserveWatchOutput": true, "preserveWatchOutput": true,
"skipLibCheck": true, "skipLibCheck": true,
"strict": true "strict": true,
}, "paths": {
"exclude": ["node_modules"] "@/*": [
"./*"
]
}
},
"exclude": [
"node_modules"
]
} }

View File

@ -3,9 +3,11 @@
"display": "React Library", "display": "React Library",
"extends": "./base.json", "extends": "./base.json",
"compilerOptions": { "compilerOptions": {
"jsx": "react", "lib": [
"lib": ["ES2015"], "DOM"
],
"module": "ESNext", "module": "ESNext",
"target": "es6" "target": "ES6",
"jsx": "react-jsx"
} }
} }

View File

@ -7,9 +7,10 @@ import useReloadConfirmations from "hooks/use-reload-confirmation";
import { useDebouncedCallback } from "use-debounce"; import { useDebouncedCallback } from "use-debounce";
// components // components
import { TextArea } from "components/ui"; import { TextArea } from "components/ui";
import { TipTapEditor } from "components/tiptap";
// types // types
import { IIssue } from "types"; import { IIssue } from "types";
import { TipTapEditor } from "plane-editor"
import fileService from "services/file.service";
export interface IssueDescriptionFormValues { export interface IssueDescriptionFormValues {
name: string; name: string;
@ -115,8 +116,7 @@ export const IssueDescriptionForm: FC<IssueDetailsProps> = ({
{characterLimit && isAllowed && ( {characterLimit && isAllowed && (
<div className="pointer-events-none absolute bottom-1 right-1 z-[2] rounded bg-custom-background-100 text-custom-text-200 p-0.5 text-xs"> <div className="pointer-events-none absolute bottom-1 right-1 z-[2] rounded bg-custom-background-100 text-custom-text-200 p-0.5 text-xs">
<span <span
className={`${ className={`${watch("name").length === 0 || watch("name").length > 255 ? "text-red-500" : ""
watch("name").length === 0 || watch("name").length > 255 ? "text-red-500" : ""
}`} }`}
> >
{watch("name").length} {watch("name").length}
@ -135,6 +135,8 @@ export const IssueDescriptionForm: FC<IssueDetailsProps> = ({
return ( return (
<TipTapEditor <TipTapEditor
uploadFile={fileService.uploadFile}
deleteFile={fileService.deleteImage}
value={ value={
!value || !value ||
value === "" || value === "" ||
@ -164,8 +166,7 @@ export const IssueDescriptionForm: FC<IssueDetailsProps> = ({
}} }}
/> />
<div <div
className={`absolute right-5 bottom-5 text-xs text-custom-text-200 border border-custom-border-400 rounded-xl w-[6.5rem] py-1 z-10 flex items-center justify-center ${ className={`absolute right-5 bottom-5 text-xs text-custom-text-200 border border-custom-border-400 rounded-xl w-[6.5rem] py-1 z-10 flex items-center justify-center ${isSubmitting === "saved" ? "fadeOut" : "fadeIn"
isSubmitting === "saved" ? "fadeOut" : "fadeIn"
}`} }`}
> >
{isSubmitting === "submitting" ? "Saving..." : "Saved"} {isSubmitting === "submitting" ? "Saving..." : "Saved"}

View File

@ -43,7 +43,7 @@ const Tiptap = (props: ITipTapRichTextEditor) => {
editable: editable ?? true, editable: editable ?? true,
editorProps: TiptapEditorProps(workspaceSlug, setIsSubmitting), editorProps: TiptapEditorProps(workspaceSlug, setIsSubmitting),
extensions: TiptapExtensions(workspaceSlug, setIsSubmitting), extensions: TiptapExtensions(workspaceSlug, setIsSubmitting),
content: value, content: (typeof value === "string" && value.trim() !== "") ? value : "<p></p>",
onUpdate: async ({ editor }) => { onUpdate: async ({ editor }) => {
// for instant feedback loop // for instant feedback loop
setIsSubmitting?.("submitting"); setIsSubmitting?.("submitting");

View File

@ -80,7 +80,8 @@
"tiptap-markdown": "^0.8.2", "tiptap-markdown": "^0.8.2",
"tlds": "^1.238.0", "tlds": "^1.238.0",
"use-debounce": "^9.0.4", "use-debounce": "^9.0.4",
"uuid": "^9.0.0" "uuid": "^9.0.0",
"plane-editor": "*"
}, },
"devDependencies": { "devDependencies": {
"@types/js-cookie": "^3.0.2", "@types/js-cookie": "^3.0.2",

View File

@ -29,6 +29,8 @@ interface UnSplashImageUrls {
class FileServices extends APIService { class FileServices extends APIService {
constructor() { constructor() {
super(API_BASE_URL); super(API_BASE_URL);
this.uploadFile = this.uploadFile.bind(this);
this.deleteImage = this.deleteImage.bind(this);
} }
async uploadFile(workspaceSlug: string, file: FormData): Promise<any> { async uploadFile(workspaceSlug: string, file: FormData): Promise<any> {

246
yarn.lock
View File

@ -2328,6 +2328,16 @@
dependencies: dependencies:
tslib "^2.4.0" tslib "^2.4.0"
"@tailwindcss/typography@^0.5.10":
version "0.5.10"
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a"
integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==
dependencies:
lodash.castarray "^4.4.0"
lodash.isplainobject "^4.0.6"
lodash.merge "^4.6.2"
postcss-selector-parser "6.0.10"
"@tailwindcss/typography@^0.5.9": "@tailwindcss/typography@^0.5.9":
version "0.5.9" version "0.5.9"
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.9.tgz#027e4b0674929daaf7c921c900beee80dbad93e8" resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.9.tgz#027e4b0674929daaf7c921c900beee80dbad93e8"
@ -2345,36 +2355,36 @@
dependencies: dependencies:
uuid "^8.3.2" uuid "^8.3.2"
"@tiptap/core@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.1.10.tgz#6d8f3c777f1700dcc6c903b1185576754175e366"
integrity sha512-yhUKsac6nlqbPQfwQnp+4Jb110EqmzocXKoZacLwzHpM7JVsr2+LXMDu9kahtrvHNJErJljhnQvDHRsrrYeJkQ==
"@tiptap/core@^2.1.7": "@tiptap/core@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.1.7.tgz#9823a3712d176849cfd281dd8229ad0719c9eb9e" resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.1.7.tgz#9823a3712d176849cfd281dd8229ad0719c9eb9e"
integrity sha512-1pqTwlTnwTKQSNQmmTWhs2lwdvd+hFFNFZnrRAfvZhQZA6qPmPmKMNTcYmK38Tn4axKth6mhBamzTJgMZFI7ng== integrity sha512-1pqTwlTnwTKQSNQmmTWhs2lwdvd+hFFNFZnrRAfvZhQZA6qPmPmKMNTcYmK38Tn4axKth6mhBamzTJgMZFI7ng==
"@tiptap/core@^2.1.8": "@tiptap/extension-blockquote@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.1.8.tgz#4555dc7d86580dee790d4aded1ce7fb79319da70" resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.1.10.tgz#dc475bef70dd460fc730a14b3b4cc18f37cd1b2d"
integrity sha512-QTGgqki7hkonLJ93gWqCUkD6cCAQ3rEX9gbMLwzfnegIZ+/BKLQYKYCozsEMZnMPXgdRrKuyRBOL+RH+IolMeA== integrity sha512-lpBF/a+qgv4Bdf7HYisTkMFdFdGfn2SqspsydvG8UI7N9B/PfnCCrtoMaC3bqTaT6u8ZVxyM3Y3vnq2AxXJvBw==
"@tiptap/extension-blockquote@^2.1.7": "@tiptap/extension-blockquote@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.1.7.tgz#fe25ec1dedd1f7e3eb1a851a6ac8738ca4691a17" resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.1.7.tgz#fe25ec1dedd1f7e3eb1a851a6ac8738ca4691a17"
integrity sha512-oAsUU1c0DDZKHwK7/uCtYpnTUQt0o3w+SsJSv4S2vlSHidiFl9gCQGozUQ/Alzc7GO1Y95rOscL28DJXgXESQg== integrity sha512-oAsUU1c0DDZKHwK7/uCtYpnTUQt0o3w+SsJSv4S2vlSHidiFl9gCQGozUQ/Alzc7GO1Y95rOscL28DJXgXESQg==
"@tiptap/extension-blockquote@^2.1.8": "@tiptap/extension-bold@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.1.8.tgz#eb3f70d03807b2d51645cf5450a1e84ccb53633b" resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.1.10.tgz#fb71c2575087d3d2a9c6d214b3c1587da931cc61"
integrity sha512-NhTE90ZDb/BbtkgeNjwLYPYMryAfCXCM+Zpk8AMsVODZ+bDy+lsqpnDw7uRxUK3guLMnqKgSe2eTaXqx7AKE+A== integrity sha512-I43WCwc7pyz5vtKGj24Rjv7HN0EK5S4PlADQPBuhC1qQvfCTFvjrBB6ZmsekUMGmllW0qMOFVLSjtffpckqshA==
"@tiptap/extension-bold@^2.1.7": "@tiptap/extension-bold@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.1.7.tgz#c5d89284235d75c2e65745b50a5c0681be1cbab6" resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.1.7.tgz#c5d89284235d75c2e65745b50a5c0681be1cbab6"
integrity sha512-GZV2D91WENkWd1W29vM4kyGWObcxOKQrY8MuCvTdxni1kobEc/LPZzQ1XiQmiNTvXTMcBz5ckLpezdjASV1dNg== integrity sha512-GZV2D91WENkWd1W29vM4kyGWObcxOKQrY8MuCvTdxni1kobEc/LPZzQ1XiQmiNTvXTMcBz5ckLpezdjASV1dNg==
"@tiptap/extension-bold@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.1.8.tgz#2047345c814cad672d150b303436928d46aecbc1"
integrity sha512-rDdmir78a0JTiV+vrycGh3yS1ZzRF1bRvBt4jr7Rne0LOl03kc7Wm936ommiL3McWUpZZV37ZpCm5JfE8rQb+w==
"@tiptap/extension-bubble-menu@^2.1.7": "@tiptap/extension-bubble-menu@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.1.7.tgz#62616c9ee456c8413ad6c120757978266052a1a0" resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.1.7.tgz#62616c9ee456c8413ad6c120757978266052a1a0"
@ -2389,66 +2399,66 @@
dependencies: dependencies:
tippy.js "^6.3.7" tippy.js "^6.3.7"
"@tiptap/extension-bullet-list@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.10.tgz#e7d7fb578502da6c6208a4daa3e2fe4249ae6280"
integrity sha512-e6aFr29OSOmXsjFZB2zt3p8aeCWOx0C9Ayrpdf4QBUCOUJtt6FQPxxiYc+XZcdrYbLGLznA7QJlulCK9SGv2Fw==
"@tiptap/extension-bullet-list@^2.1.7": "@tiptap/extension-bullet-list@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.7.tgz#3a7356824a931122314a6bd73b5f9d8a8a313791" resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.7.tgz#3a7356824a931122314a6bd73b5f9d8a8a313791"
integrity sha512-BReix1wkGNH12DSWGnWPKNu4do92Avh98aLkRS1o1V1Y49/+YGMYtfBXB9obq40o0WqKvk4MoM+rhKbfEc44Gg== integrity sha512-BReix1wkGNH12DSWGnWPKNu4do92Avh98aLkRS1o1V1Y49/+YGMYtfBXB9obq40o0WqKvk4MoM+rhKbfEc44Gg==
"@tiptap/extension-bullet-list@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.8.tgz#d9d4ee46d1adb2b70d3b8c19540ebcdd8a1eaaec"
integrity sha512-VWj3XZMwJQVb7e4ZM0N+o6o+905lyMMS4C35yw/sxN5CDw4TJpQMSPSAmBVNtK469XUdlGOxeLc/+Q00aU+S8A==
"@tiptap/extension-code-block-lowlight@^2.0.4": "@tiptap/extension-code-block-lowlight@^2.0.4":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.1.7.tgz#713dad4324c9ce25c66768fc4cfdb514ecea21c7" resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.1.7.tgz#713dad4324c9ce25c66768fc4cfdb514ecea21c7"
integrity sha512-GOmpe3bwjlhMC79vFICInkJwaHx5dTiKQCTzdjZ5qRsvKgk/0YTrmWaN+w+JW5BBUaChj8IrgAPy7VZ20l7GKQ== integrity sha512-GOmpe3bwjlhMC79vFICInkJwaHx5dTiKQCTzdjZ5qRsvKgk/0YTrmWaN+w+JW5BBUaChj8IrgAPy7VZ20l7GKQ==
"@tiptap/extension-code-block@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.1.10.tgz#a125a12f716728b271a130178c6fc60237ed46f5"
integrity sha512-M+s89V9mP3tOoS6p/X2Dzw/Z7Fcg9EF0ZXlsMNifdlpwJlhAIYxI7vjPBmkMAFXTDB5eMZblXyNQaZ7v6V2Yeg==
"@tiptap/extension-code-block@^2.1.7": "@tiptap/extension-code-block@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.1.7.tgz#c087c22c305f3c87645228ad32f32595dde7f2a2" resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.1.7.tgz#c087c22c305f3c87645228ad32f32595dde7f2a2"
integrity sha512-uiasfWCIQuk34vGoIENqAJOHf9m3hAkcELnb9T6+uNxA3O7PUZQqBVN/27oEipj7j15pqua50D6C1jql9kFe0g== integrity sha512-uiasfWCIQuk34vGoIENqAJOHf9m3hAkcELnb9T6+uNxA3O7PUZQqBVN/27oEipj7j15pqua50D6C1jql9kFe0g==
"@tiptap/extension-code-block@^2.1.8": "@tiptap/extension-code@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.1.8.tgz#d2dccf64a583bfb12e2ebd04b3724b7e9430549d" resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.1.10.tgz#704798f90a32d6166ce96dc65ef4a541f424f895"
integrity sha512-EjegLBBz8ATvIuJlqosGrcOsKNu8YveI8rogGfUmnXWMNcPSSqBDoWK2EpLTUzGccPWRxo7yBsr5wItikfPPYA== integrity sha512-1yy/kR0FAeMkDdAt1LW/FH6vlyZLqLZqY6BM+wBCiGrr+XeA5FTXih9iT/4gbTRuIzG0EPqx18nvroG7hUsWBg==
"@tiptap/extension-code@^2.1.7": "@tiptap/extension-code@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.1.7.tgz#bad3b1aedc23123a2094f8810801edb0c13acbff" resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.1.7.tgz#bad3b1aedc23123a2094f8810801edb0c13acbff"
integrity sha512-g0IA6Q6DFZE0AEOMXAV1mktl/XzIO3s1h/haPIKZ8GNes522qhBr9FYc5OUPQCCbgYjL7soTGzxA/W5Jk3f2AQ== integrity sha512-g0IA6Q6DFZE0AEOMXAV1mktl/XzIO3s1h/haPIKZ8GNes522qhBr9FYc5OUPQCCbgYjL7soTGzxA/W5Jk3f2AQ==
"@tiptap/extension-code@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.1.8.tgz#c3dccd1a12972cab8d0c98f75a3960bab64905bd"
integrity sha512-dQL8aUYzSEkES5P4sBYZ6SiCMnFK1cUKKGruaRV1TJyFu/ClZ8Y+BKS2GCCMcyH0tKjqsibYsNFBWz9/Q5gjEg==
"@tiptap/extension-color@^2.0.4": "@tiptap/extension-color@^2.0.4":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.1.7.tgz#7f436aed2f41087d8de6af6a4dd4cb7d964354dd" resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.1.7.tgz#7f436aed2f41087d8de6af6a4dd4cb7d964354dd"
integrity sha512-NLspH5taSpZP60rXJjDKu8AP9VDd+dlqz4guxvijtuPEePw87Fzidxx9w6X0uYQfx1O0xdPFq3UodlDz591scA== integrity sha512-NLspH5taSpZP60rXJjDKu8AP9VDd+dlqz4guxvijtuPEePw87Fzidxx9w6X0uYQfx1O0xdPFq3UodlDz591scA==
"@tiptap/extension-document@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.1.10.tgz#6d2ab2301c86139d711fa460a311aa2c8bb343f8"
integrity sha512-jNlNGQIGg471DvzhADaEoRINa3LNghowrBbKK9d5wGVnbKRykNEPwjCf8zNl+m5NBmCZl3lsdznlwBk5zyh5Bg==
"@tiptap/extension-document@^2.1.7": "@tiptap/extension-document@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.1.7.tgz#5e1d56e899fdca8ebfad1b7cb358d5ace664b851" resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.1.7.tgz#5e1d56e899fdca8ebfad1b7cb358d5ace664b851"
integrity sha512-tZyoPPmvzti7PEnyulXomEtINd/Oi2S84uOt6gw7DTCnDq5bF5sn1IfN8Icqp9t4jDwyLXy2TL0Zg/sR0a2Ibg== integrity sha512-tZyoPPmvzti7PEnyulXomEtINd/Oi2S84uOt6gw7DTCnDq5bF5sn1IfN8Icqp9t4jDwyLXy2TL0Zg/sR0a2Ibg==
"@tiptap/extension-document@^2.1.8": "@tiptap/extension-dropcursor@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.1.8.tgz#fa4dce27fd5d25b54f7e7e9a93db69606a624b96" resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.10.tgz#490c9aa82656592c9820c55214381fb9bfea92f2"
integrity sha512-mLPZqd5QUv3FKo+5zOaf7dGqZPci7Myr92U1Y6Vw0V+hCRC9Emm3I/xssQYGsWXmXQuyNJ5WRlpXgag3Ae+CkA== integrity sha512-GhsWsCq6wLb8HJ32BeAm7ndv4lPyu1F7FFwmnARzEF5q54FV20kWSv2zC+Dv0dTvynXR3quXybdUM92xeNDovw==
"@tiptap/extension-dropcursor@^2.1.7": "@tiptap/extension-dropcursor@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.7.tgz#a3f79b7453579f36f326852b16e421601e881a28" resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.7.tgz#a3f79b7453579f36f326852b16e421601e881a28"
integrity sha512-hNk2BuLnNSXlGOQphlzdpFKCKo7uHUFjWuBfzF1S9FMAQgcN7eTia+cCClmXABYfVLW4fT14PC1KiuGjxi9MuA== integrity sha512-hNk2BuLnNSXlGOQphlzdpFKCKo7uHUFjWuBfzF1S9FMAQgcN7eTia+cCClmXABYfVLW4fT14PC1KiuGjxi9MuA==
"@tiptap/extension-dropcursor@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.8.tgz#f7128aebe9e2bb05cd6508d782deaf436ae3c46e"
integrity sha512-KilbUHApYya2Q6brq5qW+B+pPkb6lvgnjRfuFuv6doM/v+lfEdozUE1Ma8C19UXtzl7BmPDut9HRMDL17Pqwyg==
"@tiptap/extension-floating-menu@^2.1.7": "@tiptap/extension-floating-menu@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.1.7.tgz#fe2def740b3136d38101634ae60d2fec5468c57e" resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.1.7.tgz#fe2def740b3136d38101634ae60d2fec5468c57e"
@ -2463,36 +2473,36 @@
dependencies: dependencies:
tippy.js "^6.3.7" tippy.js "^6.3.7"
"@tiptap/extension-gapcursor@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.10.tgz#712853ce82642108e50a37014d585ff72af6758d"
integrity sha512-WSBT9X7dzg0HyMoMP/Yyxl28QwIJO90YzobI9z5mav86BQv7C5wU0fQSpbpAbsN3s7lxKhPwNrXkwkpnXT4ZCA==
"@tiptap/extension-gapcursor@^2.1.7": "@tiptap/extension-gapcursor@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.7.tgz#5c0303ba37b4c066f3a3c5835fd0b298f0d3e919" resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.7.tgz#5c0303ba37b4c066f3a3c5835fd0b298f0d3e919"
integrity sha512-7eoInzzk1sssoD3RMkwFC86U15Ja4ANve+8wIC+xhN4R3Oe3PY3lFbp1GQxCmaJj8b3rtjNKIQZ2zO0PH58afA== integrity sha512-7eoInzzk1sssoD3RMkwFC86U15Ja4ANve+8wIC+xhN4R3Oe3PY3lFbp1GQxCmaJj8b3rtjNKIQZ2zO0PH58afA==
"@tiptap/extension-gapcursor@^2.1.8": "@tiptap/extension-hard-break@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.8.tgz#bc7e745fdc8990a8e370c4c728ab8733ba0910c4" resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.1.10.tgz#e885e83d936b45891bf4dc40c713d042f84eb8c4"
integrity sha512-0EQgV/kF2dg2dOpw0fTbwwNaubwS8QNhEPPbnXQP8xqZpupuia+DKKgC+ttzbE9XhS4Sv1fGib52Sr7MMIduhA== integrity sha512-sYrzpPoV5jQri+duGb50nDTs+hOBQDxXTKlJuZNFfZMwgx6epwxb8xICcGAUJFShuuW8UAWCNcB4jG9tMqgvyw==
"@tiptap/extension-hard-break@^2.1.7": "@tiptap/extension-hard-break@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.1.7.tgz#1cd783adfe2788d41614f8851b8d7a52ec027cce" resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.1.7.tgz#1cd783adfe2788d41614f8851b8d7a52ec027cce"
integrity sha512-6gFXXlCGAdXjy27BW29q4yfCQPAEFd18k7zRTnbd4aE/zIWUtLqdiTfI3kotUMab9Tt9/z1BRmCbEUxRsf1Nww== integrity sha512-6gFXXlCGAdXjy27BW29q4yfCQPAEFd18k7zRTnbd4aE/zIWUtLqdiTfI3kotUMab9Tt9/z1BRmCbEUxRsf1Nww==
"@tiptap/extension-hard-break@^2.1.8": "@tiptap/extension-heading@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.1.8.tgz#b898c3c9c7f96726307bd51b24f557731e25d12e" resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.1.10.tgz#1b32726551466c29987861181966e5675417b28c"
integrity sha512-K86FTizvZu7779Gz2XigW1IxAjZXduyZ7w0ipwe+5QBa/Lh6Vfl9wa8TgV1lFAkC2VATsAa3aa36llMIDBgeew== integrity sha512-1OgmrRPMcY52WI7I4799xd4eIsEX/bI813B8mZvNYXLzZI75pLW1hmz1mUvBYyMwlcek74zVTGYgPy11o+2JEg==
"@tiptap/extension-heading@^2.1.7": "@tiptap/extension-heading@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.1.7.tgz#26d16227eab95b1f381e977f7aa1685f493c6fb5" resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.1.7.tgz#26d16227eab95b1f381e977f7aa1685f493c6fb5"
integrity sha512-jMeTqtq3kbMFtMvUb3SeIt4FFM3W+b6TAw5H4Qd6z3gYsAU3GahRK67MtbJfPmznUkZfimrqW9VCaBezScfrsQ== integrity sha512-jMeTqtq3kbMFtMvUb3SeIt4FFM3W+b6TAw5H4Qd6z3gYsAU3GahRK67MtbJfPmznUkZfimrqW9VCaBezScfrsQ==
"@tiptap/extension-heading@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.1.8.tgz#d34db2bdfca559567ecb6f741fa4eb5d4d54a897"
integrity sha512-6PHWzhGPC/QjfswlflU1Cy2UYZiyzwa639bWW7Dl4BHZgK+e09lbc7RwzPrrex6+jA10K4nlww19xsI590ogBw==
"@tiptap/extension-highlight@^2.0.4": "@tiptap/extension-highlight@^2.0.4":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.1.7.tgz#0f9434eedfdcb95a22ca5b6f601d13f4343a7e5c" resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.1.7.tgz#0f9434eedfdcb95a22ca5b6f601d13f4343a7e5c"
@ -2503,25 +2513,25 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.1.8.tgz#b2d2d995344e06dd36cd8a395a72113b87981bd7" resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.1.8.tgz#b2d2d995344e06dd36cd8a395a72113b87981bd7"
integrity sha512-OCXtFWCbwsgOHq7IP4Qr02EfjwYeRRcuL1ipv0LojGtMcvnkw7OLhQZ8oocrqi4/6QCOtPLSGlcqrQ6pmN7jww== integrity sha512-OCXtFWCbwsgOHq7IP4Qr02EfjwYeRRcuL1ipv0LojGtMcvnkw7OLhQZ8oocrqi4/6QCOtPLSGlcqrQ6pmN7jww==
"@tiptap/extension-history@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.1.10.tgz#efa60d657a76818361a3af14769660672d4bc227"
integrity sha512-tApuN8MIJMzc0dxvkYJPt3t5cea9NuZBGNiuVedJwMMUF6hbFpMZAt20GW2qwjBaZ76rQwbLp1s3KnImFsPe5A==
"@tiptap/extension-history@^2.1.7": "@tiptap/extension-history@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.1.7.tgz#baa566875ef1278c5dd8821970362d85348b266c" resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.1.7.tgz#baa566875ef1278c5dd8821970362d85348b266c"
integrity sha512-8SIEKSImrIkqJThym1bPD13sC4/76UrG+piQ30xKQU4B7zUFCbutvrwYuQHSRvaEt8BPdTv2LWIK+wBkIgbWVA== integrity sha512-8SIEKSImrIkqJThym1bPD13sC4/76UrG+piQ30xKQU4B7zUFCbutvrwYuQHSRvaEt8BPdTv2LWIK+wBkIgbWVA==
"@tiptap/extension-history@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.1.8.tgz#68a65b51effc1d612e3862928c3ccede3ce83592"
integrity sha512-Cyq4YsmosfgHGlaf2wiiU8VaLweUMG8LHuhZ5A2RAoriy3G09Bqgn6eqLmho8KoU1VgvffXTVBaYKxz9gVgu3w==
"@tiptap/extension-horizontal-rule@^2.0.4", "@tiptap/extension-horizontal-rule@^2.1.7": "@tiptap/extension-horizontal-rule@^2.0.4", "@tiptap/extension-horizontal-rule@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.7.tgz#7c21bc4917e4ced9382e81626e0f0068b224bfbb" resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.7.tgz#7c21bc4917e4ced9382e81626e0f0068b224bfbb"
integrity sha512-hJupsDxDVmjmKI/Ewl/gtiyUx52Y3wRUhT8dCXNOA5eldmPXN23E2Fa2BC8XB47dyc5pubyNcLuqaLeaZ5hedw== integrity sha512-hJupsDxDVmjmKI/Ewl/gtiyUx52Y3wRUhT8dCXNOA5eldmPXN23E2Fa2BC8XB47dyc5pubyNcLuqaLeaZ5hedw==
"@tiptap/extension-horizontal-rule@^2.1.8": "@tiptap/extension-horizontal-rule@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.8.tgz#db23468176fd5359240feb8601fd3fcf747d5e6d" resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.10.tgz#cfdb67530be100054fc8511942d4ec3534acf828"
integrity sha512-qUNz8p/p3gth0ueYFkmMdVRcRVmtCwQGJsHWwbx23XrF/a7AJ0FSdiW0sk8YD6Dbw+i1cB3cnRyO+qq9XuWdqw== integrity sha512-91lGpK2d6WMPhrMDPBURS8z8pEg1CUBYy7GmBenKvvgh+JzVhG+U6MtykfWNfm2R4iRXOl1xLbyUOCiOSUXodQ==
"@tiptap/extension-image@^2.0.4": "@tiptap/extension-image@^2.0.4":
version "2.1.7" version "2.1.7"
@ -2533,16 +2543,16 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.1.8.tgz#99d78ad1d8c6f513f945beae7de352759f30189f" resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.1.8.tgz#99d78ad1d8c6f513f945beae7de352759f30189f"
integrity sha512-o+vUIYLvYcJHftIMoIukzZZ+fTTfC/gXXvQIYz51p3f1qeYXszD11FbtkaJCgXYj8BcGCO7QuzcCdQg+wyROZw== integrity sha512-o+vUIYLvYcJHftIMoIukzZZ+fTTfC/gXXvQIYz51p3f1qeYXszD11FbtkaJCgXYj8BcGCO7QuzcCdQg+wyROZw==
"@tiptap/extension-italic@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.1.10.tgz#7183119c8c61beb2ac635ca3c2066624530b4a56"
integrity sha512-ebw5m+rWx6K5UoBVXSkz3fpvDJh/wScfYmwl6pkbjc2jNbZiln2LSiLHYc2eIYJ2aTsVxcw/n0Azfk5Lb19InA==
"@tiptap/extension-italic@^2.1.7": "@tiptap/extension-italic@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.1.7.tgz#d077683597d4282ae272c48b313d768d71985b67" resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.1.7.tgz#d077683597d4282ae272c48b313d768d71985b67"
integrity sha512-7e37f+OFqisdY19nWIthbSNHMJy4+4dec06rUICPrkiuFaADj5HjUQr0dyWpL/LkZh92Wf/rWgp4V/lEwon3jA== integrity sha512-7e37f+OFqisdY19nWIthbSNHMJy4+4dec06rUICPrkiuFaADj5HjUQr0dyWpL/LkZh92Wf/rWgp4V/lEwon3jA==
"@tiptap/extension-italic@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.1.8.tgz#b559c8d6b387e292e047985acd0def48a80a7aa0"
integrity sha512-cR6kSoMraA/dCdwmus8A09WAwpxiZiGG+B0OqsludGF+MdZLilhoGyXDbTeO3aKoKccfqxZGk1YKK13C/gRM1Q==
"@tiptap/extension-link@^2.0.4": "@tiptap/extension-link@^2.0.4":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.1.7.tgz#2705c212d105ccf411d505e334ece4a723971ee4" resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.1.7.tgz#2705c212d105ccf411d505e334ece4a723971ee4"
@ -2557,36 +2567,36 @@
dependencies: dependencies:
linkifyjs "^4.1.0" linkifyjs "^4.1.0"
"@tiptap/extension-list-item@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.1.10.tgz#0615e4fb68161e6457e6041e195f454bfd537d44"
integrity sha512-rRRyB14vOcSjTMAh8Y+50TRC/jO469CelGwFjOLrK1ZSEag5wmLDaqpWOOb52BFYnvCHuIm1HqZtdL5bTI/J1w==
"@tiptap/extension-list-item@^2.1.7": "@tiptap/extension-list-item@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.1.7.tgz#dc24045e445d0f91baec9b113f711dc90c6682ac" resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.1.7.tgz#dc24045e445d0f91baec9b113f711dc90c6682ac"
integrity sha512-hd/E4qQopBXWa6kdFY19qFVgqj4fzdPgAnzdXJ2XW7bC6O2CusmHphRRZ5FBsuspYTN/6/fv0i0jK9rSGlsEyA== integrity sha512-hd/E4qQopBXWa6kdFY19qFVgqj4fzdPgAnzdXJ2XW7bC6O2CusmHphRRZ5FBsuspYTN/6/fv0i0jK9rSGlsEyA==
"@tiptap/extension-list-item@^2.1.8": "@tiptap/extension-ordered-list@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.1.8.tgz#b5dc1e04bfb96ca10a0821821ade5014fa188dbb" resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.10.tgz#ef5d5ba68baf86e9b66c1b2c1cec458aa111ad44"
integrity sha512-fiYVRhHvcXMcVuuiXBx/0AFWwGoKzs9784VSuVUeSSzSuH6vOchM1kZCH+v6acs7vltFKNDrluyEiwGIz1b8qA== integrity sha512-jouo3RHUMxU4dPzZcfZdUzmsLVp1KHrLIAD2YAxBuqArACrBNfJpIhtkTKuGLlaFhKqGr+EmNdNQnK8JOBhLtQ==
"@tiptap/extension-ordered-list@^2.1.7": "@tiptap/extension-ordered-list@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.7.tgz#72d9ddc432ecf0fd19c8acd3c6b44f5358d8e0d0" resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.7.tgz#72d9ddc432ecf0fd19c8acd3c6b44f5358d8e0d0"
integrity sha512-3XIXqbZmYkNzF+8PQ2jcCOCj0lpC3y9HGM/+joPIunhiUiktrIgpbUDv2E1Gq5lJHYqthIeujniI2dB85tkwJQ== integrity sha512-3XIXqbZmYkNzF+8PQ2jcCOCj0lpC3y9HGM/+joPIunhiUiktrIgpbUDv2E1Gq5lJHYqthIeujniI2dB85tkwJQ==
"@tiptap/extension-ordered-list@^2.1.8": "@tiptap/extension-paragraph@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.8.tgz#f489ac85ccd93ad811318bed6af7906c035ba313" resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.1.10.tgz#ee1238d2d6e9460b2a929b05a5fd43cfb58a6017"
integrity sha512-qTVSWTlSjFNRwPNmWmfe9TsW9XL3LQCNJsfaBxtVZfhDN9rhoIZ6rPTBO7f2TTiPK1+uyLTvK+znWYvU9RtD5A== integrity sha512-kzuHbrxcxpWkha5P+JFzCKT54pNqb4IBKMU5qT9YGhZSdNTtU63ncdCHM+Ad1ukLuvXAv95zh1IQC5j+Z1Qk4A==
"@tiptap/extension-paragraph@^2.1.7": "@tiptap/extension-paragraph@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.1.7.tgz#76408706f0037a510a384b86780bd50c6e8ffeea" resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.1.7.tgz#76408706f0037a510a384b86780bd50c6e8ffeea"
integrity sha512-cLqX27hNrXrwZCKrIW8OC3rW2+MT8hhS37+cdqOxZo5hUqQ9EF/puwS0w8uUZ7B3awX9Jm1QZDMjjERLkcmobw== integrity sha512-cLqX27hNrXrwZCKrIW8OC3rW2+MT8hhS37+cdqOxZo5hUqQ9EF/puwS0w8uUZ7B3awX9Jm1QZDMjjERLkcmobw==
"@tiptap/extension-paragraph@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.1.8.tgz#f337c3f84cbfddd1ea16860e934f2049c46211ce"
integrity sha512-ZuwvwKaG5GeoYRgeh96PToLk2TjxsLiZKnLN6rkUCsW6aLoseK7/8/7vm3dP2N9dAUN35ESw0/pRk2Q/VK1/+g==
"@tiptap/extension-placeholder@2.0.3": "@tiptap/extension-placeholder@2.0.3":
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.0.3.tgz#69575353f09fc7524c9cdbfbf16c04f73c29d154" resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.0.3.tgz#69575353f09fc7524c9cdbfbf16c04f73c29d154"
@ -2597,16 +2607,16 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.1.7.tgz#8477cf5116c89f0f75e8e2e3b8528e146a7f0f24" resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.1.7.tgz#8477cf5116c89f0f75e8e2e3b8528e146a7f0f24"
integrity sha512-IiBoItYYNS7hb/zmPitw3w6Cylmp9qX+zW+QKe3lDkCNPeKxyQr86AnVLcQYOuXg62cLV9dp+4azZzHoz9SOcg== integrity sha512-IiBoItYYNS7hb/zmPitw3w6Cylmp9qX+zW+QKe3lDkCNPeKxyQr86AnVLcQYOuXg62cLV9dp+4azZzHoz9SOcg==
"@tiptap/extension-strike@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.1.10.tgz#ec311395d16af15345b63d2dac2d459b9ad5fa9e"
integrity sha512-KW63lZLPFIir5AIeh2I7UK6Tx1O3jetD7JIPUzEqp1I1BfJlHGHVQxV8VXAmJl0hTOzjQBsHW42PmBxSC97NUg==
"@tiptap/extension-strike@^2.1.7": "@tiptap/extension-strike@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.1.7.tgz#b7b7f49254f1de22416b1415ca88a2a20edd0627" resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.1.7.tgz#b7b7f49254f1de22416b1415ca88a2a20edd0627"
integrity sha512-ONLXYnuZGM2EoGcxkyvJSDMBeAp7K6l83UXkK9TSj+VpEEDdeV7m8mJs8/vACJjJxD5HMN61+EPgU7VTEukQCA== integrity sha512-ONLXYnuZGM2EoGcxkyvJSDMBeAp7K6l83UXkK9TSj+VpEEDdeV7m8mJs8/vACJjJxD5HMN61+EPgU7VTEukQCA==
"@tiptap/extension-strike@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.1.8.tgz#ba6966a9afb9493d8bd30d4c617ffe6966b90379"
integrity sha512-JGPiGudEZAKTiOirua9gtDG+HILHEx4CGODW5PDBMA1xYDfyo7ZJk5xgfJWZ1SOo7YviF26HSY4KKV9ThINq2Q==
"@tiptap/extension-table-cell@^2.1.6": "@tiptap/extension-table-cell@^2.1.6":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.1.7.tgz#87841144b8368c9611ad46f2134b637e2c33c8bc" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.1.7.tgz#87841144b8368c9611ad46f2134b637e2c33c8bc"
@ -2657,16 +2667,16 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.1.8.tgz#42e9fa179f76d4e88f73f2c66aee3b06162e659b" resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.1.8.tgz#42e9fa179f76d4e88f73f2c66aee3b06162e659b"
integrity sha512-xnx/Pq5ttt2/gOQPmqVQIBz/jo3MErtYdYk22fUaOyu1xT36X4BDJYsrLyWhcs3aWR/tv1/XylbNOFvhrDOHoQ== integrity sha512-xnx/Pq5ttt2/gOQPmqVQIBz/jo3MErtYdYk22fUaOyu1xT36X4BDJYsrLyWhcs3aWR/tv1/XylbNOFvhrDOHoQ==
"@tiptap/extension-text@^2.1.10":
version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.1.10.tgz#db297fb5d2ee50ef7a14650539e3d335f772f755"
integrity sha512-ubU/WQwNB0MVKyMAHr8ka3Nu3jCR03HARGKUwNRzppZYtRXWyXHNlAaJdplNb1NMGb8hd0ElBJmwFlVqmh8haQ==
"@tiptap/extension-text@^2.1.7": "@tiptap/extension-text@^2.1.7":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.1.7.tgz#071053ab0a8804a3bce36d1488a603b7446dff4e" resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.1.7.tgz#071053ab0a8804a3bce36d1488a603b7446dff4e"
integrity sha512-3xaMMMNydLgoS+o+yOvaZF04ui9spJwJZl8VyYgcJKVGGLGRlWHrireXN5/OqXG2jLb/jWqXVx5idppQjX+PMA== integrity sha512-3xaMMMNydLgoS+o+yOvaZF04ui9spJwJZl8VyYgcJKVGGLGRlWHrireXN5/OqXG2jLb/jWqXVx5idppQjX+PMA==
"@tiptap/extension-text@^2.1.8":
version "2.1.8"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.1.8.tgz#7f537d0c490feab8b800644e2ad24b6478c67044"
integrity sha512-ha7oTtUdcJdTVLr8CrxbNMucbAmOBCi83MLxdKZclVf1VpdIVpE3NTojfH2mnZCVMvtPhj4PILQp2hGO95SFig==
"@tiptap/extension-underline@^2.0.4": "@tiptap/extension-underline@^2.0.4":
version "2.1.7" version "2.1.7"
resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.1.7.tgz#ab815645770f7d2013ac69327975837b4937c8df" resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.1.7.tgz#ab815645770f7d2013ac69327975837b4937c8df"
@ -2766,30 +2776,30 @@
"@tiptap/extension-strike" "^2.1.7" "@tiptap/extension-strike" "^2.1.7"
"@tiptap/extension-text" "^2.1.7" "@tiptap/extension-text" "^2.1.7"
"@tiptap/starter-kit@^2.1.7": "@tiptap/starter-kit@^2.1.10":
version "2.1.8" version "2.1.10"
resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.1.8.tgz#d33f04478cd7b4956cb312335bcbed109269b651" resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.1.10.tgz#5f19c199c79d90ef5e3b8990ca3aa76ce625d68c"
integrity sha512-LfCQgENw501XyTbCEcmiKt1d7XQi+6nTrQQfI16cCwc7lqp+LREz9EOFidkjTtrKuUHwlTaZzS7C76Cfc87mXA== integrity sha512-h5mH1qv7SDFXWZPbOWC8zpGZ62EnDizRNtM45Gani0HYWJXcbPFpgN1qJmESP/jP+v+0hxtnVEkgfpiy3LRm6A==
dependencies: dependencies:
"@tiptap/core" "^2.1.8" "@tiptap/core" "^2.1.10"
"@tiptap/extension-blockquote" "^2.1.8" "@tiptap/extension-blockquote" "^2.1.10"
"@tiptap/extension-bold" "^2.1.8" "@tiptap/extension-bold" "^2.1.10"
"@tiptap/extension-bullet-list" "^2.1.8" "@tiptap/extension-bullet-list" "^2.1.10"
"@tiptap/extension-code" "^2.1.8" "@tiptap/extension-code" "^2.1.10"
"@tiptap/extension-code-block" "^2.1.8" "@tiptap/extension-code-block" "^2.1.10"
"@tiptap/extension-document" "^2.1.8" "@tiptap/extension-document" "^2.1.10"
"@tiptap/extension-dropcursor" "^2.1.8" "@tiptap/extension-dropcursor" "^2.1.10"
"@tiptap/extension-gapcursor" "^2.1.8" "@tiptap/extension-gapcursor" "^2.1.10"
"@tiptap/extension-hard-break" "^2.1.8" "@tiptap/extension-hard-break" "^2.1.10"
"@tiptap/extension-heading" "^2.1.8" "@tiptap/extension-heading" "^2.1.10"
"@tiptap/extension-history" "^2.1.8" "@tiptap/extension-history" "^2.1.10"
"@tiptap/extension-horizontal-rule" "^2.1.8" "@tiptap/extension-horizontal-rule" "^2.1.10"
"@tiptap/extension-italic" "^2.1.8" "@tiptap/extension-italic" "^2.1.10"
"@tiptap/extension-list-item" "^2.1.8" "@tiptap/extension-list-item" "^2.1.10"
"@tiptap/extension-ordered-list" "^2.1.8" "@tiptap/extension-ordered-list" "^2.1.10"
"@tiptap/extension-paragraph" "^2.1.8" "@tiptap/extension-paragraph" "^2.1.10"
"@tiptap/extension-strike" "^2.1.8" "@tiptap/extension-strike" "^2.1.10"
"@tiptap/extension-text" "^2.1.8" "@tiptap/extension-text" "^2.1.10"
"@tiptap/suggestion@^2.0.4": "@tiptap/suggestion@^2.0.4":
version "2.1.7" version "2.1.7"
@ -3425,7 +3435,7 @@ attr-accept@^2.2.2:
resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b"
integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==
autoprefixer@^10.4.13, autoprefixer@^10.4.14, autoprefixer@^10.4.7: autoprefixer@^10.4.14, autoprefixer@^10.4.15:
version "10.4.15" version "10.4.15"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530"
integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==
@ -6130,6 +6140,11 @@ lucide-react@^0.263.1:
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.263.1.tgz#a456ee0d171aa373929bd3ee20d6f9fb4429c301" resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.263.1.tgz#a456ee0d171aa373929bd3ee20d6f9fb4429c301"
integrity sha512-keqxAx97PlaEN89PXZ6ki1N8nRjGWtDa4021GFYLNj0RgruM5odbpl8GHTExj0hhPq3sF6Up0gnxt6TSHu+ovw== integrity sha512-keqxAx97PlaEN89PXZ6ki1N8nRjGWtDa4021GFYLNj0RgruM5odbpl8GHTExj0hhPq3sF6Up0gnxt6TSHu+ovw==
lucide-react@^0.269.0:
version "0.269.0"
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.269.0.tgz#610a4c85dd60b0e1826842ec563eb9bc9b249be5"
integrity sha512-+ViEb/2eJJt43/CtxpTfvqu/8gzK49cSUdeuqRuFYiZmX9AvwfumtETM4plhXHymfHb6/mVbHg9uIlc13y+uew==
magic-string@^0.25.0, magic-string@^0.25.7: magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.9" version "0.25.9"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
@ -7020,7 +7035,7 @@ postcss@8.4.14:
picocolors "^1.0.0" picocolors "^1.0.0"
source-map-js "^1.0.2" source-map-js "^1.0.2"
postcss@^8.4.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.29: postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.29:
version "8.4.29" version "8.4.29"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd"
integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==
@ -7057,6 +7072,11 @@ prettier-plugin-tailwindcss@^0.3.0:
resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.3.0.tgz#8299b307c7f6467f52732265579ed9375be6c818" resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.3.0.tgz#8299b307c7f6467f52732265579ed9375be6c818"
integrity sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA== integrity sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==
prettier-plugin-tailwindcss@^0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.4.tgz#ebfacbcb90e2ca1df671ffe4083e99f81d72040d"
integrity sha512-QZzzB1bID6qPsKHTeA9qPo1APmmxfFrA5DD3LQ+vbTmAnY40eJI7t9Q1ocqel2EKMWNPLJqdTDWZj1hKYgqSgg==
prettier@^2.8.7, prettier@^2.8.8: prettier@^2.8.7, prettier@^2.8.8:
version "2.8.8" version "2.8.8"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
@ -8186,12 +8206,12 @@ tailwind-merge@^1.14.0:
resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b"
integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== integrity sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==
tailwindcss-animate@^1.0.6: tailwindcss-animate@^1.0.6, tailwindcss-animate@^1.0.7:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4"
integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==
tailwindcss@^3.1.6, tailwindcss@^3.2.7: tailwindcss@^3.2.7, tailwindcss@^3.3.3:
version "3.3.3" version "3.3.3"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf"
integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==