@windrun-huaiin/diaomao 2.0.0 → 2.0.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.
- package/.changeset/d8-template.mdx +1 -1
- package/dev-scripts.config.json +3 -1
- package/package.json +4 -2
- package/patches/fumadocs-ui@15.3.3.patch +131 -0
- package/src/mdx/blog/index.mdx +7 -0
- package/src/mdx/blog/ioc.mdx +4 -1
- package/src/mdx/blog/nextjs-architecture.mdx +132 -0
- package/src/mdx/blog/why-docs.mdx +0 -527
package/dev-scripts.config.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@windrun-huaiin/diaomao",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@changesets/cli": "^2.29.5",
|
|
59
|
-
"@windrun-huaiin/dev-scripts": "^6.6.
|
|
59
|
+
"@windrun-huaiin/dev-scripts": "^6.6.1",
|
|
60
60
|
"@tailwindcss/cli": "^4.1.11",
|
|
61
61
|
"@tailwindcss/postcss": "^4.1.7",
|
|
62
62
|
"@types/hast": "^3.0.4",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
},
|
|
82
82
|
"files": [
|
|
83
83
|
".changeset",
|
|
84
|
+
"patches",
|
|
84
85
|
"src",
|
|
85
86
|
"public",
|
|
86
87
|
".gitignore",
|
|
@@ -115,6 +116,7 @@
|
|
|
115
116
|
"easy-changeset": "dev-scripts easy-changeset",
|
|
116
117
|
"dj": "pnpm run easy-changeset && pnpm changeset status",
|
|
117
118
|
"djv": "pnpm changeset version",
|
|
119
|
+
"djvp": "pnpm changeset publish",
|
|
118
120
|
"generate-blog-index": "dev-scripts generate-blog-index -v",
|
|
119
121
|
"check-translations": "dev-scripts check-translations -v",
|
|
120
122
|
"clean-translations": "dev-scripts clean-translations -v",
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
diff --git a/dist/components/layout/toc-clerk.d.ts.map b/dist/components/layout/toc-clerk.d.ts.map
|
|
2
|
+
index 30dfe1ce45819999661e37005f3c0238a596b678..478144443e205959381138a5ff0cbe45bdae2f7b 100644
|
|
3
|
+
--- a/dist/components/layout/toc-clerk.d.ts.map
|
|
4
|
+
+++ b/dist/components/layout/toc-clerk.d.ts.map
|
|
5
|
+
@@ -1 +1 @@
|
|
6
|
+
-{"version":3,"file":"toc-clerk.d.ts","sourceRoot":"","sources":["../../../src/components/layout/toc-clerk.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOxD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CA2FxE"}
|
|
7
|
+
|
|
8
|
+
+{"version":3,"file":"toc-clerk.d.ts","sourceRoot":"","sources":["../../../src/components/layout/toc-clerk.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA8BxD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CAyFxE"}
|
|
9
|
+
|
|
10
|
+
diff --git a/dist/components/layout/toc-clerk.js b/dist/components/layout/toc-clerk.js
|
|
11
|
+
index 7c128748acf238d7fd63a446876f35d5a0679fed..58bd8c8effdf362d62acd20d2910b61093327659 100644
|
|
12
|
+
--- a/dist/components/layout/toc-clerk.js
|
|
13
|
+
+++ b/dist/components/layout/toc-clerk.js
|
|
14
|
+
@@ -1,10 +1,32 @@
|
|
15
|
+
'use client';
|
|
16
|
+
-import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
+import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
import * as Primitive from 'fumadocs-core/toc';
|
|
19
|
+
import { useEffect, useRef, useState } from 'react';
|
|
20
|
+
import { cn } from '../../utils/cn.js';
|
|
21
|
+
import { TocThumb } from '../../components/layout/toc-thumb.js';
|
|
22
|
+
import { TocItemsEmpty } from '../../components/layout/toc.js';
|
|
23
|
+
+// Helper functions based on toc-clerk.tsx
|
|
24
|
+
+function getItemOffset(depth) {
|
|
25
|
+
+ // This is the main padding-left for the TOC item text
|
|
26
|
+
+ if (depth <= 2)
|
|
27
|
+
+ return 14; // e.g., pl for h2
|
|
28
|
+
+ if (depth === 3)
|
|
29
|
+
+ return 26; // e.g., pl for h3
|
|
30
|
+
+ return 36; // e.g., pl for h4
|
|
31
|
+
+}
|
|
32
|
+
+function getLineOffset(depth) {
|
|
33
|
+
+ // This is the offset for the line/decoration *within* the padded Primitive.TOCItem
|
|
34
|
+
+ // e.g., if depth >=3, line is at 10px from the start of the content box of TOCItem
|
|
35
|
+
+ return depth >= 3 ? 10 : 0;
|
|
36
|
+
+}
|
|
37
|
+
+// New helper function to extract step info from URL
|
|
38
|
+
+function getStepInfoFromUrl(url) {
|
|
39
|
+
+ const match = url.match(/^#(\d+)-/);
|
|
40
|
+
+ if (match && match[1]) {
|
|
41
|
+
+ return { isStep: true, stepNumber: match[1] };
|
|
42
|
+
+ }
|
|
43
|
+
+ return { isStep: false, stepNumber: null };
|
|
44
|
+
+}
|
|
45
|
+
export default function ClerkTOCItems({ items }) {
|
|
46
|
+
const containerRef = useRef(null);
|
|
47
|
+
const [svg, setSvg] = useState();
|
|
48
|
+
@@ -18,21 +40,25 @@ export default function ClerkTOCItems({ items }) {
|
|
49
|
+
let w = 0, h = 0;
|
|
50
|
+
const d = [];
|
|
51
|
+
for (let i = 0; i < items.length; i++) {
|
|
52
|
+
- const element = container.querySelector(`a[href="#${items[i].url.slice(1)}"]`);
|
|
53
|
+
+ const item = items[i];
|
|
54
|
+
+ const element = container.querySelector(`a[href="${item.url}"]`);
|
|
55
|
+
if (!element)
|
|
56
|
+
continue;
|
|
57
|
+
const styles = getComputedStyle(element);
|
|
58
|
+
- const offset = getLineOffset(items[i].depth) + 1, top = element.offsetTop + parseFloat(styles.paddingTop), bottom = element.offsetTop +
|
|
59
|
+
+ const currentLineOffset = getLineOffset(item.depth);
|
|
60
|
+
+ const visualElementX = getItemOffset(item.depth) + currentLineOffset;
|
|
61
|
+
+ const top = element.offsetTop + parseFloat(styles.paddingTop);
|
|
62
|
+
+ const bottom = element.offsetTop +
|
|
63
|
+
element.clientHeight -
|
|
64
|
+
parseFloat(styles.paddingBottom);
|
|
65
|
+
- w = Math.max(offset, w);
|
|
66
|
+
+ w = Math.max(visualElementX, w);
|
|
67
|
+
h = Math.max(h, bottom);
|
|
68
|
+
- d.push(`${i === 0 ? 'M' : 'L'}${offset} ${top}`);
|
|
69
|
+
- d.push(`L${offset} ${bottom}`);
|
|
70
|
+
+ d.push(`${i === 0 ? 'M' : 'L'}${visualElementX} ${top}`);
|
|
71
|
+
+ d.push(`L${visualElementX} ${bottom}`);
|
|
72
|
+
}
|
|
73
|
+
setSvg({
|
|
74
|
+
path: d.join(' '),
|
|
75
|
+
- width: w + 1,
|
|
76
|
+
+ width: w + 2, // Adjusted for a 3px stroke (1.5px on each side of center)
|
|
77
|
+
height: h,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
@@ -45,29 +71,31 @@ export default function ClerkTOCItems({ items }) {
|
|
81
|
+
}, [items]);
|
|
82
|
+
if (items.length === 0)
|
|
83
|
+
return _jsx(TocItemsEmpty, {});
|
|
84
|
+
- return (_jsxs(_Fragment, { children: [svg ? (_jsx("div", { className: "absolute start-0 top-0 rtl:-scale-x-100", style: {
|
|
85
|
+
+ return (_jsxs("div", { className: "relative", children: [svg ? (_jsx("div", { className: "absolute start-0 top-0 rtl:-scale-x-100 pointer-events-none z-[5]", style: {
|
|
86
|
+
width: svg.width,
|
|
87
|
+
height: svg.height,
|
|
88
|
+
- maskImage: `url("data:image/svg+xml,${
|
|
89
|
+
- // Inline SVG
|
|
90
|
+
- encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${svg.width} ${svg.height}"><path d="${svg.path}" stroke="black" stroke-width="1" fill="none" /></svg>`)}")`,
|
|
91
|
+
- }, children: _jsx(TocThumb, { containerRef: containerRef, className: "mt-(--fd-top) h-(--fd-height) bg-fd-primary transition-all" }) })) : null, _jsx("div", { className: "flex flex-col", ref: containerRef, children: items.map((item, i) => (_jsx(TOCItem, { item: item, upper: items[i - 1]?.depth, lower: items[i + 1]?.depth }, item.url))) })] }));
|
|
92
|
+
-}
|
|
93
|
+
-function getItemOffset(depth) {
|
|
94
|
+
- if (depth <= 2)
|
|
95
|
+
- return 14;
|
|
96
|
+
- if (depth === 3)
|
|
97
|
+
- return 26;
|
|
98
|
+
- return 36;
|
|
99
|
+
-}
|
|
100
|
+
-function getLineOffset(depth) {
|
|
101
|
+
- return depth >= 3 ? 10 : 0;
|
|
102
|
+
+ maskImage: `url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${svg.width} ${svg.height}"><path d="${svg.path}" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none" /></svg>`)}")`,
|
|
103
|
+
+ }, children: _jsx(TocThumb, { containerRef: containerRef, className: "bg-fd-primary transition-all duration-500 ease-in-out" }) })) : null, _jsx("div", { className: "flex flex-col", ref: containerRef, children: items.map((item, i) => (_jsx(EnhancedClerkTOCItemInternal, { item: item, upperDepth: items[i - 1]?.depth, lowerDepth: items[i + 1]?.depth }, item.url))) })] }));
|
|
104
|
+
}
|
|
105
|
+
-function TOCItem({ item, upper = item.depth, lower = item.depth, }) {
|
|
106
|
+
- const offset = getLineOffset(item.depth), upperOffset = getLineOffset(upper), lowerOffset = getLineOffset(lower);
|
|
107
|
+
+function EnhancedClerkTOCItemInternal({ item, upperDepth = item.depth, lowerDepth = item.depth, }) {
|
|
108
|
+
+ const { isStep, stepNumber } = getStepInfoFromUrl(item.url);
|
|
109
|
+
+ const lineOffsetWithinItem = getLineOffset(item.depth);
|
|
110
|
+
+ const upperLineOffsetWithinItem = getLineOffset(upperDepth);
|
|
111
|
+
+ const lowerLineOffsetWithinItem = getLineOffset(lowerDepth);
|
|
112
|
+
+ const CIRCLE_DIAMETER_PX = 14;
|
|
113
|
+
+ const CIRCLE_RADIUS_PX = CIRCLE_DIAMETER_PX / 2;
|
|
114
|
+
return (_jsxs(Primitive.TOCItem, { href: item.url, style: {
|
|
115
|
+
paddingInlineStart: getItemOffset(item.depth),
|
|
116
|
+
- }, className: "prose relative py-1.5 text-sm text-fd-muted-foreground transition-colors [overflow-wrap:anywhere] first:pt-0 last:pb-0 data-[active=true]:text-fd-primary", children: [offset !== upperOffset ? (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", className: "absolute -top-1.5 start-0 size-4 rtl:-scale-x-100", children: _jsx("line", { x1: upperOffset, y1: "0", x2: offset, y2: "12", className: "stroke-fd-foreground/10", strokeWidth: "1" }) })) : null, _jsx("div", { className: cn('absolute inset-y-0 w-px bg-fd-foreground/10', offset !== upperOffset && 'top-1.5', offset !== lowerOffset && 'bottom-1.5'), style: {
|
|
117
|
+
- insetInlineStart: offset,
|
|
118
|
+
- } }), item.title] }));
|
|
119
|
+
+ }, className: "prose group relative py-1.5 text-sm text-fd-muted-foreground transition-colors [overflow-wrap:anywhere] first:pt-0 last:pb-0 data-[active=true]:text-fd-primary", children: [lineOffsetWithinItem !== upperLineOffsetWithinItem ? (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", className: "absolute -top-1.5 size-4 rtl:-scale-x-100 pointer-events-none", style: { insetInlineStart: Math.min(lineOffsetWithinItem, upperLineOffsetWithinItem), zIndex: 1 }, children: _jsx("line", { x1: upperLineOffsetWithinItem - Math.min(lineOffsetWithinItem, upperLineOffsetWithinItem), y1: "0", x2: lineOffsetWithinItem - Math.min(lineOffsetWithinItem, upperLineOffsetWithinItem), y2: "12", className: cn('stroke-fd-foreground/10', 'group-data-[active=true]:stroke-fd-primary'), strokeWidth: "1", strokeLinecap: "round" }) })) : null, _jsx("div", { className: cn('absolute inset-y-0 w-px pointer-events-none', 'bg-fd-foreground/10 group-data-[active=true]:bg-fd-primary', lineOffsetWithinItem !== upperLineOffsetWithinItem && 'top-1.5', lineOffsetWithinItem !== lowerLineOffsetWithinItem && 'bottom-1.5'), style: {
|
|
120
|
+
+ insetInlineStart: lineOffsetWithinItem,
|
|
121
|
+
+ zIndex: 1,
|
|
122
|
+
+ } }), isStep && stepNumber && (_jsx("span", { className: cn('absolute z-10 flex size-[14px] rounded-full justify-center items-center', 'bg-black text-white dark:bg-white dark:text-black', 'group-data-[active=true]:bg-fd-primary group-data-[active=true]:text-white dark:group-data-[active=true]:text-black', 'font-medium text-xs'), style: {
|
|
123
|
+
+ left: lineOffsetWithinItem - CIRCLE_RADIUS_PX,
|
|
124
|
+
+ top: '50%',
|
|
125
|
+
+ transform: 'translateY(-50%)',
|
|
126
|
+
+ }, children: stepNumber })), _jsx("span", { style: {
|
|
127
|
+
+ position: 'relative',
|
|
128
|
+
+ zIndex: 1,
|
|
129
|
+
+ // marginLeft: isStep ? lineOffsetWithinItem : undefined,
|
|
130
|
+
+ }, children: item.title })] }));
|
|
131
|
+
}
|
package/src/mdx/blog/index.mdx
CHANGED
package/src/mdx/blog/ioc.mdx
CHANGED
|
@@ -7,7 +7,10 @@ date: 2025-07-22
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
<Files>
|
|
10
|
-
<ZiaFolder name="2025-
|
|
10
|
+
<ZiaFolder name="2025-07(1)" defaultOpen>
|
|
11
|
+
<ZiaFile name="2025-07-22(About Project Structure)" href="./nextjs-architecture" />
|
|
12
|
+
</ZiaFolder>
|
|
13
|
+
<ZiaFolder name="2025-05(1)">
|
|
11
14
|
<ZiaFile name="2025-05-26(Why DDaaS?)" href="./why-docs" />
|
|
12
15
|
</ZiaFolder>
|
|
13
16
|
</Files>
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: About Project Structure
|
|
3
|
+
description: Show all source code directories and files
|
|
4
|
+
icon: Gift
|
|
5
|
+
date: 2025-07-22
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Quick Started
|
|
9
|
+
|
|
10
|
+
<Files>
|
|
11
|
+
<ZiaFolder name="ROOT" anotion="Diaomao Project" defaultOpen>
|
|
12
|
+
<ZiaFolder name=".changeset" anotion="" defaultOpen>
|
|
13
|
+
<ZiaFile name="config.json" anotion="" href="" />
|
|
14
|
+
<ZiaFile name="d8-template.mdx" anotion="" href="" />
|
|
15
|
+
<ZiaFile name="README.md" anotion="项目说明文档" href="" />
|
|
16
|
+
</ZiaFolder>
|
|
17
|
+
<ZiaFile name=".env.local" anotion="本地环境变量配置" href="" />
|
|
18
|
+
<ZiaFile name=".env.local.txt" anotion="初始化配置备份" href="" />
|
|
19
|
+
<ZiaFile name=".eslintrc.json" anotion="ESLint 代码规范配置" href="" />
|
|
20
|
+
<ZiaFile name=".gitignore" anotion="Git忽略文件配置" href="" />
|
|
21
|
+
<ZiaFolder name=".source" anotion="Fuma数据源Build产物" defaultOpen>
|
|
22
|
+
<ZiaFile name="index.ts" anotion="" href="" />
|
|
23
|
+
<ZiaFile name="source.config.mjs" anotion="" href="" />
|
|
24
|
+
</ZiaFolder>
|
|
25
|
+
<ZiaFile name="CHANGELOG.md" anotion="变更记录" href="" />
|
|
26
|
+
<ZiaFile name="components.json" anotion="组件依赖清单" href="" />
|
|
27
|
+
<ZiaFile name="dev-scripts.config.json" anotion="dev-scripts脚本工具配置" href="" />
|
|
28
|
+
<ZiaFile name="LICENSE" anotion="开源许可证" href="" />
|
|
29
|
+
<ZiaFolder name="messages" anotion="翻译目录" defaultOpen>
|
|
30
|
+
<ZiaFile name="en.json" anotion="" href="" />
|
|
31
|
+
</ZiaFolder>
|
|
32
|
+
<ZiaFile name="next-env.d.ts" anotion="Next.js环境类型声明" href="" />
|
|
33
|
+
<ZiaFile name="next.config.ts" anotion="Next.js项目配置" href="" />
|
|
34
|
+
<ZiaFile name="package.json" anotion="项目依赖与脚本" href="" />
|
|
35
|
+
<ZiaFolder name="patches" anotion="" defaultOpen>
|
|
36
|
+
<ZiaFile name="fumadocs-ui@15.3.3.patch" anotion="fumadocs版本补丁" href="" />
|
|
37
|
+
</ZiaFolder>
|
|
38
|
+
<ZiaFile name="postcss.config.mjs" anotion="PostCSS 配置" href="" />
|
|
39
|
+
<ZiaFile name="source.config.ts" anotion="Fuma数据源扫描配置" href="" />
|
|
40
|
+
<ZiaFolder name="src" anotion="源码目录" defaultOpen>
|
|
41
|
+
<ZiaFolder name="app" anotion="Next.js 应用主入口目录" defaultOpen>
|
|
42
|
+
<ZiaFolder name="[locale]" anotion="Nextjs i18n路由目录" defaultOpen>
|
|
43
|
+
<ZiaFolder name="(clerk)" anotion="Clerk认证" defaultOpen>
|
|
44
|
+
<ZiaFile name="layout.tsx" anotion="布局" href="" />
|
|
45
|
+
<ZiaFolder name="sign-in" anotion="" defaultOpen>
|
|
46
|
+
<ZiaFolder name="[[...sign-in]]" anotion="" defaultOpen>
|
|
47
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
48
|
+
</ZiaFolder>
|
|
49
|
+
</ZiaFolder>
|
|
50
|
+
<ZiaFolder name="sign-up" anotion="" defaultOpen>
|
|
51
|
+
<ZiaFolder name="[[...sign-up]]" anotion="" defaultOpen>
|
|
52
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
53
|
+
</ZiaFolder>
|
|
54
|
+
</ZiaFolder>
|
|
55
|
+
<ZiaFolder name="waitlist" anotion="" defaultOpen>
|
|
56
|
+
<ZiaFolder name="[[...waitlist]]" anotion="" defaultOpen>
|
|
57
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
58
|
+
</ZiaFolder>
|
|
59
|
+
</ZiaFolder>
|
|
60
|
+
</ZiaFolder>
|
|
61
|
+
<ZiaFolder name="(home)" anotion="首页" defaultOpen>
|
|
62
|
+
<ZiaFolder name="[...catchAll]" anotion="全局404页面" defaultOpen>
|
|
63
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
64
|
+
</ZiaFolder>
|
|
65
|
+
<ZiaFolder name="blog" anotion="博客" defaultOpen>
|
|
66
|
+
<ZiaFolder name="[[...slug]]" anotion="" defaultOpen>
|
|
67
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
68
|
+
</ZiaFolder>
|
|
69
|
+
<ZiaFile name="layout.tsx" anotion="布局" href="" />
|
|
70
|
+
</ZiaFolder>
|
|
71
|
+
<ZiaFile name="layout.tsx" anotion="布局" href="" />
|
|
72
|
+
<ZiaFolder name="legal" anotion="法律" defaultOpen>
|
|
73
|
+
<ZiaFolder name="[[...slug]]" anotion="" defaultOpen>
|
|
74
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
75
|
+
</ZiaFolder>
|
|
76
|
+
<ZiaFile name="layout.tsx" anotion="布局" href="" />
|
|
77
|
+
</ZiaFolder>
|
|
78
|
+
<ZiaFile name="page.tsx" anotion="" href="" />
|
|
79
|
+
</ZiaFolder>
|
|
80
|
+
<ZiaFile name="globals.css" anotion="全局样式" href="" />
|
|
81
|
+
<ZiaFile name="layout.config.tsx" anotion="布局配置" href="" />
|
|
82
|
+
<ZiaFile name="layout.tsx" anotion="布局" href="" />
|
|
83
|
+
<ZiaFile name="loading.tsx" anotion="全局加载组件" href="" />
|
|
84
|
+
</ZiaFolder>
|
|
85
|
+
<ZiaFolder name="api" anotion="API接口" defaultOpen>
|
|
86
|
+
<ZiaFolder name="blog" anotion="博客" defaultOpen>
|
|
87
|
+
<ZiaFolder name="llm-content" anotion="FumaMDX复制接口" defaultOpen>
|
|
88
|
+
<ZiaFile name="route.ts" anotion="" href="" />
|
|
89
|
+
</ZiaFolder>
|
|
90
|
+
</ZiaFolder>
|
|
91
|
+
<ZiaFolder name="legal" anotion="法律" defaultOpen>
|
|
92
|
+
<ZiaFolder name="llm-content" anotion="FumaMDX复制接口" defaultOpen>
|
|
93
|
+
<ZiaFile name="route.ts" anotion="" href="" />
|
|
94
|
+
</ZiaFolder>
|
|
95
|
+
</ZiaFolder>
|
|
96
|
+
</ZiaFolder>
|
|
97
|
+
<ZiaFile name="robots.ts" anotion="robots.txt生成脚本" href="" />
|
|
98
|
+
<ZiaFile name="sitemap.ts" anotion="网站地图" href="" />
|
|
99
|
+
</ZiaFolder>
|
|
100
|
+
<ZiaFolder name="components" anotion="页面组件" defaultOpen>
|
|
101
|
+
<ZiaFile name="hero.tsx" anotion="首页大字组件" href="" />
|
|
102
|
+
<ZiaFile name="mdx-components.tsx" anotion="FumaMDX组件库(自定义)" href="" />
|
|
103
|
+
</ZiaFolder>
|
|
104
|
+
<ZiaFile name="i18n.ts" anotion="多语言配置" href="" />
|
|
105
|
+
<ZiaFolder name="lib" anotion="工具包" defaultOpen>
|
|
106
|
+
<ZiaFile name="appConfig.ts" anotion="应用全局配置" href="" />
|
|
107
|
+
<ZiaFile name="price-config.ts" anotion="" href="" />
|
|
108
|
+
<ZiaFile name="site-config.ts" anotion="网站图标配置" href="" />
|
|
109
|
+
<ZiaFile name="source-blog.ts" anotion="" href="" />
|
|
110
|
+
<ZiaFile name="source-legal.ts" anotion="" href="" />
|
|
111
|
+
</ZiaFolder>
|
|
112
|
+
<ZiaFolder name="mdx" anotion="FumaMDX文档" defaultOpen>
|
|
113
|
+
<ZiaFolder name="blog" anotion="博客" defaultOpen>
|
|
114
|
+
<ZiaFile name="index.mdx" anotion="" href="" />
|
|
115
|
+
<ZiaFile name="ioc.mdx" anotion="月度/统计" href="" />
|
|
116
|
+
<ZiaFile name="meta.json" anotion="FumaMDX元数据" href="" />
|
|
117
|
+
<ZiaFile name="nextjs-architecture.mdx" anotion="Next.js项目结构" href="" />
|
|
118
|
+
<ZiaFile name="why-docs.mdx" anotion="" href="" />
|
|
119
|
+
</ZiaFolder>
|
|
120
|
+
<ZiaFolder name="legal" anotion="法律" defaultOpen>
|
|
121
|
+
<ZiaFile name="index.mdx" anotion="" href="" />
|
|
122
|
+
<ZiaFile name="meta.json" anotion="FumaMDX元数据" href="" />
|
|
123
|
+
<ZiaFile name="privacy.mdx" anotion="" href="" />
|
|
124
|
+
<ZiaFile name="terms.mdx" anotion="" href="" />
|
|
125
|
+
</ZiaFolder>
|
|
126
|
+
</ZiaFolder>
|
|
127
|
+
<ZiaFile name="middleware.ts" anotion="中间件入口" href="" />
|
|
128
|
+
</ZiaFolder>
|
|
129
|
+
<ZiaFile name="tsconfig.json" anotion="TypeScript配置" href="" />
|
|
130
|
+
<ZiaFile name="tsconfig.node.json" anotion="Node.js相关TypeScript 配置" href="" />
|
|
131
|
+
</ZiaFolder>
|
|
132
|
+
</Files>
|
|
@@ -8,530 +8,3 @@ date: 2025-05-26
|
|
|
8
8
|
<Callout title="FumaMDX·All in One" type="success">
|
|
9
9
|
所有需要的语法和工具, 都在这儿
|
|
10
10
|
</Callout>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# Overview
|
|
14
|
-
<Callout title="使用方式" type="info">
|
|
15
|
-
1. 基于效率的考量, 对于高频使用语法, 一并提供对应的触发关键词, [模板配置](./mdx-snippets)
|
|
16
|
-
2. 语法示例会使用3个Tab标签
|
|
17
|
-
- 示例, tab标题为 `example`
|
|
18
|
-
- 源码, tab标题为 `source`, 方便直接copy
|
|
19
|
-
- 触发关键词, [tab标题为 `@keywords`](./mdx-snippets)
|
|
20
|
-
</Callout>
|
|
21
|
-
|
|
22
|
-
| 基础 | 高级 |
|
|
23
|
-
| ------------ | ------------ |
|
|
24
|
-
| 文档头部 | 步骤组 |
|
|
25
|
-
| 提示框 | Mermaid绘图 |
|
|
26
|
-
| 文字处理 | 数学公式 |
|
|
27
|
-
| 卡片组 | 文件层级 |
|
|
28
|
-
| Tab标签组 | 内部文件引用 |
|
|
29
|
-
| FAQ问答组 | 接口参数定义 |
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## 文档头部
|
|
33
|
-
<Tabs groupId="header" items={["example", "source", "@keywords"]}>
|
|
34
|
-
<Tab value="example">
|
|
35
|
-
# 标题 [!toc]
|
|
36
|
-
描述
|
|
37
|
-
</Tab>
|
|
38
|
-
|
|
39
|
-
```yml title="文档头部示例" tab="source"
|
|
40
|
-
---
|
|
41
|
-
title: 标题, 不允许为空
|
|
42
|
-
description: 描述, 尽量不为空
|
|
43
|
-
icon: Docs, 图标为可选; 如果标识了icon字段但未设置icon值或者是不支持的icon值, 则显示默认图标
|
|
44
|
-
---
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
```txt title="触发关键词" tab="@keywords"
|
|
48
|
-
@mdxfm 生成mdx文件头信息
|
|
49
|
-
```
|
|
50
|
-
</Tabs>
|
|
51
|
-
|
|
52
|
-
## 提示框
|
|
53
|
-
|
|
54
|
-
<Tabs groupId="callout" items={["example", "source", "@keywords"]}>
|
|
55
|
-
<Tab value="example">
|
|
56
|
-
<Callout type="info">
|
|
57
|
-
这是`无标题`的info提示框
|
|
58
|
-
</Callout>
|
|
59
|
-
|
|
60
|
-
<Callout title="info提示框" type="info">
|
|
61
|
-
这是`info`提示框, 用于提示信息
|
|
62
|
-
</Callout>
|
|
63
|
-
<Callout title="warn提示框" type="warn">
|
|
64
|
-
这是`warn`提示框, 用于警告信息
|
|
65
|
-
</Callout>
|
|
66
|
-
<Callout title="success提示框" type="success">
|
|
67
|
-
这是`success`提示框, 用于成功信息
|
|
68
|
-
</Callout>
|
|
69
|
-
<Callout title="error提示框" type="error">
|
|
70
|
-
这是`error`提示框, 用于错误信息
|
|
71
|
-
</Callout>
|
|
72
|
-
</Tab>
|
|
73
|
-
|
|
74
|
-
```mdx title="提示框示例" tab="source"
|
|
75
|
-
<Callout type="info">
|
|
76
|
-
这是`无标题`的info提示框
|
|
77
|
-
</Callout>
|
|
78
|
-
|
|
79
|
-
<Callout title="info提示框" type="info">
|
|
80
|
-
这是`info`提示框, 用于提示信息
|
|
81
|
-
</Callout>
|
|
82
|
-
|
|
83
|
-
<Callout title="warn提示框" type="warn">
|
|
84
|
-
这是warn提示框, 用于警告信息
|
|
85
|
-
</Callout>
|
|
86
|
-
|
|
87
|
-
<Callout title="success提示框" type="success">
|
|
88
|
-
这是`success`提示框, 用于成功信息
|
|
89
|
-
</Callout>
|
|
90
|
-
|
|
91
|
-
<Callout title="error提示框" type="error">
|
|
92
|
-
这是`error`提示框, 用于错误信息
|
|
93
|
-
</Callout>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
```txt title="触发关键词" tab="@keywords"
|
|
97
|
-
@mdxmsgi
|
|
98
|
-
@mdxmsgw
|
|
99
|
-
@mdxmsge
|
|
100
|
-
@mdxmsgs
|
|
101
|
-
@mdxmsg 预留的触发关键词, 自己指定类型, 省去记忆
|
|
102
|
-
```
|
|
103
|
-
</Tabs>
|
|
104
|
-
|
|
105
|
-
## 文字处理
|
|
106
|
-
|
|
107
|
-
<Tabs groupId="text-processing" items={["example", "source"]}>
|
|
108
|
-
<Tab value="example">
|
|
109
|
-
### 这是3级标题, 使用`###`号 [!toc]
|
|
110
|
-
**这是加粗文字**, 高频使用快捷键 `⌃ + ⌥ + B`
|
|
111
|
-
|
|
112
|
-
*这是斜体文字*, 高频使用快捷键 `⌃ + ⌥ + I`
|
|
113
|
-
|
|
114
|
-
~~这是删除线文字~~, 高频使用快捷键 `⌃ + ⌥ + X`
|
|
115
|
-
|
|
116
|
-
这是`高亮文字`, 高频使用快捷键 ```⌃ + ⌥ + ` ```
|
|
117
|
-
|
|
118
|
-
* 这是列表项文字, `●`标记
|
|
119
|
-
- 这是子项行文字, `缩进4个空格(推荐)`|或者一个Tab
|
|
120
|
-
* 这是子项行文字, `缩进4个空格(推荐)`|或者一个Tab
|
|
121
|
-
|
|
122
|
-
这是<u>下划线文字</u>
|
|
123
|
-
|
|
124
|
-
这是<mark>黄色背景标记文字</mark>
|
|
125
|
-
|
|
126
|
-
[这是超链接](https://ddaas.d8ger.com)
|
|
127
|
-
</Tab>
|
|
128
|
-
|
|
129
|
-
```mdx title="文字处理示例" tab="source"
|
|
130
|
-
### 这是3级标题, 使用`###`号
|
|
131
|
-
**这是加粗文字**, 高频使用快捷键 `⌃ + ⌥ + B`
|
|
132
|
-
|
|
133
|
-
*这是斜体文字*, 高频使用快捷键 `⌃ + ⌥ + I`
|
|
134
|
-
|
|
135
|
-
~~这是删除线文字~~, 高频使用快捷键 `⌃ + ⌥ + X`
|
|
136
|
-
|
|
137
|
-
这是`高亮文字`, 高频使用快捷键 ```⌃ + ⌥ + ` ```
|
|
138
|
-
|
|
139
|
-
* 这是项目行文字, `●`标记
|
|
140
|
-
- 子项行文字, `缩进4个空格(推荐)`|或者一个Tab
|
|
141
|
-
* 子项行文字, `缩进4个空格(推荐)`|或者一个Tab
|
|
142
|
-
|
|
143
|
-
这是<u>下划线文字</u>
|
|
144
|
-
|
|
145
|
-
这是<mark>黄色背景标记文字</mark>
|
|
146
|
-
|
|
147
|
-
[这是超链接](https://ddaas.d8ger.com)
|
|
148
|
-
```
|
|
149
|
-
</Tabs>
|
|
150
|
-
|
|
151
|
-
## 卡片组
|
|
152
|
-
|
|
153
|
-
<Tabs groupId="card" items={["example", "source", "@keywords"]}>
|
|
154
|
-
<Tab value="example">
|
|
155
|
-
<Cards>
|
|
156
|
-
<Card icon={<Download />} href="./ddaas" title="图标+跳转">
|
|
157
|
-
**`所见即所得`**(What you see is what you get, and what you'll get is what you've ever seen)
|
|
158
|
-
</Card>
|
|
159
|
-
<Card href="./mdx-snippets" title="无图标+跳转">
|
|
160
|
-
充分利用现代IDE的**代码模板**注入功能, 省去大量重复编码操作, 提高开发效率
|
|
161
|
-
</Card>
|
|
162
|
-
<Card title="无图标+无跳转">
|
|
163
|
-
只是问题卡片
|
|
164
|
-
</Card>
|
|
165
|
-
</Cards>
|
|
166
|
-
</Tab>
|
|
167
|
-
|
|
168
|
-
```mdx title="卡片组mdx源码" tab="source"
|
|
169
|
-
<Cards>
|
|
170
|
-
<Card icon={<Download />} href="./ddaas" title="图标+跳转">
|
|
171
|
-
**`所见即所得`**(What you see is what you get, and what you'll get is what you've ever seen)
|
|
172
|
-
</Card>
|
|
173
|
-
<Card href="./mdx-snippets" title="无图标+跳转">
|
|
174
|
-
充分利用现代IDE的**代码模板**注入功能, 省去大量重复编码操作, 提高开发效率
|
|
175
|
-
</Card>
|
|
176
|
-
<Card title="无图标+无跳转">
|
|
177
|
-
只是问题卡片
|
|
178
|
-
</Card>
|
|
179
|
-
</Cards>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
```txt title="触发关键词" tab="@keywords"
|
|
183
|
-
@mdxcg
|
|
184
|
-
@mdxscard
|
|
185
|
-
```
|
|
186
|
-
</Tabs>
|
|
187
|
-
|
|
188
|
-
### 卡片参数 [!toc]
|
|
189
|
-
<TypeTable
|
|
190
|
-
type={{
|
|
191
|
-
title: {
|
|
192
|
-
required: true,
|
|
193
|
-
type: "string",
|
|
194
|
-
description: "卡片标题",
|
|
195
|
-
default: "",
|
|
196
|
-
deprecated: false,
|
|
197
|
-
},
|
|
198
|
-
description: {
|
|
199
|
-
required: true,
|
|
200
|
-
type: "string",
|
|
201
|
-
description: "卡片描述, 支持markdown语法",
|
|
202
|
-
default: "",
|
|
203
|
-
deprecated: false,
|
|
204
|
-
},
|
|
205
|
-
icon: {
|
|
206
|
-
required: false,
|
|
207
|
-
type: "ReactNode",
|
|
208
|
-
description: "卡片图标, 支持iconify图标, 例如<DPA />",
|
|
209
|
-
default: "",
|
|
210
|
-
deprecated: false,
|
|
211
|
-
},
|
|
212
|
-
href: {
|
|
213
|
-
required: false,
|
|
214
|
-
type: "string",
|
|
215
|
-
description: "卡片跳转链接, 支持外部链接和内部链接, 内部链接最好使用相对路径, 例如 ./ddaas ",
|
|
216
|
-
default: "",
|
|
217
|
-
deprecated: false,
|
|
218
|
-
}
|
|
219
|
-
}}
|
|
220
|
-
/>
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
## Tab标签组
|
|
224
|
-
|
|
225
|
-
### 简单模式
|
|
226
|
-
<Tabs groupId="easy-tabs" items={["example", "source", "@keywords"]}>
|
|
227
|
-
<Tab value="example">
|
|
228
|
-
<Tabs groupId="example-easy-tabs" items={["tab1", "tab2"]}>
|
|
229
|
-
<Tab value="tab1">
|
|
230
|
-
这是Tab1
|
|
231
|
-
</Tab>
|
|
232
|
-
<Tab value="tab2">
|
|
233
|
-
这是Tab2
|
|
234
|
-
</Tab>
|
|
235
|
-
</Tabs>
|
|
236
|
-
</Tab>
|
|
237
|
-
|
|
238
|
-
```mdx title="简单模式示例" tab="source"
|
|
239
|
-
<Tabs groupId="example-easy-tabs" items={["tab1", "tab2"]}>
|
|
240
|
-
<Tab value="tab1">
|
|
241
|
-
这是Tab1
|
|
242
|
-
</Tab>
|
|
243
|
-
<Tab value="tab2">
|
|
244
|
-
这是Tab2
|
|
245
|
-
</Tab>
|
|
246
|
-
</Tabs>
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
```txt title="触发关键词" tab="@keywords"
|
|
250
|
-
@mdxtabs 生成mdx标签Tab组
|
|
251
|
-
@mdxstab 生成mdx单个标签Tab组子项
|
|
252
|
-
```
|
|
253
|
-
</Tabs>
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
### 安装包模式
|
|
257
|
-
<Tabs groupId="install-tabs" items={["example", "source", "@keywords"]}>
|
|
258
|
-
<Tab value="example">
|
|
259
|
-
<Tabs groupId="package-manager" persist items={["npm", "pnpm"]}>
|
|
260
|
-
```bash tab="npm"
|
|
261
|
-
npm install clerk@clerk-next
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
```bash tab="pnpm"
|
|
265
|
-
pnpm add clerk@clerk-next
|
|
266
|
-
```
|
|
267
|
-
</Tabs>
|
|
268
|
-
</Tab>
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
````mdx title="安装包模式示例" tab="source"
|
|
272
|
-
<Tabs groupId="package-manager" persist items={["npm", "pnpm"]}>
|
|
273
|
-
```bash tab="npm"
|
|
274
|
-
npm install clerk@clerk-next
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
```bash tab="pnpm"
|
|
278
|
-
pnpm add clerk@clerk-next
|
|
279
|
-
```
|
|
280
|
-
</Tabs>
|
|
281
|
-
````
|
|
282
|
-
|
|
283
|
-
```txt title="触发关键词" tab="@keywords"
|
|
284
|
-
@mdxinstalltab 生成mdx安装命令Tab
|
|
285
|
-
```
|
|
286
|
-
</Tabs>
|
|
287
|
-
|
|
288
|
-
## FAQ问答组
|
|
289
|
-
|
|
290
|
-
<Tabs groupId="faq" items={["example", "source", "@keywords"]}>
|
|
291
|
-
<Tab value="example">
|
|
292
|
-
<Accordions>
|
|
293
|
-
<Accordion id="how-to-put-elephant" title="怎样把大象装进冰箱?">
|
|
294
|
-
### 1. 步骤1 [!toc]
|
|
295
|
-
打开冰箱门
|
|
296
|
-
|
|
297
|
-
### 2. 步骤2 [!toc]
|
|
298
|
-
把大象装进去
|
|
299
|
-
|
|
300
|
-
### 3. 步骤3 [!toc]
|
|
301
|
-
关上冰箱门
|
|
302
|
-
</Accordion>
|
|
303
|
-
<Accordion id="faq" title="FAQ使用说明">
|
|
304
|
-
`id`字段可选, 如果指定, 那么该faq就能生成分享链接
|
|
305
|
-
</Accordion>
|
|
306
|
-
</Accordions>
|
|
307
|
-
</Tab>
|
|
308
|
-
|
|
309
|
-
```mdx title="FAQ问答组示例" tab="source"
|
|
310
|
-
<Accordions>
|
|
311
|
-
<Accordion id="how-to-put-elephant" title="怎样把大象装进冰箱?">
|
|
312
|
-
### 1. 步骤1 [!toc]
|
|
313
|
-
打开冰箱门
|
|
314
|
-
|
|
315
|
-
### 2. 步骤2 [!toc]
|
|
316
|
-
把大象装进去
|
|
317
|
-
|
|
318
|
-
### 3. 步骤3 [!toc]
|
|
319
|
-
关上冰箱门
|
|
320
|
-
</Accordion>
|
|
321
|
-
<Accordion id="faq" title="FAQ使用说明">
|
|
322
|
-
`id`字段可选, 如果指定, 那么该faq就能生成分享链接
|
|
323
|
-
</Accordion>
|
|
324
|
-
</Accordions>
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
```txt title="触发关键词" tab="@keywords"
|
|
328
|
-
@mdxfaq 生成mdx问答组
|
|
329
|
-
@mdxsfaq 生成mdx问答组子项
|
|
330
|
-
```
|
|
331
|
-
</Tabs>
|
|
332
|
-
|
|
333
|
-
## 标题式步骤组
|
|
334
|
-
* [上文FAQ问答示例](#how-to-put-elephant)就是一个简单的步骤组演示, 只不过它在目录中隐藏了步骤标题
|
|
335
|
-
|
|
336
|
-
<Callout title="弃用FumaDocs的Step组件" type="error">
|
|
337
|
-
FumaDocs提供的`remarkSteps`插件, 支持标题式步骤组, 这更符合人类习惯
|
|
338
|
-
|
|
339
|
-
所以, 本项目从代码层面弃用`Step`组件, 强力支持标题式步骤组的写法
|
|
340
|
-
</Callout>
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
### 标题式步骤组规则
|
|
344
|
-
* 不支持步骤组嵌套, 因为FumaDocs底层暂不支持, 重写代价大, 并且从DDaaS角度, 如果需要步骤组嵌套, 说明文档不够简练、不容易懂
|
|
345
|
-
* 命名规则规则: `###`(强烈推荐固定写法) + `空格` + `步骤编号数字≤19` + `英文.` + `至少1个空格` + `标题名称`, 例如: `### 1. 三级标题的步骤1`
|
|
346
|
-
* 不满足规则的, 会自动降级为普通标题; 步骤编号也由文档指定, `TOC底层解析不会自动递增编号, 正文渲染会自动递增`, 便于发现更改错误
|
|
347
|
-
* 多个步骤组之间用不同层级的**普通标题**分隔开来, 例如: h2、h4的标题
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
<Tabs items={["如何使用标题式步骤组"]}>
|
|
351
|
-
<Tab value="如何使用标题式步骤组">
|
|
352
|
-
### 1. 使用快捷命令
|
|
353
|
-
`@mdxstep`, 生成标准格式
|
|
354
|
-
|
|
355
|
-
### 2. 输入步骤编号
|
|
356
|
-
注意编号需要你自己维护递增
|
|
357
|
-
|
|
358
|
-
### 3. 输入步骤标题
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
### 4. 输入描述
|
|
362
|
-
|
|
363
|
-
</Tab>
|
|
364
|
-
</Tabs>
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
## Mermaid绘图
|
|
368
|
-
|
|
369
|
-
<Tabs groupId="mermaid" items={[ "example", "source", "@keywords"]}>
|
|
370
|
-
<Tab value="example">
|
|
371
|
-
<Mermaid
|
|
372
|
-
title="人生路径图·By 李笑来"
|
|
373
|
-
chart="
|
|
374
|
-
flowchart LR
|
|
375
|
-
S[起点]
|
|
376
|
-
ST[自学]
|
|
377
|
-
K[知识]
|
|
378
|
-
OK[其他知识]
|
|
379
|
-
IK[投资知识]
|
|
380
|
-
SK[销售知识]
|
|
381
|
-
PK[生产知识]
|
|
382
|
-
P[追求]
|
|
383
|
-
I[投资]
|
|
384
|
-
SA[销售]
|
|
385
|
-
PR[生产]
|
|
386
|
-
MF[(精神财富)]
|
|
387
|
-
PF[(物质财富)]
|
|
388
|
-
DO[作更多的事]
|
|
389
|
-
|
|
390
|
-
S--->ST--->K
|
|
391
|
-
K--->OK
|
|
392
|
-
K--->IK
|
|
393
|
-
K--->SK
|
|
394
|
-
K--->PK
|
|
395
|
-
OK--->P--->MF
|
|
396
|
-
IK--->I--->PF
|
|
397
|
-
SK--->SA--->PF
|
|
398
|
-
PK--->PR--->PF
|
|
399
|
-
|
|
400
|
-
MF--->DO
|
|
401
|
-
PF--->DO
|
|
402
|
-
S-...->|时间|DO
|
|
403
|
-
|
|
404
|
-
"/>
|
|
405
|
-
</Tab>
|
|
406
|
-
```mdx title="Mermaid绘图示例" tab="source"
|
|
407
|
-
<Mermaid
|
|
408
|
-
title="人生路径图·By 李笑来"
|
|
409
|
-
chart="
|
|
410
|
-
flowchart LR
|
|
411
|
-
S[起点]
|
|
412
|
-
ST[自学]
|
|
413
|
-
K[知识]
|
|
414
|
-
OK[其他知识]
|
|
415
|
-
IK[投资知识]
|
|
416
|
-
SK[销售知识]
|
|
417
|
-
PK[生产知识]
|
|
418
|
-
P[追求]
|
|
419
|
-
I[投资]
|
|
420
|
-
SA[销售]
|
|
421
|
-
PR[生产]
|
|
422
|
-
MF[(精神财富)]
|
|
423
|
-
PF[(物质财富)]
|
|
424
|
-
DO[做更多的事]
|
|
425
|
-
|
|
426
|
-
S--->ST--->K
|
|
427
|
-
K--->OK
|
|
428
|
-
K--->IK
|
|
429
|
-
K--->SK
|
|
430
|
-
K--->PK
|
|
431
|
-
OK--->P--->MF
|
|
432
|
-
IK--->I--->PF
|
|
433
|
-
SK--->SA--->PF
|
|
434
|
-
PK--->PR--->PF
|
|
435
|
-
|
|
436
|
-
MF--->DO
|
|
437
|
-
PF--->DO
|
|
438
|
-
S-...->|时间|DO
|
|
439
|
-
|
|
440
|
-
"/>
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
```txt title="触发关键词" tab="@keywords"
|
|
444
|
-
@mdxmermaid 生成mdx图标Mermaid
|
|
445
|
-
```
|
|
446
|
-
</Tabs>
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
## 数学公式
|
|
450
|
-
|
|
451
|
-
<Tabs groupId="math" items={["example", "source", "@keywords"]}>
|
|
452
|
-
<Tab value="example">
|
|
453
|
-
```math title="正态分布公式
|
|
454
|
-
f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}}
|
|
455
|
-
```
|
|
456
|
-
</Tab>
|
|
457
|
-
|
|
458
|
-
````mdx title="数学公式示例" tab="source"
|
|
459
|
-
```math title="正态分布公式"
|
|
460
|
-
f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}}
|
|
461
|
-
```
|
|
462
|
-
````
|
|
463
|
-
|
|
464
|
-
```txt title="触发关键词" tab="@keywords"
|
|
465
|
-
@mdxmath 生成mdx数学公式
|
|
466
|
-
```
|
|
467
|
-
</Tabs>
|
|
468
|
-
|
|
469
|
-
## 文件层级
|
|
470
|
-
|
|
471
|
-
<Tabs groupId="file-system" items={["example", "source", "@keywords"]}>
|
|
472
|
-
<Tab value="example">
|
|
473
|
-
<Files>
|
|
474
|
-
<ZiaFolder name="这是默认展开的文件夹" defaultOpen>
|
|
475
|
-
<ZiaFile name="这是普通文件.tsx" />
|
|
476
|
-
<ZiaFile icon={<FileLock2 />} name="这是锁定文件.txt" className="opacity-50"/>
|
|
477
|
-
<ZiaFolder name="这是置灰文件夹" defaultOpen className="opacity-50">
|
|
478
|
-
<ZiaFile name="继承父目录的置灰文件1.tsx" />
|
|
479
|
-
<ZiaFile name="继承父目录的置灰文件2.txt" />
|
|
480
|
-
</ZiaFolder>
|
|
481
|
-
<ZiaFolder name="这是默认关闭的文件夹">
|
|
482
|
-
<ZiaFile name="Search.tsx" />
|
|
483
|
-
</ZiaFolder>
|
|
484
|
-
</ZiaFolder>
|
|
485
|
-
<ZiaFolder name="这是空文件夹" className="opacity-50" disabled/>
|
|
486
|
-
</Files>
|
|
487
|
-
</Tab>
|
|
488
|
-
|
|
489
|
-
```mdx title="文件层级示例" tab="source"
|
|
490
|
-
<Files>
|
|
491
|
-
<ZiaFolder name="这是默认展开的文件夹" defaultOpen>
|
|
492
|
-
<ZiaFile name="这是普通文件.tsx" />
|
|
493
|
-
<ZiaFile icon={<FileLock2 />} name="这是锁定文件.txt" className="opacity-50"/>
|
|
494
|
-
<ZiaFolder name="这是置灰文件夹" defaultOpen className="opacity-50">
|
|
495
|
-
<ZiaFile name="继承父目录的置灰文件1.tsx" />
|
|
496
|
-
<ZiaFile name="继承父目录的置灰文件2.txt" />
|
|
497
|
-
</ZiaFolder>
|
|
498
|
-
<ZiaFolder name="这是默认关闭的文件夹">
|
|
499
|
-
<ZiaFile name="Search.tsx" />
|
|
500
|
-
</ZiaFolder>
|
|
501
|
-
</ZiaFolder>
|
|
502
|
-
<ZiaFolder name="这是空文件夹" className="opacity-50" disabled/>
|
|
503
|
-
</Files>
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
```txt title="触发关键词" tab="@keywords"
|
|
507
|
-
@mdxfiles 生成mdx文件系统示意图
|
|
508
|
-
@mdxfile 生成mdx单个文件
|
|
509
|
-
@mdxlfile 生成mdx🔐锁定文件
|
|
510
|
-
@mdxfolder 生成mdx文件夹
|
|
511
|
-
@mdxifolder 生成mdx置灰文件夹
|
|
512
|
-
@mdxefolder 生成mdx空文件夹
|
|
513
|
-
```
|
|
514
|
-
</Tabs>
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
## 内部文件引用
|
|
518
|
-
|
|
519
|
-
<Tabs groupId="internal-file-reference" items={["example", "source", "@keywords"]}>
|
|
520
|
-
<Tab value="example">
|
|
521
|
-
<include cwd lang="ts" meta='title="i18n.ts"'>
|
|
522
|
-
src/i18n.ts
|
|
523
|
-
</include>
|
|
524
|
-
</Tab>
|
|
525
|
-
|
|
526
|
-
```mdx title="内部文件引用示例" tab="source"
|
|
527
|
-
<include cwd lang="ts" meta='title="i18n.ts"'>
|
|
528
|
-
src/i18n.ts
|
|
529
|
-
</include>
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
```txt title="触发关键词" tab="@keywords"
|
|
533
|
-
@mdxitabs 生成mdx引入文件Tab组
|
|
534
|
-
@mdxistab 生成mdx单个引入文件Tab组子项
|
|
535
|
-
@mdxif 生成mdx单独引入文件
|
|
536
|
-
```
|
|
537
|
-
</Tabs>
|