diff --git a/src/app/listener.middleware/handler.dm.msg.js b/src/app/listener.middleware/handler.dm.msg.js index ca9d7492..aa4913fe 100644 --- a/src/app/listener.middleware/handler.dm.msg.js +++ b/src/app/listener.middleware/handler.dm.msg.js @@ -13,6 +13,16 @@ export default async function handler({ operation, data = {}, payload }) { await table.setItem(id + "", data.byId[id]); } break; + case "removeUserSession": + { + const ids = Array.isArray(payload) ? payload : [payload]; + await Promise.all( + ids.map(async (id) => { + await table.removeItem(id + ""); + }) + ); + } + break; default: break; } diff --git a/src/app/services/base.query.js b/src/app/services/base.query.js index 72717f41..3b09165e 100644 --- a/src/app/services/base.query.js +++ b/src/app/services/base.query.js @@ -10,14 +10,14 @@ const whiteList = [ "getServer", "getOpenid", "getMetamaskNonce", + "renew", ]; const baseQuery = fetchBaseQuery({ baseUrl: BASE_URL, prepareHeaders: (headers, { getState, endpoint }) => { console.log("req", endpoint); const { token } = getState().authData; - const noHeaderList = [...whiteList, "renew"]; - if (token && !noHeaderList.includes(endpoint)) { + if (token && !whiteList.includes(endpoint)) { headers.set(tokenHeader, token); } return headers; diff --git a/src/app/services/message.js b/src/app/services/message.js index 5be3505a..55737629 100644 --- a/src/app/services/message.js +++ b/src/app/services/message.js @@ -1,7 +1,7 @@ import { createApi } from "@reduxjs/toolkit/query/react"; // import { batch } from "react-redux"; -import { ContentTypes } from "../config"; +import BASE_URL, { ContentTypes } from "../config"; import { updateReadChannels, updateReadUsers } from "../slices/footprint"; import { onMessageSendStarted } from "./handlers"; @@ -38,6 +38,19 @@ export const messageApi = createApi({ method: "DELETE", }), }), + uploadImage: builder.mutation({ + query: (image) => ({ + headers: { + "content-type": ContentTypes.image, + }, + url: `/resource/image`, + method: "POST", + body: image, + }), + transformResponse: (image_id) => { + return `${BASE_URL}/resource/image?id=${encodeURIComponent(image_id)}`; + }, + }), replyMessage: builder.mutation({ query: ({ reply_mid, content, type = "text" }) => ({ headers: { @@ -89,6 +102,7 @@ export const messageApi = createApi({ }); export const { + useUploadImageMutation, useEditMessageMutation, useReactMessageMutation, useReplyMessageMutation, diff --git a/src/app/slices/message.user.js b/src/app/slices/message.user.js index e8cd193b..898649bb 100644 --- a/src/app/slices/message.user.js +++ b/src/app/slices/message.user.js @@ -38,9 +38,19 @@ const userMsgSlice = createSlice({ } } }, + removeUserSession(state, action) { + const ids = Array.isArray(action.payload) + ? action.payload + : [action.payload]; + state.ids = state.ids.filter((id) => ids.findIndex((i) => i == id) == -1); + // ids.forEach((id) => { + // delete state.byId[id]; + // }); + }, }, }); export const { + removeUserSession, resetUserMsg, fullfillUserMsg, addUserMsg, diff --git a/src/common/component/ChannelSetting/DeleteConfirmModal.js b/src/common/component/ChannelSetting/DeleteConfirmModal.js index ab26de91..3a7918ae 100644 --- a/src/common/component/ChannelSetting/DeleteConfirmModal.js +++ b/src/common/component/ChannelSetting/DeleteConfirmModal.js @@ -33,7 +33,7 @@ export default function DeleteConfirmModal({ id, closeModal }) { buttons={ <> {" "} - + diff --git a/src/common/component/ContextMenu.js b/src/common/component/ContextMenu.js index a646bc9c..0d45d8b3 100644 --- a/src/common/component/ContextMenu.js +++ b/src/common/component/ContextMenu.js @@ -1,23 +1,9 @@ -import { useRef } from "react"; -import styled from "styled-components"; -import { useOutsideClick } from "rooks"; -import StyledMenu from "./StyledMenu"; -const StyledWrapper = styled(StyledMenu)` - z-index: 999; - position: fixed; - left: ${({ x }) => `${x}px`}; - top: ${({ y }) => `${y}px`}; -`; -export default function ContextMenu({ - posX = 0, - posY = 0, - items = [], - hideMenu, -}) { - const wrapperRef = useRef(null); - useOutsideClick(wrapperRef, hideMenu); +// import { useRef } from "react"; +// import styled from "styled-components"; +import StyledMenu from "./styled/Menu"; +export default function ContextMenu({ items = [], hideMenu }) { return ( - + {items.map((item) => { if (!item) return null; const { @@ -44,6 +30,6 @@ export default function ContextMenu({ ); })} - + ); } diff --git a/src/common/component/ManageMembers.js b/src/common/component/ManageMembers.js index 4d5f0e2c..899e125d 100644 --- a/src/common/component/ManageMembers.js +++ b/src/common/component/ManageMembers.js @@ -9,7 +9,7 @@ import useCopy from "../hook/useCopy"; import { useLazyDeleteContactQuery } from "../../app/services/contact"; import { useRemoveMembersMutation } from "../../app/services/channel"; import Contact from "./Contact"; -import StyledMenu from "./StyledMenu"; +import StyledMenu from "./styled/Menu"; import InviteLink from "./InviteLink"; import moreIcon from "../../assets/icons/more.svg?url"; const StyledWrapper = styled.section` diff --git a/src/common/component/Message/Commands.js b/src/common/component/Message/Commands.js index 0859af6f..3a03a9ad 100644 --- a/src/common/component/Message/Commands.js +++ b/src/common/component/Message/Commands.js @@ -5,7 +5,7 @@ import Tippy from "@tippyjs/react"; import { hideAll } from "tippy.js"; // import toast from "react-hot-toast"; import { addReplyingMessage } from "../../../app/slices/message"; -import StyledMenu from "../StyledMenu"; +import StyledMenu from "../styled/Menu"; import DeleteMessageConfirm from "./DeleteMessageConfirm"; import EmojiPicker from "./EmojiPicker"; import replyIcon from "../../../assets/icons/reply.svg?url"; @@ -108,7 +108,7 @@ export default function Commands({ onShow={handleTippyVisible.bind(null, true)} onHide={handleTippyVisible.bind(null, false)} interactive - placement="right-start" + placement="left-start" trigger="click" content={ diff --git a/src/common/component/MrakdownRender.js b/src/common/component/MrakdownRender.js index e8cb9294..976454a2 100644 --- a/src/common/component/MrakdownRender.js +++ b/src/common/component/MrakdownRender.js @@ -1,153 +1,70 @@ -// import React from 'react' -import ReactMarkdown from "react-markdown"; +import { useEffect, useState } from "react"; +import showdown from "showdown"; import styled from "styled-components"; const Styled = styled.div` - font-family: "Helvetica Neue", sans; - background: transparent; - color: #222; - line-height: 1.5; - font-size: 16px; - font-weight: 300; - img { - margin: 0; - border: 0; - } - p { - margin: 1em 0; + font-weight: 400; + font-size: 14px; + line-height: 22px; + color: #475467; } - - a { - color: #00213d; + ul { + list-style-type: disc; } - - a:visited { - color: #00213d; - background-color: transparent; - } - - a:active { - color: #318100; - background-color: transparent; - } - - a:hover { - text-decoration: none; - } - - p img { - border: 0; - margin: 0; - } - - h1, - h2, - h3, - h4, - h5, - h6 { - color: #003a6b; - background-color: transparent; - margin: 1em 0; - font-weight: normal; - } - - h1 { - font-size: 180%; - font-weight: bold; - } - - h2 { - font-size: 160%; - } - - h3 { - font-size: 140%; - } - - h4 { - font-size: 110%; - } - - h5 { - font-size: 105%; - } - - h6 { - font-size: 100%; - } - - dt { + i, + em { + /* padding: 0 2px; */ font-style: italic; } - - dd { - margin-bottom: 1.5em; - } - - li { - line-height: 1.5em; - } - - code { - padding: 0.1em; + ul, + ol { + font-weight: 400; font-size: 14px; - font-family: "Menlo", monospace; - background-color: #f5f5f5; - border: 1px solid #efefef; + line-height: 20px; + color: #475467; + list-style-position: inside; } - - pre { - font-family: "Menlo", monospace; - background-color: #fff; - padding: 0.5em; - line-height: 1.25em; - border: 1px solid #efefef; - border-bottom: 1px solid #ddd; - -webkit-box-shadow: 0 1px 3px 0 #eee; - -moz-box-shadow: 0 1px 3px 0 #eee; - -ms-box-shadow: 0 1px 3px 0 #eee; - box-shadow: 0 1px 3px 0 #eee; + strong { + font-weight: 700; } - - pre code { - background-color: transparent; - border-width: 0; + h1, + h2, + h3 { + font-weight: 700; + color: #475467; + } + h1 { + font-size: 24px; + line-height: 32px; + } + h2 { + font-size: 20px; + line-height: 30px; + } + h3 { + font-size: 16px; + line-height: 24px; } - blockquote { - border-top: 1px solid #efefef; - border-bottom: 1px solid #ddd; - -webkit-box-shadow: 0 1px 3px 0 #eee; - -moz-box-shadow: 0 1px 3px 0 #eee; - -ms-box-shadow: 0 1px 3px 0 #eee; - box-shadow: 0 1px 3px 0 #eee; - } - - table { - border-collapse: collapse; - border: 1px solid #efefef; - border-bottom: 1px solid #ddd; - -webkit-box-shadow: 0 1px 3px 0 #eee; - -moz-box-shadow: 0 1px 3px 0 #eee; - -ms-box-shadow: 0 1px 3px 0 #eee; - box-shadow: 0 1px 3px 0 #eee; - } - - td, - th { - border: 1px solid #ddd; - padding: 0.5em; - } - - th { - background-color: #f5f5f5; + display: flex; + margin-bottom: 10px; + color: #98a2b3; + opacity: 0.8; + box-shadow: inset 2px 0px 0px #a8b0bd; + font-weight: 400; + font-size: 14px; + line-height: 20px; + padding: 16px; } `; export default function MrakdownRender({ content }) { - return ( - - {content} - - ); + const [html, setHtml] = useState(""); + useEffect(() => { + if (content) { + const converter = new showdown.Converter(); + setHtml(converter.makeHtml(content)); + } + }, [content]); + + return ; } diff --git a/src/common/component/RichEditor/autoformat/autoformatBlocks.js b/src/common/component/RichEditor/autoformat/autoformatBlocks.js new file mode 100644 index 00000000..abe565b6 --- /dev/null +++ b/src/common/component/RichEditor/autoformat/autoformatBlocks.js @@ -0,0 +1,89 @@ +import { + // AutoformatRule, + ELEMENT_BLOCKQUOTE, + ELEMENT_CODE_BLOCK, + ELEMENT_DEFAULT, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ELEMENT_HR, + getPluginType, + insertEmptyCodeBlock, + insertNodes, + // PlateEditor, + setNodes, +} from "@udecode/plate"; +import { preFormat } from "./autoformatUtils"; + +export const autoformatBlocks = [ + { + mode: "block", + type: ELEMENT_H1, + match: "# ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_H2, + match: "## ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_H3, + match: "### ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_H4, + match: "#### ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_H5, + match: "##### ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_H6, + match: "###### ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_BLOCKQUOTE, + match: "> ", + preFormat, + }, + { + mode: "block", + type: ELEMENT_CODE_BLOCK, + match: "```", + triggerAtBlockStart: false, + preFormat, + format: (editor) => { + insertEmptyCodeBlock(editor, { + defaultType: getPluginType(editor, ELEMENT_DEFAULT), + insertNodesOptions: { select: true }, + }); + }, + }, + { + mode: "block", + type: ELEMENT_HR, + match: ["---", "—-", "___ "], + format: (editor) => { + setNodes(editor, { type: ELEMENT_HR }); + insertNodes(editor, { + type: ELEMENT_DEFAULT, + children: [{ text: "" }], + }); + }, + }, +]; diff --git a/src/common/component/RichEditor/autoformat/autoformatLists.js b/src/common/component/RichEditor/autoformat/autoformatLists.js new file mode 100644 index 00000000..975869b4 --- /dev/null +++ b/src/common/component/RichEditor/autoformat/autoformatLists.js @@ -0,0 +1,47 @@ +import { + // AutoformatRule, + ELEMENT_LI, + ELEMENT_OL, + ELEMENT_TODO_LI, + ELEMENT_UL, + setNodes, + // TElement, + // TodoListItemNodeData, +} from "@udecode/plate"; +import { Editor } from "slate"; +import { formatList, preFormat } from "./autoformatUtils"; + +export const autoformatLists = [ + { + mode: "block", + type: ELEMENT_LI, + match: ["* ", "- "], + preFormat, + format: (editor) => formatList(editor, ELEMENT_UL), + }, + { + mode: "block", + type: ELEMENT_LI, + match: ["1. ", "1) "], + preFormat, + format: (editor) => formatList(editor, ELEMENT_OL), + }, + { + mode: "block", + type: ELEMENT_TODO_LI, + match: "[] ", + }, + { + mode: "block", + type: ELEMENT_TODO_LI, + match: "[x] ", + format: (editor) => + setNodes( + editor, + { type: ELEMENT_TODO_LI, checked: true }, + { + match: (n) => Editor.isBlock(editor, n), + } + ), + }, +]; diff --git a/src/common/component/RichEditor/autoformat/autoformatMarks.js b/src/common/component/RichEditor/autoformat/autoformatMarks.js new file mode 100644 index 00000000..ea6cfa31 --- /dev/null +++ b/src/common/component/RichEditor/autoformat/autoformatMarks.js @@ -0,0 +1,84 @@ +import { + // AutoformatRule, + MARK_BOLD, + MARK_CODE, + MARK_HIGHLIGHT, + MARK_ITALIC, + MARK_STRIKETHROUGH, + MARK_SUBSCRIPT, + MARK_SUPERSCRIPT, + MARK_UNDERLINE, +} from "@udecode/plate"; + +export const autoformatMarks = [ + { + mode: "mark", + type: [MARK_BOLD, MARK_ITALIC], + match: "***", + }, + { + mode: "mark", + type: [MARK_UNDERLINE, MARK_ITALIC], + match: "__*", + }, + { + mode: "mark", + type: [MARK_UNDERLINE, MARK_BOLD], + match: "__**", + }, + { + mode: "mark", + type: [MARK_UNDERLINE, MARK_BOLD, MARK_ITALIC], + match: "___***", + }, + { + mode: "mark", + type: MARK_BOLD, + match: "**", + }, + { + mode: "mark", + type: MARK_UNDERLINE, + match: "__", + }, + { + mode: "mark", + type: MARK_ITALIC, + match: "*", + }, + { + mode: "mark", + type: MARK_ITALIC, + match: "_", + }, + { + mode: "mark", + type: MARK_STRIKETHROUGH, + match: "~~", + }, + { + mode: "mark", + type: MARK_SUPERSCRIPT, + match: "^", + }, + { + mode: "mark", + type: MARK_SUBSCRIPT, + match: "~", + }, + { + mode: "mark", + type: MARK_HIGHLIGHT, + match: "==", + }, + { + mode: "mark", + type: MARK_HIGHLIGHT, + match: "≡", + }, + { + mode: "mark", + type: MARK_CODE, + match: "`", + }, +]; diff --git a/src/common/component/RichEditor/autoformat/autoformatRules.js b/src/common/component/RichEditor/autoformat/autoformatRules.js new file mode 100644 index 00000000..226f8725 --- /dev/null +++ b/src/common/component/RichEditor/autoformat/autoformatRules.js @@ -0,0 +1,23 @@ +import { + autoformatArrow, + autoformatLegal, + autoformatLegalHtml, + autoformatMath, + autoformatPunctuation, + autoformatSmartQuotes, +} from "@udecode/plate"; +import { autoformatBlocks } from "./autoformatBlocks"; +import { autoformatLists } from "./autoformatLists"; +import { autoformatMarks } from "./autoformatMarks"; + +export const autoformatRules = [ + ...autoformatBlocks, + ...autoformatLists, + ...autoformatMarks, + ...autoformatSmartQuotes, + ...autoformatPunctuation, + ...autoformatLegal, + ...autoformatLegalHtml, + ...autoformatArrow, + ...autoformatMath, +]; diff --git a/src/common/component/RichEditor/autoformat/autoformatUtils.js b/src/common/component/RichEditor/autoformat/autoformatUtils.js new file mode 100644 index 00000000..609feb56 --- /dev/null +++ b/src/common/component/RichEditor/autoformat/autoformatUtils.js @@ -0,0 +1,41 @@ +import { + // AutoformatBlockRule, + ELEMENT_CODE_BLOCK, + ELEMENT_CODE_LINE, + getParent, + isElement, + isType, + // PlateEditor, + // TEditor, + toggleList, + unwrapList, +} from "@udecode/plate"; + +export const preFormat = (editor) => unwrapList(editor); + +export const format = (editor, customFormatting) => { + if (editor.selection) { + const parentEntry = getParent(editor, editor.selection); + if (!parentEntry) return; + const [node] = parentEntry; + if ( + isElement(node) && + !isType(editor, node, ELEMENT_CODE_BLOCK) && + !isType(editor, node, ELEMENT_CODE_LINE) + ) { + customFormatting(); + } + } +}; + +export const formatList = (editor, elementType = "") => { + format(editor, () => + toggleList(editor, { + type: elementType, + }) + ); +}; + +export const formatText = (editor, text = "") => { + format(editor, () => editor.insertText(text)); +}; diff --git a/src/common/component/RichEditor/components/MarkBallonToolbar.js b/src/common/component/RichEditor/components/MarkBallonToolbar.js new file mode 100644 index 00000000..60635353 --- /dev/null +++ b/src/common/component/RichEditor/components/MarkBallonToolbar.js @@ -0,0 +1,54 @@ +import "tippy.js/animations/scale.css"; +import "tippy.js/dist/tippy.css"; +import IconQuestion from "../../../../assets/icons/question.svg"; +import { + BalloonToolbar, + getPluginType, + MARK_BOLD, + MARK_ITALIC, + MARK_UNDERLINE, + MarkToolbarButton, + usePlateEditorRef, +} from "@udecode/plate"; + +const MarkBallonToolbar = () => { + const editor = usePlateEditorRef(); + + const arrow = false; + const theme = "dark"; + const tooltip = { + arrow: true, + delay: 0, + duration: [200, 0], + hideOnClick: false, + offset: [0, 17], + placement: "top", + }; + + return ( + + } + tooltip={{ content: "Bold (⌘B)", ...tooltip }} + /> + } + tooltip={{ content: "Italic (⌘I)", ...tooltip }} + /> + } + tooltip={{ content: "Underline (⌘U)", ...tooltip }} + /> + + ); +}; +export default MarkBallonToolbar; diff --git a/src/common/component/RichEditor/components/withStyledPlaceHolders.js b/src/common/component/RichEditor/components/withStyledPlaceHolders.js new file mode 100644 index 00000000..f003faac --- /dev/null +++ b/src/common/component/RichEditor/components/withStyledPlaceHolders.js @@ -0,0 +1,19 @@ +import { + ELEMENT_H1, + ELEMENT_PARAGRAPH, + withPlaceholders, +} from "@udecode/plate"; + +export const withStyledPlaceHolders = (components) => + withPlaceholders(components, [ + { + key: ELEMENT_PARAGRAPH, + placeholder: "Type a paragraph", + hideOnBlur: true, + }, + { + key: ELEMENT_H1, + placeholder: "Untitled", + hideOnBlur: false, + }, + ]); diff --git a/src/common/component/RichEditor/config.js b/src/common/component/RichEditor/config.js new file mode 100644 index 00000000..02561130 --- /dev/null +++ b/src/common/component/RichEditor/config.js @@ -0,0 +1,180 @@ +import { + // AutoformatPlugin, + CodeBlockElement, + createPlateUI, + ELEMENT_BLOCKQUOTE, + ELEMENT_CODE_BLOCK, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ELEMENT_HR, + ELEMENT_IMAGE, + ELEMENT_PARAGRAPH, + ELEMENT_TD, + ELEMENT_TODO_LI, + // ExitBreakPlugin, + // IndentPlugin, + isBlockAboveEmpty, + isSelectionAtBlockStart, + KEYS_HEADING, + // NormalizeTypesPlugin, + // PlatePlugin, + // ResetNodePlugin, + // SelectOnBackspacePlugin, + // SoftBreakPlugin, + // TrailingBlockPlugin, + withProps, +} from "@udecode/plate"; +// import { EditableProps } from 'slate-react/dist/components/editable' +import { css } from "styled-components"; +import { autoformatRules } from "./autoformat/autoformatRules"; +// import { MENTIONABLES } from './mentionables' + +const resetBlockTypesCommonRule = { + types: [ELEMENT_BLOCKQUOTE, ELEMENT_TODO_LI], + defaultType: ELEMENT_PARAGRAPH, +}; + +export const CONFIG = { + editableProps: { + spellCheck: false, + autoFocus: true, + placeholder: "Type…", + }, + components: createPlateUI({ + [ELEMENT_CODE_BLOCK]: withProps(CodeBlockElement, { + styles: { + root: [ + css` + background-color: #111827; + code { + color: white; + } + `, + ], + }, + }), + }), + + align: { + inject: { + props: { + validTypes: [ + ELEMENT_PARAGRAPH, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ], + }, + }, + }, + indent: { + inject: { + props: { + validTypes: [ + ELEMENT_PARAGRAPH, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ELEMENT_BLOCKQUOTE, + ELEMENT_CODE_BLOCK, + ], + }, + }, + }, + lineHeight: { + inject: { + props: { + defaultNodeValue: 1.5, + validNodeValues: [1, 1.2, 1.5, 2, 3], + validTypes: [ + ELEMENT_PARAGRAPH, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ], + }, + }, + }, + resetBlockType: { + options: { + rules: [ + { + ...resetBlockTypesCommonRule, + hotkey: "Enter", + predicate: isBlockAboveEmpty, + }, + { + ...resetBlockTypesCommonRule, + hotkey: "Backspace", + predicate: isSelectionAtBlockStart, + }, + ], + }, + }, + trailingBlock: { type: ELEMENT_PARAGRAPH }, + softBreak: { + options: { + rules: [ + // { hotkey: "shift+enter" }, + // { + // hotkey: "enter", + // query: { + // allow: [ELEMENT_CODE_BLOCK, ELEMENT_BLOCKQUOTE, ELEMENT_TD], + // }, + // }, + ], + }, + }, + exitBreak: { + options: { + rules: [ + { + hotkey: "mod+enter", + }, + // { + // hotkey: "mod+shift+enter", + // before: true, + // }, + // { + // hotkey: "enter", + // query: { + // start: true, + // end: true, + // allow: KEYS_HEADING, + // }, + // }, + ], + }, + }, + selectOnBackspace: { + options: { + query: { + allow: [ELEMENT_IMAGE, ELEMENT_HR], + }, + }, + }, + autoformat: { + options: { + rules: autoformatRules, + }, + }, + // mentionItems: MENTIONABLES, + forceLayout: { + options: { + rules: [{ path: [0], strictType: ELEMENT_H1 }], + }, + }, +}; diff --git a/src/common/component/RichEditor/index.js b/src/common/component/RichEditor/index.js new file mode 100644 index 00000000..95077c40 --- /dev/null +++ b/src/common/component/RichEditor/index.js @@ -0,0 +1,205 @@ +import { useState, useRef, useCallback, useMemo, useEffect } from "react"; +import { serialize } from "remark-slate"; +import { useKey } from "rooks"; + +import { useUploadImageMutation } from "../../../app/services/message"; +import nodeTypes from "./values/nodeTypes"; +import { + createPlateUI, + // HeadingToolbar, + // MentionCombobox, + Plate, + createAutoformatPlugin, + createBlockquotePlugin, + createBoldPlugin, + createCodeBlockPlugin, + createCodePlugin, + createExitBreakPlugin, + createHeadingPlugin, + createHighlightPlugin, + createKbdPlugin, + createImagePlugin, + createItalicPlugin, + createLinkPlugin, + createListPlugin, + // createMediaEmbedPlugin, + createNodeIdPlugin, + createParagraphPlugin, + createResetNodePlugin, + createSelectOnBackspacePlugin, + createSoftBreakPlugin, + // createDndPlugin, + createStrikethroughPlugin, + createTablePlugin, + createTodoListPlugin, + createTrailingBlockPlugin, + createUnderlinePlugin, + // createComboboxPlugin, + // createMentionPlugin, + createIndentPlugin, + createDeserializeMdPlugin, + createHorizontalRulePlugin, + createPlugins, + ELEMENT_PARAGRAPH, + getPlateActions, + platesActions, + eventEditorStore, + // usePlateStore + // usePlateStore +} from "@udecode/plate"; +// import MarkBallonToolbar from "./components/MarkBallonToolbar"; +import Styled from "./styled"; +// import { withStyledPlaceHolders } from "./components/withStyledPlaceHolders"; +// import { MENTIONABLES } from "./mentionables"; +import { CONFIG } from "./config"; +// import { VALUES } from "./values/values"; + +const id = "rustchat_richEditor"; + +let components = createPlateUI({ + // customize your components by plugin key +}); +// components = withStyledPlaceHolders(components); + +const initialValue = [{ type: ELEMENT_PARAGRAPH, children: [{ text: "" }] }]; +const Plugins = ({ + placeholder = "Write some markdown...", + updateMarkdown, + updatePureText, + sendMessage, +}) => { + const editableRef = useRef(null); + // const editor = useEditorRef(); + // const { } =usePlateStore() + const [uploadImage] = useUploadImageMutation(); + useKey( + "Enter", + (evt) => { + console.log("enter keypress", evt); + if (evt.shiftKey || evt.ctrlKey || evt.altKey || evt.isComposing) { + return true; + } + evt.preventDefault(); + sendMessage(); + platesActions.unset(id); + platesActions.set(id, { + initialValue, + }); + // eventEditorStore.set() + getPlateActions(id).enabled(false); + getPlateActions(id).enabled(true); + // eventEditorStore.get(); + // getPlateActions(id).set; + // editor.reset + }, + { + // eventTypes: ["keydown"], + target: editableRef, + // when: !shift, + } + ); + const plugins = createPlugins( + [ + createParagraphPlugin(), + createBlockquotePlugin(), + createTodoListPlugin(), + createHeadingPlugin(), + createImagePlugin({ + options: { + uploadImage: (imageData) => { + return new Promise((resolve, reject) => { + fetch(imageData) + .then((res) => res.blob()) + .then((blob) => { + uploadImage(blob).then(({ data }) => { + console.log("upload image ", data); + resolve(data); + }); + }); + }); + }, + }, + }), + createHorizontalRulePlugin(), + createLinkPlugin(), + createListPlugin(), + createTablePlugin(), + // createMediaEmbedPlugin(), + createCodeBlockPlugin(), + createBoldPlugin(), + createCodePlugin(), + createItalicPlugin(), + createHighlightPlugin(), + createUnderlinePlugin(), + createStrikethroughPlugin(), + createKbdPlugin(), + createNodeIdPlugin(), + // createDndPlugin(), + createIndentPlugin(CONFIG.indent), + createAutoformatPlugin(CONFIG.autoformat), + createResetNodePlugin(CONFIG.resetBlockType), + // createSoftBreakPlugin(CONFIG.softBreak), + createExitBreakPlugin(CONFIG.exitBreak), + createTrailingBlockPlugin(CONFIG.trailingBlock), + createSelectOnBackspacePlugin(CONFIG.selectOnBackspace), + // createComboboxPlugin(), + // createMentionPlugin(), + createDeserializeMdPlugin(), + ], + { + components, + } + ); + const handleChange = (val) => { + const nonEmptyElements = val; + // .filter((v) => { + // const obj = v.children[0]; + // return obj.type == "p" && !!v.children[0].text; + // }); + const md = nonEmptyElements + .map((v) => + serialize(v, { + nodeTypes, + listDepth: 3, + }) + ) + .join("\n"); + console.log("md changed", val, nonEmptyElements, md); + updateMarkdown(md); + const nonParagraphs = nonEmptyElements.filter((v) => { + return v.type != "p" || v.children.length > 1; + }); + if (nonParagraphs.length == 0) { + const nonEmptyPs = nonEmptyElements.filter((v) => !!v.children[0].text); + // 全部是P + const pureText = nonEmptyPs + .map((v) => { + return v.children.map(({ text }) => text).join(""); + }) + .join("\n"); + console.log("pure text", nonEmptyPs, pureText); + updatePureText(pureText); + } else { + updatePureText(""); + } + }; + return ( + + + {/* */} + + {/* */} + + + ); +}; +export default Plugins; diff --git a/src/common/component/RichEditor/plugins.js b/src/common/component/RichEditor/plugins.js new file mode 100644 index 00000000..a70fd2f8 --- /dev/null +++ b/src/common/component/RichEditor/plugins.js @@ -0,0 +1,42 @@ +import { + createBasicElementsPlugin, + createBlockquotePlugin, + createBoldPlugin, + createCodeBlockPlugin, + createCodePlugin, + createHeadingPlugin, + createImagePlugin, + createItalicPlugin, + createParagraphPlugin, + createSelectOnBackspacePlugin, + createStrikethroughPlugin, + createUnderlinePlugin, +} from "@udecode/plate"; +import { CONFIG } from "./config"; + +const basicElements = [ + createParagraphPlugin(), // paragraph element + createBlockquotePlugin(), // blockquote element + createCodeBlockPlugin(), // code block element + createHeadingPlugin(), // heading elements +]; + +const basicMarks = [ + createBoldPlugin(), // bold mark + createItalicPlugin(), // italic mark + createUnderlinePlugin(), // underline mark + createStrikethroughPlugin(), // strikethrough mark + createCodePlugin(), // code mark +]; + +export const PLUGINS = { + basicElements, + basicMarks, + basicNodes: [...basicElements, ...basicMarks], + image: [ + createBasicElementsPlugin(), + ...basicMarks, + createImagePlugin(), + createSelectOnBackspacePlugin(CONFIG.selectOnBackspace), + ], +}; diff --git a/src/common/component/RichInput/styled.js b/src/common/component/RichEditor/styled.js similarity index 86% rename from src/common/component/RichInput/styled.js rename to src/common/component/RichEditor/styled.js index 5ed9a904..86cd9a96 100644 --- a/src/common/component/RichInput/styled.js +++ b/src/common/component/RichEditor/styled.js @@ -5,17 +5,15 @@ const Styled = styled.div` p { font-weight: 400; font-size: 14px; - /* line-height: 20px; */ line-height: 22px; color: #475467; - /* margin-bottom: 10px; */ } - i { + ul { + list-style-type: disc; + } + /* i { font-style: italic; } - /* del{ - font-style: italic; - } */ ul, ol { font-weight: 400; @@ -24,12 +22,6 @@ const Styled = styled.div` color: #475467; list-style-position: inside; } - ul { - list-style-type: disc; - } - ol { - /* list-style-type:; */ - } strong { font-weight: 700; } @@ -60,7 +52,7 @@ const Styled = styled.div` font-size: 14px; line-height: 20px; padding: 16px; - } + } */ `; export default Styled; diff --git a/src/common/component/RichEditor/values/nodeTypes.js b/src/common/component/RichEditor/values/nodeTypes.js new file mode 100644 index 00000000..b09429ec --- /dev/null +++ b/src/common/component/RichEditor/values/nodeTypes.js @@ -0,0 +1,24 @@ +const nodeTypes = { + heading: { + 1: "h1", + 2: "h2", + 3: "h3", + 4: "h4", + 5: "h5", + 6: "h6", + }, + paragraph: "p", + link: "a", + block_quote: "blockquote", + ol_list: "ol", + ul_list: "ul", + listItem: "li", + strong_mark: "bold", + inline_code_mark: "code", + emphasis_mark: "italic", + delete_mark: "strikethrough", + image: "img", + code_block: "code_block", +}; + +export default nodeTypes; diff --git a/src/common/component/RichEditor/values/utils.js b/src/common/component/RichEditor/values/utils.js new file mode 100644 index 00000000..ae4bc942 --- /dev/null +++ b/src/common/component/RichEditor/values/utils.js @@ -0,0 +1,63 @@ +import { + ELEMENT_LI, + ELEMENT_LIC, + ELEMENT_PARAGRAPH, + ELEMENT_UL, + // TElement, +} from "@udecode/plate"; +// import { Text } from 'slate' + +export const createElement = ( + text = "", + { type = ELEMENT_PARAGRAPH, mark } = {} +) => { + const leaf = { text }; + if (mark) { + leaf[mark] = true; + } + + return { + type, + children: [leaf], + }; +}; + +export const createList = (items = [], { splitSeparator = "`" } = {}) => { + const children = items.map((item) => { + const texts = item.split(splitSeparator); + const marks = texts.map((text, index) => { + const res = { text }; + if (index % 2 === 1) { + res.code = true; + } + return res; + }); + + return { + type: ELEMENT_LI, + children: [ + { + type: ELEMENT_LIC, + children: marks, + }, + ], + }; + }); + + return [ + { + type: ELEMENT_UL, + children, + }, + ]; +}; + +export const getNodesWithRandomId = (nodes = []) => { + let _id = 10000; + nodes.forEach((node) => { + node.id = _id; + _id++; + }); + + return nodes; +}; diff --git a/src/common/component/RichEditor/values/values.js b/src/common/component/RichEditor/values/values.js new file mode 100644 index 00000000..88a4f835 --- /dev/null +++ b/src/common/component/RichEditor/values/values.js @@ -0,0 +1,275 @@ +import { ELEMENT_HR } from "@udecode/plate"; +// import { jsx } from "@udecode/plate-test-utils"; +import { createList, getNodesWithRandomId } from "./utils"; + +const align = ( + <> + Alignment + This block text is aligned to the right. + Center + This block text is justified. + +); + +const indent = ( + <> + Changing block indentation + + Use the toolbar buttons to control the indentation of specific blocks. You + can use these tools to highlight an important piece of information, + communicate a hierarchy or just give your content some room. + + + For instance, this paragraph looks like it belongs to the previous one. + + +); + +const horizontalRule = ( + <> + This is a paragraph. + + + + And this is another paragraph. + + + + But between those paragraphs are horizontal rules. + +); + +const mediaEmbed = ( + <> + 🎥 Media Embed + + In addition to simple image nodes, you can actually create complex + embedded nodes. For example, this one contains an input element that lets + you change the video being rendered! + + + + + + Try it out! This editor is built to handle Vimeo embeds, but you could + handle any type. + + +); + +const image = ( + <> + 📷 Image + + In addition to nodes that contain editable text, you can also create other + types of nodes, like images or videos. + + + + + + This example shows images in action. It features two ways to add images. + You can either add an image via the toolbar icon above, or if you want in + on a little secret, copy an image URL to your keyboard and paste it + anywhere in the editor! Additionally, you can customize the toolbar button + to load an url asynchronously, for example showing a file picker and + uploading a file to Amazon S3. You can also add a caption and resize the + image. + + +); + +const link = ( + <> + 🔗 Link + + In addition to block nodes, you can create inline nodes, like{" "} + hyperlinks! + + + This example shows hyperlinks in action. It features two ways to add + links. You can either add a link via the toolbar icon above, or if you + want in on a little secret, copy a URL to your keyboard and paste it while + a range of text is selected. + + +); + +const autoformat = ( + <> + 🏃‍♀️ Autoformat + + The editor gives you full control over the logic you can add. For example, + it's fairly common to want to add markdown-like shortcuts to editors. + + While typing, try these (mark rules): + + + + Type ** or __ on either side + of your text to add **bold* mark. + + + + + Type * or _ on either side of + your text to add *italic mark. + + + + + Type ` on either side of your text to add `inline + code mark. + + + + + Type ~~ on either side of your text to add + ~~strikethrough~ mark. + + + + + Note that nothing happens when there is a character before, try + on:*bold + + + + + We even support smart quotes, try typing{" "} + "hello" 'world'. + + + + + At the beginning of any new block or existing block, try these (block + rules): + + + + + Type *, - or{" "} + + followed by space to create + a bulleted list. + + + + + Type 1. or 1) followed by{" "} + space to create a numbered list. + + + + + Type > followed by space to + create a block quote. + + + + + Type ``` to create a code block. + + + + + Type --- to create a horizontal rule. + + + + + Type # followed by space to + create an H1 heading. + + + + + Type ## followed by space to + create an H2 sub-heading. + + + + + Type ### followed by space to + create an H3 sub-heading. + + + + + Type #### followed by space to + create an H4 sub-heading. + + + + + Type ##### followed by space{" "} + to create an H5 sub-heading. + + + + + Type ###### followed by space{" "} + to create an H6 sub-heading. + + + + +); + +const pasteHtml = ( + <> + 🍪 Deserialize HTML + + By default, pasting content into a Slate editor will use the clipboard's{" "} + 'text/plain' data. That's okay for some use cases, but + sometimes you want users to be able to paste in content and have it + maintain its formatting. To do this, your editor needs to handle{" "} + 'text/html' data. + + This is an example of doing exactly that! + + Try it out for yourself! Copy and paste some rendered HTML rich text + content (not the source code) from another site into this editor and it's + formatting should be preserved. + + +); + +const pasteMd = ( + <> + 🍩 Deserialize Markdown + + By default, pasting content into a Slate editor will use the clipboard's{" "} + 'text/plain' data. That's okay for some use cases, but + sometimes you want users to be able to paste in content and have it + maintain its formatting. To do this, your editor needs to handle{" "} + 'text/html' data. + + This is an example of doing exactly that! + + Try it out for yourself! Copy and paste Markdown content from{" "} + + https://markdown-it.github.io/ + + + +); + +const basicMarks = [ + + The basic marks consist of text formatting such as bold, italic, underline, + strikethrough, subscript, superscript, and code. + , +]; +const basicElements = [ + Blockquote, + + const a = 'Hello'; + const b = 'World'; + , +]; + +const playground = [...basicMarks, ...basicElements]; + +export const VALUES = { + playground, +}; diff --git a/src/common/component/RichInput/Element.js b/src/common/component/RichInput/Element.js deleted file mode 100644 index 9b8cec75..00000000 --- a/src/common/component/RichInput/Element.js +++ /dev/null @@ -1,33 +0,0 @@ -const Element = ({ attributes, children, element }) => { - console.log("element type", element); - switch (element.type) { - case "del": - return {children}; - case "italic": - return {children}; - case "bold": - return {children}; - case "blockquote": - return
{children}
; - case "bulleted-list": - return ; - case "heading-one": - return

{children}

; - case "heading-two": - return

{children}

; - case "heading-three": - return

{children}

; - case "heading-four": - return

{children}

; - case "heading-five": - return
{children}
; - case "heading-six": - return
{children}
; - case "list-item": - return
  • {children}
  • ; - default: - return

    {children}

    ; - } -}; - -export default Element; diff --git a/src/common/component/RichInput/index.js b/src/common/component/RichInput/index.js deleted file mode 100644 index eff90b07..00000000 --- a/src/common/component/RichInput/index.js +++ /dev/null @@ -1,118 +0,0 @@ -// import React from "react"; -// import styled from 'styled-components'; -import AutoReplace from "slate-auto-replace"; -import { useState, useRef, useCallback, useMemo, useEffect } from "react"; -import { serialize } from "remark-slate"; -import { Slate, Editable, withReact } from "slate-react"; -import { createEditor, Transforms, Editor } from "slate"; -import { withHistory } from "slate-history"; -import { useKey } from "rooks"; -import Styled from "./styled"; - -import initialValue, { emptyValue } from "./initialValue"; -import Element from "./Element"; -// import withShortcuts from "./withShortcuts"; - -// Add the plugin to your set of plugins... -const plugins = [ - AutoReplace({ - trigger: "space", - before: /^(>)$/, - change: (change, e, matches) => { - return change.setBlocks({ type: "blockquote" }); - }, - }), -]; - -export default function RichInput({ - setEditor, - placeholder = "Write some markdown...", - updateMarkdown, - updatePureText, - sendMessage, -}) { - const editableRef = useRef(null); - const [shift, setShift] = useState(false); - const [value, setValue] = useState(emptyValue); - // const renderElement = useCallback((props) => , []); - const editor = useMemo(() => withReact(withHistory(createEditor())), []); - // const editor = useMemo( - // () => withShortcuts(withReact(withHistory(createEditor()))), - // [] - // ); - useEffect(() => { - setEditor(editor); - }, []); - - useKey( - "Enter", - (evt) => { - evt.preventDefault(); - - sendMessage(); - Transforms.delete(editor, { - at: { - anchor: Editor.start(editor, []), - focus: Editor.end(editor, []), - }, - }); - }, - { - target: editableRef, - when: !shift, - } - ); - useKey( - "Shift", - (e) => { - console.log("shift", e.type); - setShift(e.type == "keydown"); - }, - { eventTypes: ["keydown", "keyup"], target: editableRef } - ); - const handleChange = useCallback( - (nextValue) => { - setValue(nextValue); - // serialize slate state to a markdown string - const md = nextValue.map((v) => serialize(v)).join("\n"); - updateMarkdown(md); - console.log("serialized", nextValue, md); - - const nonParagraphs = nextValue.filter((v) => v.type != "paragraph"); - if (nonParagraphs.length == 0) { - const nonEmptyPs = nextValue.filter((v) => !!v.children[0].text); - // 全部是P - const pureText = nonEmptyPs - .map((v) => { - return v.children.map(({ text }) => text).join(""); - }) - .join("\n"); - console.log("pure text", nonEmptyPs, pureText); - updatePureText(pureText); - } else { - updatePureText(""); - } - }, - [updateMarkdown, updatePureText] - ); - - console.log("slate value", value); - return ( - - - - - - ); -} diff --git a/src/common/component/RichInput/initialValue.js b/src/common/component/RichInput/initialValue.js deleted file mode 100644 index 856f28aa..00000000 --- a/src/common/component/RichInput/initialValue.js +++ /dev/null @@ -1,49 +0,0 @@ -const initialValue = [ - { - type: "paragraph", - children: [ - { - text: - 'The editor gives you full control over the logic you can add. For example, it\'s fairly common to want to add markdown-like shortcuts to editors. So that, when you start a line with "> " you get a blockquote that looks like this:', - }, - ], - }, - { - type: "block-quote", - children: [{ text: "A wise quote." }], - }, - { - type: "paragraph", - children: [ - { - text: - 'Order when you start a line with "## " you get a level-two heading, like this:', - }, - ], - }, - { - type: "heading-two", - children: [{ text: "Try it out!" }], - }, - { - type: "paragraph", - children: [ - { - text: - 'Try it out for yourself! Try starting a new line with ">", "-", or "#"s.', - }, - ], - }, -]; -export const emptyValue = [ - { - type: "paragraph", - children: [ - { - text: "", - }, - ], - }, -]; - -export default initialValue; diff --git a/src/common/component/RichInput/withShortcuts.js b/src/common/component/RichInput/withShortcuts.js deleted file mode 100644 index e892d527..00000000 --- a/src/common/component/RichInput/withShortcuts.js +++ /dev/null @@ -1,121 +0,0 @@ -import { - Editor, - Transforms, - Range, - Point, - Element as SlateElement, -} from "slate"; -const SHORTCUTS = { - "-": "list-item", - "+": "list-item", - "~~": "del", - _: "italic", - __: "bold", - ">": "blockquote", - "#": "heading-one", - "##": "heading-two", - "###": "heading-three", - "####": "heading-four", - "#####": "heading-five", - "######": "heading-six", -}; -const withShortcuts = (editor) => { - const { deleteBackward, insertText } = editor; - - editor.insertText = (text) => { - const { selection } = editor; - console.log("insert text", text, selection, Range.isCollapsed(selection)); - - if (text === " " && selection && Range.isCollapsed(selection)) { - const { anchor } = selection; - const block = Editor.above(editor, { - match: (n) => Editor.isBlock(editor, n), - }); - const path = block ? block[1] : []; - const start = Editor.start(editor, path); - const range = { anchor, focus: start }; - const beforeText = Editor.string(editor, range); - const type = SHORTCUTS[beforeText]; - console.log( - "insert text parsed", - block, - path, - start, - range, - beforeText, - type - ); - if (type) { - Transforms.select(editor, range); - Transforms.delete(editor); - const newProperties = { - type, - }; - Transforms.setNodes(editor, newProperties, { - match: (n) => Editor.isBlock(editor, n), - }); - - if (type === "list-item") { - const list = { - type: "bulleted-list", - children: [], - }; - Transforms.wrapNodes(editor, list, { - match: (n) => - !Editor.isEditor(n) && - SlateElement.isElement(n) && - n.type === "list-item", - }); - } - - return; - } - } - - insertText(text); - }; - - editor.deleteBackward = (...args) => { - const { selection } = editor; - if (selection && Range.isCollapsed(selection)) { - const match = Editor.above(editor, { - match: (n) => Editor.isBlock(editor, n), - }); - - if (match) { - const [block, path] = match; - const start = Editor.start(editor, path); - - if ( - !Editor.isEditor(block) && - SlateElement.isElement(block) && - block.type !== "paragraph" && - Point.equals(selection.anchor, start) - ) { - const newProperties = { - type: "paragraph", - }; - Transforms.setNodes(editor, newProperties); - - if (block.type === "list-item") { - Transforms.unwrapNodes(editor, { - match: (n) => - !Editor.isEditor(n) && - SlateElement.isElement(n) && - n.type === "bulleted-list", - split: true, - }); - } - - return; - } - } - - deleteBackward(...args); - } - }; - - return editor; -}; - -export default withShortcuts; diff --git a/src/common/component/Send/index.js b/src/common/component/Send/index.js index 7893270d..3798d32b 100644 --- a/src/common/component/Send/index.js +++ b/src/common/component/Send/index.js @@ -1,7 +1,7 @@ import { useState, useEffect, useRef } from "react"; -import TextareaAutosize from "react-textarea-autosize"; +// import TextareaAutosize from "react-textarea-autosize"; import { useDispatch, useSelector } from "react-redux"; -import { useKey } from "rooks"; +// import { useKey } from "rooks"; import { removeReplyingMessage } from "../../../app/slices/message"; import { useSendChannelMsgMutation } from "../../../app/services/channel"; @@ -13,7 +13,8 @@ import UploadModal from "./UploadModal"; import Replying from "./Replying"; import Toolbar from "./Toolbar"; import EmojiPicker from "./EmojiPicker"; -import RichInput from "../RichInput"; +// import RichInput from "../RichInput"; +import RichInput from "../RichEditor"; const Types = { channel: "#", user: "@", @@ -62,7 +63,7 @@ export default function Send({ setFiles([...evt.target.files]); }; const handleSendMessage = () => { - if (!msg || !id || sendingMessage) return; + if (!markdown || !id || sendingMessage) return; console.log("send message", msg); const content_type = msg ? "text" : "markdown"; const content = msg ? msg : markdown; diff --git a/src/common/component/Setting/config/SMTP.js b/src/common/component/Setting/config/SMTP.js index bb7bb7a7..4c5a2e0b 100644 --- a/src/common/component/Setting/config/SMTP.js +++ b/src/common/component/Setting/config/SMTP.js @@ -131,7 +131,12 @@ export default function ConfigSMTP() {
    question icon - + How to set up SMTP?
    diff --git a/src/common/component/StyledMenu.js b/src/common/component/styled/Menu.js similarity index 70% rename from src/common/component/StyledMenu.js rename to src/common/component/styled/Menu.js index 9d6ba2ce..b4ab066b 100644 --- a/src/common/component/StyledMenu.js +++ b/src/common/component/styled/Menu.js @@ -3,20 +3,26 @@ const StyledMenu = styled.ul` z-index: 999; display: flex; flex-direction: column; - padding: 4px 12px; + padding: 4px; background-color: #fff; box-shadow: 0px 20px 25px 20px rgba(31, 41, 55, 0.1), 0px 10px 10px rgba(31, 41, 55, 0.04); - border-radius: 6px; + border-radius: var(--br); .item { white-space: nowrap; cursor: pointer; - padding: 8px 0; - /* margin: 0 12px; */ + border-radius: 3px; + padding: 8px; + font-style: normal; font-weight: 600; font-size: 14px; line-height: 20px; color: #616161; + /* transition: color 0.2s ease; */ + &:hover { + background-color: #22ccee; + color: #fff; + } &.underline { border-bottom: 1px solid #e5e5e5; } diff --git a/src/common/hook/useContextMenu.js b/src/common/hook/useContextMenu.js index c5d00464..1e7857ad 100644 --- a/src/common/hook/useContextMenu.js +++ b/src/common/hook/useContextMenu.js @@ -1,20 +1,32 @@ import { useState } from "react"; -export default function useContextMenu() { +export default function useContextMenu(placement = "right-start") { const [visible, setVisible] = useState(false); - const [pos, setPos] = useState({ x: 0, y: 0 }); + // for tippy.js + const [offset, setOffset] = useState({ x: 0, y: 0 }); const handleContextMenuEvent = (evt) => { - console.log("context menu event", evt); + console.log("context menu event", evt, evt.currentTarget); evt.preventDefault(); + const { currentTarget, clientX, clientY } = evt; + const { left, top, width, height } = currentTarget.getBoundingClientRect(); + let x, y; + if (placement == "right-start") { + x = clientX - (left + width); + y = top + height - clientY; + } else { + x = clientX - left; + y = top - clientY; + } + setOffset({ x, y }); + setVisible(true); - setPos({ x: evt.clientX, y: evt.clientY }); + console.log("offset", x, y); }; const hideContextMenu = () => { setVisible(false); }; return { - posX: pos.x, - posY: pos.y, + offset, visible, hideContextMenu, handleContextMenuEvent, diff --git a/src/routes/chat/ChannelList/NavItem.js b/src/routes/chat/ChannelList/NavItem.js index c12b28d9..6cc9f4f6 100644 --- a/src/routes/chat/ChannelList/NavItem.js +++ b/src/routes/chat/ChannelList/NavItem.js @@ -2,16 +2,28 @@ import { useNavigate } from "react-router-dom"; import { useDrop } from "react-dnd"; import { NativeTypes } from "react-dnd-html5-backend"; import { useDispatch, useSelector } from "react-redux"; +import Tippy from "@tippyjs/react"; +import useContextMenu from "../../../common/hook/useContextMenu"; +import ContextMenu from "../../../common/component/ContextMenu"; // import { useDebounce} from "rooks"; +import { useReadMessageMutation } from "../../../app/services/message"; + import StyledLink from "./styled"; import { toggleChannelSetting } from "../../../app/slices/ui"; import ChannelIcon from "../../../common/component/ChannelIcon"; import { getUnreadCount } from "../utils"; -const NavItem = ({ id, setFiles, contextMenuEventHandler }) => { +const NavItem = ({ id, setFiles, toggleRemoveConfirm }) => { const dispatch = useDispatch(); const navigate = useNavigate(); - // const getUnreadCountDebounced=useDebounce(getUnreadCount,300) + const [updateReadIndex] = useReadMessageMutation(); + + const { + visible: contextMenuVisible, + offset, + handleContextMenuEvent, + hideContextMenu, + } = useContextMenu(); const { channel, mids, messageData, readIndex, loginUid } = useSelector( (store) => { return { @@ -45,32 +57,76 @@ const NavItem = ({ id, setFiles, contextMenuEventHandler }) => { isActive: monitor.canDrop() && monitor.isOver(), }), })); + const handleReadAll = () => { + const lastMid = mids[mids.length - 1]; + console.log("last mid", mids, lastMid); + if (lastMid) { + const param = { groups: [{ gid: id, mid: lastMid }] }; + updateReadIndex(param); + } + }; const { is_public, name } = channel; const unreads = getUnreadCount({ mids, messageData, readIndex, loginUid }); return ( - { - contextMenuEventHandler(evt, id); - }} - ref={drop} + + } > -
    - - {name} -
    -
    - - {unreads > 0 && ( - 99 ? "dot" : ""}`}> - {unreads > 99 ? null : unreads} - - )} -
    -
    + +
    + + {name} +
    +
    + + {unreads > 0 && ( + 99 ? "dot" : ""}`}> + {unreads > 99 ? null : unreads} + + )} +
    +
    + ); }; diff --git a/src/routes/chat/ChannelList/index.js b/src/routes/chat/ChannelList/index.js index df312649..3ef6a15f 100644 --- a/src/routes/chat/ChannelList/index.js +++ b/src/routes/chat/ChannelList/index.js @@ -1,76 +1,33 @@ import { useState } from "react"; import { useSelector } from "react-redux"; -import useContextMenu from "../../../common/hook/useContextMenu"; -import ContextMenu from "../../../common/component/ContextMenu"; + import DeleteConfirmModal from "../../../common/component/ChannelSetting/DeleteConfirmModal"; import NavItem from "./NavItem"; export default function ChannelList({ setDropFiles }) { - const [removeConfirmVisible, setRemoveConfirmVisible] = useState(false); const [currId, setCurrId] = useState(null); - const { channelIds, channelData } = useSelector((store) => { + const { channelIds } = useSelector((store) => { return { channelIds: store.channels.ids, channelData: store.channels.byId }; }); - const { - visible: contextMenuVisible, - posX, - posY, - hideContextMenu, - handleContextMenuEvent, - } = useContextMenu(); - const handleContextMenuClick = (evt, id) => { - console.log("wtf", evt, id); - setCurrId(id); - handleContextMenuEvent(evt); + + const setRemoveChannel = (cid = undefined) => { + setCurrId(cid); }; - const toggleRemoveConfirm = () => { - setRemoveConfirmVisible((prev) => !prev); - }; - const { is_public } = channelData[currId] || {}; + return ( <> {channelIds.map((cid) => { return ( ); })} - {contextMenuVisible ? ( - - ) : null} - {removeConfirmVisible && ( - + {typeof currId !== "undefined" && ( + )} ); diff --git a/src/routes/chat/DMList.js b/src/routes/chat/DMList.js deleted file mode 100644 index a7df2e0f..00000000 --- a/src/routes/chat/DMList.js +++ /dev/null @@ -1,99 +0,0 @@ -// import React from "react"; -import { NavLink, useNavigate } from "react-router-dom"; -import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; -import { useDrop } from "react-dnd"; -import { NativeTypes } from "react-dnd-html5-backend"; -import { useSelector } from "react-redux"; -import { renderPreviewMessage, getUnreadCount } from "./utils"; -import Contact from "../../common/component/Contact"; -dayjs.extend(relativeTime); -const NavItem = ({ uid, mid, unreads, setFiles }) => { - const { currMsg, currUser } = useSelector((store) => { - return { - currUser: store.contacts.byId[uid], - currMsg: store.message[mid], - }; - }); - const navigate = useNavigate(); - const [{ isActive }, drop] = useDrop(() => ({ - accept: [NativeTypes.FILE], - drop({ dataTransfer }) { - if (dataTransfer.files.length) { - // console.log(files, rest); - setFiles([...dataTransfer.files]); - navigate(`/chat/dm/${uid}`); - // 重置 - setTimeout(() => { - setFiles([]); - }, 300); - } - }, - collect: (monitor) => ({ - isActive: monitor.canDrop() && monitor.isOver(), - }), - })); - if (!currUser || !currMsg) return null; - return ( - - -
    -
    - {currUser.name} - {currMsg && } -
    - -
    - {renderPreviewMessage(currMsg)} - {unreads > 0 && ( - 99 ? "dot" : ""}`}> - {unreads > 99 ? null : unreads} - - )} -
    -
    -
    - ); -}; -// mids: ChannelMsgData[channel_id], -// messageData, -// readIndex: readChannels[channel_id], -// loginUid, -export default function DMList({ uids, setDropFiles }) { - const { userMessage, messageData, readUsers, loginUid } = useSelector( - (store) => { - return { - loginUid: store.authData.uid, - readUsers: store.footprint.readUsers, - contactData: store.contacts.byId, - userMessage: store.userMessage.byId, - messageData: store.message, - }; - } - ); - const sessions = uids.map((uid) => { - const mids = userMessage[uid]; - const lastMid = [...mids].pop(); - const readIndex = readUsers[uid]; - const unreads = getUnreadCount({ mids, readIndex, messageData, loginUid }); - - return { lastMid, unreads, uid }; - }); - - return sessions.map(({ lastMid, uid, unreads }) => { - return ( - - ); - }); -} diff --git a/src/routes/chat/DMList/NavItem.js b/src/routes/chat/DMList/NavItem.js new file mode 100644 index 00000000..8664b16e --- /dev/null +++ b/src/routes/chat/DMList/NavItem.js @@ -0,0 +1,111 @@ +// import React from 'react' +import { NavLink, useNavigate } from "react-router-dom"; +import { useDrop } from "react-dnd"; +import { useSelector, useDispatch } from "react-redux"; +import { NativeTypes } from "react-dnd-html5-backend"; +import dayjs from "dayjs"; +import relativeTime from "dayjs/plugin/relativeTime"; +import Tippy from "@tippyjs/react"; +import { useReadMessageMutation } from "../../../app/services/message"; +import { removeUserSession } from "../../../app/slices/message.user"; + +import useContextMenu from "../../../common/hook/useContextMenu"; +import ContextMenu from "../../../common/component/ContextMenu"; +dayjs.extend(relativeTime); +import { renderPreviewMessage } from "../utils"; +import Contact from "../../../common/component/Contact"; +const NavItem = ({ uid, mid, unreads, setFiles }) => { + const dispatch = useDispatch(); + const [updateReadIndex] = useReadMessageMutation(); + const { currMsg, currUser } = useSelector((store) => { + return { + currUser: store.contacts.byId[uid], + currMsg: store.message[mid], + }; + }); + const navigate = useNavigate(); + const { + visible: contextMenuVisible, + offset, + handleContextMenuEvent, + hideContextMenu, + } = useContextMenu(); + const [{ isActive }, drop] = useDrop(() => ({ + accept: [NativeTypes.FILE], + drop({ dataTransfer }) { + if (dataTransfer.files.length) { + // console.log(files, rest); + setFiles([...dataTransfer.files]); + navigate(`/chat/dm/${uid}`); + // 重置 + setTimeout(() => { + setFiles([]); + }, 300); + } + }, + collect: (monitor) => ({ + isActive: monitor.canDrop() && monitor.isOver(), + }), + })); + const handleReadAll = () => { + const param = { users: [{ uid, mid }] }; + updateReadIndex(param); + }; + const handleRemoveSession = () => { + dispatch(removeUserSession(uid)); + }; + if (!currUser || !currMsg) return null; + return ( + + } + > + + +
    +
    + {currUser.name} + {currMsg && } +
    + +
    + {renderPreviewMessage(currMsg)} + {unreads > 0 && ( + 99 ? "dot" : ""}`}> + {unreads > 99 ? null : unreads} + + )} +
    +
    +
    +
    + ); +}; + +export default NavItem; diff --git a/src/routes/chat/DMList/index.js b/src/routes/chat/DMList/index.js new file mode 100644 index 00000000..ff6ae0a2 --- /dev/null +++ b/src/routes/chat/DMList/index.js @@ -0,0 +1,41 @@ +// import React from "react"; +import { useSelector } from "react-redux"; + +import { getUnreadCount } from "../utils"; + +import NavItem from "./NavItem"; +export default function DMList({ uids, setDropFiles }) { + const { userMessage, messageData, readUsers, loginUid } = useSelector( + (store) => { + return { + loginUid: store.authData.uid, + readUsers: store.footprint.readUsers, + contactData: store.contacts.byId, + userMessage: store.userMessage.byId, + messageData: store.message, + }; + } + ); + const sessions = uids.map((uid) => { + const mids = userMessage[uid]; + const lastMid = [...mids].pop(); + const readIndex = readUsers[uid]; + const unreads = getUnreadCount({ mids, readIndex, messageData, loginUid }); + + return { lastMid, unreads, uid }; + }); + + return sessions + .sort((s1, s2) => s2.lastMid - s1.lastMid) + .map(({ lastMid, uid, unreads }) => { + return ( + + ); + }); +} diff --git a/yarn.lock b/yarn.lock index 1a17c858..2527059b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57,38 +57,12 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" - integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== - -"@babel/compat-data@^7.17.7": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== -"@babel/core@^7.11.1", "@babel/core@^7.15.5", "@babel/core@^7.16.0": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/core@^7.17.8": +"@babel/core@^7.11.1", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.17.8": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== @@ -109,16 +83,7 @@ json5 "^2.1.2" semver "^6.3.0" -"@babel/generator@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" - integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.17.7": +"@babel/generator@^7.17.3", "@babel/generator@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== @@ -142,17 +107,7 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.17.7": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== @@ -162,7 +117,7 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.1", "@babel/helper-create-class-features-plugin@^7.17.6": +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": version "7.17.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== @@ -235,11 +190,11 @@ "@babel/types" "^7.16.7" "@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" + integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.17.0" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7": version "7.16.7" @@ -248,21 +203,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" - integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-module-transforms@^7.17.7": +"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== @@ -308,13 +249,6 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-simple-access@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" @@ -356,15 +290,6 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.17.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - "@babel/helpers@^7.17.8": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" @@ -383,12 +308,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.16.7", "@babel/parser@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== - -"@babel/parser@^7.17.8": +"@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== @@ -436,11 +356,11 @@ "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493" - integrity sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw== + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz#4f0444e896bee85d35cf714a006fc5418f87ff00" + integrity sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.1" + "@babel/helper-create-class-features-plugin" "^7.17.6" "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" "@babel/plugin-syntax-decorators" "^7.17.0" @@ -726,9 +646,9 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-destructuring@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" - integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" + integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" @@ -803,22 +723,22 @@ babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" + integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== dependencies: "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" @@ -1105,14 +1025,7 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-typescript" "^7.16.7" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" - integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.14.8": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== @@ -1128,7 +1041,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.5": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.5": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== @@ -1776,9 +1689,9 @@ integrity sha512-9FqhNjKQWpQ3fGnSOCovHOm+yhhiorKEqYLAfd525jWavunDJcx8rOW6i6ozAh+FbwcYMkL7b+3j4UR/30MpoQ== "@grpc/grpc-js@^1.3.2": - version "1.5.7" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.5.7.tgz#c83a5dc1d0cf7b8aa82371cfa7125955d1f25a96" - integrity sha512-RAlSbZ9LXo0wNoHKeUlwP9dtGgVBDUbnBKFpfAv5iSqMG4qWz9um2yLH215+Wow1I48etIa1QMS+WAGmsE/7HQ== + version "1.5.9" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.5.9.tgz#df44b3d6bc1d5eb4779aab96e00f6084fd07a3c8" + integrity sha512-un+cXqErq5P4p3+WgYVNVh7FB51MSnaoRef7QWDcMXKR6FX2R6Z/bltcJMxNNdTUMC85lkOQcpnAAetFziPSng== dependencies: "@grpc/proto-loader" "^0.6.4" "@types/node" ">=12.12.47" @@ -2303,9 +2216,9 @@ integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + version "7.0.10" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.10.tgz#9b05b7896166cd00e9cbd59864853abf65d9ac23" + integrity sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A== "@types/json5@^0.0.29": version "0.0.29" @@ -2313,9 +2226,9 @@ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= "@types/lodash@^4.14.149": - version "4.14.179" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.179.tgz#490ec3288088c91295780237d2497a3aa9dfb5c5" - integrity sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w== + version "4.14.180" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.180.tgz#4ab7c9ddfc92ec4a887886483bc14c79fb380670" + integrity sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g== "@types/long@^4.0.1": version "4.0.1" @@ -2350,9 +2263,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*", "@types/node@>=12", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" - integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== + version "17.0.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" + integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2390,9 +2303,9 @@ redux "^4.0.0" "@types/react@*": - version "17.0.40" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.40.tgz#dc010cee6254d5239a138083f3799a16638e6bad" - integrity sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ== + version "17.0.42" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.42.tgz#8242b9219bf8a911c47f248e327206fea3f4ee5a" + integrity sha512-nuab3x3CpJ7VFeNA+3HTUuEkvClYHXqWtWd7Ud6AZYW7Z3NH9WKtgU+tFB0ZLcHq+niB/HnzLcaZPqMJ95+k5Q== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2909,10 +2822,10 @@ "@udecode/plate-styled-components" "10.4.2" "@udecode/plate-ui-toolbar" "10.4.2" -"@udecode/plate-ui-mention@10.4.2": - version "10.4.2" - resolved "https://registry.yarnpkg.com/@udecode/plate-ui-mention/-/plate-ui-mention-10.4.2.tgz#629ac45523492152a1cfc2ee997519e93284c7be" - integrity sha512-fr3wjPgwnAroCR8frexZo2lpgCbzqzoTPyueh/t7VVBgYM/4WSsSK3PIRZ7+NYQxGEUCE/dOOeYnZww5059Ynw== +"@udecode/plate-ui-mention@10.4.3": + version "10.4.3" + resolved "https://registry.yarnpkg.com/@udecode/plate-ui-mention/-/plate-ui-mention-10.4.3.tgz#79b62a97c29314ddb45b529b67c6d43d1e4efee3" + integrity sha512-4vxad/KuT5SsIJqtzZHK/1V1jgfeFkkZa2OXEZ4stMN33Mfgx4ACbdyduvB3g2f0yR3+o59ydWqdieq2sv/LMw== dependencies: "@udecode/plate-combobox" "10.4.2" "@udecode/plate-core" "10.4.2" @@ -2972,10 +2885,10 @@ react-popper "^2.2.4" react-use "^17.1.1" -"@udecode/plate-ui@10.4.2": - version "10.4.2" - resolved "https://registry.yarnpkg.com/@udecode/plate-ui/-/plate-ui-10.4.2.tgz#ca1886585a65fc7413f1682c710f028952092b25" - integrity sha512-ALaMs+q/hiWo35pse6qcxl6RqxhLYICajSlVK8OaFUSdU0OiP///ndLtHitAUGLhl7sEVDf8h0R86b1l8bvjfA== +"@udecode/plate-ui@10.4.3": + version "10.4.3" + resolved "https://registry.yarnpkg.com/@udecode/plate-ui/-/plate-ui-10.4.3.tgz#9d7b6e7eb7553bdaaa1892f75925671ca8ff2d49" + integrity sha512-S/rda5/qeU87cXwAUbJSnrNEDW14efL1Bt9aQ+xjTzLnqhQzxCpzu1jQbxKaFUNaeoqOoh8vmOlfIKCwat7tDQ== dependencies: "@udecode/plate-headless" "10.4.2" "@udecode/plate-styled-components" "10.4.2" @@ -2992,7 +2905,7 @@ "@udecode/plate-ui-link" "10.4.2" "@udecode/plate-ui-list" "10.4.2" "@udecode/plate-ui-media-embed" "10.4.2" - "@udecode/plate-ui-mention" "10.4.2" + "@udecode/plate-ui-mention" "10.4.3" "@udecode/plate-ui-placeholder" "10.4.2" "@udecode/plate-ui-popover" "10.4.2" "@udecode/plate-ui-popper" "10.4.2" @@ -3000,12 +2913,12 @@ "@udecode/plate-ui-toolbar" "10.4.2" "@udecode/plate@^10.4.2": - version "10.4.2" - resolved "https://registry.yarnpkg.com/@udecode/plate/-/plate-10.4.2.tgz#7a1f4f058799694996c9a453a3ca97123e94b925" - integrity sha512-T4xmNGI/Oo1PwOwxDW5WTyMTKqK11suLh7Z2ydGtaCZ54Mka0oc9++a7leSTgCo79RH8A92LcHBrgRdkLmj0OA== + version "10.4.3" + resolved "https://registry.yarnpkg.com/@udecode/plate/-/plate-10.4.3.tgz#5e3e9b69fecbdabc72c32839a091e01c8acd3fbd" + integrity sha512-/WIgtS/xIUh3sTD2rBcvbuU6CyG9KkCQBBlcR37gGOhVJdA/1cJoWNGu4QKvfW0xqcjrEouJ7sa4MYSMyAVe+Q== dependencies: "@udecode/plate-headless" "10.4.2" - "@udecode/plate-ui" "10.4.2" + "@udecode/plate-ui" "10.4.3" "@udecode/zustood@0.4.4": version "0.4.4" @@ -3234,9 +3147,9 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" - integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3420,12 +3333,12 @@ axios@^0.26.1: follow-redirects "^1.14.8" babel-loader@^8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" - integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== + version "8.2.4" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.4.tgz#95f5023c791b2e9e2ca6f67b0984f39c82ff384b" + integrity sha512-8dytA3gcvPPPv4Grjhnt8b5IIiTcq/zeXOPk4iTYI0SVXcsmuGg7JtBRDp8S9X+gJfhQ8ektjXZlDu1Bb33U8A== dependencies: find-cache-dir "^3.3.1" - loader-utils "^1.4.0" + loader-utils "^2.0.0" make-dir "^3.1.0" schema-utils "^2.6.5" @@ -3615,18 +3528,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.19.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9" - integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ== - dependencies: - caniuse-lite "^1.0.30001313" - electron-to-chromium "^1.4.76" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.20.2: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.19.1, browserslist@^4.20.2: version "4.20.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== @@ -3722,12 +3624,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001313: - version "1.0.30001316" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001316.tgz#b44a1f419f82d2e119aa0bbdab5ec15471796358" - integrity sha512-JgUdNoZKxPZFzbzJwy4hDSyGuH/gXz2rN51QmoR8cBQsVo58llD3A0vlRKKRt8FGf5u69P9eQyIH8/z9vN/S0Q== - -caniuse-lite@^1.0.30001317: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001317: version "1.0.30001319" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz#eb4da4eb3ecdd409f7ba1907820061d56096e88f" integrity sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw== @@ -3737,7 +3634,7 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3746,7 +3643,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3942,9 +3839,9 @@ commander@^8.3.0: integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== commander@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.0.0.tgz#86d58f24ee98126568936bd1d3574e0308a99a40" - integrity sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw== + version "9.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.1.0.tgz#a6b263b2327f2e188c6402c42623327909f2dbec" + integrity sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w== common-path-prefix@^3.0.0: version "3.0.0" @@ -4249,52 +4146,52 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^*: - version "5.2.4" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.4.tgz#eced79bbc1ab7270337c4038a21891daac2329bc" - integrity sha512-w1Gg8xsebln6/axZ6qDFQHuglrGfbIHOIx0g4y9+etRlRab8CGpSpe6UMsrgJe4zhCaJ0LwLmc+PhdLRTwnhIA== +cssnano-preset-default@^5.2.5: + version "5.2.5" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.5.tgz#267ded811a3e1664d78707f5355fcd89feeb38ac" + integrity sha512-WopL7PzN7sos3X8B54/QGl+CZUh1f0qN4ds+y2d5EPwRSSc3jsitVw81O+Uyop0pXyOfPfZxnc+LmA8w/Ki/WQ== dependencies: css-declaration-sorter "^6.0.3" - cssnano-utils "^*" + cssnano-utils "^3.1.0" postcss-calc "^8.2.3" - postcss-colormin "^*" - postcss-convert-values "^*" - postcss-discard-comments "^*" - postcss-discard-duplicates "^*" - postcss-discard-empty "^*" - postcss-discard-overridden "^*" - postcss-merge-longhand "^*" - postcss-merge-rules "^*" - postcss-minify-font-values "^*" - postcss-minify-gradients "^*" - postcss-minify-params "^*" - postcss-minify-selectors "^*" - postcss-normalize-charset "^*" - postcss-normalize-display-values "^*" - postcss-normalize-positions "^*" - postcss-normalize-repeat-style "^*" - postcss-normalize-string "^*" - postcss-normalize-timing-functions "^*" - postcss-normalize-unicode "^*" - postcss-normalize-url "^*" - postcss-normalize-whitespace "^*" - postcss-ordered-values "^*" - postcss-reduce-initial "^*" - postcss-reduce-transforms "^*" - postcss-svgo "^*" - postcss-unique-selectors "^*" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.0" + postcss-discard-comments "^5.1.1" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.3" + postcss-merge-rules "^5.1.1" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.2" + postcss-minify-selectors "^5.2.0" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.0" + postcss-normalize-repeat-style "^5.1.0" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.1" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" -cssnano-utils@^*, cssnano-utils@^3.1.0: +cssnano-utils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== cssnano@^5.0.6: - version "5.1.4" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.4.tgz#c648192e8e2f1aacb7d839e6aa3706b50cc7f8e4" - integrity sha512-hbfhVZreEPyzl+NbvRsjNo54JOX80b+j6nqG2biLVLaZHJEiqGyMh4xDGHtwhUKd5p59mj2GlDqlUBwJUuIu5A== + version "5.1.5" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.5.tgz#5f3f519538c7f1c182c527096892243db3e17397" + integrity sha512-VZO1e+bRRVixMeia1zKagrv0lLN1B/r/u12STGNNUFxnp97LIFgZHQa0JxqlwEkvzUyA9Oz/WnCTAFkdEbONmg== dependencies: - cssnano-preset-default "^*" + cssnano-preset-default "^5.2.5" lilconfig "^2.0.3" yaml "^1.10.2" @@ -4335,9 +4232,9 @@ debug@^3.1.1, debug@^3.2.7: ms "^2.1.1" debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -4552,9 +4449,9 @@ domhandler@^3.0.0: domelementtype "^2.0.1" domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" - integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" @@ -4625,15 +4522,10 @@ ejs@^3.1.6: dependencies: jake "^10.6.1" -electron-to-chromium@^1.4.76: - version "1.4.82" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.82.tgz#51e123ca434b1eba8c434ece2b54f095b304a651" - integrity sha512-Ks+ANzLoIrFDUOJdjxYMH6CMKB8UQo5modAwvSZTxgF+vEs/U7G5IbWFUp6dS4klPkTDVdxbORuk8xAXXhMsWw== - electron-to-chromium@^1.4.84: - version "1.4.89" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.89.tgz#33c06592812a17a7131873f4596579084ce33ff8" - integrity sha512-z1Axg0Fu54fse8wN4fd+GAINdU5mJmLtcl6bqIcYyzNVGONcfHAeeJi88KYMQVKalhXlYuVPzKkFIU5VD0raUw== + version "1.4.92" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.92.tgz#88996e9aceb3a500710fd439abfa89b6cc1ac56c" + integrity sha512-YAVbvQIcDE/IJ/vzDMjD484/hsRbFPW2qXJPaYTfOhtligmfYEYOep+5QojpaEU9kq6bMvNeC2aG7arYvTHYsA== email-addresses@^3.0.1: version "3.1.0" @@ -5473,9 +5365,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.12.1" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb" - integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== + version "13.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: type-fest "^0.20.2" @@ -5544,7 +5436,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -6136,12 +6028,12 @@ isobject@^3.0.1: integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= jake@^10.6.1: - version "10.8.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + version "10.8.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.4.tgz#f6a8b7bf90c6306f768aa82bb7b98bf4ca15e84a" + integrity sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA== dependencies: async "0.9.x" - chalk "^2.4.2" + chalk "^4.0.2" filelist "^1.0.1" minimatch "^3.0.4" @@ -6238,11 +6130,9 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.2, json5@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonfile@^4.0.0: version "4.0.0" @@ -6346,11 +6236,16 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -lilconfig@2.0.4, lilconfig@^2.0.3: +lilconfig@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== +lilconfig@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -6409,15 +6304,6 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - loader-utils@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" @@ -7011,17 +6897,17 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" mri@^1.1.0: version "1.2.0" @@ -7113,9 +6999,9 @@ node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1: whatwg-url "^5.0.0" node-forge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c" - integrity sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.0.tgz#37a874ea723855f37db091e6c186e5b67a01d4b2" + integrity sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA== node-readfiles@^0.2.0: version "0.2.0" @@ -7649,7 +7535,7 @@ postcss-color-rebeccapurple@^7.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-colormin@^*: +postcss-colormin@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== @@ -7659,7 +7545,7 @@ postcss-colormin@^*: colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-convert-values@^*: +postcss-convert-values@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz#f8d3abe40b4ce4b1470702a0706343eac17e7c10" integrity sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g== @@ -7692,22 +7578,22 @@ postcss-dir-pseudo-class@^6.0.4: dependencies: postcss-selector-parser "^6.0.9" -postcss-discard-comments@^*: +postcss-discard-comments@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz#e90019e1a0e5b99de05f63516ce640bd0df3d369" integrity sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ== -postcss-discard-duplicates@^*: +postcss-discard-duplicates@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-discard-empty@^*: +postcss-discard-empty@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== -postcss-discard-overridden@^*: +postcss-discard-overridden@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== @@ -7795,50 +7681,50 @@ postcss-media-minmax@^5.0.0: resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== -postcss-merge-longhand@^*: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.2.tgz#fe3002f38ad5827c1d6f7d5bb3f71d2566a2a138" - integrity sha512-18/bp9DZnY1ai9RlahOfLBbmIUKfKFPASxRCiZ1vlpZqWPCn8qWPFlEozqmWL+kBtcEQmG8W9YqGCstDImvp/Q== +postcss-merge-longhand@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.3.tgz#a49e2be6237316e3b55e329e0a8da15d1f9f47ab" + integrity sha512-lX8GPGvZ0iGP/IboM7HXH5JwkXvXod1Rr8H8ixwiA372hArk0zP4ZcCy4z4Prg/bfNlbbTf0KCOjCF9kKnpP/w== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^*" + stylehacks "^5.1.0" -postcss-merge-rules@^*: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.0.tgz#a2d5117eba09c8686a5471d97bd9afcf30d1b41f" - integrity sha512-NecukEJovQ0mG7h7xV8wbYAkXGTO3MPKnXvuiXzOKcxoOodfTTKYjeo8TMhAswlSkjcPIBlnKbSFcTuVSDaPyQ== +postcss-merge-rules@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz#d327b221cd07540bcc8d9ff84446d8b404d00162" + integrity sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww== dependencies: browserslist "^4.16.6" caniuse-api "^3.0.0" cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" -postcss-minify-font-values@^*: +postcss-minify-font-values@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^*: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.0.tgz#de0260a67a13b7b321a8adc3150725f2c6612377" - integrity sha512-J/TMLklkONn3LuL8wCwfwU8zKC1hpS6VcxFkNUNjmVt53uKqrrykR3ov11mdUYyqVMEx67slMce0tE14cE4DTg== +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== dependencies: colord "^2.9.1" cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-params@^*: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.1.tgz#c5f8e7dac565e577dd99904787fbec576cbdbfb2" - integrity sha512-WCpr+J9Uz8XzMpAfg3UL8z5rde6MifBbh5L8bn8S2F5hq/YDJJzASYCnCHvAB4Fqb94ys8v95ULQkW2EhCFvNg== +postcss-minify-params@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz#77e250780c64198289c954884ebe3ee4481c3b1c" + integrity sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g== dependencies: browserslist "^4.16.6" cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^*: +postcss-minify-selectors@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz#17c2be233e12b28ffa8a421a02fc8b839825536c" integrity sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA== @@ -7880,47 +7766,47 @@ postcss-nesting@^10.1.3: dependencies: postcss-selector-parser "^6.0.9" -postcss-normalize-charset@^*: +postcss-normalize-charset@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -postcss-normalize-display-values@^*: +postcss-normalize-display-values@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^*: +postcss-normalize-positions@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz#902a7cb97cf0b9e8b1b654d4a43d451e48966458" integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^*: +postcss-normalize-repeat-style@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz#f6d6fd5a54f51a741cc84a37f7459e60ef7a6398" integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^*: +postcss-normalize-string@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^*: +postcss-normalize-timing-functions@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^*: +postcss-normalize-unicode@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== @@ -7928,7 +7814,7 @@ postcss-normalize-unicode@^*: browserslist "^4.16.6" postcss-value-parser "^4.2.0" -postcss-normalize-url@^*: +postcss-normalize-url@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== @@ -7936,7 +7822,7 @@ postcss-normalize-url@^*: normalize-url "^6.0.1" postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^*: +postcss-normalize-whitespace@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== @@ -7948,10 +7834,10 @@ postcss-opacity-percentage@^1.1.2: resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145" integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== -postcss-ordered-values@^*: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.0.tgz#04ef429e0991b0292bc918b135cd4c038f7b889f" - integrity sha512-wU4Z4D4uOIH+BUKkYid36gGDJNQtkVJT7Twv8qH6UyfttbbJWyw4/xIPuVEkkCtQLAJ0EdsNSh8dlvqkXb49TA== +postcss-ordered-values@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz#0b41b610ba02906a3341e92cab01ff8ebc598adb" + integrity sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw== dependencies: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" @@ -8029,7 +7915,7 @@ postcss-pseudo-class-any-link@^7.1.1: dependencies: postcss-selector-parser "^6.0.9" -postcss-reduce-initial@^*: +postcss-reduce-initial@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== @@ -8037,7 +7923,7 @@ postcss-reduce-initial@^*: browserslist "^4.16.6" caniuse-api "^3.0.0" -postcss-reduce-transforms@^*: +postcss-reduce-transforms@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== @@ -8064,7 +7950,7 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^*: +postcss-svgo@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== @@ -8072,7 +7958,7 @@ postcss-svgo@^*: postcss-value-parser "^4.2.0" svgo "^2.7.0" -postcss-unique-selectors@^*: +postcss-unique-selectors@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== @@ -8084,16 +7970,7 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.3.5, postcss@^8.4.7: - version "8.4.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032" - integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ== - dependencies: - nanoid "^3.3.1" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.12: +postcss@^8.3.5, postcss@^8.4.12, postcss@^8.4.7: version "8.4.12" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== @@ -8114,12 +7991,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.2.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== - -prettier@^2.6.0: +prettier@^2.2.1, prettier@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.0.tgz#12f8f504c4d8ddb76475f441337542fa799207d4" integrity sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A== @@ -8182,9 +8054,9 @@ property-information@^6.0.0: integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== prosemirror-commands@^1.1.6: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.1.tgz#eae0cb714df695260659b78ff5d201d3a037e50d" - integrity sha512-S/IkpXfpuLFsRynC2HQ5iYROUPiZskKS1+ClcWycGJvj4HMb/mVfeEkQrixYxgTl96EAh+RZQNWPC06GZXk5tQ== + version "1.2.2" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz#1bd167372ee20abf488aca9cece63c43fab182c9" + integrity sha512-TX+KpWudMon06frryfpO/u7hsQv2hu8L4VSVbCpi3/7wXHBgl+35mV85qfa3RpT8xD2f3MdeoTqH0vy5JdbXPg== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -8235,9 +8107,9 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.1.4: w3c-keyname "^2.2.0" prosemirror-markdown@^1.5.2: - version "1.7.1" - resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.7.1.tgz#811a4846da1b3bb661ceb4b37efb89cc4f0cd4b8" - integrity sha512-d1lNRPlbwuncErkR/fv2n3ZEhAoS+0udByM2mZkyDHeY3ux3bUnj7J/ep1XS0FiXUjffixTKI0IAax3H82JbEg== + version "1.8.0" + resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.8.0.tgz#4ae430470f9e433d6fb9d1e981842d7e4f664f69" + integrity sha512-RxGyM8dqdmlkYpM3PY/C5JBputv2xeKLNRqFpN04TtFlR9McN9Tmpf8DaP6HblfaZ8RofdUtQW+ghdArjANLvQ== dependencies: markdown-it "^12.0.0" prosemirror-model "^1.0.0" @@ -8284,9 +8156,9 @@ prosemirror-transform@1.2.5: prosemirror-model "^1.0.0" prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.3.4.tgz#1d1997009b7b145c2aa2773f7f670c8a3d4cb46f" - integrity sha512-gTsg3UIeaFuEY6+YmNPMgTpEkCKPedkFIUnsPpOMbclU701fEVI/e4VOXACXh3BO5rZJaBbEBwrnzB0mLp6eBA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.4.0.tgz#057344b7ef38d1a4ba370390eba8c35f9afe6b36" + integrity sha512-P+bv4JiLHcRy4krHByUglXR1yAMCuzHRAaSKInsoW7Rjy3aomPXM/MwRs+b7TGtC1e6ZM31KbapbvE4wV1X9RA== dependencies: prosemirror-model "^1.0.0" @@ -8305,9 +8177,9 @@ prosemirror-view@1.18.1: prosemirror-transform "^1.1.0" prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3: - version "1.23.9" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.9.tgz#1293370035bea71ecfa6651e02b9701c04832097" - integrity sha512-4ft8PuzYPLqQlYjkW7+jy3drquLrzB0cXu6bXyEgBEYnbv/uI/zBF1rGxmSZCDKwteKm1Wn24B+BSheSw/9sOA== + version "1.23.10" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.23.10.tgz#a3fb6a7c780c8cd84488fdd451c23becab9dbefb" + integrity sha512-/p8Orb1VeJEbf7Z/BltU9GMWADZRqKlna6TlQGK1snJ6fTdLRC4f4yF2MgNK4OMQjmAwJISUtEp5+Vu5CSbR1w== dependencies: prosemirror-model "^1.16.0" prosemirror-state "^1.0.0" @@ -8775,7 +8647,7 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== @@ -9626,17 +9498,17 @@ string-width@^5.0.0: strip-ansi "^7.0.1" string.prototype.matchall@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" - integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" es-abstract "^1.19.1" get-intrinsic "^1.1.1" - has-symbols "^1.0.2" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" string.prototype.trimend@^1.0.4: @@ -9759,7 +9631,7 @@ styled-reset@^4.3.4: resolved "https://registry.yarnpkg.com/styled-reset/-/styled-reset-4.3.4.tgz#87b6f43caa3f83a5f9dc63773c13b8bb71efbe69" integrity sha512-1UmkWmRwSPfzolKleyPjbZdBqkxSXv5ImqTP5WeSjWk0Z7IvEzsrYhrqinZfCg10eM1P6BEtFly8+puQJnN/0A== -stylehacks@^*: +stylehacks@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== @@ -10036,13 +9908,13 @@ ts-node@^10.6.0: yn "3.1.1" tsconfig-paths@^3.12.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz#4fcc48f9ccea8826c41b9ca093479de7f5018976" - integrity sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g== + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" - minimist "^1.2.0" + minimist "^1.2.6" strip-bom "^3.0.0" tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0: @@ -10198,9 +10070,11 @@ unist-util-is@^5.0.0: integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== unist-util-position@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.1.tgz#f8484b2da19a897a0180556d160c28633070dbb9" - integrity sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.2.tgz#1915816906a3503f3e40d65b6e4fe6d41845d2e3" + integrity sha512-Y6+plxR41dOLbyyqVDLuGWgXDmxdXslCSRYQkSDagBnOT9oFsQH0J8FzhirSklUEe0xZTT0WDnAE1gXPaDFljA== + dependencies: + "@types/unist" "^2.0.0" unist-util-stringify-position@^2.0.0: version "2.0.3" @@ -10862,9 +10736,9 @@ yargs@^16.2.0: yargs-parser "^20.2.2" yargs@^17.0.0, yargs@^17.0.1: - version "17.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" - integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + version "17.4.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.0.tgz#9fc9efc96bd3aa2c1240446af28499f0e7593d00" + integrity sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA== dependencies: cliui "^7.0.2" escalade "^3.1.1"