remons-render-markdown 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ /**
3
+ * BackTop 组件的属性接口
4
+ */
5
+ interface BackTopProps {
6
+ /** 滚动容器元素获取函数 */
7
+ target?: () => HTMLElement;
8
+ /** 显示阈值,滚动超过此值时显示按钮 */
9
+ visibilityHeight?: number;
10
+ }
11
+ /**
12
+ * 自定义 BackTop 组件
13
+ * 滚动到顶部按钮,当页面滚动超过指定阈值时显示
14
+ */
15
+ declare const CustomBackTop: React.FC<BackTopProps>;
16
+ export default CustomBackTop;
@@ -0,0 +1,31 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ /**
3
+ * 下拉菜单项接口
4
+ */
5
+ interface DropdownItem {
6
+ /** 选项的唯一标识 */
7
+ key: string;
8
+ /** 选项显示的标签文本 */
9
+ label: ReactNode;
10
+ }
11
+ /**
12
+ * Dropdown 组件的属性接口
13
+ */
14
+ interface DropdownProps {
15
+ /** 下拉菜单项列表 */
16
+ items: DropdownItem[];
17
+ /** 子元素(触发元素) */
18
+ children: ReactNode;
19
+ /** 点击选项时的回调 */
20
+ onClick: ({ key }: {
21
+ key: string;
22
+ }) => void;
23
+ /** 自定义 className */
24
+ className?: string;
25
+ }
26
+ /**
27
+ * 自定义 Dropdown 组件
28
+ * 点击触发元素显示下拉菜单,选择后关闭
29
+ */
30
+ declare const CustomDropdown: React.FC<DropdownProps>;
31
+ export default CustomDropdown;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 自定义消息 API
3
+ */
4
+ declare const customMessage: {
5
+ /**
6
+ * 显示警告消息
7
+ */
8
+ warning: (content: string, duration?: number) => void;
9
+ /**
10
+ * 显示信息消息
11
+ */
12
+ info: (content: string, duration?: number) => void;
13
+ /**
14
+ * 显示错误消息
15
+ */
16
+ error: (content: string, duration?: number) => void;
17
+ /**
18
+ * 显示成功消息
19
+ */
20
+ success: (content: string, duration?: number) => void;
21
+ /**
22
+ * 清除所有消息
23
+ */
24
+ destroy: () => void;
25
+ };
26
+ export default customMessage;
@@ -0,0 +1,28 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ /**
3
+ * Modal 组件的属性接口
4
+ */
5
+ interface ModalProps {
6
+ /** 是否显示弹窗 */
7
+ open: boolean;
8
+ /** 弹窗标题 */
9
+ title: string;
10
+ /** 弹窗宽度 */
11
+ width?: number;
12
+ /** 关闭回调 */
13
+ onCancel?: () => void;
14
+ /** 底部内容 */
15
+ footer?: ReactNode | null;
16
+ /** 关闭时是否销毁子元素 */
17
+ destroyOnClose?: boolean;
18
+ /** 自定义类名 */
19
+ className?: string;
20
+ /** 弹窗内容 */
21
+ children?: ReactNode;
22
+ }
23
+ /**
24
+ * 自定义 Modal 组件
25
+ * 使用 Portal 渲染到 body,实现模态对话框
26
+ */
27
+ declare const CustomModal: React.FC<ModalProps>;
28
+ export default CustomModal;
@@ -0,0 +1,20 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ /**
3
+ * Tooltip 组件的属性接口
4
+ */
5
+ interface TooltipProps {
6
+ /** 提示文本 */
7
+ title: string;
8
+ /** 子元素 */
9
+ children: ReactNode;
10
+ /** 是否可见(受控模式) */
11
+ visible?: boolean;
12
+ /** 可见状态改变时的回调 */
13
+ onVisibleChange?: (visible: boolean) => void;
14
+ }
15
+ /**
16
+ * 自定义 Tooltip 组件
17
+ * 使用 Portal 将提示框渲染到 body,避免被父元素 overflow 裁剪
18
+ */
19
+ declare const CustomTooltip: React.FC<TooltipProps>;
20
+ export default CustomTooltip;
@@ -0,0 +1,5 @@
1
+ interface MyEmptyProps {
2
+ description?: string;
3
+ }
4
+ export default function MyEmpty({ description }: MyEmptyProps): import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ interface MermaidRendererProps {
3
+ source: string;
4
+ debounceMs?: number;
5
+ enablePanzoom?: boolean;
6
+ showDownload?: boolean;
7
+ showSourceView?: boolean;
8
+ showCollapse?: boolean;
9
+ defaultCollapsed?: boolean;
10
+ className?: string;
11
+ minHeight?: number;
12
+ }
13
+ declare const MermaidRenderer: React.ForwardRefExoticComponent<MermaidRendererProps & React.RefAttributes<null>>;
14
+ declare function renderMermaidWithControls(): Promise<void>;
15
+ export default MermaidRenderer;
16
+ export { renderMermaidWithControls };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 共享 Mermaid 渲染逻辑
3
+ * - 加载 mermaid 库
4
+ * - 根据主题初始化
5
+ * - 防抖渲染 SVG
6
+ * - 返回 { svg, error, loading }
7
+ */
8
+ interface UseMermaidRenderParams {
9
+ source: string;
10
+ debounceMs?: number;
11
+ isDark: boolean;
12
+ }
13
+ export default function useMermaidRender({ source, debounceMs, isDark }: UseMermaidRenderParams): {
14
+ svg: string;
15
+ error: string;
16
+ loading: boolean;
17
+ };
18
+ export {};
@@ -0,0 +1,17 @@
1
+ import { RefObject } from 'react';
2
+ interface PanzoomRefType {
3
+ destroy: () => void;
4
+ zoomWithWheel: (e: WheelEvent) => void;
5
+ zoomIn: () => void;
6
+ zoomOut: () => void;
7
+ reset: () => void;
8
+ }
9
+ interface UsePanzoomParams {
10
+ contentRef: RefObject<HTMLElement | null>;
11
+ wrapperRef: RefObject<HTMLElement | null>;
12
+ enabled: boolean;
13
+ svg: string;
14
+ isFullscreen: boolean;
15
+ }
16
+ export default function usePanzoom({ contentRef, wrapperRef, enabled, svg, isFullscreen }: UsePanzoomParams): import('react').MutableRefObject<PanzoomRefType | null>;
17
+ export {};
@@ -0,0 +1,12 @@
1
+ import { default as React } from 'react';
2
+ interface Props {
3
+ content: string;
4
+ createTime?: string;
5
+ showBackTop?: boolean;
6
+ isSlotMermaid?: boolean;
7
+ isShowCollapsed?: boolean;
8
+ codeType?: string;
9
+ editButton?: React.ReactNode;
10
+ }
11
+ export default function RenderMarkdown(props: Props): React.JSX.Element;
12
+ export {};
@@ -0,0 +1,11 @@
1
+ type AnchorItem = {
2
+ title: string;
3
+ nodeTitle: string;
4
+ href: string;
5
+ nodeName: string;
6
+ };
7
+ declare function renderMarkdown(content: string): {
8
+ anchor: AnchorItem[];
9
+ info: any;
10
+ };
11
+ export default renderMarkdown;
@@ -0,0 +1,4 @@
1
+ declare function renderAlert(tokens: Array<{
2
+ markup: string;
3
+ }>, index: number): string;
4
+ export default renderAlert;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 初始化 Tab 逻辑
3
+ * 使用递归思想:只处理当前容器下的直接子元素,互不干扰
4
+ */
5
+ export declare const tabsName = "markdown-tabs";
6
+ declare function renderTab(): void;
7
+ export default renderTab;
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ interface Window {
3
+ mermaid: any;
4
+ }
5
+ }
6
+ export default function useLoadMermaid(): {
7
+ mermaid: any;
8
+ loading: boolean;
9
+ error: Error | null;
10
+ };
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ export interface UseThemeReturn {
3
+ theme: string;
4
+ mode: string;
5
+ isDark: boolean;
6
+ setMode: (mode: string) => void;
7
+ }
8
+ export interface ThemeProviderProps {
9
+ children: React.ReactNode;
10
+ }
11
+ declare const THEME_LIGHT = "light";
12
+ declare const THEME_DARK = "dark";
13
+ declare const THEME_SYSTEM = "system";
14
+ export declare function ThemeProvider({ children }: ThemeProviderProps): React.FunctionComponentElement<React.ProviderProps<UseThemeReturn | null>>;
15
+ export declare function useTheme(): UseThemeReturn;
16
+ export { THEME_LIGHT, THEME_DARK, THEME_SYSTEM };
package/dist/index.css ADDED
@@ -0,0 +1,2 @@
1
+ ._container_78d2r_4{z-index:10000;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;top:8vh;left:50%;transform:translate(-50%)}._item_78d2r_16{pointer-events:auto}._toast_78d2r_19{background-color:var(--color-bg);box-shadow:var(--shadow-sm);border-radius:6px;align-items:center;gap:8px;min-width:200px;padding:10px 20px;font-size:14px;animation:.3s _fadeIn_78d2r_1;display:flex}._toast-warning_78d2r_31{color:#faad14}._toast-info_78d2r_34{color:#1890ff}._toast-error_78d2r_37{color:#ff4d4f}._toast-success_78d2r_40{color:#52c41a}@keyframes _fadeIn_78d2r_1{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}._back-top_rl061_4{cursor:pointer;color:#333;z-index:1000;background:#fff;border:1px solid #d9d9d9;border-radius:6px;justify-content:center;align-items:center;width:40px;height:40px;font-size:16px;transition:all .3s;display:flex;position:fixed;bottom:60px;right:40px;box-shadow:0 2px 8px #00000026}._back-top_rl061_4:hover{color:#40a9ff;background:#f5f5f5;border-color:#40a9ff}._back-top_rl061_4:active{transform:scale(.95)}._empty_container_1qt26_1{color:#999;flex-direction:column;justify-content:center;align-items:center;gap:12px;height:100%;display:flex}._description_1qt26_10{font-size:14px}.hljs{color:#f8f8f2;background:#23241f}.hljs-tag,.hljs-subst{color:#f8f8f2}.hljs-strong,.hljs-emphasis{color:#a8a8a2}.hljs-bullet,.hljs-quote,.hljs-number,.hljs-regexp,.hljs-literal,.hljs-link{color:#ae81ff}.hljs-code,.hljs-title,.hljs-section,.hljs-selector-class{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-keyword,.hljs-selector-tag,.hljs-name,.hljs-attr{color:#f92672}.hljs-symbol,.hljs-attribute{color:#66d9ef}.hljs-params,.hljs-title.class_,.hljs-class .hljs-title{color:#f8f8f2}.hljs-string,.hljs-type,.hljs-built_in,.hljs-selector-id,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-addition,.hljs-variable,.hljs-template-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e;font-family:Consolas,Inter,Noto Sans SC,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}.markdown-tabs-tabs-wrapper{border-radius:4px;margin-top:2px;position:relative;-webkit-mask-image:linear-gradient(90deg,#000 0% 100%);mask-image:linear-gradient(90deg,#000 0% 100%)}.markdown-tabs-tabs-wrapper:after{content:"";pointer-events:none;z-index:10;opacity:0;height:30px;transition:opacity .4s;position:absolute;top:0;left:0;right:0}.markdown-tabs-tabs-wrapper.has-left-mask:after{opacity:1;background:linear-gradient(90deg,#fff9 0%,#fff0 15%)}.markdown-tabs-tabs-wrapper.has-right-mask:after{opacity:1;background:linear-gradient(270deg,#fff9 0%,#fff0 10%)}.markdown-tabs-tabs-wrapper.has-both-masks:after{opacity:1;background:linear-gradient(90deg,#fff9 0%,#fff0 15% 85%,#fff9 100%)}.markdown-tabs-tabs-wrapper .markdown-tabs-tabs-header{background:var(--color-bg);z-index:2;display:flex;position:sticky;top:0;overflow:auto hidden}.markdown-tabs-tabs-wrapper .markdown-tabs-tabs-header::-webkit-scrollbar{display:none}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-button{cursor:pointer;background:#ebecf0;border-radius:8px 8px 0 0;min-width:50px;margin:0 2px;padding:6px 8px;font-size:14px;font-weight:400;transition:background .4s;position:relative;box-shadow:none!important;border:1px solid #ccc!important;border-bottom:0!important}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-button:last-child{border-right:none;margin-right:0}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-button:first-child{margin-left:0}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-button:hover{color:#007bff;background:#e4e4f5;box-shadow:none!important}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-button.active{color:#007bff;background:#dbdbff;position:relative}.markdown-tabs-tabs-wrapper .markdown-tabs-tabs-container{position:relative}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-content{border:1px solid #ccc;border-radius:0 8px 8px;height:auto;padding:2px 10px 0;display:none;overflow:hidden}.markdown-tabs-tabs-wrapper .markdown-tabs-tab-content.active{display:block}[data-theme=dark] .markdown-tabs-tabs-header{border-color:#1a1d2e}[data-theme=dark] .markdown-tabs-tab-button{color:#afafaf;background:#263238;border-color:#1a1d2e!important}[data-theme=dark] .markdown-tabs-tab-button:hover{background:#2e3350}[data-theme=dark] .markdown-tabs-tab-button.active{background:#2e3350;border:1px solid #2e3350!important}[data-theme=dark] .markdown-tabs-tab-button.active:after{background:radial-gradient(16px at 100% 0,#0000 50%,#2e3350 50%)}[data-theme=dark] .markdown-tabs-tab-button.active:before{background:radial-gradient(16px at 0 0,#0000 50%,#2e3350 50%)}[data-theme=dark] .markdown-tabs-tab-content{border-color:#2e3350!important}:root{--vp-c-grey-text:#656869;--vp-c-grey-hover:#e4e4e9;--vp-c-grey-bg:#ebebef;--vp-c-grey-soft:#8e96aa24;--vp-c-purple-text:#6f42c1;--vp-c-purple-hover:#7e4cc9;--vp-c-purple-bg:#8e5cd9;--vp-c-purple-soft:#9f7aea24;--vp-c-blue-text:#2888a7;--vp-c-blue-hover:#2d98ba;--vp-c-blue-bg:#2fa1c5;--vp-c-blue-soft:#1bb2e524;--vp-c-green-text:#18794e;--vp-c-green-hover:#299764;--vp-c-green-bg:#30a46c;--vp-c-green-soft:#10b98124;--vp-c-yellow-text:#915930;--vp-c-yellow-hover:#946300;--vp-c-yellow-bg:#c28100;--vp-c-yellow-soft:#eab30824;--vp-c-red-text:#b8272c;--vp-c-red-hover:#d5393e;--vp-c-red-bg:#e0575b;--vp-c-red-soft:#f43f5e24}[data-theme=dark]{--vp-c-grey-text:#939499;--vp-c-grey-hover:#414853;--vp-c-grey-bg:#32363f;--vp-c-grey-soft:#65758529;--vp-c-blue-text:#c9e8f2;--vp-c-blue-hover:#a6d9ea;--vp-c-blue-bg:#2785a3;--vp-c-blue-soft:#1bb2e529;--vp-c-purple-text:#c8abfa;--vp-c-purple-hover:#a879e6;--vp-c-purple-bg:#8e5cd9;--vp-c-purple-soft:#9f7aea29;--vp-c-green-text:#3dd68c;--vp-c-green-hover:#30a46c;--vp-c-green-bg:#298459;--vp-c-green-soft:#10b98129;--vp-c-yellow-text:#f9b44e;--vp-c-yellow-hover:#da8b17;--vp-c-yellow-bg:#a46a0a;--vp-c-yellow-soft:#eab30829;--vp-c-red-text:#f66f81;--vp-c-red-hover:#f14158;--vp-c-red-bg:#b62a3c;--vp-c-red-soft:#f43f5e29}.markdown-alert{color:inherit;border-radius:8px;margin:4px 0;padding:8px 16px}.markdown-alert .markdown-alert-title{font-weight:var(--base-text-weight-medium,500);align-items:center;display:flex;position:relative}.markdown-alert .markdown-alert-title:before{content:" ";background-position:0;background-repeat:no-repeat;width:16px;height:16px;margin-right:8px}@media print{.markdown-alert .markdown-alert-title:before{display:none}}.markdown-alert.markdown-alert-note{background:var(--vp-c-grey-soft)}.markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--vp-c-grey-text)}.markdown-alert.markdown-alert-note .markdown-alert-title:before{background-color:var(--vp-c-grey-text);-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 22c-.6 0-1-.4-1-1v-3H4c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2h-6.1l-3.7 3.7c-.2.2-.4.3-.7.3zm1-6v3.1l3.1-3.1H20V4H4v12zm6.3-10l-1.4 3H17v4h-4V8.8L14.3 6zm-6 0L8.9 9H11v4H7V8.8L8.3 6z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 22c-.6 0-1-.4-1-1v-3H4c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2h-6.1l-3.7 3.7c-.2.2-.4.3-.7.3zm1-6v3.1l3.1-3.1H20V4H4v12zm6.3-10l-1.4 3H17v4h-4V8.8L14.3 6zm-6 0L8.9 9H11v4H7V8.8L8.3 6z'/%3E%3C/svg%3E")}.markdown-alert.markdown-alert-important{background:var(--vp-c-purple-soft)}.markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--vp-c-purple-text)}.markdown-alert.markdown-alert-important .markdown-alert-title:before{background-color:var(--vp-c-purple-text);-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z'/%3E%3C/svg%3E")}.markdown-alert.markdown-alert-tip{background:var(--vp-c-green-soft)}.markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--vp-c-green-text)}.markdown-alert.markdown-alert-tip .markdown-alert-title:before{background-color:var(--vp-c-green-text);-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E")}.markdown-alert.markdown-alert-warning{background:var(--vp-c-yellow-soft)}.markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--vp-c-yellow-text)}.markdown-alert.markdown-alert-warning .markdown-alert-title:before{background-color:var(--vp-c-yellow-text);-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z'/%3E%3C/svg%3E")}.markdown-alert.markdown-alert-caution{background:var(--vp-c-red-soft)}.markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--vp-c-red-text)}.markdown-alert.markdown-alert-caution .markdown-alert-title:before{background-color:var(--vp-c-red-text);-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E")}.markdown{cursor:initial;box-sizing:border-box;color:var(--color-text-primary,#24292f);letter-spacing:.01em;padding:10px 8px 0;font-family:Inter,Noto Sans SC,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:15px;font-weight:400;line-height:1.75}.markdown .markdown-footer{align-items:center;margin-top:10px;font-size:12px;display:flex}.markdown .create-time{background:var(--color-bg-tooltip,#61616141);color:var(--color-text,#ffffffde);float:left;border-radius:4px;padding:0 4px;font-weight:400}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{color:var(--color-text-primary,#202124);letter-spacing:0;font-weight:700;line-height:1.35;position:relative;margin:2px 0!important}.markdown h1,.markdown h2,.markdown h3,.markdown h4{margin:2px 0!important}.markdown h1:first-child,.markdown h2:first-child,.markdown h3:first-child,.markdown h4:first-child,.markdown h5:first-child,.markdown h6:first-child{margin-top:0}.markdown h1{font-size:22px}.markdown h2{font-size:20px}.markdown h3{font-size:18px}.markdown h4{font-size:17px}.markdown h5,.markdown h6{font-size:16px}.markdown p{word-break:break-word;margin:0 0 6px;font-size:15px;line-height:1.75}.markdown ul,.markdown ol{margin:0 0 10px;padding-left:1.5em}.markdown ul li,.markdown ol li{margin:4px 0;font-size:14px;line-height:18px}.markdown ul li p,.markdown ol li p{margin:0}.markdown blockquote{color:var(--color-text-secondary,#57606a);background:var(--color-bg-card,#f6f8fa);border-left:4px solid var(--color-border-dark,#d0d7de);border-radius:0 6px 6px 0;margin:6px 0;padding:4px 6px}.markdown blockquote p:last-child{margin-bottom:0}.markdown img{max-width:100%;margin:18px auto;display:block}.markdown table{border:1px solid var(--color-border-dark,#d0d7de);border-spacing:0;border-collapse:separate;border-radius:6px;max-width:100%;margin:10px 0;display:inline-block;overflow:auto}.markdown table thead{background-color:var(--color-bg-card,#f6f8fa);text-align:left;vertical-align:bottom}.markdown table td,.markdown table th{border-right:1px solid var(--color-border-dark,#d0d7de);border-bottom:1px solid var(--color-border-dark,#d0d7de);min-width:56px;padding:2px 6px;font-size:12px;line-height:22px}.markdown table tr:last-child td{border-bottom:0}.markdown table td:last-child,.markdown table th:last-child{border-right:0}.markdown .markdown-html{color:var(--color-text-primary,#24292f)}.markdown .markdown-html .header-anchor{opacity:0;color:var(--color-text-placeholder,#999);text-decoration:none;transition:opacity .2s ease-in-out}.markdown .markdown-html h1:hover .header-anchor,.markdown .markdown-html h2:hover .header-anchor,.markdown .markdown-html h3:hover .header-anchor,.markdown .markdown-html h4:hover .header-anchor,.markdown .markdown-html h5:hover .header-anchor,.markdown .markdown-html h6:hover .header-anchor{opacity:1}.markdown code{color:#c7254df1;background:#f9f2f4;border-radius:5px;margin:0 2px;padding:2px 7px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.9em;line-height:1.5}.markdown pre:has(code.mermaid-render-noCode){visibility:hidden;height:36px}.markdown pre{color:#f8f8f2;cursor:auto;background-color:#263238;border-radius:10px;margin:10px 0;font-family:Consolas,Inter,Noto Sans SC,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;font-weight:400;line-height:1.6;position:relative;overflow:hidden;box-shadow:inset 5px 5px 10px #0f1416,inset -5px -5px 10px #3d505a}.markdown pre code{width:calc(100% - 32px);color:inherit;font-size:inherit;line-height:inherit;background-color:#0000;border-radius:0;margin:0;padding:4px 16px 0;display:inline-block;overflow:auto}.markdown pre .pre-handle{color:#c9d1d9;background:#242933;justify-content:space-between;align-items:center;height:32px;padding-left:16px;padding-right:10px;font-size:12px;line-height:32px;display:flex}.markdown pre .pre-handle>span{font-family:var(--font-family-editor);align-items:center;display:inline-flex}.markdown pre .pre-handle img{width:36px;height:8px;margin:0 6px 0 0}.markdown pre .pre-handle .code-toggle{margin-left:10px}.markdown pre .pre-handle .copy,.markdown pre .pre-handle .code-toggle{cursor:pointer;font-size:14px}.markdown pre.code-collapsed{max-height:32px;overflow:hidden}.markdown pre.code-collapsed code{overflow:hidden}._tooltip_1kuma_4{display:inline-block}._tooltip-trigger_1kuma_7{cursor:pointer;display:inline-block}._tooltip-inner_1kuma_11{color:#fff;white-space:nowrap;z-index:1070;opacity:0;pointer-events:none;background:#000000bf;border-radius:4px;margin-left:-5px;padding:6px 10px;font-size:12px;line-height:1.5;transition:opacity .2s;position:fixed;transform:translate(-50%,-100%)translateY(0)}._tooltip-inner-visible_1kuma_27{opacity:1}._tooltip-content_1kuma_30{text-overflow:ellipsis;white-space:nowrap;max-width:250px;overflow:hidden}._tooltip-arrow_1kuma_36{border:5px solid #0000;border-top-color:#000000bf;width:0;height:0;position:absolute;top:100%;left:50%;transform:translate(-50%)}._dropdown_x4h0x_4{display:inline-block;position:relative}._dropdown-trigger_x4h0x_8{cursor:pointer;display:inline-block}._dropdown-menu_x4h0x_12{z-index:1050;opacity:0;background:#fff;border-radius:6px;min-width:120px;margin-top:4px;padding:4px 0;transition:opacity .2s,transform .2s;position:absolute;top:100%;right:0;transform:translateY(8px);box-shadow:0 4px 12px #00000026}._dropdown-menu-visible_x4h0x_27{opacity:1;transform:translateY(0)}._dropdown-item_x4h0x_31{color:#333;cursor:pointer;padding:8px 16px;font-size:14px;transition:background-color .2s}._dropdown-item_x4h0x_31:hover{background-color:#f5f5f5}._dropdown-item_x4h0x_31:active{background-color:#e8e8e8}._modal-mask_uwsht_4{z-index:1000;opacity:0;background-color:#00000073;justify-content:center;align-items:center;transition:opacity .3s;display:flex;position:fixed;inset:0}._modal-mask-visible_uwsht_18{opacity:1}._modal_uwsht_4{background:#fff;border-radius:8px;flex-direction:column;max-height:90vh;transition:transform .3s;display:flex;transform:scale(.9);box-shadow:0 6px 16px #00000026}._modal-mask-visible_uwsht_18 ._modal_uwsht_4{transform:scale(1)}._modal-header_uwsht_34{border-bottom:1px solid #f0f0f0;justify-content:space-between;align-items:center;padding:10px;display:flex}._modal-title_uwsht_41{color:#333;font-size:16px;font-weight:500}._modal-close_uwsht_46{color:#999;cursor:pointer;border-radius:4px;justify-content:center;align-items:center;width:32px;height:32px;font-size:20px;transition:all .2s;display:flex}._modal-close_uwsht_46:hover{color:#333;background-color:#f5f5f5}._modal-body_uwsht_62{flex:1;padding:6px;overflow:auto}._modal-footer_uwsht_67{text-align:right;border-top:1px solid #f0f0f0;padding:16px 24px}._previewArea_d2mv6_2{background:var(--color-bg-card,#f8f9fa);cursor:grab;border-radius:var(--radius-base);width:100%;height:100%;position:relative;overflow:hidden}._previewArea_d2mv6_2:active{cursor:grabbing}._previewArea_d2mv6_2:fullscreen{cursor:grab;width:100vw;height:100vh}.mermaid-mini ._previewArea_d2mv6_2{visibility:hidden}._previewContent_d2mv6_22{transform-origin:50%;touch-action:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex}._previewContent_d2mv6_22 svg{max-width:100%;max-height:100%;display:block;font-family:var(--font-family-base)!important}._errorTip_d2mv6_38{color:var(--color-danger,#ef4444);word-break:break-all;background:#fef2f2;border-bottom:1px solid #fee2e2;flex-shrink:0;max-height:120px;padding:8px 12px;font-size:12px;overflow:auto}._emptyTip_d2mv6_50{color:var(--color-text-light,#9ca3af);pointer-events:none;justify-content:center;align-items:center;font-size:14px;display:flex;position:absolute;inset:0}.mermaid-react-root{min-height:36px;margin:10px 0}.mermaid-wrapper,.mermaid-loading{background-color:var(--color-bg-card,#f8f9fa);border:1px solid var(--color-border,#e4e4e4);box-sizing:border-box;border-radius:8px;transition:all .3s ease-in-out;position:relative;overflow:hidden}.mermaid-wrapper.mermaid-mini,.mermaid-loading.mermaid-mini{max-height:36px}.mermaid-wrapper .mermaid-content.disabled-move,.mermaid-loading .mermaid-content.disabled-move{cursor:initial!important}.mermaid-wrapper.mermaid-collapsed,.mermaid-loading.mermaid-collapsed{max-height:200px}.mermaid-wrapper.mermaid-collapsed:after,.mermaid-loading.mermaid-collapsed:after{pointer-events:none;content:"";background:linear-gradient(to bottom, transparent, var(--color-bg,#ebebeb));height:28px;position:absolute;bottom:0;left:0;right:0}.mermaid-loading{justify-content:center;align-items:center;height:200px;display:flex}.mermaid-wrapper svg{display:block}.mermaid-title{align-items:center;line-height:34px;display:flex;position:absolute;left:6px}.mermaid-title .mermaid-title-tag{color:#fc366e;background:#fdf1f6;border-radius:4px;align-items:center;margin-right:4px;display:flex;overflow:hidden}.mermaid-title .mermaid-title-text{box-sizing:border-box;border:1px solid #fc366e;border-left:0;border-radius:0 4px 4px 0;height:20px;margin-left:-1px;padding-left:5px;padding-right:4px;font-size:12px;line-height:18px;display:inline-block}.mermaid-title img{width:auto;height:20px;margin:0;display:inline-block}.mermaid-toolbar,.mermaid-toolbar-loading{z-index:1;opacity:.8;gap:4px;position:absolute;top:4px;right:0}.mermaid-toolbar .circle,.mermaid-toolbar-loading .circle{width:24px;height:24px;font-size:12px;line-height:24px}.mermaid-toolbar-loading{margin-right:10px}.mermaid-fullscreen-target:fullscreen{background:var(--color-bg-white,#fff);width:100vw;height:100vh;overflow:hidden}.mermaid-fullscreen-target:fullscreen .mermaid-content{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.mermaid-fullscreen-target:fullscreen .mermaid-toolbar{top:4px;right:8px}.mermaid-content{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.driver-popover button{box-shadow:none!important}.mermaid-code-modal .ant-modal-header{margin:0}.mermaid-code-modal .ant-modal-content{padding:20px 10px}.mermaid-code-modal .ant-modal-content .markdown{padding:0}:root,[data-theme=light]{--color-bg:#ebecf0;--color-bg-card:#ebecf0;--color-bg-white:#fff;--color-bg-overlay:#ffffffd9;--color-bg-tooltip:#61616141;--color-text:#61677c;--color-text-primary:#202124;--color-text-secondary:#595959;--color-text-muted:#9ba3b5;--color-text-heading:#1d1d1d;--color-text-light:#6b7280;--color-text-placeholder:#999;--color-shadow:#babecc;--color-shadow-light:#fff;--shadow-sm:-5px -5px 10px var(--color-shadow-light), 5px 5px 10px var(--color-shadow);--shadow-md:-5px -5px 20px var(--color-shadow-light), 5px 5px 20px var(--color-shadow);--shadow-lg:-5px -5px 14px var(--color-shadow-light), 5px 5px 14px var(--color-shadow);--shadow-inset:inset 1px 1px 2px var(--color-shadow), inset -1px -1px 2px var(--color-shadow-light);--shadow-inset-deep:inset 2px 2px 5px var(--color-shadow), inset -5px -5px 10px var(--color-shadow-light);--shadow-pressed:inset 1px 1px 2px var(--color-shadow), inset -1px -1px 2px var(--color-shadow-light);--color-active:#75bcff;--color-red:#ae1100;--color-primary:#1677ff;--color-danger:#ef4444;--color-success:#52c41a;--color-warning:#faad14;--color-border:#dbdada;--color-border-light:#f0f0f0;--color-border-dark:#d0d7de;--ruler:16px;--font-family-base:Inter, Noto Sans SC, -apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Microsoft YaHei, sans-serif;--font-family-mono:source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;--font-family-editor:SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;--radius-sm:3px;--radius-base:8px;--radius-lg:10px;--radius-round:50%}[data-theme=dark]{--color-bg:#1a1d2e;--color-bg-card:#1e2235;--color-bg-white:#2e3350;--color-bg-overlay:#1e2235e6;--color-bg-tooltip:#2e3350;--color-text:#b0b8c8;--color-text-primary:#e8ecf4;--color-text-secondary:#8892a4;--color-text-muted:#6b7280;--color-text-heading:#e8ecf4;--color-text-light:#8892a4;--color-text-placeholder:#6b7280;--color-shadow:#12141f;--color-shadow-light:#28304a;--shadow-sm:-5px -5px 10px var(--color-shadow-light), 5px 5px 10px var(--color-shadow);--shadow-md:-5px -5px 20px var(--color-shadow-light), 5px 5px 20px var(--color-shadow);--shadow-lg:-5px -5px 14px var(--color-shadow-light), 5px 5px 14px var(--color-shadow);--shadow-inset:inset 1px 1px 2px var(--color-shadow), inset -1px -1px 2px var(--color-shadow-light);--shadow-inset-deep:inset 2px 2px 5px var(--color-shadow), inset -5px -5px 10px var(--color-shadow-light);--shadow-pressed:inset 1px 1px 2px var(--color-shadow), inset -1px -1px 2px var(--color-shadow-light);--color-active:#4f9eff;--color-red:#ef4444;--color-primary:#4f9eff;--color-danger:#ef4444;--color-success:#52c41a;--color-warning:#faad14;--color-border:#2e3350;--color-border-light:#1e2235;--color-border-dark:#3d4258;--ruler:16px;--font-family-base:Inter, Noto Sans SC, -apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Microsoft YaHei, sans-serif, "PingFang SC", "Microsoft YaHei", sans-serif;--font-family-mono:source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;--font-family-editor:SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;--radius-sm:3px;--radius-base:8px;--radius-lg:10px;--radius-round:50%}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuI6fMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf)format("truetype")}@font-face{font-family:Noto Sans SC;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/notosanssc/v40/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYw.ttf)format("truetype")}@font-face{font-family:Noto Sans SC;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/notosanssc/v40/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG-3FnYw.ttf)format("truetype")}@font-face{font-family:Noto Sans SC;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/notosanssc/v40/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaGwHCnYw.ttf)format("truetype")}@font-face{font-family:Noto Sans SC;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/notosanssc/v40/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaGzjCnYw.ttf)format("truetype")}[data-theme=dark] code{color:#f0a0a0!important;background:#3d4258!important}pre [data-theme=dark] code{color:inherit!important;background:0 0!important}[data-theme=dark] pre .pre-handle{color:#c9d1d9!important;background:#2e3350!important}[data-theme=dark] pre{box-shadow:inset 5px 5px 10px #0a0b12,inset -5px -5px 10px #2a2e42!important}[data-theme=dark] .mermaid-wrapper,[data-theme=dark] .mermaid-loading,[data-theme=dark] .mermaid-fullscreen-target{background-color:#2e3350!important}[data-theme=dark] .mermaid-fullscreen-target:fullscreen{background:#1a1d2e!important}[data-theme=dark] ::-webkit-scrollbar-thumb{background:#fff3!important}[data-theme=dark] ::-webkit-scrollbar-thumb:hover{background:#ffffff59!important}*{-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:#0000;-webkit-tap-highlight-color:transparent;outline:none}body,html{font-family:var(--font-family-base);background:var(--color-bg)!important}body{margin:0}.circle{background-color:var(--color-bg);text-align:center;width:40px;height:40px;margin:0 5px 0 0;padding:0;line-height:40px;transition:shadow .2s ease-in-out;display:inline-block;top:40px;left:40px;box-shadow:var(--shadow-sm)!important;border-radius:100%!important}.circle:hover{box-shadow:-2px -2px 5px var(--color-shadow-light), 2px 2px 5px var(--color-shadow)!important}.circle:active{box-shadow:var(--shadow-inset)!important}@media screen and (width<=500px){.shadow_not_active,.shadow,.circle{box-shadow:-2px -2px 10px var(--color-shadow-light), 2px 2px 10px var(--color-shadow)!important}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:#7e7e7e52;border-radius:4px;transition:all .5s}::-webkit-scrollbar-thumb:hover{background:#757575c2}::-webkit-scrollbar-track{background:0 0;border:none;border-radius:4px}.driver-popover{all:unset;font-family:var(--driver-popover-font-family,"Helvetica Neue", Inter, ui-sans-serif, "Apple Color Emoji", Helvetica, Arial, sans-serif);box-sizing:border-box;color:#2d2d2d;z-index:1000000000;background-color:#fff;border-radius:5px;min-width:250px;max-width:300px;margin:0;padding:15px;position:fixed;top:0;right:0;box-shadow:0 1px 10px #0006}.driver-popover-title{zoom:1;margin:0;font-size:19px;font-weight:700;line-height:1.5;display:block;position:relative}.driver-popover-close-btn{all:unset;cursor:pointer;color:#d2d2d2;z-index:1;text-align:center;width:32px;height:28px;font-size:18px;font-weight:500;transition:color .2s;position:absolute;top:0;right:0}.driver-popover-close-btn:hover,.driver-popover-close-btn:focus{color:#2d2d2d}.driver-popover-title[style*=block]+.driver-popover-description{margin-top:5px}.driver-popover-description{zoom:1;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.5}.driver-popover-footer{text-align:right;zoom:1;justify-content:space-between;align-items:center;margin-top:15px;display:flex}.driver-popover-progress-text{color:#727272;zoom:1;font-size:13px;font-weight:400}.driver-popover-footer-btn{all:unset;box-sizing:border-box;color:#2d2d2d;cursor:pointer;zoom:1;background-color:#fff;border:1px solid #ccc;border-radius:3px;outline:0;padding:3px 7px;font-size:12px;line-height:1.3;text-decoration:none;display:inline-block}.driver-popover-footer .driver-popover-btn-disabled{opacity:.5;pointer-events:none}.driver-popover-footer-btn:hover,.driver-popover-footer-btn:focus{background-color:#f7f7f7}.driver-popover-navigation-btns{flex-grow:1;justify-content:flex-end;display:flex}.driver-popover-navigation-btns button+button{margin-left:4px}.driver-popover-arrow{content:"";border:5px solid #fff;position:absolute}.driver-popover-arrow-side-over{display:none}.driver-popover-arrow-side-left{border-top-color:#0000;border-bottom-color:#0000;border-right-color:#0000;left:100%}.driver-popover-arrow-side-right{border-top-color:#0000;border-bottom-color:#0000;border-left-color:#0000;right:100%}.driver-popover-arrow-side-top{border-bottom-color:#0000;border-left-color:#0000;border-right-color:#0000;top:100%}.driver-popover-arrow-side-bottom{border-top-color:#0000;border-left-color:#0000;border-right-color:#0000;bottom:100%}.driver-popover-arrow-side-center,.driver-popover-arrow-none{display:none}.driver-active .driver-overlay{pointer-events:none}.driver-active.driver-no-scroll{overflow:hidden}.driver-active *{pointer-events:none}.driver-active .driver-active-element,.driver-active .driver-active-element *,.driver-popover,.driver-popover *{pointer-events:auto}@keyframes animate-fade-in{0%{opacity:0}to{opacity:1}}.driver-fade .driver-overlay{animation:animate-fade-in var(--driver-animation-duration,.4s) ease-in-out}.driver-fade .driver-popover{animation:animate-fade-in var(--driver-animation-duration,.4s)}.driver-active-element-parent-no-scroll{overflow:hidden!important}.driver-no-interaction,.driver-no-interaction *{pointer-events:none!important}
2
+ /*$vite$:1*/
@@ -0,0 +1,4 @@
1
+ import { default as RenderMarkdown } from './components/RenderMarkdown';
2
+ import { default as markdownFormat } from './components/RenderMarkdown/utils/render-markdown';
3
+ export default RenderMarkdown;
4
+ export { markdownFormat };
package/dist/index.mjs ADDED
@@ -0,0 +1,7 @@
1
+ import { n as e, t } from "./RenderMarkdown-TzdhCUFl.js";
2
+ //#region src/index.ts
3
+ var n = t;
4
+ //#endregion
5
+ export { n as default, e as markdownFormat };
6
+
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import RenderMarkdown from './components/RenderMarkdown';\nimport markdownFormat from './components/RenderMarkdown/utils/render-markdown';\n\nexport default RenderMarkdown;\n\nexport { markdownFormat}"],"mappings":";;AAGA,IAAA,IAAe"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { default as RenderMarkdown } from './components/RenderMarkdown';
2
+ export default RenderMarkdown;
@@ -0,0 +1,5 @@
1
+ declare const js: {
2
+ externalsName: string;
3
+ url: string;
4
+ }[];
5
+ export default js;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 通用下载:将 Blob 或 URL 作为文件下载
3
+ * @param {Blob|string} data - Blob 对象或 URL 字符串
4
+ * @param {string} filename - 下载文件名
5
+ * @param {object} [options] - 可选配置
6
+ * @param {string} [options.type] - MIME 类型(data 为 Blob 时自动识别)
7
+ */
8
+ export declare function downloadFile(data: Blob | string, filename: string): void;
9
+ /**
10
+ * 下载 SVG 字符串为 .svg 文件
11
+ * @param {string} svgStr - SVG 内容
12
+ * @param {string} filename - 文件名(不含后缀)
13
+ */
14
+ export declare function downloadSVG(svgStr: string, filename?: string): void;
15
+ /**
16
+ * 将 SVG 渲染为 PNG 并下载
17
+ * @param {string} svgStr - SVG 内容
18
+ * @param {string} filename - 文件名(不含后缀)
19
+ * @param {number} [scale=2] - 缩放倍数(提高清晰度)
20
+ */
21
+ export declare function downloadSVGAsPNG(svgStr: string, filename?: string, scale?: number): void;
@@ -0,0 +1,19 @@
1
+ type StepItem = {
2
+ element: string;
3
+ popover: {
4
+ title: string;
5
+ description: string;
6
+ };
7
+ };
8
+ type Data = Array<{
9
+ steps: Array<StepItem>;
10
+ condition?: () => boolean;
11
+ onOpen?: () => void;
12
+ id: String;
13
+ }>;
14
+ /**
15
+ * 用于渲染引导
16
+ * @param data 引导数据,数组结构,每一项为一个引导
17
+ */
18
+ export default function driverRender(data: Data): void;
19
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare const jsMap: Record<string, string>;
2
+ export declare function preload(cdnName: string | string[]): void;
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "remons-render-markdown",
3
+ "version": "1.0.0-beta.1",
4
+ "description": "一个基于 React 的 Markdown 渲染组件,支持 GFM(GitHub Flavored Markdown)、代码高亮、Mermaid 图表等功能。",
5
+ "type": "module",
6
+ "main": "./dist/index.mjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.mjs",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./dist/index.css": "./dist/index.css"
15
+ },
16
+ "style": "./dist/index.css",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "vite build",
22
+ "build:analyze": "vite-bundle-visualizer --output dist/stats.html --open",
23
+ "dev": "vite",
24
+ "lint": "eslint . --ext .ts,.tsx",
25
+ "format": "prettier --write .",
26
+ "changeset": "changeset",
27
+ "version": "changeset version",
28
+ "release": "changeset publish"
29
+ },
30
+ "keywords": [
31
+ "markdown",
32
+ "react",
33
+ "render",
34
+ "gfm",
35
+ "mermaid"
36
+ ],
37
+ "author": "",
38
+ "license": "MIT",
39
+ "peerDependencies": {
40
+ "react": ">=18.0.0",
41
+ "react-dom": ">=18.0.0",
42
+ "@ant-design/icons": ">=5.0.0"
43
+ },
44
+ "peerDependenciesMeta": {
45
+ "@ant-design/icons": {
46
+ "optional": false
47
+ }
48
+ },
49
+ "devDependencies": {
50
+ "@ant-design/icons": "^6.3.2",
51
+ "@changesets/cli": "^2.27.0",
52
+ "@types/react": "^18.2.0",
53
+ "@types/react-dom": "^18.2.0",
54
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
55
+ "@typescript-eslint/parser": "^6.0.0",
56
+ "@vitejs/plugin-react": "^4.3.0",
57
+ "eslint": "^8.0.0",
58
+ "less": "^4.2.0",
59
+ "prettier": "^3.0.0",
60
+ "react": "^18.2.0",
61
+ "react-dom": "^18.2.0",
62
+ "typescript": "^5.3.0",
63
+ "vite": "^8.0.0",
64
+ "vite-bundle-visualizer": "^1.2.1",
65
+ "vite-plugin-commonjs": "^0.10.4",
66
+ "vite-plugin-dts": "^4.0.0"
67
+ },
68
+ "dependencies": {
69
+ "@mdit/plugin-alert": "^1.0.1",
70
+ "@mdit/plugin-tab": "^1.0.1",
71
+ "@panzoom/panzoom": "^4.6.2",
72
+ "classnames": "^2.5.1",
73
+ "dayjs": "^1.11.21",
74
+ "driver.js": "^1.8.0",
75
+ "highlight.js": "^11.11.1",
76
+ "lodash.clonedeep": "^4.5.0",
77
+ "markdown-it": "^14.3.0",
78
+ "markdown-it-anchor": "^9.2.1",
79
+ "markdown-it-link-attributes": "^4.0.1",
80
+ "markdown-it-toc-done-right": "^4.2.0",
81
+ "methods-r": "^2.0.0-rc.1"
82
+ }
83
+ }
package/readme.md ADDED
@@ -0,0 +1,36 @@
1
+ # render-markdown
2
+
3
+ 一个基于 React 的 Markdown 渲染组件,支持 GFM(GitHub Flavored Markdown)、代码高亮、Mermaid 图表等功能。
4
+
5
+ ## 技术方案
6
+
7
+ ### 技术栈
8
+
9
+ | 类别 | 技术选型 | 说明 |
10
+ |------|---------|------|
11
+ | 框架 | React 18 | 组件库基础框架 |
12
+ | 构建工具 | Vite | 基于 Rollup 的极速构建器 |
13
+ | 语言 | TypeScript | 提供类型定义 |
14
+ | 样式方案 | CSS Modules / 内联样式 | 轻量无外部依赖 |
15
+ | 代码规范 | ESLint + Prettier | 统一代码风格 |
16
+ | 发布工具 | changesets | 语义化版本管理与 changelog 生成 |
17
+
18
+ ### 核心功能
19
+
20
+
21
+ ### 目录结构(计划)
22
+
23
+ ```
24
+ ├── dist/ # 打包输出
25
+ ├── package.json
26
+ ├── tsconfig.json
27
+ ├── vite.config.ts
28
+ └── README.md
29
+ ```
30
+
31
+ ### 发布计划
32
+
33
+ 1. 初始化项目结构与 package.json
34
+ 2. 配置 Vite + TypeScript 构建
35
+ 3. 实现核心功能
36
+ 4. 配置 changesets 并发布到 npm