From b7ebb6463b9764b9f98e7b592600f7b66cb62903 Mon Sep 17 00:00:00 2001 From: Christopher Loverich Date: Wed, 13 Oct 2021 17:17:59 -0500 Subject: [PATCH 1/7] wip: plate migration --- package.json | 11 +- src/{markdown.ts => markdown/index.ts} | 5 +- .../remark-slate-transformer/README.md | 9 + .../remark-slate-transformer/index.ts | 6 + .../remark-slate-transformer/models/mdast.ts | 224 +++ .../remark-slate-transformer/models/slate.ts | 8 + .../plugins/remark-to-slate.ts | 8 + .../plugins/slate-to-remark.ts | 12 + .../transformers/mdast-to-slate.ts | 453 ++++++ .../transformers/slate-to-mdast.ts | 502 +++++++ src/markdown/remark-slate-transformer/util.ts | 32 + src/preload/importer/indexer.ts | 3 +- src/views/edit/editor/index.tsx | 139 ++ src/views/edit/editor/pluginOptions.ts | 95 ++ src/views/edit/index.tsx | 267 ++-- src/views/edit/toolbar.tsx | 70 + src/views/edit/util.ts | 16 +- yarn.lock | 1274 ++++++++++++++++- 18 files changed, 2937 insertions(+), 197 deletions(-) rename src/{markdown.ts => markdown/index.ts} (96%) create mode 100644 src/markdown/remark-slate-transformer/README.md create mode 100644 src/markdown/remark-slate-transformer/index.ts create mode 100644 src/markdown/remark-slate-transformer/models/mdast.ts create mode 100644 src/markdown/remark-slate-transformer/models/slate.ts create mode 100644 src/markdown/remark-slate-transformer/plugins/remark-to-slate.ts create mode 100644 src/markdown/remark-slate-transformer/plugins/slate-to-remark.ts create mode 100644 src/markdown/remark-slate-transformer/transformers/mdast-to-slate.ts create mode 100644 src/markdown/remark-slate-transformer/transformers/slate-to-mdast.ts create mode 100644 src/markdown/remark-slate-transformer/util.ts create mode 100644 src/views/edit/editor/index.tsx create mode 100644 src/views/edit/editor/pluginOptions.ts create mode 100644 src/views/edit/toolbar.tsx diff --git a/package.json b/package.json index 8fe1ccd..f8720b9 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dev:electron": "electron src/electron/index.js", "test": "mocha -r ts-node/register -r esm src/**/*.test.ts", "test:one": "mocha -r ts-node/register -r esm", - "postinstall": "./rebuild-better-sqlite3.sh" + "rebuild": "./rebuild-better-sqlite3.sh" }, "dependencies": { "ajv": "^8.6.2", @@ -43,6 +43,7 @@ "@types/react": "^17.0.27", "@types/react-dom": "^17.0.9", "@types/rehype-react": "^4.0.0", + "@udecode/plate": "^5.3.0", "chai": "^4.2.0", "chai-json-schema-ajv": "^5.2.4", "css-loader": "^3.6.0", @@ -64,12 +65,14 @@ "rehype-react": "^6.1.0", "remark-rehype": "^7.0.0", "remark-slate-transformer": "^0.4.1", - "slate": "^0.65.3", - "slate-history": "^0.65.3", - "slate-react": "^0.65.3", + "slate": "^0.66.5", + "slate-history": "^0.66.0", + "slate-hyperscript": "^0.66.0", + "slate-react": "^0.66.7", "source-map-loader": "^1.0.0", "spectre.css": "^0.5.8", "style-loader": "^1.2.1", + "styled-components": "^5.3.1", "ts-loader": "^7.0.5", "ts-node": "^8.10.2", "typescript": "^4.3.5", diff --git a/src/markdown.ts b/src/markdown/index.ts similarity index 96% rename from src/markdown.ts rename to src/markdown/index.ts index 59d2862..7989249 100644 --- a/src/markdown.ts +++ b/src/markdown/index.ts @@ -3,11 +3,12 @@ import remarkParse, { RemarkParseOptions } from "remark-parse"; import remarkStringify, { RemarkStringifyOptions } from "remark-stringify"; import { Root } from "ts-mdast"; // https://github.com/inokawa/remark-slate-transformer/ +// import { slateToRemark } from "remark-slate-transformer"; import { remarkToSlate, slateToRemark, - mdastToSlate, -} from "remark-slate-transformer"; + slateToMdast, +} from "./remark-slate-transformer"; import { Node as SNode } from "slate"; export * from "ts-mdast"; diff --git a/src/markdown/remark-slate-transformer/README.md b/src/markdown/remark-slate-transformer/README.md new file mode 100644 index 0000000..7554350 --- /dev/null +++ b/src/markdown/remark-slate-transformer/README.md @@ -0,0 +1,9 @@ +This is a partial fork of https://github.com/inokawa/remark-slate-transformer + +I did this to quickly modify some of the output node types when converting mdast to slate. + +If it works, consider formally forking, or opening a PR to the original repo and in particular: + +https://github.com/inokawa/remark-slate-transformer/issues/37 +https://github.com/inokawa/remark-slate-transformer/issues/31 +https://github.com/inokawa/remark-slate-transformer/issues/67 \ No newline at end of file diff --git a/src/markdown/remark-slate-transformer/index.ts b/src/markdown/remark-slate-transformer/index.ts new file mode 100644 index 0000000..f1b4005 --- /dev/null +++ b/src/markdown/remark-slate-transformer/index.ts @@ -0,0 +1,6 @@ +export { default as remarkToSlate } from "./plugins/remark-to-slate"; +export { default as slateToRemark } from "./plugins/slate-to-remark"; +// export { default as slateToRemarkLegacy } from "./plugins/slate0.47-to-remark"; +// export { default as remarkToSlateLegacy } from "./plugins/remark-to-slate0.47"; +// export { mdastToSlate } from "./transformers/mdast-to-slate"; +export { slateToMdast } from "./transformers/slate-to-mdast"; diff --git a/src/markdown/remark-slate-transformer/models/mdast.ts b/src/markdown/remark-slate-transformer/models/mdast.ts new file mode 100644 index 0000000..795cdaf --- /dev/null +++ b/src/markdown/remark-slate-transformer/models/mdast.ts @@ -0,0 +1,224 @@ +// ref: https://github.com/syntax-tree/mdast + +export interface Parent { + children: Content[]; +} + +export interface Literal { + value: string; +} + +export interface Root extends Parent { + type: "root"; +} + +export interface Paragraph extends Parent { + type: "paragraph"; + children: PhrasingContent[]; +} + +export interface Heading extends Parent { + type: "heading"; + depth: 1 | 2 | 3 | 4 | 5 | 6; + children: PhrasingContent[]; +} + +export interface ThematicBreak { + type: "thematicBreak"; +} + +export interface Blockquote extends Parent { + type: "blockquote"; + children: BlockContent[]; +} + +export interface List extends Parent { + type: "list"; + ordered?: boolean; + start?: number; + spread?: boolean; + children: ListContent[]; +} + +export interface ListItem extends Parent { + type: "listItem"; + checked?: boolean; + spread?: boolean; + children: BlockContent[]; +} + +export interface Table extends Parent { + type: "table"; + align?: AlignType[]; + children: TableContent[]; +} + +export interface TableRow extends Parent { + type: "tableRow"; + children: RowContent[]; +} + +export interface TableCell extends Parent { + type: "tableCell"; + children: PhrasingContent[]; +} + +export interface HTML extends Literal { + type: "html"; +} + +export interface Code extends Literal { + type: "code"; + lang?: string; + meta?: string; +} + +export interface YAML extends Literal { + type: "yaml"; +} + +export interface TOML extends Literal { + type: "toml"; +} + +export interface Definition extends Association, Resource { + type: "definition"; +} + +export interface FootnoteDefinition extends Parent, Association { + type: "footnoteDefinition"; + children: BlockContent[]; +} + +export interface Text extends Literal { + type: "text"; +} + +export interface Emphasis extends Parent { + type: "emphasis"; + children: PhrasingContent[]; +} + +export interface Strong extends Parent { + type: "strong"; + children: PhrasingContent[]; +} + +export interface Delete extends Parent { + type: "delete"; + children: PhrasingContent[]; +} + +export interface InlineCode extends Literal { + type: "inlineCode"; +} + +export interface Break { + type: "break"; +} + +export interface Link extends Parent, Resource { + type: "link"; + children: StaticPhrasingContent[]; +} + +export interface Image extends Resource, Alternative { + type: "image"; +} + +export interface LinkReference extends Parent, Reference { + type: "linkReference"; + children: StaticPhrasingContent[]; +} + +export interface ImageReference extends Reference, Alternative { + type: "imageReference"; +} + +export interface Footnote extends Parent { + type: "footnote"; + children: PhrasingContent[]; +} + +export interface FootnoteReference extends Association { + type: "footnoteReference"; +} + +export interface Math extends Literal { + type: "math"; +} + +export interface InlineMath extends Literal { + type: "inlineMath"; +} + +export interface Resource { + url: string; + title?: string; +} + +export interface Association { + identifier: string; + label?: string; +} + +export interface Reference extends Association { + referenceType: ReferenceType; +} + +export interface Alternative { + alt?: string; +} + +export type Content = + | TopLevelContent + | ListContent + | TableContent + | RowContent + | PhrasingContent; + +export type TopLevelContent = + | BlockContent + | FrontmatterContent + | DefinitionContent; + +export type BlockContent = + | Paragraph + | Heading + | ThematicBreak + | Blockquote + | List + | Table + | HTML + | Code + | Math; + +export type FrontmatterContent = YAML | TOML; + +export type DefinitionContent = Definition | FootnoteDefinition; + +export type ListContent = ListItem; + +export type TableContent = TableRow; + +export type RowContent = TableCell; + +export type PhrasingContent = StaticPhrasingContent | Link | LinkReference; + +export type StaticPhrasingContent = + | Text + | Emphasis + | Strong + | Delete + | HTML + | InlineCode + | Break + | Image + | ImageReference + | Footnote + | FootnoteReference + | InlineMath; + +export type AlignType = "left" | "right" | "center" | null; + +export type ReferenceType = "shortcut" | "collapsed" | "full"; diff --git a/src/markdown/remark-slate-transformer/models/slate.ts b/src/markdown/remark-slate-transformer/models/slate.ts new file mode 100644 index 0000000..5fa9d22 --- /dev/null +++ b/src/markdown/remark-slate-transformer/models/slate.ts @@ -0,0 +1,8 @@ +// ref: https://docs.slatejs.org/concepts/11-typescript + +import * as slate from "slate"; + +export type Node = Editor | Element | Text; +export type Editor = slate.Editor; +export type Element = slate.Element & { type: string }; +export type Text = slate.Text; diff --git a/src/markdown/remark-slate-transformer/plugins/remark-to-slate.ts b/src/markdown/remark-slate-transformer/plugins/remark-to-slate.ts new file mode 100644 index 0000000..de9a79b --- /dev/null +++ b/src/markdown/remark-slate-transformer/plugins/remark-to-slate.ts @@ -0,0 +1,8 @@ +import { mdastToSlate } from "../transformers/mdast-to-slate"; + +export default function plugin() { + // @ts-ignore + this.Compiler = function (node: any) { + return mdastToSlate(node); + }; +} diff --git a/src/markdown/remark-slate-transformer/plugins/slate-to-remark.ts b/src/markdown/remark-slate-transformer/plugins/slate-to-remark.ts new file mode 100644 index 0000000..ffd4c1f --- /dev/null +++ b/src/markdown/remark-slate-transformer/plugins/slate-to-remark.ts @@ -0,0 +1,12 @@ +import type { Plugin } from "unified"; +import { slateToMdast } from "../transformers/slate-to-mdast"; + +type Settings = {}; + +const plugin: Plugin<[Settings?]> = function (settings?: Settings) { + // @ts-ignore + return function (node: any) { + return slateToMdast(node); + }; +}; +export default plugin; diff --git a/src/markdown/remark-slate-transformer/transformers/mdast-to-slate.ts b/src/markdown/remark-slate-transformer/transformers/mdast-to-slate.ts new file mode 100644 index 0000000..6e9a63c --- /dev/null +++ b/src/markdown/remark-slate-transformer/transformers/mdast-to-slate.ts @@ -0,0 +1,453 @@ +import * as slate from "../models/slate"; +import * as mdast from "../models/mdast"; + +// NOTE: added +import { prefixUrl } from "../util"; + +// NOTE: added, and a good example of what changes I would want to make to this library! +import { + ELEMENT_LI, + ELEMENT_LIC, + ELEMENT_OL, + ELEMENT_TODO_LI, + ELEMENT_UL, +} from "@udecode/plate"; // todo: sub-package which has only elements? + +export type Decoration = { + [key in ( + | mdast.Emphasis + | mdast.Strong + | mdast.Delete + | mdast.InlineCode + )["type"]]?: true; +}; + +export function mdastToSlate(node: mdast.Root): slate.Node[] { + return createSlateRoot(node); +} + +function createSlateRoot(root: mdast.Root): slate.Node[] { + return convertNodes(root.children, {}); +} + +function convertNodes(nodes: mdast.Content[], deco: Decoration): slate.Node[] { + if (nodes.length === 0) { + return [{ text: "" }]; + } + + return nodes.reduce((acc, node) => { + acc.push(...createSlateNode(node, deco)); + return acc; + }, []); +} + +// NOTE: Added +const DECORATION_MAPPING = { + emphasis: "italic", + strong: "bold", + delete: "strikethrough", + inlineCode: "code", +}; + +function createSlateNode(node: mdast.Content, deco: Decoration): SlateNode[] { + switch (node.type) { + case "paragraph": + return [createParagraph(node, deco)]; + case "heading": + return [createHeading(node, deco)]; + case "thematicBreak": + return [createThematicBreak(node)]; + case "blockquote": + return [createBlockquote(node, deco)]; + case "list": + return [createList(node, deco)]; + case "listItem": + return [createListItem(node, deco)]; + case ELEMENT_LIC as any: + return [createListItemChild(node, deco)]; + case "table": + return [createTable(node, deco)]; + case "tableRow": + return [createTableRow(node, deco)]; + case "tableCell": + return [createTableCell(node, deco)]; + case "html": + return [createHtml(node)]; + case "code": + return [createCode(node)]; + case "yaml": + return [createYaml(node)]; + case "toml": + return [createToml(node)]; + case "definition": + return [createDefinition(node)]; + case "footnoteDefinition": + return [createFootnoteDefinition(node, deco)]; + case "text": + return [createText(node.value, deco)]; + case "emphasis": + case "strong": + case "delete": { + const { type, children } = node; + return children.reduce((acc, n) => { + acc.push( + ...createSlateNode(n, { ...deco, [DECORATION_MAPPING[type]]: true }) + ); + return acc; + }, []); + } + case "inlineCode": { + const { type, value } = node; + return [createText(value, { ...deco, [DECORATION_MAPPING[type]]: true })]; + } + case "break": + return [createBreak(node)]; + case "link": + return [createLink(node, deco)]; + case "image": + return [createImage(node)]; + case "linkReference": + return [createLinkReference(node, deco)]; + case "imageReference": + return [createImageReference(node)]; + case "footnote": + return [createFootnote(node, deco)]; + case "footnoteReference": + return [createFootnoteReference(node)]; + case "math": + return [createMath(node)]; + case "inlineMath": + return [createInlineMath(node)]; + default: + const _: never = node; + break; + } + return []; +} + +export type Paragraph = ReturnType; + +function createParagraph(node: mdast.Paragraph, deco: Decoration) { + const { type, children } = node; + return { + type: "p", // NOTE: plate's DOM expects `p`, not `paragraph` + children: convertNodes(children, deco), + }; +} + +export type Heading = ReturnType; + +function createHeading(node: mdast.Heading, deco: Decoration) { + const { type, children, depth } = node; + return { + type, + depth, + children: convertNodes(children, deco), + }; +} + +export type ThematicBreak = ReturnType; + +function createThematicBreak(node: mdast.ThematicBreak) { + return { + type: node.type, + children: [{ text: "" }], + }; +} + +export type Blockquote = ReturnType; + +function createBlockquote(node: mdast.Blockquote, deco: Decoration) { + return { + type: node.type, + children: convertNodes(node.children, deco), + }; +} + +export type List = ReturnType; + +function createList(node: mdast.List, deco: Decoration) { + const { type, children, ordered, start, spread } = node; + return { + type: ordered ? ELEMENT_OL : ELEMENT_UL, // todo: support check list items? No, support those via different function + children: convertNodes(children, deco), + ordered, + start, + spread, + }; +} + +export type ListItem = ReturnType; + +function createListItem(node: mdast.ListItem, deco: Decoration) { + const { type, children, checked, spread } = node; + + // NOTE: Added + // Plate li children must have an lic type unless they are another list, + // otherwise the plugin does really wierd stuff + children.forEach((child) => { + child.type = child.type === "paragraph" ? ELEMENT_LIC : (child.type as any); + }); + + return { + type: ELEMENT_LI, + children: convertNodes(children, deco), + checked, + spread, + }; +} + +// NOTE: Added this custom to create ELEMENT_LIC according to plates custom list item handling... +function createListItemChild(node: any, deco: Decoration) { + // NOTE: shrug see notes in createListItem + const { type, children } = node; + + return { + type: ELEMENT_LIC, + children: convertNodes(children, deco), + }; +} + +export type Table = ReturnType; + +function createTable(node: mdast.Table, deco: Decoration) { + const { type, children, align } = node; + return { + type, + children: convertNodes(children, deco), + align, + }; +} + +export type TableRow = ReturnType; + +function createTableRow(node: mdast.TableRow, deco: Decoration) { + const { type, children } = node; + return { + type, + children: convertNodes(children, deco), + }; +} + +export type TableCell = ReturnType; + +function createTableCell(node: mdast.TableCell, deco: Decoration) { + const { type, children } = node; + return { + type, + children: convertNodes(children, deco), + }; +} + +export type Html = ReturnType; + +function createHtml(node: mdast.HTML) { + const { type, value } = node; + return { + type, + children: [{ text: value }], + }; +} + +export type Code = ReturnType; + +function createCode(node: mdast.Code) { + const { type, value, lang, meta } = node; + return { + type, + lang, + meta, + children: [{ text: value }], + }; +} + +export type Yaml = ReturnType; + +function createYaml(node: mdast.YAML) { + const { type, value } = node; + return { + type, + children: [{ text: value }], + }; +} + +export type Toml = ReturnType; + +function createToml(node: mdast.TOML) { + const { type, value } = node; + return { + type, + children: [{ text: value }], + }; +} + +export type Math = ReturnType; + +function createMath(node: mdast.Math) { + const { type, value } = node; + return { + type, + children: [{ text: value }], + }; +} + +export type InlineMath = ReturnType; + +function createInlineMath(node: mdast.InlineMath) { + const { type, value } = node; + return { + type, + children: [{ text: value }], + }; +} + +export type Definition = ReturnType; + +function createDefinition(node: mdast.Definition) { + const { type, identifier, label, url, title } = node; + return { + type, + identifier, + label, + url, + title, + children: [{ text: "" }], + }; +} + +export type FootnoteDefinition = ReturnType; + +function createFootnoteDefinition( + node: mdast.FootnoteDefinition, + deco: Decoration +) { + const { type, children, identifier, label } = node; + return { + type, + children: convertNodes(children, deco), + identifier, + label, + }; +} + +export type Text = ReturnType; + +function createText(text: string, deco: Decoration) { + return { + ...deco, + text, + }; +} + +export type Break = ReturnType; + +function createBreak(node: mdast.Break) { + return { + type: node.type, + children: [{ text: "" }], + }; +} + +export type Link = ReturnType; + +function createLink(node: mdast.Link, deco: Decoration) { + const { type, children, url, title } = node; + return { + type: "a", // NOTE: Default plate link component uses "a" + children: convertNodes(children, deco), + url, + title, + }; +} + +export type Image = ReturnType; + +function createImage(node: mdast.Image) { + const { type, url, title, alt } = node; + return { + // NOTE: I changed this from simply type, which forwarded the incoming "image" type, + // to "img", which plate expects + type: "img", + // NOTE: I modify url's here which is a bit silly but i'm in hack-it-in mode so :| + url: prefixUrl(url), + title, + alt, + children: [{ text: "" }], + }; +} + +export type LinkReference = ReturnType; + +function createLinkReference(node: mdast.LinkReference, deco: Decoration) { + const { type, children, referenceType, identifier, label } = node; + return { + type, + children: convertNodes(children, deco), + referenceType, + identifier, + label, + }; +} + +export type ImageReference = ReturnType; + +function createImageReference(node: mdast.ImageReference) { + const { type, alt, referenceType, identifier, label } = node; + return { + type, + alt, + referenceType, + identifier, + label, + children: [{ text: "" }], + }; +} + +export type Footnote = ReturnType; + +function createFootnote(node: mdast.Footnote, deco: Decoration) { + const { type, children } = node; + return { + type, + children: convertNodes(children, deco), + }; +} + +export type FootnoteReference = ReturnType; + +function createFootnoteReference(node: mdast.FootnoteReference) { + const { type, identifier, label } = node; + return { + type, + identifier, + label, + children: [{ text: "" }], + }; +} + +export type SlateNode = + | Paragraph + | Heading + | ThematicBreak + | Blockquote + | List + | ListItem + | Table + | TableRow + | TableCell + | Html + | Code + | Yaml + | Toml + | Definition + | FootnoteDefinition + | Text + | Break + | Link + | Image + | LinkReference + | ImageReference + | Footnote + | FootnoteReference + | Math + | InlineMath; diff --git a/src/markdown/remark-slate-transformer/transformers/slate-to-mdast.ts b/src/markdown/remark-slate-transformer/transformers/slate-to-mdast.ts new file mode 100644 index 0000000..55f1488 --- /dev/null +++ b/src/markdown/remark-slate-transformer/transformers/slate-to-mdast.ts @@ -0,0 +1,502 @@ +import * as unistLib from "unist"; +import * as slate from "../models/slate"; +import * as mdast from "../models/mdast"; +import * as slateInternal from "./mdast-to-slate"; + +// NOTE: added +import { unPrefixUrl } from "../util"; + +// NOTE: added, and a good example of what changes I would want to make to this library! +import { + ELEMENT_LI, + ELEMENT_LIC, + ELEMENT_OL, + ELEMENT_TODO_LI, + ELEMENT_UL, +} from "@udecode/plate"; // todo: sub-package which has only elements? + +// NOTE: Changed these, they were just mirroring mdasts' before +// which doesn't make sense +type DecorationType = keyof Decoration; + +type Decoration = { + italic: true | undefined; + bold: true | undefined; + strikethrough: true | undefined; + code: true | undefined; +}; + +const DecorationMapping = { + italic: "emphasis", + bold: "strong", + strikethrough: "delete", + code: "inlineCode", +}; + +type TextOrDecoration = + | mdast.Text + | mdast.Emphasis + | mdast.Strong + | mdast.Delete + | mdast.InlineCode; + +export function slateToMdast(node: slate.Node): unistLib.Node { + return createMdastRoot(node); +} + +function createMdastRoot(node: slate.Node): unistLib.Node { + const root: mdast.Root = { + type: "root", + children: convertNodes((node as any).children) as mdast.Root["children"], + }; + return root as any as unistLib.Node; +} + +function convertNodes(nodes: slate.Node[]): unistLib.Node[] { + const mdastNodes: unistLib.Node[] = []; + let textQueue: slateInternal.Text[] = []; + for (let i = 0; i <= nodes.length; i++) { + const n = nodes[i] as slateInternal.SlateNode; + if (n && isText(n)) { + textQueue.push(n); + } else { + const mdastTexts: TextOrDecoration[] = []; + const starts: DecorationType[] = []; + let textTemp: string = ""; + for (let j = 0; j < textQueue.length; j++) { + const cur: any = textQueue[j]; + textTemp += cur.text; + + const prevStartsStr = starts.toString(); + + const prev: any = textQueue[j - 1]; + const next: any = textQueue[j + 1]; + const ends: DecorationType[] = []; + Object.keys(DecorationMapping).forEach((k: any) => { + if (cur[k]) { + if (!prev || !prev[k]) { + starts.push(k); + } + if (!next || !next[k]) { + ends.push(k); + } + } + }); + + const endsToRemove = starts.reduce< + { key: DecorationType; index: number }[] + >((acc, k, kIndex) => { + if (ends.includes(k)) { + acc.push({ key: k, index: kIndex }); + } + return acc; + }, []); + + if (starts.length > 0) { + let bef = ""; + let aft = ""; + if ( + endsToRemove.length === 1 && + prevStartsStr !== starts.toString() && + starts.length - endsToRemove.length === 0 + ) { + while (textTemp.startsWith(" ")) { + bef += " "; + textTemp = textTemp.slice(1); + } + while (textTemp.endsWith(" ")) { + aft += " "; + textTemp = textTemp.slice(0, -1); + } + } + let res: TextOrDecoration = { + type: "text", + value: textTemp, + }; + textTemp = ""; + const startsReversed = starts.slice().reverse(); + startsReversed.forEach((k) => { + switch (k) { + case "code": + res = { + type: "inlineCode", + value: (res as any).value, + }; + break; + case "bold": + case "italic": + case "strikethrough": + res = { + type: DecorationMapping[k] as any, + children: [res], + }; + break; + default: + const _: never = k; + break; + } + }); + const arr: TextOrDecoration[] = []; + if (bef.length > 0) { + arr.push({ type: "text", value: bef }); + } + arr.push(res); + if (aft.length > 0) { + arr.push({ type: "text", value: aft }); + } + mdastTexts.push(...arr); + } + + if (endsToRemove.length > 0) { + endsToRemove.reverse().forEach((e) => { + starts.splice(e.index, 1); + }); + } else { + mdastTexts.push({ type: "text", value: textTemp }); + textTemp = ""; + } + } + if (textTemp) { + mdastTexts.push({ type: "text", value: textTemp }); + textTemp = ""; + } + + mdastNodes.push(...(mergeTexts(mdastTexts) as any as unistLib.Node[])); + textQueue = []; + if (!n) continue; + const node = createMdastNode(n); + if (node) { + mdastNodes.push(node as unistLib.Node); + } + } + } + + return mdastNodes; +} + +function createMdastNode( + node: any //Exclude --> as any because the switch thinks node.type is a string +): Exclude | null { + switch (node.type) { + case ELEMENT_LIC: // NOTE: added. + case "paragraph": + case "p": + return createParagraph(node); + case "heading": + return createHeading(node); + case "thematicBreak": + return createThematicBreak(node); + case "blockquote": + return createBlockquote(node); + case "list": + case ELEMENT_UL: // NOTE: added + case ELEMENT_OL: // NOTE: added + return createList(node); + case "listItem": + case ELEMENT_LI: // NOTE: added + return createListItem(node); + case "table": + return createTable(node); + case "tableRow": + return createTableRow(node); + case "tableCell": + return createTableCell(node); + case "html": + return createHtml(node); + case "code": + return createCode(node); + case "yaml": + return createYaml(node); + case "toml": + return createToml(node); + case "definition": + return createDefinition(node); + case "footnoteDefinition": + return createFootnoteDefinition(node); + case "break": + return createBreak(node); + case "link": + case "a" as any: // NOTE: added "a" here + return createLink(node); + case "image": + // NOTE: I MODIFIED next line to also catch img as image + case "img": + return createImage(node); + case "linkReference": + return createLinkReference(node); + case "imageReference": + return createImageReference(node); + case "footnote": + return createFootnote(node); + case "footnoteReference": + return creatFootnoteReference(node); + case "math": + return createMath(node); + case "inlineMath": + return createInlineMath(node); + default: + console.warn("slateToMdast encountered unknown node type", node); + // @ts-ignore + const _: never = node; + break; + } + return null; +} + +function isText(node: slateInternal.SlateNode): node is slateInternal.Text { + return "text" in node; +} + +function mergeTexts(nodes: TextOrDecoration[]): TextOrDecoration[] { + const res: TextOrDecoration[] = []; + for (const cur of nodes) { + const last = res[res.length - 1]; + if (last && last.type === cur.type) { + if (last.type === "text") { + last.value += (cur as typeof last).value; + } else if (last.type === "inlineCode") { + last.value += (cur as typeof last).value; + } else { + last.children = mergeTexts( + last.children.concat( + (cur as typeof last).children + ) as TextOrDecoration[] + ); + } + } else { + if (cur.type === "text" && cur.value === "") continue; + res.push(cur); + } + } + return res; +} + +function createParagraph(node: slateInternal.Paragraph): mdast.Paragraph { + const { type, children } = node; + return { + type: "paragraph", + children: convertNodes(children) as any as mdast.Paragraph["children"], + }; +} + +function createHeading(node: slateInternal.Heading): mdast.Heading { + const { type, depth, children } = node; + return { + type, + depth, + children: convertNodes(children) as any as mdast.Heading["children"], + }; +} + +function createThematicBreak( + node: slateInternal.ThematicBreak +): mdast.ThematicBreak { + const { type } = node; + return { + type, + }; +} + +function createBlockquote(node: slateInternal.Blockquote): mdast.Blockquote { + const { type, children } = node; + return { + type, + children: convertNodes(children) as any as mdast.Blockquote["children"], + }; +} + +function createList(node: slateInternal.List): mdast.List { + const { type, ordered, start, spread, children } = node; + return { + type: "list", + ordered, + start, + spread, + children: convertNodes(children) as any as mdast.List["children"], + }; +} + +function createListItem(node: slateInternal.ListItem): mdast.ListItem { + const { type, checked, spread, children } = node; + return { + type: "listItem", + checked, + spread, + children: convertNodes(children) as any as mdast.ListItem["children"], + }; +} + +function createTable(node: slateInternal.Table): mdast.Table { + const { type, align, children } = node; + return { + type, + align, + children: convertNodes(children) as any as mdast.Table["children"], + }; +} + +function createTableRow(node: slateInternal.TableRow): mdast.TableRow { + const { type, children } = node; + return { + type, + children: convertNodes(children) as any as mdast.TableRow["children"], + }; +} + +function createTableCell(node: slateInternal.TableCell): mdast.TableCell { + const { type, children } = node; + return { + type, + children: convertNodes(children) as any as mdast.TableCell["children"], + }; +} + +function createHtml(node: slateInternal.Html): mdast.HTML { + const { type, children } = node; + return { + type, + value: children[0].text, + }; +} + +function createCode(node: slateInternal.Code): mdast.Code { + const { type, lang, meta, children } = node; + return { + type, + lang, + meta, + value: children[0].text, + }; +} + +function createYaml(node: slateInternal.Yaml): mdast.YAML { + const { type, children } = node; + return { + type, + value: children[0].text, + }; +} + +function createToml(node: slateInternal.Toml): mdast.TOML { + const { type, children } = node; + return { + type, + value: children[0].text, + }; +} + +function createDefinition(node: slateInternal.Definition): mdast.Definition { + const { type, identifier, label, url, title } = node; + return { + type, + identifier, + label, + url, + title, + }; +} + +function createFootnoteDefinition( + node: slateInternal.FootnoteDefinition +): mdast.FootnoteDefinition { + const { type, identifier, label, children } = node; + return { + type, + identifier, + label, + children: convertNodes( + children + ) as any as mdast.FootnoteDefinition["children"], + }; +} + +function createBreak(node: slateInternal.Break): mdast.Break { + const { type } = node; + return { + type, + }; +} + +function createLink(node: slateInternal.Link): mdast.Link { + const { type, url, title, children } = node; + return { + type: "link", // note: changes from type to type: "link" so it can accept "a", see the switch statement + url, // note: converted, "as any" added because mdast.Link thinks its url and not link? + title, + children: convertNodes(children) as any as mdast.Link["children"], + } as any; +} + +function createImage(node: slateInternal.Image): mdast.Image { + const { type, url, title, alt } = node; + return { + // NOTE: added this @ts-ignore line + // todo: replace "image" with a constant, like mdast.Image.type + // @ts-ignore + type: "image", // NOTE: added here because createImage may be called with type: 'img" -- convert to something mdast understands + url: unPrefixUrl(url), + title, + alt, + }; +} + +function createLinkReference( + node: slateInternal.LinkReference +): mdast.LinkReference { + const { type, identifier, label, referenceType, children } = node; + return { + type, + identifier, + label, + referenceType, + children: convertNodes(children) as any as mdast.LinkReference["children"], + }; +} + +function createImageReference( + node: slateInternal.ImageReference +): mdast.ImageReference { + const { type, identifier, label, alt, referenceType } = node; + return { + type, + identifier, + label, + alt, + referenceType, + }; +} + +function createFootnote(node: slateInternal.Footnote): mdast.Footnote { + const { type, children } = node; + return { + type, + children: convertNodes(children) as any as mdast.Footnote["children"], + }; +} + +function creatFootnoteReference( + node: slateInternal.FootnoteReference +): mdast.FootnoteReference { + const { type, identifier, label } = node; + return { + type, + identifier, + label, + }; +} + +function createMath(node: slateInternal.Math): mdast.Math { + const { type, children } = node; + return { + type, + value: children[0].text, + }; +} + +function createInlineMath(node: slateInternal.InlineMath): mdast.InlineMath { + const { type, children } = node; + return { + type, + value: children[0].text, + }; +} diff --git a/src/markdown/remark-slate-transformer/util.ts b/src/markdown/remark-slate-transformer/util.ts new file mode 100644 index 0000000..4b83c35 --- /dev/null +++ b/src/markdown/remark-slate-transformer/util.ts @@ -0,0 +1,32 @@ +/** + * NOTE: COPIED FROM editor/blocks/images.tsx + * + * For absolute image urls, prefix them with chronicles:// which will trigger + * the protocol handler in the main process, which as of now merely serves + * the file + * + * When implementing drag and drop and accounting for other legacy journals, + * many image files were absolute filepaths to various places on the filesystem + * + * todo: Upload and host all image files from a single directory + * + * @param url + * @returns + */ +export function prefixUrl(url: string) { + const isLocalPath = !url.startsWith("http"); + + if (isLocalPath) { + return "chronicles://" + url; + } else { + return url; + } +} + +export function unPrefixUrl(url: string) { + if (url.startsWith("chronicles://")) { + return url.slice(13); + } else { + return url; + } +} diff --git a/src/preload/importer/indexer.ts b/src/preload/importer/indexer.ts index 660bc3f..a91b673 100644 --- a/src/preload/importer/indexer.ts +++ b/src/preload/importer/indexer.ts @@ -1,6 +1,5 @@ import path from "path"; -import { parser, stringifier } from "../../markdown"; -import { Root } from "../../markdown"; +import { parser, stringifier, Root } from "../../markdown"; import { Database } from "better-sqlite3"; import { Files, PathStatsFile } from "../files"; import { DateTime } from "luxon"; diff --git a/src/views/edit/editor/index.tsx b/src/views/edit/editor/index.tsx new file mode 100644 index 0000000..9a03fd9 --- /dev/null +++ b/src/views/edit/editor/index.tsx @@ -0,0 +1,139 @@ +import React from "react"; +import { observer } from "mobx-react-lite"; +import { toggleList } from "@udecode/plate-list"; +import { + Plate, + createReactPlugin, + createHistoryPlugin, + createParagraphPlugin, + createBlockquotePlugin, + createCodeBlockPlugin, + createHeadingPlugin, + createBoldPlugin, + createItalicPlugin, + createUnderlinePlugin, + createStrikethroughPlugin, + createCodePlugin, + createPlateComponents, + createPlateOptions, + + // images + createImagePlugin, + createSelectOnBackspacePlugin, + ELEMENT_IMAGE, + + // links + createLinkPlugin, + + // list plugins + createTodoListPlugin, + createSoftBreakPlugin, + createExitBreakPlugin, + createResetNodePlugin, + createListPlugin, +} from "@udecode/plate"; +import { Node as SNode } from "slate"; +import { + optionsSoftBreakPlugin, + optionsExitBreakPlugin, + optionsResetBlockTypePlugin, +} from "./pluginOptions"; + +export interface Props { + saving: boolean; + value: SNode[]; + setValue: (n: SNode[]) => any; +} + +import { + HeadingToolbar, + ToolbarList, + useStoreEditorRef, + useEventEditorId, + getPlatePluginType, + ELEMENT_UL, + ELEMENT_OL, +} from "@udecode/plate"; +import { ListIcon, NumberedListIcon } from "evergreen-ui"; + +function ToolbarButtonsList({ editor }: { editor: any }) { + const editor2 = useStoreEditorRef(useEventEditorId("focus")); + console.log("editor2", editor2 === editor, editor2); + + return ( + + } + /> + } + /> + toggleList(editor, { type: ELEMENT_UL })} /> + + ); +} + +export default observer((props: Props) => { + const editableProps = { + placeholder: "Type…", + style: { + padding: "15px", + }, + }; + const editor = useStoreEditorRef(useEventEditorId("focus")); + + const plugins = [ + // editor + createReactPlugin(), // withReact + createHistoryPlugin(), // withHistory + + // elements + createParagraphPlugin(), // paragraph element + createBlockquotePlugin(), // blockquote element + createCodeBlockPlugin(), // code block element + createHeadingPlugin(), // heading elements + + // marks + createBoldPlugin(), // bold mark + createItalicPlugin(), // italic mark + createUnderlinePlugin(), // underline mark + createStrikethroughPlugin(), // strikethrough mark + createCodePlugin(), // code mark + + createImagePlugin(), + createSelectOnBackspacePlugin({ allow: [ELEMENT_IMAGE] }), + + createLinkPlugin(), + + // createTodoListPlugin(), + createSoftBreakPlugin(optionsSoftBreakPlugin), + createExitBreakPlugin(optionsExitBreakPlugin), + createResetNodePlugin(optionsResetBlockTypePlugin), + createListPlugin(), + ]; + const components = createPlateComponents(); + const options = createPlateOptions(); + + React.useEffect(() => { + console.log("initialValue: ", props.value); + console.log(editor); + }, []); + + return ( + <> + { + console.log("setValue", newValue); + props.setValue(newValue); + }} + plugins={plugins} + components={components} + options={options} + > + + ); +}); diff --git a/src/views/edit/editor/pluginOptions.ts b/src/views/edit/editor/pluginOptions.ts new file mode 100644 index 0000000..f488158 --- /dev/null +++ b/src/views/edit/editor/pluginOptions.ts @@ -0,0 +1,95 @@ +import { + createPlateOptions, + ELEMENT_BLOCKQUOTE, + ELEMENT_CODE_BLOCK, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ELEMENT_PARAGRAPH, + ELEMENT_TD, + ELEMENT_TODO_LI, + ExitBreakPluginOptions, + isBlockAboveEmpty, + isSelectionAtBlockStart, + KEYS_HEADING, + ResetBlockTypePluginOptions, + SoftBreakPluginOptions, + WithAutoformatOptions, +} from "@udecode/plate"; + +export const options = createPlateOptions(); + +export const optionsIndentPlugin: any = { + types: [ + ELEMENT_PARAGRAPH, + ELEMENT_H1, + ELEMENT_H2, + ELEMENT_H3, + ELEMENT_H4, + ELEMENT_H5, + ELEMENT_H6, + ELEMENT_BLOCKQUOTE, + ELEMENT_CODE_BLOCK, + ], +}; + +const resetBlockTypesCommonRule = { + types: [ELEMENT_BLOCKQUOTE, ELEMENT_TODO_LI], + defaultType: ELEMENT_PARAGRAPH, +}; + +export const optionsResetBlockTypePlugin: ResetBlockTypePluginOptions = { + rules: [ + { + ...resetBlockTypesCommonRule, + hotkey: "Enter", + predicate: isBlockAboveEmpty, + }, + { + ...resetBlockTypesCommonRule, + hotkey: "Backspace", + predicate: isSelectionAtBlockStart, + }, + ], +}; + +export const optionsSoftBreakPlugin: SoftBreakPluginOptions = { + rules: [ + { hotkey: "shift+enter" }, + { + hotkey: "enter", + query: { + allow: [ELEMENT_CODE_BLOCK, ELEMENT_BLOCKQUOTE, ELEMENT_TD], + }, + }, + ], +}; + +export const optionsExitBreakPlugin: ExitBreakPluginOptions = { + rules: [ + { + hotkey: "mod+enter", + }, + { + hotkey: "mod+shift+enter", + before: true, + }, + { + hotkey: "enter", + query: { + start: true, + end: true, + allow: KEYS_HEADING, + }, + }, + ], +}; + +export const editableProps = { + // placeholder: 'Enter some rich text…', + spellCheck: false, + autoFocus: true, +}; diff --git a/src/views/edit/index.tsx b/src/views/edit/index.tsx index be26b2f..5ca81a1 100644 --- a/src/views/edit/index.tsx +++ b/src/views/edit/index.tsx @@ -1,46 +1,51 @@ -import { ViewState } from '../../container'; -import React, { useContext } from 'react'; -import { observer } from 'mobx-react-lite'; -import Editor from './editor/editor'; -import { Pane, Button,Popover, Menu, Position } from 'evergreen-ui'; -import { useEditableDocument, EditableDocument } from './useEditableDocument'; -import { css } from 'emotion'; +import { ViewState } from "../../container"; +import React, { useContext } from "react"; +import { observer } from "mobx-react-lite"; +import Editor from "./editor"; +import { Pane, Button, Popover, Menu, Position } from "evergreen-ui"; +import { useEditableDocument, EditableDocument } from "./useEditableDocument"; +import { css } from "emotion"; import { JournalResponse } from "../../preload/client/journals"; -import { toJS } from 'mobx'; -import { EditLoadingComponent } from './loading'; -import DayPicker from 'react-day-picker'; -import 'react-day-picker/lib/style.css'; -import { useIsMounted } from '../../hooks/useIsMounted'; -import { JournalsStoreContext } from '../../hooks/useJournalsLoader'; - +import { toJS } from "mobx"; +import { EditLoadingComponent } from "./loading"; +import DayPicker from "react-day-picker"; +import "react-day-picker/lib/style.css"; +import { useIsMounted } from "../../hooks/useIsMounted"; +import { JournalsStoreContext } from "../../hooks/useJournalsLoader"; +import Toolbar from "./toolbar"; interface EditDocumentProps { documentId?: string; - setView: React.Dispatch> + setView: React.Dispatch>; } // Loads document, with loading and error placeholders function DocumentLoadingContainer(props: EditDocumentProps) { - const journals = useContext(JournalsStoreContext) - const { document, loadingError } = useEditableDocument(journals.journals, props.documentId); + const journals = useContext(JournalsStoreContext); + const { document, loadingError } = useEditableDocument( + journals.journals, + props.documentId + ); if (loadingError) { return ( - ) + ); } - if (!document) { - return ( - - ) + return ; } - return + return ( + + ); } - interface DocumentEditProps { document: EditableDocument; journals: JournalResponse[]; @@ -48,26 +53,25 @@ interface DocumentEditProps { } const DocumentEditView = observer((props: DocumentEditProps) => { - const { - document, - journals - } = props; + const { document, journals } = props; const isMounted = useIsMounted(); // Autofocus the heading input - const onInputRendered = React.useCallback((inputElement: HTMLInputElement) => { - if (inputElement) { - // After experimenting, unsure why the delay is helpful. - // https://blog.maisie.ink/react-ref-autofocus/ - setTimeout(() => inputElement.focus(), 200) - inputElement.focus(); - } - }, []); - + const onInputRendered = React.useCallback( + (inputElement: HTMLInputElement) => { + if (inputElement) { + // After experimenting, unsure why the delay is helpful. + // https://blog.maisie.ink/react-ref-autofocus/ + setTimeout(() => inputElement.focus(), 200); + inputElement.focus(); + } + }, + [] + ); function getName(journalId?: string) { - const journal = journals?.find(j => j.id === journalId) - return journal ? journal.name : 'Unknown journal'; + const journal = journals?.find((j) => j.id === journalId); + return journal ? journal.name : "Unknown journal"; } function makeOptions(close: any) { @@ -82,23 +86,24 @@ const DocumentEditView = observer((props: DocumentEditProps) => { > {j.name} - ) - }) + ); + }); } function journalPicker() { return ( ( + content={({ close }) => (
- - - {makeOptions(close)} - - + + {makeOptions(close)} +
)} > @@ -107,11 +112,12 @@ const DocumentEditView = observer((props: DocumentEditProps) => { border-bottom: 1px dotted purple; line-height: 1.3rem; cursor: pointer; - `}> + `} + > {getName(document.journalId)}
- ) + ); } function onDayPick(day: Date, callback: () => void) { @@ -126,19 +132,22 @@ const DocumentEditView = observer((props: DocumentEditProps) => { return ( ( + content={({ close }) => (
{/* todo: How to disable styling for today? classNames={{ today: '' }} wants the whole classNames object */} - onDayPick(day, close)} - // This was causing menu to close when two different things inside - // the calendar were clicked. Instead, user - // onBlur={close} - /> + onDayPick(day, close)} + // This was causing menu to close when two different things inside + // the calendar were clicked. Instead, user + // onBlur={close} + />
)} > @@ -147,85 +156,105 @@ const DocumentEditView = observer((props: DocumentEditProps) => { border-bottom: 1px dotted purple; line-height: 1.3rem; cursor: pointer; - `}> - {document.createdAt.slice(0,10)} + `} + > + {document.createdAt.slice(0, 10)}
- ) + ); } function goBack() { - if (!document.dirty || confirm('Document is unsaved, exiting will discard document. Stop editing anyways?')) { - props.setView('documents') + if ( + !document.dirty || + confirm( + "Document is unsaved, exiting will discard document. Stop editing anyways?" + ) + ) { + props.setView("documents"); } } async function deleteDocument() { if (!document.canDelete) return; - if (confirm('Are you sure?')) { - await document.del() - if (isMounted()) props.setView('documents') + if (confirm("Are you sure?")) { + await document.del(); + if (isMounted()) props.setView("documents"); } } return ( - Back - -
- { datePicker() } -  /  - {journalPicker()} -
-
- + Back + + +
document.title = e.target.value} - value={document.title || ''} // OR '' prevents react complaining about uncontrolled component - placeholder="Untitled" - disabled={document.saving} - /> -
- - {/* note: its not actually clear to me whether toJS is necessary here. */} - - - - - + + +
- - ) -}) + ); +}); -export default observer(DocumentLoadingContainer) \ No newline at end of file +export default observer(DocumentLoadingContainer); diff --git a/src/views/edit/toolbar.tsx b/src/views/edit/toolbar.tsx new file mode 100644 index 0000000..5be7ee7 --- /dev/null +++ b/src/views/edit/toolbar.tsx @@ -0,0 +1,70 @@ +import React from "react"; +import { + HeadingToolbar, + ToolbarList, + ToolbarMark, + useStoreEditorRef, + useEventEditorId, + getPlatePluginType, + ELEMENT_UL, + ELEMENT_OL, + MARK_BOLD, + MARK_ITALIC, + MARK_UNDERLINE, + MARK_STRIKETHROUGH, + MARK_CODE, +} from "@udecode/plate"; +import { + ListIcon, + NumberedListIcon, + BoldIcon, + ItalicIcon, + UnderlineIcon, + StrikethroughIcon, + CodeIcon, +} from "evergreen-ui"; +// import { css } from "emotion"; +/** + * Buttons for formatting text in the document + * todo: consider styled-component-icons or remix-icons -- there are more + */ +export default function FormattingToolbar() { + const editor = useStoreEditorRef(useEventEditorId("focus")); + + return ( + + } + /> + } + /> + } + /> + + } + /> + } + /> + } + /> + + } + /> + + ); +} diff --git a/src/views/edit/util.ts b/src/views/edit/util.ts index 233bcd2..36e50ca 100644 --- a/src/views/edit/util.ts +++ b/src/views/edit/util.ts @@ -14,6 +14,8 @@ export class SlateTransformer { // Content should not be empty, but because of UI or other bugs can happen if (!text.trim()) return SlateTransformer.createEmptyNodes(); + console.log("SlateTransformer.nodify: before string to slate: ", text); + console.log("SlateTransformer.nodify.stringToSlate", stringToSlate(text)); return stringToSlate(text); } @@ -21,7 +23,8 @@ export class SlateTransformer { * Create an empty Slate DOM, intended for new empty documents. */ static createEmptyNodes() { - return [{ children: [{ text: "" }] }]; + // todo: type: ELEMENT_P from plate, or better yet createParagraphElement if it exists! + return [{ type: "p", children: [{ text: "" }] }]; } /** @@ -34,11 +37,20 @@ export class SlateTransformer { // but is a hack. // todo: extend the slateToString library if that becomes possible // https://github.com/inokawa/remark-slate-transformer/issues/31 + console.log("SlateTransformer.stringify.nodes-argument:", nodes); const copiedNodes = JSON.parse(JSON.stringify(nodes)); + // console.log( + // "SlateTransformer.stringify.copiedNodes (JSON Stringified):", + // JSON.parse(JSON.stringify(copiedNodes)) + // ); // another copy copiedNodes.forEach((n: any) => { n.type = n.type || "paragraph"; }); - + // console.log("copiedNodes post transform with paragraphs", copiedNodes); + console.log( + "SlateTransformer.stringify.slateToString", + slateToString(copiedNodes) + ); return slateToString(copiedNodes); } } diff --git a/yarn.lock b/yarn.lock index 8616908..326a484 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,6 +16,52 @@ dependencies: "@babel/highlight" "^7.10.3" +"@babel/code-frame@^7.14.5": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/generator@^7.15.4": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== + dependencies: + "@babel/types" "^7.15.6" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== + dependencies: + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-imports@^7.0.0": version "7.10.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" @@ -23,6 +69,13 @@ dependencies: "@babel/types" "^7.10.3" +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-validator-identifier@^7.10.3": version "7.10.3" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" @@ -33,6 +86,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + "@babel/highlight@^7.0.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -51,6 +109,20 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.15.4": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== + "@babel/runtime@^7.1.2": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99" @@ -58,7 +130,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.14.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== @@ -72,6 +144,30 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/traverse@^7.4.5": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.10.3": version "7.10.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" @@ -81,6 +177,14 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.15.4", "@babel/types@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + "@electron/get@^1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.0.tgz#95c6bcaff4f9a505ea46792424f451efea89228c" @@ -133,6 +237,13 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831" integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A== +"@emotion/is-prop-valid@^0.8.8": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + "@emotion/memoize@0.7.4": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" @@ -154,12 +265,12 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/stylis@0.8.5": +"@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4": version "0.8.5" resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== -"@emotion/unitless@0.7.5": +"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.4": version "0.7.5" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== @@ -222,6 +333,31 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@popperjs/core@2.10.2", "@popperjs/core@^2.9.0": + version "2.10.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590" + integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ== + +"@react-dnd/asap@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.0.tgz#b300eeed83e9801f51bd66b0337c9a6f04548651" + integrity sha512-0XhqJSc6pPoNnf8DhdsPHtUhRzZALVzYMTzRwV4VI6DJNJ/5xxfL9OQUwb8IH5/2x7lSf7nAZrnzUD+16VyOVQ== + +"@react-dnd/invariant@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-dnd/invariant/-/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e" + integrity sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw== + +"@react-dnd/shallowequal@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a" + integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg== + +"@react-hook/merged-ref@^1.3.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@react-hook/merged-ref/-/merged-ref-1.3.2.tgz#919b387a5f79ed67f2578f2015ab7b7d337787d2" + integrity sha512-cQ9Y8m4zlrw/qotReo33E+3Sy9FVqMZb5JwUlb3wj3IJJ1cNJtxcgfWF6rS2NZQrfBJ2nAnckUdPJjMyIJTNZg== + "@segment/react-tiny-virtual-list@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@segment/react-tiny-virtual-list/-/react-tiny-virtual-list-2.2.1.tgz#658da8a93cfb83537235c89307818d6f1741aeb3" @@ -253,6 +389,13 @@ dependencies: defer-to-connect "^2.0.0" +"@tippyjs/react@^4.2.0": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.2.5.tgz#9b5837db93a1cac953962404df906aef1a18e80d" + integrity sha512-YBLgy+1zznBNbx4JOoOdFXWMLXjBh9hLPwRtq3s8RRdrez2l3tPBRt2m2909wZd9S1KUeKjOOYYsnitccI9I3A== + dependencies: + tippy.js "^6.3.1" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -285,10 +428,10 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.11.tgz#d3614d6c5f500142358e6ed24e1bf16657536c50" integrity sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw== -"@types/esrever@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@types/esrever/-/esrever-0.2.0.tgz#96404a2284b2c7527f08a1e957f8a31705f9880f" - integrity sha512-5NI6TeGzVEy/iBcuYtcPzzIC6EqlfQ2+UZ54vT0ulq8bPNGAy8UJD+XcsAyEOcnYFUjOVWuUV+k4/rVkxt9/XQ== +"@types/escape-html@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-1.0.1.tgz#b19b4646915f0ae2c306bf984dc0a59c5cfc97ba" + integrity sha512-4mI1FuUUZiuT95fSVqvZxp/ssQK9zsa86S43h9x3zPOSU9BBJ+BfDkXwuaU7BfsD+e7U0/cUUfJFk3iW2M4okA== "@types/glob@^7.1.1": version "7.1.2" @@ -314,9 +457,14 @@ integrity sha512-DmZDpSVnsuBrOhtHwE1oKmUJ3qVjHhhNQ7WnZy9/RhH3A24Ar+9o4SoaCWcTzQhalpRDIAMsfdoZLWNJtdBR7A== "@types/is-hotkey@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@types/is-hotkey/-/is-hotkey-0.1.1.tgz#802e294c2a02f26fbcbe8639c77ef05e38cfdc8c" - integrity sha512-QzVKww91fJv/KzARJBS/Im5GS2A8iE64E1HxOed72EmYOvPLG4PBw77QCIUjFl7VwWB3G/SVrxsHedJD/wtn1A== + version "0.1.5" + resolved "https://registry.yarnpkg.com/@types/is-hotkey/-/is-hotkey-0.1.5.tgz#f3123ba21228c0408c10594abf378caddbb802f8" + integrity sha512-pZTb6AsG7I56FJgYA8Cbit3cB3NGVwyHgwyUCENjXewTQChOtQaxaV+u6BO4hqtS1o9KT1wML+NRkGhQZ6swtA== + +"@types/js-cookie@^2.2.6": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" + integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== "@types/json-schema@^7.0.4": version "7.0.5" @@ -338,9 +486,9 @@ "@types/node" "*" "@types/lodash@^4.14.149": - version "4.14.157" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.157.tgz#fdac1c52448861dfde1a2e1515dbc46e54926dc8" - integrity sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ== + version "4.14.175" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.175.tgz#b78dfa959192b01fae0ad90e166478769b215f45" + integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== "@types/luxon@^1.24.3": version "1.24.3" @@ -496,6 +644,555 @@ dependencies: "@types/node" "*" +"@udecode/plate-alignment-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-alignment-ui/-/plate-alignment-ui-5.3.0.tgz#eb2ee0ab26247f0a481a36aa90723d5d83d49962" + integrity sha512-8xxEn7xJN6G1XgI6f54woxlJpv433+u/F5lJRca2KMs7GmOTixmx4wOYWjRlz2x6QfQRxCtchGCvw4j7/u33lA== + dependencies: + "@udecode/plate-alignment" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-alignment@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-alignment/-/plate-alignment-5.3.0.tgz#e79a0d61f19e6608ecabb6b12381c998a7da5fe7" + integrity sha512-BxDY8xT7khToN3CQXS5EIY8C7sCvmPXKWsnYyVol2sbQfSdsYe7A53mqiFEAZ4/bqVNSRaTtp3CH4zeJZLA94w== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-ast-serializer@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-ast-serializer/-/plate-ast-serializer-5.3.0.tgz#9450be84e7339c1c9df6410da70a2d37a2b6129f" + integrity sha512-30Ubv5lIDEpKWDLXgalvTcPwf4XYt/YfDS251LYEAvrRbPWDpIfOsf636vfCSl3i6aclRSc+3bf7rNwP+TyxHg== + dependencies: + "@udecode/plate-block-quote" "5.3.0" + "@udecode/plate-code-block" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-heading" "5.3.0" + "@udecode/plate-link" "5.3.0" + "@udecode/plate-list" "5.3.0" + "@udecode/plate-paragraph" "5.3.0" + "@udecode/plate-serializer" "5.3.0" + remark-parse "^9.0.0" + remark-slate "^1.4.0" + unified "^9.2.0" + +"@udecode/plate-autoformat@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-autoformat/-/plate-autoformat-5.3.0.tgz#bb35d5400320bd604df6157620b71de492dd5ea2" + integrity sha512-Rg2UN7ZBWeap6p3YsYaWlbLj0WLkymGLHb88IGTeeSXzGFWy8NvtyLkvfaJrQ7xKFKnB4k3i+IecQ2dfVg4Sdg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-basic-elements@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-basic-elements/-/plate-basic-elements-5.3.0.tgz#aa8c44e488114889c4373daca7236c2c041f9acc" + integrity sha512-8UlGZUlfVzpDJvPBg2X/qn/SflYjHNnSqHKEJV8MuKUO/HuYIOXQhwjfnAdLFLJ1fiO2hq65LG97U11njZDImw== + dependencies: + "@udecode/plate-block-quote" "5.3.0" + "@udecode/plate-code-block" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-heading" "5.3.0" + "@udecode/plate-paragraph" "5.3.0" + +"@udecode/plate-basic-marks@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-basic-marks/-/plate-basic-marks-5.3.0.tgz#1232411f3942c19ccaff6ecadd12c5ed5431af7d" + integrity sha512-CkETgBLmOGwXFjAobsQBs1vHw8Fm/DXasyV0E2ZfCWMUSyNEPt9874rLLjsL4IZfroQkbPdh1UbYKC13BolnCQ== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-block-quote-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-block-quote-ui/-/plate-block-quote-ui-5.3.0.tgz#78096407cfa61f637cf268ded9b0bcbf6aaaed3d" + integrity sha512-8Ud9o6jOi7jAi8v50R36b4yEwmsznILry75k0/dj95BtbcPBcxQjiLCZGg2qZ24tK38/NBhQ2HkX/gIHqdxgjw== + dependencies: + "@udecode/plate-block-quote" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + +"@udecode/plate-block-quote@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-block-quote/-/plate-block-quote-5.3.0.tgz#19108f515ac8853931d45f710bf80c3cde222d64" + integrity sha512-qrRHqSot56z3iRWhIiOAI5y3KH0VPePpWEB39ySgNFEOi+WvjxeGy3f/8rMR8u3UHA1lujKccu/F4yYnjQrunw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-break@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-break/-/plate-break-5.3.0.tgz#8a521860c6af077025cc51791a201cb3e3c79942" + integrity sha512-2ZZ2FAfRE0hCChw5rqtJGinAFKAnmLCsucjr1HF19UURUHvs/mwBjtXoJ36UeGcf2VIqOV+CvujXHAw/4xuXuA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-code-block-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-code-block-ui/-/plate-code-block-ui-5.3.0.tgz#60570f2ad51cf9b0b2abf0ba6063335402086daa" + integrity sha512-HEpkjXxr3te+3P6NGAytcnDcBRfYU6oxT13d0cAyvT88sI+nRYHBQBDaET4iNiUZMWvUE7Ezvo8NcqWeGN10RA== + dependencies: + "@udecode/plate-code-block" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-code-block@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-code-block/-/plate-code-block-5.3.0.tgz#b5e8c4edf97c4290b3f53c08dd21302fdb7e24ee" + integrity sha512-kGTUnbErzKAUcBt1o8lBuP34AUoLFSJ47BbfZ8AcNdUImKwGc4P6dK0zKuc2G017E5ttetVZGNy2AEmcK/N6ag== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + prismjs "^1.25.0" + +"@udecode/plate-combobox@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-combobox/-/plate-combobox-5.3.0.tgz#246330918f7793f317c08333b4961de1f3641de1" + integrity sha512-Db0UDjqnhtYnuYGF+LumTywMCWfPhrkj4K/kFmCxg8W3EcUGPV4EiqgSVvifEphowxeVUbCWcMqLYoiqclSAFw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-popper" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/zustood" "0.3.0" + downshift "6.1.7" + zustand "3.5.11" + +"@udecode/plate-common@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-common/-/plate-common-5.3.0.tgz#86fe3a2d30443223e6862746643275e4db3cedfc" + integrity sha512-2jWuadwlC3GVfQ/roBf9pRvlHvLhmezzdQMXegeyds8P0o5DfxLBkPP2nGcwYWdMCATk7FHmUwWSuW2uI53WlQ== + dependencies: + "@udecode/plate-core" "5.3.0" + is-hotkey "^0.1.6" + +"@udecode/plate-core@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-core/-/plate-core-5.3.0.tgz#55571132e717563ce9f705894aadf8609bc42544" + integrity sha512-AKkn43K+M8NOdxMW/DPQeJ9XCFeRnYAD/Jw9zKfdMjqN15HmFSmABRk3A4P/gRhXlJ7GI8NyPHd76fAYDbYaPQ== + dependencies: + clsx "^1.1.1" + lodash "^4.17.21" + zustand "^3.4.2" + +"@udecode/plate-csv-serializer@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-csv-serializer/-/plate-csv-serializer-5.3.0.tgz#d2034a25f98a3374863c11ad6cfb4249b0b2fac5" + integrity sha512-7K8J9IaBoBJiC4d4v7QxQlgtVRmGYvTLupqs1XW2cneUt+pyUDqefU+AQaNHxZkrPj6wT27ic6nxPbJQg+ePQA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-serializer" "5.3.0" + "@udecode/plate-table" "5.3.0" + papaparse "^5.3.1" + +"@udecode/plate-dnd@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-dnd/-/plate-dnd-5.3.0.tgz#c7cce89292fc360da7a358a3f7dbfe69c9a6756f" + integrity sha512-eUf15tgXmmCeG8XL+0oSrZjvbtk9u8wxna3ItAtza9e1n5ghnvlrZqzOSbqoRdDcIFWj7nZ5VLuS2d70aegiWQ== + dependencies: + "@react-hook/merged-ref" "^1.3.0" + "@tippyjs/react" "^4.2.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + react-dnd "^14.0.2" + react-dnd-html5-backend "^14.0.0" + +"@udecode/plate-find-replace-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-find-replace-ui/-/plate-find-replace-ui-5.3.0.tgz#6bb8ef636966841e0aed9febaa18ab3eb5c924c0" + integrity sha512-rbgtXhjk4FYRwJi9Hw98BQMkLZkhEES+vjcsFLPoF8kyL6NqadFWcdHPfYD0Fl+2GTzqX61XL3TATxvJL0TwYw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-find-replace" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-find-replace@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-find-replace/-/plate-find-replace-5.3.0.tgz#906940e8a9e2cc1dad3e63f730532ecef1173c59" + integrity sha512-HJij3Qc95BTS9xwyw/7PCiVOMKImpz+XV09PlwtkW/SZkTanxE819FGQaXNySUl7LNmgGbAYkiq5L1TUn/q5tg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-font-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-font-ui/-/plate-font-ui-5.3.0.tgz#3bafe4e92bf6fc5c24ca47101f4976a09c3ef730" + integrity sha512-7UoJm/cSExJHjcswAakG6H5Q3PkHV7YDFSf4nt3IhcQNMf8c7K2elMD9Pr+ZWPxkQ126XuGYIkbb8bru/qG2KA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-font" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-font@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-font/-/plate-font-5.3.0.tgz#59b80d6bb525000a63d7ef7ff059c947b7068cd3" + integrity sha512-RezpSvDByewzuc3zE1VYY7s3AvUhIQMwhf3QAmD7B0TvYBM9VsFhhAO2Kz7344BvIXiUyseFx3RPo0JTSnqXFA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-heading@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-heading/-/plate-heading-5.3.0.tgz#b07744a00ffc56d0f7b4417419a44ce329c90902" + integrity sha512-/jZxNSLr5Q2P/AqGwCkxORJ7DKkrVSJbzaMXDgutIsaJ1XBI1mtsCaqLUqyaAswUyfWKCqUSoSNLWJdeIp67bw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-highlight@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-highlight/-/plate-highlight-5.3.0.tgz#957ab63fc1d5caf78170e7de97006bca2361125b" + integrity sha512-mxAOzNoC6kRVY9FbZP98D5sViRy0TIWl/s75z2kxPJwqXMp3nPpgMf3xihw7QQ3KzWwXqDogsqO+PRRpSg5b+A== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-horizontal-rule@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-horizontal-rule/-/plate-horizontal-rule-5.3.0.tgz#5dc65fcaf6e0130da7545736fea01bdea22f7958" + integrity sha512-xl7jY/L58lY6s7M5+Byh+htUUHPfKU1l0RVFvEMdoHJMyyTzKD79XNvDR4oO1eD95vBzneMkbt9YnM/zZg0phA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-html-serializer@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-html-serializer/-/plate-html-serializer-5.3.0.tgz#0c46f7b74b1b3a24fc1417406b1bf7ea5265e145" + integrity sha512-sY8/HGormzi3D3FP0awL/+/nt8FSoJWb3s6JSRUeTsN9aq2OFu1DChqKXwhVzqQBjAWZxYTku2+ZZE3Isrj9wA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-serializer" "5.3.0" + +"@udecode/plate-image-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-image-ui/-/plate-image-ui-5.3.0.tgz#be4c225491ef6b112cfc185aacf642cf98131970" + integrity sha512-lymnr7GMUJS1ABO7asPnz0wvFIknVkVFXZjnxOoaNu3C/JOC00MmSAHDjSRam5kppapOfhYmUWR3zCP23IsHhA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-image" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + re-resizable "^6.9.0" + react-textarea-autosize "^8.3.3" + +"@udecode/plate-image@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-image/-/plate-image-5.3.0.tgz#c4c5398a4ce1acbc3af16fa2988725d6c0c7c15d" + integrity sha512-rxwWCB6Nl3OSSRUVk0iMz7x8SLAtk3fuqhgfBkMGypT8wSxxrD8S9dq13PkFuXm5RHuUcTufTil9X4/7T5gAng== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-indent@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-indent/-/plate-indent-5.3.0.tgz#10adfcacc38487709e51cdda476fad6d381c92bf" + integrity sha512-nDadY+kiENxGDmW9OH0vFqDSshQ0Q8Ly1TjyxDPU+71FeQ78t2TDQHXW2u9eSIn5I9/IIZNcinw7XphsrczyNQ== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-kbd@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-kbd/-/plate-kbd-5.3.0.tgz#8b773ea0ee10a007e5c8085274a9cfbc3ac62d89" + integrity sha512-McBfLcK8EnSwU1PlDNzasDtG1WwuGp3UKD5kVQBL5b9SuX4NrsYhtrBZQA/9hPXQMQt0fwzOvSTPpxheFQUJcw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-link-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-link-ui/-/plate-link-ui-5.3.0.tgz#fa46e4ff2bc12b158872112705f411a910f3fa71" + integrity sha512-rCFE8UGPRHqnnPAtagPJWnTgkZEcLndmn9Ll9duWW2pkyKUrPeJUCmcZzpeyR6RjYrK7JwQYLXDyr/S7ppc1XA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-link" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-link@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-link/-/plate-link-5.3.0.tgz#c570832da92aae1a0988e05f9ded0380a5fc6434" + integrity sha512-9Twkmhkiu8VYeOKJ223SF24HVOOuCDOkatjUzf/T3x4M3xCL2mb18ZsAo7WFqf0ZVUVV1m1K95cptyeMUIucJA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-normalizers" "5.3.0" + +"@udecode/plate-list-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-list-ui/-/plate-list-ui-5.3.0.tgz#380397fe25a80207444182dec6b81628ce6eaa57" + integrity sha512-y7EufdHo6PE2PCOOqZq3Lxn512/G0b9e4/zh/8k5XiboJV4/C/mzS/SULLDGPjgjGw6tcoh/YxMupR1SxaN08w== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-list" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-list@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-list/-/plate-list-5.3.0.tgz#a642dcd0f93180690ef586198f58407812a26f61" + integrity sha512-SNnji+JQvixkavOj2muq6uvMQPCMDB6vzK0BWrtdRf5mYcu+fRAkijb/yiTl92ycCaZ5xYCzwv6/6hk/a9VxFg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-reset-node" "5.3.0" + +"@udecode/plate-md-serializer@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-md-serializer/-/plate-md-serializer-5.3.0.tgz#058e6897b1f540b8540b162d20436a1d9381b7b6" + integrity sha512-qlyqGMdgLZgR/Ko3C5IyVvTy1LNQpTkAJY/rgGzgSTdYY4ZxAMCkqYh2S1uusSnNMBYnE4k1vYX3dC6XJcnJVQ== + dependencies: + "@udecode/plate-block-quote" "5.3.0" + "@udecode/plate-code-block" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-heading" "5.3.0" + "@udecode/plate-link" "5.3.0" + "@udecode/plate-list" "5.3.0" + "@udecode/plate-paragraph" "5.3.0" + "@udecode/plate-serializer" "5.3.0" + remark-parse "^9.0.0" + remark-slate "^1.4.0" + unified "^9.2.0" + +"@udecode/plate-media-embed-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-media-embed-ui/-/plate-media-embed-ui-5.3.0.tgz#a4c4f7b4e81944409d6ebc99e9f58d61fa2cd978" + integrity sha512-6XnOFZVkTM2ILP++5UYtnQdP2HABavtaiKW/IRSfaHy4vXWFhwYKjjenuRcnq1T7X8zwHZBpwhm3e83cnSnulQ== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-media-embed" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-media-embed@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-media-embed/-/plate-media-embed-5.3.0.tgz#8e17adbbcda6144e1ba39c2f46df7d838c2c5d58" + integrity sha512-aPPwLXQkcdHm2eW3pmmKAyZWgEGtaPMCS64THR7n/1Nzm9LXmORqRtGOXo56GXGlsWwHOJlt7nK1f06O+aTFog== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-mention-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-mention-ui/-/plate-mention-ui-5.3.0.tgz#a38bd68c58871c1ba143c44f8b068eabee6454cc" + integrity sha512-VdftTHUch85dEKRX9JCNnqpGP7gzyf7qXBu+Ydx52xq+aqwmjKhikKUrhVA1r+xBdwS9LroPnRieD31vdeDgFQ== + dependencies: + "@udecode/plate-combobox" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-mention" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + +"@udecode/plate-mention@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-mention/-/plate-mention-5.3.0.tgz#20e455fe6d15e8e22232e8779c3298bced6bae32" + integrity sha512-P9rCxApg5MKqwhHllLBB9Q8hvv1fF9a6j+D5N1avWplk8G6oTkzE9l/OEO42jpEF+jvbklVhXd8ARJTtLJdcAQ== + dependencies: + "@udecode/plate-combobox" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-node-id@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-node-id/-/plate-node-id-5.3.0.tgz#b9b33b0e0c6ac282dc88da97dea51d1e323cf927" + integrity sha512-3KPll26jpGSROaTh4ES9IBMXARbsV1XGCd1/ZnGtakm+79v0wQJk2zcL5ByXcHeXzq1O2w7rtirU+1pKLho9kg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-normalizers@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-normalizers/-/plate-normalizers-5.3.0.tgz#9c85014598d70ea0777257d09b144cc26def98e9" + integrity sha512-AmUVGZ6rIQgYubCinvmP8E66Va48IRH8xU9YgI3C3tImDFCBH7umPfBrTMw5Fnwy3EGXaMqRVa6D7D4VkPqAwg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-paragraph@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-paragraph/-/plate-paragraph-5.3.0.tgz#b7c218c66a2fdc6048b8c9829e5f04bc0d42f52d" + integrity sha512-EqVXQY0i3QNysVG+j/HJ12WMXnPRt8DYDXn1DKrFF3bnrPw4heNuGhKwYUkdVRThX0xcmLyg0F82xBpMMi2Pnw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-placeholder@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-placeholder/-/plate-placeholder-5.3.0.tgz#da81aa1f209c12c4ae35a9519b854f4c1dae788b" + integrity sha512-Fxqq2XRFV1KdSXyp3LGWxHx6Y0Jueg4ffPuuK+5ewfWEVppfLgDoNWcNBXpWY0WudnncEdCuTLBdIK60JZUUxw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + +"@udecode/plate-popper@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-popper/-/plate-popper-5.3.0.tgz#9c211af8a6168429b10ed6bb1c69bf4d1aacee61" + integrity sha512-+axh6HtvEIZX0CvfGrBDz4obE1W5pAm69Dyf3+mfXZZCHVFFWLD4HhFtHofZqK15Cka0DTLmtrFl8+DtL+4gTA== + dependencies: + "@popperjs/core" "2.10.2" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + react-popper "2.2.5" + +"@udecode/plate-reset-node@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-reset-node/-/plate-reset-node-5.3.0.tgz#39335e77587430cae7d8d43a7259c7f2ecf2fd05" + integrity sha512-5JRiZu5bsvMdWwPMB2h+JIbGQSJuaiZ7ozbYxuUzHmgZ2EQw5rFxxy835lsWYVhAT7ZXwRDC9Ou8uNa9mKxfJg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-select@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-select/-/plate-select-5.3.0.tgz#bb3bd2486fe8ab92d52394aee3c3734fcd731f07" + integrity sha512-qYGuO7MRANqt1Bvww/T/IDmaZjnNxi15ETVU4f9hbGg43cX7Lddixbx5Gmhh+q79+RynTEPGPb21XvrWc7K0Sg== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-serializer@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-serializer/-/plate-serializer-5.3.0.tgz#41e5011ce696594e946c976efb646c6594e53468" + integrity sha512-B9lNpyUwOmcj6OK4z1SumwSLwTwlA30ewebxqaWfKXfS4wbMsa1mWiRtBBsD+LoKyNAkRwn8XLC/1EeNQY1BfA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-styled-components@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-styled-components/-/plate-styled-components-5.3.0.tgz#4c4e7916ac66f70529f9a3d58553d3eefbc59615" + integrity sha512-XzvSmlTIV4JvNeudTe3bcznubRRFqk2HsUueuF5wGQTHkP99dQ909OrENBfr0EMULHvmyFNUzECh6FJkS8YRUw== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + clsx "^1.1.1" + +"@udecode/plate-table-ui@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-table-ui/-/plate-table-ui-5.3.0.tgz#385c82d43b38370d07b7d4d267c5e0b958d64bb9" + integrity sha512-vMbPs6mckdNQZKzqXPRYRqqOAeFAEO6Z+IsQwQXfutTfWjMje7ehrlQirJjZ70n3Y70gHn8or5Qi3U9BEpFztA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-table" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + +"@udecode/plate-table@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-table/-/plate-table-5.3.0.tgz#c5b4d3f433ec5cb44b47c412d3e5cc83c2044e9e" + integrity sha512-XsjC/dryge3V1+/GR4ZMM9RZS94UTBwJdQI+Scy2Ij57S3rSQoE8+FRz//3pUKPMxVvAGm3ffPZZXqI0MJ7LZA== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate-toolbar@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-toolbar/-/plate-toolbar-5.3.0.tgz#ea1157a91f9f88a0a4c8a5b98da9516636b73e7f" + integrity sha512-lYk/OMYzN9x6g1PcMm9lor1meUgQgA2wQ1OrYBHoxPeWX1MSRiNsYI9nPHSsDbqcsdyxxvQANRb6KqaS2U6LOA== + dependencies: + "@tippyjs/react" "^4.2.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-popper" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + react-popper "^2.2.4" + react-use "^17.1.1" + +"@udecode/plate-trailing-block@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate-trailing-block/-/plate-trailing-block-5.3.0.tgz#cb9a6ae2f8ac76632c8210a6678909f8dfe6482f" + integrity sha512-+GLwI9quU3Gg9VBlg4OE50rMjWQ6GjFWIuHALosfig3Yp9Cdxcn/oS4/cXrvN1/lCQH72+LZSrXEp9GsDLzfjQ== + dependencies: + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + +"@udecode/plate@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@udecode/plate/-/plate-5.3.0.tgz#3552bc2368f1bd5545f9476078bb9fc41672e17f" + integrity sha512-H6PEjtdNt6ne3wDzRjKeoxMxBuqnrhtdCowz6Z9pvTH6xC0TSyo7e0lXHiNmJIJv7++ogGXX97R9JQ9vDMV9Hg== + dependencies: + "@udecode/plate-alignment" "5.3.0" + "@udecode/plate-alignment-ui" "5.3.0" + "@udecode/plate-ast-serializer" "5.3.0" + "@udecode/plate-autoformat" "5.3.0" + "@udecode/plate-basic-elements" "5.3.0" + "@udecode/plate-basic-marks" "5.3.0" + "@udecode/plate-block-quote" "5.3.0" + "@udecode/plate-block-quote-ui" "5.3.0" + "@udecode/plate-break" "5.3.0" + "@udecode/plate-code-block" "5.3.0" + "@udecode/plate-code-block-ui" "5.3.0" + "@udecode/plate-combobox" "5.3.0" + "@udecode/plate-common" "5.3.0" + "@udecode/plate-core" "5.3.0" + "@udecode/plate-csv-serializer" "5.3.0" + "@udecode/plate-dnd" "5.3.0" + "@udecode/plate-find-replace" "5.3.0" + "@udecode/plate-find-replace-ui" "5.3.0" + "@udecode/plate-font" "5.3.0" + "@udecode/plate-font-ui" "5.3.0" + "@udecode/plate-heading" "5.3.0" + "@udecode/plate-highlight" "5.3.0" + "@udecode/plate-horizontal-rule" "5.3.0" + "@udecode/plate-html-serializer" "5.3.0" + "@udecode/plate-image" "5.3.0" + "@udecode/plate-image-ui" "5.3.0" + "@udecode/plate-indent" "5.3.0" + "@udecode/plate-kbd" "5.3.0" + "@udecode/plate-link" "5.3.0" + "@udecode/plate-link-ui" "5.3.0" + "@udecode/plate-list" "5.3.0" + "@udecode/plate-list-ui" "5.3.0" + "@udecode/plate-md-serializer" "5.3.0" + "@udecode/plate-media-embed" "5.3.0" + "@udecode/plate-media-embed-ui" "5.3.0" + "@udecode/plate-mention" "5.3.0" + "@udecode/plate-mention-ui" "5.3.0" + "@udecode/plate-node-id" "5.3.0" + "@udecode/plate-normalizers" "5.3.0" + "@udecode/plate-paragraph" "5.3.0" + "@udecode/plate-placeholder" "5.3.0" + "@udecode/plate-popper" "5.3.0" + "@udecode/plate-reset-node" "5.3.0" + "@udecode/plate-select" "5.3.0" + "@udecode/plate-serializer" "5.3.0" + "@udecode/plate-styled-components" "5.3.0" + "@udecode/plate-table" "5.3.0" + "@udecode/plate-table-ui" "5.3.0" + "@udecode/plate-toolbar" "5.3.0" + "@udecode/plate-trailing-block" "5.3.0" + +"@udecode/zustood@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@udecode/zustood/-/zustood-0.3.0.tgz#ad41e45aa9af065da2fe6e073b754d1065b9937c" + integrity sha512-MG9CZPlQUmWd6sseAx2uF2PJLusyaejTg2fm3feuYd72ujYZetUH+t6Wszhj5eVzMFR04qvWyMUCZwEXig2bfg== + dependencies: + immer "9.0.6" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -641,6 +1338,11 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@xobotyi/scrollbar-width@^1.9.5": + version "1.9.5" + resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" + integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -1036,6 +1738,16 @@ babel-plugin-macros@^2.0.0: cosmiconfig "^6.0.0" resolve "^1.12.0" +"babel-plugin-styled-components@>= 1.12.0": + version "1.13.2" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz#ebe0e6deff51d7f93fceda1819e9b96aeb88278d" + integrity sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" @@ -1472,6 +2184,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + caniuse-lite@^1.0.30000989: version "1.0.30001113" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001113.tgz#22016ab55b5a8b04fa00ca342d9ee1b98df48065" @@ -1746,6 +2463,11 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +clsx@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -1853,6 +2575,11 @@ compute-scroll-into-view@^1.0.14: resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.14.tgz#80e3ebb25d6aa89f42e533956cb4b16a04cfe759" integrity sha512-mKDjINe3tc6hGelUMNDzuhorIUZ7kS7BwyY0r2wQd2HOH2tRuJykiC06iSEX8y1TuhNzvz4GcJnK16mM2J1NMQ== +compute-scroll-into-view@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" + integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1958,6 +2685,13 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-to-clipboard@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -2062,6 +2796,11 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + css-in-js-utils@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" @@ -2099,6 +2838,23 @@ css-select@^1.1.0: domutils "1.5.1" nth-check "~1.0.1" +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + css-what@2.1: version "2.1.3" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" @@ -2114,7 +2870,7 @@ csstype@^2.2.0, csstype@^2.5.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== -csstype@^3.0.2: +csstype@^3.0.2, csstype@^3.0.6: version "3.0.9" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== @@ -2164,7 +2920,7 @@ debug@3.2.6, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@4: +debug@4, debug@^4.0.0: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -2378,6 +3134,15 @@ direction@^1.0.3: resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== +dnd-core@14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-14.0.1.tgz#76d000e41c494983210fb20a48b835f81a203c2e" + integrity sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A== + dependencies: + "@react-dnd/asap" "^4.0.0" + "@react-dnd/invariant" "^2.0.0" + redux "^4.1.1" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -2474,6 +3239,17 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" +downshift@6.1.7: + version "6.1.7" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.7.tgz#fdb4c4e4f1d11587985cd76e21e8b4b3fa72e44c" + integrity sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg== + dependencies: + "@babel/runtime" "^7.14.8" + compute-scroll-into-view "^1.0.17" + prop-types "^15.7.2" + react-is "^17.0.2" + tslib "^2.3.0" + downshift@^5.2.0: version "5.4.7" resolved "https://registry.yarnpkg.com/downshift/-/downshift-5.4.7.tgz#2ab7b0512cad33011ee6f29630f9a7bb74dff2b5" @@ -2718,6 +3494,13 @@ error-overlay-webpack-plugin@^0.4.1: sockjs-client "^1.4.0" url "^0.11.0" +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstract@^1.17.5: version "1.17.6" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" @@ -2772,7 +3555,7 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= @@ -2817,11 +3600,6 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -esrever@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/esrever/-/esrever-0.2.0.tgz#96e9d28f4f1b1a76784cd5d490eaae010e7407b8" - integrity sha1-lunSj08bGnZ4TNXUkOquAQ50B7g= - estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -3049,6 +3827,21 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-memoize@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== + +fast-shallow-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" + integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== + +fastest-stable-stringify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" + integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -3542,6 +4335,11 @@ global-tunnel-ng@^2.7.1: npm-conf "^1.1.3" tunnel "^0.0.6" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globalthis@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" @@ -3751,6 +4549,13 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -3974,10 +4779,10 @@ immer@1.10.0: resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== -immer@^8.0.1: - version "8.0.4" - resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.4.tgz#3a21605a4e2dded852fb2afd208ad50969737b7a" - integrity sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ== +immer@9.0.6, immer@^9.0.6: + version "9.0.6" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" + integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== import-fresh@^3.1.0: version "3.2.1" @@ -4068,6 +4873,13 @@ inline-style-prefixer@^5.0.4: dependencies: css-in-js-utils "^2.0.0" +inline-style-prefixer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.1.tgz#c5c0e43ba8831707afc5f5bbfd97edf45c1fa7ae" + integrity sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ== + dependencies: + css-in-js-utils "^2.0.0" + inquirer@6.5.0: version "6.5.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" @@ -4310,9 +5122,9 @@ is-hexadecimal@^2.0.0: integrity sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug== is-hotkey@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.6.tgz#c214b1ccdcbda46fba4ba93d2de64915db737471" - integrity sha512-1+hMr0GLPM0M49UDRt9RgE8i+SM29UY4AGRP6sGz6fThOVXqSrEvTMakolhHMcVizJnPNAoMpEmE+Oi1k2NrZQ== + version "0.1.8" + resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" + integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== is-interactive@^1.0.0: version "1.0.0" @@ -4382,12 +5194,10 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-regex@^1.0.4, is-regex@^1.1.0: version "1.1.0" @@ -4482,11 +5292,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -4508,6 +5313,11 @@ iterate-value@^1.0.0: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4526,6 +5336,11 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -4754,11 +5569,16 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.4: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" @@ -4943,6 +5763,17 @@ mdast-util-find-and-replace@^2.0.0: unist-util-is "^5.0.0" unist-util-visit-parents "^4.0.0" +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + mdast-util-gfm-autolink-literal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz#8736e16d26e39a48d2f3cf41f7e099326b15c833" @@ -5014,11 +5845,21 @@ mdast-util-to-markdown@^1.0.0: unist-util-visit "^4.0.0" zwitch "^2.0.0" +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + mdast-util-to-string@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -5197,6 +6038,14 @@ micromark-util-types@^1.0.0: resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.1.tgz#8bb8a092d93d326bd29fe29602799f2d0d922fd4" integrity sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA== +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5502,6 +6351,20 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nano-css@^5.3.1: + version "5.3.4" + resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.3.4.tgz#40af6a83a76f84204f346e8ccaa9169cdae9167b" + integrity sha512-wfcviJB6NOxDIDfr7RFn/GlaN7I/Bhe4d39ZRCJ3xvZX60LVe2qZ+rDqM49nm4YT81gAjzS+ZklhKP/Gnfnubg== + dependencies: + css-tree "^1.1.2" + csstype "^3.0.6" + fastest-stable-stringify "^2.0.2" + inline-style-prefixer "^6.0.0" + rtl-css-js "^1.14.0" + sourcemap-codec "^1.4.8" + stacktrace-js "^2.0.2" + stylis "^4.0.6" + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5950,6 +6813,11 @@ pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +papaparse@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1" + integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA== + parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" @@ -6265,7 +7133,7 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -6318,6 +7186,11 @@ prismjs@^1.21.0: optionalDependencies: clipboard "^2.0.0" +prismjs@^1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756" + integrity sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -6520,6 +7393,13 @@ rcedit@^2.0.0: resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-2.2.0.tgz#3bfe71248749fa821fef26eda3d35f4e0ee47afc" integrity sha512-dhFtYmQS+V8qQIANyX6zDK+sO50ayDePKApi46ZPK8I6QeyyTDD6LManMa7a3p3c9mLM4zi9QBP41pfhQ9p7Sg== +re-resizable@^6.9.0: + version "6.9.1" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.1.tgz#6be082b55d02364ca4bfee139e04feebdf52441c" + integrity sha512-KRYAgr9/j1PJ3K+t+MBhlQ+qkkoLDJ1rs0z1heIWvYbCW/9Vq4djDU+QumJ3hQbwwtzXF6OInla6rOx6hhgRhQ== + dependencies: + fast-memoize "^2.5.1" + react-day-picker@^7.4.10: version "7.4.10" resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-7.4.10.tgz#d3928fa65c04379ad28c76de22aa85374a8361e1" @@ -6558,6 +7438,24 @@ react-dev-utils@^9.0.3: strip-ansi "5.2.0" text-table "0.2.0" +react-dnd-html5-backend@^14.0.0: + version "14.0.2" + resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-14.0.2.tgz#25019388f6abdeeda3a6fea835dff155abb2085c" + integrity sha512-QgN6rYrOm4UUj6tIvN8ovImu6uP48xBXF2rzVsp6tvj6d5XQ7OjHI4SJ/ZgGobOneRAU3WCX4f8DGCYx0tuhlw== + dependencies: + dnd-core "14.0.1" + +react-dnd@^14.0.2: + version "14.0.4" + resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-14.0.4.tgz#ffb4ea0e2a3a5532f9c6294d565742008a52b8b0" + integrity sha512-AFJJXzUIWp5WAhgvI85ESkDCawM0lhoVvfo/lrseLXwFdH3kEO3v8I2C81QPqBW2UEyJBIPStOhPMGYGFtq/bg== + dependencies: + "@react-dnd/invariant" "^2.0.0" + "@react-dnd/shallowequal" "^2.0.0" + dnd-core "14.0.1" + fast-deep-equal "^3.1.3" + hoist-non-react-statics "^3.3.2" + react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" @@ -6572,16 +7470,38 @@ react-error-overlay@^6.0.1, react-error-overlay@^6.0.3: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== -react-fast-compare@^3.2.0: +react-fast-compare@^3.0.1, react-fast-compare@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== -react-is@^16.13.1, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-popper@2.2.5, react-popper@^2.2.4: + version "2.2.5" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.5.tgz#1214ef3cec86330a171671a4fbcbeeb65ee58e96" + integrity sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw== + dependencies: + react-fast-compare "^3.0.1" + warning "^4.0.2" + +react-textarea-autosize@^8.3.3: + version "8.3.3" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" + integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.0.0" + use-latest "^1.0.0" + react-transition-group@^4.4.1: version "4.4.2" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" @@ -6592,6 +7512,31 @@ react-transition-group@^4.4.1: loose-envify "^1.4.0" prop-types "^15.6.2" +react-universal-interface@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" + integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== + +react-use@^17.1.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.3.1.tgz#12b248555775519aa2b900b22f1928d029bf99d1" + integrity sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA== + dependencies: + "@types/js-cookie" "^2.2.6" + "@xobotyi/scrollbar-width" "^1.9.5" + copy-to-clipboard "^3.3.1" + fast-deep-equal "^3.1.3" + fast-shallow-equal "^1.0.0" + js-cookie "^2.2.1" + nano-css "^5.3.1" + react-universal-interface "^0.6.2" + resize-observer-polyfill "^1.5.1" + screenfull "^5.1.0" + set-harmonic-interval "^1.0.1" + throttle-debounce "^3.0.1" + ts-easing "^0.2.0" + tslib "^2.1.0" + react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -6669,6 +7614,13 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" +redux@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.1.tgz#76f1c439bb42043f985fbd9bf21990e60bd67f47" + integrity sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw== + dependencies: + "@babel/runtime" "^7.9.2" + regenerator-runtime@^0.13.4: version "0.13.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" @@ -6757,6 +7709,13 @@ remark-parse@^8.0.3: vfile-location "^3.0.0" xtend "^4.0.1" +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + remark-rehype@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-7.0.0.tgz#8e106e49806c69b2e9523b76d24965119e2da67b" @@ -6769,6 +7728,14 @@ remark-slate-transformer@^0.4.1: resolved "https://registry.yarnpkg.com/remark-slate-transformer/-/remark-slate-transformer-0.4.1.tgz#9feee9e185579ebf7825a5ae8b1c152584a9944f" integrity sha512-89qHsQvIYwJ1WnXZcmSZHCtVSRWK4nZPfWyduP/MKQs89CDZjqymC/EiWg0lzRC2JvX976k0P+7rAQ9nxb2Jqg== +remark-slate@^1.4.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/remark-slate/-/remark-slate-1.8.0.tgz#f0e97fe7d96bd82d896b777fa3064008f75aa144" + integrity sha512-KYZCehGs4gTaEt5i0TQqSYnYTO3/EFZ4K3x9i4dVydEximrBZoRcIJcF4+cAnF5glJYaBQhdNvhHk3vINgP9vg== + dependencies: + "@types/escape-html" "^1.0.0" + escape-html "^1.0.3" + remark-stringify@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.0.tgz#1e555f4402e445c364fb23d12fc5f5e0337ec8b7" @@ -6869,6 +7836,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -6985,6 +7957,13 @@ roarr@^2.15.3: semver-compare "^1.0.0" sprintf-js "^1.1.2" +rtl-css-js@^1.14.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.14.2.tgz#fb2168433af9cdabee8a1613f4e2cbd1148acf6f" + integrity sha512-t6Wc/wpqm8s3kuXAV6tL/T7VS6n0XszzX58CgCsLj3O2xi9ITSLfzYhtl+GKyxCi/3QEqVctOJQwCiDzb2vteQ== + dependencies: + "@babel/runtime" "^7.1.2" + run-async@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -7059,12 +8038,17 @@ schema-utils@^2.6.6, schema-utils@^2.7.0: ajv "^6.12.2" ajv-keywords "^3.4.1" +screenfull@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8" + integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA== + scroll-into-view-if-needed@^2.2.20: - version "2.2.25" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.25.tgz#117b7bc7c61bc7a2b7872a0984bc73a19bc6e961" - integrity sha512-C8RKJPq9lK7eubwGpLbUkw3lklcG3Ndjmea2PyauzrA0i4DPlzAmVMGxaZrBFqCrVLfvJmP80IyHnv4jxvg1OQ== + version "2.2.28" + resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.28.tgz#5a15b2f58a52642c88c8eca584644e01703d645a" + integrity sha512-8LuxJSuFVc92+0AdNv4QOxRL4Abeo1DgLnGNkn1XlaujPH/3cCFz3QI60r2VNu4obJJROzgnIUw5TKQkZvZI1w== dependencies: - compute-scroll-into-view "^1.0.14" + compute-scroll-into-view "^1.0.17" select-hose@^2.0.0: version "2.0.0" @@ -7176,6 +8160,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-harmonic-interval@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" + integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -7209,6 +8198,11 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -7262,37 +8256,41 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= -slate-history@^0.65.3: - version "0.65.3" - resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.65.3.tgz#f6583a6ba042e2abfc97fa0f7ca9cb9098016df2" - integrity sha512-9OSZun3Y0OmonTBSe0vw9EK+Gc9/s49i1bB2U0UxhWvc1hMNbvvu4YGr3eWbtb3gX1VBcGVIiJgawDE4foOVAQ== +slate-history@^0.66.0: + version "0.66.0" + resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.66.0.tgz#ac63fddb903098ceb4c944433e3f75fe63acf940" + integrity sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng== dependencies: - is-plain-object "^3.0.0" + is-plain-object "^5.0.0" -slate-react@^0.65.3: - version "0.65.3" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.65.3.tgz#f652e4780b4304189a8a8ecc8feca723f31173a3" - integrity sha512-lyiZD7Rrt0LInvK4xhIemnCEx/N7jt+e/eHlsFor+rif/K0RT9wSPXWajTI9RglbvN9XHTEuB2BFx2cQLKiomw== +slate-hyperscript@^0.66.0: + version "0.66.0" + resolved "https://registry.yarnpkg.com/slate-hyperscript/-/slate-hyperscript-0.66.0.tgz#87f0581de00f71ee61014e2afc825a2c11897e2f" + integrity sha512-uMBwuVBKl5jk0V37BMYhJdqO/R8mgoKvYGo1NmJbTxwf2capX4/4RgQtPPH20o09rbx8l9e554hLc8UiRPGg4w== + dependencies: + is-plain-object "^5.0.0" + +slate-react@^0.66.7: + version "0.66.7" + resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.66.7.tgz#033823dac8612e040094e7b8d942de6639b2e7de" + integrity sha512-M0MGCnANdjRZCKGY9cvqHBR/WJ+/4SMIvBvEx4UJ5ycx9uNkDVPdpsyvwDKOpmsJuzZ1DH+34YrpxT7RnQyp1Q== dependencies: "@types/is-hotkey" "^0.1.1" "@types/lodash" "^4.14.149" direction "^1.0.3" is-hotkey "^0.1.6" - is-plain-object "^3.0.0" + is-plain-object "^5.0.0" lodash "^4.17.4" scroll-into-view-if-needed "^2.2.20" tiny-invariant "1.0.6" -slate@^0.65.3: - version "0.65.3" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.65.3.tgz#8178cdf28a10a3a4e6858b13bc2ffa7c3d003e7a" - integrity sha512-n8wa2MKyWhCMRyVkXuMf67MmOYSeoHnqS1qYivor+/y0puNvQgXDUjC7TJJqUjhVqJ6zg2IeuYd0WfSYdAJs4g== +slate@^0.66.5: + version "0.66.5" + resolved "https://registry.yarnpkg.com/slate/-/slate-0.66.5.tgz#bdd93a4422891341dd18a31ff7810f5cae60e40a" + integrity sha512-bG03uEKIm/gS6jQarKSNbHn2anemOON2vnSI3VGRd7MJJU5Yiwmutze0yHNO9uZwDLTB+LeDQYZeGu1ACWT0VA== dependencies: - "@types/esrever" "^0.2.0" - esrever "^0.2.0" - fast-deep-equal "^3.1.3" - immer "^8.0.1" - is-plain-object "^3.0.0" + immer "^9.0.6" + is-plain-object "^5.0.0" tiny-warning "^1.0.3" smart-buffer@^4.1.0: @@ -7420,7 +8418,12 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.6, source-map@^0.5.7: +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -7435,6 +8438,11 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + space-separated-tokens@^1.0.0: version "1.1.5" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" @@ -7525,6 +8533,35 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" +stack-generator@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" + integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== + dependencies: + stackframe "^1.1.1" + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +stacktrace-gps@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" + integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg== + dependencies: + source-map "0.5.6" + stackframe "^1.1.1" + +stacktrace-js@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== + dependencies: + error-stack-parser "^2.0.6" + stack-generator "^2.0.5" + stacktrace-gps "^3.0.4" + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -7721,6 +8758,27 @@ style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" +styled-components@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.1.tgz#8a86dcd31bff7049c2ed408bae36fa23f03f071a" + integrity sha512-JThv2JRzyH0NOIURrk9iskdxMSAAtCfj/b2Sf1WJaCUsloQkblepy1jaCLX/bYE+mhYo3unmwVSI9I5d9ncSiQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^0.8.8" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + +stylis@^4.0.6: + version "4.0.10" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240" + integrity sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg== + sumchecker@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" @@ -7740,7 +8798,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -7828,6 +8886,11 @@ text-table@0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +throttle-debounce@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" + integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -7873,6 +8936,13 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= +tippy.js@^6.3.1: + version "6.3.2" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.2.tgz#c03a0b88f170dffeba42f569771801dddc1f6340" + integrity sha512-35XVQI7Zl/jHZ51+8eHu/vVRXBjWYGobPm5G9FxOchj4r5dWhghKGS0nm0ARUKZTF96V7pPn7EbXS191NTwldw== + dependencies: + "@popperjs/core" "^2.9.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7927,6 +8997,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -7973,6 +9048,16 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" +ts-easing@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" + integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== + +ts-essentials@^2.0.3: + version "2.0.12" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== + ts-loader@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-7.0.5.tgz#789338fb01cb5dc0a33c54e50558b34a73c9c4c5" @@ -8008,6 +9093,11 @@ tslib@^1.10.0, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.1.0, tslib@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -8117,6 +9207,18 @@ unified@^9.1.0: trough "^1.0.0" vfile "^4.0.0" +unified@^9.2.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -8321,6 +9423,25 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-composed-ref@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.1.0.tgz#9220e4e94a97b7b02d7d27eaeab0b37034438bbc" + integrity sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg== + dependencies: + ts-essentials "^2.0.3" + +use-isomorphic-layout-effect@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" + integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== + +use-latest@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" + integrity sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw== + dependencies: + use-isomorphic-layout-effect "^1.0.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -8438,6 +9559,13 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +warning@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack-chokidar2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" @@ -8819,6 +9947,16 @@ yn@3.1.1: resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +zustand@3.5.11: + version "3.5.11" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.5.11.tgz#3a8fd24f7a63d02a6532ab230accc2108051d635" + integrity sha512-V3Ys0ik2flOnWr0h9D4ZTCdcpK4feg71vLWaxjw+D+PLxM0+6KITdLedgDa97yAS6YDQTBD0Gw+NbsdAiMCqfA== + +zustand@^3.4.2: + version "3.5.13" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.5.13.tgz#fd1af8c14a23ec7efdeb9ab167b8e69a8fc0980a" + integrity sha512-orO/XcYwSWffsrPVTdCtuKM/zkUaOIyKDasOk/lecsD3R0euELsj+cB65uKZ1KyinrK2STHIuUhRoLpH8QprQg== + zwitch@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1" From a036f03e60c52da752e034b60690ada868910041 Mon Sep 17 00:00:00 2001 From: Christopher Loverich Date: Thu, 14 Oct 2021 16:16:02 -0500 Subject: [PATCH 2/7] style toolbar. add image upload --- src/views/edit/editor/blocks/images.tsx | 383 +++++++++++---------- src/views/edit/editor/createImagePlugin.ts | 68 ++++ src/views/edit/editor/index.tsx | 47 +-- src/views/edit/toolbar.tsx | 5 +- 4 files changed, 276 insertions(+), 227 deletions(-) create mode 100644 src/views/edit/editor/createImagePlugin.ts diff --git a/src/views/edit/editor/blocks/images.tsx b/src/views/edit/editor/blocks/images.tsx index e157cf5..0ddf75e 100644 --- a/src/views/edit/editor/blocks/images.tsx +++ b/src/views/edit/editor/blocks/images.tsx @@ -1,23 +1,22 @@ -import React from 'react'; +import React from "react"; import { ReactEditor, RenderElementProps } from "slate-react"; import { Transforms } from "slate"; -import { ImageElement, VideoElement } from '../../util'; -import { css } from 'emotion'; +import { ImageElement, VideoElement } from "../../util"; +import { css } from "emotion"; /** * Create an image node and insert it at the current selection */ function insertImage(editor: ReactEditor, filepath: string) { - const image = { type: 'image', url: filepath, children: [{ text: '' }] } - Transforms.insertNodes(editor, image) - padDocument(editor); + const image = { type: "img", url: filepath, children: [{ text: "" }] }; + Transforms.insertNodes(editor, image); + // padDocument(editor); } function insertVideo(editor: ReactEditor, filepath: string) { - const image = { type: 'video', url: filepath, children: [{ text: '' }] } - Transforms.insertNodes(editor, image) - padDocument(editor); - + const image = { type: "video", url: filepath, children: [{ text: "" }] }; + Transforms.insertNodes(editor, image); + // padDocument(editor); } /** @@ -25,54 +24,63 @@ function insertVideo(editor: ReactEditor, filepath: string) { * the last element in the document, which currently prevents user from entering * more text. Ideally a listener at a higher level could observe for blocking elements * and if the lsat element is not editable text or something, auto-insert a paragraph block. + * + * NOTE: This is better done with normalization, which the createTrailingBlock plate plugin does */ function padDocument(editor: ReactEditor) { - Transforms.insertNodes(editor, { type: 'paragraph', children: [{text: ''}]} as any); + Transforms.insertNodes(editor, { + type: "paragraph", + children: [{ text: "" }], + } as any); } export function insertFile(editor: ReactEditor, filepath: string) { - const extension = filepath.split('.').pop(); + const extension = filepath.split(".").pop(); if (!extension) { - console.error('insertFile called but filepath did not contain an extension:', filepath); + console.error( + "insertFile called but filepath did not contain an extension:", + filepath + ); return; } if (imageExtensions.includes(extension)) { - return insertImage(editor, filepath) + return insertImage(editor, filepath); } if (videoExtensions.includes(extension)) { return insertVideo(editor, filepath); } - console.error('Unable to insertFile into Slate Editor of unknown extension: ', filepath); + console.error( + "Unable to insertFile into Slate Editor of unknown extension: ", + filepath + ); } - /** * For absolute image urls, prefix them with chronicles:// which will trigger * the protocol handler in the main process, which as of now merely serves * the file - * + * * When implementing drag and drop and accounting for other legacy journals, * many image files were absolute filepaths to various places on the filesystem - * + * * todo: Upload and host all image files from a single directory - * - * @param url - * @returns + * + * @param url + * @returns */ function prefixUrl(url: string) { - const isLocalPath = !url.startsWith('http') + const isLocalPath = !url.startsWith("http"); if (isLocalPath) { - return 'chronicles://' + url; + return "chronicles://" + url; } else { return url; } } - interface ImageElementProps extends RenderElementProps { element: ImageElement; } @@ -96,8 +104,8 @@ export const Image = ({ attributes, children, element }: ImageElementProps) => {
{children} - ) -} + ); +}; export const Video = ({ attributes, children, element }: VideoElementProps) => { return ( @@ -115,178 +123,177 @@ export const Video = ({ attributes, children, element }: VideoElementProps) => { {children} - ) -} + ); +}; /** * Does the URL end with a known image extension? */ -export function isImageUrl (filepath: string) { - const extension = filepath.split('.').pop(); +export function isImageUrl(filepath: string) { + const extension = filepath.split(".").pop(); if (!extension) return false; return imageExtensions.includes(extension.toLowerCase()); } - // Copied from this repo: https://github.com/arthurvr/image-extensions -// Which is an npm package that is just a json file +// Which is an npm package that is just a json file const imageExtensions = [ - "ase", - "art", - "bmp", - "blp", - "cd5", - "cit", - "cpt", - "cr2", - "cut", - "dds", - "dib", - "djvu", - "egt", - "exif", - "gif", - "gpl", - "grf", - "icns", - "ico", - "iff", - "jng", - "jpeg", - "jpg", - "jfif", - "jp2", - "jps", - "lbm", - "max", - "miff", - "mng", - "msp", - "nitf", - "ota", - "pbm", - "pc1", - "pc2", - "pc3", - "pcf", - "pcx", - "pdn", - "pgm", - "PI1", - "PI2", - "PI3", - "pict", - "pct", - "pnm", - "pns", - "ppm", - "psb", - "psd", - "pdd", - "psp", - "px", - "pxm", - "pxr", - "qfx", - "raw", - "rle", - "sct", - "sgi", - "rgb", - "int", - "bw", - "tga", - "tiff", - "tif", - "vtf", - "xbm", - "xcf", - "xpm", - "3dv", - "amf", - "ai", - "awg", - "cgm", - "cdr", - "cmx", - "dxf", - "e2d", - "egt", - "eps", - "fs", - "gbr", - "odg", - "svg", - "stl", - "vrml", - "x3d", - "sxd", - "v2d", - "vnd", - "wmf", - "emf", - "art", - "xar", - "png", - "webp", - "jxr", - "hdp", - "wdp", - "cur", - "ecw", - "iff", - "lbm", - "liff", - "nrrd", - "pam", - "pcx", - "pgf", - "sgi", - "rgb", - "rgba", - "bw", - "int", - "inta", - "sid", - "ras", - "sun", - "tga" -] + "ase", + "art", + "bmp", + "blp", + "cd5", + "cit", + "cpt", + "cr2", + "cut", + "dds", + "dib", + "djvu", + "egt", + "exif", + "gif", + "gpl", + "grf", + "icns", + "ico", + "iff", + "jng", + "jpeg", + "jpg", + "jfif", + "jp2", + "jps", + "lbm", + "max", + "miff", + "mng", + "msp", + "nitf", + "ota", + "pbm", + "pc1", + "pc2", + "pc3", + "pcf", + "pcx", + "pdn", + "pgm", + "PI1", + "PI2", + "PI3", + "pict", + "pct", + "pnm", + "pns", + "ppm", + "psb", + "psd", + "pdd", + "psp", + "px", + "pxm", + "pxr", + "qfx", + "raw", + "rle", + "sct", + "sgi", + "rgb", + "int", + "bw", + "tga", + "tiff", + "tif", + "vtf", + "xbm", + "xcf", + "xpm", + "3dv", + "amf", + "ai", + "awg", + "cgm", + "cdr", + "cmx", + "dxf", + "e2d", + "egt", + "eps", + "fs", + "gbr", + "odg", + "svg", + "stl", + "vrml", + "x3d", + "sxd", + "v2d", + "vnd", + "wmf", + "emf", + "art", + "xar", + "png", + "webp", + "jxr", + "hdp", + "wdp", + "cur", + "ecw", + "iff", + "lbm", + "liff", + "nrrd", + "pam", + "pcx", + "pgf", + "sgi", + "rgb", + "rgba", + "bw", + "int", + "inta", + "sid", + "ras", + "sun", + "tga", +]; // https://github.com/sindresorhus/video-extensions/blob/main/video-extensions.json const videoExtensions = [ - "3g2", - "3gp", - "aaf", - "asf", - "avchd", - "avi", - "drc", - "flv", - "m2v", - "m3u8", - "m4p", - "m4v", - "mkv", - "mng", - "mov", - "mp2", - "mp4", - "mpe", - "mpeg", - "mpg", - "mpv", - "mxf", - "nsv", - "ogg", - "ogv", - "qt", - "rm", - "rmvb", - "roq", - "svi", - "vob", - "webm", - "wmv", - "yuv" -]; \ No newline at end of file + "3g2", + "3gp", + "aaf", + "asf", + "avchd", + "avi", + "drc", + "flv", + "m2v", + "m3u8", + "m4p", + "m4v", + "mkv", + "mng", + "mov", + "mp2", + "mp4", + "mpe", + "mpeg", + "mpg", + "mpv", + "mxf", + "nsv", + "ogg", + "ogv", + "qt", + "rm", + "rmvb", + "roq", + "svi", + "vob", + "webm", + "wmv", + "yuv", +]; diff --git a/src/views/edit/editor/createImagePlugin.ts b/src/views/edit/editor/createImagePlugin.ts new file mode 100644 index 0000000..ac436e1 --- /dev/null +++ b/src/views/edit/editor/createImagePlugin.ts @@ -0,0 +1,68 @@ +import { + getPlatePluginTypes, + getRenderElement, + PlatePlugin, + ELEMENT_IMAGE, + getImageDeserialize, + WithOverride, + SPEditor, +} from "@udecode/plate"; +import { ReactEditor } from "slate-react"; + +// todo: would be nice to inject these... +import { toaster } from "evergreen-ui"; +import client from "../../../client"; + +import { insertFile, isImageUrl } from "./blocks/images"; + +/** + * Enables support for images. + */ +export const createImagePlugin = (): PlatePlugin => ({ + pluginKeys: ELEMENT_IMAGE, + renderElement: getRenderElement(ELEMENT_IMAGE), + deserialize: getImageDeserialize(), + voidTypes: getPlatePluginTypes(ELEMENT_IMAGE), + withOverrides: imageOverrides({}), +}); + +const imageOverrides = + (opts: any): WithOverride => + (editor: any) => { + const { insertData } = editor; + + editor.insertData = (data: DataTransfer) => { + const text = data.getData("text/plain"); + const { files } = data; + + // Implement it for real, once image uploading is decided upon + if (files && files.length > 0) { + for (const file of files) { + if (!isImageUrl(file.path)) { + toaster.warning( + "Only images with known image extensions may be added to notes" + ); + return; + } + + // this works, but the preview in network tab does not. weird. + // todo: error as a popup, progress and intermediate state + // todo: handle editor being unmounted, more generally move this + // to a higher level abstraction. For now it doesn't really matter. + client.v2.files.upload(file).then((json) => { + // todo: This hack ensures images have a chronicles:// prefix + // for saved documents, i insert this in the mdast->slate transform step + // Before using plate, I simply had the Image rendering element handle this logic, + // which I believe is the best place to do it. + insertFile(editor, `chronicles://${json.filename}`); + }, console.error); + } + } else if (isImageUrl(text)) { + insertFile(editor, text); + } else { + insertData(data); + } + }; + + return editor; + }; diff --git a/src/views/edit/editor/index.tsx b/src/views/edit/editor/index.tsx index 9a03fd9..85cfadd 100644 --- a/src/views/edit/editor/index.tsx +++ b/src/views/edit/editor/index.tsx @@ -18,10 +18,14 @@ import { createPlateOptions, // images - createImagePlugin, + // createImagePlugin, // made my own createSelectOnBackspacePlugin, ELEMENT_IMAGE, + // So document always has a trailing paragraph + createTrailingBlockPlugin, + ELEMENT_PARAGRAPH, + // links createLinkPlugin, @@ -39,42 +43,14 @@ import { optionsResetBlockTypePlugin, } from "./pluginOptions"; +import { createImagePlugin } from "./createImagePlugin"; + export interface Props { saving: boolean; value: SNode[]; setValue: (n: SNode[]) => any; } -import { - HeadingToolbar, - ToolbarList, - useStoreEditorRef, - useEventEditorId, - getPlatePluginType, - ELEMENT_UL, - ELEMENT_OL, -} from "@udecode/plate"; -import { ListIcon, NumberedListIcon } from "evergreen-ui"; - -function ToolbarButtonsList({ editor }: { editor: any }) { - const editor2 = useStoreEditorRef(useEventEditorId("focus")); - console.log("editor2", editor2 === editor, editor2); - - return ( - - } - /> - } - /> - toggleList(editor, { type: ELEMENT_UL })} /> - - ); -} - export default observer((props: Props) => { const editableProps = { placeholder: "Type…", @@ -82,7 +58,6 @@ export default observer((props: Props) => { padding: "15px", }, }; - const editor = useStoreEditorRef(useEventEditorId("focus")); const plugins = [ // editor @@ -112,15 +87,13 @@ export default observer((props: Props) => { createExitBreakPlugin(optionsExitBreakPlugin), createResetNodePlugin(optionsResetBlockTypePlugin), createListPlugin(), + + // This works, but my trailing image is wrapped in a p already! + createTrailingBlockPlugin({ type: ELEMENT_PARAGRAPH }), ]; const components = createPlateComponents(); const options = createPlateOptions(); - React.useEffect(() => { - console.log("initialValue: ", props.value); - console.log(editor); - }, []); - return ( <> + } @@ -65,6 +66,6 @@ export default function FormattingToolbar() { } /> - + ); } From 52efaedfdd3786bb7aa2274c73a970f112346e70 Mon Sep 17 00:00:00 2001 From: Christopher Loverich Date: Fri, 15 Oct 2021 07:43:01 -0500 Subject: [PATCH 3/7] image fix. broken test. errors - add fix for images nested in paragraph tags - add a test for the parse step, even though i cannot get it to run :| - add a top-level ErrorBoundary --- package.json | 7 +- src/error.tsx | 62 +++++ src/layout.tsx | 52 ++-- src/markdown/index.test.ts | 170 +++++++++++++ src/markdown/index.ts | 21 +- src/markdown/unnestImages.ts | 35 +++ yarn.lock | 480 +++++++++++++++++++---------------- 7 files changed, 582 insertions(+), 245 deletions(-) create mode 100644 src/error.tsx create mode 100644 src/markdown/index.test.ts create mode 100644 src/markdown/unnestImages.ts diff --git a/package.json b/package.json index f8720b9..105e648 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "start": "yarn dev:webpack & yarn dev:electron", "dev:webpack": "webpack-dev-server --config webpack.js --hot --inline --colors", "dev:electron": "electron src/electron/index.js", - "test": "mocha -r ts-node/register -r esm src/**/*.test.ts", + "test": "mocha -r esm -r ts-node/register src/**/*.test.ts", "test:one": "mocha -r ts-node/register -r esm", "rebuild": "./rebuild-better-sqlite3.sh" }, @@ -57,7 +57,7 @@ "html-webpack-plugin": "^4.3.0", "mobx": "^5.15.4", "mobx-react-lite": "^2.0.7", - "mocha": "^8.0.1", + "mocha": "^9.1.3", "prismjs": "^1.21.0", "react": "^17.0.2", "react-day-picker": "^7.4.10", @@ -74,8 +74,9 @@ "style-loader": "^1.2.1", "styled-components": "^5.3.1", "ts-loader": "^7.0.5", - "ts-node": "^8.10.2", + "ts-node": "^10.3.0", "typescript": "^4.3.5", + "unist-util-map": "^3.0.0", "webpack": "^4.43.0", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0" diff --git a/src/error.tsx b/src/error.tsx new file mode 100644 index 0000000..e6a21bd --- /dev/null +++ b/src/error.tsx @@ -0,0 +1,62 @@ +import React from "react"; +import { Pane, Alert } from "evergreen-ui"; + +interface State { + hasError: boolean; + error: any; +} + +export default class ErrorBoundary extends React.Component { + constructor(props: any) { + super(props); + this.state = { hasError: false, error: null }; + } + + static getDerivedStateFromError(error: any) { + // Update state so the next render will show the fallback UI. + return { hasError: true, error }; + } + + componentDidCatch(error: any, errorInfo: any) { + // You can also log the error to an error reporting service + console.error("top level error boundary reached:", error, errorInfo); + } + + renderError() { + let errStr: string = "Unable to parse error for display. Check console? :|"; + let stack: string = ""; + try { + if (this.state.error instanceof Error) { + errStr = this.state.error.message; + stack = this.state.error.stack || ""; + } else if (typeof this.state.error === "string") { + errStr = this.state.error; + } else { + errStr = JSON.stringify(this.state.error, null, 2); + } + errStr = JSON.stringify(this.state.error, null, 2); + } catch (err) { + console.error( + "Error parsing error to string in top-level Error boundary" + ); + } + + return ( + + +

There was an unhandled error that crashed the app

+
{errStr}
+
{stack}
+
+
+ ); + } + + render() { + if (this.state.hasError) { + return this.renderError(); + } + + return this.props.children; + } +} diff --git a/src/layout.tsx b/src/layout.tsx index 9436628..eccab72 100644 --- a/src/layout.tsx +++ b/src/layout.tsx @@ -1,7 +1,8 @@ import React, { PropsWithChildren } from "react"; import { Pane, Tablist, Tab } from "evergreen-ui"; +import ErrorBoundary from "./error"; -type View = 'journals' | 'documents' | 'preferences'; +type View = "journals" | "documents" | "preferences"; interface Props { selected?: View; @@ -13,33 +14,36 @@ const monoStyle = { }; export default function Layout(props: PropsWithChildren) { - // todo: optimize - const tabs = (['journals', 'documents', 'preferences'] as View[]).map((tab) => { - return ( - props.setSelected(tab)} - isSelected={props.selected === tab} - aria-controls={`panel-${tab}`} - > - {tab} - - ); - }); + const tabs = (["journals", "documents", "preferences"] as View[]).map( + (tab) => { + return ( + props.setSelected(tab)} + isSelected={props.selected === tab} + aria-controls={`panel-${tab}`} + > + {tab} + + ); + } + ); return ( - - - - # - chronicles + + + + + # + chronicles + + + {tabs} + - - {tabs} - + {props.children} - {props.children} - + ); } diff --git a/src/markdown/index.test.ts b/src/markdown/index.test.ts new file mode 100644 index 0000000..13e6274 --- /dev/null +++ b/src/markdown/index.test.ts @@ -0,0 +1,170 @@ +import { describe, it } from "mocha"; +import { expect } from "chai"; +import { stringToSlate } from "./"; + +// NOTE: I Never actually ran this because I can't get mocha to work... +// TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/cloverich/code/pragma/src/markdown/index.test.ts +// ...although I have ts-node/register, esm, etc. Need to research... +// ...this ecosystem is quickly killing me +describe("Markdown to Slate conversion", function () { + it("unnests image tags", function () { + const input = ` +I have a few ideas to record: + +- My first idea +- My second idea +- My third idea is \_nested\_ + + - It seems to work! + + + +Now lets add an image: + +![](ckure3z1b00003u65tfr1m2ki..png) + +This works! _Seriously_, no **complaints**. + +`; + + const slateDOM = [ + { + type: "p", + children: [ + { + text: "I have a few ideas to record:", + }, + ], + }, + { + type: "ul", + children: [ + { + type: "li", + children: [ + { + type: "lic", + children: [ + { + text: "My first idea ", + }, + ], + }, + ], + checked: null, + spread: false, + }, + { + type: "li", + children: [ + { + type: "lic", + children: [ + { + text: "My second idea", + }, + ], + }, + ], + checked: null, + spread: false, + }, + { + type: "li", + children: [ + { + type: "lic", + children: [ + { + text: "My third idea is ", + }, + { + text: "_", + }, + { + text: "nested", + }, + { + text: "_", + }, + ], + }, + { + type: "ul", + children: [ + { + type: "li", + children: [ + { + type: "lic", + children: [ + { + text: "It seems to work!", + }, + ], + }, + ], + checked: null, + spread: false, + }, + ], + ordered: false, + start: null, + spread: false, + }, + ], + checked: null, + spread: true, + }, + ], + ordered: false, + start: null, + spread: false, + }, + { + type: "p", + children: [ + { + text: "Now lets add an image: ", + }, + ], + }, + { + type: "img", + url: "chronicles://ckure3z1b00003u65tfr1m2ki..png", + title: null, + alt: null, + children: [ + { + text: "", + }, + ], + }, + { + type: "p", + children: [ + { + text: "This works! ", + }, + { + italic: true, + text: "Seriously", + }, + { + text: ", no ", + }, + { + bold: true, + text: "complaints", + }, + { + text: ".", + }, + ], + }, + ]; + + const parsed = stringToSlate(input); + expect(parsed).to.deep.equal(slateDOM); + }); +}); diff --git a/src/markdown/index.ts b/src/markdown/index.ts index 7989249..b83e69c 100644 --- a/src/markdown/index.ts +++ b/src/markdown/index.ts @@ -13,6 +13,8 @@ import { Node as SNode } from "slate"; export * from "ts-mdast"; +import { unnestImages } from "./unnestImages"; + // On remark versions > 12 I think they moved to micromark, which lost the // gfm option and instead requires this package import remarkGfm from "remark-gfm"; @@ -74,18 +76,25 @@ const slateToStringProcessor = unified() .use(slateToRemark) .use(remarkStringify); -// Intermediate markdown parser, exported here so I could store the intermediate -// mdast state prior to parsing to Slate DOM for debugging purposes -const stringToMdast = unified().use(remarkParse); -const stringToSlateProcessor = stringToMdast.use(remarkToSlate); +const stringToSlateProcessor = unified() + .use(remarkParse) + .use(unnestImages) + .use(remarkToSlate); export function stringToSlate(text: string) { // remarkToSlate must use a newer version, where file.result exists // file.contents also exists here... maybe the compilers are overlapping since // they modify in place? shrug // https://github.com/unifiedjs/unified/releases/tag/9.0.0 - const output = stringToSlateProcessor.processSync(text); - return (output as any).result; + // const output = stringToSlateProcessor.processSync(text); + const mdast = stringToSlateProcessor.parse(text); + console.log("mdast", JSON.stringify(mdast, null, 2)); + const transformed = stringToSlateProcessor.runSync(mdast); + console.log("transformed", JSON.stringify(transformed, null, 2)); + const output = stringToSlateProcessor.stringify(transformed); + console.log("output", JSON.stringify(output, null, 2)); + // return (output as any).result; + return output as any; } export function slateToString(nodes: SNode[]) { diff --git a/src/markdown/unnestImages.ts b/src/markdown/unnestImages.ts new file mode 100644 index 0000000..3123bfd --- /dev/null +++ b/src/markdown/unnestImages.ts @@ -0,0 +1,35 @@ +import { Plugin, Transformer } from "unified"; +import { Root, Node, Parent } from "."; +// https://github.com/syntax-tree/unist-util-map +import { map } from "unist-util-map"; + +type Settings = {}; + +/** + * After slate->mdast parsing, image elements on their own lie get wrapped in paragraph + * elements. This (unist) plugin can unwrap them prior to the final mdast->slate step. + * + * todo: Does this conceptually duplicate Slate's unwrap helper(s)? + * todo: Could this be better integrated into the existing mdast->slate handler? + */ +export const unnestImages: Plugin<[Settings?]> = (settings?: Settings) => { + const mapNodes: Transformer = (tree: Node) => { + return map(tree, (node: any) => { + if (node.type === "paragraph" && node.children) { + if ( + node.children[0] && + node.children[0].type === "image" && + node.children.length === 1 + ) { + return node.children[0]; + } else { + return node; + } + } else { + return node; + } + }); + }; + + return mapNodes; +}; diff --git a/yarn.lock b/yarn.lock index 326a484..8994b5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -185,6 +185,18 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + "@electron/get@^1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.0.tgz#95c6bcaff4f9a505ea46792424f451efea89228c" @@ -401,6 +413,26 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -1193,6 +1225,11 @@ dependencies: immer "9.0.6" +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -1378,11 +1415,21 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^8.4.1: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -1541,6 +1588,14 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1559,12 +1614,10 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== arr-diff@^4.0.0: version "4.0.0" @@ -1608,16 +1661,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.map@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" - integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.4" - arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -2184,6 +2227,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" @@ -2294,20 +2342,20 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chokidar@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== +chokidar@3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.3.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.2" chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" @@ -2759,6 +2807,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2913,20 +2966,20 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@3.2.6, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@^4.0.0: +debug@4, debug@4.3.2, debug@^4.0.0: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -2939,6 +2992,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -3107,7 +3165,12 @@ detect-port-alt@1.1.6: address "^1.0.1" debug "^2.6.0" -diff@4.0.2, diff@^4.0.1: +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== @@ -3501,7 +3564,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: version "1.17.6" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== @@ -3518,24 +3581,6 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstract@^1.17.5: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-get-iterator@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" - integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== - dependencies: - es-abstract "^1.17.4" - has-symbols "^1.0.1" - is-arguments "^1.0.4" - is-map "^2.0.1" - is-set "^2.0.1" - is-string "^1.0.5" - isarray "^2.0.5" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3565,7 +3610,7 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -3588,11 +3633,6 @@ esm@^3.2.25: resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -3968,12 +4008,12 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^5.0.0" + locate-path "^6.0.0" path-exists "^4.0.0" find-up@^2.0.0, find-up@^2.1.0: @@ -3993,12 +4033,10 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -flat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== - dependencies: - is-buffer "~2.0.3" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flora-colossus@^1.0.0: version "1.0.1" @@ -4151,6 +4189,11 @@ fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4259,12 +4302,31 @@ glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@7.1.6, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -5006,7 +5068,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.0, is-buffer@~2.0.3: +is-buffer@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== @@ -5136,11 +5198,6 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= -is-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" - integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5177,7 +5234,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^2.0.0: +is-plain-obj@^2.0.0, is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== @@ -5211,21 +5268,11 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" - integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== - is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.4, is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -5263,11 +5310,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isbinaryfile@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" @@ -5300,19 +5342,6 @@ isomorphic-fetch@^2.1.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -iterate-iterator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" - integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== - -iterate-value@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" - integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== - dependencies: - es-get-iterator "^1.0.2" - iterate-iterator "^1.0.1" - js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -5328,13 +5357,12 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" @@ -5542,12 +5570,12 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - p-locate "^4.1.0" + p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" @@ -5579,14 +5607,7 @@ lodash@^4.17.21, lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@^4.1.0: +log-symbols@4.1.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -6265,36 +6286,35 @@ mobx@^5.15.4: resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.4.tgz#9da1a84e97ba624622f4e55a0bf3300fb931c2ab" integrity sha512-xRFJxSU2Im3nrGCdjSuOTFmxVDGeqOHL+TyADCGbT0k4HHqGmx5u2yaHNryvoORpI4DfbzjJ5jPmuv+d7sioFw== -mocha@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.0.1.tgz#fe01f0530362df271aa8f99510447bc38b88d8ed" - integrity sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg== +mocha@^9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb" + integrity sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw== dependencies: + "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.3.1" - debug "3.2.6" - diff "4.0.2" - escape-string-regexp "1.0.5" - find-up "4.1.0" - glob "7.1.6" + chokidar "3.5.2" + debug "4.3.2" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.7" growl "1.10.5" he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" + js-yaml "4.1.0" + log-symbols "4.1.0" minimatch "3.0.4" - ms "2.1.2" - object.assign "4.1.0" - promise.allsettled "1.0.2" - serialize-javascript "3.0.0" - strip-json-comments "3.0.1" - supports-color "7.1.0" + ms "2.1.3" + nanoid "3.1.25" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" which "2.0.2" - wide-align "1.1.3" - workerpool "6.0.0" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" + workerpool "6.1.5" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" move-concurrently@^1.0.1: version "1.0.1" @@ -6323,7 +6343,7 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0: +ms@2.1.3, ms@^2.0.0: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -6365,6 +6385,11 @@ nano-css@^5.3.1: stacktrace-js "^2.0.2" stylis "^4.0.6" +nanoid@3.1.25: + version "3.1.25" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" + integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -6620,7 +6645,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0, object.assign@^4.1.0: +object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -6751,13 +6776,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -6772,12 +6804,12 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: - p-limit "^2.2.0" + p-limit "^3.0.2" p-map@^2.0.0: version "2.1.0" @@ -7015,7 +7047,7 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -7219,17 +7251,6 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -promise.allsettled@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" - integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== - dependencies: - array.prototype.map "^1.0.1" - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - iterate-value "^1.0.0" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -7593,13 +7614,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== - dependencies: - picomatch "^2.0.7" - readdirp@~3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" @@ -7607,6 +7621,13 @@ readdirp@~3.4.0: dependencies: picomatch "^2.2.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -8120,10 +8141,12 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -serialize-javascript@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.0.0.tgz#492e489a2d77b7b804ad391a5f5d97870952548e" - integrity sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw== +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" serialize-javascript@^3.1.0: version "3.1.0" @@ -8405,7 +8428,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.17, source-map-support@~0.5.12: +source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -8514,11 +8537,6 @@ sprintf-js@^1.1.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" @@ -8726,10 +8744,10 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" @@ -8786,10 +8804,10 @@ sumchecker@^3.0.1: dependencies: debug "^4.1.0" -supports-color@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -9077,15 +9095,22 @@ ts-mdast@^1.0.0: "@types/mdast" "^3.0.3" "@types/unist" "^2.0.3" -ts-node@^8.10.2: - version "8.10.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" - integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== - dependencies: +ts-node@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.3.0.tgz#a797f2ed3ff50c9a5d814ce400437cb0c1c048b4" + integrity sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw== + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" arg "^4.1.0" + create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.17" yn "3.1.1" tslib@^1.10.0, tslib@^1.9.0: @@ -9273,6 +9298,13 @@ unist-util-is@^5.0.0: resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== +unist-util-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-map/-/unist-util-map-3.0.0.tgz#ec4c3e4f3f65f559b6c232087af2a470f3e5db89" + integrity sha512-kyPbOAlOPZpytdyquF1g6qYpAjkpMpSPtR7TAj4SOQWSJfQ/LN+IFI2oWBvkxzhsPKxiMKZcgpp5ihZLLvNl6g== + dependencies: + "@types/unist" "^2.0.0" + unist-util-position@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" @@ -9779,7 +9811,7 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -wide-align@1.1.3, wide-align@^1.1.0: +wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== @@ -9800,10 +9832,10 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" -workerpool@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" - integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA== +workerpool@6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" + integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== wrap-ansi@^5.1.0: version "5.1.0" @@ -9875,7 +9907,12 @@ yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@13.1.2, yargs-parser@^13.1.2: +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -9896,16 +9933,30 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.3.0, yargs@^13.3.2: +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -9947,6 +9998,11 @@ yn@3.1.1: resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + zustand@3.5.11: version "3.5.11" resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.5.11.tgz#3a8fd24f7a63d02a6532ab230accc2108051d635" From 15bf4197c51cc8730f108c3e25803ee7da187f29 Mon Sep 17 00:00:00 2001 From: Christopher Loverich Date: Fri, 15 Oct 2021 10:20:27 -0500 Subject: [PATCH 4/7] remark deps. cleanup deps - update remark - organize and refactor remark usage post upgrade - clean-out a few other unused dependencies --- package.json | 23 +- src/markdown/index.ts | 101 +--- src/markdown/unnestImages.ts | 35 -- src/preload/importer/importChronicles.ts | 4 +- src/preload/importer/indexer.ts | 8 +- yarn.lock | 606 +++++++++++++++-------- 6 files changed, 431 insertions(+), 346 deletions(-) delete mode 100644 src/markdown/unnestImages.ts diff --git a/package.json b/package.json index 105e648..90cf603 100644 --- a/package.json +++ b/package.json @@ -17,20 +17,11 @@ "better-sqlite3": "^7.4.3", "cuid": "^2.1.8", "electron-store": "^8.0.1", - "get-port": "^5.1.1", "klaw": "^3.0.0", - "ky": "^0.20.0", - "ky-universal": "^0.8.1", "lodash": "^4.17.20", "luxon": "^1.24.1", "mime": "^2.5.2", - "mkdirp": "^1.0.4", - "remark": "^12.0.0", - "remark-gfm": "^2.0.0", - "remark-parse": "^8.0.3", - "remark-stringify": "^8.1.1", - "ts-mdast": "^1.0.0", - "unified": "^9.1.0" + "mkdirp": "^1.0.4" }, "devDependencies": { "@types/better-sqlite3": "^5.4.0", @@ -62,9 +53,14 @@ "react": "^17.0.2", "react-day-picker": "^7.4.10", "react-dom": "^17.0.2", - "rehype-react": "^6.1.0", - "remark-rehype": "^7.0.0", + "rehype-react": "^7.0.3", + "remark": "^14.0.1", + "remark-gfm": "^3.0.0", + "remark-parse": "^8.0.3", + "remark-rehype": "^10.0.0", "remark-slate-transformer": "^0.4.1", + "remark-stringify": "^8.1.1", + "remark-unwrap-images": "^3.0.0", "slate": "^0.66.5", "slate-history": "^0.66.0", "slate-hyperscript": "^0.66.0", @@ -74,9 +70,10 @@ "style-loader": "^1.2.1", "styled-components": "^5.3.1", "ts-loader": "^7.0.5", + "ts-mdast": "^1.0.0", "ts-node": "^10.3.0", "typescript": "^4.3.5", - "unist-util-map": "^3.0.0", + "unified": "^10.1.0", "webpack": "^4.43.0", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0" diff --git a/src/markdown/index.ts b/src/markdown/index.ts index b83e69c..8cc57c6 100644 --- a/src/markdown/index.ts +++ b/src/markdown/index.ts @@ -1,86 +1,33 @@ -import unified from "unified"; -import remarkParse, { RemarkParseOptions } from "remark-parse"; -import remarkStringify, { RemarkStringifyOptions } from "remark-stringify"; -import { Root } from "ts-mdast"; -// https://github.com/inokawa/remark-slate-transformer/ -// import { slateToRemark } from "remark-slate-transformer"; -import { - remarkToSlate, - slateToRemark, - slateToMdast, -} from "./remark-slate-transformer"; +import { unified } from "unified"; +import remarkParse from "remark-parse"; +import remarkGfm from "remark-gfm"; +import remarkStringify from "remark-stringify"; +import remarkUnwrapImages from "remark-unwrap-images"; +import { remarkToSlate, slateToRemark } from "./remark-slate-transformer"; import { Node as SNode } from "slate"; export * from "ts-mdast"; -import { unnestImages } from "./unnestImages"; - -// On remark versions > 12 I think they moved to micromark, which lost the -// gfm option and instead requires this package -import remarkGfm from "remark-gfm"; - -/** - * The types from remark-parse say it accepts no arguments for parse. - * Unfied says it accepts a VFile, of which string is one type. - * - * Here I'm simplifying to say it accepts a string, and returns an MDAST Root. - * - * I do not fully understand the unified ecosystem but these captures the subset I - * am currently interested in. - * - * TODO: Clean this all up. Figure out if I should care about the more sophisticated - * parser behaviors and whether I can fork and group all of this up into a Deno package. - */ -interface Parser { - parse(contents: string): Root; -} - -// Wrap parser creation so I can signify it takes Partial -function makeParser(opts: Partial) { - return unified().use(remarkParse, opts); -} - -function makeStringCompiler(opts: Partial): any { - return ( - unified() - // yeah idk if adding the parser is needed here - // or if adding the options, I think they are defaults - // ¯\_(ツ)_/¯ - .use(remarkParse, { commonmark: true, gfm: true }) - .use(remarkStringify, opts) - ); -} - -export const parser = makeParser({ - commonmark: true, - gfm: true, -}); - -/** - * NOTE: When I consolidated this file, this was only used in legacy contexts. - * Once a new indexing strategy is devised revisit this - * - * I added this so I could stringify Nodes after parsing, for indexing - * specific node text which might otherwise have child nodes. - * - * Its not the best idea, because it may not serialize back with the - * same exact text that came in. So, this is useful for POC but longer term... - * I'll need to do something a little smarter perhaps. - */ -export const stringifier = makeStringCompiler({ - commonmark: true, - gfm: true, -}); +const stringifier = unified().use(remarkStringify); +const parser = unified().use(remarkParse).use(remarkGfm); const slateToStringProcessor = unified() .use(slateToRemark) .use(remarkStringify); -const stringToSlateProcessor = unified() - .use(remarkParse) - .use(unnestImages) +const stringToSlateProcessor = parser + .use(remarkUnwrapImages) .use(remarkToSlate); +export function mdastToString(mdast: any): string { + // todo: types + return stringifier.stringify(mdast) as any; +} + +export function stringToMdast(text: string) { + return parser.parse(text); +} + export function stringToSlate(text: string) { // remarkToSlate must use a newer version, where file.result exists // file.contents also exists here... maybe the compilers are overlapping since @@ -88,16 +35,16 @@ export function stringToSlate(text: string) { // https://github.com/unifiedjs/unified/releases/tag/9.0.0 // const output = stringToSlateProcessor.processSync(text); const mdast = stringToSlateProcessor.parse(text); - console.log("mdast", JSON.stringify(mdast, null, 2)); + // console.log("mdast", JSON.stringify(mdast, null, 2)); const transformed = stringToSlateProcessor.runSync(mdast); - console.log("transformed", JSON.stringify(transformed, null, 2)); + // console.log("transformed", JSON.stringify(transformed, null, 2)); const output = stringToSlateProcessor.stringify(transformed); - console.log("output", JSON.stringify(output, null, 2)); + // console.log("output", JSON.stringify(output, null, 2)); // return (output as any).result; return output as any; } -export function slateToString(nodes: SNode[]) { +export function slateToString(nodes: SNode[]): string { // per documentation https://github.com/inokawa/remark-slate-transformer/ // slate value must be wrapped. Remark's parse expects a string while `run` // operates on ASTs @@ -106,5 +53,5 @@ export function slateToString(nodes: SNode[]) { children: nodes, }); - return slateToStringProcessor.stringify(ast); + return slateToStringProcessor.stringify(ast) as any; } diff --git a/src/markdown/unnestImages.ts b/src/markdown/unnestImages.ts deleted file mode 100644 index 3123bfd..0000000 --- a/src/markdown/unnestImages.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Plugin, Transformer } from "unified"; -import { Root, Node, Parent } from "."; -// https://github.com/syntax-tree/unist-util-map -import { map } from "unist-util-map"; - -type Settings = {}; - -/** - * After slate->mdast parsing, image elements on their own lie get wrapped in paragraph - * elements. This (unist) plugin can unwrap them prior to the final mdast->slate step. - * - * todo: Does this conceptually duplicate Slate's unwrap helper(s)? - * todo: Could this be better integrated into the existing mdast->slate handler? - */ -export const unnestImages: Plugin<[Settings?]> = (settings?: Settings) => { - const mapNodes: Transformer = (tree: Node) => { - return map(tree, (node: any) => { - if (node.type === "paragraph" && node.children) { - if ( - node.children[0] && - node.children[0].type === "image" && - node.children.length === 1 - ) { - return node.children[0]; - } else { - return node; - } - } else { - return node; - } - }); - }; - - return mapNodes; -}; diff --git a/src/preload/importer/importChronicles.ts b/src/preload/importer/importChronicles.ts index 3618ffc..84e63c2 100644 --- a/src/preload/importer/importChronicles.ts +++ b/src/preload/importer/importChronicles.ts @@ -1,5 +1,5 @@ import { Files } from "../files"; -import { parser } from "../../markdown"; +import { stringToMdast } from "../../markdown"; import { shouldIndexDay } from "./indexer"; import fs from "fs"; import path from "path"; @@ -82,7 +82,7 @@ async function loadDocument(filepath: string) { const contents = await Files.read(filepath); return { contents: contents, - mdast: parser.parse(contents), + mdast: stringToMdast(contents), }; } diff --git a/src/preload/importer/indexer.ts b/src/preload/importer/indexer.ts index a91b673..48de119 100644 --- a/src/preload/importer/indexer.ts +++ b/src/preload/importer/indexer.ts @@ -1,5 +1,5 @@ import path from "path"; -import { parser, stringifier, Root } from "../../markdown"; +import { stringToMdast, mdastToString, Root } from "../../markdown"; import { Database } from "better-sqlite3"; import { Files, PathStatsFile } from "../files"; import { DateTime } from "luxon"; @@ -57,7 +57,7 @@ class Indexer { let contents: string; try { - contents = stringifier.stringify(node); + contents = mdastToString(node); } catch (err: any) { throw new IndexParsingError(err); } @@ -93,7 +93,7 @@ class Indexer { * @param contents */ update = async (journal: string, date: string, contents: string) => { - const parsed = parser.parse(contents); + const parsed = stringToMdast(contents); const stmt = this.db.prepare( "DELETE FROM nodes where journal = :journal and date = :date" ); @@ -157,7 +157,7 @@ class Indexer { // todo: track parsing errors so you understand why your content // isn't showing up in your journal view (failed to index). try { - const parsed = parser.parse(contents); + const parsed = stringToMdast(contents); // BUG ALERT: I was passing `entry.path` as second argument, when it wanted the // filename, because it wants an ISODate: 2020-05-01, which is how we name files. diff --git a/yarn.lock b/yarn.lock index 8994b5f..e2d3550 100644 --- a/yarn.lock +++ b/yarn.lock @@ -309,12 +309,12 @@ dependencies: cross-spawn "^7.0.1" -"@mapbox/hast-util-table-cell-style@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.1.3.tgz#5b7166ae01297d72216932b245e4b2f0b642dca6" - integrity sha512-QsEsh5YaDvHoMQ2YHdvZy2iDnU3GgKVBTcHf6cILyoWDZtPSdlG444pL/ioPYO/GpXSfODBb9sefEetfC4v9oA== +"@mapbox/hast-util-table-cell-style@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.0.tgz#1003f59d54fae6f638cb5646f52110fb3da95b4d" + integrity sha512-gqaTIGC8My3LVSnU38IwjHVKJC94HSonjvFHDk8/aSrApL8v4uWgm8zJkK7MJIIbHuNOr/+Mv2KkQKcxs6LEZA== dependencies: - unist-util-visit "^1.3.0" + unist-util-visit "^1.4.1" "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -460,6 +460,13 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.11.tgz#d3614d6c5f500142358e6ed24e1bf16657536c50" integrity sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw== +"@types/debug@^4.0.0": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + "@types/escape-html@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-1.0.1.tgz#b19b4646915f0ae2c306bf984dc0a59c5cfc97ba" @@ -473,6 +480,13 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + "@types/html-minifier-terser@^5.0.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" @@ -534,6 +548,11 @@ dependencies: "@types/unist" "*" +"@types/mdurl@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -551,6 +570,11 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-7.0.2.tgz#b17f16cf933597e10d6d78eae3251e692ce8b0ce" integrity sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node@*": version "14.0.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" @@ -598,6 +622,15 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/react@^17.0.0": + version "17.0.30" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.30.tgz#2f8e6f5ab6415c091cc5e571942ee9064b17609e" + integrity sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/react@^17.0.27": version "17.0.27" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.27.tgz#6498ed9b3ad117e818deb5525fa1946c09f2e0e6" @@ -643,11 +676,16 @@ dependencies: source-map "^0.6.1" -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== +"@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + "@types/webpack-sources@*": version "1.4.0" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.0.tgz#e58f1f05f87d39a5c64cf85705bdbdbb94d4d57e" @@ -1400,13 +1438,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2563,10 +2594,10 @@ colors@^1.3.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +comma-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" + integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== commander@^2.20.0: version "2.20.3" @@ -2938,11 +2969,6 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -data-uri-to-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -3129,6 +3155,11 @@ depd@^1.1.2, depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -3165,7 +3196,7 @@ detect-port-alt@1.1.6: address "^1.0.1" debug "^2.6.0" -diff@5.0.0: +diff@5.0.0, diff@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== @@ -3655,11 +3686,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter3@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -3916,11 +3942,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -fetch-blob@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-2.0.1.tgz#64b583cd2bd21685b17706818b388af08cb40b9b" - integrity sha512-1jFpa68M4EzObtFa7XOKZoN1unsaeJ6hGSbxaWaVO+TkHmVvnyzRu1ktZAFbUvTZ9NC/qMKGKJ79dK4MzuSBiw== - figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -4247,11 +4268,6 @@ get-package-info@^1.0.0: lodash.get "^4.0.0" read-pkg-up "^2.0.0" -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4584,18 +4600,23 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hast-to-hyperscript@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz#768fb557765fe28749169c885056417342d71e83" - integrity sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg== +hast-to-hyperscript@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz#3decd7cb4654bca8883f6fcbd4fb3695628c4296" + integrity sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw== dependencies: - "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - property-information "^5.3.0" - space-separated-tokens "^1.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" style-to-object "^0.3.0" - unist-util-is "^4.0.0" - web-namespaces "^1.0.0" + unist-util-is "^5.0.0" + web-namespaces "^2.0.0" + +hast-util-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz#4fc1086467cc1ef5ba20673cb6b03cec3a970f1c" + integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== he@1.2.0, he@^1.2.0: version "1.2.0" @@ -5494,18 +5515,10 @@ klaw@^3.0.0: dependencies: graceful-fs "^4.1.9" -ky-universal@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.8.1.tgz#68d1bb0e914e3c41a83ed2eef5928fb04c7867d5" - integrity sha512-Rds/kzTaDKrvXYPG7xToOUOVJPVTV09VirJ7XDO7gKgy+NrYJjPaBjHI3IqtZL7R3t0DXEbdM5byT+HtNS49jw== - dependencies: - abort-controller "^3.0.0" - node-fetch "3.0.0-beta.7" - -ky@^0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.20.0.tgz#4cebcd208f2d0d0b5970a63523afecfd79bd9e46" - integrity sha512-JAfwtwj+t7WqRus88PfBj25aAjRQUgMhk7aB2ufjQ6v8faoNwMy02mfSQ0iNXWCbJGcSl2JZ5ckaiywRjbq0Uw== +kleur@^4.0.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" + integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== lines-and-columns@^1.1.6: version "1.1.6" @@ -5768,12 +5781,14 @@ mdast-util-compact@^2.0.0: dependencies: unist-util-visit "^2.0.0" -mdast-util-definitions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz#06af6c49865fc63d6d7d30125569e2f7ae3d0a86" - integrity sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA== +mdast-util-definitions@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz#b6d10ef00a3c4cf191e8d9a5fa58d7f4a366f817" + integrity sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ== dependencies: - unist-util-visit "^2.0.0" + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^3.0.0" mdast-util-find-and-replace@^2.0.0: version "2.1.0" @@ -5795,6 +5810,24 @@ mdast-util-from-markdown@^0.8.0: parse-entities "^2.0.0" unist-util-stringify-position "^2.0.0" +mdast-util-from-markdown@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.4.tgz#b1fefae59cf4a6368779e01b7e830281ee277532" + integrity sha512-BlL42o885QO+6o43ceoc6KBdp/bi9oYyamj0hUbeu730yhP1WDC7m2XYSBfmQkOb0TdoHSAJ3de3SMqse69u+g== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + parse-entities "^3.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + mdast-util-gfm-autolink-literal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz#8736e16d26e39a48d2f3cf41f7e099326b15c833" @@ -5805,6 +5838,16 @@ mdast-util-gfm-autolink-literal@^1.0.0: mdast-util-find-and-replace "^2.0.0" micromark-util-character "^1.0.0" +mdast-util-gfm-footnote@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.0.tgz#355c1e8dc9e17e871d1b3fa5da8824923fc756e0" + integrity sha512-qeg9YoS2YYP6OBmMyUFxKXb6BLwAsbGidIxgwDAXHIMYZQhIwe52L9BSJs+zP29Jp5nSERPkmG3tSwAN23/ZbQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + unist-util-visit "^4.0.0" + mdast-util-gfm-strikethrough@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz#6cc72ef5d9539f4cee76af3f15dd0daa9e3af40f" @@ -5829,29 +5872,32 @@ mdast-util-gfm-task-list-item@^1.0.0: "@types/mdast" "^3.0.3" mdast-util-to-markdown "^1.0.0" -mdast-util-gfm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz#5cbedeabae72be2c3dff1ec958394e2f9553ec43" - integrity sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA== +mdast-util-gfm@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.0.tgz#2545856bc18a66d5cc63fbef0b097a020a8e9e3d" + integrity sha512-wMwejlTN3EQADPFuvxe8lmGsay3+f6gSJKdAHR6KBJzpcxvsjJSILB9K6u6G7eQLC7iOTyVIHYGui9uBc9r1Tg== dependencies: mdast-util-gfm-autolink-literal "^1.0.0" + mdast-util-gfm-footnote "^1.0.0" mdast-util-gfm-strikethrough "^1.0.0" mdast-util-gfm-table "^1.0.0" mdast-util-gfm-task-list-item "^1.0.0" -mdast-util-to-hast@^9.1.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz#953ff12aed57464b11d7e5549a45913e561909fa" - integrity sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ== +mdast-util-to-hast@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.0.0.tgz#d697afa58e56b7e66899c03cd8f789f7d44df44b" + integrity sha512-BCeq0Bz103NJvmhB7gN0TDmKRT7x3auJmEp7NcYX1xpqZsQeA3JNLazLhFx6VQPqw30e2zes/coKPAiEqxxUuQ== dependencies: + "@types/hast" "^2.0.0" "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.3" - mdast-util-definitions "^3.0.0" + "@types/mdurl" "^1.0.0" + mdast-util-definitions "^5.0.0" mdurl "^1.0.0" - unist-builder "^2.0.0" - unist-util-generated "^1.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" + micromark-util-sanitize-uri "^1.0.0" + unist-builder "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" mdast-util-to-markdown@^1.0.0: version "1.2.1" @@ -5871,7 +5917,7 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== -mdast-util-to-string@^3.0.0: +mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== @@ -5927,6 +5973,28 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== +micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.3.tgz#ec4a921e61abff0aebc8d4429d96d73c752225e0" + integrity sha512-0E8aE27v0DYHPk40IxzhCdXnZWQuvZ6rbflrx1u8ZZAUJEB48o0fgLXA5+yMab28yXT+mi1Q4LXdsI4oGS6Vng== + dependencies: + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + parse-entities "^3.0.0" + uvu "^0.5.0" + micromark-extension-gfm-autolink-literal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz#1a49a62bfcb00f9dff87ab39f3b21a108612dc24" @@ -5937,6 +6005,19 @@ micromark-extension-gfm-autolink-literal@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" +micromark-extension-gfm-footnote@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.2.tgz#cd6309f842db8859556b3708302abc7721351b5f" + integrity sha512-C6o+B7w1wDM4JjDJeHCTszFYF1q46imElNY6mfXsBfw4E91M9TvEEEt3sy0FbJmGVzdt1pqFVRYWT9ZZ0FjFuA== + dependencies: + micromark-core-commonmark "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + uvu "^0.5.0" + micromark-extension-gfm-strikethrough@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.1.tgz#9f53ab4f5dc8c0525a889850bae615f074a98a27" @@ -5975,12 +6056,13 @@ micromark-extension-gfm-task-list-item@^1.0.0: micromark-util-symbol "^1.0.0" micromark-util-types "^1.0.0" -micromark-extension-gfm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz#7a1cee0df200e3f2ab14cb63d7a5ea6820a82f1d" - integrity sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog== +micromark-extension-gfm@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.0.tgz#d9d1b82967f43c346a335864060c16b735e3861f" + integrity sha512-yYPlZ48Ss8fRFSmlQP/QXt3/M6tEvawEVFO+jDPnFA3mGeVgzIyaeHgrIV/9AMFAjQhctKA47Bk8xBhcuaL74Q== dependencies: micromark-extension-gfm-autolink-literal "^1.0.0" + micromark-extension-gfm-footnote "^1.0.0" micromark-extension-gfm-strikethrough "^1.0.0" micromark-extension-gfm-table "^1.0.0" micromark-extension-gfm-tagfilter "^1.0.0" @@ -5988,6 +6070,25 @@ micromark-extension-gfm@^1.0.0: micromark-util-combine-extensions "^1.0.0" micromark-util-types "^1.0.0" +micromark-factory-destination@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" + integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" + integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + micromark-factory-space@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" @@ -5996,6 +6097,27 @@ micromark-factory-space@^1.0.0: micromark-util-character "^1.0.0" micromark-util-types "^1.0.0" +micromark-factory-title@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" + integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" + integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + micromark-util-character@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" @@ -6028,11 +6150,40 @@ micromark-util-combine-extensions@^1.0.0: micromark-util-chunked "^1.0.0" micromark-util-types "^1.0.0" +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" + integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.1.tgz#fa779dcef7f2dc2c9e4b759abd85e553674eea4f" + integrity sha512-Wf3H6jLaO3iIlHEvblESXaKAr72nK7JtBbLLICPwuZc3eJkMcp4j8rJ5Xv1VbQWMCWWDvKUbVUbE2MfQNznwTA== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + parse-entities "^3.0.0" + micromark-util-encode@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz#c409ecf751a28aa9564b599db35640fccec4c068" integrity sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg== +micromark-util-html-tag-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz#75737e92fef50af0c6212bd309bc5cb8dbd489ed" + integrity sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g== + +micromark-util-normalize-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" + integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-resolve-all@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" @@ -6049,16 +6200,49 @@ micromark-util-sanitize-uri@^1.0.0: micromark-util-encode "^1.0.0" micromark-util-symbol "^1.0.0" +micromark-util-subtokenize@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" + integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + micromark-util-symbol@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz#91cdbcc9b2a827c0129a177d36241bcd3ccaa34d" integrity sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ== -micromark-util-types@^1.0.0: +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.1.tgz#8bb8a092d93d326bd29fe29602799f2d0d922fd4" integrity sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA== +micromark@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.0.7.tgz#036dfc974ddf8e6e773b197839c5671d92d0928c" + integrity sha512-67ipZ2CzQVsDyH1kqNLh7dLwe5QMPJwjFBGppW7JCLByaSc6ZufV0ywPOxt13MIDAzzmj3wctDL6Ov5w0fOHXw== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + parse-entities "^3.0.0" + uvu "^0.5.0" + micromark@~2.11.0: version "2.11.4" resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" @@ -6328,6 +6512,11 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6454,14 +6643,6 @@ node-api-version@^0.1.4: dependencies: semver "^7.3.5" -node-fetch@3.0.0-beta.7: - version "3.0.0-beta.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.0.0-beta.7.tgz#28e122943aa8a3e4e7447d525fc138c207faa834" - integrity sha512-UTmmxR2RCLiGL0q61p8DgMgw1UXd10+XVB77IHG55flJ/tHqQQXloNTm5dd/mB3RNXP3+CJPf++t0nb3whKNkw== - dependencies: - data-uri-to-buffer "^3.0.1" - fetch-blob "^2.0.0" - node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -7267,12 +7448,10 @@ prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" -property-information@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" - integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== - dependencies: - xtend "^4.0.0" +property-information@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.0.1.tgz#7c668d9f2b9cb63bc3e105d8b8dfee7221a17800" + integrity sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg== proto-list@~1.2.1: version "1.2.4" @@ -7663,50 +7842,41 @@ regexp.prototype.flags@^1.2.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -rehype-react@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/rehype-react/-/rehype-react-6.1.0.tgz#95f8c936eea2159f92adfbf58e5e90be86a97cbf" - integrity sha512-hQ4DSGOJKA1a87Ei4fJtSHzopbfgoHkwjWMCFpLrcVR5+AIyCOtHy4oQcpGF11kTZOU6oKmJ9UKzO/JpI/XZWA== - dependencies: - "@mapbox/hast-util-table-cell-style" "^0.1.3" - hast-to-hyperscript "^9.0.0" +rehype-react@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/rehype-react/-/rehype-react-7.0.3.tgz#9c96051de79a385fd44908597a52eb964e4b891a" + integrity sha512-nrn2fAYAPv/XD3mFe9Z2cfra1UY0a9TutNYdb5dAHsfz4HAzSVxf1LbyGins/1UtvKBzvNS/0FQJknjp/d+iEg== + dependencies: + "@mapbox/hast-util-table-cell-style" "^0.2.0" + "@types/hast" "^2.0.0" + "@types/react" "^17.0.0" + hast-to-hyperscript "^10.0.0" + hast-util-whitespace "^2.0.0" + unified "^10.0.0" relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remark-gfm@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-2.0.0.tgz#4fef4d7b35afa2bd3cd0410d313d32169634051c" - integrity sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ== +remark-gfm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.0.tgz#a2efb06eceb8472610f095ccbff82d17daa1f415" + integrity sha512-CXJw5h1iwUW6czFwi4tveoOSlsEZU44hcdNzUxC5uiNi7r/OQySf46AoEihM8/NwBbW1LcsnyGIsHBnbURFw2g== dependencies: "@types/mdast" "^3.0.0" - mdast-util-gfm "^1.0.0" - micromark-extension-gfm "^1.0.0" + mdast-util-gfm "^2.0.0" + micromark-extension-gfm "^2.0.0" unified "^10.0.0" -remark-parse@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b" - integrity sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ== +remark-parse@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.0.tgz#65e2b2b34d8581d36b97f12a2926bb2126961cb4" + integrity sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ== dependencies: - ccount "^1.0.0" - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^2.0.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^2.0.0" - vfile-location "^3.0.0" - xtend "^4.0.1" + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" remark-parse@^8.0.3: version "8.0.3" @@ -7737,12 +7907,15 @@ remark-parse@^9.0.0: dependencies: mdast-util-from-markdown "^0.8.0" -remark-rehype@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-7.0.0.tgz#8e106e49806c69b2e9523b76d24965119e2da67b" - integrity sha512-uqQ/VbaTdxyu/da6npHAso6hA00cMqhA3a59RziQdOLN2KEIkPykAVy52IcmZEVTuauXO0VtpxkyCey4phtHzQ== +remark-rehype@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.0.0.tgz#e45f07701b766a4e958fb7a843e19836082c4290" + integrity sha512-WgvJFpfRLfnyHGvQaMgLXVfaXIXVA9FFo7tSky0omLLukZvDJdobZ2V/wYGd2xlScPVZNx6/99fb5kLFT2uFWQ== dependencies: - mdast-util-to-hast "^9.1.0" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.0.0" + unified "^10.0.0" remark-slate-transformer@^0.4.1: version "0.4.1" @@ -7757,25 +7930,14 @@ remark-slate@^1.4.0: "@types/escape-html" "^1.0.0" escape-html "^1.0.3" -remark-stringify@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.0.tgz#1e555f4402e445c364fb23d12fc5f5e0337ec8b7" - integrity sha512-FSPZv1ds76oAZjurhhuV5qXSUSoz6QRPuwYK38S41sLHwg4oB7ejnmZshj7qwjgYLf93kdz6BOX9j5aidNE7rA== +remark-stringify@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-10.0.1.tgz#9422dd20803892570a5e3d16801ffe081340ff06" + integrity sha512-380vOu9EHqRTDhI9RlPU2EKY1abUDEmxw9fW7pJ/8Jr1izk0UcdnZB30qiDDRYi6pGn5FnVf9Wd2iUeCWTqM7Q== dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^2.0.0" - mdast-util-compact "^2.0.0" - parse-entities "^2.0.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^3.0.0" - unherit "^1.0.4" - xtend "^4.0.1" + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.0.0" + unified "^10.0.0" remark-stringify@^8.1.1: version "8.1.1" @@ -7797,14 +7959,25 @@ remark-stringify@^8.1.1: unherit "^1.0.4" xtend "^4.0.1" -remark@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-12.0.0.tgz#d1c145c07341c9232f93b2f8539d56da15a2548c" - integrity sha512-oX4lMIS0csgk8AEbzY0h2jdR0ngiCHOpwwpxjmRa5TqAkeknY+tkhjRJGZqnCmvyuWh55/0SW5WY3R3nn3PH9A== +remark-unwrap-images@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-unwrap-images/-/remark-unwrap-images-3.0.0.tgz#23b7d9e1f66e1154a87edb52c3ced0bde6da15ce" + integrity sha512-lB8z7ZIHFHpSm3MAaAIfd0kt9gmXpI0p5pipzYiWmfurWYULVVCrfnqCD9bHPsZttQxbDL+eKN6cp6LPPfCAog== dependencies: - remark-parse "^8.0.0" - remark-stringify "^8.0.0" - unified "^9.0.0" + "@types/mdast" "^3.0.0" + hast-util-whitespace "^2.0.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + +remark@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/remark/-/remark-14.0.1.tgz#a97280d4f2a3010a7d81e6c292a310dcd5554d80" + integrity sha512-7zLG3u8EUjOGuaAS9gUNJPD2j+SqDqAFHv2g6WMpE5CU9rZ6e3IKDM12KHZ3x+YNje+NMAuN55yx8S5msGSx7Q== + dependencies: + "@types/mdast" "^3.0.0" + remark-parse "^10.0.0" + remark-stringify "^10.0.0" + unified "^10.0.0" remove-trailing-separator@^1.0.1: version "1.1.0" @@ -8004,6 +8177,13 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" +sade@^1.7.3: + version "1.7.4" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.4.tgz#ea681e0c65d248d2095c90578c03ca0bb1b54691" + integrity sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -8466,10 +8646,10 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +space-separated-tokens@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" + integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== spdx-correct@^3.0.0: version "3.1.1" @@ -9025,6 +9205,11 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +totalist@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-2.0.0.tgz#db6f1e19c0fa63e71339bbb8fba89653c18c7eec" + integrity sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ== + tr46@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" @@ -9195,7 +9380,7 @@ unherit@^1.0.4: inherits "^2.0.0" xtend "^4.0.0" -unified@^10.0.0: +unified@^10.0.0, unified@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.0.tgz#4e65eb38fc2448b1c5ee573a472340f52b9346fe" integrity sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g== @@ -9208,30 +9393,6 @@ unified@^10.0.0: trough "^2.0.0" vfile "^5.0.0" -unified@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.0.0.tgz#12b099f97ee8b36792dbad13d278ee2f696eed1d" - integrity sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - -unified@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.1.0.tgz#7ba82e5db4740c47a04e688a9ca8335980547410" - integrity sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - unified@^9.2.0: version "9.2.2" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" @@ -9273,15 +9434,17 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unist-builder@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" - integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== +unist-builder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" + integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== + dependencies: + "@types/unist" "^2.0.0" -unist-util-generated@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42" - integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw== +unist-util-generated@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" + integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== unist-util-is@^3.0.0: version "3.0.0" @@ -9298,17 +9461,10 @@ unist-util-is@^5.0.0: resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== -unist-util-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-map/-/unist-util-map-3.0.0.tgz#ec4c3e4f3f65f559b6c232087af2a470f3e5db89" - integrity sha512-kyPbOAlOPZpytdyquF1g6qYpAjkpMpSPtR7TAj4SOQWSJfQ/LN+IFI2oWBvkxzhsPKxiMKZcgpp5ihZLLvNl6g== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== +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== unist-util-remove-position@^2.0.0: version "2.0.1" @@ -9362,7 +9518,7 @@ unist-util-visit-parents@^5.0.0: "@types/unist" "^2.0.0" unist-util-is "^5.0.0" -unist-util-visit@^1.3.0: +unist-util-visit@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== @@ -9378,6 +9534,15 @@ unist-util-visit@^2.0.0: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" +unist-util-visit@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-3.1.0.tgz#9420d285e1aee938c7d9acbafc8e160186dbaf7b" + integrity sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^4.0.0" + unist-util-visit@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.0.0.tgz#6e1f7e8e163921d20281354c38bfd3244b64580a" @@ -9526,6 +9691,17 @@ uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uvu@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.2.tgz#c145e7f4b5becf80099cf22fd8a4a05f0112b2c0" + integrity sha512-m2hLe7I2eROhh+tm3WE5cTo/Cv3WQA7Oc9f7JB6uWv+/zVKvfAm53bMyOoGOSZeQ7Ov2Fu9pLhFr7p07bnT20w== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + totalist "^2.0.0" + v8-compile-cache@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -9630,10 +9806,10 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -web-namespaces@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" - integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== +web-namespaces@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.0.tgz#1f6a2d7b5823329abaedeb6bdf09ef2fed35db13" + integrity sha512-dE7ELZRVWh0ceQsRgkjLgsAvwTuv3kcjSY/hLjqL0llleUlQBDjE9JkB9FCBY5F2mnFEwiyJoowl8+NVGHe8dw== webidl-conversions@^5.0.0: version "5.0.0" From 1d04052c68df9179c852a8d98ceb4b039022e2a6 Mon Sep 17 00:00:00 2001 From: Christopher Loverich Date: Fri, 15 Oct 2021 10:59:01 -0500 Subject: [PATCH 5/7] cleanup old editor --- .gitignore | 4 - package.json | 4 +- src/electron/index.js | 1 - src/hooks/loadutils.ts | 4 +- src/preload/importer/importChronicles.ts | 1 - src/views/edit/editor/blocks/markdown.tsx | 165 ------------------ src/views/edit/editor/blocks/menu.tsx | 117 ------------- src/views/edit/editor/editor.tsx | 73 -------- src/views/edit/editor/index.tsx | 9 +- .../editor/{ => plugins}/createImagePlugin.ts | 4 +- .../editor/{blocks => plugins}/images.tsx | 24 +-- .../edit/editor/{blocks => plugins}/links.tsx | 0 .../editor/{ => plugins}/pluginOptions.ts | 0 .../editor/{ => plugins}/withHelpers.test.tsx | 0 .../edit/editor/{ => plugins}/withHelpers.tsx | 99 ++++++----- src/views/edit/loading.tsx | 85 +++++---- src/views/edit/util.ts | 14 +- yarn.lock | 86 ++++----- 18 files changed, 168 insertions(+), 522 deletions(-) delete mode 100644 src/views/edit/editor/blocks/markdown.tsx delete mode 100644 src/views/edit/editor/blocks/menu.tsx delete mode 100644 src/views/edit/editor/editor.tsx rename src/views/edit/editor/{ => plugins}/createImagePlugin.ts (95%) rename src/views/edit/editor/{blocks => plugins}/images.tsx (84%) rename src/views/edit/editor/{blocks => plugins}/links.tsx (100%) rename src/views/edit/editor/{ => plugins}/pluginOptions.ts (100%) rename src/views/edit/editor/{ => plugins}/withHelpers.test.tsx (100%) rename src/views/edit/editor/{ => plugins}/withHelpers.tsx (65%) diff --git a/.gitignore b/.gitignore index 3f707c6..8bbead3 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,3 @@ tmp/ # build output dist/ packaged/ - -# Generated prisma client -# Configured in schema.prisma -prisma/ \ No newline at end of file diff --git a/package.json b/package.json index 90cf603..da74649 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,8 @@ "cuid": "^2.1.8", "electron-store": "^8.0.1", "klaw": "^3.0.0", + "ky": "^0.28.6", + "ky-universal": "^0.9.1", "lodash": "^4.17.20", "luxon": "^1.24.1", "mime": "^2.5.2", @@ -30,7 +32,6 @@ "@types/luxon": "^1.24.3", "@types/mkdirp": "^1.0.1", "@types/mocha": "^7.0.2", - "@types/prismjs": "^1.16.1", "@types/react": "^17.0.27", "@types/react-dom": "^17.0.9", "@types/rehype-react": "^4.0.0", @@ -49,7 +50,6 @@ "mobx": "^5.15.4", "mobx-react-lite": "^2.0.7", "mocha": "^9.1.3", - "prismjs": "^1.21.0", "react": "^17.0.2", "react-day-picker": "^7.4.10", "react-dom": "^17.0.2", diff --git a/src/electron/index.js b/src/electron/index.js index 7a255bb..8dae170 100644 --- a/src/electron/index.js +++ b/src/electron/index.js @@ -33,7 +33,6 @@ let dbfile = settings.get(DATABASE_URL); function setDatabaseUrl(url) { if (!url) throw new Error('setDatabaseUrl called with null or empty string'); - // todo: validate it can be loaded (or created) by Prisma client settings.set(DATABASE_URL, url); } diff --git a/src/hooks/loadutils.ts b/src/hooks/loadutils.ts index 4ab13b0..b8d8e6e 100644 --- a/src/hooks/loadutils.ts +++ b/src/hooks/loadutils.ts @@ -5,7 +5,7 @@ import { useState, useCallback } from "react"; import { toaster } from "evergreen-ui"; // For errror handling. Also doesn't really need to be here -import ky from "ky-universal"; +import ky, { HTTPError } from "ky-universal"; // https://stackoverflow.com/questions/53215285/how-can-i-force-component-to-re-render-with-hooks-in-react function useForceUpdate() { @@ -106,7 +106,7 @@ export function withLoading( // Extract the API error message, if any. // todo: A convention for error structure (like title/details) // would probably support moving this logic into the client library - if (err instanceof ky.HTTPError) { + if (err instanceof HTTPError) { try { // Basically if the error comes from my backend, pull out the // error title then propagate. Client library should handle this. diff --git a/src/preload/importer/importChronicles.ts b/src/preload/importer/importChronicles.ts index 84e63c2..4d520d2 100644 --- a/src/preload/importer/importChronicles.ts +++ b/src/preload/importer/importChronicles.ts @@ -8,7 +8,6 @@ import { DateTime } from "luxon"; import { configure } from "../client"; const client = configure("/who/cares.com"); -// Hmmm... maybe this is built in to Prisma client somehow async function findOrCreate(name: string) { const journals = await client.journals.list(); // if (journals.includes) diff --git a/src/views/edit/editor/blocks/markdown.tsx b/src/views/edit/editor/blocks/markdown.tsx deleted file mode 100644 index c5cb934..0000000 --- a/src/views/edit/editor/blocks/markdown.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import Prism from "prismjs"; -import React, { useCallback } from "react"; -import { Text } from "slate"; -import { css } from "emotion"; - -Prism.languages.markdown = Prism.languages.extend("markup", {}); -(Prism.languages as any).insertBefore("markdown", "prolog", { - blockquote: { pattern: /^>(?:[\t ]*>)*/m, alias: "punctuation" }, - code: [ - { pattern: /^(?: {4}|\t).+/m, alias: "keyword" }, - { pattern: /``.+?``|`[^`\n]+`/, alias: "keyword" }, - ], - title: [ - { - pattern: /\w+.*(?:\r?\n|\r)(?:==+|--+)/, - alias: "important", - inside: { punctuation: /==+$|--+$/ }, - }, - { - pattern: /(^\s*)#+.+/m, - lookbehind: !0, - alias: "important", - inside: { punctuation: /^#+|#+$/ }, - }, - ], - hr: { - pattern: /(^\s*)([*-])([\t ]*\2){2,}(?=\s*$)/m, - lookbehind: !0, - alias: "punctuation", - }, - list: { - pattern: /(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m, - lookbehind: !0, - alias: "punctuation", - }, - "url-reference": { - pattern: - /!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/, - inside: { - variable: { pattern: /^(!?\[)[^\]]+/, lookbehind: !0 }, - string: /(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/, - punctuation: /^[\[\]!:]|[<>]/, - }, - alias: "url", - }, - bold: { - pattern: /(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/, - lookbehind: !0, - inside: { punctuation: /^\*\*|^__|\*\*$|__$/ }, - }, - italic: { - pattern: /(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/, - lookbehind: !0, - inside: { punctuation: /^[*_]|[*_]$/ }, - }, - url: { - pattern: - /!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/, - inside: { - variable: { pattern: /(!?\[)[^\]]+(?=\]$)/, lookbehind: !0 }, - string: { pattern: /"(?:\\.|[^"\\])*"(?=\)$)/ }, - }, - }, -}); -(Prism.languages.markdown.bold as any).inside.url = Prism.util.clone( - Prism.languages.markdown.url, -); -(Prism.languages.markdown.italic as any).inside.url = Prism.util.clone( - Prism.languages.markdown.url, -); -(Prism.languages.markdown.bold as any).inside.italic = Prism.util.clone( - Prism.languages.markdown.italic, -); -(Prism.languages.markdown.italic as any).inside.bold = Prism.util.clone( - Prism.languages.markdown.bold, -); - - -export const useDecorateMarkdown = () => { - return useCallback(([node, path]) => { - const ranges: any = []; - - if (!Text.isText(node)) { - return ranges; - } - - const getLength = (token: any) => { - if (typeof token === "string") { - return token.length; - } else if (typeof token.content === "string") { - return token.content.length; - } else { - return token.content.reduce((l: any, t: any) => l + getLength(t), 0); - } - }; - - const tokens = Prism.tokenize(node.text, Prism.languages.markdown); - let start = 0; - - for (const token of tokens) { - const length = getLength(token); - const end = start + length; - - if (typeof token !== "string") { - ranges.push({ - [token.type]: true, - anchor: { path, offset: start }, - focus: { path, offset: end }, - }); - } - - start = end; - } - - return ranges; - }, []); -} - -export const MarkdownLeaf = ({ attributes, children, leaf }: any) => { - return ( - - {children} - - ); -}; \ No newline at end of file diff --git a/src/views/edit/editor/blocks/menu.tsx b/src/views/edit/editor/blocks/menu.tsx deleted file mode 100644 index a6cb876..0000000 --- a/src/views/edit/editor/blocks/menu.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import React, { PropsWithChildren, Ref } from 'react'; -import ReactDOM from 'react-dom'; -import { cx, css } from 'emotion'; -import { useRef, useEffect } from 'react'; -import { useSlate, ReactEditor } from 'slate-react'; -import { Editor, Range } from 'slate'; - -/** - * Contents started from: - * https://github.com/ianstormtaylor/slate/blob/main/site/components.tsx - * - * Partially used while developing another feature before rolling my own. - * Will revisit using these for the proper hovering toolbar. - */ - -interface BaseProps { - className: string - [key: string]: unknown -} - -type OrNull = T | null -type OrUndef = T | undefined; - -export const Menu = React.forwardRef( - ( - { className, ...props }: PropsWithChildren, - ref: Ref - ) => ( -
* { - display: inline-block; - } - & > * + * { - margin-left: 15px; - } - ` - )} - /> - ) -) - -export const Portal = ({ children }: PropsWithChildren) => { - return typeof document === 'object' - ? ReactDOM.createPortal(children, document.body) - : null -} - - - -export const HoveringToolbar = () => { - const ref = useRef() - const editor = useSlate() as ReactEditor; - - - - useEffect(() => { - const toolbar = ref.current - const { selection } = editor - - if (!toolbar) { - return - } - - if ( - !selection || - !ReactEditor.isFocused(editor as ReactEditor) || - Range.isCollapsed(selection) || - Editor.string(editor, selection) === '' - ) { - toolbar.removeAttribute('style') - return - } - - // todo: review whether doing this through Slate (like i do for links) is preferable - const domSelection = window.getSelection() - - // todo: handle null ref - const domRange = domSelection!.getRangeAt(0) - const rect = domRange.getBoundingClientRect() - toolbar.style.opacity = '1' - toolbar.style.top = `${rect.top + window.pageYOffset - toolbar.offsetHeight}px` - toolbar.style.left = `${rect.left + - window.pageXOffset - - toolbar.offsetWidth / 2 + - rect.width / 2}px` - }) - - return ( - - - {/* - - */} - - - ) -} \ No newline at end of file diff --git a/src/views/edit/editor/editor.tsx b/src/views/edit/editor/editor.tsx deleted file mode 100644 index 1734497..0000000 --- a/src/views/edit/editor/editor.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React, { useCallback, useMemo } from "react"; -import { Slate, Editable, withReact, ReactEditor, RenderElementProps } from "slate-react"; -import { createEditor, Node } from "slate"; -import { withHistory } from "slate-history"; -import { css } from "emotion"; -import { withHelpers } from './withHelpers'; -import { isImageElement, isLinkElement, isVideoElement } from '../util'; -import { EditLinkMenus } from './blocks/links'; -import { useDecorateMarkdown, MarkdownLeaf } from './blocks/markdown'; -import { Image, Video } from './blocks/images'; - -export interface Props { - saving: boolean; - value: Node[]; - setValue: (n: Node[]) => any; -} - - -const renderElement = (props: RenderElementProps) => { - const { attributes, children, element } = props - - // NOTE: This is being called constantly as text is selected, eww - // todo: I could use !isTypedElement, return early, then use a switch with - // type discrimination here to avoid the need for these type checking - if (isImageElement(element)) { - return - } else if (isVideoElement(element)) { - return