feat: improve tiptap

This commit is contained in:
fantasticit 2022-03-21 19:55:06 +08:00
parent b58f9449e0
commit 72c3b2f8ac
8 changed files with 146 additions and 230 deletions

View File

@ -19,6 +19,10 @@ const nextConfig = semi({
eslint: {
ignoreDuringBuilds: true,
},
// FIXME: douyinfe 的第三方包存在 ts 类型错误!
typescript: {
ignoreBuildErrors: true,
},
});
module.exports = nextConfig;

View File

@ -78,7 +78,6 @@
"react": "17.0.2",
"react-dom": "17.0.2",
"react-helmet": "^6.1.0",
"react-select": "^5.2.2",
"react-split-pane": "^0.1.92",
"scroll-into-view-if-needed": "^2.2.29",
"swr": "^1.2.0",

View File

@ -1,16 +1,51 @@
import { useEffect, useRef } from 'react';
import { NodeViewWrapper, NodeViewContent } from '@tiptap/react';
import { Button, Typography, Spin, Collapsible } from '@douyinfe/semi-ui';
import { IconDownload, IconPlayCircle } from '@douyinfe/semi-icons';
import { Button, Typography, Spin, Collapsible, Space } from '@douyinfe/semi-ui';
import {
IconDownload,
IconPlayCircle,
IconFile,
IconSong,
IconVideo,
IconImage,
IconClose,
} from '@douyinfe/semi-icons';
import { Tooltip } from 'components/tooltip';
import { useToggle } from 'hooks/useToggle';
import { download } from '../../services/download';
import { uploadFile } from 'services/file';
import { normalizeFileSize, extractFileExtension, extractFilename, normalizeFileType } from '../../services/file';
import {
normalizeFileSize,
extractFileExtension,
extractFilename,
normalizeFileType,
FileType,
} from '../../services/file';
import styles from './index.module.scss';
const { Text } = Typography;
const getFileTypeIcon = (type: FileType) => {
switch (type) {
case 'audio':
return <IconSong />;
case 'video':
return <IconVideo />;
case 'file':
return <IconFile />;
case 'image':
return <IconImage />;
default: {
const value: never = type;
throw new Error(value);
}
}
};
export const AttachmentWrapper = ({ editor, node, updateAttributes }) => {
const $upload = useRef();
const isEditable = editor.isEditable;
@ -19,6 +54,7 @@ export const AttachmentWrapper = ({ editor, node, updateAttributes }) => {
const [visible, toggleVisible] = useToggle(false);
const selectFile = () => {
if (!isEditable || error || url) return;
// @ts-ignore
isEditable && $upload.current.click();
};
@ -37,7 +73,7 @@ export const AttachmentWrapper = ({ editor, node, updateAttributes }) => {
updateAttributes({ ...fileInfo, url });
toggleLoading(false);
} catch (error) {
updateAttributes({ error: '上传失败:' + (error && error.message) || '未知错误' });
updateAttributes({ error: '文件上传失败:' + (error && error.message) || '未知错误' });
toggleLoading(false);
}
};
@ -51,30 +87,33 @@ export const AttachmentWrapper = ({ editor, node, updateAttributes }) => {
}
}, [url, autoTrigger]);
return (
<NodeViewWrapper as="div">
<div className={styles.wrap}>
{!url ? (
error ? (
<Text>{error}</Text>
) : (
<Spin spinning={loading}>
<Text onClick={selectFile} style={{ cursor: 'pointer' }}>
{loading ? '正在上传中' : '请选择文件'}
</Text>
<input ref={$upload} type="file" hidden onChange={handleFile} />
</Spin>
)
) : (
<>
<span>
const content = (() => {
if (error) {
return (
<div className={styles.wrap} onClick={selectFile}>
<Text>{error}</Text>
</div>
);
}
if (url) {
return (
<>
<div className={styles.wrap} onClick={selectFile}>
<Space>
{getFileTypeIcon(type)}
{fileName}.{fileExt}
<Text type="tertiary"> ({normalizeFileSize(fileSize)})</Text>
</span>
</Space>
<span>
{type === 'video' || type === 'audio' ? (
<Tooltip content="播放">
<Button theme={'borderless'} type="tertiary" icon={<IconPlayCircle />} onClick={toggleVisible} />
<Tooltip content={!visible ? '播放' : '收起'}>
<Button
theme={'borderless'}
type="tertiary"
icon={!visible ? <IconPlayCircle /> : <IconClose />}
onClick={toggleVisible}
/>
</Tooltip>
) : null}
<Tooltip content="下载">
@ -86,17 +125,29 @@ export const AttachmentWrapper = ({ editor, node, updateAttributes }) => {
/>
</Tooltip>
</span>
</>
)}
</div>
</div>
{url ? (
<Collapsible isOpen={visible}>
{type === 'video' && <video controls autoPlay src={url}></video>}
{type === 'audio' && <audio controls autoPlay src={url}></audio>}
</Collapsible>
) : null}
<NodeViewContent></NodeViewContent>
</NodeViewWrapper>
);
{url ? (
<Collapsible isOpen={visible}>
{type === 'video' && <video controls autoPlay src={url}></video>}
{type === 'audio' && <audio controls autoPlay src={url}></audio>}
</Collapsible>
) : null}
</>
);
}
if (isEditable && !url) {
return (
<div className={styles.wrap} onClick={selectFile}>
<Spin spinning={loading}>
<Text style={{ cursor: 'pointer' }}>{loading ? '正在上传中' : '请选择文件'}</Text>
<input ref={$upload} type="file" hidden onChange={handleFile} />
</Spin>
</div>
);
}
})();
return <NodeViewWrapper as="div">{content}</NodeViewWrapper>;
};

View File

@ -2,7 +2,7 @@ import { NodeViewWrapper, NodeViewContent } from '@tiptap/react';
import { useRouter } from 'next/router';
import Link from 'next/link';
import cls from 'classnames';
import Select from 'react-select';
import { Select } from '@douyinfe/semi-ui';
import { useWikiTocs } from 'data/wiki';
import { DataRender } from 'components/data-render';
import { IconDocument } from 'components/icons';
@ -16,8 +16,8 @@ export const DocumentReferenceWrapper = ({ editor, node, updateAttributes }) =>
const { wikiId, documentId, title } = node.attrs;
const { data: tocs, loading, error } = useWikiTocs(isShare ? null : wikiIdFromUrl);
const selectDoc = (toc) => {
const { wikiId, documentId, title } = toc.value;
const selectDoc = (str) => {
const [wikiId, title, documentId] = str.split('/');
updateAttributes({ wikiId, documentId, title });
};
@ -30,15 +30,20 @@ export const DocumentReferenceWrapper = ({ editor, node, updateAttributes }) =>
error={error}
normalContent={() => (
<Select
className="react-select"
placeholder="请选择文档"
value={{ label: title, value: { wikiId, documentId, title } }}
onChange={selectDoc}
options={tocs.map((toc) => ({
label: toc.title,
value: { title: toc.title, wikiId: toc.wikiId, documentId: toc.id },
}))}
/>
onChange={(v) => selectDoc(v)}
{...(wikiId && documentId ? { value: `${wikiId}/${title}/${documentId}` } : {})}
>
{(tocs || []).map((toc) => (
<Select.Option
// FIXME: semi-design 抄 antd抄的什么玩意
label={`${toc.title}/${toc.id}`}
value={`${toc.wikiId}/${toc.title}/${toc.id}`}
>
{toc.title}
</Select.Option>
))}
</Select>
)}
/>
)}

View File

@ -20,6 +20,7 @@ export const ImageWrapper = ({ editor, node, updateAttributes }) => {
};
const selectFile = () => {
if (!isEditable || error || src) return;
// @ts-ignore
isEditable && $upload.current.click();
};
@ -38,7 +39,7 @@ export const ImageWrapper = ({ editor, node, updateAttributes }) => {
updateAttributes({ ...fileInfo, src });
toggleLoading(false);
} catch (error) {
updateAttributes({ error: '上传失败:' + (error && error.message) || '未知错误' });
updateAttributes({ error: '图片上传失败:' + (error && error.message) || '未知错误' });
toggleLoading(false);
}
};
@ -52,16 +53,18 @@ export const ImageWrapper = ({ editor, node, updateAttributes }) => {
const content = (() => {
if (error) {
return <Text>{error}</Text>;
return (
<div className={styles.wrap}>
<Text>{error}</Text>
</div>
);
}
if (!src) {
return (
<div className={styles.wrap}>
<div className={styles.wrap} onClick={selectFile}>
<Spin spinning={loading}>
<Text onClick={selectFile} style={{ cursor: 'pointer' }}>
{loading ? '正在上传中' : '请选择图片'}
</Text>
<Text style={{ cursor: 'pointer' }}>{loading ? '正在上传中' : '请选择图片'}</Text>
<input ref={$upload} accept="image/*" type="file" hidden onChange={handleFile} />
</Spin>
</div>

View File

@ -39,7 +39,15 @@ export const normalizeFileSize = (size) => {
return (size / 1024 / 1024).toFixed(2) + ' MB';
};
export const normalizeFileType = (fileType): 'audio' | 'video' | 'file' => {
export type FileType = 'image' | 'audio' | 'video' | 'file';
export const normalizeFileType = (fileType): FileType => {
if (!fileType) return 'file';
if (fileType.startsWith('image')) {
return 'image';
}
if (fileType.startsWith('audio')) {
return 'audio';
}

View File

@ -204,12 +204,3 @@ a {
flex-direction: column;
align-items: center;
}
.react-select {
width: 180px;
font-size: 0.8em;
> div {
border: 1px solid var(--semi-color-border);
}
}

View File

@ -114,7 +114,6 @@ importers:
react: 17.0.2
react-dom: 17.0.2
react-helmet: ^6.1.0
react-select: ^5.2.2
react-split-pane: ^0.1.92
scroll-into-view-if-needed: ^2.2.29
swr: ^1.2.0
@ -191,7 +190,6 @@ importers:
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-helmet: 6.1.0_react@17.0.2
react-select: 5.2.2_b3482aaf5744fc7c2aeb7941b0e0a78f
react-split-pane: 0.1.92_react-dom@17.0.2+react@17.0.2
scroll-into-view-if-needed: 2.2.29
swr: 1.2.0_react@17.0.2
@ -518,6 +516,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.16.8
dev: true
/@babel/helper-module-transforms/7.16.7:
resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==}
@ -538,6 +537,7 @@ packages:
/@babel/helper-plugin-utils/7.16.7:
resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-simple-access/7.16.7:
resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==}
@ -630,15 +630,6 @@ packages:
'@babel/helper-plugin-utils': 7.16.7
dev: true
/@babel/plugin-syntax-jsx/7.16.7:
resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/helper-plugin-utils': 7.16.7
dev: false
/@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.16.12:
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
@ -906,92 +897,6 @@ packages:
- supports-color
dev: false
/@emotion/babel-plugin/11.7.2:
resolution: {integrity: sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ==}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/helper-module-imports': 7.16.7
'@babel/plugin-syntax-jsx': 7.16.7
'@babel/runtime': 7.16.7
'@emotion/hash': 0.8.0
'@emotion/memoize': 0.7.5
'@emotion/serialize': 1.0.2
babel-plugin-macros: 2.8.0
convert-source-map: 1.8.0
escape-string-regexp: 4.0.0
find-root: 1.1.0
source-map: 0.5.7
stylis: 4.0.13
dev: false
/@emotion/cache/11.7.1:
resolution: {integrity: sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==}
dependencies:
'@emotion/memoize': 0.7.5
'@emotion/sheet': 1.1.0
'@emotion/utils': 1.1.0
'@emotion/weak-memoize': 0.2.5
stylis: 4.0.13
dev: false
/@emotion/hash/0.8.0:
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
dev: false
/@emotion/memoize/0.7.5:
resolution: {integrity: sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==}
dev: false
/@emotion/react/11.8.2_b08e3c15324cbe90a6ff8fcd416c932c:
resolution: {integrity: sha512-+1bcHBaNJv5nkIIgnGKVsie3otS0wF9f1T1hteF3WeVvMNQEtfZ4YyFpnphGoot3ilU/wWMgP2SgIDuHLE/wAA==}
peerDependencies:
'@babel/core': ^7.0.0
'@types/react': '*'
react: '>=16.8.0'
peerDependenciesMeta:
'@babel/core':
optional: true
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.16.7
'@emotion/babel-plugin': 11.7.2
'@emotion/cache': 11.7.1
'@emotion/serialize': 1.0.2
'@emotion/utils': 1.1.0
'@emotion/weak-memoize': 0.2.5
'@types/react': 17.0.38
hoist-non-react-statics: 3.3.2
react: 17.0.2
dev: false
/@emotion/serialize/1.0.2:
resolution: {integrity: sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==}
dependencies:
'@emotion/hash': 0.8.0
'@emotion/memoize': 0.7.5
'@emotion/unitless': 0.7.5
'@emotion/utils': 1.1.0
csstype: 3.0.10
dev: false
/@emotion/sheet/1.1.0:
resolution: {integrity: sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==}
dev: false
/@emotion/unitless/0.7.5:
resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
dev: false
/@emotion/utils/1.1.0:
resolution: {integrity: sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==}
dev: false
/@emotion/weak-memoize/0.2.5:
resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==}
dev: false
/@eslint/eslintrc/1.2.1:
resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -2211,6 +2116,7 @@ packages:
/@types/parse-json/4.0.0:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
dev: true
/@types/prettier/2.4.3:
resolution: {integrity: sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==}
@ -2293,12 +2199,6 @@ packages:
resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
dev: true
/@types/react-transition-group/4.4.4:
resolution: {integrity: sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==}
dependencies:
'@types/react': 17.0.38
dev: false
/@types/react-window/1.8.5:
resolution: {integrity: sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw==}
dependencies:
@ -2976,14 +2876,6 @@ packages:
'@types/babel__traverse': 7.14.2
dev: true
/babel-plugin-macros/2.8.0:
resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==}
dependencies:
'@babel/runtime': 7.16.7
cosmiconfig: 6.0.0
resolve: 1.22.0
dev: false
/babel-preset-current-node-syntax/1.0.1_@babel+core@7.16.12:
resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
peerDependencies:
@ -3153,6 +3045,7 @@ packages:
/callsites/3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
dev: true
/camelcase/5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
@ -3413,6 +3306,7 @@ packages:
resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
dependencies:
safe-buffer: 5.1.2
dev: true
/cookie-signature/1.0.6:
resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
@ -3467,6 +3361,7 @@ packages:
parse-json: 5.2.0
path-type: 4.0.0
yaml: 1.10.2
dev: true
/create-require/1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
@ -3731,13 +3626,6 @@ packages:
esutils: 2.0.3
dev: true
/dom-helpers/5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dependencies:
'@babel/runtime': 7.16.7
csstype: 3.0.10
dev: false
/domexception/2.0.1:
resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==}
engines: {node: '>=8'}
@ -3824,6 +3712,7 @@ packages:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
is-arrayish: 0.2.1
dev: true
/es-abstract/1.19.1:
resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==}
@ -3895,6 +3784,7 @@ packages:
/escape-string-regexp/4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
dev: true
/escodegen/1.14.3:
resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==}
@ -4428,10 +4318,6 @@ packages:
unpipe: 1.0.0
dev: false
/find-root/1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
dev: false
/find-up/2.1.0:
resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=}
engines: {node: '>=4'}
@ -4784,12 +4670,6 @@ packages:
engines: {node: '>=12.0.0'}
dev: false
/hoist-non-react-statics/3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
dependencies:
react-is: 16.13.1
dev: false
/html-encoding-sniffer/2.0.1:
resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==}
engines: {node: '>=10'}
@ -4881,6 +4761,7 @@ packages:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
dev: true
/import-local/3.1.0:
resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
@ -4988,6 +4869,7 @@ packages:
/is-arrayish/0.2.1:
resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
dev: true
/is-bigint/1.0.4:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
@ -5019,6 +4901,7 @@ packages:
resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==}
dependencies:
has: 1.0.3
dev: true
/is-date-object/1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
@ -5770,6 +5653,7 @@ packages:
/json-parse-even-better-errors/2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
dev: true
/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@ -5928,6 +5812,7 @@ packages:
/lines-and-columns/1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
/linkify-it/3.0.3:
resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
@ -6644,6 +6529,7 @@ packages:
engines: {node: '>=6'}
dependencies:
callsites: 3.1.0
dev: true
/parse-json/5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
@ -6653,6 +6539,7 @@ packages:
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
dev: true
/parse5-htmlparser2-tree-adapter/6.0.1:
resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
@ -6712,6 +6599,7 @@ packages:
/path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/path-to-regexp/0.1.7:
resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=}
@ -6724,6 +6612,7 @@ packages:
/path-type/4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
dev: true
/pause-stream/0.0.11:
resolution: {integrity: sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=}
@ -7120,26 +7009,6 @@ packages:
react-draggable: 4.4.4_react-dom@17.0.2+react@17.0.2
dev: false
/react-select/5.2.2_b3482aaf5744fc7c2aeb7941b0e0a78f:
resolution: {integrity: sha512-miGS2rT1XbFNjduMZT+V73xbJEeMzVkJOz727F6MeAr2hKE0uUSA8Ff7vD44H32x2PD3SRB6OXTY/L+fTV3z9w==}
peerDependencies:
react: ^16.8.0 || ^17.0.0
react-dom: ^16.8.0 || ^17.0.0
dependencies:
'@babel/runtime': 7.16.7
'@emotion/cache': 11.7.1
'@emotion/react': 11.8.2_b08e3c15324cbe90a6ff8fcd416c932c
'@types/react-transition-group': 4.4.4
memoize-one: 5.2.1
prop-types: 15.8.1
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-transition-group: 4.4.2_react-dom@17.0.2+react@17.0.2
transitivePeerDependencies:
- '@babel/core'
- '@types/react'
dev: false
/react-side-effect/2.1.1_react@17.0.2:
resolution: {integrity: sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==}
peerDependencies:
@ -7180,20 +7049,6 @@ packages:
prop-types: 15.8.1
dev: false
/react-transition-group/4.4.2_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==}
peerDependencies:
react: '>=16.6.0'
react-dom: '>=16.6.0'
dependencies:
'@babel/runtime': 7.16.7
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
dev: false
/react-window/1.8.6_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==}
engines: {node: '>8.0.0'}
@ -7300,6 +7155,7 @@ packages:
/resolve-from/4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
dev: true
/resolve-from/5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
@ -7318,6 +7174,7 @@ packages:
is-core-module: 2.8.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/resolve/2.0.0-next.3:
resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==}
@ -7791,10 +7648,6 @@ packages:
react: 17.0.2
dev: false
/stylis/4.0.13:
resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==}
dev: false
/superagent/7.1.1:
resolution: {integrity: sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==}
engines: {node: '>=6.4.0 <13 || >=14'}
@ -7853,6 +7706,7 @@ packages:
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
/swr/1.2.0_react@17.0.2:
resolution: {integrity: sha512-C3IXeKOREn0jQ1ewXRENE7ED7jjGbFTakwB64eLACkCqkF/A0N2ckvpCTftcaSYi5yV36PzoehgVCOVRmtECcA==}
@ -8729,6 +8583,7 @@ packages:
/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
dev: true
/yargs-parser/20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}