feat(notebook): add placeholder, redo and undo button (#3564)

This commit is contained in:
Meier Lukas
2025-07-07 21:08:35 +02:00
committed by GitHub
parent 7c0a7428d8
commit 3411354677
5 changed files with 96 additions and 49 deletions

View File

@@ -1502,7 +1502,8 @@
"rows": "Rows", "rows": "Rows",
"width": "Width", "width": "Width",
"height": "Height" "height": "Height"
} },
"placeholder": "Start writing your notes"
}, },
"iframe": { "iframe": {
"name": "iFrame", "name": "iFrame",

View File

@@ -56,6 +56,7 @@
"@tiptap/extension-highlight": "2.25.0", "@tiptap/extension-highlight": "2.25.0",
"@tiptap/extension-image": "2.25.0", "@tiptap/extension-image": "2.25.0",
"@tiptap/extension-link": "^2.25.0", "@tiptap/extension-link": "^2.25.0",
"@tiptap/extension-placeholder": "^2.25.0",
"@tiptap/extension-table": "2.25.0", "@tiptap/extension-table": "2.25.0",
"@tiptap/extension-table-cell": "2.25.0", "@tiptap/extension-table-cell": "2.25.0",
"@tiptap/extension-table-header": "2.25.0", "@tiptap/extension-table-header": "2.25.0",

View File

@@ -66,3 +66,7 @@
.tiptap[contenteditable="false"].resize-cursor { .tiptap[contenteditable="false"].resize-cursor {
pointer-events: none; pointer-events: none;
} }
.ProseMirror {
height: 100%;
}

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { import {
ActionIcon, ActionIcon,
Box, Box,
@@ -43,6 +43,7 @@ import {
import { Color } from "@tiptap/extension-color"; import { Color } from "@tiptap/extension-color";
import Highlight from "@tiptap/extension-highlight"; import Highlight from "@tiptap/extension-highlight";
import Image from "@tiptap/extension-image"; import Image from "@tiptap/extension-image";
import Placeholder from "@tiptap/extension-placeholder";
import Table from "@tiptap/extension-table"; import Table from "@tiptap/extension-table";
import TableCell from "@tiptap/extension-table-cell"; import TableCell from "@tiptap/extension-table-cell";
import TableHeader from "@tiptap/extension-table-header"; import TableHeader from "@tiptap/extension-table-header";
@@ -65,6 +66,7 @@ import type { TablerIcon } from "@homarr/ui";
import type { WidgetComponentProps } from "../definition"; import type { WidgetComponentProps } from "../definition";
import "@mantine/tiptap/styles.css";
import "./notebook.css"; import "./notebook.css";
import { useSession } from "@homarr/auth/client"; import { useSession } from "@homarr/auth/client";
@@ -81,15 +83,15 @@ const controlIconProps = {
stroke: 1.5, stroke: 1.5,
}; };
export function Notebook({ options, isEditMode, boardId, itemId }: WidgetComponentProps<"notebook">) { export function Notebook({ options, setOptions, isEditMode, boardId, itemId }: WidgetComponentProps<"notebook">) {
const [content, setContent] = useState(options.content); const [content, setContent] = useState(options.content);
const [toSaveContent, setToSaveContent] = useState(content); const previousContentRef = useRef(content);
const board = useRequiredBoard(); const board = useRequiredBoard();
const { data: session } = useSession(); const { data: session } = useSession();
const { hasChangeAccess } = constructBoardPermissions(board, session); const { hasChangeAccess } = constructBoardPermissions(board, session);
const enabled = !isEditMode && hasChangeAccess; const canChange = !isEditMode && hasChangeAccess;
const [isEditing, setIsEditing] = useState(false); const [isEditing, setIsEditing] = useState(false);
const { primaryColor } = useMantineTheme(); const { primaryColor } = useMantineTheme();
@@ -103,6 +105,9 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
const editor = useEditor( const editor = useEditor(
{ {
extensions: [ extensions: [
Placeholder.configure({
placeholder: `${t("widget.notebook.placeholder")}`,
}),
Color, Color,
Highlight.configure({ multicolor: true }), Highlight.configure({ multicolor: true }),
Image.extend({ Image.extend({
@@ -150,14 +155,14 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
TaskItem.configure({ TaskItem.configure({
nested: true, nested: true,
onReadOnlyChecked: (node, checked) => { onReadOnlyChecked: (node, checked) => {
if (options.allowReadOnlyCheck && enabled) { if (!options.allowReadOnlyCheck) return false;
const event = new CustomEvent("onReadOnlyCheck", { if (!canChange) return false;
detail: { node, checked },
}); const event = new CustomEvent("onReadOnlyCheck", {
dispatchEvent(event); detail: { node, checked },
return true; });
} dispatchEvent(event);
return false; return true;
}, },
}), }),
TaskList.configure({ itemTypeName: "taskItem" }), TaskList.configure({ itemTypeName: "taskItem" }),
@@ -173,7 +178,7 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
editor.setEditable(false); editor.setEditable(false);
}, },
}, },
[toSaveContent], [],
); );
const handleOnReadOnlyCheck = (event: CustomEventInit<{ node: Node; checked: boolean }>) => { const handleOnReadOnlyCheck = (event: CustomEventInit<{ node: Node; checked: boolean }>) => {
@@ -184,16 +189,14 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
if (!event.detail) return; if (!event.detail) return;
if (!subnode.eq(event.detail.node)) return; if (!subnode.eq(event.detail.node)) return;
if (subnode.eq(event.detail.node)) { const { tr } = editor.state;
const { tr } = editor.state; tr.setNodeMarkup(pos, undefined, {
tr.setNodeMarkup(pos, undefined, { ...event.detail.node.attrs,
...event.detail.node.attrs, checked: event.detail.checked,
checked: event.detail.checked, });
}); editor.view.dispatch(tr);
editor.view.dispatch(tr); setContent(editor.getHTML());
setContent(editor.getHTML()); handleContentUpdate(editor.getHTML());
handleContentUpdate(editor.getHTML());
}
}); });
}; };
@@ -201,13 +204,15 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
const handleContentUpdate = useCallback( const handleContentUpdate = useCallback(
(contentUpdate: string) => { (contentUpdate: string) => {
setToSaveContent(contentUpdate); previousContentRef.current = contentUpdate;
setOptions({ newOptions: { content: contentUpdate } });
// This is not available in preview mode // This is not available in preview mode
if (boardId && itemId) { if (boardId && itemId) {
void mutateAsync({ boardId, itemId, content: contentUpdate }); void mutateAsync({ boardId, itemId, content: contentUpdate });
} }
}, },
[boardId, itemId, mutateAsync], [boardId, itemId, mutateAsync, setOptions],
); );
const handleEditToggleCallback = useCallback( const handleEditToggleCallback = useCallback(
@@ -216,7 +221,9 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
if (!editor) return current; if (!editor) return current;
editor.setEditable(current); editor.setEditable(current);
handleContentUpdate(content); if (previous) {
handleContentUpdate(content);
}
return current; return current;
}, },
@@ -227,11 +234,11 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
if (!editor) return false; if (!editor) return false;
editor.setEditable(false); editor.setEditable(false);
setContent(toSaveContent); setContent(previousContentRef.current);
editor.commands.setContent(toSaveContent); editor.commands.setContent(previousContentRef.current);
return false; return false;
}, [editor, toSaveContent]); }, [editor]);
const handleEditCancel = useCallback(() => { const handleEditCancel = useCallback(() => {
setIsEditing(handleEditCancelCallback); setIsEditing(handleEditCancelCallback);
@@ -242,7 +249,7 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
}, [setIsEditing, handleEditToggleCallback]); }, [setIsEditing, handleEditToggleCallback]);
return ( return (
<Box> <Box h="100%">
<RichTextEditor <RichTextEditor
p={0} p={0}
mt={0} mt={0}
@@ -251,14 +258,12 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
editor={editor} editor={editor}
styles={(theme) => ({ styles={(theme) => ({
root: { root: {
"& .ProseMirror": {
padding: "0 !important",
},
backgroundColor: colorScheme === "dark" ? theme.colors.dark[6] : "white", backgroundColor: colorScheme === "dark" ? theme.colors.dark[6] : "white",
border: "none", border: "none",
borderRadius: "0.5rem", borderRadius: "0.5rem",
display: "flex", display: "flex",
flexDirection: "column", flexDirection: "column",
height: "100%",
}, },
toolbar: { toolbar: {
backgroundColor: "transparent", backgroundColor: "transparent",
@@ -267,6 +272,10 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
content: { content: {
backgroundColor: "transparent", backgroundColor: "transparent",
padding: "0.5rem", padding: "0.5rem",
height: "100%",
},
typographyStylesProvider: {
height: "100%",
}, },
})} })}
> >
@@ -351,6 +360,11 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
</> </>
)} )}
</RichTextEditor.ControlsGroup> </RichTextEditor.ControlsGroup>
<RichTextEditor.ControlsGroup>
<RichTextEditor.Undo />
<RichTextEditor.Redo />
</RichTextEditor.ControlsGroup>
</RichTextEditor.Toolbar> </RichTextEditor.Toolbar>
{editor && ( {editor && (
<BubbleMenu editor={editor}> <BubbleMenu editor={editor}>
@@ -362,11 +376,24 @@ export function Notebook({ options, isEditMode, boardId, itemId }: WidgetCompone
</BubbleMenu> </BubbleMenu>
)} )}
<ScrollArea mih="4rem" offsetScrollbars pl={12} pt={12}> <ScrollArea
mih="4rem"
offsetScrollbars
pl={12}
pt={12}
styles={{
root: {
height: "100%",
},
content: {
height: "100%",
},
}}
>
<RichTextEditor.Content /> <RichTextEditor.Content />
</ScrollArea> </ScrollArea>
</RichTextEditor> </RichTextEditor>
{enabled && ( {canChange && (
<> <>
<ActionIcon <ActionIcon
title={isEditing ? t("common.action.save") : t("common.action.edit")} title={isEditing ? t("common.action.save") : t("common.action.edit")}

40
pnpm-lock.yaml generated
View File

@@ -261,7 +261,7 @@ importers:
version: 2.12.5(@types/react@19.1.8)(react@19.1.0) version: 2.12.5(@types/react@19.1.8)(react@19.1.0)
mantine-react-table: mantine-react-table:
specifier: 2.0.0-beta.9 specifier: 2.0.0-beta.9
version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: next:
specifier: 15.3.5 specifier: 15.3.5
version: 15.3.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) version: 15.3.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)
@@ -1552,7 +1552,7 @@ importers:
version: link:../ui version: link:../ui
'@mantine/notifications': '@mantine/notifications':
specifier: ^8.1.3 specifier: ^8.1.3
version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@tabler/icons-react': '@tabler/icons-react':
specifier: ^3.34.0 specifier: ^3.34.0
version: 3.34.0(react@19.1.0) version: 3.34.0(react@19.1.0)
@@ -1807,7 +1807,7 @@ importers:
version: link:../server-settings version: link:../server-settings
'@mantine/dates': '@mantine/dates':
specifier: ^8.1.3 specifier: ^8.1.3
version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: next:
specifier: 15.3.5 specifier: 15.3.5
version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)
@@ -1874,7 +1874,7 @@ importers:
version: 8.1.3(react@19.1.0) version: 8.1.3(react@19.1.0)
'@mantine/spotlight': '@mantine/spotlight':
specifier: ^8.1.3 specifier: ^8.1.3
version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@tabler/icons-react': '@tabler/icons-react':
specifier: ^3.34.0 specifier: ^3.34.0
version: 3.34.0(react@19.1.0) version: 3.34.0(react@19.1.0)
@@ -1926,7 +1926,7 @@ importers:
version: 4.3.1 version: 4.3.1
mantine-react-table: mantine-react-table:
specifier: 2.0.0-beta.9 specifier: 2.0.0-beta.9
version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: next:
specifier: 15.3.5 specifier: 15.3.5
version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)
@@ -1978,7 +1978,7 @@ importers:
version: 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/dates': '@mantine/dates':
specifier: ^8.1.3 specifier: ^8.1.3
version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/hooks': '@mantine/hooks':
specifier: ^8.1.3 specifier: ^8.1.3
version: 8.1.3(react@19.1.0) version: 8.1.3(react@19.1.0)
@@ -1987,7 +1987,7 @@ importers:
version: 3.34.0(react@19.1.0) version: 3.34.0(react@19.1.0)
mantine-react-table: mantine-react-table:
specifier: 2.0.0-beta.9 specifier: 2.0.0-beta.9
version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: next:
specifier: 15.3.5 specifier: 15.3.5
version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)
@@ -2146,6 +2146,9 @@ importers:
'@tiptap/extension-link': '@tiptap/extension-link':
specifier: ^2.25.0 specifier: ^2.25.0
version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)
'@tiptap/extension-placeholder':
specifier: ^2.25.0
version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)
'@tiptap/extension-table': '@tiptap/extension-table':
specifier: 2.25.0 specifier: 2.25.0
version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0) version: 2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)
@@ -2187,7 +2190,7 @@ importers:
version: 1.11.13 version: 1.11.13
mantine-react-table: mantine-react-table:
specifier: 2.0.0-beta.9 specifier: 2.0.0-beta.9
version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next: next:
specifier: 15.3.5 specifier: 15.3.5
version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) version: 15.3.5(@babel/core@7.27.4)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2)
@@ -4463,6 +4466,12 @@ packages:
peerDependencies: peerDependencies:
'@tiptap/core': ^2.7.0 '@tiptap/core': ^2.7.0
'@tiptap/extension-placeholder@2.25.0':
resolution: {integrity: sha512-BUJnp/WQt/8iMJ9wn1xGlA+RiXCsP24u5n+ecxw+DBTgFq7RRL9I1nDQ/IJBrfWMJGOrMEq6tg8rmg1NVLGfWw==}
peerDependencies:
'@tiptap/core': ^2.7.0
'@tiptap/pm': ^2.7.0
'@tiptap/extension-strike@2.25.0': '@tiptap/extension-strike@2.25.0':
resolution: {integrity: sha512-Z5YBKnv4N6MMD1LEo9XbmWnmdXavZKOOJt/OkXYFZ3KgzB52Z3q3DDfH+NyeCtKKSWqWVxbBHKLnsojDerSf2g==} resolution: {integrity: sha512-Z5YBKnv4N6MMD1LEo9XbmWnmdXavZKOOJt/OkXYFZ3KgzB52Z3q3DDfH+NyeCtKKSWqWVxbBHKLnsojDerSf2g==}
peerDependencies: peerDependencies:
@@ -12005,7 +12014,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
'@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': '@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies: dependencies:
'@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/hooks': 8.1.3(react@19.1.0) '@mantine/hooks': 8.1.3(react@19.1.0)
@@ -12039,7 +12048,7 @@ snapshots:
react: 19.1.0 react: 19.1.0
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
'@mantine/notifications@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': '@mantine/notifications@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies: dependencies:
'@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/hooks': 8.1.3(react@19.1.0) '@mantine/hooks': 8.1.3(react@19.1.0)
@@ -12048,7 +12057,7 @@ snapshots:
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/spotlight@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': '@mantine/spotlight@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies: dependencies:
'@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/hooks': 8.1.3(react@19.1.0) '@mantine/hooks': 8.1.3(react@19.1.0)
@@ -13156,6 +13165,11 @@ snapshots:
dependencies: dependencies:
'@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0)
'@tiptap/extension-placeholder@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))(@tiptap/pm@2.25.0)':
dependencies:
'@tiptap/core': 2.25.0(@tiptap/pm@2.25.0)
'@tiptap/pm': 2.25.0
'@tiptap/extension-strike@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))': '@tiptap/extension-strike@2.25.0(@tiptap/core@2.25.0(@tiptap/pm@2.25.0))':
dependencies: dependencies:
'@tiptap/core': 2.25.0(@tiptap/pm@2.25.0) '@tiptap/core': 2.25.0(@tiptap/pm@2.25.0)
@@ -17136,10 +17150,10 @@ snapshots:
make-error@1.3.6: {} make-error@1.3.6: {}
mantine-react-table@2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): mantine-react-table@2.0.0-beta.9(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(@tabler/icons-react@3.34.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies: dependencies:
'@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/core': 8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/dates': 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/dates': 8.1.3(@mantine/core@8.1.3(@mantine/hooks@8.1.3(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@8.1.3(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@mantine/hooks': 8.1.3(react@19.1.0) '@mantine/hooks': 8.1.3(react@19.1.0)
'@tabler/icons-react': 3.34.0(react@19.1.0) '@tabler/icons-react': 3.34.0(react@19.1.0)
'@tanstack/match-sorter-utils': 8.19.4 '@tanstack/match-sorter-utils': 8.19.4