diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7fa3de154..e77f5378a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,17 +14,18 @@ All notable changes to this project will be documented in this file.
- Removed propTypes.
- Upgraded redux-toolkit and how api slices are generated.
- Fixed redux-toolkit cache handling.
-- Added Taskfile
+- Added Taskfile.
- Added update command.
- Added (Client) online-check to public.
- Updated developer documentation.
-- Removed admin/access-config.json fetch
+- Removed admin/access-config.json fetch.
- Aligned with v. 2.5.2.
- Removed themes.
- Added command to migrate config.json files.
-- Fix data fetching bug
+- Fix data fetching bug.
- Refactored screen layout commands.
-- Moved list components (search and checkboxes) around
+- Moved list components (search and checkboxes) around.
+- Replaced lodash functions with native ones.
### NB! Prior to 3.x the project was split into separate repositories
diff --git a/assets/admin/components/playlist/playlist-campaign-manager.jsx b/assets/admin/components/playlist/playlist-campaign-manager.jsx
index 6467a6229..b80c3998b 100644
--- a/assets/admin/components/playlist/playlist-campaign-manager.jsx
+++ b/assets/admin/components/playlist/playlist-campaign-manager.jsx
@@ -1,7 +1,6 @@
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate, useLocation } from "react-router-dom";
-import set from "lodash.set";
import dayjs from "dayjs";
import { useDispatch } from "react-redux";
import idFromUrl from "../util/helpers/id-from-url";
@@ -281,7 +280,7 @@ function PlaylistCampaignManager({
*/
const handleInput = ({ target }) => {
const localFormStateObject = { ...formStateObject };
- set(localFormStateObject, target.id, target.value);
+ localFormStateObject[target.id] = target.value;
setFormStateObject(localFormStateObject);
};
diff --git a/assets/admin/components/screen/screen-manager.jsx b/assets/admin/components/screen/screen-manager.jsx
index ecac836c6..8e4a28a19 100644
--- a/assets/admin/components/screen/screen-manager.jsx
+++ b/assets/admin/components/screen/screen-manager.jsx
@@ -1,6 +1,5 @@
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
-import set from "lodash.set";
import { useNavigate } from "react-router-dom";
import {
usePostV2ScreensMutation,
@@ -96,7 +95,7 @@ function ScreenManager({
const handleInput = ({ target }) => {
let localFormStateObject = { ...formStateObject };
localFormStateObject = JSON.parse(JSON.stringify(localFormStateObject));
- set(localFormStateObject, target.id, target.value);
+ localFormStateObject[target.id] = target.value;
setFormStateObject(localFormStateObject);
};
diff --git a/assets/admin/components/slide/content/contacts/contact-form.jsx b/assets/admin/components/slide/content/contacts/contact-form.jsx
index 2e1cff04b..764c4bb95 100644
--- a/assets/admin/components/slide/content/contacts/contact-form.jsx
+++ b/assets/admin/components/slide/content/contacts/contact-form.jsx
@@ -1,4 +1,3 @@
-import set from "lodash.set";
import { Col, Row } from "react-bootstrap";
import { useTranslation } from "react-i18next";
import FileSelector from "../file-selector";
@@ -28,7 +27,7 @@ function ContactForm({
*/
const onInput = ({ target }) => {
const localContact = { ...contact };
- set(localContact, target.name, target.value);
+ localContact[target.name] = target.value;
onChange(localContact);
};
diff --git a/assets/admin/components/slide/content/feed-selector.jsx b/assets/admin/components/slide/content/feed-selector.jsx
index 6cc901da2..ccd9491e6 100644
--- a/assets/admin/components/slide/content/feed-selector.jsx
+++ b/assets/admin/components/slide/content/feed-selector.jsx
@@ -2,7 +2,6 @@ import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { Spinner } from "react-bootstrap";
import { useDispatch } from "react-redux";
-import set from "lodash.set";
import {
enhancedApi,
useGetV2FeedSourcesQuery,
@@ -100,12 +99,12 @@ function FeedSelector({
const configuration = { ...value.configuration };
if (target !== null) {
- set(configuration, target.id, target.value);
+ configuration[target.id] = target.value;
}
if (targets !== null) {
targets.forEach(({ id, value: targetValue }) => {
- set(configuration, id, targetValue);
+ configuration[id] = targetValue;
});
}
diff --git a/assets/admin/components/slide/slide-manager.jsx b/assets/admin/components/slide/slide-manager.jsx
index b7a725930..63e20dd4e 100644
--- a/assets/admin/components/slide/slide-manager.jsx
+++ b/assets/admin/components/slide/slide-manager.jsx
@@ -1,7 +1,5 @@
import { useEffect, useState, useContext } from "react";
import { useTranslation } from "react-i18next";
-import get from "lodash.get";
-import set from "lodash.set";
import { ulid } from "ulid";
import { useDispatch } from "react-redux";
import dayjs from "dayjs";
@@ -155,7 +153,7 @@ function SlideManager({
*/
const handleInput = ({ target }) => {
const localFormStateObject = { ...formStateObject };
- set(localFormStateObject, target.id, target.value);
+ localFormStateObject[target.id] = target.value;
setFormStateObject(localFormStateObject);
};
@@ -208,7 +206,7 @@ function SlideManager({
const value =
target.type === "number" ? target.valueAsNumber : target.value;
const localFormStateObject = { ...formStateObject };
- set(localFormStateObject.content, target.id, value);
+ localFormStateObject.content[target.id] = value;
setFormStateObject(localFormStateObject);
};
@@ -353,12 +351,12 @@ function SlideManager({
// It is an already added temp file.
if (entry.tempId) {
newField.push(entry.tempId);
- set(localMediaData, entry.tempId, entry);
+ localMediaData[entry.tempId] = entry;
}
// It is a new temp file.
else {
if (!Array.isArray(localFormStateObject.content[fieldId])) {
- set(localFormStateObject.content, fieldId, []);
+ localFormStateObject.content[fieldId] = [];
}
// Create a tempId for the media.
@@ -369,7 +367,7 @@ function SlideManager({
const newEntry = { ...entry };
newEntry.tempId = tempId;
- set(localMediaData, tempId, newEntry);
+ localMediaData[tempId] = newEntry;
}
}
// Previously selected file.
@@ -383,7 +381,7 @@ function SlideManager({
if (
!Object.prototype.hasOwnProperty.call(localMediaData, entry["@id"])
) {
- set(localMediaData, entry["@id"], entry);
+ localMediaData[entry["@id"]] = entry;
localFormStateObject.media.push(entry["@id"]);
}
@@ -391,10 +389,8 @@ function SlideManager({
});
}
- set(localFormStateObject.content, fieldId, newField);
- set(localFormStateObject, "media", [
- ...new Set([...localFormStateObject.media]),
- ]);
+ localFormStateObject.content[fieldId] = newField;
+ localFormStateObject.media = [...new Set([...localFormStateObject.media])];
setFormStateObject(localFormStateObject);
setMediaData(localMediaData);
@@ -406,7 +402,7 @@ function SlideManager({
// Setup submittingMedia list.
mediaFields.forEach((fieldName) => {
- const fieldData = get(formStateObject.content, fieldName);
+ const fieldData = formStateObject.content[fieldName];
if (fieldData) {
if (Array.isArray(fieldData)) {
@@ -548,33 +544,25 @@ function SlideManager({
/** Submitted media is successful. */
useEffect(() => {
- if (submitting) {
- if (isSaveMediaSuccess) {
- const newSubmittingMedia = [...submittingMedia];
- const submittedMedia = newSubmittingMedia.shift();
-
- const newFormStateObject = { ...formStateObject };
- newFormStateObject.media.push(savedMediaData["@id"]);
-
- // Replace TEMP-- id with real id.
- set(
- newFormStateObject.content,
- submittedMedia.fieldName,
- get(newFormStateObject.content, submittedMedia.fieldName).map(
- (mediaId) =>
- mediaId === submittedMedia.tempId
- ? savedMediaData["@id"]
- : mediaId,
- ),
+ if (submitting && isSaveMediaSuccess) {
+ const newSubmittingMedia = [...submittingMedia];
+ const submittedMedia = newSubmittingMedia.shift();
+
+ const newFormStateObject = { ...formStateObject };
+ newFormStateObject.media.push(savedMediaData["@id"]);
+
+ // Replace TEMP-- id with real id.
+ newFormStateObject.content[submittedMedia.fieldName] =
+ newFormStateObject.content[submittedMedia.fieldName].map((mediaId) =>
+ mediaId === submittedMedia.tempId ? savedMediaData["@id"] : mediaId,
);
- const newMediaData = { ...mediaData };
- newMediaData[savedMediaData["@id"]] = savedMediaData;
- setMediaData(newMediaData);
+ const newMediaData = { ...mediaData };
+ newMediaData[savedMediaData["@id"]] = savedMediaData;
+ setMediaData(newMediaData);
- // Save new list.
- setSubmittingMedia(newSubmittingMedia);
- }
+ // Save the new list.
+ setSubmittingMedia(newSubmittingMedia);
}
}, [isSaveMediaSuccess]);
diff --git a/assets/admin/components/util/forms/rich-text/rich-text-menu.jsx b/assets/admin/components/util/forms/rich-text/rich-text-menu.jsx
new file mode 100644
index 000000000..a5f0fceea
--- /dev/null
+++ b/assets/admin/components/util/forms/rich-text/rich-text-menu.jsx
@@ -0,0 +1,235 @@
+import { useEditorState } from "@tiptap/react";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import {
+ faBold,
+ faItalic,
+ faLevelDownAlt,
+ faListOl,
+ faListUl,
+ faRedo,
+ faRemoveFormat,
+ faStrikethrough,
+ faUnderline,
+ faUndo,
+} from "@fortawesome/free-solid-svg-icons";
+import { useTranslation } from "react-i18next";
+import Dropdown from "react-bootstrap/Dropdown";
+import { useState } from "react";
+
+function RichTextMenu({ editor }) {
+ const { t } = useTranslation("common", { keyPrefix: "rich-text-editor" });
+
+ const [headingDropdownOpen, setHeadingDropdownOpen] = useState(false);
+
+ const editorState = useEditorState({
+ editor,
+ selector: (ctx) => {
+ return {
+ isBold: ctx.editor.isActive("bold") ?? false,
+ canBold: ctx.editor.can().chain().toggleBold().run() ?? false,
+ isItalic: ctx.editor.isActive("italic") ?? false,
+ canItalic: ctx.editor.can().chain().toggleItalic().run() ?? false,
+ isStrike: ctx.editor.isActive("strike") ?? false,
+ canStrike: ctx.editor.can().chain().toggleStrike().run() ?? false,
+ isUnderline: ctx.editor.isActive("underline") ?? false,
+ canUnderline: ctx.editor.can().chain().toggleUnderline().run() ?? false,
+ isHeading1: ctx.editor.isActive("heading", { level: 1 }) ?? false,
+ isHeading2: ctx.editor.isActive("heading", { level: 2 }) ?? false,
+ isHeading3: ctx.editor.isActive("heading", { level: 3 }) ?? false,
+ isHeading4: ctx.editor.isActive("heading", { level: 4 }) ?? false,
+ isNormal:
+ !ctx.editor.isActive("heading", { level: 1 }) &&
+ !ctx.editor.isActive("heading", { level: 2 }) &&
+ !ctx.editor.isActive("heading", { level: 3 }) &&
+ !ctx.editor.isActive("heading", { level: 4 }),
+ isBulletList: ctx.editor.isActive("bulletList") ?? false,
+ isOrderedList: ctx.editor.isActive("orderedList") ?? false,
+ isParagraph: ctx.editor.isActive("paragraph") ?? false,
+ canUndo: ctx.editor.can().chain().undo().run() ?? false,
+ canRedo: ctx.editor.can().chain().redo().run() ?? false,
+ };
+ },
+ });
+
+ const toggleDropdown = () => {
+ setHeadingDropdownOpen(!headingDropdownOpen);
+ };
+
+ return (
+
+
+
+
+
+ {editorState.isHeading1 && t("toggle-heading-1")}
+ {editorState.isHeading2 && t("toggle-heading-2")}
+ {editorState.isHeading3 && t("toggle-heading-3")}
+ {editorState.isHeading4 && t("toggle-heading-4")}
+
+ {editorState.isNormal && t("normal")}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default RichTextMenu;
diff --git a/assets/admin/components/util/forms/rich-text/rich-text.jsx b/assets/admin/components/util/forms/rich-text/rich-text.jsx
index 6098377ea..378fd244a 100644
--- a/assets/admin/components/util/forms/rich-text/rich-text.jsx
+++ b/assets/admin/components/util/forms/rich-text/rich-text.jsx
@@ -1,8 +1,19 @@
-import ReactQuill from "react-quill";
import { FormGroup, FormLabel } from "react-bootstrap";
import DOMPurify from "dompurify";
-import "react-quill/dist/quill.snow.css";
+import { EditorContent, useEditor } from "@tiptap/react";
+import RichTextMenu from "./rich-text-menu.jsx";
import "./rich-text.scss";
+import { BulletList, ListItem, OrderedList } from "@tiptap/extension-list";
+import Bold from "@tiptap/extension-bold";
+import Italic from "@tiptap/extension-italic";
+import Strike from "@tiptap/extension-strike";
+import Underline from "@tiptap/extension-underline";
+import Document from "@tiptap/extension-document";
+import HardBreak from "@tiptap/extension-hard-break";
+import Paragraph from "@tiptap/extension-paragraph";
+import Text from "@tiptap/extension-text";
+import { UndoRedo } from "@tiptap/extensions";
+import Heading from "@tiptap/extension-heading";
/**
* A rich text field for forms.
@@ -33,50 +44,48 @@ function RichText({
*/
const onRichTextChange = (richText) => {
let sanitizedHtml = DOMPurify.sanitize(richText);
- // It returns
if the input is empty, apparently "needed"
- // https://github.com/quilljs/quill/issues/1328
- if (sanitizedHtml === "
") {
- sanitizedHtml = sanitizedHtml.replace("
", "");
- }
const returnTarget = { value: sanitizedHtml, id: name };
onChange({ target: returnTarget });
};
- const modules = {
- toolbar: [
- [{ header: [1, 2, 3, false] }],
- ["bold", "italic", "underline", "strike", "blockquote"],
- [{ list: "ordered" }, { list: "bullet" }],
- ["clean"],
+ const editor = useEditor({
+ // @see https://tiptap.dev/docs/editor/extensions/overview
+ extensions: [
+ Document,
+ Text,
+ Bold,
+ Italic,
+ Strike,
+ Heading.configure({
+ levels: [1, 2, 3, 4],
+ }),
+ Underline,
+ BulletList,
+ OrderedList,
+ ListItem,
+ Paragraph,
+ UndoRedo,
+ HardBreak,
],
- };
-
- const formats = [
- "header",
- "bold",
- "italic",
- "underline",
- "strike",
- "blockquote",
- "list",
- "bullet",
- ];
+ enableInputRules: false,
+ content: value,
+ onUpdate({ editor }) {
+ onRichTextChange(editor.getHTML());
+ },
+ });
return (
-
+
{label}
{required && " *"}
-
+
+
+
+
+
{helpText &&
{helpText}}
diff --git a/assets/admin/components/util/forms/rich-text/rich-text.scss b/assets/admin/components/util/forms/rich-text/rich-text.scss
index 65a51d198..11182b990 100644
--- a/assets/admin/components/util/forms/rich-text/rich-text.scss
+++ b/assets/admin/components/util/forms/rich-text/rich-text.scss
@@ -1,7 +1,39 @@
-.quill {
- min-height: 200px;
- width: 100%;
- .ql-container {
- min-height: 200px;
+.text-editor {
+ .rich-text-editor {
+ border: 1px solid #ccc;
+ min-height: 120px;
+ border-radius: 5px;
+
+ .tiptap {
+ padding: 1em;
+ background: white;
+ min-height: 80px;
+ border-top: 1px solid #ccc;
+ //border-radius: 5px;
+ }
+ }
+
+ .button-group {
+ margin: 0;
+ padding: 0.25em;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ font-size: 16px;
+
+ .dropdown {
+ min-width: 150px;
+ }
+
+ button {
+ font-weight: bolder;
+ margin-right: 0.2em;
+ border: 0;
+ background: transparent;
+ }
+
+ .is-active {
+ color: hsl(219deg 89% 57%);
+ }
}
}
diff --git a/assets/admin/components/util/table/table-body.jsx b/assets/admin/components/util/table/table-body.jsx
index 63497d7d4..25162e8f4 100644
--- a/assets/admin/components/util/table/table-body.jsx
+++ b/assets/admin/components/util/table/table-body.jsx
@@ -1,5 +1,4 @@
import { Fragment } from "react";
-import get from "lodash.get";
import useModal from "../../../context/modal-context/modal-context-hook";
/**
@@ -23,7 +22,7 @@ function TableBody({ columns, data }) {
return column.content(item);
}
- let cellData = get(item, column.path);
+ let cellData = item[column.path];
if (column.dataFunction) {
cellData = column.dataFunction(cellData);
diff --git a/assets/admin/translations/da/common.json b/assets/admin/translations/da/common.json
index 513c0659c..eb7553aea 100644
--- a/assets/admin/translations/da/common.json
+++ b/assets/admin/translations/da/common.json
@@ -1219,5 +1219,21 @@
"filter-organizer-helptext": "Begynd at skrive arrangøren du ønsker begivenheder fra, og vælg det på listen som kommer frem.",
"filters-tag": "Tags",
"filter-tag-helptext": "Begynd at skrive det tag du ønsker begivenheder fra, og vælg det på listen som kommer frem."
+ },
+ "rich-text-editor": {
+ "toggle-bold": "Fed",
+ "toggle-italic": "Kursiv",
+ "toggle-strike-through": "Gennemstreget",
+ "toggle-underline": "Understreget",
+ "toggle-heading-1": "Overskrift 1",
+ "toggle-heading-2": "Overskrift 2",
+ "toggle-heading-3": "Overskrift 3",
+ "toggle-heading-4": "Overskrift 4",
+ "normal": "Normal",
+ "toggle-bullet-list": "Punktopstilling",
+ "toggle-ordered-list": "Nummereret liste",
+ "insert-hard-break": "Ny linje",
+ "redo": "Gentag",
+ "undo": "Fortryd"
}
}
diff --git a/assets/client/data-sync/pull-strategy.js b/assets/client/data-sync/pull-strategy.js
index 4a52c4849..ca1b96d24 100644
--- a/assets/client/data-sync/pull-strategy.js
+++ b/assets/client/data-sync/pull-strategy.js
@@ -1,4 +1,3 @@
-import cloneDeep from "lodash.clonedeep";
import isPublished from "../util/isPublished";
import logger from "../logger/logger";
import ApiHelper from "./api-helper";
@@ -136,7 +135,7 @@ class PullStrategy {
async getSlidesForRegions(regions) {
return new Promise((resolve, reject) => {
const promises = [];
- const regionData = cloneDeep(regions);
+ const regionData = structuredClone(regions);
// @TODO: Fix eslint-raised issues.
// eslint-disable-next-line guard-for-in,no-restricted-syntax
@@ -200,7 +199,7 @@ class PullStrategy {
return;
}
- const newScreen = cloneDeep(screen);
+ const newScreen = structuredClone(screen);
newScreen.hasActiveCampaign = false;
@@ -304,7 +303,7 @@ class PullStrategy {
const dataEntrySlidesData = dataEntryPlaylist.slidesData;
for (const slideKey of Object.keys(dataEntrySlidesData)) {
- const slide = cloneDeep(dataEntrySlidesData[slideKey]);
+ const slide = structuredClone(dataEntrySlidesData[slideKey]);
let previousSlide = null;
@@ -315,7 +314,7 @@ class PullStrategy {
this.lastestScreenData.regionData[regionKey][playlistKey]
.slidesData[slideKey]
) {
- previousSlide = cloneDeep(
+ previousSlide = structuredClone(
this.lastestScreenData.regionData[regionKey][playlistKey]
.slidesData[slideKey],
);
diff --git a/assets/client/service/schedule-service.js b/assets/client/service/schedule-service.js
index a69c8cb4b..7cdfdfbec 100644
--- a/assets/client/service/schedule-service.js
+++ b/assets/client/service/schedule-service.js
@@ -1,4 +1,3 @@
-import cloneDeep from "lodash.clonedeep";
import sha256 from "crypto-js/sha256";
import Md5 from "crypto-js/md5";
import Base64 from "crypto-js/enc-base64";
@@ -214,7 +213,7 @@ class ScheduleService {
return;
}
- const newSlide = cloneDeep(slide);
+ const newSlide = structuredClone(slide);
// Execution id is the product of region, playlist and slide id, to ensure uniqueness in the client.
const executionId = Md5(regionId + playlist["@id"] + slide["@id"]);
diff --git a/assets/shared/templates/book-review/book-review.scss b/assets/shared/templates/book-review/book-review.scss
index 589e32956..d5bc6b61b 100644
--- a/assets/shared/templates/book-review/book-review.scss
+++ b/assets/shared/templates/book-review/book-review.scss
@@ -44,6 +44,12 @@
line-height: 1.25em;
}
+ ol,
+ ul {
+ padding-left: 2em;
+ margin-bottom: 1em;
+ }
+
strong {
font-weight: bold;
}
diff --git a/assets/shared/templates/image-text/image-text.scss b/assets/shared/templates/image-text/image-text.scss
index 2845f4d2e..a86627282 100644
--- a/assets/shared/templates/image-text/image-text.scss
+++ b/assets/shared/templates/image-text/image-text.scss
@@ -27,6 +27,7 @@
justify-content: flex-start;
align-content: stretch;
align-items: flex-start;
+ font-family: var(--font-family-base), sans-serif;
font-size: var(--font-size-base);
.box {
@@ -44,6 +45,12 @@
p {
margin-bottom: 1em;
}
+
+ ol,
+ ul {
+ padding-left: 2em;
+ margin-bottom: 1em;
+ }
}
&.full-screen {
diff --git a/assets/shared/templates/travel/travel.scss b/assets/shared/templates/travel/travel.scss
index 7079d8d0e..961921cdd 100644
--- a/assets/shared/templates/travel/travel.scss
+++ b/assets/shared/templates/travel/travel.scss
@@ -36,6 +36,12 @@
.text {
grid-area: d / d / f / f;
font-size: 1.5em;
+
+ ol,
+ ul {
+ padding-left: 2em;
+ margin-bottom: 1em;
+ }
}
@mixin boxes {
diff --git a/assets/tests/template/template-calendar.spec.js b/assets/tests/template/template-calendar.spec.js
index e4234b186..815d909c6 100644
--- a/assets/tests/template/template-calendar.spec.js
+++ b/assets/tests/template/template-calendar.spec.js
@@ -1,8 +1,10 @@
import { test, expect } from "@playwright/test";
-// Fixed time since calendar template filters events older than now.
+// Fixed time since the calendar template filters events older than now.
const fixTime = async (page) => {
const newDate = new Date();
+ newDate.setMonth(8);
+ newDate.setDate(15);
newDate.setHours(6);
newDate.setMinutes(0);
await page.clock.install({ time: newDate });
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
index efb2d29e8..a8471c4e0 100644
--- a/docker-compose.override.yml
+++ b/docker-compose.override.yml
@@ -36,7 +36,7 @@ services:
playwright:
# https://playwright.dev/docs/docker
# This Playwright version should match the one in `package.json`.
- image: mcr.microsoft.com/playwright:v1.53.2
+ image: mcr.microsoft.com/playwright:v1.57.0
networks:
- app
depends_on:
diff --git a/package-lock.json b/package-lock.json
index d959cccb0..2ae4c9f68 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,9 +12,12 @@
"@fortawesome/fontawesome-svg-core": "^1.2.35",
"@fortawesome/free-solid-svg-icons": "^5.15.3",
"@fortawesome/react-fontawesome": "^0.2.2",
- "@hello-pangea/dnd": "^16.0.0",
+ "@hello-pangea/dnd": "^18.0.0",
"@popperjs/core": "^2.11.8",
"@reduxjs/toolkit": "^2.8.2",
+ "@tiptap/pm": "^3.14.0",
+ "@tiptap/react": "^3.14.0",
+ "@tiptap/starter-kit": "^3.14.0",
"@u-wave/react-vimeo": "^0.9.11",
"@vitejs/plugin-react-oxc": "^0.3.0",
"bootstrap": "^5.3.7",
@@ -25,11 +28,6 @@
"html-react-parser": "^1.3.0",
"i18next": "^21.6.14",
"jwt-decode": "^3.1.2",
- "lodash.clonedeep": "^4.5.0",
- "lodash.get": "^4.4.2",
- "lodash.last": "^3.0.0",
- "lodash.set": "^4.3.2",
- "lodash.uniqwith": "^4.5.0",
"pino": "^9.1.0",
"qrcode": "^1.5.4",
"query-string": "^7.1.1",
@@ -43,8 +41,7 @@
"react-intl": "^5.20.2",
"react-multi-select-component": "^4.3.4",
"react-paginate": "^8.1.3",
- "react-quill": "^2.0.0",
- "react-redux": "^7.2.5",
+ "react-redux": "^9.2.0",
"react-router": "^5.2.0",
"react-router-dom": "^6.2.1",
"react-select": "^5.2.2",
@@ -58,7 +55,7 @@
"ulid": "^2.3.0"
},
"devDependencies": {
- "@playwright/test": "1.53.2",
+ "@playwright/test": "1.57.0",
"@rtk-query/codegen-openapi": "^2.0.0",
"@vitejs/plugin-react": "^4.6.0",
"esbuild": "^0.25.8",
@@ -1263,67 +1260,20 @@
}
},
"node_modules/@hello-pangea/dnd": {
- "version": "16.6.0",
- "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-16.6.0.tgz",
- "integrity": "sha512-vfZ4GydqbtUPXSLfAvKvXQ6xwRzIjUSjVU0Sx+70VOhc2xx6CdmJXJ8YhH70RpbTUGjxctslQTHul9sIOxCfFQ==",
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-18.0.1.tgz",
+ "integrity": "sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ==",
"license": "Apache-2.0",
"dependencies": {
- "@babel/runtime": "^7.24.1",
+ "@babel/runtime": "^7.26.7",
"css-box-model": "^1.2.1",
- "memoize-one": "^6.0.0",
"raf-schd": "^4.0.3",
- "react-redux": "^8.1.3",
- "redux": "^4.2.1",
- "use-memo-one": "^1.1.3"
+ "react-redux": "^9.2.0",
+ "redux": "^5.0.1"
},
"peerDependencies": {
- "react": "^16.8.5 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@hello-pangea/dnd/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "license": "MIT"
- },
- "node_modules/@hello-pangea/dnd/node_modules/react-redux": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz",
- "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.12.1",
- "@types/hoist-non-react-statics": "^3.3.1",
- "@types/use-sync-external-store": "^0.0.3",
- "hoist-non-react-statics": "^3.3.2",
- "react-is": "^18.0.0",
- "use-sync-external-store": "^1.0.0"
- },
- "peerDependencies": {
- "@types/react": "^16.8 || ^17.0 || ^18.0",
- "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
- "react": "^16.8 || ^17.0 || ^18.0",
- "react-dom": "^16.8 || ^17.0 || ^18.0",
- "react-native": ">=0.59",
- "redux": "^4 || ^5.0.0-beta.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- },
- "react-native": {
- "optional": true
- },
- "redux": {
- "optional": true
- }
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
@@ -1741,13 +1691,13 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.53.2",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.53.2.tgz",
- "integrity": "sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==",
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz",
+ "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.53.2"
+ "playwright": "1.57.0"
},
"bin": {
"playwright": "cli.js"
@@ -1799,12 +1749,6 @@
}
}
},
- "node_modules/@reduxjs/toolkit/node_modules/redux": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
- "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
- "license": "MIT"
- },
"node_modules/@reduxjs/toolkit/node_modules/redux-thunk": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
@@ -1814,6 +1758,12 @@
"redux": "^5.0.0"
}
},
+ "node_modules/@remirror/core-constants": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz",
+ "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
+ "license": "MIT"
+ },
"node_modules/@remix-run/router": {
"version": "1.23.0",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz",
@@ -2405,6 +2355,440 @@
"@svgr/core": "*"
}
},
+ "node_modules/@tiptap/core": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.14.0.tgz",
+ "integrity": "sha512-nm0VWVA1Vq/jaKY3wyRXViL/kf78yMdH7qETpv4qZXDQLU+pdWV3IGoRTQTKESc7d8L1wL/2uCeByLNUJfrSIw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-blockquote": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.14.0.tgz",
+ "integrity": "sha512-I7aOqcVLHBgCeRtMaMHA+ILSS8Sli46fjFq8477stOpQ79TPiBd6e4SDuFCAu58M94mVLMvlPKF2Eh5IvbIMyQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-bold": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.14.0.tgz",
+ "integrity": "sha512-T4ma6VLoHm9JupglidD3CfZXm89A3HMv99gLplXNizvy1mlr4R3uC3aBqKw6lAP+NoqCqbIgjwc4YYsqZClNwA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-bubble-menu": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.14.0.tgz",
+ "integrity": "sha512-nraHy+5jumT67J7hWrCuVwVTS2vNj4FpV5kO8epVySBmgEBr/7Pyi4w7mQA1VRVOMdjeN9iypbgQ2rKhpfaoTw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-bullet-list": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.14.0.tgz",
+ "integrity": "sha512-luqPX4u52hiOAHJ95mYsNE+x+9dZxsM461Xny9d/eTXLjAcnwS7MghjrnpljvyYsSXNiwQtxUyEr4uEZZJ5gIQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-list": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-code": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.14.0.tgz",
+ "integrity": "sha512-Sx9yLorzS+oqNmXID4jt0G5tDnsEgU0HtEXPLD3KNt/ltVxWJU0AXwCsp1/Dg0HIDL868vWpJ2jC1t/4oaf9kA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-code-block": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.14.0.tgz",
+ "integrity": "sha512-hRSdIhhm3Q9JBMQdKaifRVFnAa4sG+M7l1QcTKR3VSYVy2/oR0U+aiOifi5OvMRBUwhaR71Ro+cMT9FH9s26Kg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-document": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.14.0.tgz",
+ "integrity": "sha512-O3D7/GPB3XrWGy0y/b4LMHiY0eTd+dyIbSdiFtmUnbC/E9lqQLw43GiqvD9Gm6AyKhBA+Z45dKMbaOe1c6eTwQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-dropcursor": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.14.0.tgz",
+ "integrity": "sha512-IwHyiZKLjV9WSBlQFS+afMjucIML8wFAKkG8UKCu+CVOe/Qd1ImDGyv6rzPlCmefJkDHIUWS+c2STapJlUD1VQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extensions": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-floating-menu": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.14.0.tgz",
+ "integrity": "sha512-+ErwDF74NzX4JV0nXMSIUT9V8FDdo85r0SaBZ8lb2NLmElaA3LDklcNV7SsoKlRcwsAXtFkqQbDwXLNGQLYSPQ==",
+ "license": "MIT",
+ "optional": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@floating-ui/dom": "^1.0.0",
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-gapcursor": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.14.0.tgz",
+ "integrity": "sha512-hMg2U59+c9FreYtTvzxx5GWKejdZLRITMLEu4OTfrgQok6uF4qkzGEEqmYqPiHk08TBqAg18Y5bbpyqTsuit9A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extensions": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-hard-break": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.14.0.tgz",
+ "integrity": "sha512-XKxr8usQp+kFevhDK6Ccmnq1CIkLmPClhKwbt7AClGLKLBtEVAS1qUgcmKudkw8cD8Q2/69twI37LXa23sfuLA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-heading": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.14.0.tgz",
+ "integrity": "sha512-4xpahSo3b1dN2nwA0XKXLQVz9nZ/vE443a/Y5QLWeXiu3v9wkcMs/5kQ5ysFeDZRBTfVUWBqhngI7zhvDUx2zQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-horizontal-rule": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.14.0.tgz",
+ "integrity": "sha512-65O4T9vPKLUKO1fLowh5jqtfQlH5eaIL7qb/uj5sXMMg8O7TCvBIRkwNuYsFTkJmTk4vBy+fjZ0uwSY3DFkO1g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-italic": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.14.0.tgz",
+ "integrity": "sha512-Arl5EaG4wdyipwvKjsI7Krlk3OkmqvLfF0YfGwsd5AVDxTiYuiDGgz7RF8J2kttbBeiUTqwME5xpkryQK3F+fg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-link": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.14.0.tgz",
+ "integrity": "sha512-xaeJIktD42rJ4t9fbQpKe+yYNZ+YFIK96cp1Kdm0hZHv/8MPMNRiF85TRY+9U1aoyh5uRcspgCj7EKQb2Hs7qg==",
+ "license": "MIT",
+ "dependencies": {
+ "linkifyjs": "^4.3.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-list": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.14.0.tgz",
+ "integrity": "sha512-rsjFH0Vd/4UbDsjwMLay7oz72VVu1r35t8ofAzy5587jn5JAjflaZs05XbRRMD2imUTK41dyajVSh8CqSnDEJw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-list-item": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.14.0.tgz",
+ "integrity": "sha512-19Dcp8HCFdhINmRy0KQLFfz9ZEuVwFWGAAjYG7BvMvkd9k4sJ5vCv5fej59G99rhsc+tCmik77w+SLksOcxwKQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-list": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-list-keymap": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.14.0.tgz",
+ "integrity": "sha512-1oPbvNnQjeOxkHZcUbWPx/IY9o4fT3QGk/9A9cIjFrJRD2AHzbYfPDHNHINtg7Bj0jWz74cHvAHcaxP+M27jkA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-list": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-ordered-list": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.14.0.tgz",
+ "integrity": "sha512-/fXjVL4JajkJQoc213iiput0bCXC4ztUPUpvNuI62VcgFKHcTvX4eYxED1VflotCx0OdkyY9yYD8PtvyO5lkmA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-list": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-paragraph": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.14.0.tgz",
+ "integrity": "sha512-NFxk2yNo3Cvh9g8evea+yTLNV48se7MbMcVizTnVhobqtBKv793qsb5FM5Hu30Y72FQPNfH+LRoap4XZyBPfVw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-strike": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.14.0.tgz",
+ "integrity": "sha512-R8BbAhnWpisBml6okMKl98hY4tJjedTTgyTkx8tPabIJ92nS9IURKEk3foWB9uHxdTOBUqTvVT+2ScDf9r6QHg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-text": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.14.0.tgz",
+ "integrity": "sha512-XlpnD87LQ7lLcDcBenHgzxv3uivQzPdVHM16CY4lXR4aKDIp2mxjPZr4twHT+cOnRQHc8VYpRgkEo6LLX6VylA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extension-underline": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.14.0.tgz",
+ "integrity": "sha512-zmnWlsi2g/tMlThHby0Je9O+v24j4d+qcXF3nuzLUUaDsGCEtOyC9RzwITft59ViK+Nc2PD2W/J14rsB0j+qoQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/extensions": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.14.0.tgz",
+ "integrity": "sha512-qQBVKqzU4ZVjRn8W0UbdfE4LaaIgcIWHOMrNnJ+PutrRzQ6ZzhmD/kRONvRWBfG9z3DU7pSKGwVYSR2hztsGuQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ }
+ },
+ "node_modules/@tiptap/pm": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.14.0.tgz",
+ "integrity": "sha512-xrZmqI5jl4yMeAsu8p8gVP9S3An5h2MBi8BQHNnZmpyzkUrlpd40vlT6u13SWIqVi5ZWhBZ6U3rL7mkVLZuRKg==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-changeset": "^2.3.0",
+ "prosemirror-collab": "^1.3.1",
+ "prosemirror-commands": "^1.6.2",
+ "prosemirror-dropcursor": "^1.8.1",
+ "prosemirror-gapcursor": "^1.3.2",
+ "prosemirror-history": "^1.4.1",
+ "prosemirror-inputrules": "^1.4.0",
+ "prosemirror-keymap": "^1.2.2",
+ "prosemirror-markdown": "^1.13.1",
+ "prosemirror-menu": "^1.2.4",
+ "prosemirror-model": "^1.24.1",
+ "prosemirror-schema-basic": "^1.2.3",
+ "prosemirror-schema-list": "^1.5.0",
+ "prosemirror-state": "^1.4.3",
+ "prosemirror-tables": "^1.6.4",
+ "prosemirror-trailing-node": "^3.0.0",
+ "prosemirror-transform": "^1.10.2",
+ "prosemirror-view": "^1.38.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ }
+ },
+ "node_modules/@tiptap/react": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.14.0.tgz",
+ "integrity": "sha512-Eo/nLyKxHvnLIF4gI2WFhGJiVrqfA6XL9kismVG9NwBNF/NblMDmZZu6Z2SH/ONJQz2Egn7UBPNp3BMq/qZDcg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/use-sync-external-store": "^0.0.6",
+ "fast-equals": "^5.3.3",
+ "use-sync-external-store": "^1.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "optionalDependencies": {
+ "@tiptap/extension-bubble-menu": "^3.14.0",
+ "@tiptap/extension-floating-menu": "^3.14.0"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/pm": "^3.14.0",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@tiptap/starter-kit": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.14.0.tgz",
+ "integrity": "sha512-fHsC4oDVzvMU9btg+IUmu/eqPquapjJ341qaNI7cCeSCKjjE6XJEN6WcONLAVId2OZUwML0IX1Jgl+6gJxU9Jw==",
+ "license": "MIT",
+ "dependencies": {
+ "@tiptap/core": "^3.14.0",
+ "@tiptap/extension-blockquote": "^3.14.0",
+ "@tiptap/extension-bold": "^3.14.0",
+ "@tiptap/extension-bullet-list": "^3.14.0",
+ "@tiptap/extension-code": "^3.14.0",
+ "@tiptap/extension-code-block": "^3.14.0",
+ "@tiptap/extension-document": "^3.14.0",
+ "@tiptap/extension-dropcursor": "^3.14.0",
+ "@tiptap/extension-gapcursor": "^3.14.0",
+ "@tiptap/extension-hard-break": "^3.14.0",
+ "@tiptap/extension-heading": "^3.14.0",
+ "@tiptap/extension-horizontal-rule": "^3.14.0",
+ "@tiptap/extension-italic": "^3.14.0",
+ "@tiptap/extension-link": "^3.14.0",
+ "@tiptap/extension-list": "^3.14.0",
+ "@tiptap/extension-list-item": "^3.14.0",
+ "@tiptap/extension-list-keymap": "^3.14.0",
+ "@tiptap/extension-ordered-list": "^3.14.0",
+ "@tiptap/extension-paragraph": "^3.14.0",
+ "@tiptap/extension-strike": "^3.14.0",
+ "@tiptap/extension-text": "^3.14.0",
+ "@tiptap/extension-underline": "^3.14.0",
+ "@tiptap/extensions": "^3.14.0",
+ "@tiptap/pm": "^3.14.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ }
+ },
"node_modules/@tybys/wasm-util": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
@@ -2492,6 +2876,28 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "license": "MIT"
+ },
"node_modules/@types/parse-json": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
@@ -2504,35 +2910,23 @@
"integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
"license": "MIT"
},
- "node_modules/@types/quill": {
- "version": "1.3.10",
- "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz",
- "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==",
- "license": "MIT",
- "dependencies": {
- "parchment": "^1.1.2"
- }
- },
"node_modules/@types/react": {
- "version": "18.3.23",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
- "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
+ "version": "19.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
+ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
"license": "MIT",
"dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.0.2"
+ "csstype": "^3.2.2"
}
},
- "node_modules/@types/react-redux": {
- "version": "7.1.34",
- "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz",
- "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==",
+ "node_modules/@types/react-dom": {
+ "version": "19.2.3",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
+ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
"license": "MIT",
- "dependencies": {
- "@types/hoist-non-react-statics": "^3.3.0",
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0",
- "redux": "^4.0.0"
+ "peer": true,
+ "peerDependencies": {
+ "@types/react": "^19.2.0"
}
},
"node_modules/@types/react-transition-group": {
@@ -2552,9 +2946,9 @@
"optional": true
},
"node_modules/@types/use-sync-external-store": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
- "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==",
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
"license": "MIT"
},
"node_modules/@types/vimeo__player": {
@@ -2699,7 +3093,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
"license": "Python-2.0"
},
"node_modules/atomic-sleep": {
@@ -3062,6 +3455,12 @@
"node": ">= 6"
}
},
+ "node_modules/crelt": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+ "license": "MIT"
+ },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
@@ -3098,9 +3497,9 @@
}
},
"node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
"license": "MIT"
},
"node_modules/d3-array": {
@@ -3648,18 +4047,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/eventemitter3": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
- "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==",
- "license": "MIT"
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "license": "MIT"
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3667,11 +4054,14 @@
"dev": true,
"license": "MIT"
},
- "node_modules/fast-diff": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
- "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==",
- "license": "Apache-2.0"
+ "node_modules/fast-equals": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz",
+ "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
"node_modules/fast-glob": {
"version": "3.3.3",
@@ -4308,9 +4698,9 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4606,6 +4996,21 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"license": "MIT"
},
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
+ "node_modules/linkifyjs": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz",
+ "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==",
+ "license": "MIT"
+ },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -4631,37 +5036,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "license": "MIT"
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.",
- "license": "MIT"
- },
- "node_modules/lodash.last": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz",
- "integrity": "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==",
- "license": "MIT"
- },
- "node_modules/lodash.set": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
- "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==",
- "license": "MIT"
- },
- "node_modules/lodash.uniqwith": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz",
- "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==",
- "license": "MIT"
- },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -4693,6 +5067,35 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/markdown-it": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
+ "node_modules/markdown-it/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -4702,6 +5105,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "license": "MIT"
+ },
"node_modules/memoize-one": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
@@ -5148,6 +5557,12 @@
"license": "MIT",
"peer": true
},
+ "node_modules/orderedmap": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz",
+ "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==",
+ "license": "MIT"
+ },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -5190,12 +5605,6 @@
"integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
"license": "MIT"
},
- "node_modules/parchment": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
- "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==",
- "license": "BSD-3-Clause"
- },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -5336,13 +5745,13 @@
"license": "MIT"
},
"node_modules/playwright": {
- "version": "1.53.2",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.2.tgz",
- "integrity": "sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==",
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
+ "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.53.2"
+ "playwright-core": "1.57.0"
},
"bin": {
"playwright": "cli.js"
@@ -5355,9 +5764,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.53.2",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.2.tgz",
- "integrity": "sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==",
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz",
+ "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5492,6 +5901,210 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
+ "node_modules/prosemirror-changeset": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz",
+ "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-transform": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-collab": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz",
+ "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-commands": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz",
+ "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.10.2"
+ }
+ },
+ "node_modules/prosemirror-dropcursor": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz",
+ "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.1.0",
+ "prosemirror-view": "^1.1.0"
+ }
+ },
+ "node_modules/prosemirror-gapcursor": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.0.tgz",
+ "integrity": "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-keymap": "^1.0.0",
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-view": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-history": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz",
+ "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.2.2",
+ "prosemirror-transform": "^1.0.0",
+ "prosemirror-view": "^1.31.0",
+ "rope-sequence": "^1.3.0"
+ }
+ },
+ "node_modules/prosemirror-inputrules": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz",
+ "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-keymap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz",
+ "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-state": "^1.0.0",
+ "w3c-keyname": "^2.2.0"
+ }
+ },
+ "node_modules/prosemirror-markdown": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz",
+ "integrity": "sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/markdown-it": "^14.0.0",
+ "markdown-it": "^14.0.0",
+ "prosemirror-model": "^1.25.0"
+ }
+ },
+ "node_modules/prosemirror-menu": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz",
+ "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "crelt": "^1.0.0",
+ "prosemirror-commands": "^1.0.0",
+ "prosemirror-history": "^1.0.0",
+ "prosemirror-state": "^1.0.0"
+ }
+ },
+ "node_modules/prosemirror-model": {
+ "version": "1.25.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz",
+ "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==",
+ "license": "MIT",
+ "dependencies": {
+ "orderedmap": "^2.0.0"
+ }
+ },
+ "node_modules/prosemirror-schema-basic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz",
+ "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.25.0"
+ }
+ },
+ "node_modules/prosemirror-schema-list": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz",
+ "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.7.3"
+ }
+ },
+ "node_modules/prosemirror-state": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz",
+ "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-transform": "^1.0.0",
+ "prosemirror-view": "^1.27.0"
+ }
+ },
+ "node_modules/prosemirror-tables": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.3.tgz",
+ "integrity": "sha512-wbqCR/RlRPRe41a4LFtmhKElzBEfBTdtAYWNIGHM6X2e24NN/MTNUKyXjjphfAfdQce37Kh/5yf765mLPYDe7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-keymap": "^1.2.3",
+ "prosemirror-model": "^1.25.4",
+ "prosemirror-state": "^1.4.4",
+ "prosemirror-transform": "^1.10.5",
+ "prosemirror-view": "^1.41.4"
+ }
+ },
+ "node_modules/prosemirror-trailing-node": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz",
+ "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remirror/core-constants": "3.0.0",
+ "escape-string-regexp": "^4.0.0"
+ },
+ "peerDependencies": {
+ "prosemirror-model": "^1.22.1",
+ "prosemirror-state": "^1.4.2",
+ "prosemirror-view": "^1.33.8"
+ }
+ },
+ "node_modules/prosemirror-transform": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.5.tgz",
+ "integrity": "sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.21.0"
+ }
+ },
+ "node_modules/prosemirror-view": {
+ "version": "1.41.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.4.tgz",
+ "integrity": "sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==",
+ "license": "MIT",
+ "dependencies": {
+ "prosemirror-model": "^1.20.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.1.0"
+ }
+ },
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/qrcode": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz",
@@ -5554,43 +6167,6 @@
"integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
"license": "MIT"
},
- "node_modules/quill": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
- "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "clone": "^2.1.1",
- "deep-equal": "^1.0.1",
- "eventemitter3": "^2.0.3",
- "extend": "^3.0.2",
- "parchment": "^1.1.4",
- "quill-delta": "^3.6.2"
- }
- },
- "node_modules/quill-delta": {
- "version": "3.6.3",
- "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
- "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
- "license": "MIT",
- "dependencies": {
- "deep-equal": "^1.0.1",
- "extend": "^3.0.2",
- "fast-diff": "1.1.2"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/quill/node_modules/clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/raf": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
@@ -5752,6 +6328,16 @@
}
}
},
+ "node_modules/react-intl/node_modules/@types/react": {
+ "version": "18.3.27",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz",
+ "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.2.2"
+ }
+ },
"node_modules/react-is": {
"version": "19.1.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
@@ -5813,52 +6399,29 @@
"integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==",
"license": "MIT"
},
- "node_modules/react-quill": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz",
- "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==",
- "license": "MIT",
- "dependencies": {
- "@types/quill": "^1.3.10",
- "lodash": "^4.17.4",
- "quill": "^1.3.7"
- },
- "peerDependencies": {
- "react": "^16 || ^17 || ^18",
- "react-dom": "^16 || ^17 || ^18"
- }
- },
"node_modules/react-redux": {
- "version": "7.2.9",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz",
- "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+ "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.15.4",
- "@types/react-redux": "^7.1.20",
- "hoist-non-react-statics": "^3.3.2",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2"
+ "@types/use-sync-external-store": "^0.0.6",
+ "use-sync-external-store": "^1.4.0"
},
"peerDependencies": {
- "react": "^16.8.3 || ^17 || ^18"
+ "@types/react": "^18.2.25 || ^19",
+ "react": "^18.0 || ^19",
+ "redux": "^5.0.0"
},
"peerDependenciesMeta": {
- "react-dom": {
+ "@types/react": {
"optional": true
},
- "react-native": {
+ "redux": {
"optional": true
}
}
},
- "node_modules/react-redux/node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "license": "MIT"
- },
"node_modules/react-refresh": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
@@ -6028,13 +6591,10 @@
}
},
"node_modules/redux": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
- "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.9.2"
- }
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+ "license": "MIT"
},
"node_modules/reftools": {
"version": "1.1.9",
@@ -6195,6 +6755,12 @@
"integrity": "sha512-whXaSoNUFiyDAjkUF8OBpOm77Szdbk5lGNqFe6CbVbJFrhCCPinCbRA3NjawwlNHla1No7xvXXh+CpSxnPfUEw==",
"license": "MIT"
},
+ "node_modules/rope-sequence": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz",
+ "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==",
+ "license": "MIT"
+ },
"node_modules/rrule": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/rrule/-/rrule-2.8.1.tgz",
@@ -6879,6 +7445,12 @@
"node": ">=4.2.0"
}
},
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "license": "MIT"
+ },
"node_modules/ulid": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/ulid/-/ulid-2.4.0.tgz",
@@ -6967,19 +7539,10 @@
}
}
},
- "node_modules/use-memo-one": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz",
- "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==",
- "license": "MIT",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/use-sync-external-store": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
- "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
"license": "MIT",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -7146,6 +7709,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/w3c-keyname": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+ "license": "MIT"
+ },
"node_modules/warning": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
diff --git a/package.json b/package.json
index 0c7f7692a..dc9054b1a 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,7 @@
"build": "vite build"
},
"devDependencies": {
- "@playwright/test": "1.53.2",
+ "@playwright/test": "1.57.0",
"@rtk-query/codegen-openapi": "^2.0.0",
"@vitejs/plugin-react": "^4.6.0",
"esbuild": "^0.25.8",
@@ -24,9 +24,12 @@
"@fortawesome/fontawesome-svg-core": "^1.2.35",
"@fortawesome/free-solid-svg-icons": "^5.15.3",
"@fortawesome/react-fontawesome": "^0.2.2",
- "@hello-pangea/dnd": "^16.0.0",
+ "@hello-pangea/dnd": "^18.0.0",
"@popperjs/core": "^2.11.8",
"@reduxjs/toolkit": "^2.8.2",
+ "@tiptap/pm": "^3.14.0",
+ "@tiptap/react": "^3.14.0",
+ "@tiptap/starter-kit": "^3.14.0",
"@u-wave/react-vimeo": "^0.9.11",
"@vitejs/plugin-react-oxc": "^0.3.0",
"bootstrap": "^5.3.7",
@@ -37,11 +40,6 @@
"html-react-parser": "^1.3.0",
"i18next": "^21.6.14",
"jwt-decode": "^3.1.2",
- "lodash.clonedeep": "^4.5.0",
- "lodash.get": "^4.4.2",
- "lodash.last": "^3.0.0",
- "lodash.set": "^4.3.2",
- "lodash.uniqwith": "^4.5.0",
"pino": "^9.1.0",
"qrcode": "^1.5.4",
"query-string": "^7.1.1",
@@ -55,8 +53,7 @@
"react-intl": "^5.20.2",
"react-multi-select-component": "^4.3.4",
"react-paginate": "^8.1.3",
- "react-quill": "^2.0.0",
- "react-redux": "^7.2.5",
+ "react-redux": "^9.2.0",
"react-router": "^5.2.0",
"react-router-dom": "^6.2.1",
"react-select": "^5.2.2",