diff --git a/components/ai-elements/code-block.tsx b/components/ai-elements/code-block.tsx deleted file mode 100644 index bc1441a..0000000 --- a/components/ai-elements/code-block.tsx +++ /dev/null @@ -1,562 +0,0 @@ -"use client"; - -import { Button } from "@/components/ui/button"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { cn } from "@/lib/utils"; -import { CheckIcon, CopyIcon } from "lucide-react"; -import type { ComponentProps, CSSProperties, HTMLAttributes } from "react"; -import { - createContext, - memo, - useCallback, - useContext, - useEffect, - useMemo, - useRef, - useState, -} from "react"; -import type { - BundledLanguage, - BundledTheme, - HighlighterGeneric, - ThemedToken, -} from "shiki"; -import { createHighlighter } from "shiki"; - -// Shiki uses bitflags for font styles: 1=italic, 2=bold, 4=underline -// oxlint-disable-next-line eslint(no-bitwise) -const isItalic = (fontStyle: number | undefined) => fontStyle && fontStyle & 1; -// oxlint-disable-next-line eslint(no-bitwise) -const isBold = (fontStyle: number | undefined) => fontStyle && fontStyle & 2; -const isUnderline = (fontStyle: number | undefined) => - // oxlint-disable-next-line eslint(no-bitwise) - fontStyle && fontStyle & 4; - -// Transform tokens to include pre-computed keys to avoid noArrayIndexKey lint -interface KeyedToken { - token: ThemedToken; - key: string; -} -interface KeyedLine { - tokens: KeyedToken[]; - key: string; -} - -const addKeysToTokens = (lines: ThemedToken[][]): KeyedLine[] => - lines.map((line, lineIdx) => ({ - key: `line-${lineIdx}`, - tokens: line.map((token, tokenIdx) => ({ - key: `line-${lineIdx}-${tokenIdx}`, - token, - })), - })); - -// Token rendering component -const TokenSpan = ({ token }: { token: ThemedToken }) => ( - - {token.content} - -); - -// Line number styles using CSS counters -const LINE_NUMBER_CLASSES = cn( - "block", - "before:content-[counter(line)]", - "before:inline-block", - "before:[counter-increment:line]", - "before:w-8", - "before:mr-4", - "before:text-right", - "before:text-muted-foreground/50", - "before:font-mono", - "before:select-none" -); - -// Line rendering component -const LineSpan = ({ - keyedLine, - showLineNumbers, -}: { - keyedLine: KeyedLine; - showLineNumbers: boolean; -}) => ( - - {keyedLine.tokens.length === 0 - ? "\n" - : keyedLine.tokens.map(({ token, key }) => ( - - ))} - -); - -// Types -type CodeBlockProps = HTMLAttributes & { - code: string; - language: BundledLanguage; - showLineNumbers?: boolean; -}; - -interface TokenizedCode { - tokens: ThemedToken[][]; - fg: string; - bg: string; -} - -interface CodeBlockContextType { - code: string; -} - -// Context -const CodeBlockContext = createContext({ - code: "", -}); - -// Highlighter cache (singleton per language) -const highlighterCache = new Map< - string, - Promise> ->(); - -// Token cache -const tokensCache = new Map(); - -// Subscribers for async token updates -const subscribers = new Map void>>(); - -const getTokensCacheKey = (code: string, language: BundledLanguage) => { - const start = code.slice(0, 100); - const end = code.length > 100 ? code.slice(-100) : ""; - return `${language}:${code.length}:${start}:${end}`; -}; - -const getHighlighter = ( - language: BundledLanguage -): Promise> => { - const cached = highlighterCache.get(language); - if (cached) { - return cached; - } - - const highlighterPromise = createHighlighter({ - langs: [language], - themes: ["github-light", "github-dark"], - }); - - highlighterCache.set(language, highlighterPromise); - return highlighterPromise; -}; - -// Create raw tokens for immediate display while highlighting loads -const createRawTokens = (code: string): TokenizedCode => ({ - bg: "transparent", - fg: "inherit", - tokens: code.split("\n").map((line) => - line === "" - ? [] - : [ - { - color: "inherit", - content: line, - } as ThemedToken, - ] - ), -}); - -// Synchronous highlight with callback for async results -export const highlightCode = ( - code: string, - language: BundledLanguage, - // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-callbacks) - callback?: (result: TokenizedCode) => void -): TokenizedCode | null => { - const tokensCacheKey = getTokensCacheKey(code, language); - - // Return cached result if available - const cached = tokensCache.get(tokensCacheKey); - if (cached) { - return cached; - } - - // Subscribe callback if provided - if (callback) { - if (!subscribers.has(tokensCacheKey)) { - subscribers.set(tokensCacheKey, new Set()); - } - subscribers.get(tokensCacheKey)?.add(callback); - } - - // Start highlighting in background - fire-and-forget async pattern - getHighlighter(language) - // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then) - .then((highlighter) => { - const availableLangs = highlighter.getLoadedLanguages(); - const langToUse = availableLangs.includes(language) ? language : "text"; - - const result = highlighter.codeToTokens(code, { - lang: langToUse, - themes: { - dark: "github-dark", - light: "github-light", - }, - }); - - const tokenized: TokenizedCode = { - bg: result.bg ?? "transparent", - fg: result.fg ?? "inherit", - tokens: result.tokens, - }; - - // Cache the result - tokensCache.set(tokensCacheKey, tokenized); - - // Notify all subscribers - const subs = subscribers.get(tokensCacheKey); - if (subs) { - for (const sub of subs) { - sub(tokenized); - } - subscribers.delete(tokensCacheKey); - } - }) - // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then), eslint-plugin-promise(prefer-await-to-callbacks) - .catch((error) => { - console.error("Failed to highlight code:", error); - subscribers.delete(tokensCacheKey); - }); - - return null; -}; - -const CodeBlockBody = memo( - ({ - tokenized, - showLineNumbers, - className, - }: { - tokenized: TokenizedCode; - showLineNumbers: boolean; - className?: string; - }) => { - const preStyle = useMemo( - () => ({ - backgroundColor: tokenized.bg, - color: tokenized.fg, - }), - [tokenized.bg, tokenized.fg] - ); - - const keyedLines = useMemo( - () => addKeysToTokens(tokenized.tokens), - [tokenized.tokens] - ); - - return ( - - - {keyedLines.map((keyedLine) => ( - - ))} - - - ); - }, - (prevProps, nextProps) => - prevProps.tokenized === nextProps.tokenized && - prevProps.showLineNumbers === nextProps.showLineNumbers && - prevProps.className === nextProps.className -); - -CodeBlockBody.displayName = "CodeBlockBody"; - -export const CodeBlockContainer = ({ - className, - language, - style, - ...props -}: HTMLAttributes & { language: string }) => ( - -); - -export const CodeBlockHeader = ({ - children, - className, - ...props -}: HTMLAttributes) => ( - - {children} - -); - -export const CodeBlockTitle = ({ - children, - className, - ...props -}: HTMLAttributes) => ( - - {children} - -); - -export const CodeBlockFilename = ({ - children, - className, - ...props -}: HTMLAttributes) => ( - - {children} - -); - -export const CodeBlockActions = ({ - children, - className, - ...props -}: HTMLAttributes) => ( - - {children} - -); - -export const CodeBlockContent = ({ - code, - language, - showLineNumbers = false, -}: { - code: string; - language: BundledLanguage; - showLineNumbers?: boolean; -}) => { - // Memoized raw tokens for immediate display - const rawTokens = useMemo(() => createRawTokens(code), [code]); - - // Synchronous cache lookup — avoids setState in effect for cached results - const syncTokens = useMemo( - () => highlightCode(code, language) ?? rawTokens, - [code, language, rawTokens] - ); - - // Async highlighting result (populated after shiki loads) - const [asyncTokens, setAsyncTokens] = useState(null); - const asyncKeyRef = useRef({ code, language }); - - // Invalidate stale async tokens synchronously during render - if ( - asyncKeyRef.current.code !== code || - asyncKeyRef.current.language !== language - ) { - asyncKeyRef.current = { code, language }; - setAsyncTokens(null); - } - - useEffect(() => { - let cancelled = false; - - highlightCode(code, language, (result) => { - if (!cancelled) { - setAsyncTokens(result); - } - }); - - return () => { - cancelled = true; - }; - }, [code, language]); - - const tokenized = asyncTokens ?? syncTokens; - - return ( - - - - ); -}; - -export const CodeBlock = ({ - code, - language, - showLineNumbers = false, - className, - children, - ...props -}: CodeBlockProps) => { - const contextValue = useMemo(() => ({ code }), [code]); - - return ( - - - {children} - - - - ); -}; - -export type CodeBlockCopyButtonProps = ComponentProps & { - onCopy?: () => void; - onError?: (error: Error) => void; - timeout?: number; -}; - -export const CodeBlockCopyButton = ({ - onCopy, - onError, - timeout = 2000, - children, - className, - ...props -}: CodeBlockCopyButtonProps) => { - const [isCopied, setIsCopied] = useState(false); - const timeoutRef = useRef(0); - const { code } = useContext(CodeBlockContext); - - const copyToClipboard = useCallback(async () => { - if (typeof window === "undefined" || !navigator?.clipboard?.writeText) { - onError?.(new Error("Clipboard API not available")); - return; - } - - try { - if (!isCopied) { - await navigator.clipboard.writeText(code); - setIsCopied(true); - onCopy?.(); - timeoutRef.current = window.setTimeout( - () => setIsCopied(false), - timeout - ); - } - } catch (error) { - onError?.(error as Error); - } - }, [code, onCopy, onError, timeout, isCopied]); - - useEffect( - () => () => { - window.clearTimeout(timeoutRef.current); - }, - [] - ); - - const Icon = isCopied ? CheckIcon : CopyIcon; - - return ( - - {children ?? } - - ); -}; - -export type CodeBlockLanguageSelectorProps = ComponentProps; - -export const CodeBlockLanguageSelector = ( - props: CodeBlockLanguageSelectorProps -) => ; - -export type CodeBlockLanguageSelectorTriggerProps = ComponentProps< - typeof SelectTrigger ->; - -export const CodeBlockLanguageSelectorTrigger = ({ - className, - ...props -}: CodeBlockLanguageSelectorTriggerProps) => ( - -); - -export type CodeBlockLanguageSelectorValueProps = ComponentProps< - typeof SelectValue ->; - -export const CodeBlockLanguageSelectorValue = ( - props: CodeBlockLanguageSelectorValueProps -) => ; - -export type CodeBlockLanguageSelectorContentProps = ComponentProps< - typeof SelectContent ->; - -export const CodeBlockLanguageSelectorContent = ({ - align = "end", - ...props -}: CodeBlockLanguageSelectorContentProps) => ( - -); - -export type CodeBlockLanguageSelectorItemProps = ComponentProps< - typeof SelectItem ->; - -export const CodeBlockLanguageSelectorItem = ( - props: CodeBlockLanguageSelectorItemProps -) => ; diff --git a/components/ai-elements/markdown.tsx b/components/ai-elements/markdown.tsx new file mode 100644 index 0000000..8fc8219 --- /dev/null +++ b/components/ai-elements/markdown.tsx @@ -0,0 +1,295 @@ +"use client"; + +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { cn } from "@/lib/utils"; +import Link from "next/link"; +import type { Nodes } from "hast"; +import { toJsxRuntime } from "hast-util-to-jsx-runtime"; +import type { Components } from "hast-util-to-jsx-runtime"; +import type { ComponentProps, HTMLAttributes, MouseEvent } from "react"; +import { Fragment, memo, useCallback, useMemo, useState } from "react"; +import { jsx, jsxs } from "react/jsx-runtime"; +import rehypeSanitize, { defaultSchema } from "rehype-sanitize"; +import remarkGfm from "remark-gfm"; +import remarkParse from "remark-parse"; +import remarkRehype from "remark-rehype"; +import remend from "remend"; +import { unified } from "unified"; + +// Raw HTML never reaches the tree: remark-rehype drops it (allowDangerousHtml +// is off by default) and rehype-sanitize is the second line of defence, mainly +// for its href protocol allow-list — that is what stops `javascript:` URLs. +// Relative hrefs carry no protocol, so storefront links pass through untouched. +const schema = { + ...defaultSchema, + attributes: { + ...defaultSchema.attributes, + // GFM task lists render as disabled checkboxes. The default schema allows + // `type` and `disabled` but not `checked`, so every box would read unticked. + input: [...(defaultSchema.attributes?.input ?? []), "checked"], + }, +}; + +const processor = unified() + .use(remarkParse) + .use(remarkGfm) + .use(remarkRehype) + .use(rehypeSanitize, schema); + +// `text-only` leaves a half-streamed `[label](htt` as plain text. remend's +// default instead emits a `streamdown:incomplete-link` placeholder href, which +// the sanitizer would strip anyway. +const REMEND_OPTIONS = { linkMode: "text-only" } as const; + +// remend only ever runs on text that is still arriving. On finished text it can +// do damage: it reads `*$89*` as an unclosed italic (the `$` throws off its +// closing-delimiter scan) and appends a stray `*`, which then parses as an empty +// bullet. Prices in italics are ordinary storefront copy, so settled messages +// render verbatim and only the in-flight one gets repaired. +const repair = (markdown: string, isStreaming: boolean) => + isStreaming ? remend(markdown, REMEND_OPTIONS) : markdown; + +export interface LinkSafetyConfig { + enabled: boolean; + /** Return true for links that may open without a confirmation step. */ + onLinkCheck?: (url: string) => boolean; +} + +type AnchorProps = ComponentProps<"a"> & { + linkSafety?: LinkSafetyConfig; + onUntrusted: (url: string) => void; +}; + +const LINK_CLASS = + "font-medium underline underline-offset-4 hover:text-foreground"; + +// Route-relative hrefs are the storefront links the assistant emits. Deciding +// this from the string alone keeps the server and client passes identical; +// `linkSafety.onLinkCheck` does the origin-aware check later, at click time. +const isRouteHref = (href: string) => /^[/#?]/.test(href); + +const MarkdownLink = ({ + href, + linkSafety, + onUntrusted, + ...props +}: AnchorProps) => { + // Runs on click rather than on render so it can read `window.location`, + // which is unavailable during the server pass. + const handleClick = useCallback( + (event: MouseEvent) => { + if (!href || !linkSafety?.enabled || !linkSafety.onLinkCheck) return; + if (linkSafety.onLinkCheck(href)) return; + + event.preventDefault(); + onUntrusted(href); + }, + [href, linkSafety, onUntrusted] + ); + + // In-app destinations navigate client-side in the same tab; sending a shopper + // to a product page in a new tab would strand the conversation behind it. + if (href && isRouteHref(href)) { + return ; + } + + return ( + + ); +}; + +// Fenced code renders as plain preformatted text — no tokenizer, no themes. +const buildComponents = ( + linkSafety: LinkSafetyConfig | undefined, + onUntrusted: (url: string) => void +): Partial => ({ + a: (props: ComponentProps<"a">) => ( + + ), + blockquote: (props: ComponentProps<"blockquote">) => ( + + ), + code: ({ className, ...props }: ComponentProps<"code">) => { + // Only fenced blocks carry a language class, and those already sit inside a + // , so they must not get the inline pill treatment. + const isBlock = + typeof className === "string" && className.includes("language-"); + + return ( + + ); + }, + em: (props: ComponentProps<"em">) => , + h1: (props: ComponentProps<"h1">) => ( + + ), + h2: (props: ComponentProps<"h2">) => ( + + ), + h3: (props: ComponentProps<"h3">) => ( + + ), + h4: (props: ComponentProps<"h4">) => ( + + ), + h5: (props: ComponentProps<"h5">) => ( + + ), + h6: (props: ComponentProps<"h6">) => ( + + ), + hr: (props: ComponentProps<"hr">) => ( + + ), + // GFM task-list boxes are display only; readOnly silences React's warning + // about a `checked` input with no change handler. + input: (props: ComponentProps<"input">) => ( + + ), + img: ({ alt, ...props }: ComponentProps<"img">) => ( + // biome-ignore lint/nursery/noImgElement: model output, not a known asset + + ), + li: (props: ComponentProps<"li">) => , + ol: (props: ComponentProps<"ol">) => ( + + ), + p: (props: ComponentProps<"p">) => ( + + ), + pre: (props: ComponentProps<"pre">) => ( + + ), + strong: (props: ComponentProps<"strong">) => ( + + ), + table: (props: ComponentProps<"table">) => ( + + + + ), + td: (props: ComponentProps<"td">) => ( + + ), + th: (props: ComponentProps<"th">) => ( + + ), + ul: (props: ComponentProps<"ul">) => ( + + ), +}); + +export type MarkdownProps = Omit, "children"> & { + children: string; + /** True while tokens are still arriving; enables incomplete-syntax repair. */ + isAnimating?: boolean; + linkSafety?: LinkSafetyConfig; +}; + +export const Markdown = memo( + ({ + children, + className, + isAnimating, + linkSafety, + ...props + }: MarkdownProps) => { + const [pending, setPending] = useState(null); + + const handleUntrusted = useCallback((url: string) => setPending(url), []); + + const content = useMemo(() => { + // While streaming, close syntax the model has not finished emitting so a + // partial `**bold` renders as bold rather than as literal asterisks. + const source = repair(children ?? "", isAnimating === true); + const tree = processor.runSync(processor.parse(source)) as Nodes; + + return toJsxRuntime(tree, { + components: buildComponents(linkSafety, handleUntrusted), + Fragment, + jsx, + jsxs, + }); + }, [children, isAnimating, linkSafety, handleUntrusted]); + + return ( + *:first-child]:mt-0 [&>*:last-child]:mb-0", + className + )} + {...props} + > + {content} + !open && setPending(null)} + open={pending !== null} + > + + + Leave this site? + + This link points somewhere outside the store. Continue only if + you trust it. + + + + {pending} + + + setPending(null)} variant="outline"> + Cancel + + { + if (pending) { + window.open(pending, "_blank", "noopener,noreferrer"); + } + setPending(null); + }} + > + Continue + + + + + + ); + }, + (prev, next) => + prev.children === next.children && prev.isAnimating === next.isAnimating +); + +Markdown.displayName = "Markdown"; diff --git a/components/ai-elements/message.tsx b/components/ai-elements/message.tsx index cc0e62c..0906a23 100644 --- a/components/ai-elements/message.tsx +++ b/components/ai-elements/message.tsx @@ -12,23 +12,19 @@ import { TooltipTrigger, } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; -import { cjk } from "@streamdown/cjk"; -import { code } from "@streamdown/code"; -import { math } from "@streamdown/math"; -import { mermaid } from "@streamdown/mermaid"; import type { UIMessage } from "ai"; import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react"; import type { ComponentProps, HTMLAttributes, ReactElement } from "react"; import { createContext, - memo, useCallback, useContext, useEffect, useMemo, useState, } from "react"; -import { Streamdown } from "streamdown"; + +import { Markdown } from "./markdown"; export type MessageProps = HTMLAttributes & { from: UIMessage["role"]; @@ -319,27 +315,10 @@ export const MessageBranchPage = ({ ); }; -export type MessageResponseProps = ComponentProps; +export type MessageResponseProps = ComponentProps; -const streamdownPlugins = { cjk, code, math, mermaid }; - -export const MessageResponse = memo( - ({ className, ...props }: MessageResponseProps) => ( - *:first-child]:mt-0 [&>*:last-child]:mb-0", - className - )} - plugins={streamdownPlugins} - {...props} - /> - ), - (prevProps, nextProps) => - prevProps.children === nextProps.children && - nextProps.isAnimating === prevProps.isAnimating -); - -MessageResponse.displayName = "MessageResponse"; +// Markdown already memoises on children/isAnimating. +export const MessageResponse = Markdown; export type MessageToolbarProps = ComponentProps<"div">; diff --git a/components/ai-elements/reasoning.tsx b/components/ai-elements/reasoning.tsx index b56adac..b940398 100644 --- a/components/ai-elements/reasoning.tsx +++ b/components/ai-elements/reasoning.tsx @@ -7,10 +7,6 @@ import { CollapsibleTrigger, } from "@/components/ui/collapsible"; import { cn } from "@/lib/utils"; -import { cjk } from "@streamdown/cjk"; -import { code } from "@streamdown/code"; -import { math } from "@streamdown/math"; -import { mermaid } from "@streamdown/mermaid"; import { BrainIcon, ChevronDownIcon } from "lucide-react"; import type { ComponentProps, ReactNode } from "react"; import { @@ -23,8 +19,8 @@ import { useRef, useState, } from "react"; -import { Streamdown } from "streamdown"; +import { Markdown } from "./markdown"; import { Shimmer } from "./shimmer"; interface ReasoningContextValue { @@ -204,21 +200,23 @@ export type ReasoningContentProps = ComponentProps< children: string; }; -const streamdownPlugins = { cjk, code, math, mermaid }; - export const ReasoningContent = memo( - ({ className, children, ...props }: ReasoningContentProps) => ( - - {children} - - ) + ({ className, children, ...props }: ReasoningContentProps) => { + const { isStreaming } = useReasoning(); + + return ( + + {children} + + ); + } ); Reasoning.displayName = "Reasoning"; diff --git a/components/ai-elements/tool.tsx b/components/ai-elements/tool.tsx deleted file mode 100644 index 18c4bb8..0000000 --- a/components/ai-elements/tool.tsx +++ /dev/null @@ -1,173 +0,0 @@ -"use client"; - -import { Badge } from "@/components/ui/badge"; -import { - Collapsible, - CollapsibleContent, - CollapsibleTrigger, -} from "@/components/ui/collapsible"; -import { cn } from "@/lib/utils"; -import type { DynamicToolUIPart, ToolUIPart } from "ai"; -import { - CheckCircleIcon, - ChevronDownIcon, - CircleIcon, - ClockIcon, - WrenchIcon, - XCircleIcon, -} from "lucide-react"; -import type { ComponentProps, ReactNode } from "react"; -import { isValidElement } from "react"; - -import { CodeBlock } from "./code-block"; - -export type ToolProps = ComponentProps; - -export const Tool = ({ className, ...props }: ToolProps) => ( - -); - -export type ToolPart = ToolUIPart | DynamicToolUIPart; - -export type ToolHeaderProps = { - title?: string; - className?: string; -} & ( - | { type: ToolUIPart["type"]; state: ToolUIPart["state"]; toolName?: never } - | { - type: DynamicToolUIPart["type"]; - state: DynamicToolUIPart["state"]; - toolName: string; - } -); - -const statusLabels: Record = { - "approval-requested": "Awaiting Approval", - "approval-responded": "Responded", - "input-available": "Running", - "input-streaming": "Pending", - "output-available": "Completed", - "output-denied": "Denied", - "output-error": "Error", -}; - -const statusIcons: Record = { - "approval-requested": , - "approval-responded": , - "input-available": , - "input-streaming": , - "output-available": , - "output-denied": , - "output-error": , -}; - -export const getStatusBadge = (status: ToolPart["state"]) => ( - - {statusIcons[status]} - {statusLabels[status]} - -); - -export const ToolHeader = ({ - className, - title, - type, - state, - toolName, - ...props -}: ToolHeaderProps) => { - const derivedName = - type === "dynamic-tool" ? toolName : type.split("-").slice(1).join("-"); - - return ( - - - - {title ?? derivedName} - {getStatusBadge(state)} - - - - ); -}; - -export type ToolContentProps = ComponentProps; - -export const ToolContent = ({ className, ...props }: ToolContentProps) => ( - -); - -export type ToolInputProps = ComponentProps<"div"> & { - input: ToolPart["input"]; -}; - -export const ToolInput = ({ className, input, ...props }: ToolInputProps) => ( - - - Parameters - - - - - -); - -export type ToolOutputProps = ComponentProps<"div"> & { - output: ToolPart["output"]; - errorText: ToolPart["errorText"]; -}; - -export const ToolOutput = ({ - className, - output, - errorText, - ...props -}: ToolOutputProps) => { - if (!(output || errorText)) { - return null; - } - - let Output = {output as ReactNode}; - - if (typeof output === "object" && !isValidElement(output)) { - Output = ( - - ); - } else if (typeof output === "string") { - Output = ; - } - - return ( - - - {errorText ? "Error" : "Result"} - - - {errorText && {errorText}} - {Output} - - - ); -}; diff --git a/components/shopify/account-form.tsx b/components/shopify/account-form.tsx index 47ca830..871ad74 100644 --- a/components/shopify/account-form.tsx +++ b/components/shopify/account-form.tsx @@ -4,7 +4,7 @@ import React, { useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; export interface AccountFormField { name: string; diff --git a/components/shopify/cart-drawer.tsx b/components/shopify/cart-drawer.tsx index e175d04..81ace6f 100644 --- a/components/shopify/cart-drawer.tsx +++ b/components/shopify/cart-drawer.tsx @@ -3,7 +3,7 @@ import React, { useState } from 'react'; import { useCartStore, redirectToCheckout } from '@/hooks/use-shopify-cart'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; import { Sheet, SheetContent, diff --git a/components/shopify/collection-detail.tsx b/components/shopify/collection-detail.tsx index 5c588dd..2860d60 100644 --- a/components/shopify/collection-detail.tsx +++ b/components/shopify/collection-detail.tsx @@ -6,7 +6,7 @@ import ProductCard from './product-card'; import ProductFilters, { type ProductFilterFacet } from './product-filters'; import ProductToolbar from './product-toolbar'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; import { getCollectionProductsPage, type CollectionSortKey, diff --git a/components/shopify/product-detail/product-detail-info.tsx b/components/shopify/product-detail/product-detail-info.tsx index c701d95..aadea71 100644 --- a/components/shopify/product-detail/product-detail-info.tsx +++ b/components/shopify/product-detail/product-detail-info.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; import { RiSubtractLine, RiAddLine } from '@remixicon/react'; import ShopPayButton from '@/components/shopify/shop-pay-button'; import type { ProductOption, ProductOptionValue } from '@/hooks/use-shopify-products'; diff --git a/components/shopify/products.tsx b/components/shopify/products.tsx index 9d31568..7c643b3 100644 --- a/components/shopify/products.tsx +++ b/components/shopify/products.tsx @@ -4,7 +4,7 @@ import React, { useState, useEffect } from 'react'; import ProductCard from './product-card'; import { getProductsPage } from '@/hooks/use-shopify-products'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; interface ProductImage { url: string; diff --git a/components/shopify/search-dialog.tsx b/components/shopify/search-dialog.tsx index 9bb12f1..b4fc655 100644 --- a/components/shopify/search-dialog.tsx +++ b/components/shopify/search-dialog.tsx @@ -11,7 +11,7 @@ import { CommandItem, } from '@/components/ui/command'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; import { RiSearchLine, RiImageLine, RiCloseLine } from '@remixicon/react'; import { searchSuggestions, @@ -111,7 +111,7 @@ const SearchDialog: React.FC = () => { if (event.key === 'Enter') goToSearchPage(); }} /> - + {hasQuery && ( setTerm('')} diff --git a/components/shopify/search-results.tsx b/components/shopify/search-results.tsx index 2de4556..cd6bedb 100644 --- a/components/shopify/search-results.tsx +++ b/components/shopify/search-results.tsx @@ -6,7 +6,7 @@ import ProductCard from './product-card'; import ProductFilters from './product-filters'; import ProductToolbar from './product-toolbar'; import { Button } from '@/components/ui/button'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; import { searchProducts, type SearchFilter, diff --git a/components/shopify/shop-pay-button.tsx b/components/shopify/shop-pay-button.tsx index 4ba680f..47aca5b 100644 --- a/components/shopify/shop-pay-button.tsx +++ b/components/shopify/shop-pay-button.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { SHOPIFY_STORE_DOMAIN } from '@/services/shopify/client'; import ShopPayLogo from '@/components/shopify/shop-pay-logo'; -import { Loader } from '@/app/components/ui/loader'; +import { Loader } from '@/components/ui/loader'; import { Button } from '@/components/ui/button'; export interface ShopPayVariant { diff --git a/components/shopify/store-assistant.tsx b/components/shopify/store-assistant.tsx index b9ef8ae..308a395 100644 --- a/components/shopify/store-assistant.tsx +++ b/components/shopify/store-assistant.tsx @@ -393,6 +393,11 @@ const StoreAssistant: React.FC = () => { return ( {description} diff --git a/app/components/ui/loader.tsx b/components/ui/loader.tsx similarity index 100% rename from app/components/ui/loader.tsx rename to components/ui/loader.tsx diff --git a/package.json b/package.json index de9d480..dda5677 100644 --- a/package.json +++ b/package.json @@ -16,16 +16,13 @@ "@radix-ui/react-use-controllable-state": "^1.2.6", "@remixicon/react": "^4.9.0", "@shopify/storefront-api-client": "^1.0.0", - "@streamdown/cjk": "^1.0.3", - "@streamdown/code": "^1.1.1", - "@streamdown/math": "^1.0.2", - "@streamdown/mermaid": "^1.0.2", "ai": "^7", "class-variance-authority": "0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "embla-carousel-react": "^8.6.0", "framer-motion": "12.42.2", + "hast-util-to-jsx-runtime": "^2.3.6", "input-otp": "^1.4.2", "lucide-react": "^0.562.0", "motion": "^12.23.26", @@ -34,18 +31,23 @@ "radix-ui": "^1.6.7", "react": "^19.0.0", "react-dom": "^19.0.0", - "shiki": "^3.19.0", + "rehype-sanitize": "^6.0.0", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remend": "^1.3.0", "sonner": "^2.0.7", - "streamdown": "^2.5.0", "tailwind-merge": "^3.4.0", "tailwindcss": "^4", "tw-animate-css": "1.4.0", + "unified": "^11.0.5", "use-stick-to-bottom": "^1.1.6", "zod": "^4.4.3", "zustand": "^5.0.11" }, "devDependencies": { "@tailwindcss/postcss": "^4", + "@types/hast": "^3.0.5", "@types/node": "^22", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/yarn.lock b/yarn.lock index 872bd47..47fffcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,30 +78,6 @@ __metadata: languageName: node linkType: hard -"@antfu/install-pkg@npm:^1.1.0": - version: 1.1.0 - resolution: "@antfu/install-pkg@npm:1.1.0" - dependencies: - package-manager-detector: "npm:^1.3.0" - tinyexec: "npm:^1.0.1" - checksum: 10c0/140d5994c76fd3d0e824c88f1ce91b3370e8066a8bc2f5729ae133bf768caa239f7915e29c78f239b7ead253113ace51293e95127fafe2b786b88eb615b3be47 - languageName: node - linkType: hard - -"@braintree/sanitize-url@npm:^7.1.2": - version: 7.1.2 - resolution: "@braintree/sanitize-url@npm:7.1.2" - checksum: 10c0/62f2aa0cf58626e3880b2dc1025c42064b4639abd157ae4e1c35f4c2f5031e9273772046a423979845069c814e27ff818e8e669280dc53585e6f033d5b7a59cb - languageName: node - linkType: hard - -"@chevrotain/types@npm:~11.1.2": - version: 11.1.2 - resolution: "@chevrotain/types@npm:11.1.2" - checksum: 10c0/c0c4679a3d407df34e18d5adfa7ac599b4a2bfddbf68da6e43678b9b3e16ab911de7766b37b9fc466261c3dead3db1b620e2e344f800fa9f0f381720475eda8f - languageName: node - linkType: hard - "@emnapi/core@npm:^1.11.1": version: 1.11.3 resolution: "@emnapi/core@npm:1.11.3" @@ -168,24 +144,6 @@ __metadata: languageName: node linkType: hard -"@iconify/types@npm:^2.0.0": - version: 2.0.0 - resolution: "@iconify/types@npm:2.0.0" - checksum: 10c0/65a3be43500c7ccacf360e136d00e1717f050b7b91da644e94370256ac66f582d59212bdb30d00788aab4fc078262e91c95b805d1808d654b72f6d2072a7e4b2 - languageName: node - linkType: hard - -"@iconify/utils@npm:^3.0.2": - version: 3.1.4 - resolution: "@iconify/utils@npm:3.1.4" - dependencies: - "@antfu/install-pkg": "npm:^1.1.0" - "@iconify/types": "npm:^2.0.0" - import-meta-resolve: "npm:^4.2.0" - checksum: 10c0/2176311415d5853e0e19056a833014324d0a98989936945fbcc4fb4b0ae92178f6ed13c9b4c8e1200191991b78af421b7dd49cc03b474c7a824696d73033e1c1 - languageName: node - linkType: hard - "@img/colour@npm:^1.0.0": version: 1.1.0 resolution: "@img/colour@npm:1.1.0" @@ -457,15 +415,6 @@ __metadata: languageName: node linkType: hard -"@mermaid-js/parser@npm:^1.2.0": - version: 1.2.0 - resolution: "@mermaid-js/parser@npm:1.2.0" - dependencies: - "@chevrotain/types": "npm:~11.1.2" - checksum: 10c0/907d41167b23160c88f292b0dd79162d2543445ecf1d784ed09747467705666669f818e3ab91e1182da2127720fb40cb707e6fd56e8a445020fd3e7b8b16f013 - languageName: node - linkType: hard - "@napi-rs/wasm-runtime@npm:^1.1.4": version: 1.2.1 resolution: "@napi-rs/wasm-runtime@npm:1.2.1" @@ -1861,74 +1810,6 @@ __metadata: languageName: node linkType: hard -"@shikijs/core@npm:3.23.0": - version: 3.23.0 - resolution: "@shikijs/core@npm:3.23.0" - dependencies: - "@shikijs/types": "npm:3.23.0" - "@shikijs/vscode-textmate": "npm:^10.0.2" - "@types/hast": "npm:^3.0.4" - hast-util-to-html: "npm:^9.0.5" - checksum: 10c0/c595f1f2ec09cab102d2b3e03a3c64bfaace5fe52760cfbcced961d3e16571aa646c7e6f85b3d2d0242efd2c832ce4d150b5f1b7332982c17cfbe72f32bd0850 - languageName: node - linkType: hard - -"@shikijs/engine-javascript@npm:3.23.0": - version: 3.23.0 - resolution: "@shikijs/engine-javascript@npm:3.23.0" - dependencies: - "@shikijs/types": "npm:3.23.0" - "@shikijs/vscode-textmate": "npm:^10.0.2" - oniguruma-to-es: "npm:^4.3.4" - checksum: 10c0/884ebb7f66312c9f43e71fb33a3ac0e52f925fc6932de9f68f1bf171019c011c988a4bc0217212589985b1e1bc49452ed67eacbf3d74200b4a3725f11fd8ad98 - languageName: node - linkType: hard - -"@shikijs/engine-oniguruma@npm:3.23.0": - version: 3.23.0 - resolution: "@shikijs/engine-oniguruma@npm:3.23.0" - dependencies: - "@shikijs/types": "npm:3.23.0" - "@shikijs/vscode-textmate": "npm:^10.0.2" - checksum: 10c0/40dbda7aef55d5946c45b8cfe56f484eadb611f9f7c9eb77ff21f0dfce2bcc775686a61eda9e06401ddd71195945a522293f51d6522fce49244b1a6b9c0f61f7 - languageName: node - linkType: hard - -"@shikijs/langs@npm:3.23.0": - version: 3.23.0 - resolution: "@shikijs/langs@npm:3.23.0" - dependencies: - "@shikijs/types": "npm:3.23.0" - checksum: 10c0/513b90cfee0fa167d2063b7fbc2318b303a604f2e1fa156aa8b4659b49792401531a74acf68de622ecfff15738e1947a46cfe92a32fcd6a4ee5e70bcf1d06c66 - languageName: node - linkType: hard - -"@shikijs/themes@npm:3.23.0": - version: 3.23.0 - resolution: "@shikijs/themes@npm:3.23.0" - dependencies: - "@shikijs/types": "npm:3.23.0" - checksum: 10c0/5c99036d4a765765018f9106a354ebe5ccac204c69f00e3cda265828d493f005412659213f6574fa0e187c7d4437b3327bd6dad2e2146b2c472d2bf493d790dd - languageName: node - linkType: hard - -"@shikijs/types@npm:3.23.0": - version: 3.23.0 - resolution: "@shikijs/types@npm:3.23.0" - dependencies: - "@shikijs/vscode-textmate": "npm:^10.0.2" - "@types/hast": "npm:^3.0.4" - checksum: 10c0/bd0d1593f830a6b4e55c77871ec1b95cc44855d6e0e26282a948a3c58827237826e4110af27eb4d3231361f1e182c4410434a1dc15ec40aea988dc92dc97e9d6 - languageName: node - linkType: hard - -"@shikijs/vscode-textmate@npm:^10.0.2": - version: 10.0.2 - resolution: "@shikijs/vscode-textmate@npm:10.0.2" - checksum: 10c0/36b682d691088ec244de292dc8f91b808f95c89466af421cf84cbab92230f03c8348649c14b3251991b10ce632b0c715e416e992dd5f28ff3221dc2693fd9462 - languageName: node - linkType: hard - "@shopify/graphql-client@npm:^1.4.2": version: 1.4.2 resolution: "@shopify/graphql-client@npm:1.4.2" @@ -1952,54 +1833,6 @@ __metadata: languageName: node linkType: hard -"@streamdown/cjk@npm:^1.0.3": - version: 1.0.3 - resolution: "@streamdown/cjk@npm:1.0.3" - dependencies: - remark-cjk-friendly: "npm:^2.0.1" - remark-cjk-friendly-gfm-strikethrough: "npm:^2.0.1" - unist-util-visit: "npm:^5.0.0" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - checksum: 10c0/822c2cde81f72beac2162af54f705b702662813d6544bdf1c82ba04030d14e445c4d087a9773abdfd03e78a9cd105a18dd61414b180aa573987e111e1e10211d - languageName: node - linkType: hard - -"@streamdown/code@npm:^1.1.1": - version: 1.1.1 - resolution: "@streamdown/code@npm:1.1.1" - dependencies: - shiki: "npm:^3.19.0" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - checksum: 10c0/ddf7e81c2c7a303402da0bf6db5be651a93bd6927a3fad0b76fa9a2c705f90260a90e79d01b43cb492b968534ec7362275eb796f0aabcec12c37910a529ee72e - languageName: node - linkType: hard - -"@streamdown/math@npm:^1.0.2": - version: 1.0.2 - resolution: "@streamdown/math@npm:1.0.2" - dependencies: - katex: "npm:^0.16.27" - rehype-katex: "npm:^7.0.1" - remark-math: "npm:^6.0.0" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - checksum: 10c0/8af4caad17d84285d01b27ff1ced88976ddb0b223f0f6e8f69e5aa04ca997639365fe6158e4ca73d146e262f308f04c48e88946d6cd69175b627554830ab4a97 - languageName: node - linkType: hard - -"@streamdown/mermaid@npm:^1.0.2": - version: 1.0.2 - resolution: "@streamdown/mermaid@npm:1.0.2" - dependencies: - mermaid: "npm:^11.12.2" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - checksum: 10c0/3ba4f56bccf9ecfa0f74fe82c3f4c68967c5b065b10c031187fda6db5ca8df61da077ba54161de2b99eb37c6e2a1e7f360c7b8028405f842ffd0490099229e87 - languageName: node - linkType: hard - "@swc/helpers@npm:0.5.15": version: 0.5.15 resolution: "@swc/helpers@npm:0.5.15" @@ -2182,278 +2015,6 @@ __metadata: languageName: node linkType: hard -"@types/d3-array@npm:*": - version: 3.2.2 - resolution: "@types/d3-array@npm:3.2.2" - checksum: 10c0/6137cb97302f8a4f18ca22c0560c585cfcb823f276b23d89f2c0c005d72697ec13bca671c08e68b4b0cabd622e3f0e91782ee221580d6774074050be96dd7028 - languageName: node - linkType: hard - -"@types/d3-axis@npm:*": - version: 3.0.6 - resolution: "@types/d3-axis@npm:3.0.6" - dependencies: - "@types/d3-selection": "npm:*" - checksum: 10c0/d756d42360261f44d8eefd0950c5bb0a4f67a46dd92069da3f723ac36a1e8cb2b9ce6347d836ef19d5b8aef725dbcf8fdbbd6cfbff676ca4b0642df2f78b599a - languageName: node - linkType: hard - -"@types/d3-brush@npm:*": - version: 3.0.6 - resolution: "@types/d3-brush@npm:3.0.6" - dependencies: - "@types/d3-selection": "npm:*" - checksum: 10c0/fd6e2ac7657a354f269f6b9c58451ffae9d01b89ccb1eb6367fd36d635d2f1990967215ab498e0c0679ff269429c57fad6a2958b68f4d45bc9f81d81672edc01 - languageName: node - linkType: hard - -"@types/d3-chord@npm:*": - version: 3.0.6 - resolution: "@types/d3-chord@npm:3.0.6" - checksum: 10c0/c5a25eb5389db01e63faec0c5c2ec7cc41c494e9b3201630b494c4e862a60f1aa83fabbc33a829e7e1403941e3c30d206c741559b14406ac2a4239cfdf4b4c17 - languageName: node - linkType: hard - -"@types/d3-color@npm:*": - version: 3.1.3 - resolution: "@types/d3-color@npm:3.1.3" - checksum: 10c0/65eb0487de606eb5ad81735a9a5b3142d30bc5ea801ed9b14b77cb14c9b909f718c059f13af341264ee189acf171508053342142bdf99338667cea26a2d8d6ae - languageName: node - linkType: hard - -"@types/d3-contour@npm:*": - version: 3.0.6 - resolution: "@types/d3-contour@npm:3.0.6" - dependencies: - "@types/d3-array": "npm:*" - "@types/geojson": "npm:*" - checksum: 10c0/e7d83e94719af4576ceb5ac7f277c5806f83ba6c3631744ae391cffc3641f09dfa279470b83053cd0b2acd6784e8749c71141d05bdffa63ca58ffb5b31a0f27c - languageName: node - linkType: hard - -"@types/d3-delaunay@npm:*": - version: 6.0.4 - resolution: "@types/d3-delaunay@npm:6.0.4" - checksum: 10c0/d154a8864f08c4ea23ecb9bdabcef1c406a25baa8895f0cb08a0ed2799de0d360e597552532ce7086ff0cdffa8f3563f9109d18f0191459d32bb620a36939123 - languageName: node - linkType: hard - -"@types/d3-dispatch@npm:*": - version: 3.0.7 - resolution: "@types/d3-dispatch@npm:3.0.7" - checksum: 10c0/38c6605ebf0bf0099dfb70eafe0dd4ae8213368b40b8f930b72a909ff2e7259d2bd8a54d100bb5a44eb4b36f4f2a62dcb37f8be59613ca6b507c7a2f910b3145 - languageName: node - linkType: hard - -"@types/d3-drag@npm:*": - version: 3.0.7 - resolution: "@types/d3-drag@npm:3.0.7" - dependencies: - "@types/d3-selection": "npm:*" - checksum: 10c0/65e29fa32a87c72d26c44b5e2df3bf15af21cd128386bcc05bcacca255927c0397d0cd7e6062aed5f0abd623490544a9d061c195f5ed9f018fe0b698d99c079d - languageName: node - linkType: hard - -"@types/d3-dsv@npm:*": - version: 3.0.7 - resolution: "@types/d3-dsv@npm:3.0.7" - checksum: 10c0/c0f01da862465594c8a28278b51c850af3b4239cc22b14fd1a19d7a98f93d94efa477bf59d8071beb285dca45bf614630811451e18e7c52add3a0abfee0a1871 - languageName: node - linkType: hard - -"@types/d3-ease@npm:*": - version: 3.0.2 - resolution: "@types/d3-ease@npm:3.0.2" - checksum: 10c0/aff5a1e572a937ee9bff6465225d7ba27d5e0c976bd9eacdac2e6f10700a7cb0c9ea2597aff6b43a6ed850a3210030870238894a77ec73e309b4a9d0333f099c - languageName: node - linkType: hard - -"@types/d3-fetch@npm:*": - version: 3.0.7 - resolution: "@types/d3-fetch@npm:3.0.7" - dependencies: - "@types/d3-dsv": "npm:*" - checksum: 10c0/3d147efa52a26da1a5d40d4d73e6cebaaa964463c378068062999b93ea3731b27cc429104c21ecbba98c6090e58ef13429db6399238c5e3500162fb3015697a0 - languageName: node - linkType: hard - -"@types/d3-force@npm:*": - version: 3.0.10 - resolution: "@types/d3-force@npm:3.0.10" - checksum: 10c0/c82b459079a106b50e346c9b79b141f599f2fc4f598985a5211e72c7a2e20d35bd5dc6e91f306b323c8bfa325c02c629b1645f5243f1c6a55bd51bc85cccfa92 - languageName: node - linkType: hard - -"@types/d3-format@npm:*": - version: 3.0.4 - resolution: "@types/d3-format@npm:3.0.4" - checksum: 10c0/3ac1600bf9061a59a228998f7cd3f29e85cbf522997671ba18d4d84d10a2a1aff4f95aceb143fa9960501c3ec351e113fc75884e6a504ace44dc1744083035ee - languageName: node - linkType: hard - -"@types/d3-geo@npm:*": - version: 3.1.0 - resolution: "@types/d3-geo@npm:3.1.0" - dependencies: - "@types/geojson": "npm:*" - checksum: 10c0/3745a93439038bb5b0b38facf435f7079812921d46406f5d38deaee59e90084ff742443c7ea0a8446df81a0d81eaf622fe7068cf4117a544bd4aa3b2dc182f88 - languageName: node - linkType: hard - -"@types/d3-hierarchy@npm:*": - version: 3.1.7 - resolution: "@types/d3-hierarchy@npm:3.1.7" - checksum: 10c0/873711737d6b8e7b6f1dda0bcd21294a48f75024909ae510c5d2c21fad2e72032e0958def4d9f68319d3aaac298ad09c49807f8bfc87a145a82693b5208613c7 - languageName: node - linkType: hard - -"@types/d3-interpolate@npm:*": - version: 3.0.4 - resolution: "@types/d3-interpolate@npm:3.0.4" - dependencies: - "@types/d3-color": "npm:*" - checksum: 10c0/066ebb8da570b518dd332df6b12ae3b1eaa0a7f4f0c702e3c57f812cf529cc3500ec2aac8dc094f31897790346c6b1ebd8cd7a077176727f4860c2b181a65ca4 - languageName: node - linkType: hard - -"@types/d3-path@npm:*": - version: 3.1.1 - resolution: "@types/d3-path@npm:3.1.1" - checksum: 10c0/2c36eb31ebaf2ce4712e793fd88087117976f7c4ed69cc2431825f999c8c77cca5cea286f3326432b770739ac6ccd5d04d851eb65e7a4dbcc10c982b49ad2c02 - languageName: node - linkType: hard - -"@types/d3-polygon@npm:*": - version: 3.0.2 - resolution: "@types/d3-polygon@npm:3.0.2" - checksum: 10c0/f46307bb32b6c2aef8c7624500e0f9b518de8f227ccc10170b869dc43e4c542560f6c8d62e9f087fac45e198d6e4b623e579c0422e34c85baf56717456d3f439 - languageName: node - linkType: hard - -"@types/d3-quadtree@npm:*": - version: 3.0.6 - resolution: "@types/d3-quadtree@npm:3.0.6" - checksum: 10c0/7eaa0a4d404adc856971c9285e1c4ab17e9135ea669d847d6db7e0066126a28ac751864e7ce99c65d526e130f56754a2e437a1617877098b3bdcc3ef23a23616 - languageName: node - linkType: hard - -"@types/d3-random@npm:*": - version: 3.0.4 - resolution: "@types/d3-random@npm:3.0.4" - checksum: 10c0/7661fe7c5071ea8a35b31a5532816a693b5e887d7635954c1ee214ac3dba727061a46b58401f862e404d1c0122c62810317ddde5bcec89f13106cb022b9d3f09 - languageName: node - linkType: hard - -"@types/d3-scale-chromatic@npm:*": - version: 3.1.0 - resolution: "@types/d3-scale-chromatic@npm:3.1.0" - checksum: 10c0/93c564e02d2e97a048e18fe8054e4a935335da6ab75a56c3df197beaa87e69122eef0dfbeb7794d4a444a00e52e3123514ee27cec084bd21f6425b7037828cc2 - languageName: node - linkType: hard - -"@types/d3-scale@npm:*": - version: 4.0.9 - resolution: "@types/d3-scale@npm:4.0.9" - dependencies: - "@types/d3-time": "npm:*" - checksum: 10c0/4ac44233c05cd50b65b33ecb35d99fdf07566bcdbc55bc1306b2f27d1c5134d8c560d356f2c8e76b096e9125ffb8d26d95f78d56e210d1c542cb255bdf31d6c8 - languageName: node - linkType: hard - -"@types/d3-selection@npm:*": - version: 3.0.11 - resolution: "@types/d3-selection@npm:3.0.11" - checksum: 10c0/0c512956c7503ff5def4bb32e0c568cc757b9a2cc400a104fc0f4cfe5e56d83ebde2a97821b6f2cb26a7148079d3b86a2f28e11d68324ed311cf35c2ed980d1d - languageName: node - linkType: hard - -"@types/d3-shape@npm:*": - version: 3.1.8 - resolution: "@types/d3-shape@npm:3.1.8" - dependencies: - "@types/d3-path": "npm:*" - checksum: 10c0/49ec2172b9eb66fc1d036e2a23966216bb972e9af51ddbed134df24bd71aedf207bb1ef81903a119eb4e1f5e927cf44beacaf64c9af86474e5548594b102b574 - languageName: node - linkType: hard - -"@types/d3-time-format@npm:*": - version: 4.0.3 - resolution: "@types/d3-time-format@npm:4.0.3" - checksum: 10c0/9ef5e8e2b96b94799b821eed5d61a3d432c7903247966d8ad951b8ce5797fe46554b425cb7888fa5bf604b4663c369d7628c0328ffe80892156671c58d1a7f90 - languageName: node - linkType: hard - -"@types/d3-time@npm:*": - version: 3.0.4 - resolution: "@types/d3-time@npm:3.0.4" - checksum: 10c0/6d9e2255d63f7a313a543113920c612e957d70da4fb0890931da6c2459010291b8b1f95e149a538500c1c99e7e6c89ffcce5554dd29a31ff134a38ea94b6d174 - languageName: node - linkType: hard - -"@types/d3-timer@npm:*": - version: 3.0.2 - resolution: "@types/d3-timer@npm:3.0.2" - checksum: 10c0/c644dd9571fcc62b1aa12c03bcad40571553020feeb5811f1d8a937ac1e65b8a04b759b4873aef610e28b8714ac71c9885a4d6c127a048d95118f7e5b506d9e1 - languageName: node - linkType: hard - -"@types/d3-transition@npm:*": - version: 3.0.9 - resolution: "@types/d3-transition@npm:3.0.9" - dependencies: - "@types/d3-selection": "npm:*" - checksum: 10c0/4f68b9df7ac745b3491216c54203cbbfa0f117ae4c60e2609cdef2db963582152035407fdff995b10ee383bae2f05b7743493f48e1b8e46df54faa836a8fb7b5 - languageName: node - linkType: hard - -"@types/d3-zoom@npm:*": - version: 3.0.8 - resolution: "@types/d3-zoom@npm:3.0.8" - dependencies: - "@types/d3-interpolate": "npm:*" - "@types/d3-selection": "npm:*" - checksum: 10c0/1dbdbcafddcae12efb5beb6948546963f29599e18bc7f2a91fb69cc617c2299a65354f2d47e282dfb86fec0968406cd4fb7f76ba2d2fb67baa8e8d146eb4a547 - languageName: node - linkType: hard - -"@types/d3@npm:^7.4.3": - version: 7.4.3 - resolution: "@types/d3@npm:7.4.3" - dependencies: - "@types/d3-array": "npm:*" - "@types/d3-axis": "npm:*" - "@types/d3-brush": "npm:*" - "@types/d3-chord": "npm:*" - "@types/d3-color": "npm:*" - "@types/d3-contour": "npm:*" - "@types/d3-delaunay": "npm:*" - "@types/d3-dispatch": "npm:*" - "@types/d3-drag": "npm:*" - "@types/d3-dsv": "npm:*" - "@types/d3-ease": "npm:*" - "@types/d3-fetch": "npm:*" - "@types/d3-force": "npm:*" - "@types/d3-format": "npm:*" - "@types/d3-geo": "npm:*" - "@types/d3-hierarchy": "npm:*" - "@types/d3-interpolate": "npm:*" - "@types/d3-path": "npm:*" - "@types/d3-polygon": "npm:*" - "@types/d3-quadtree": "npm:*" - "@types/d3-random": "npm:*" - "@types/d3-scale": "npm:*" - "@types/d3-scale-chromatic": "npm:*" - "@types/d3-selection": "npm:*" - "@types/d3-shape": "npm:*" - "@types/d3-time": "npm:*" - "@types/d3-time-format": "npm:*" - "@types/d3-timer": "npm:*" - "@types/d3-transition": "npm:*" - "@types/d3-zoom": "npm:*" - checksum: 10c0/a9c6d65b13ef3b42c87f2a89ea63a6d5640221869f97d0657b0cb2f1dac96a0f164bf5605643c0794e0de3aa2bf05df198519aaf15d24ca135eb0e8bd8a9d879 - languageName: node - linkType: hard - "@types/debug@npm:^4.0.0": version: 4.1.13 resolution: "@types/debug@npm:4.1.13" @@ -2479,14 +2040,7 @@ __metadata: languageName: node linkType: hard -"@types/geojson@npm:*": - version: 7946.0.16 - resolution: "@types/geojson@npm:7946.0.16" - checksum: 10c0/1ff24a288bd5860b766b073ead337d31d73bdc715e5b50a2cee5cb0af57a1ed02cc04ef295f5fa68dc40fe3e4f104dd31282b2b818a5ba3231bc1001ba084e3c - languageName: node - linkType: hard - -"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": +"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.5": version: 3.0.5 resolution: "@types/hast@npm:3.0.5" dependencies: @@ -2495,13 +2049,6 @@ __metadata: languageName: node linkType: hard -"@types/katex@npm:^0.16.0": - version: 0.16.8 - resolution: "@types/katex@npm:0.16.8" - checksum: 10c0/0661609353f4f5e62bd2dc78da99e842761c6474b19f2268b195bbe9dbf20e6f766a31155d79eec2e7c3eff4e7eba4b30f4f519e9c6a11c75bb45e257a2ddb69 - languageName: node - linkType: hard - "@types/mdast@npm:^4.0.0": version: 4.0.4 resolution: "@types/mdast@npm:4.0.4" @@ -2545,13 +2092,6 @@ __metadata: languageName: node linkType: hard -"@types/trusted-types@npm:^2.0.7": - version: 2.0.7 - resolution: "@types/trusted-types@npm:2.0.7" - checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c - languageName: node - linkType: hard - "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.3 resolution: "@types/unist@npm:3.0.3" @@ -2573,21 +2113,6 @@ __metadata: languageName: node linkType: hard -"@upsetjs/venn.js@npm:^2.0.0": - version: 2.0.0 - resolution: "@upsetjs/venn.js@npm:2.0.0" - dependencies: - d3-selection: "npm:^3.0.0" - d3-transition: "npm:^3.0.1" - dependenciesMeta: - d3-selection: - optional: true - d3-transition: - optional: true - checksum: 10c0/b12014d94708ab4df7f5a4b6205c6f23ff235cca2ffe91df3314862b109b826e52f9020c2a2f7527d3712d21c578d6db9cdb60ce46a528739cc18e58d111f724 - languageName: node - linkType: hard - "@vercel/oidc@npm:3.2.0": version: 3.2.0 resolution: "@vercel/oidc@npm:3.2.0" @@ -2727,38 +2252,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:7": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a - languageName: node - linkType: hard - -"commander@npm:^8.3.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 - languageName: node - linkType: hard - -"cose-base@npm:^1.0.0": - version: 1.0.3 - resolution: "cose-base@npm:1.0.3" - dependencies: - layout-base: "npm:^1.0.0" - checksum: 10c0/a6e400b1d101393d6af0967c1353355777c1106c40417c5acaef6ca8bdda41e2fc9398f466d6c85be30290943ad631f2590569f67b3fd5368a0d8318946bd24f - languageName: node - linkType: hard - -"cose-base@npm:^2.2.0": - version: 2.2.0 - resolution: "cose-base@npm:2.2.0" - dependencies: - layout-base: "npm:^2.0.0" - checksum: 10c0/14b9f8100ac322a00777ffb1daeb3321af368bbc9cabe3103943361273baee2003202ffe38e4ab770960b600214224e9c196195a78d589521540aa694df7cdec - languageName: node - linkType: hard - "csstype@npm:^3.2.2": version: 3.2.3 resolution: "csstype@npm:3.2.3" @@ -2766,405 +2259,6 @@ __metadata: languageName: node linkType: hard -"cytoscape-cose-bilkent@npm:^4.1.0": - version: 4.1.0 - resolution: "cytoscape-cose-bilkent@npm:4.1.0" - dependencies: - cose-base: "npm:^1.0.0" - peerDependencies: - cytoscape: ^3.2.0 - checksum: 10c0/5e2480ddba9da1a68e700ed2c674cbfd51e9efdbd55788f1971a68de4eb30708e3b3a5e808bf5628f7a258680406bbe6586d87a9133e02a9bdc1ab1a92f512f2 - languageName: node - linkType: hard - -"cytoscape-fcose@npm:^2.2.0": - version: 2.2.0 - resolution: "cytoscape-fcose@npm:2.2.0" - dependencies: - cose-base: "npm:^2.2.0" - peerDependencies: - cytoscape: ^3.2.0 - checksum: 10c0/ce472c9f85b9057e75c5685396f8e1f2468895e71b184913e05ad56dcf3092618fe59a1054f29cb0995051ba8ebe566ad0dd49a58d62845145624bd60cd44917 - languageName: node - linkType: hard - -"cytoscape@npm:^3.33.3": - version: 3.34.0 - resolution: "cytoscape@npm:3.34.0" - checksum: 10c0/cb17b3dcacb9492f058cff653debf7b5a713e7532a9866cc72ae79d207757e8a9b68430874fe986f2a6404a8161b4fb5c1a2f1ca9ac5b1a21e316f57ed9d1243 - languageName: node - linkType: hard - -"d3-array@npm:1 - 2": - version: 2.12.1 - resolution: "d3-array@npm:2.12.1" - dependencies: - internmap: "npm:^1.0.0" - checksum: 10c0/7eca10427a9f113a4ca6a0f7301127cab26043fd5e362631ef5a0edd1c4b2dd70c56ed317566700c31e4a6d88b55f3951aaba192291817f243b730cb2352882e - languageName: node - linkType: hard - -"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:3, d3-array@npm:^3.2.0": - version: 3.2.4 - resolution: "d3-array@npm:3.2.4" - dependencies: - internmap: "npm:1 - 2" - checksum: 10c0/08b95e91130f98c1375db0e0af718f4371ccacef7d5d257727fe74f79a24383e79aba280b9ffae655483ffbbad4fd1dec4ade0119d88c4749f388641c8bf8c50 - languageName: node - linkType: hard - -"d3-axis@npm:3": - version: 3.0.0 - resolution: "d3-axis@npm:3.0.0" - checksum: 10c0/a271e70ba1966daa5aaf6a7f959ceca3e12997b43297e757c7b945db2e1ead3c6ee226f2abcfa22abbd4e2e28bd2b71a0911794c4e5b911bbba271328a582c78 - languageName: node - linkType: hard - -"d3-brush@npm:3": - version: 3.0.0 - resolution: "d3-brush@npm:3.0.0" - dependencies: - d3-dispatch: "npm:1 - 3" - d3-drag: "npm:2 - 3" - d3-interpolate: "npm:1 - 3" - d3-selection: "npm:3" - d3-transition: "npm:3" - checksum: 10c0/07baf00334c576da2f68a91fc0da5732c3a5fa19bd3d7aed7fd24d1d674a773f71a93e9687c154176f7246946194d77c48c2d8fed757f5dcb1a4740067ec50a8 - languageName: node - linkType: hard - -"d3-chord@npm:3": - version: 3.0.1 - resolution: "d3-chord@npm:3.0.1" - dependencies: - d3-path: "npm:1 - 3" - checksum: 10c0/baa6013914af3f4fe1521f0d16de31a38eb8a71d08ff1dec4741f6f45a828661e5cd3935e39bd14e3032bdc78206c283ca37411da21d46ec3cfc520be6e7a7ce - languageName: node - linkType: hard - -"d3-color@npm:1 - 3, d3-color@npm:3": - version: 3.1.0 - resolution: "d3-color@npm:3.1.0" - checksum: 10c0/a4e20e1115fa696fce041fbe13fbc80dc4c19150fa72027a7c128ade980bc0eeeba4bcf28c9e21f0bce0e0dbfe7ca5869ef67746541dcfda053e4802ad19783c - languageName: node - linkType: hard - -"d3-contour@npm:4": - version: 4.0.2 - resolution: "d3-contour@npm:4.0.2" - dependencies: - d3-array: "npm:^3.2.0" - checksum: 10c0/98bc5fbed6009e08707434a952076f39f1cd6ed8b9288253cc3e6a3286e4e80c63c62d84954b20e64bf6e4ededcc69add54d3db25e990784a59c04edd3449032 - languageName: node - linkType: hard - -"d3-delaunay@npm:6": - version: 6.0.4 - resolution: "d3-delaunay@npm:6.0.4" - dependencies: - delaunator: "npm:5" - checksum: 10c0/57c3aecd2525664b07c4c292aa11cf49b2752c0cf3f5257f752999399fe3c592de2d418644d79df1f255471eec8057a9cc0c3062ed7128cb3348c45f69597754 - languageName: node - linkType: hard - -"d3-dispatch@npm:1 - 3, d3-dispatch@npm:3": - version: 3.0.1 - resolution: "d3-dispatch@npm:3.0.1" - checksum: 10c0/6eca77008ce2dc33380e45d4410c67d150941df7ab45b91d116dbe6d0a3092c0f6ac184dd4602c796dc9e790222bad3ff7142025f5fd22694efe088d1d941753 - languageName: node - linkType: hard - -"d3-drag@npm:2 - 3, d3-drag@npm:3": - version: 3.0.0 - resolution: "d3-drag@npm:3.0.0" - dependencies: - d3-dispatch: "npm:1 - 3" - d3-selection: "npm:3" - checksum: 10c0/d2556e8dc720741a443b595a30af403dd60642dfd938d44d6e9bfc4c71a962142f9a028c56b61f8b4790b65a34acad177d1263d66f103c3c527767b0926ef5aa - languageName: node - linkType: hard - -"d3-dsv@npm:1 - 3, d3-dsv@npm:3": - version: 3.0.1 - resolution: "d3-dsv@npm:3.0.1" - dependencies: - commander: "npm:7" - iconv-lite: "npm:0.6" - rw: "npm:1" - bin: - csv2json: bin/dsv2json.js - csv2tsv: bin/dsv2dsv.js - dsv2dsv: bin/dsv2dsv.js - dsv2json: bin/dsv2json.js - json2csv: bin/json2dsv.js - json2dsv: bin/json2dsv.js - json2tsv: bin/json2dsv.js - tsv2csv: bin/dsv2dsv.js - tsv2json: bin/dsv2json.js - checksum: 10c0/10e6af9e331950ed258f34ab49ac1b7060128ef81dcf32afc790bd1f7e8c3cc2aac7f5f875250a83f21f39bb5925fbd0872bb209f8aca32b3b77d32bab8a65ab - languageName: node - linkType: hard - -"d3-ease@npm:1 - 3, d3-ease@npm:3": - version: 3.0.1 - resolution: "d3-ease@npm:3.0.1" - checksum: 10c0/fec8ef826c0cc35cda3092c6841e07672868b1839fcaf556e19266a3a37e6bc7977d8298c0fcb9885e7799bfdcef7db1baaba9cd4dcf4bc5e952cf78574a88b0 - languageName: node - linkType: hard - -"d3-fetch@npm:3": - version: 3.0.1 - resolution: "d3-fetch@npm:3.0.1" - dependencies: - d3-dsv: "npm:1 - 3" - checksum: 10c0/4f467a79bf290395ac0cbb5f7562483f6a18668adc4c8eb84c9d3eff048b6f6d3b6f55079ba1ebf1908dabe000c941d46be447f8d78453b2dad5fb59fb6aa93b - languageName: node - linkType: hard - -"d3-force@npm:3": - version: 3.0.0 - resolution: "d3-force@npm:3.0.0" - dependencies: - d3-dispatch: "npm:1 - 3" - d3-quadtree: "npm:1 - 3" - d3-timer: "npm:1 - 3" - checksum: 10c0/220a16a1a1ac62ba56df61028896e4b52be89c81040d20229c876efc8852191482c233f8a52bb5a4e0875c321b8e5cb6413ef3dfa4d8fe79eeb7d52c587f52cf - languageName: node - linkType: hard - -"d3-format@npm:1 - 3, d3-format@npm:3": - version: 3.1.2 - resolution: "d3-format@npm:3.1.2" - checksum: 10c0/0de452ae07585238e7f01607a7e0066665c34609652188b6ac7dc9f424f69465a425e07d16d79bd0e5955202ac7f241c66d0c76f68a79fc6f4857c94cf420652 - languageName: node - linkType: hard - -"d3-geo@npm:3": - version: 3.1.1 - resolution: "d3-geo@npm:3.1.1" - dependencies: - d3-array: "npm:2.5.0 - 3" - checksum: 10c0/d32270dd2dc8ac3ea63e8805d63239c4c8ec6c0d339d73b5e5a30a87f8f54db22a78fb434369799465eae169503b25f9a107c642c8a16c32a3285bc0e6d8e8c1 - languageName: node - linkType: hard - -"d3-hierarchy@npm:3": - version: 3.1.2 - resolution: "d3-hierarchy@npm:3.1.2" - checksum: 10c0/6dcdb480539644aa7fc0d72dfc7b03f99dfbcdf02714044e8c708577e0d5981deb9d3e99bbbb2d26422b55bcc342ac89a0fa2ea6c9d7302e2fc0951dd96f89cf - languageName: node - linkType: hard - -"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:3": - version: 3.0.1 - resolution: "d3-interpolate@npm:3.0.1" - dependencies: - d3-color: "npm:1 - 3" - checksum: 10c0/19f4b4daa8d733906671afff7767c19488f51a43d251f8b7f484d5d3cfc36c663f0a66c38fe91eee30f40327443d799be17169f55a293a3ba949e84e57a33e6a - languageName: node - linkType: hard - -"d3-path@npm:1": - version: 1.0.9 - resolution: "d3-path@npm:1.0.9" - checksum: 10c0/e35e84df5abc18091f585725b8235e1fa97efc287571585427d3a3597301e6c506dea56b11dfb3c06ca5858b3eb7f02c1bf4f6a716aa9eade01c41b92d497eb5 - languageName: node - linkType: hard - -"d3-path@npm:1 - 3, d3-path@npm:3, d3-path@npm:^3.1.0": - version: 3.1.0 - resolution: "d3-path@npm:3.1.0" - checksum: 10c0/dc1d58ec87fa8319bd240cf7689995111a124b141428354e9637aa83059eb12e681f77187e0ada5dedfce346f7e3d1f903467ceb41b379bfd01cd8e31721f5da - languageName: node - linkType: hard - -"d3-polygon@npm:3": - version: 3.0.1 - resolution: "d3-polygon@npm:3.0.1" - checksum: 10c0/e236aa7f33efa9a4072907af7dc119f85b150a0716759d4fe5f12f62573018264a6cbde8617fbfa6944a7ae48c1c0c8d3f39ae72e11f66dd471e9b5e668385df - languageName: node - linkType: hard - -"d3-quadtree@npm:1 - 3, d3-quadtree@npm:3": - version: 3.0.1 - resolution: "d3-quadtree@npm:3.0.1" - checksum: 10c0/18302d2548bfecaef788152397edec95a76400fd97d9d7f42a089ceb68d910f685c96579d74e3712d57477ed042b056881b47cd836a521de683c66f47ce89090 - languageName: node - linkType: hard - -"d3-random@npm:3": - version: 3.0.1 - resolution: "d3-random@npm:3.0.1" - checksum: 10c0/987a1a1bcbf26e6cf01fd89d5a265b463b2cea93560fc17d9b1c45e8ed6ff2db5924601bcceb808de24c94133f000039eb7fa1c469a7a844ccbf1170cbb25b41 - languageName: node - linkType: hard - -"d3-sankey@npm:^0.12.3": - version: 0.12.3 - resolution: "d3-sankey@npm:0.12.3" - dependencies: - d3-array: "npm:1 - 2" - d3-shape: "npm:^1.2.0" - checksum: 10c0/261debb01a13269f6fc53b9ebaef174a015d5ad646242c23995bf514498829ab8b8f920a7873724a7494288b46bea3ce7ebc5a920b745bc8ae4caa5885cf5204 - languageName: node - linkType: hard - -"d3-scale-chromatic@npm:3": - version: 3.1.0 - resolution: "d3-scale-chromatic@npm:3.1.0" - dependencies: - d3-color: "npm:1 - 3" - d3-interpolate: "npm:1 - 3" - checksum: 10c0/9a3f4671ab0b971f4a411b42180d7cf92bfe8e8584e637ce7e698d705e18d6d38efbd20ec64f60cc0dfe966c20d40fc172565bc28aaa2990c0a006360eed91af - languageName: node - linkType: hard - -"d3-scale@npm:4": - version: 4.0.2 - resolution: "d3-scale@npm:4.0.2" - dependencies: - d3-array: "npm:2.10.0 - 3" - d3-format: "npm:1 - 3" - d3-interpolate: "npm:1.2.0 - 3" - d3-time: "npm:2.1.1 - 3" - d3-time-format: "npm:2 - 4" - checksum: 10c0/65d9ad8c2641aec30ed5673a7410feb187a224d6ca8d1a520d68a7d6eac9d04caedbff4713d1e8545be33eb7fec5739983a7ab1d22d4e5ad35368c6729d362f1 - languageName: node - linkType: hard - -"d3-selection@npm:2 - 3, d3-selection@npm:3, d3-selection@npm:^3.0.0": - version: 3.0.0 - resolution: "d3-selection@npm:3.0.0" - checksum: 10c0/e59096bbe8f0cb0daa1001d9bdd6dbc93a688019abc97d1d8b37f85cd3c286a6875b22adea0931b0c88410d025563e1643019161a883c516acf50c190a11b56b - languageName: node - linkType: hard - -"d3-shape@npm:3": - version: 3.2.0 - resolution: "d3-shape@npm:3.2.0" - dependencies: - d3-path: "npm:^3.1.0" - checksum: 10c0/f1c9d1f09926daaf6f6193ae3b4c4b5521e81da7d8902d24b38694517c7f527ce3c9a77a9d3a5722ad1e3ff355860b014557b450023d66a944eabf8cfde37132 - languageName: node - linkType: hard - -"d3-shape@npm:^1.2.0": - version: 1.3.7 - resolution: "d3-shape@npm:1.3.7" - dependencies: - d3-path: "npm:1" - checksum: 10c0/548057ce59959815decb449f15632b08e2a1bdce208f9a37b5f98ec7629dda986c2356bc7582308405ce68aedae7d47b324df41507404df42afaf352907577ae - languageName: node - linkType: hard - -"d3-time-format@npm:2 - 4, d3-time-format@npm:4": - version: 4.1.0 - resolution: "d3-time-format@npm:4.1.0" - dependencies: - d3-time: "npm:1 - 3" - checksum: 10c0/735e00fb25a7fd5d418fac350018713ae394eefddb0d745fab12bbff0517f9cdb5f807c7bbe87bb6eeb06249662f8ea84fec075f7d0cd68609735b2ceb29d206 - languageName: node - linkType: hard - -"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:3": - version: 3.1.0 - resolution: "d3-time@npm:3.1.0" - dependencies: - d3-array: "npm:2 - 3" - checksum: 10c0/a984f77e1aaeaa182679b46fbf57eceb6ebdb5f67d7578d6f68ef933f8eeb63737c0949991618a8d29472dbf43736c7d7f17c452b2770f8c1271191cba724ca1 - languageName: node - linkType: hard - -"d3-timer@npm:1 - 3, d3-timer@npm:3": - version: 3.0.1 - resolution: "d3-timer@npm:3.0.1" - checksum: 10c0/d4c63cb4bb5461d7038aac561b097cd1c5673969b27cbdd0e87fa48d9300a538b9e6f39b4a7f0e3592ef4f963d858c8a9f0e92754db73116770856f2fc04561a - languageName: node - linkType: hard - -"d3-transition@npm:2 - 3, d3-transition@npm:3, d3-transition@npm:^3.0.1": - version: 3.0.1 - resolution: "d3-transition@npm:3.0.1" - dependencies: - d3-color: "npm:1 - 3" - d3-dispatch: "npm:1 - 3" - d3-ease: "npm:1 - 3" - d3-interpolate: "npm:1 - 3" - d3-timer: "npm:1 - 3" - peerDependencies: - d3-selection: 2 - 3 - checksum: 10c0/4e74535dda7024aa43e141635b7522bb70cf9d3dfefed975eb643b36b864762eca67f88fafc2ca798174f83ca7c8a65e892624f824b3f65b8145c6a1a88dbbad - languageName: node - linkType: hard - -"d3-zoom@npm:3": - version: 3.0.0 - resolution: "d3-zoom@npm:3.0.0" - dependencies: - d3-dispatch: "npm:1 - 3" - d3-drag: "npm:2 - 3" - d3-interpolate: "npm:1 - 3" - d3-selection: "npm:2 - 3" - d3-transition: "npm:2 - 3" - checksum: 10c0/ee2036479049e70d8c783d594c444fe00e398246048e3f11a59755cd0e21de62ece3126181b0d7a31bf37bcf32fd726f83ae7dea4495ff86ec7736ce5ad36fd3 - languageName: node - linkType: hard - -"d3@npm:^7.9.0": - version: 7.9.0 - resolution: "d3@npm:7.9.0" - dependencies: - d3-array: "npm:3" - d3-axis: "npm:3" - d3-brush: "npm:3" - d3-chord: "npm:3" - d3-color: "npm:3" - d3-contour: "npm:4" - d3-delaunay: "npm:6" - d3-dispatch: "npm:3" - d3-drag: "npm:3" - d3-dsv: "npm:3" - d3-ease: "npm:3" - d3-fetch: "npm:3" - d3-force: "npm:3" - d3-format: "npm:3" - d3-geo: "npm:3" - d3-hierarchy: "npm:3" - d3-interpolate: "npm:3" - d3-path: "npm:3" - d3-polygon: "npm:3" - d3-quadtree: "npm:3" - d3-random: "npm:3" - d3-scale: "npm:4" - d3-scale-chromatic: "npm:3" - d3-selection: "npm:3" - d3-shape: "npm:3" - d3-time: "npm:3" - d3-time-format: "npm:4" - d3-timer: "npm:3" - d3-transition: "npm:3" - d3-zoom: "npm:3" - checksum: 10c0/3dd9c08c73cfaa69c70c49e603c85e049c3904664d9c79a1a52a0f52795828a1ff23592dc9a7b2257e711d68a615472a13103c212032f38e016d609796e087e8 - languageName: node - linkType: hard - -"dagre-d3-es@npm:7.0.14": - version: 7.0.14 - resolution: "dagre-d3-es@npm:7.0.14" - dependencies: - d3: "npm:^7.9.0" - lodash-es: "npm:^4.17.21" - checksum: 10c0/0dc91fc79300eb0a4eab5a48a76c2baf3ce439c389d19e2f015729bb57dafd75e1e9a4c2880daf016e81ee45caca7b21745c13b23b6cd2a786ce84767e88323e - languageName: node - linkType: hard - -"dayjs@npm:^1.11.20": - version: 1.11.21 - resolution: "dayjs@npm:1.11.21" - checksum: 10c0/bd97dfdc4bfea3c66268635690313828b386faa040fbc1f829ff42a2bd748b72c9d9b3c8f9616ce9e61fcb78923f1461a462c969c54b1084458ae1b715898fb0 - languageName: node - linkType: hard - "debug@npm:^4.0.0": version: 4.4.3 resolution: "debug@npm:4.4.3" @@ -3186,15 +2280,6 @@ __metadata: languageName: node linkType: hard -"delaunator@npm:5": - version: 5.1.0 - resolution: "delaunator@npm:5.1.0" - dependencies: - robust-predicates: "npm:^3.0.2" - checksum: 10c0/6489e3598212ab8759575e30f3ac26063471846e25c779048f441f2ccefd25efb9a52275e7e8e3dcc5bf5bc5c35169cf1de27f985d359fd5a24057be88fd1817 - languageName: node - linkType: hard - "dequal@npm:^2.0.0, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" @@ -3225,18 +2310,6 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^3.3.3": - version: 3.4.12 - resolution: "dompurify@npm:3.4.12" - dependencies: - "@types/trusted-types": "npm:^2.0.7" - dependenciesMeta: - "@types/trusted-types": - optional: true - checksum: 10c0/127a13817353d4e20e75a991a9022a04c3af12af7479f68e2b8bee6dbc7330a96edfb8f4ebff96f4f0f24cd43e8dbba46214131f510c3aa87a843bd8b610d0ab - languageName: node - linkType: hard - "embla-carousel-react@npm:^8.6.0": version: 8.6.0 resolution: "embla-carousel-react@npm:8.6.0" @@ -3275,27 +2348,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^6.0.0": - version: 6.0.1 - resolution: "entities@npm:6.0.1" - checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414 - languageName: node - linkType: hard - -"es-toolkit@npm:^1.45.1": - version: 1.50.0 - resolution: "es-toolkit@npm:1.50.0" - dependenciesMeta: - "@trivago/prettier-plugin-sort-imports@4.3.0": - unplugged: true - prettier-plugin-sort-re-exports@0.0.1: - unplugged: true - vitepress-plugin-sandpack@1.1.4: - unplugged: true - checksum: 10c0/80e3a212d337df6f20ed0330d1b62dda25f3ef6d4c83a33f13d521ccbf5b4ad1ac3e7e638572abd6080627f522707de76a5c9360350b713e5392739083ee1f24 - languageName: node - linkType: hard - "escape-string-regexp@npm:^5.0.0": version: 5.0.0 resolution: "escape-string-regexp@npm:5.0.0" @@ -3368,13 +2420,6 @@ __metadata: languageName: node linkType: hard -"get-east-asian-width@npm:^1.4.0": - version: 1.6.0 - resolution: "get-east-asian-width@npm:1.6.0" - checksum: 10c0/7e72e9550fd49ca5b246f9af6bb2afc129c96412845ff6556b3274fd44817a381702ca17028efe9866b261a3d44254cbf21e6c90cf05b4b61675630af776d431 - languageName: node - linkType: hard - "get-nonce@npm:^1.0.0": version: 1.0.1 resolution: "get-nonce@npm:1.0.1" @@ -3389,105 +2434,6 @@ __metadata: languageName: node linkType: hard -"hachure-fill@npm:^0.5.2": - version: 0.5.2 - resolution: "hachure-fill@npm:0.5.2" - checksum: 10c0/307e3b6f9f2d3c11a82099c3f71eecbb9c440c00c1f896ac1732c23e6dbff16a92bb893d222b8b721b89cf11e58649ca60b4c24e5663f705f877cefd40153429 - languageName: node - linkType: hard - -"hast-util-from-dom@npm:^5.0.0": - version: 5.0.1 - resolution: "hast-util-from-dom@npm:5.0.1" - dependencies: - "@types/hast": "npm:^3.0.0" - hastscript: "npm:^9.0.0" - web-namespaces: "npm:^2.0.0" - checksum: 10c0/9a90381e048107a093a3da758bb17b67aaf5322e222f02497f841c4990abf94aa177d38d5b9bf61ad07b3601d0409f34f5b556d89578cc189230c6b994d2af77 - languageName: node - linkType: hard - -"hast-util-from-html-isomorphic@npm:^2.0.0": - version: 2.0.0 - resolution: "hast-util-from-html-isomorphic@npm:2.0.0" - dependencies: - "@types/hast": "npm:^3.0.0" - hast-util-from-dom: "npm:^5.0.0" - hast-util-from-html: "npm:^2.0.0" - unist-util-remove-position: "npm:^5.0.0" - checksum: 10c0/fc68d9245e794483a802d5c85a9f6c25959e00db78cc796411efc965134f3206f9cc9fa38134572ea781ad74663e801f1f83202007b208e27a770855566a62b6 - languageName: node - linkType: hard - -"hast-util-from-html@npm:^2.0.0": - version: 2.0.3 - resolution: "hast-util-from-html@npm:2.0.3" - dependencies: - "@types/hast": "npm:^3.0.0" - devlop: "npm:^1.1.0" - hast-util-from-parse5: "npm:^8.0.0" - parse5: "npm:^7.0.0" - vfile: "npm:^6.0.0" - vfile-message: "npm:^4.0.0" - checksum: 10c0/993ef707c1a12474c8d4094fc9706a72826c660a7e308ea54c50ad893353d32e139b7cbc67510c2e82feac572b320e3b05aeb13d0f9c6302d61261f337b46764 - languageName: node - linkType: hard - -"hast-util-from-parse5@npm:^8.0.0": - version: 8.0.3 - resolution: "hast-util-from-parse5@npm:8.0.3" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/unist": "npm:^3.0.0" - devlop: "npm:^1.0.0" - hastscript: "npm:^9.0.0" - property-information: "npm:^7.0.0" - vfile: "npm:^6.0.0" - vfile-location: "npm:^5.0.0" - web-namespaces: "npm:^2.0.0" - checksum: 10c0/40ace6c0ad43c26f721c7499fe408e639cde917b2350c9299635e6326559855896dae3c3ebf7440df54766b96c4276a7823e8f376a2b6a28b37b591f03412545 - languageName: node - linkType: hard - -"hast-util-is-element@npm:^3.0.0": - version: 3.0.0 - resolution: "hast-util-is-element@npm:3.0.0" - dependencies: - "@types/hast": "npm:^3.0.0" - checksum: 10c0/f5361e4c9859c587ca8eb0d8343492f3077ccaa0f58a44cd09f35d5038f94d65152288dcd0c19336ef2c9491ec4d4e45fde2176b05293437021570aa0bc3613b - languageName: node - linkType: hard - -"hast-util-parse-selector@npm:^4.0.0": - version: 4.0.0 - resolution: "hast-util-parse-selector@npm:4.0.0" - dependencies: - "@types/hast": "npm:^3.0.0" - checksum: 10c0/5e98168cb44470dc274aabf1a28317e4feb09b1eaf7a48bbaa8c1de1b43a89cd195cb1284e535698e658e3ec26ad91bc5e52c9563c36feb75abbc68aaf68fb9f - languageName: node - linkType: hard - -"hast-util-raw@npm:^9.0.0": - version: 9.1.0 - resolution: "hast-util-raw@npm:9.1.0" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/unist": "npm:^3.0.0" - "@ungap/structured-clone": "npm:^1.0.0" - hast-util-from-parse5: "npm:^8.0.0" - hast-util-to-parse5: "npm:^8.0.0" - html-void-elements: "npm:^3.0.0" - mdast-util-to-hast: "npm:^13.0.0" - parse5: "npm:^7.0.0" - unist-util-position: "npm:^5.0.0" - unist-util-visit: "npm:^5.0.0" - vfile: "npm:^6.0.0" - web-namespaces: "npm:^2.0.0" - zwitch: "npm:^2.0.0" - checksum: 10c0/d0d909d2aedecef6a06f0005cfae410d6475e6e182d768bde30c3af9fcbbe4f9beb0522bdc21d0679cb3c243c0df40385797ed255148d68b3d3f12e82d12aacc - languageName: node - linkType: hard - "hast-util-sanitize@npm:^5.0.0": version: 5.0.2 resolution: "hast-util-sanitize@npm:5.0.2" @@ -3499,25 +2445,6 @@ __metadata: languageName: node linkType: hard -"hast-util-to-html@npm:^9.0.5": - version: 9.0.5 - resolution: "hast-util-to-html@npm:9.0.5" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/unist": "npm:^3.0.0" - ccount: "npm:^2.0.0" - comma-separated-tokens: "npm:^2.0.0" - hast-util-whitespace: "npm:^3.0.0" - html-void-elements: "npm:^3.0.0" - mdast-util-to-hast: "npm:^13.0.0" - property-information: "npm:^7.0.0" - space-separated-tokens: "npm:^2.0.0" - stringify-entities: "npm:^4.0.0" - zwitch: "npm:^2.0.4" - checksum: 10c0/b7a08c30bab4371fc9b4a620965c40b270e5ae7a8e94cf885f43b21705179e28c8e43b39c72885d1647965fb3738654e6962eb8b58b0c2a84271655b4d748836 - languageName: node - linkType: hard - "hast-util-to-jsx-runtime@npm:^2.3.6": version: 2.3.6 resolution: "hast-util-to-jsx-runtime@npm:2.3.6" @@ -3541,33 +2468,6 @@ __metadata: languageName: node linkType: hard -"hast-util-to-parse5@npm:^8.0.0": - version: 8.0.1 - resolution: "hast-util-to-parse5@npm:8.0.1" - dependencies: - "@types/hast": "npm:^3.0.0" - comma-separated-tokens: "npm:^2.0.0" - devlop: "npm:^1.0.0" - property-information: "npm:^7.0.0" - space-separated-tokens: "npm:^2.0.0" - web-namespaces: "npm:^2.0.0" - zwitch: "npm:^2.0.0" - checksum: 10c0/8e8a1817c7ff8906ac66e7201b1b8d19d9e1b705e695a6e71620270d498d982ec1ecc0e227bd517f723e91e7fdfb90ef75f9ae64d14b3b65239a7d5e1194d7dd - languageName: node - linkType: hard - -"hast-util-to-text@npm:^4.0.0": - version: 4.0.2 - resolution: "hast-util-to-text@npm:4.0.2" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/unist": "npm:^3.0.0" - hast-util-is-element: "npm:^3.0.0" - unist-util-find-after: "npm:^5.0.0" - checksum: 10c0/93ecc10e68fe5391c6e634140eb330942e71dea2724c8e0c647c73ed74a8ec930a4b77043b5081284808c96f73f2bee64ee416038ece75a63a467e8d14f09946 - languageName: node - linkType: hard - "hast-util-whitespace@npm:^3.0.0": version: 3.0.0 resolution: "hast-util-whitespace@npm:3.0.0" @@ -3577,49 +2477,6 @@ __metadata: languageName: node linkType: hard -"hastscript@npm:^9.0.0": - version: 9.0.1 - resolution: "hastscript@npm:9.0.1" - dependencies: - "@types/hast": "npm:^3.0.0" - comma-separated-tokens: "npm:^2.0.0" - hast-util-parse-selector: "npm:^4.0.0" - property-information: "npm:^7.0.0" - space-separated-tokens: "npm:^2.0.0" - checksum: 10c0/18dc8064e5c3a7a2ae862978e626b97a254e1c8a67ee9d0c9f06d373bba155ed805fc5b5ce21b990fb7bc174624889e5e1ce1cade264f1b1d58b48f994bc85ce - languageName: node - linkType: hard - -"html-url-attributes@npm:^3.0.1": - version: 3.0.1 - resolution: "html-url-attributes@npm:3.0.1" - checksum: 10c0/496e4908aa8b77665f348b4b03521901794f648b8ac34a581022cd6f2c97934d5c910cd91bc6593bbf2994687549037bc2520fcdc769b31484f29ffdd402acd0 - languageName: node - linkType: hard - -"html-void-elements@npm:^3.0.0": - version: 3.0.0 - resolution: "html-void-elements@npm:3.0.0" - checksum: 10c0/a8b9ec5db23b7c8053876dad73a0336183e6162bf6d2677376d8b38d654fdc59ba74fdd12f8812688f7db6fad451210c91b300e472afc0909224e0a44c8610d2 - languageName: node - linkType: hard - -"iconv-lite@npm:0.6": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"import-meta-resolve@npm:^4.2.0": - version: 4.2.0 - resolution: "import-meta-resolve@npm:4.2.0" - checksum: 10c0/3ee8aeecb61d19b49d2703987f977e9d1c7d4ba47db615a570eaa02fe414f40dfa63f7b953e842cbe8470d26df6371332bfcf21b2fd92b0112f9fea80dde2c4c - languageName: node - linkType: hard - "inline-style-parser@npm:0.2.7": version: 0.2.7 resolution: "inline-style-parser@npm:0.2.7" @@ -3637,20 +2494,6 @@ __metadata: languageName: node linkType: hard -"internmap@npm:1 - 2": - version: 2.0.3 - resolution: "internmap@npm:2.0.3" - checksum: 10c0/8cedd57f07bbc22501516fbfc70447f0c6812871d471096fad9ea603516eacc2137b633633daf432c029712df0baefd793686388ddf5737e3ea15074b877f7ed - languageName: node - linkType: hard - -"internmap@npm:^1.0.0": - version: 1.0.1 - resolution: "internmap@npm:1.0.1" - checksum: 10c0/60942be815ca19da643b6d4f23bd0bf4e8c97abbd080fb963fe67583b60bdfb3530448ad4486bae40810e92317bded9995cc31411218acc750d72cd4e8646eee - languageName: node - linkType: hard - "is-alphabetical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphabetical@npm:2.0.1" @@ -3705,38 +2548,6 @@ __metadata: languageName: node linkType: hard -"katex@npm:^0.16.0, katex@npm:^0.16.27, katex@npm:^0.16.45": - version: 0.16.47 - resolution: "katex@npm:0.16.47" - dependencies: - commander: "npm:^8.3.0" - bin: - katex: cli.js - checksum: 10c0/b10f4d0651c60771a48444879e4227255e26e2b2ec061b1ee4b08934863ad2324ba8dbb772455f7768aeb14dfcc13bcd309174a0ddd5ef954a607f644a197710 - languageName: node - linkType: hard - -"khroma@npm:^2.1.0": - version: 2.1.0 - resolution: "khroma@npm:2.1.0" - checksum: 10c0/634d98753ff5d2540491cafeb708fc98de0d43f4e6795256d5c8f6e3ad77de93049ea41433928fda3697adf7bbe6fe27351858f6d23b78f8b5775ef314c59891 - languageName: node - linkType: hard - -"layout-base@npm:^1.0.0": - version: 1.0.2 - resolution: "layout-base@npm:1.0.2" - checksum: 10c0/2a55d0460fd9f6ed53d7e301b9eb3dea19bda03815d616a40665ce6dc75c1f4d62e1ca19a897da1cfaf6de1b91de59cd6f2f79ba1258f3d7fccc7d46ca7f3337 - languageName: node - linkType: hard - -"layout-base@npm:^2.0.0": - version: 2.0.1 - resolution: "layout-base@npm:2.0.1" - checksum: 10c0/a44df9ef3cbff9916a10f616635e22b5787c89fa62b2fec6f99e8e6ee512c7cebd22668ce32dab5a83c934ba0a309c51a678aa0b40d70853de6c357893c0a88b - languageName: node - linkType: hard - "lightningcss-android-arm64@npm:1.32.0": version: 1.32.0 resolution: "lightningcss-android-arm64@npm:1.32.0" @@ -3857,13 +2668,6 @@ __metadata: languageName: node linkType: hard -"lodash-es@npm:^4.17.21": - version: 4.18.1 - resolution: "lodash-es@npm:4.18.1" - checksum: 10c0/35d4dcf87ef07f8d090f409447575800108057e360b445f590d0d25d09e3d1e33a163d2fc100d4d072b0f901d5e2fc533cd7c4bfd8eeb38a06abec693823c8b8 - languageName: node - linkType: hard - "longest-streak@npm:^3.0.0": version: 3.1.0 resolution: "longest-streak@npm:3.1.0" @@ -3896,24 +2700,6 @@ __metadata: languageName: node linkType: hard -"marked@npm:^16.3.0": - version: 16.4.2 - resolution: "marked@npm:16.4.2" - bin: - marked: bin/marked.js - checksum: 10c0/fc6051142172454f2023f3d6b31cca92879ec8e1b96457086a54c70354c74b00e1b6543a76a1fad6d399366f52b90a848f6ffb8e1d65a5baff87f3ba9b8f1847 - languageName: node - linkType: hard - -"marked@npm:^17.0.1": - version: 17.0.6 - resolution: "marked@npm:17.0.6" - bin: - marked: bin/marked.js - checksum: 10c0/77961fbb360511d6638491e097cb15b1ef5e643f27c25b9cd52aa3cd92e216fc3cda7dbfc6a10adb7922d1b38df132510df65de4afe6c53c7280772c9d4221bd - languageName: node - linkType: hard - "mdast-util-find-and-replace@npm:^3.0.0": version: 3.0.2 resolution: "mdast-util-find-and-replace@npm:3.0.2" @@ -4023,21 +2809,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-math@npm:^3.0.0": - version: 3.0.0 - resolution: "mdast-util-math@npm:3.0.0" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/mdast": "npm:^4.0.0" - devlop: "npm:^1.0.0" - longest-streak: "npm:^3.0.0" - mdast-util-from-markdown: "npm:^2.0.0" - mdast-util-to-markdown: "npm:^2.1.0" - unist-util-remove-position: "npm:^5.0.0" - checksum: 10c0/d4e839e38719f26872ed78aac18339805a892f1b56585a9cb8668f34e221b4f0660b9dfe49ec96dbbe79fd1b63b648608a64046d8286bcd2f9d576e80b48a0a1 - languageName: node - linkType: hard - "mdast-util-mdx-expression@npm:^2.0.0": version: 2.0.1 resolution: "mdast-util-mdx-expression@npm:2.0.1" @@ -4113,40 +2884,7 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-markdown-cjk-friendly-gfm-strikethrough@npm:1.0.0": - version: 1.0.0 - resolution: "mdast-util-to-markdown-cjk-friendly-gfm-strikethrough@npm:1.0.0" - dependencies: - mdast-util-gfm-strikethrough: "npm:^2.0.0" - mdast-util-to-markdown: "npm:^2.1.2" - micromark-extension-cjk-friendly-util: "npm:3.0.1" - micromark-util-symbol: "npm:^2.0.1" - peerDependencies: - "@types/mdast": "*" - peerDependenciesMeta: - "@types/mdast": - optional: true - checksum: 10c0/dc03d1001d8f5d2b33134935daa162d8f5bd307f1dc93af5b257487bdb216a0b60434d238c8f4f762f77c99767838a2f1f0790d355b711318df1de4f95072953 - languageName: node - linkType: hard - -"mdast-util-to-markdown-cjk-friendly@npm:1.0.0": - version: 1.0.0 - resolution: "mdast-util-to-markdown-cjk-friendly@npm:1.0.0" - dependencies: - mdast-util-to-markdown: "npm:^2.1.2" - micromark-extension-cjk-friendly-util: "npm:3.0.1" - micromark-util-symbol: "npm:^2.0.1" - peerDependencies: - "@types/mdast": "*" - peerDependenciesMeta: - "@types/mdast": - optional: true - checksum: 10c0/5fedb40578f136f74921abd3457626637328ddec8d0e60f490ee7c69b10308d5a580faa627a06a11303985d2c714ad46a883d4a436015c0e9639bd333b54ec6b - languageName: node - linkType: hard - -"mdast-util-to-markdown@npm:^2.0.0, mdast-util-to-markdown@npm:^2.1.0, mdast-util-to-markdown@npm:^2.1.2": +"mdast-util-to-markdown@npm:^2.0.0": version: 2.1.2 resolution: "mdast-util-to-markdown@npm:2.1.2" dependencies: @@ -4172,35 +2910,6 @@ __metadata: languageName: node linkType: hard -"mermaid@npm:^11.12.2": - version: 11.16.0 - resolution: "mermaid@npm:11.16.0" - dependencies: - "@braintree/sanitize-url": "npm:^7.1.2" - "@iconify/utils": "npm:^3.0.2" - "@mermaid-js/parser": "npm:^1.2.0" - "@types/d3": "npm:^7.4.3" - "@upsetjs/venn.js": "npm:^2.0.0" - cytoscape: "npm:^3.33.3" - cytoscape-cose-bilkent: "npm:^4.1.0" - cytoscape-fcose: "npm:^2.2.0" - d3: "npm:^7.9.0" - d3-sankey: "npm:^0.12.3" - dagre-d3-es: "npm:7.0.14" - dayjs: "npm:^1.11.20" - dompurify: "npm:^3.3.3" - es-toolkit: "npm:^1.45.1" - katex: "npm:^0.16.45" - khroma: "npm:^2.1.0" - marked: "npm:^16.3.0" - roughjs: "npm:^4.6.6" - stylis: "npm:^4.3.6" - ts-dedent: "npm:^2.2.0" - uuid: "npm:^11.1.0 || ^12 || ^13 || ^14.0.0" - checksum: 10c0/a14f9bc9db7f1dea65b0d6c0b920236d12ad2812f2a1b11c8b39b3dfb3c22bfce39c77f6a69493203b85880d8008d345c539efe7ae6a31d3dad512833ccfb517 - languageName: node - linkType: hard - "micromark-core-commonmark@npm:^2.0.0": version: 2.0.3 resolution: "micromark-core-commonmark@npm:2.0.3" @@ -4225,60 +2934,6 @@ __metadata: languageName: node linkType: hard -"micromark-extension-cjk-friendly-gfm-strikethrough@npm:2.0.1": - version: 2.0.1 - resolution: "micromark-extension-cjk-friendly-gfm-strikethrough@npm:2.0.1" - dependencies: - devlop: "npm:^1.1.0" - get-east-asian-width: "npm:^1.4.0" - micromark-extension-cjk-friendly-util: "npm:3.0.1" - micromark-util-character: "npm:^2.1.1" - micromark-util-chunked: "npm:^2.0.1" - micromark-util-resolve-all: "npm:^2.0.1" - micromark-util-symbol: "npm:^2.0.1" - peerDependencies: - micromark: ^4.0.0 - micromark-util-types: ^2.0.0 - peerDependenciesMeta: - micromark-util-types: - optional: true - checksum: 10c0/6e51e6101fc287322b12379b32052fb6cbfdb1f427f87671d1b5a3b9d4fc685b60eb8a01f897bb5fc1aeae6197ec668e8f0a3179db80870b11e295cc2fe4bbb3 - languageName: node - linkType: hard - -"micromark-extension-cjk-friendly-util@npm:3.0.1": - version: 3.0.1 - resolution: "micromark-extension-cjk-friendly-util@npm:3.0.1" - dependencies: - get-east-asian-width: "npm:^1.4.0" - micromark-util-character: "npm:^2.1.1" - micromark-util-symbol: "npm:^2.0.1" - peerDependenciesMeta: - micromark-util-types: - optional: true - checksum: 10c0/5a9210b21fcf38b6b6f17dd49587eb70cc17001294e49a81cc128975be8fcb7654d70ed198280c7d56e8664338c1cbe0ca9d4ecbe57348e380f0552b7178602c - languageName: node - linkType: hard - -"micromark-extension-cjk-friendly@npm:2.0.1": - version: 2.0.1 - resolution: "micromark-extension-cjk-friendly@npm:2.0.1" - dependencies: - devlop: "npm:^1.1.0" - micromark-extension-cjk-friendly-util: "npm:3.0.1" - micromark-util-chunked: "npm:^2.0.1" - micromark-util-resolve-all: "npm:^2.0.1" - micromark-util-symbol: "npm:^2.0.1" - peerDependencies: - micromark: ^4.0.0 - micromark-util-types: ^2.0.0 - peerDependenciesMeta: - micromark-util-types: - optional: true - checksum: 10c0/23bd7aabecc83f58508e29a181cf1baa5ad7e0612e1a227cdbd445214afbfd47e9bb2100e740d15728078eaeedd7820cdc70585f36c62ecb70e38bd6e017afa4 - languageName: node - linkType: hard - "micromark-extension-gfm-autolink-literal@npm:^2.0.0": version: 2.1.0 resolution: "micromark-extension-gfm-autolink-literal@npm:2.1.0" @@ -4372,21 +3027,6 @@ __metadata: languageName: node linkType: hard -"micromark-extension-math@npm:^3.0.0": - version: 3.1.0 - resolution: "micromark-extension-math@npm:3.1.0" - dependencies: - "@types/katex": "npm:^0.16.0" - devlop: "npm:^1.0.0" - katex: "npm:^0.16.0" - micromark-factory-space: "npm:^2.0.0" - micromark-util-character: "npm:^2.0.0" - micromark-util-symbol: "npm:^2.0.0" - micromark-util-types: "npm:^2.0.0" - checksum: 10c0/56e6f2185a4613f9d47e7e98cf8605851c990957d9229c942b005e286c8087b61dc9149448d38b2f8be6d42cc6a64aad7e1f2778ddd86fbbb1a2f48a3ca1872f - languageName: node - linkType: hard - "micromark-factory-destination@npm:^2.0.0": version: 2.0.1 resolution: "micromark-factory-destination@npm:2.0.1" @@ -4444,7 +3084,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-character@npm:^2.0.0, micromark-util-character@npm:^2.1.1": +"micromark-util-character@npm:^2.0.0": version: 2.1.1 resolution: "micromark-util-character@npm:2.1.1" dependencies: @@ -4454,7 +3094,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-chunked@npm:^2.0.0, micromark-util-chunked@npm:^2.0.1": +"micromark-util-chunked@npm:^2.0.0": version: 2.0.1 resolution: "micromark-util-chunked@npm:2.0.1" dependencies: @@ -4528,7 +3168,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-resolve-all@npm:^2.0.0, micromark-util-resolve-all@npm:^2.0.1": +"micromark-util-resolve-all@npm:^2.0.0": version: 2.0.1 resolution: "micromark-util-resolve-all@npm:2.0.1" dependencies: @@ -4560,7 +3200,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-symbol@npm:^2.0.0, micromark-util-symbol@npm:^2.0.1": +"micromark-util-symbol@npm:^2.0.0": version: 2.0.1 resolution: "micromark-util-symbol@npm:2.0.1" checksum: 10c0/f2d1b207771e573232436618e78c5e46cd4b5c560dd4a6d63863d58018abbf49cb96ec69f7007471e51434c60de3c9268ef2bf46852f26ff4aacd10f9da16fe9 @@ -4732,11 +3372,8 @@ __metadata: "@radix-ui/react-use-controllable-state": "npm:^1.2.6" "@remixicon/react": "npm:^4.9.0" "@shopify/storefront-api-client": "npm:^1.0.0" - "@streamdown/cjk": "npm:^1.0.3" - "@streamdown/code": "npm:^1.1.1" - "@streamdown/math": "npm:^1.0.2" - "@streamdown/mermaid": "npm:^1.0.2" "@tailwindcss/postcss": "npm:^4" + "@types/hast": "npm:^3.0.5" "@types/node": "npm:^22" "@types/react": "npm:^19" "@types/react-dom": "npm:^19" @@ -4746,6 +3383,7 @@ __metadata: cmdk: "npm:^1.1.1" embla-carousel-react: "npm:^8.6.0" framer-motion: "npm:12.42.2" + hast-util-to-jsx-runtime: "npm:^2.3.6" input-otp: "npm:^1.4.2" lucide-react: "npm:^0.562.0" motion: "npm:^12.23.26" @@ -4754,44 +3392,23 @@ __metadata: radix-ui: "npm:^1.6.7" react: "npm:^19.0.0" react-dom: "npm:^19.0.0" - shiki: "npm:^3.19.0" + rehype-sanitize: "npm:^6.0.0" + remark-gfm: "npm:^4.0.1" + remark-parse: "npm:^11.0.0" + remark-rehype: "npm:^11.1.2" + remend: "npm:^1.3.0" sonner: "npm:^2.0.7" - streamdown: "npm:^2.5.0" tailwind-merge: "npm:^3.4.0" tailwindcss: "npm:^4" tw-animate-css: "npm:1.4.0" typescript: "npm:^5.7.3" + unified: "npm:^11.0.5" use-stick-to-bottom: "npm:^1.1.6" zod: "npm:^4.4.3" zustand: "npm:^5.0.11" languageName: unknown linkType: soft -"oniguruma-parser@npm:^0.12.2": - version: 0.12.2 - resolution: "oniguruma-parser@npm:0.12.2" - checksum: 10c0/fe5255d2cd5a6b845d5a0abe1725898ef40cea5522290dba6ccc08cc388891e9e8007af4baa5059942b786ad44b2b677ef25948039c9ba3f057bd35d2c52076a - languageName: node - linkType: hard - -"oniguruma-to-es@npm:^4.3.4": - version: 4.3.6 - resolution: "oniguruma-to-es@npm:4.3.6" - dependencies: - oniguruma-parser: "npm:^0.12.2" - regex: "npm:^6.1.0" - regex-recursion: "npm:^6.0.2" - checksum: 10c0/044e08b98e706987c2882ccf228de2a671de4aff33e3bd370da137ba599c0d520549625ad26ecc8898502445c991e19f106f584e94382262ba2af02c908ca3cf - languageName: node - linkType: hard - -"package-manager-detector@npm:^1.3.0": - version: 1.8.0 - resolution: "package-manager-detector@npm:1.8.0" - checksum: 10c0/4c8e2c47fdc874465d3b3b11934401db9d73470ccbdabeb092e46cb94abbc491d5befc8c271b5ea1ae9c6a881f44c2997e011873365bde9fd6c3dc001221ff7a - languageName: node - linkType: hard - "parse-entities@npm:^4.0.0": version: 4.0.2 resolution: "parse-entities@npm:4.0.2" @@ -4807,22 +3424,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0": - version: 7.3.0 - resolution: "parse5@npm:7.3.0" - dependencies: - entities: "npm:^6.0.0" - checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 - languageName: node - linkType: hard - -"path-data-parser@npm:0.1.0, path-data-parser@npm:^0.1.0": - version: 0.1.0 - resolution: "path-data-parser@npm:0.1.0" - checksum: 10c0/ba22d54669a8bc4a3df27431fe667900685585d1196085b803d0aa4066b83e709bbf2be7c1d2b56e706b49cc698231d55947c22abbfc4843ca424bbf8c985745 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -4837,23 +3438,6 @@ __metadata: languageName: node linkType: hard -"points-on-curve@npm:0.2.0, points-on-curve@npm:^0.2.0": - version: 0.2.0 - resolution: "points-on-curve@npm:0.2.0" - checksum: 10c0/f0d92343fcc2ad1f48334633e580574c1e0e28038a756133e171e537f270d6d64203feada5ee556e36f448a1b46e0306dee07b30f589f4e3ad720f6ee38ef48c - languageName: node - linkType: hard - -"points-on-path@npm:^0.2.1": - version: 0.2.1 - resolution: "points-on-path@npm:0.2.1" - dependencies: - path-data-parser: "npm:0.1.0" - points-on-curve: "npm:0.2.0" - checksum: 10c0/a7010340f9f196976f61838e767bb7b0b7f6273ab4fb9eb37c61001fe26fbfc3fcd63c96d5e85b9a4ab579213ab366f2ddaaf60e2a9253e2b91a62db33f395ba - languageName: node - linkType: hard - "postcss@npm:8.4.31": version: 8.4.31 resolution: "postcss@npm:8.4.31" @@ -5025,66 +3609,6 @@ __metadata: languageName: node linkType: hard -"regex-recursion@npm:^6.0.2": - version: 6.0.2 - resolution: "regex-recursion@npm:6.0.2" - dependencies: - regex-utilities: "npm:^2.3.0" - checksum: 10c0/68e8b6889680e904b75d7f26edaf70a1a4dc1087406bff53face4c2929d918fd77c72223843fe816ac8ed9964f96b4160650e8d5909e26a998c6e9de324dadb1 - languageName: node - linkType: hard - -"regex-utilities@npm:^2.3.0": - version: 2.3.0 - resolution: "regex-utilities@npm:2.3.0" - checksum: 10c0/78c550a80a0af75223244fff006743922591bd8f61d91fef7c86b9b56cf9bbf8ee5d7adb6d8991b5e304c57c90103fc4818cf1e357b11c6c669b782839bd7893 - languageName: node - linkType: hard - -"regex@npm:^6.1.0": - version: 6.1.0 - resolution: "regex@npm:6.1.0" - dependencies: - regex-utilities: "npm:^2.3.0" - checksum: 10c0/6e0ee2a1c17d5a66dc1120dfc51899dedf6677857e83a0df4d5a822ebb8645a54a079772efc1ade382b67aad35e4e22b5bd2d33c05ed28b0e000f8f57eb0aec1 - languageName: node - linkType: hard - -"rehype-harden@npm:^1.1.8": - version: 1.1.8 - resolution: "rehype-harden@npm:1.1.8" - dependencies: - unist-util-visit: "npm:^5.0.0" - checksum: 10c0/cdd03394f0b3f652af389f816e53d4799b46899d4745b07c9972a2a4ab6d85468370b6881149e52fca0656fee78cdb8317e103fcfdd4879c251edaa7a48b2209 - languageName: node - linkType: hard - -"rehype-katex@npm:^7.0.1": - version: 7.0.1 - resolution: "rehype-katex@npm:7.0.1" - dependencies: - "@types/hast": "npm:^3.0.0" - "@types/katex": "npm:^0.16.0" - hast-util-from-html-isomorphic: "npm:^2.0.0" - hast-util-to-text: "npm:^4.0.0" - katex: "npm:^0.16.0" - unist-util-visit-parents: "npm:^6.0.0" - vfile: "npm:^6.0.0" - checksum: 10c0/73c770319536128b75055d904d06951789d00a0552c11724c0dac2e244dcb21041630552d118a11cc42233fdcd1bfee525e78a0020fde635bd916cceb281dfb1 - languageName: node - linkType: hard - -"rehype-raw@npm:^7.0.0": - version: 7.0.0 - resolution: "rehype-raw@npm:7.0.0" - dependencies: - "@types/hast": "npm:^3.0.0" - hast-util-raw: "npm:^9.0.0" - vfile: "npm:^6.0.0" - checksum: 10c0/1435b4b6640a5bc3abe3b2133885c4dbff5ef2190ef9cfe09d6a63f74dd7d7ffd0cede70603278560ccf1acbfb9da9faae4b68065a28bc5aa88ad18e40f32d52 - languageName: node - linkType: hard - "rehype-sanitize@npm:^6.0.0": version: 6.0.0 resolution: "rehype-sanitize@npm:6.0.0" @@ -5095,38 +3619,6 @@ __metadata: languageName: node linkType: hard -"remark-cjk-friendly-gfm-strikethrough@npm:^2.0.1": - version: 2.3.1 - resolution: "remark-cjk-friendly-gfm-strikethrough@npm:2.3.1" - dependencies: - mdast-util-to-markdown-cjk-friendly-gfm-strikethrough: "npm:1.0.0" - micromark-extension-cjk-friendly-gfm-strikethrough: "npm:2.0.1" - peerDependencies: - "@types/mdast": ^4.0.0 - unified: ^11.0.0 - peerDependenciesMeta: - "@types/mdast": - optional: true - checksum: 10c0/465fbe9716f6b589ae1e8cf0127f6d02b9ca07a09631a15b30c53b6ffbddbcb152154d844b2ed0931cbd609e27dfed227c614ac4f143dbb303f23d47c55714ce - languageName: node - linkType: hard - -"remark-cjk-friendly@npm:^2.0.1": - version: 2.3.1 - resolution: "remark-cjk-friendly@npm:2.3.1" - dependencies: - mdast-util-to-markdown-cjk-friendly: "npm:1.0.0" - micromark-extension-cjk-friendly: "npm:2.0.1" - peerDependencies: - "@types/mdast": ^4.0.0 - unified: ^11.0.0 - peerDependenciesMeta: - "@types/mdast": - optional: true - checksum: 10c0/323347462b83f4a0b6e842d45d933b8b5aefc99c41a4724075fc33383c8163115c86654781bdfc664f8350ffcdcd4d99dab4a98504aa890d5bbde2084fc52d2b - languageName: node - linkType: hard - "remark-gfm@npm:^4.0.1": version: 4.0.1 resolution: "remark-gfm@npm:4.0.1" @@ -5141,18 +3633,6 @@ __metadata: languageName: node linkType: hard -"remark-math@npm:^6.0.0": - version: 6.0.0 - resolution: "remark-math@npm:6.0.0" - dependencies: - "@types/mdast": "npm:^4.0.0" - mdast-util-math: "npm:^3.0.0" - micromark-extension-math: "npm:^3.0.0" - unified: "npm:^11.0.0" - checksum: 10c0/859613c4db194bb6b3c9c063661dc52b8ceda9c5cf3256b42f73d93eb8f38a6d634eb5f976fe094425f6f1035aaf329eb49ada314feb3b2b1073326b6d3aaa02 - languageName: node - linkType: hard - "remark-parse@npm:^11.0.0": version: 11.0.0 resolution: "remark-parse@npm:11.0.0" @@ -5189,46 +3669,13 @@ __metadata: languageName: node linkType: hard -"remend@npm:1.3.0": +"remend@npm:^1.3.0": version: 1.3.0 resolution: "remend@npm:1.3.0" checksum: 10c0/12ee4bcdefe9172b89171096ef33ad22ebb0d47b7a5ac958855fcc579a928a5a2a72078d686cf21c8a30ea9b7bae6062fa6f25385258d2df1a9245a48b857326 languageName: node linkType: hard -"robust-predicates@npm:^3.0.2": - version: 3.0.3 - resolution: "robust-predicates@npm:3.0.3" - checksum: 10c0/ae23a0318be809545f091a076818747848f144495491e24e6df5d767f2bad0a1501bbeac34e78b74681d1437ecff0585f593ebfe6c8d49a50e79c5053b962693 - languageName: node - linkType: hard - -"roughjs@npm:^4.6.6": - version: 4.6.6 - resolution: "roughjs@npm:4.6.6" - dependencies: - hachure-fill: "npm:^0.5.2" - path-data-parser: "npm:^0.1.0" - points-on-curve: "npm:^0.2.0" - points-on-path: "npm:^0.2.1" - checksum: 10c0/68c11bf4516aa014cef2fe52426a9bab237c2f500d13e1a4f13b523cb5723667bf2d92b9619325efdc5bc2a193588ff5af8d51683df17cfb8720e96fe2b92b0c - languageName: node - linkType: hard - -"rw@npm:1": - version: 1.3.3 - resolution: "rw@npm:1.3.3" - checksum: 10c0/b1e1ef37d1e79d9dc7050787866e30b6ddcb2625149276045c262c6b4d53075ddc35f387a856a8e76f0d0df59f4cd58fe24707e40797ebee66e542b840ed6a53 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - "scheduler@npm:^0.27.0": version: 0.27.0 resolution: "scheduler@npm:0.27.0" @@ -5329,22 +3776,6 @@ __metadata: languageName: node linkType: hard -"shiki@npm:^3.19.0": - version: 3.23.0 - resolution: "shiki@npm:3.23.0" - dependencies: - "@shikijs/core": "npm:3.23.0" - "@shikijs/engine-javascript": "npm:3.23.0" - "@shikijs/engine-oniguruma": "npm:3.23.0" - "@shikijs/langs": "npm:3.23.0" - "@shikijs/themes": "npm:3.23.0" - "@shikijs/types": "npm:3.23.0" - "@shikijs/vscode-textmate": "npm:^10.0.2" - "@types/hast": "npm:^3.0.4" - checksum: 10c0/b06a3eddac4bd0a838f9bd79bea70b0a01195570cb11d70fd2ff7ab0a42c33a8c4980ee52174173aae0476cc152b4c1a68c081a82d94ee340cb3ef9d772ae4ba - languageName: node - linkType: hard - "sonner@npm:^2.0.7": version: 2.0.7 resolution: "sonner@npm:2.0.7" @@ -5369,33 +3800,6 @@ __metadata: languageName: node linkType: hard -"streamdown@npm:^2.5.0": - version: 2.5.0 - resolution: "streamdown@npm:2.5.0" - dependencies: - clsx: "npm:^2.1.1" - hast-util-to-jsx-runtime: "npm:^2.3.6" - html-url-attributes: "npm:^3.0.1" - marked: "npm:^17.0.1" - mermaid: "npm:^11.12.2" - rehype-harden: "npm:^1.1.8" - rehype-raw: "npm:^7.0.0" - rehype-sanitize: "npm:^6.0.0" - remark-gfm: "npm:^4.0.1" - remark-parse: "npm:^11.0.0" - remark-rehype: "npm:^11.1.2" - remend: "npm:1.3.0" - tailwind-merge: "npm:^3.4.0" - unified: "npm:^11.0.5" - unist-util-visit: "npm:^5.0.0" - unist-util-visit-parents: "npm:^6.0.0" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - checksum: 10c0/1a5fa4440cf04727ed0dcbec9dd379503c99b51e0fbba1a2a77505329661cc5bb25340a42d0b782721af3396a06369da4bb5edc606fa17e105650733cb13505c - languageName: node - linkType: hard - "stringify-entities@npm:^4.0.0": version: 4.0.4 resolution: "stringify-entities@npm:4.0.4" @@ -5440,13 +3844,6 @@ __metadata: languageName: node linkType: hard -"stylis@npm:^4.3.6": - version: 4.4.0 - resolution: "stylis@npm:4.4.0" - checksum: 10c0/259be096d90dfbfe903c8656dcb7591e52a421e577e950ef42ebd9ca02f387623a1165dd08761492fb6e92a7a562d62a53a694a10b0a2f6dcd7a0db107b4bf55 - languageName: node - linkType: hard - "swr@npm:^2.4.1": version: 2.4.2 resolution: "swr@npm:2.4.2" @@ -5487,13 +3884,6 @@ __metadata: languageName: node linkType: hard -"tinyexec@npm:^1.0.1": - version: 1.2.4 - resolution: "tinyexec@npm:1.2.4" - checksum: 10c0/153b8db6b080194b558ff145b9cffc36b80a6e07babd644dcfbe49c807eee668c876049d28bdee90b96304476f883352f2dad91b3f86bc23832532f4363e66ff - languageName: node - linkType: hard - "trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -5508,13 +3898,6 @@ __metadata: languageName: node linkType: hard -"ts-dedent@npm:^2.2.0": - version: 2.3.0 - resolution: "ts-dedent@npm:2.3.0" - checksum: 10c0/bfc3331e0740191c0134fb526e7f01e16657e50955c9395de14703c6ef17119c91651fa044cf558dc9c1dbb0fe1b2a74e303aeebcbd5e3b31acd14f72f545a54 - languageName: node - linkType: hard - "tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -5578,16 +3961,6 @@ __metadata: languageName: node linkType: hard -"unist-util-find-after@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-find-after@npm:5.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - unist-util-is: "npm:^6.0.0" - checksum: 10c0/a7cea473c4384df8de867c456b797ff1221b20f822e1af673ff5812ed505358b36f47f3b084ac14c3622cb879ed833b71b288e8aa71025352a2aab4c2925a6eb - languageName: node - linkType: hard - "unist-util-is@npm:^6.0.0": version: 6.0.1 resolution: "unist-util-is@npm:6.0.1" @@ -5606,16 +3979,6 @@ __metadata: languageName: node linkType: hard -"unist-util-remove-position@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-remove-position@npm:5.0.0" - dependencies: - "@types/unist": "npm:^3.0.0" - unist-util-visit: "npm:^5.0.0" - checksum: 10c0/e8c76da4399446b3da2d1c84a97c607b37d03d1d92561e14838cbe4fdcb485bfc06c06cfadbb808ccb72105a80643976d0660d1fe222ca372203075be9d71105 - languageName: node - linkType: hard - "unist-util-stringify-position@npm:^4.0.0": version: 4.0.0 resolution: "unist-util-stringify-position@npm:4.0.0" @@ -5695,25 +4058,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^11.1.0 || ^12 || ^13 || ^14.0.0": - version: 14.0.1 - resolution: "uuid@npm:14.0.1" - bin: - uuid: dist-node/bin/uuid - checksum: 10c0/2d961289097cb68c37d93d1da0b5c3aafc1eb9948a455cca8d0ae53a099b2fe583b8933254a84097f700e6bac2e23033364904df0467c22551d5d9611febcaf6 - languageName: node - linkType: hard - -"vfile-location@npm:^5.0.0": - version: 5.0.3 - resolution: "vfile-location@npm:5.0.3" - dependencies: - "@types/unist": "npm:^3.0.0" - vfile: "npm:^6.0.0" - checksum: 10c0/1711f67802a5bc175ea69750d59863343ed43d1b1bb25c0a9063e4c70595e673e53e2ed5cdbb6dcdc370059b31605144d95e8c061b9361bcc2b036b8f63a4966 - languageName: node - linkType: hard - "vfile-message@npm:^4.0.0": version: 4.0.3 resolution: "vfile-message@npm:4.0.3" @@ -5734,13 +4078,6 @@ __metadata: languageName: node linkType: hard -"web-namespaces@npm:^2.0.0": - version: 2.0.1 - resolution: "web-namespaces@npm:2.0.1" - checksum: 10c0/df245f466ad83bd5cd80bfffc1674c7f64b7b84d1de0e4d2c0934fb0782e0a599164e7197a4bce310ee3342fd61817b8047ff04f076a1ce12dd470584142a4bd - languageName: node - linkType: hard - "zod@npm:^4.4.3": version: 4.4.3 resolution: "zod@npm:4.4.3" @@ -5769,7 +4106,7 @@ __metadata: languageName: node linkType: hard -"zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": +"zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4" checksum: 10c0/3c7830cdd3378667e058ffdb4cf2bb78ac5711214e2725900873accb23f3dfe5f9e7e5a06dcdc5f29605da976fc45c26d9a13ca334d6eea2245a15e77b8fc06e
- - {keyedLines.map((keyedLine) => ( - - ))} - -
- {keyedLines.map((keyedLine) => ( - - ))} -
, so they must not get the inline pill treatment. + const isBlock = + typeof className === "string" && className.includes("language-"); + + return ( + + ); + }, + em: (props: ComponentProps<"em">) => , + h1: (props: ComponentProps<"h1">) => ( + + ), + h2: (props: ComponentProps<"h2">) => ( + + ), + h3: (props: ComponentProps<"h3">) => ( + + ), + h4: (props: ComponentProps<"h4">) => ( + + ), + h5: (props: ComponentProps<"h5">) => ( + + ), + h6: (props: ComponentProps<"h6">) => ( + + ), + hr: (props: ComponentProps<"hr">) => ( + + ), + // GFM task-list boxes are display only; readOnly silences React's warning + // about a `checked` input with no change handler. + input: (props: ComponentProps<"input">) => ( + + ), + img: ({ alt, ...props }: ComponentProps<"img">) => ( + // biome-ignore lint/nursery/noImgElement: model output, not a known asset + + ), + li: (props: ComponentProps<"li">) =>
+ {pending} +