From 5c6e1cc970afc796aec60e0002ec71ce3026b0c2 Mon Sep 17 00:00:00 2001 From: pomelo-nwu Date: Wed, 15 Jan 2025 22:26:21 +0800 Subject: [PATCH] feat: add Report --- packages/studio-explore/package.json | 1 + packages/studio-explore/src/app.tsx | 15 +- .../src/components/RelatedWork/index.tsx | 28 -- .../src/components/Report/Intention.tsx | 197 +++++++++ .../src/components/Report/Summary.tsx | 69 ++++ .../src/components/Report/Write.tsx | 103 +++++ .../src/components/Report/index.tsx | 90 +++++ .../studio-explore/src/components/index.tsx | 2 +- pnpm-lock.yaml | 376 ++++++++++++++++++ 9 files changed, 842 insertions(+), 39 deletions(-) delete mode 100644 packages/studio-explore/src/components/RelatedWork/index.tsx create mode 100644 packages/studio-explore/src/components/Report/Intention.tsx create mode 100644 packages/studio-explore/src/components/Report/Summary.tsx create mode 100644 packages/studio-explore/src/components/Report/Write.tsx create mode 100644 packages/studio-explore/src/components/Report/index.tsx diff --git a/packages/studio-explore/package.json b/packages/studio-explore/package.json index dd0c02c2..f76e8d09 100644 --- a/packages/studio-explore/package.json +++ b/packages/studio-explore/package.json @@ -25,6 +25,7 @@ "registry": "https://registry.npmjs.org/" }, "dependencies": { + "react-markdown": "^9.0.3", "@antv/g2": "^5.2.8", "@graphscope/studio-components": "workspace:*", "@graphscope/studio-driver": "workspace:*", diff --git a/packages/studio-explore/src/app.tsx b/packages/studio-explore/src/app.tsx index 9d5dbfc0..df8c8c05 100644 --- a/packages/studio-explore/src/app.tsx +++ b/packages/studio-explore/src/app.tsx @@ -46,7 +46,7 @@ import { Copilot, RunAI, FloatToolbar, - RelatedWork, + Report, } from './components'; import { BgColorsOutlined, @@ -169,18 +169,13 @@ const Explore: React.FunctionComponent = props => { children: , key: 'CypherQuery', }, - // { - // label: Copilot, - // icon: , - // children: , - // key: 'Copilot', - // }, { - label: Write Ralated Work, + label: Report, icon: , - children: , - key: 'Ralated Work', + children: , + key: 'Report', }, + { label: Style Setting, icon: , diff --git a/packages/studio-explore/src/components/RelatedWork/index.tsx b/packages/studio-explore/src/components/RelatedWork/index.tsx deleted file mode 100644 index fdd14831..00000000 --- a/packages/studio-explore/src/components/RelatedWork/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { Button, Typography, Flex } from 'antd'; -interface IRelatedWorkProps {} -import { query } from '../Copilot/query'; -import { Message } from '../Copilot/utils/message'; -import { useContext } from '@graphscope/studio-graph'; - -const RelatedWork: React.FunctionComponent = props => { - const { store } = useContext(); - const { selectNodes } = store; - const handleClick = async () => { - console.log('selectNodes', selectNodes); - await query([ - new Message({ - role: 'user', - content: `Write Related Work`, - }), - ]); - }; - return ( - - - Selected {selectNodes.length} nodes - - ); -}; - -export default RelatedWork; diff --git a/packages/studio-explore/src/components/Report/Intention.tsx b/packages/studio-explore/src/components/Report/Intention.tsx new file mode 100644 index 00000000..69f24edb --- /dev/null +++ b/packages/studio-explore/src/components/Report/Intention.tsx @@ -0,0 +1,197 @@ +import { Flex, Typography, Button, Divider, Select, Timeline } from 'antd'; +import React, { useState } from 'react'; +import { OpenAIOutlined } from '@ant-design/icons'; +import { query } from '../Copilot/query'; +import { Message } from '../Copilot/utils/message'; +import { useContext } from '@graphscope/studio-graph'; +import Summary from './Summary'; + +import type { ItentionType } from './index'; +interface IReportProps { + task: string; + intention: ItentionType; +} +export interface SummaryType { + category: { + name: string; + description: string; + children: { + name: string; + description: string; + }[]; + }[]; + summary: string; + explain: string; +} + +export const TEMPLATE_MIND_MAP_GENERATOR = (graph_data, user_query) => ` +你是一位很有天赋的 AI 助理。你的任务是根据用户的目标和提供的数据,通过选择特定的维度来对给定的数据进行分类。每个类别应具有名称('name')和相应的描述('description')。 +对于每个类别,需要在 'children' 字段中维护属于该分类的给定数据的结合 + +指导建议: + +- 在选择分类维度时,应尽可能选择那些区分度高且重要的维度。 +- 在进行分类时,尽量避免让单个节点属于多个类别。 +- 分类的数量不一定是越多越好;通常,分为2-4个类别是较为合适的。 + + User Query: ${user_query} + Graph Data: ${graph_data} + +注意: +- 返回结果只有 JSON!返回结果只有 JSON!返回结果只有 JSON!且不要带 \`\`\`json !且不要带 \`\`\`json !且不要带 \`\`\`json ! +- 分类信息放在 'category' 字段中,其他信息放在其他字段中 +- 'summary'字段也是必须的,你需要结合用户的输入意图,给出一个最合适的回答,放在 'summary' 字段中 +- 如果你还有其他备注,可以放在 'explain' 字段中 + + `; + +const Intention: React.FunctionComponent = props => { + const { intention, task } = props; + const { store } = useContext(); + const { schema, data } = store; + + const [state, setState] = useState<{ + summary: SummaryType | null; + loading: boolean; + }>({ + summary: null, + loading: false, + }); + const { summary, loading } = state; + + const handleConfirm = async () => { + setState(preState => { + return { + ...preState, + loading: true, + }; + }); + const node_labels = intention.schema.nodes.map(item => { + return item.label; + }); + const edge_labels = intention.schema.edges.map(item => { + return item.label; + }); + + const _nodes = data.nodes + .filter(node => { + return node_labels.includes(node.label || ''); + }) + .map(item => { + const { id, label, properties = {} } = item; + const match = intention.schema.nodes.find(node => node.label === label) || { properties: [] }; + return { + id, + label, + properties: match.properties.reduce((acc, curr) => { + return { + ...acc, + [curr.name]: properties[curr.name], + }; + }, {}), + }; + }); + const _edges = data.edges + .filter(item => { + return edge_labels.includes(item.label || ''); + }) + .map(item => { + const { id, label, properties = {} } = item; + const match = intention.schema.edges.find(c => c.label === label) || { properties: [] }; + return { + id, + label, + + properties: match.properties.reduce((acc, curr) => { + return { + ...acc, + [curr.name]: properties[curr.name], + }; + }, {}), + }; + }); + console.log(_nodes, _edges); + + const _res = await query([ + new Message({ + role: 'user', + content: TEMPLATE_MIND_MAP_GENERATOR(JSON.stringify({ nodes: _nodes, edges: _edges }), task), + }), + ]); + const res = JSON.parse(_res.message.content); + debugger; + setState(preState => { + return { + ...preState, + loading: false, + summary: res, + }; + }); + console.log(_res); + }; + + return ( + + + User intention + + {intention.description} + + + ), + }, + { + children: ( + + Execute Plan + + {intention.plan.join('; ')} + + + ), + }, + { + children: ( + + Required data + + {intention.schema.nodes.map(item => { + const { id, label, properties = [] } = item; + const match = schema.nodes.find(node => node.label === label); + const options = match?.properties.map(p => { + return { + label: p.name, + value: p.name, + }; + }); + const defaultValue = properties.map(p => { + return p.name; + }); + return ( + + + {label} + + + + ); + })} + + ), + }, + ]} + /> + + + {summary && } + + ); +}; + +export default Intention; diff --git a/packages/studio-explore/src/components/Report/Summary.tsx b/packages/studio-explore/src/components/Report/Summary.tsx new file mode 100644 index 00000000..b806bd27 --- /dev/null +++ b/packages/studio-explore/src/components/Report/Summary.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { Avatar, List, Flex, Typography, Button, Tree, Timeline, Tag, Space } from 'antd'; +import { SummaryType } from './Intention'; +import { DownOutlined } from '@ant-design/icons'; +import { useApis } from '@graphscope/studio-graph'; +import { useDynamicStyle } from '@graphscope/studio-components'; +import WriteReport from './Write'; + +const Summary: React.FunctionComponent = props => { + const { category, summary, explain, task } = props; + console.log('Summary', props); + const { focusNodes } = useApis(); + useDynamicStyle( + ` + .explore-report-summary-timeline .ant-timeline-item{ + padding-bottom:6px !important; + } + + `, + 'explore-report-summary-timeline', + ); + return ( + + { + const { name, description, children } = item; + return { + color: 'green', + children: ( + + {name} + + {description} + + { + //@ts-ignore + const { id, properties = {}, label } = c || {}; + const { name, title } = properties; + return { + color: 'green', + children: ( + { + focusNodes([id]); + }} + > + {name || title || label || id} + + ), + }; + })} + /> + + ), + }; + })} + /> + + + + ); +}; + +export default Summary; diff --git a/packages/studio-explore/src/components/Report/Write.tsx b/packages/studio-explore/src/components/Report/Write.tsx new file mode 100644 index 00000000..bf256246 --- /dev/null +++ b/packages/studio-explore/src/components/Report/Write.tsx @@ -0,0 +1,103 @@ +import React, { useState } from 'react'; +import { Button, Flex } from 'antd'; +import { query } from '../Copilot/query'; +import { Message } from '../Copilot/utils/message'; +import ReactMarkdown from 'react-markdown'; + +interface IWriteReportProps { + category: any; + task: string; +} + +const GET_REPORT_PROMPTS = (user_query, mind_map) => { + return ` +You are a highly skilled academic AI assistant. Given a user query and a mind map that categories the papers, your role is to write a related work section. + +User Query: ${user_query} +Mind Map: ${mind_map} + +Guidance: +- The beginning of a related work section typically includes a section introduction, which provides a brief summary of the contents of this section, usually around 50 words. +- A related work section typically includes several subsections, each corresponding to a category and can contain at most {max_token_per_subsection} words. In each subsection, you must mention as many papers related to this category as possible. +For each mentioned paper, you need to explain its relationship with the category corresponding to the current subsection. +- Every time a paper is first mentioned in the text, add a citation in the format \cite{{Id}} and you must not use \cite as the subject of the sentence. For example, suppose the [Id] of paper p1 is 0000.0000, then the citation should be added as \cite{{0000.0000}}. +If the paper propose a method named M, the sentence may be "M \cite{{0000.0000}} ...". If the paper's [Authors] are A, B, and C, +the sentence may be "A et al.~\cite{{0000.0000}} propose that ...". If several papers with ids [Id_1], ... [Id_k] are +related to an item or topic T, then the sentence may be "The are many related works of this topic \cite{{Id_1, ..., Id_k}} ...". +Anyway, sentence "\cite{{0000.0000}} proposes ..." is NOT allowed. Do not introduce one related work in each paragraph, +nor should you list them one by one. Instead, appropriately describe the connections between them. +If a paper is already mentioned in the previous texts, you MUST NOT uses this paper again in this subsection. +For example, Assume that Paper A has been mentioned in a previous subsection (e.g., Subsection 2.1 or Subsection 2.2) +and is related to the current subsection. If there are at least four relevant papers that have not been mentioned in +previous subsections, then you are prohibited from mentioning Paper A in this subsection, and instead, +you should introduce the current subsection by referencing those unmentioned papers. +- An example of a subsection in a related work section is as follows +(the information in this example MUST NOT be summarized in the section): +2.1 [SECTION TITLE] + +The diversity in graph computing also extends to programming interfaces, each tailored to specific domains +within graph operations. For graph querying, Gremlin and Cypher are widely used. Gremlin, part of Apache +TinkerPop, offers an extensive set of operators, providing rich expressiveness for graph traversal. +However, its robustness comes with complexity, as it includes over 200 steps, many with overlapping +functionalities. For instance, steps like valueMap and elementMap both return vertex/edge properties, +but with nuanced differences. This complexity poses challenges in ensuring comprehensive support within +interactive graph engines. Cypher \cite{{[Id]}}, initiated by Neo4j, has gained wide adoption and +significantly contributed to the development of GQL, the emerging standard for querying graph databases. +The increasing demand for Cypher integration into various systems, including GraphScope, alongside the +standardization of ISO/GQL \cite{{[Id]}}, highlights the evolving nature of graph querying interfaces. +Additionally, many graph databases offer the capability to register custom stored procedures for +enhanced querying functionality. +`; +}; + +const GET_REPORT_PROMPTS_2 = (user_query, mind_map) => { + return ` + You are a highly skilled academic AI assistant. Given a user query and a mind map to generate a report + + User Query: ${user_query} + Mind Map: ${mind_map} + + `; +}; +const WriteReport: React.FunctionComponent = props => { + const { category, task } = props; + const [state, setState] = useState({ + loading: false, + report: '', + }); + const { loading, report } = state; + + const handleClick = async () => { + setState(preState => { + return { + ...preState, + loading: true, + }; + }); + const res = await query([ + new Message({ + role: 'user', + content: GET_REPORT_PROMPTS_2(task, JSON.stringify(category)), + }), + ]); + + setState(preState => { + return { + ...preState, + loading: false, + report: res.message.content, + }; + }); + }; + + return ( + + + {report && {report}} + + ); +}; + +export default WriteReport; diff --git a/packages/studio-explore/src/components/Report/index.tsx b/packages/studio-explore/src/components/Report/index.tsx new file mode 100644 index 00000000..a53a4091 --- /dev/null +++ b/packages/studio-explore/src/components/Report/index.tsx @@ -0,0 +1,90 @@ +import { Flex, Input, Typography, Button, Divider, Select } from 'antd'; +import React, { useRef, useState } from 'react'; +import { OpenAIOutlined } from '@ant-design/icons'; +import { query } from '../Copilot/query'; +import { Message } from '../Copilot/utils/message'; +import { GraphSchema, useContext } from '@graphscope/studio-graph'; +import Intention from './Intention'; +interface IReportProps {} + +const GET_DATA_FILTER_RULES = (user_query: string, schema: any) => { + return ` +你是一个很有天赋的 AI 助理,你的任务是根据用户的输入语句,再结合图的 Schema 信息,推断出用户的分析意图。 +考虑到用户后续输入的数据量可能比较大,因此需要你先返回部分 Schema 结构,方便用户对要数据做裁剪。 + +graph_schema :${schema} +user_query:${user_query} + +注意: +- 返回结果只有 JSON!返回结果只有 JSON!返回结果只有 JSON!且不要带 \`\`\`json !且不要带 \`\`\`json !且不要带 \`\`\`json ! +- JSON 的 'description' 字段是必须的,用来描述你理解到的用户分析意图 +- JSON 的 'plan' 字段是必须的,用于描述你计划如何实现的步骤,它必须是一个数组。 +- JSON 的 "schema" 字段是必须的,用来返回分析所需的部分 Schema 结构。不要返回全部 Schema 结构,尤其是属性字段,只考虑分析必备的字段,不要返回全部的属性字段。 +- 如果你还有其他备注,可以放在 'explain' 字段中 + `; +}; + +export interface ItentionType { + schema: GraphSchema; + plan: string[]; + description: string; + explain: string; +} +const Report: React.FunctionComponent = props => { + const { store } = useContext(); + const { schema, data } = store; + const InputRef = useRef(null); + const [state, setState] = useState<{ + loading: boolean; + task: string; + intention: ItentionType | null; + }>({ + loading: false, + task: + // '帮我把画布上的papers按照时间和引用数整理成一个分析报告', + '请根据我选中的 papers ,以及 paper 关联的 challenge,写一个 related work section。要求 papers 按照 challenge 进行整理', + // '帮我把这些 Papers 整理写成一个 related work 的 section,关注点在 challenge 上', + intention: null, + }); + + const { intention, task } = state; + + const handleClick = async () => { + const { value } = InputRef.current.resizableTextArea.textArea; + + try { + setState({ ...state, task: value, loading: true }); + const _res = await query([ + new Message({ + role: 'user', + content: GET_DATA_FILTER_RULES(value, JSON.stringify(schema)), + }), + ]); + debugger; + const res = JSON.parse(_res.message.content); + setState(preState => { + return { + ...preState, + loading: false, + intention: res, + }; + }); + console.log('res', res); + } catch (error) {} + }; + + return ( + + + Input your intention + + + + {intention && } + + ); +}; + +export default Report; diff --git a/packages/studio-explore/src/components/index.tsx b/packages/studio-explore/src/components/index.tsx index 89b3e526..c587c78a 100644 --- a/packages/studio-explore/src/components/index.tsx +++ b/packages/studio-explore/src/components/index.tsx @@ -13,4 +13,4 @@ export { default as CypherQuery } from './CypherQuery'; export { default as Copilot } from './Copilot'; export { default as RunAI } from './Copilot/RunAI'; export { default as FloatToolbar } from './FloatToolbar'; -export { default as RelatedWork } from './RelatedWork'; +export { default as Report } from './Report'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54bd9d2a..3b9069d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -414,6 +414,9 @@ importers: react-intl: specifier: ^6.6.8 version: 6.8.9(react@18.2.0)(typescript@5.6.3) + react-markdown: + specifier: ^9.0.3 + version: 9.0.3(@types/react@18.2.0)(react@18.2.0) devDependencies: '@vitejs/plugin-react': specifier: ^4.2.1 @@ -6103,6 +6106,9 @@ packages: estree-util-is-identifier-name@2.1.0: resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} @@ -6806,6 +6812,9 @@ packages: hast-util-to-html@8.0.4: resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + hast-util-to-jsx-runtime@2.3.2: + resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} + hast-util-to-parse5@7.1.0: resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} @@ -6821,6 +6830,9 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} @@ -6893,6 +6905,9 @@ packages: resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} hasBin: true + html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + html-void-elements@2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} @@ -7074,6 +7089,9 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inquirer@6.5.2: resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} engines: {node: '>=6.0.0'} @@ -7899,6 +7917,9 @@ packages: mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-frontmatter@1.0.1: resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} @@ -7926,18 +7947,30 @@ packages: mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-phrasing@3.0.1: resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} @@ -7947,9 +7980,15 @@ packages: mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -7995,6 +8034,9 @@ packages: micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + micromark-core-commonmark@2.0.2: + resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} + micromark-extension-directive@2.2.1: resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==} @@ -8043,21 +8085,36 @@ packages: micromark-factory-destination@1.1.0: resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + micromark-factory-label@1.1.0: resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + micromark-factory-mdx-expression@1.0.9: resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + micromark-factory-title@1.1.0: resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + micromark-factory-whitespace@1.1.0: resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + micromark-util-character@1.2.0: resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} @@ -8067,18 +8124,33 @@ packages: micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + micromark-util-classify-character@1.1.0: resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + micromark-util-combine-extensions@1.1.0: resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + micromark-util-decode-numeric-character-reference@1.1.0: resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + micromark-util-decode-string@1.1.0: resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + micromark-util-encode@1.1.0: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} @@ -8091,12 +8163,21 @@ packages: micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + micromark-util-normalize-identifier@1.1.0: resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + micromark-util-resolve-all@1.1.0: resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + micromark-util-sanitize-uri@1.2.0: resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} @@ -8106,6 +8187,9 @@ packages: micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@2.0.3: + resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==} + micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} @@ -8121,6 +8205,9 @@ packages: micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@4.0.1: + resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -9734,6 +9821,12 @@ packages: peerDependencies: react: 18.2.0 + react-markdown@9.0.3: + resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} + peerDependencies: + '@types/react': 18.2.0 + react: 18.2.0 + react-merge-refs@1.1.0: resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==} @@ -9927,12 +10020,18 @@ packages: remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-reading-time@2.0.1: resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==} remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + remote-origin-url@0.4.0: resolution: {integrity: sha512-HYhdsT2pNd0LP4Osb0vtQ1iassxIc3Yk1oze7j8dMJFciMkW8e0rdg9E/mOunqtSVHSzvMfwLDIYzPnEDmpk6Q==} engines: {node: '>= 0.8.0'} @@ -10601,6 +10700,9 @@ packages: style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + styled-components@5.3.11: resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} engines: {node: '>=10'} @@ -11101,6 +11203,9 @@ packages: unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unique-filename@1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} @@ -18132,6 +18237,8 @@ snapshots: estree-util-is-identifier-name@2.1.0: {} + estree-util-is-identifier-name@3.0.0: {} + estree-util-to-js@1.2.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -19173,6 +19280,26 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.2: + dependencies: + '@types/estree': 1.0.6 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + style-to-object: 1.0.8 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + hast-util-to-parse5@7.1.0: dependencies: '@types/hast': 2.3.10 @@ -19205,6 +19332,10 @@ snapshots: hast-util-whitespace@2.0.1: {} + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hastscript@7.2.0: dependencies: '@types/hast': 2.3.10 @@ -19300,6 +19431,8 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 + html-url-attributes@3.0.1: {} + html-void-elements@2.0.1: {} html-void-elements@3.0.0: {} @@ -19474,6 +19607,8 @@ snapshots: inline-style-parser@0.1.1: {} + inline-style-parser@0.2.4: {} + inquirer@6.5.2: dependencies: ansi-escapes: 3.2.0 @@ -20347,6 +20482,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-frontmatter@1.0.1: dependencies: '@types/mdast': 3.0.15 @@ -20413,6 +20565,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-jsx@2.1.4: dependencies: '@types/estree-jsx': 1.0.5 @@ -20430,6 +20593,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.1 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx@2.0.1: dependencies: mdast-util-from-markdown: 1.3.1 @@ -20450,11 +20630,27 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-phrasing@3.0.1: dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + mdast-util-to-hast@12.3.0: dependencies: '@types/hast': 2.3.10 @@ -20489,10 +20685,26 @@ snapshots: unist-util-visit: 4.1.2 zwitch: 2.0.4 + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + mdast-util-to-string@3.2.0: dependencies: '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdn-data@2.0.14: {} mdn-data@2.0.4: {} @@ -20574,6 +20786,25 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-core-commonmark@2.0.2: + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-extension-directive@2.2.1: dependencies: micromark-factory-space: 1.1.0 @@ -20716,6 +20947,12 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-label@1.1.0: dependencies: micromark-util-character: 1.2.0 @@ -20723,6 +20960,13 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-mdx-expression@1.0.9: dependencies: '@types/estree': 1.0.6 @@ -20739,6 +20983,11 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.1 + micromark-factory-title@1.1.0: dependencies: micromark-factory-space: 1.1.0 @@ -20746,6 +20995,13 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-factory-whitespace@1.1.0: dependencies: micromark-factory-space: 1.1.0 @@ -20753,6 +21009,13 @@ snapshots: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-character@1.2.0: dependencies: micromark-util-symbol: 1.1.0 @@ -20767,21 +21030,40 @@ snapshots: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-classify-character@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-combine-extensions@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-decode-numeric-character-reference@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-decode-string@1.1.0: dependencies: decode-named-character-reference: 1.0.2 @@ -20789,6 +21071,13 @@ snapshots: micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + micromark-util-encode@1.1.0: {} micromark-util-encode@2.0.1: {} @@ -20806,14 +21095,24 @@ snapshots: micromark-util-html-tag-name@1.2.0: {} + micromark-util-html-tag-name@2.0.1: {} + micromark-util-normalize-identifier@1.1.0: dependencies: micromark-util-symbol: 1.1.0 + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-resolve-all@1.1.0: dependencies: micromark-util-types: 1.1.0 + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.1 + micromark-util-sanitize-uri@1.2.0: dependencies: micromark-util-character: 1.2.0 @@ -20833,6 +21132,13 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 + micromark-util-subtokenize@2.0.3: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + micromark-util-symbol@1.1.0: {} micromark-util-symbol@2.0.1: {} @@ -20863,6 +21169,28 @@ snapshots: transitivePeerDependencies: - supports-color + micromark@4.0.1: + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.7(supports-color@5.5.0) + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -22752,6 +23080,23 @@ snapshots: dependencies: react: 18.2.0 + react-markdown@9.0.3(@types/react@18.2.0)(react@18.2.0): + dependencies: + '@types/hast': 3.0.4 + '@types/react': 18.2.0 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.2 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.0 + react: 18.2.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.1 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + react-merge-refs@1.1.0: {} react-refresh@0.14.0: {} @@ -23030,6 +23375,15 @@ snapshots: transitivePeerDependencies: - supports-color + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.1 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-reading-time@2.0.1: dependencies: estree-util-is-identifier-name: 2.1.0 @@ -23044,6 +23398,14 @@ snapshots: mdast-util-to-hast: 12.3.0 unified: 10.1.2 + remark-rehype@11.1.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + remote-origin-url@0.4.0: dependencies: parse-git-config: 0.2.0 @@ -23799,6 +24161,10 @@ snapshots: dependencies: inline-style-parser: 0.1.1 + style-to-object@1.0.8: + dependencies: + inline-style-parser: 0.2.4 + styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.3.1)(react@18.2.0): dependencies: '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) @@ -24401,6 +24767,16 @@ snapshots: trough: 2.2.0 vfile: 5.3.7 + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + unique-filename@1.1.1: dependencies: unique-slug: 2.0.2