diff --git a/package.json b/package.json
index 79a4fdd70..2e34332fb 100644
--- a/package.json
+++ b/package.json
@@ -88,6 +88,7 @@
"react-use": "^17.4.0",
"react-virtualized-auto-sizer": "^1.0.20",
"remark-gfm": "^4.0.0",
+ "remark-wiki-link": "^2.0.1",
"three": "^0.160.0",
"three-spritetext": "^1.8.1",
"three-stdlib": "^2.29.4",
diff --git a/src/views/wiki/components/markdown.tsx b/src/views/wiki/components/markdown.tsx
index 3a3e1838d..b152cc019 100644
--- a/src/views/wiki/components/markdown.tsx
+++ b/src/views/wiki/components/markdown.tsx
@@ -1,6 +1,5 @@
import {
Code,
- CodeProps,
Heading,
HeadingProps,
Image,
@@ -8,6 +7,15 @@ import {
LinkProps,
ListItem,
OrderedList,
+ Popover,
+ PopoverArrow,
+ PopoverBody,
+ PopoverCloseButton,
+ PopoverContent,
+ PopoverHeader,
+ PopoverTrigger,
+ Portal,
+ Spinner,
Table,
TableContainer,
TableProps,
@@ -20,12 +28,23 @@ import {
Thead,
Tr,
UnorderedList,
+ useDisclosure,
} from "@chakra-ui/react";
import styled from "@emotion/styled";
import { NostrEvent } from "nostr-tools";
-import { forwardRef } from "react";
-import Markdown, { Components } from "react-markdown";
+import { forwardRef, useCallback, useMemo, useState } from "react";
+import Markdown, { Components, ExtraProps } from "react-markdown";
import remarkGfm from "remark-gfm";
+import wikiLinkPlugin from "remark-wiki-link";
+import { Link as RouterLink } from "react-router-dom";
+import { useReadRelays } from "../../../hooks/use-client-relays";
+import { subscribeMany } from "../../../helpers/relay";
+import { WIKI_PAGE_KIND, getPageSummary } from "../../../helpers/nostr/wiki";
+import replaceableEventsService from "../../../services/replaceable-events";
+import { getEventUID } from "nostr-idb";
+import UserName from "../../../components/user/user-name";
+import { getWebOfTrust } from "../../../services/web-of-trust";
+import { getSharableEventAddress } from "../../../helpers/nip19";
const StyledMarkdown = styled(Markdown)`
pre > code {
@@ -35,63 +54,151 @@ const StyledMarkdown = styled(Markdown)`
}
`;
-function H1({ children, ...props }: HeadingProps) {
+function H1({ children, node, ...props }: HeadingProps & ExtraProps) {
return (
{children}
);
}
-function H2({ children, ...props }: HeadingProps) {
+function H2({ children, node, ...props }: HeadingProps & ExtraProps) {
return (
{children}
);
}
-function H3({ children, ...props }: HeadingProps) {
+function H3({ children, node, ...props }: HeadingProps & ExtraProps) {
return (
{children}
);
}
-function H4({ children, ...props }: HeadingProps) {
+function H4({ children, node, ...props }: HeadingProps & ExtraProps) {
return (
{children}
);
}
-function H5({ children, ...props }: HeadingProps) {
+function H5({ children, node, ...props }: HeadingProps & ExtraProps) {
return (
{children}
);
}
-function H6({ children, ...props }: HeadingProps) {
+function H6({ children, node, ...props }: HeadingProps & ExtraProps) {
return (
{children}
);
}
-function A({ children, ...props }: LinkProps) {
+
+const MAX_VERSIONS = 4;
+function WikiLink({ children, node, href, ...props }: LinkProps & ExtraProps) {
+ const { isOpen, onClose, onOpen } = useDisclosure();
+ const readRelays = useReadRelays();
+
+ const properties = node!.properties as { className: string; href: string };
+ const topic = properties.href.replace(/^#\/page\//, "");
+
+ const [events, setEvents] = useState();
+
+ const load = useCallback(() => {
+ const arr: NostrEvent[] = [];
+
+ const sub = subscribeMany(Array.from(readRelays), [{ kinds: [WIKI_PAGE_KIND], "#d": [topic] }], {
+ onevent: (event) => {
+ replaceableEventsService.handleEvent(event);
+ if (event.content) arr.push(event);
+ },
+ oneose: () => {
+ setEvents(arr);
+ sub.close();
+ },
+ });
+ }, [topic, setEvents, readRelays]);
+
+ const open = useCallback(() => {
+ if (!events) load();
+ onOpen();
+ }, [onOpen, events]);
+
+ const sorted = useMemo(() => {
+ if (!events) return [];
+ const arr = getWebOfTrust().sortByDistanceAndConnections(events, (e) => e.pubkey);
+ const seen = new Set();
+ const unique: NostrEvent[] = [];
+
+ for (const event of arr) {
+ const summary = getPageSummary(event);
+ if (!seen.has(summary)) {
+ seen.add(summary);
+ unique.push(event);
+ if (unique.length >= MAX_VERSIONS) break;
+ }
+ }
+
+ return unique;
+ }, [events]);
+
+ // if there is only one result, redirect to it
+ const to = events?.length === 1 ? "/wiki/page/" + getSharableEventAddress(events[0]) : "/wiki/topic/" + topic;
+
return (
-
+
+
+
+ {children}
+
+
+
+
+
+
+ {children}
+
+ {events === undefined && }
+ {sorted.map((page) => (
+
+ : {getPageSummary(page)}
+
+ ))}
+ {events?.length === 0 && There is no entry for this topic}
+
+
+
+
+ );
+}
+function A({ children, node, href, ...props }: LinkProps & ExtraProps) {
+ const properties: { className?: string; href?: string } | undefined = node?.properties;
+
+ if (properties?.className?.includes("internal") && properties.href) {
+ return (
+
+ {children}
+
+ );
+ }
+
+ return (
+
{children}
);
}
-function P({ children, ...props }: TextProps) {
+function P({ children, node, ...props }: TextProps & ExtraProps) {
return (
{children}
);
}
-function TableWithContainer({ children, ...props }: TableProps) {
+function TableWithContainer({ children, node, ...props }: TableProps & ExtraProps) {
return (
@@ -127,7 +234,7 @@ const components: Partial = {
export const CharkaMarkdown = forwardRef(({ children }, ref) => {
return (
-
+
{children}
diff --git a/src/views/wiki/components/wiki-page-result.tsx b/src/views/wiki/components/wiki-page-result.tsx
index c36fef993..4f1878b41 100644
--- a/src/views/wiki/components/wiki-page-result.tsx
+++ b/src/views/wiki/components/wiki-page-result.tsx
@@ -11,6 +11,7 @@ import Timestamp from "../../../components/timestamp";
import FileSearch01 from "../../../components/icons/file-search-01";
import GitBranch01 from "../../../components/icons/git-branch-01";
import UserName from "../../../components/user/user-name";
+import UserAvatar from "../../../components/user/user-avatar";
export default function WikiPageResult({ page, compare }: { page: NostrEvent; compare?: NostrEvent }) {
const topic = getPageTopic(page);
@@ -20,41 +21,42 @@ export default function WikiPageResult({ page, compare }: { page: NostrEvent; co
return (
-
-
- {getPageTitle(page)}
-
-
-
- by -
-
-
- {getPageSummary(page)}
-
+
+
+
+ {getPageTitle(page)}
+
+
+
+ {getPageSummary(page)}
-
- {address && (
- }
- >
-
-
- )}
- {compare && (
- }
- ml="auto"
- >
- Compare
-
- )}
-
+
+
+
+
+ {address && (
+ }
+ >
+
+
+ )}
+ {compare && (
+ }
+ ml="auto"
+ >
+ Compare
+
+ )}
+
+
);
}
diff --git a/src/views/wiki/create.tsx b/src/views/wiki/create.tsx
index 7c07ec100..89efb31dc 100644
--- a/src/views/wiki/create.tsx
+++ b/src/views/wiki/create.tsx
@@ -1,12 +1,13 @@
import { useMemo, useRef, useState } from "react";
import { Button, Flex, FormControl, FormLabel, Heading, Input, VisuallyHidden, useToast } from "@chakra-ui/react";
import SimpleMDE, { SimpleMDEReactProps } from "react-simplemde-editor";
-import { useNavigate } from "react-router-dom";
+import { useNavigate, useSearchParams } from "react-router-dom";
import ReactDOMServer from "react-dom/server";
import { useForm } from "react-hook-form";
import { EventTemplate } from "nostr-tools";
import dayjs from "dayjs";
+import EasyMDE from "easymde";
import "easymde/dist/easymde.min.css";
import VerticalPageLayout from "../../components/vertical-page-layout";
@@ -16,8 +17,7 @@ import { WIKI_PAGE_KIND } from "../../helpers/nostr/wiki";
import { getSharableEventAddress } from "../../helpers/nip19";
import { WIKI_RELAYS } from "../../const";
import useAppSettings from "../../hooks/use-app-settings";
-import EasyMDE from "easymde";
-import { getServersFromEvent, uploadFileToServers } from "../../helpers/media-upload/blossom";
+import { uploadFileToServers } from "../../helpers/media-upload/blossom";
import useUsersMediaServers from "../../hooks/use-user-media-servers";
import { useSigningContext } from "../../providers/global/signing-provider";
import useCurrentAccount from "../../hooks/use-current-account";
@@ -27,18 +27,27 @@ import useCacheForm from "../../hooks/use-cache-form";
export default function CreateWikiPageView() {
const account = useCurrentAccount();
const { mediaUploadService } = useAppSettings();
- const servers = useUsersMediaServers(account?.pubkey);
+ const { servers } = useUsersMediaServers(account?.pubkey);
const toast = useToast();
const { requestSignature } = useSigningContext();
const publish = usePublishEvent();
const navigate = useNavigate();
+ const [search] = useSearchParams();
+ const presetTopic = search.get("topic");
+ const presetTitle = search.get("title");
+
const { register, setValue, getValues, handleSubmit, watch, formState, reset } = useForm({
- defaultValues: { content: "", title: "", topic: "" },
+ defaultValues: { content: "", title: presetTitle || presetTopic || "", topic: presetTopic || "" },
mode: "all",
});
- // @ts-expect-error
- useCacheForm("wiki-page", getValues, setValue, formState);
+ const clearFormCache = useCacheForm(
+ presetTopic ? "wiki-" + presetTopic : "wiki-create-page",
+ // @ts-expect-error
+ getValues,
+ setValue,
+ formState,
+ );
watch("content");
register("content", {
@@ -59,6 +68,7 @@ export default function CreateWikiPageView() {
};
const pub = await publish("Publish Page", draft, WIKI_RELAYS, false);
+ clearFormCache();
navigate(`/wiki/page/${getSharableEventAddress(pub.event)}`);
} catch (error) {
if (error instanceof Error) toast({ description: error.message, status: "error" });
@@ -72,7 +82,7 @@ export default function CreateWikiPageView() {
async function imageUploadFunction(file: File, onSuccess: (url: string) => void, onError: (error: string) => void) {
if (!servers) return onError("No media servers set");
try {
- const blob = await uploadFileToServers(getServersFromEvent(servers), file, requestSignature);
+ const blob = await uploadFileToServers(servers, file, requestSignature);
if (blob) onSuccess(blob.url);
} catch (error) {
if (error instanceof Error) onError(error.message);
diff --git a/src/views/wiki/index.tsx b/src/views/wiki/index.tsx
index fdf186ace..0ff27056b 100644
--- a/src/views/wiki/index.tsx
+++ b/src/views/wiki/index.tsx
@@ -1,4 +1,4 @@
-import { Box, Button, Flex, Heading, SimpleGrid } from "@chakra-ui/react";
+import { Button, Flex, Heading, SimpleGrid } from "@chakra-ui/react";
import { Link } from "@chakra-ui/react";
import { Link as RouterLink } from "react-router-dom";
import { NostrEvent } from "nostr-tools";
@@ -9,7 +9,6 @@ import { WIKI_PAGE_KIND, validatePage } from "../../helpers/nostr/wiki";
import useTimelineLoader from "../../hooks/use-timeline-loader";
import { useReadRelays } from "../../hooks/use-client-relays";
import useSubject from "../../hooks/use-subject";
-import { getWebOfTrust } from "../../services/web-of-trust";
import WikiPageResult from "./components/wiki-page-result";
import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status";
import { ErrorBoundary } from "../../components/error-boundary";
@@ -26,7 +25,6 @@ export default function WikiHomeView() {
const timeline = useTimelineLoader(`wiki-recent-pages`, relays, [{ kinds: [WIKI_PAGE_KIND] }], { eventFilter });
const pages = useSubject(timeline.timeline).filter((p) => p.content.length > 0);
- const sorted = getWebOfTrust().sortByDistanceAndConnections(pages, (p) => p.pubkey);
return (
@@ -49,7 +47,7 @@ export default function WikiHomeView() {
Recent Updates:
- {sorted.map((page) => (
+ {pages.slice(0, 32).map((page) => (
diff --git a/src/views/wiki/topic.tsx b/src/views/wiki/topic.tsx
index 726f15c40..088a39360 100644
--- a/src/views/wiki/topic.tsx
+++ b/src/views/wiki/topic.tsx
@@ -1,5 +1,5 @@
-import { Heading } from "@chakra-ui/react";
-import { Navigate, useParams } from "react-router-dom";
+import { Heading, Link } from "@chakra-ui/react";
+import { Navigate, useParams, Link as RouterLink } from "react-router-dom";
import VerticalPageLayout from "../../components/vertical-page-layout";
import useSubject from "../../hooks/use-subject";
@@ -23,6 +23,15 @@ export default function WikiTopicView() {
{sorted.map((page) => (
))}
+
+ {sorted.length === 0 && (
+
+ Looks like there are no pages,{" "}
+
+ Create one?
+
+
+ )}
);
}
diff --git a/yarn.lock b/yarn.lock
index 95d367952..eddb60959 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -942,6 +942,13 @@
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/runtime@^7.12.1", "@babel/runtime@^7.4.4":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd"
+ integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/template@^7.22.15", "@babel/template@^7.23.9":
version "7.23.9"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
@@ -3577,16 +3584,31 @@ character-entities-html4@^2.0.0:
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
+character-entities-legacy@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
+ integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
+
character-entities-legacy@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
+character-entities@^1.0.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
+ integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
+
character-entities@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22"
integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==
+character-reference-invalid@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
+ integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
+
character-reference-invalid@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
@@ -4989,11 +5011,24 @@ invariant@^2.2.4:
dependencies:
loose-envify "^1.0.0"
+is-alphabetical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
+ integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
+
is-alphabetical@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b"
integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==
+is-alphanumerical@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
+ integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
is-alphanumerical@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875"
@@ -5049,6 +5084,11 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
+is-decimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
+ integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
+
is-decimal@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
@@ -5071,6 +5111,11 @@ is-glob@^4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-hexadecimal@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
+ integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+
is-hexadecimal@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
@@ -5414,6 +5459,11 @@ lodash@^4.17.20, lodash@^4.17.21:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+longest-streak@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
+ integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
+
longest-streak@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
@@ -5642,6 +5692,18 @@ mdast-util-to-hast@^13.0.0:
unist-util-visit "^5.0.0"
vfile "^6.0.0"
+mdast-util-to-markdown@^0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe"
+ integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ longest-streak "^2.0.0"
+ mdast-util-to-string "^2.0.0"
+ parse-entities "^2.0.0"
+ repeat-string "^1.0.0"
+ zwitch "^1.0.0"
+
mdast-util-to-markdown@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4"
@@ -5656,6 +5718,11 @@ mdast-util-to-markdown@^2.0.0:
unist-util-visit "^5.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@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814"
@@ -5663,6 +5730,14 @@ mdast-util-to-string@^4.0.0:
dependencies:
"@types/mdast" "^4.0.0"
+mdast-util-wiki-link@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-wiki-link/-/mdast-util-wiki-link-0.1.2.tgz#df664e4a22ef533666f5012cf0b34ba187b9f1c0"
+ integrity sha512-DTcDyOxKDo3pB3fc0zQlD8myfQjYkW4hazUKI9PUyhtoj9JBeHC2eIdlVXmaT22bZkFAVU2d47B6y2jVKGoUQg==
+ dependencies:
+ "@babel/runtime" "^7.12.1"
+ mdast-util-to-markdown "^0.6.5"
+
mdn-data@2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
@@ -5806,6 +5881,13 @@ micromark-extension-gfm@^3.0.0:
micromark-util-combine-extensions "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-extension-wiki-link@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/micromark-extension-wiki-link/-/micromark-extension-wiki-link-0.0.4.tgz#f4750a0f24051bf0521bbafaf64f291f9266d2a4"
+ integrity sha512-dJc8AfnoU8BHkN+7fWZvIS20SMsMS1ZlxQUn6We67MqeKbOiEDZV5eEvCpwqGBijbJbxX3Kxz879L4K9HIiOvw==
+ dependencies:
+ "@babel/runtime" "^7.12.1"
+
micromark-factory-destination@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07"
@@ -6300,6 +6382,18 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+parse-entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
+ integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
parse-entities@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e"
@@ -6916,11 +7010,25 @@ remark-stringify@^11.0.0:
mdast-util-to-markdown "^2.0.0"
unified "^11.0.0"
+remark-wiki-link@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/remark-wiki-link/-/remark-wiki-link-2.0.1.tgz#52ffdcfe16e3e018874b890387ea02668e882d10"
+ integrity sha512-F8Eut1E7GWfFm4ZDTI6/4ejeZEHZgnVk6E933Yqd/ssYsc4AyI32aGakxwsGcEzbbE7dkWi1EfLlGAdGgOZOsA==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ mdast-util-wiki-link "^0.1.2"
+ micromark-extension-wiki-link "^0.0.4"
+
remove-accents@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687"
integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==
+repeat-string@^1.0.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -8254,6 +8362,11 @@ zustand@^4.4.7:
dependencies:
use-sync-external-store "1.2.0"
+zwitch@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
+ integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
+
zwitch@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"