docs-doc-example
Use when writing or editing step-by-step showcase pages under a module's apps/docs examples contents.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when writing or editing step-by-step showcase pages under a module's apps/docs examples contents.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when changing any retikz apps/docs content, route data, i18n, demo, SourceLinks, or schema reference before loading the matching page-type skill.
Use when retikz needs multiple independent LLMs to review the same fixed code, ADR, implementation plan, test contract, commit, or working-tree snapshot before a gate or delivery decision.
Use when an Alpha ADR needs a pre-implementation capability gate, or a Beta milestone needs code-based completeness and package-boundary auditing.
Use when planning a retikz architecture direction, version roadmap, or alpha feature that may need a long-lived ADR before implementation.
Use when retikz work is primarily refactoring, reorganization, renaming cleanup, modularization, or internal simplification and should start from a reviewed implementation plan before code changes.
Use when retikz implementation, adversarial testing, and docs are complete, and an ADR or beta TODO needs changelog, contract consistency review, roadmap status updates, or final human acknowledgement.
| name | docs-doc-example |
| description | Use when writing or editing step-by-step showcase pages under a module's apps/docs examples contents. |
apps/docs/src/modules/docs/contents/<module>/examples/** 下加 / 改示例页docs-doc-principle 拿通用规则ComponentPreview 按需契约本 skill 只覆盖示例页特有的页面结构、step 写法、demo 命名、Prompt 节、限制 节。其它一切(三处协同、双语、写作风格、Comparison、自绘图示、宽度、阅读时间等)以 principle 为准。
示例页必须站在第一次跟做的读者视角写:每一步先说“这一步让图多了什么、为什么现在加”,再链接到组件或提术语。不要用作者全知视角跳到最终架构、内部机制或完整 API;读者应能按 step 顺序复制、观察、理解。
示例页是 retikz 能力综合 showcase——以经典 / 实用图表为载体,循序渐进教读者用 retikz 能力。与现有三种 section 的边界:
| Section | 服务什么 |
|---|---|
concepts/ | 抽象概念(坐标系 / anchor / 分层) |
components/ | 单组件 API 字典 + 该组件自身的多个 demo |
examples/(本 skill) | 多组件 + 多能力组合成完整图,按 step 教 |
不是什么:
<Comparison> 提一下)| 顺序 | section | 要点 |
|---|---|---|
| 1 | ## 引言 | frontmatter 后 2-3 句说明目的;hero 复用最后一个 step demo |
| 2 | ## Prompt | 用 <ExamplePrompt short="..." detailed={...} /> |
| 3 | ## 过程 | 每步 ### Step N:<主题>,累加式 <ComponentPreview>,H3 进 TOC |
| 4 | ## 能力 | 组件 link + 在图中角色 + step 锚链接 |
| 5 | ## 限制 | 只列本例触到的 gap;为空可省略 |
| 6 | ## 扩展阅读 | 进阶、优化、相关组件/概念;无合适内容可省略 |
title / description 仍写在 frontmatter;正文不要再写 H1。
每个 step 严格 4 行:
### Step N:<主题> —— H3,进右侧 TOC,让读者能从目录跳到任意 step[circlePath](/kernel/components/draw/step#circlepath)),让用户能 deepdive<ComponentPreview files="<id>-NN-<theme>" /> —— 累加式<Comparison target="tikz"> —— 仅当 retikz 写法与 TikZ 差异极大、TikZ 老用户可能困惑时才用。默认不要正文不主动写"这里 TikZ 是 \draw ..."——TikZ 关系一律走 <Comparison>(principle 已规定)。
| 项 | 规则 |
|---|---|
| 形态 | 累加式——第 N 个 demo = 前 N-1 step 的全部内容 + 本 step 新增 |
| 命名 | <example-id>-NN-<theme>.demo.tsx,NN 两位 0 补齐(如 karl-circle-01-circle.demo.tsx) |
| 双语 | 按文本是否实际不同判断:通用数学 / 公式 / 符号 label(sin α / f(x) / α)单 .demo.tsx;含本地化散文 / 解释性文本的 step 才分 .zh.demo.tsx / .en.demo.tsx |
| Helpers | 默认内联在每个 demo,保证独立可读;demo 体量过大、或多步共用同一套基础设施时,按下文「多文件 demo」拆成子文件(作为 files 的附加项一并展示,不再被隐藏) |
| Hero 复用 | 引言里 hero <ComponentPreview> 复用最后一个 step 的 demo(不另起 -final 文件) |
| 颜色字面值 | demo 里的 stroke / fill / bg 等 必须用字面量颜色——优先命名色,默认用 darkorange 做强调;只有一张图里需要两个以上并列示例,或明确要做对比时才用 dodgerblue;若同图已经用了 darkorange + dodgerblue 仍需要第三个强调色,再用 darkviolet。red / green 只保留给错误 / 成功语义,灰阶只保留 gray / lightgray / dimgray,并尽量不用 black / white;只有需要精确对齐时才用 hex / oklch。不能用 var(--border) / var(--background) 等 CSS 自定义属性。预览工具条可下载 SVG,CSS var 在新上下文里无定义 → fallback 成黑,下载后图变样 |
| DSL 选择 | 默认用 Sugar <Draw way={[...]}>,不用 Kernel <Path><Step /></Path>。way 数组 1 行就能表达 line / curve / cubic / bend / step (fold) / cycle / label,比 Kernel 的多行 children 更短、与 components/draw/* 例子风格一致。例外:示例本身就是教 <Path> / <Step> Kernel 用法、或需要 fill + 闭合(DrawWay.Cycle)的填充形状 |
累加式意味着代码会复制,但读者在任意 step 打开源码都能拿到可运行完整版本;复杂例子再用多文件 demo 分担体量。
默认每个 demo 内联自包含(见上)。当 demo 体量过大、或多步共用同一套基础设施(自定义形状 / 布局 / 端点表)时,把内容拆成子文件,由 <ComponentPreview files={[...]}> 一并展示。files 的第一项必须是主 demo,后续项才是附加子文件。子文件分两类:
| 类别 | 命名 | 用途 | diff |
|---|---|---|---|
| 步内子文件 | <主demo名>.<subName>.tsx(无 .demo,如 ohms-law-circuit-02-shapes.elements.tsx) | 只属于某一步、随步演进 | 自动(见下) |
| 共享子文件 | 独立名 <name>.tsx(如 circuitShapes.tsx) | 跨多步复用、基本不变的基础设施 | 不 diff |
.tsx / .ts,不要带 .demo.tsx——带了会被当成可渲染 demo(要求 default 导出 FC、并去算 IR)。<subName> 在各步间保持稳定(如各步都叫 .elements.tsx),这是自动 diff 配对的钥匙。<主demo名>.data.ts 子文件(多数据集 <主demo名>.<dataset>.data.ts),有专属 Database 图标——通用约定见 ComponentPreview 按需契约。渐进式例子若用子文件,每步的步内子文件必须是该阶段的自包含快照——直接写出本步完整内容,不要 import 上一步的子文件。import 链虽 DRY,但相邻步是不同模块、diff 没有意义;自包含快照换来「步与步之间真正可 diff」。跨步不变的部分才抽进共享子文件。
<ComponentPreview> 的 files 第一项给主 demo 设了 diffFrom 后:
diffFrom 的步内子文件,自动与 <主 diffFrom>.<同 subName>.tsx 做 diff(默认只看新增高亮);baseline 不存在则静默无 diff。<ComponentPreview
files={[
{ file: 'ohms-law-circuit-02-shapes', diffFrom: 'ohms-law-circuit-01-meters' },
'ohms-law-circuit-02-shapes.elements.tsx',
'circuitShapes.tsx',
]}
/>
{/* elements.tsx 自动 diff ohms-law-circuit-01-meters.elements.tsx;circuitShapes.tsx 共享件不 diff */}
跨步 / 跨名的特殊配对,用显式对象形式覆盖:{ file: 'a.tsx', diffFrom: 'b.tsx' }。
每个示例页都有一个 ## Prompt 节,让读者:
<ExamplePrompt><ExamplePrompt> 只读,默认显示 short;有 detailed 时可展开。按钮行为由组件负责:复制时加 retikz 外部上下文,发送到站内 AI 时只填当前 prompt。
short:markdown,一句话能讲完。重点是「画什么」,不是「怎么画」。可用 **bold** 强调关键短语detailed:markdown,3-7 个分类(如「几何」/「颜色」/「标注」/「文字」),分类标题用 **bold**,每类下 bullet 列表 ≤ 5 行detailed 可省略——简单 example 单 short 即可short / detailed——两边语义对齐,不强求逐字翻译@retikz/* API + 让它查 llms.txt,文档化任何具体能力都是反模式## 能力 用 3 列表格:组件(markdown link 到 components 页)/ 在本例中扮演的角色 / 主要 step([N](#slug) 跳 H3)。
中文或含符号 H3 的 slug 用 github-slugger 算,不手写猜:
cd apps/docs && node -e "import('github-slugger').then(({default: S}) => { const s = new S(); console.log(s.slug('步骤 4:画 30° 扇形 + α 标签')); })"
## 限制 只列本例触到的“做不了 / 做得绕”的 gap;为空省略。表格列固定:能力 / 限制、计划、现状 / 兜底。
计划 只用三类:🚧 未来支持 / ❌ 不支持 / 🔧 优化方案。表格 cell 内 | 转义为 \|。
页面最后一节(原 Related,已更名)。不只放链接——可以基于本例写一些扩展 / 优化 / 进阶内容,给读者指出下一步往哪走:
没有可写的扩展 / 进阶、也没有相关链接时,整节可省略。
教程类推荐目标约 10 分钟,但时间只作为可读性诊断,不构成 BLOCKING,也不能单独触发拆页。超出推荐时先检查步骤是否重复、阶段目标是否清晰、是否能跳读;只有读者任务或教程主线能独立成立时才拆子页(如「基础版 / 完整版」或按主题拆篇)。
7-9 step + 引言 + Prompt + 能力 + 限制 + 扩展阅读 一般在 8-10 分钟以内。
容易混淆的几个点:
| 写在哪 | 内容 |
|---|---|
components/draw/overview 的 ## 例子 节 | 围绕 <Draw> 单组件的多种能力(直线 / 曲线 / 箭头 / 折角…)的小 demo,每个 demo 几行 |
examples/karl-circle 整页 | 用 <Draw> + <Node> + <Coordinate> + <Path> 等多个组件组合出一张完整图,循序渐进教过程 |
简单判断:单组件能讲完 → 组件页 Examples 子节;多个组件协同 → 示例页。
示例 demo 写 edge 默认用 <Draw way={[...]}>,不要嵌 <Path><Step /></Path>。速查:
| 需求 | way 形态 |
|---|---|
| 直线 | ['A', 'B'] |
| 折角 | ['A', '|-', 'B'] / ['A', '-|', 'B'] |
| 二次 / 三次曲线 | ['A', { curve: [cx, cy] }, 'B'] / { cubic: [[c1x, c1y], [c2x, c2y]] } |
| bend | ['A', { bend: 'right', angle: 45 }, 'B'] |
| label | ['A', { label: 'midway' }, 'B'] 或 { label: { text, position, side } } |
| 闭合填充 | ['A', 'B', 'C', DrawWay.Cycle] |
端点优先写 node id 字符串,编译期自动按 toward 方向裁到节点边框;裸坐标不会 auto-clip。
## AI Prompt —— 用 ## Prompt,AI 是工具不是主语<id>-NN-<theme>.demo.tsx,NN 两位 0 补齐(-01- 而非 -1-)files 的附加项显式列出(否则读者看不到)。反过来,渐进式例子的步内子文件不要 import 上一步——那样 diff 失效,必须写成自包含快照.demo.tsx 后缀 —— 子文件是纯源码、不渲染,用普通 .tsx / .ts;带 .demo.tsx 会被当成可渲染 demo#### 而非 ### —— H4 不入 TOC,读者无法跳到具体 step;统一用 ###sin α / α / f(x) 这种通用符号留单文件var(--border) / var(--muted) 等) —— 工具条 SVG 下载在新上下文里 var 解析失败 fallback 成黑;颜色统一用字面量(hex / oklch / 命名色)。需要 light/dark 适配的"装饰性"色(grid help line / 背景遮罩)取浅色字面值(如 #e5e7eb / #ffffff),下载后在白底文档里仍然好看<Path><Step /> 而非 <Draw way={[...]}> —— 示例 edge 一律走 Draw sugar(way 数组 1 行就能表达),Kernel Path 仅在示例本身教 Path/Step 内部或需要 fill+cycle 时用;理由见 demo 文件约定的「DSL 选择」行<Comparison>(principle 已规定);正文专心讲 retikz| 记得转义[N](#<H3-slug>) 锚链接,读者能从能力反向跳到对应 step;中文 H3 的 slug 别手写、用 github-slugger 跑一下确认<ExamplePrompt> 写了 textarea / 编辑 —— 它现在是只读 + 复制 / 发送双按钮,没有就地编辑路径;要改 prompt 在 AI 面板里改