From 592ba156b85b9273963ffab1038bfcdde00978c6 Mon Sep 17 00:00:00 2001 From: QiShaoXuan Date: Wed, 30 Nov 2022 16:08:37 +0800 Subject: [PATCH] feat: initial style of workspace slide bar --- packages/app/package.json | 7 +- packages/app/public/globals.css | 2 + packages/app/src/components/Header/index.tsx | 32 +- packages/app/src/components/Header/styles.ts | 36 ++- .../editor-provider/initial-editor.tsx | 39 +++ packages/app/src/components/editor.tsx | 11 +- .../components/workspace-slider-bar/icons.tsx | 13 + .../components/workspace-slider-bar/index.tsx | 41 +++ .../components/workspace-slider-bar/style.ts | 83 +++++ packages/app/src/pages/_app.tsx | 47 ++- packages/app/src/pages/index.tsx | 7 +- packages/app/src/styles/helper.ts | 18 ++ pnpm-lock.yaml | 284 +++++++++++++++++- 13 files changed, 563 insertions(+), 57 deletions(-) create mode 100644 packages/app/src/components/editor-provider/initial-editor.tsx create mode 100644 packages/app/src/components/workspace-slider-bar/icons.tsx create mode 100644 packages/app/src/components/workspace-slider-bar/index.tsx create mode 100644 packages/app/src/components/workspace-slider-bar/style.ts diff --git a/packages/app/package.json b/packages/app/package.json index 8a26eb07e2..3a77c6b193 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -2,15 +2,16 @@ "name": "@pathfinder/app", "version": "0.1.0", "scripts": { - "dev": "next dev", + "dev": "next dev -p 8080", "build": "next build", "export": "next export", "start": "next start", "lint": "next lint" }, "dependencies": { - "@blocksuite/blocks": "0.3.0-alpha.1", - "@blocksuite/editor": "0.3.0-alpha.1", + "@blocksuite/blocks": "0.3.0-alpha.3", + "@blocksuite/editor": "0.3.0-alpha.3", + "@blocksuite/store": "0.3.0-alpha.3", "@emotion/css": "^11.10.0", "@emotion/react": "^11.10.4", "@emotion/server": "^11.10.0", diff --git a/packages/app/public/globals.css b/packages/app/public/globals.css index c3f50fd465..aa58d38563 100644 --- a/packages/app/public/globals.css +++ b/packages/app/public/globals.css @@ -145,7 +145,9 @@ select, keygen, legend { color: var(--affine-text-color); + background-color: unset; outline: 0; + border: 0; font-size: 18px; line-height: 1.5; font-family: var(--affine-font-family); diff --git a/packages/app/src/components/Header/index.tsx b/packages/app/src/components/Header/index.tsx index 2c2eef8484..c18c802c9c 100644 --- a/packages/app/src/components/Header/index.tsx +++ b/packages/app/src/components/Header/index.tsx @@ -81,9 +81,15 @@ const PopoverContent = () => { ); }; -const BrowserWarning = ({ onClose }: { onClose: () => void }) => { +const BrowserWarning = ({ + show, + onClose, +}: { + show: boolean; + onClose: () => void; +}) => { return ( - + {getWarningMessage()} @@ -101,8 +107,10 @@ export const Header = () => { const { editor } = useEditor(); useEffect(() => { - if (editor) { - setTitle(editor.model.title || ''); + console.log('header', editor); + + if (editor?.model) { + setTitle(editor.model.title ?? ''); editor.model.propsUpdated.on(() => { setTitle(editor.model.title); }); @@ -111,19 +119,19 @@ export const Header = () => { return ( { setShowWarning(false); }} /> - { - contactModalHandler(true); - }} - > - - + {/* {*/} + {/* contactModalHandler(true);*/} + {/* }}*/} + {/*>*/} + {/* */} + {/**/} {title ? ( { diff --git a/packages/app/src/components/Header/styles.ts b/packages/app/src/components/Header/styles.ts index 3e3978ca3a..b5ca7561da 100644 --- a/packages/app/src/components/Header/styles.ts +++ b/packages/app/src/components/Header/styles.ts @@ -13,11 +13,11 @@ export const StyledHeader = styled.div<{ hasWarning: boolean }>( ({ hasWarning, theme }) => { return { height: '60px', - width: '100vw', - ...displayFlex('space-between', 'center'), + width: '100%', + ...displayFlex('flex-end', 'center'), background: 'var(--affine-page-background)', transition: 'background-color 0.5s', - position: 'fixed', + position: 'absolute', left: '0', top: hasWarning ? '36px' : '0', padding: '0 22px', @@ -97,19 +97,23 @@ export const IconButton = styled('div')(({ theme }) => { }; }); -export const StyledBrowserWarning = styled.div(({ theme }) => { - return { - backgroundColor: theme.colors.warningBackground, - color: theme.colors.warningColor, - height: '36px', - width: '100vw', - fontSize: theme.font.sm, - position: 'fixed', - left: '0', - top: '0', - ...displayFlex('center', 'center'), - }; -}); +export const StyledBrowserWarning = styled.div<{ show: boolean }>( + ({ theme, show }) => { + return { + backgroundColor: theme.colors.warningBackground, + color: theme.colors.warningColor, + height: '36px', + width: '100vw', + fontSize: theme.font.sm, + position: 'fixed', + left: '0', + top: '0', + display: show ? 'flex' : 'none', + justifyContent: 'center', + alignItems: 'center', + }; + } +); export const StyledCloseButton = styled.div(({ theme }) => { return { diff --git a/packages/app/src/components/editor-provider/initial-editor.tsx b/packages/app/src/components/editor-provider/initial-editor.tsx new file mode 100644 index 0000000000..1b1d6d8fb9 --- /dev/null +++ b/packages/app/src/components/editor-provider/initial-editor.tsx @@ -0,0 +1,39 @@ +import type { EditorContainer } from '@blocksuite/editor'; +import { createContext, useContext, useEffect, useState } from 'react'; +import type { PropsWithChildren } from 'react'; +import { createWebsocketDocProvider, Store } from '@blocksuite/store'; +import { BlockSchema, createEditor } from '@blocksuite/editor'; +import '@blocksuite/blocks'; + +const getEditorParams = () => { + const providers = []; + const params = new URLSearchParams(location.search); + if (params.get('syncModes') === 'websocket') { + const WebsocketDocProvider = createWebsocketDocProvider( + 'ws://127.0.0.1:3000/collaboration/AFFiNE' + ); + providers.push(WebsocketDocProvider); + } + + return { + providers, + }; +}; + +export const InitialEditor = ({ + setEditor, +}: { + setEditor: (editor: EditorContainer) => void; +}) => { + useEffect(() => { + const store = new Store({ + // ...getEditorParams(), + }); + const space = store.createSpace('page0').register(BlockSchema); + const editor = createEditor(space); + setEditor(editor); + }, [setEditor]); + return
111
; +}; + +export default InitialEditor; diff --git a/packages/app/src/components/editor.tsx b/packages/app/src/components/editor.tsx index a7ef3ff276..02e56ecf0c 100644 --- a/packages/app/src/components/editor.tsx +++ b/packages/app/src/components/editor.tsx @@ -2,10 +2,11 @@ import { useEditor } from '@/components/editor-provider'; import '@blocksuite/blocks'; import '@blocksuite/blocks/style'; import type { EditorContainer } from '@blocksuite/editor'; -import { createEditor } from '@blocksuite/editor'; +import { BlockSchema, createEditor } from '@blocksuite/editor'; import { forwardRef, Suspense, useEffect, useRef } from 'react'; import pkg from '../../package.json'; import exampleMarkdown from './example-markdown'; +import { Store } from '@blocksuite/store'; // eslint-disable-next-line react/display-name const BlockSuiteEditor = forwardRef(({}, ref) => { @@ -14,7 +15,13 @@ const BlockSuiteEditor = forwardRef(({}, ref) => { if (!containerElement.current) { return; } - const editor = createEditor(); + + const store = new Store({ + // ...getEditorParams(), + }); + const space = store.createSpace('page0').register(BlockSchema); + const editor = createEditor(space); + containerElement.current.appendChild(editor); if (ref) { if ('current' in ref) { diff --git a/packages/app/src/components/workspace-slider-bar/icons.tsx b/packages/app/src/components/workspace-slider-bar/icons.tsx new file mode 100644 index 0000000000..160dac720d --- /dev/null +++ b/packages/app/src/components/workspace-slider-bar/icons.tsx @@ -0,0 +1,13 @@ +export const Arrow = () => { + return ( + + + + ); +}; diff --git a/packages/app/src/components/workspace-slider-bar/index.tsx b/packages/app/src/components/workspace-slider-bar/index.tsx new file mode 100644 index 0000000000..7a4ef8361c --- /dev/null +++ b/packages/app/src/components/workspace-slider-bar/index.tsx @@ -0,0 +1,41 @@ +import React, { useState } from 'react'; +import { + StyledArrowButton, + StyledListItem, + StyledSliderBar, + StyledSubListItem, + StyledWrapper, +} from './style'; +import { Arrow } from './icons'; + +export const WorkSpaceSliderBar = () => { + const [show, setShow] = useState(false); + return ( + <> + + + + Quick search + All pages + Favourites + + document 1, this is a paper icondocument 1 + + document 2 + document 4 + Import + Bin + + { + setShow(!show); + }} + > + + + + ); +}; + +export default WorkSpaceSliderBar; diff --git a/packages/app/src/components/workspace-slider-bar/style.ts b/packages/app/src/components/workspace-slider-bar/style.ts new file mode 100644 index 0000000000..d8e98f3ccb --- /dev/null +++ b/packages/app/src/components/workspace-slider-bar/style.ts @@ -0,0 +1,83 @@ +import { displayFlex, styled, textEllipsis } from '@/styles'; + +export const StyledSliderBar = styled.div<{ show: boolean }>( + ({ theme, show }) => { + return { + width: show ? '320px' : '0', + height: '100vh', + background: '#FBFBFC', + boxShadow: theme.shadow.modal, + transition: 'width .15s', + position: 'relative', + zIndex: theme.zIndex.modal, + padding: show ? '24px 12px' : '24px 0', + overflowX: 'hidden', + }; + } +); +export const StyledWrapper = styled.div(() => { + return { + // padding: '24px 12px', + // height: '100%', + // overflowY: 'auto', + }; +}); +export const StyledArrowButton = styled.button<{ isShow: boolean }>( + ({ theme, isShow }) => { + return { + width: '32px', + height: '32px', + ...displayFlex('center', 'center'), + color: theme.colors.primaryColor, + backgroundColor: theme.colors.hoverBackground, + borderRadius: '50%', + transition: 'all .15s', + position: 'fixed', + top: '34px', + left: isShow ? '304px' : '-8px', + zIndex: theme.zIndex.modal, + svg: { + transform: isShow ? 'rotate(180deg)' : 'unset', + }, + ':hover': { + color: '#fff', + backgroundColor: theme.colors.primaryColor, + }, + }; + } +); + +export const StyledListItem = styled.button(({ theme }) => { + return { + width: '296px', + height: '32px', + marginTop: '12px', + fontSize: theme.font.sm, + color: theme.colors.popoverColor, + ...displayFlex('flex-start', 'center'), + ':hover': { + color: theme.colors.primaryColor, + backgroundColor: theme.colors.hoverBackground, + }, + }; +}); + +export const StyledSubListItem = styled.button(({ theme }) => { + return { + width: '296px', + height: '32px', + marginTop: '4px', + fontSize: theme.font.sm, + fontWeight: 400, + color: theme.colors.popoverColor, + paddingLeft: '45px', + lineHeight: '32px', + textAlign: 'start', + ...textEllipsis(1), + ':hover': { + color: theme.colors.primaryColor, + backgroundColor: theme.colors.hoverBackground, + fontWeight: 500, + }, + }; +}); diff --git a/packages/app/src/pages/_app.tsx b/packages/app/src/pages/_app.tsx index afa0fb03e7..f05b941463 100644 --- a/packages/app/src/pages/_app.tsx +++ b/packages/app/src/pages/_app.tsx @@ -6,26 +6,57 @@ import './temporary.css'; import { EditorProvider } from '@/components/editor-provider'; import { ModalProvider } from '@/components/global-modal-provider'; import { Logger } from '@toeverything/pathfinder-logger'; - +import { WorkSpaceSliderBar } from '@/components/workspace-slider-bar'; import '@fontsource/space-mono'; import '@fontsource/poppins'; import '../utils/print-build-info'; +import { styled } from '@/styles'; +import type { ReactNode, PropsWithChildren, FC } from 'react'; +import { cloneElement } from 'react'; const ThemeProvider = dynamic(() => import('@/styles/themeProvider'), { ssr: false, }); +const StyledPage = styled('div')(({ theme }) => { + return { + height: '100vh', + backgroundColor: theme.colors.pageBackground, + transition: 'background-color .5s', + display: 'flex', + }; +}); + +const ProviderComposer: FC< + PropsWithChildren<{ + contexts: any; + }> +> = ({ contexts, children }) => + contexts.reduceRight( + (kids: ReactNode, parent: any) => + cloneElement(parent, { + children: kids, + }), + children + ); + function MyApp({ Component, pageProps }: AppProps) { return ( <> - - - - - - - + , + , + , + ]} + > + + {/**/} + + + + ); } diff --git a/packages/app/src/pages/index.tsx b/packages/app/src/pages/index.tsx index 8328838309..9a73856adf 100644 --- a/packages/app/src/pages/index.tsx +++ b/packages/app/src/pages/index.tsx @@ -14,11 +14,12 @@ const StyledEditorContainer = styled('div')(({ theme }) => { }; }); -const StyledPage = styled('div')(({ theme }) => { +const StyledWrapper = styled('div')(({ theme }) => { return { height: '100vh', backgroundColor: theme.colors.pageBackground, transition: 'background-color .5s', + flexGrow: 1, }; }); @@ -51,7 +52,7 @@ const DynamicEditor = dynamic(() => import('../components/editor'), { const Home: NextPage = () => { return ( - +
@@ -59,7 +60,7 @@ const Home: NextPage = () => { - + ); }; diff --git a/packages/app/src/styles/helper.ts b/packages/app/src/styles/helper.ts index 50955a254b..ce77863c68 100644 --- a/packages/app/src/styles/helper.ts +++ b/packages/app/src/styles/helper.ts @@ -82,3 +82,21 @@ export const fixedCenter = ({ })`, }; }; + +export const textEllipsis = (lineNum: number = 1): CSSProperties => { + if (lineNum > 1) { + return { + display: '-webkit-box', + wordBreak: 'break-all', + WebkitBoxOrient: 'vertical', + WebkitLineClamp: '$lineNum', //需要显示的行数 + overflow: 'hidden', + textOverflow: 'ellipsis', + }; + } + return { + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + }; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ce771dfcd..51b8bd8d2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,8 +22,9 @@ importers: packages/app: specifiers: - '@blocksuite/blocks': 0.3.0-alpha.1 - '@blocksuite/editor': 0.3.0-alpha.1 + '@blocksuite/blocks': 0.3.0-alpha.3 + '@blocksuite/editor': 0.3.0-alpha.3 + '@blocksuite/store': 0.3.0-alpha.3 '@emotion/css': ^11.10.0 '@emotion/react': ^11.10.4 '@emotion/server': ^11.10.0 @@ -51,8 +52,9 @@ importers: react-dom: 18.2.0 typescript: 4.8.3 dependencies: - '@blocksuite/blocks': 0.3.0-alpha.1 - '@blocksuite/editor': 0.3.0-alpha.1 + '@blocksuite/blocks': 0.3.0-alpha.3 + '@blocksuite/editor': 0.3.0-alpha.3 + '@blocksuite/store': 0.3.0-alpha.3 '@emotion/css': 11.10.0 '@emotion/react': 11.10.4_w5j4k42lgipnm43s3brx6h3c34 '@emotion/server': 11.10.0_@emotion+css@11.10.0 @@ -168,10 +170,10 @@ packages: to-fast-properties: 2.0.0 dev: false - /@blocksuite/blocks/0.3.0-alpha.1: - resolution: {integrity: sha512-UQVq+qOpiZOSuLoT6hSv+w6Mb+okaecwxOQXhYkcG0ELUtCXXv6roihGHrhCKG6FueNjgw3p6LyZCroF2+UftA==} + /@blocksuite/blocks/0.3.0-alpha.3: + resolution: {integrity: sha512-/GeyAZn1cpkQL0gNQq95uDUnF9TshrNUTBSO8cCIXq4qwfcFMU5ov58XiJ/cvEN67SUTiZGQbA/qTvWEgEUyrQ==} dependencies: - '@blocksuite/store': 0.3.0-alpha.1 + '@blocksuite/store': 0.3.0-alpha.3 hotkeys-js: 3.10.0 lit: 2.4.0 quill: 1.3.7 @@ -182,11 +184,11 @@ packages: - utf-8-validate dev: false - /@blocksuite/editor/0.3.0-alpha.1: - resolution: {integrity: sha512-VrJinFIDcXR9bCfT6A3Vk3UddDEONOWZx3kLCJbgcgKzyGAf2ibkB4d2OWYBmbiysx325orG+iZ2BL9R8FU51A==} + /@blocksuite/editor/0.3.0-alpha.3: + resolution: {integrity: sha512-MP1mLoj2TXkhPxKro8K0yPPxBmvOUutTEZVNL4XyP5JNa4gKvshJIIlEgKL3/c55EzFDBd7Ig9tl2SbPvptE1w==} dependencies: - '@blocksuite/blocks': 0.3.0-alpha.1 - '@blocksuite/store': 0.3.0-alpha.1 + '@blocksuite/blocks': 0.3.0-alpha.3 + '@blocksuite/store': 0.3.0-alpha.3 lit: 2.4.0 marked: 4.1.1 turndown: 7.1.1 @@ -196,13 +198,16 @@ packages: - utf-8-validate dev: false - /@blocksuite/store/0.3.0-alpha.1: - resolution: {integrity: sha512-eBRA9iH2Ui+SyRciOy58cwcg9OPa4VL7EIUERY0XcAgXdi1s+JCrnCntHeWEBI985yKc+jVZY2mldqGzgJQwwQ==} + /@blocksuite/store/0.3.0-alpha.3: + resolution: {integrity: sha512-XIe2FROwq+zJV3dWYXwcmiEqGF08ywkgAgKSnCn6iD1N2x+wWZEvGxowKPi7871DAd2QvCOaSM2vv9QTggXXag==} dependencies: + flexsearch: 0.7.21 + idb-keyval: 6.2.0 lib0: 0.2.52 y-indexeddb: 9.0.9_yjs@13.5.41 y-protocols: 1.0.5 y-webrtc: 10.2.3 + y-websocket: 1.4.5_yjs@13.5.41 yjs: 13.5.41 transitivePeerDependencies: - bufferutil @@ -1036,6 +1041,30 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /abstract-leveldown/6.2.3: + resolution: {integrity: sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==} + engines: {node: '>=6'} + dependencies: + buffer: 5.7.1 + immediate: 3.3.0 + level-concat-iterator: 2.0.1 + level-supports: 1.0.1 + xtend: 4.0.2 + dev: false + optional: true + + /abstract-leveldown/6.3.0: + resolution: {integrity: sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==} + engines: {node: '>=6'} + dependencies: + buffer: 5.7.1 + immediate: 3.3.0 + level-concat-iterator: 2.0.1 + level-supports: 1.0.1 + xtend: 4.0.2 + dev: false + optional: true + /acorn-jsx/5.3.2_acorn@8.8.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1129,6 +1158,11 @@ packages: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} dev: true + /async-limiter/1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: false + optional: true + /axe-core/4.4.3: resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==} engines: {node: '>=4'} @@ -1173,6 +1207,14 @@ packages: resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} dev: false + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + optional: true + /buffer/6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: @@ -1344,6 +1386,15 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /deferred-leveldown/5.3.0: + resolution: {integrity: sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==} + engines: {node: '>=6'} + dependencies: + abstract-leveldown: 6.2.3 + inherits: 2.0.4 + dev: false + optional: true + /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} @@ -1393,10 +1444,29 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true + /encoding-down/6.3.0: + resolution: {integrity: sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==} + engines: {node: '>=6'} + dependencies: + abstract-leveldown: 6.3.0 + inherits: 2.0.4 + level-codec: 9.0.2 + level-errors: 2.0.1 + dev: false + optional: true + /err-code/3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} dev: false + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + dev: false + optional: true + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -1864,6 +1934,10 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /flexsearch/0.7.21: + resolution: {integrity: sha512-W7cHV7Hrwjid6lWmy0IhsWDFQboWSng25U3VVywpHOTJnnAZNPScog67G+cVpeX9f7yDD21ih0WDrMMT+JoaYg==} + dev: false + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -2021,6 +2095,12 @@ packages: through2: 0.4.2 dev: false + /idb-keyval/6.2.0: + resolution: {integrity: sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==} + dependencies: + safari-14-idb-fix: 3.0.0 + dev: false + /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false @@ -2030,6 +2110,11 @@ packages: engines: {node: '>= 4'} dev: true + /immediate/3.3.0: + resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} + dev: false + optional: true + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2226,6 +2311,98 @@ packages: language-subtag-registry: 0.3.22 dev: true + /level-codec/9.0.2: + resolution: {integrity: sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==} + engines: {node: '>=6'} + dependencies: + buffer: 5.7.1 + dev: false + optional: true + + /level-concat-iterator/2.0.1: + resolution: {integrity: sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==} + engines: {node: '>=6'} + dev: false + optional: true + + /level-errors/2.0.1: + resolution: {integrity: sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==} + engines: {node: '>=6'} + dependencies: + errno: 0.1.8 + dev: false + optional: true + + /level-iterator-stream/4.0.2: + resolution: {integrity: sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==} + engines: {node: '>=6'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + xtend: 4.0.2 + dev: false + optional: true + + /level-js/5.0.2: + resolution: {integrity: sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==} + dependencies: + abstract-leveldown: 6.2.3 + buffer: 5.7.1 + inherits: 2.0.4 + ltgt: 2.2.1 + dev: false + optional: true + + /level-packager/5.1.1: + resolution: {integrity: sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==} + engines: {node: '>=6'} + dependencies: + encoding-down: 6.3.0 + levelup: 4.4.0 + dev: false + optional: true + + /level-supports/1.0.1: + resolution: {integrity: sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==} + engines: {node: '>=6'} + dependencies: + xtend: 4.0.2 + dev: false + optional: true + + /level/6.0.1: + resolution: {integrity: sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==} + engines: {node: '>=8.6.0'} + dependencies: + level-js: 5.0.2 + level-packager: 5.1.1 + leveldown: 5.6.0 + dev: false + optional: true + + /leveldown/5.6.0: + resolution: {integrity: sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==} + engines: {node: '>=8.6.0'} + requiresBuild: true + dependencies: + abstract-leveldown: 6.2.3 + napi-macros: 2.0.0 + node-gyp-build: 4.1.1 + dev: false + optional: true + + /levelup/4.4.0: + resolution: {integrity: sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==} + engines: {node: '>=6'} + dependencies: + deferred-leveldown: 5.3.0 + level-errors: 2.0.1 + level-iterator-stream: 4.0.2 + level-supports: 1.0.1 + xtend: 4.0.2 + dev: false + optional: true + /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2273,6 +2450,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -2293,6 +2474,11 @@ packages: yallist: 4.0.0 dev: true + /ltgt/2.2.1: + resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} + dev: false + optional: true + /marked/4.1.1: resolution: {integrity: sha512-0cNMnTcUJPxbA6uWmCmjWz4NJRe/0Xfk2NhXCUHjew9qJzFN20krFnsUe7QynwqOwa5m1fZ4UDg0ycKFVC0ccw==} engines: {node: '>= 12'} @@ -2345,6 +2531,11 @@ packages: hasBin: true dev: false + /napi-macros/2.0.0: + resolution: {integrity: sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==} + dev: false + optional: true + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -2439,6 +2630,12 @@ packages: - babel-plugin-macros dev: false + /node-gyp-build/4.1.1: + resolution: {integrity: sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==} + hasBin: true + dev: false + optional: true + /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -2632,6 +2829,11 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: false + optional: true + /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} @@ -2790,6 +2992,10 @@ packages: queue-microtask: 1.2.3 dev: true + /safari-14-idb-fix/3.0.0: + resolution: {integrity: sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==} + dev: false + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false @@ -3131,6 +3337,22 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /ws/6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + requiresBuild: true + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + dev: false + optional: true + /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -3153,6 +3375,12 @@ packages: object-keys: 0.4.0 dev: false + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + optional: true + /y-indexeddb/9.0.9_yjs@13.5.41: resolution: {integrity: sha512-GcJbiJa2eD5hankj46Hea9z4hbDnDjvh1fT62E5SpZRsv8GcEemw34l1hwI2eknGcv5Ih9JfusT37JLx9q3LFg==} peerDependencies: @@ -3162,6 +3390,18 @@ packages: yjs: 13.5.41 dev: false + /y-leveldb/0.1.1_yjs@13.5.41: + resolution: {integrity: sha512-L8Q0MQmxCQ0qWIOuPzLbWn95TNhrCI7M6LaHnilU4I2IX08e4Dmfg5Tgy4JZ3tnl2aiuZyDOJplHl/msIB/IsA==} + requiresBuild: true + peerDependencies: + yjs: ^13.0.0 + dependencies: + level: 6.0.1 + lib0: 0.2.52 + yjs: 13.5.41 + dev: false + optional: true + /y-protocols/1.0.5: resolution: {integrity: sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==} dependencies: @@ -3184,6 +3424,24 @@ packages: - utf-8-validate dev: false + /y-websocket/1.4.5_yjs@13.5.41: + resolution: {integrity: sha512-5d9LTSy0GQKqSd/FKRo5DMBlsiTlCipbKcIgPLlno+5xHtfT8bm3uQdcbY9JvLfckojilLZWauXJu0vzDZX05w==} + hasBin: true + peerDependencies: + yjs: ^13.5.6 + dependencies: + lib0: 0.2.52 + lodash.debounce: 4.0.8 + y-protocols: 1.0.5 + yjs: 13.5.41 + optionalDependencies: + ws: 6.2.2 + y-leveldb: 0.1.1_yjs@13.5.41 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true