mcpField
E
excalidraw

excalidraw

github.com/aws-samples设计与 UI19742 次安装3 周前更新
代码仓库

关于 excalidraw

excalidraw 是使用 Excalidraw 格式生成手绘风格图表的技能,适合将结构、流程和关系转化为图形。它通过 Canvas 面板交互式呈现图表,并提供多种图表类型与元素格式指引。

主要功能

  1. 01生成手绘风格图表
  2. 02支持流程图和架构图
  3. 03支持思维导图与关系图
  4. 04提供泳道、时序和 ER 图模式
  5. 05通过 Canvas 面板交互呈现

适用场景

  1. 01绘制系统组件与依赖关系
  2. 02展示流程步骤和决策
  3. 03梳理概念层级与关联
  4. 04表达对象随时间的交互

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aws-samples/sample-strands-agent-with-agentcore --skill excalidraw

安装后在 Claude Code 中输入/excalidraw确认已加载。

附带文件diagram-patterns.md

详细介绍

Excalidraw 图表

使用 Excalidraw 格式创建手绘风格的图表、流程图、架构图和思维导图。图表会在 Canvas 面板中交互式呈现。

何时使用此技能

当用户想要可视化结构、流程或关系,而非原始数字时,请使用 create_excalidraw_diagram。

适合使用此技能的场景……适合使用可视化技能的场景……
系统架构图按季度划分的销售数据
流程图或决策树调查回应百分比
序列图/交互图随时间变化的股价
思维导图或概念图市场份额细分
形状、方框、箭头、标签任何 x/y 或分段/数值数据

图表类型

根据用户意图选择。对于泳道图、类图、序列图、ER 图和 DFD 图,生成前请阅读 diagram-patterns.md。

意图类型模式
流程步骤、工作流、决策流程图矩形 + 菱形 + 箭头(参见示例)
系统组件、依赖关系架构图区域矩形 + 方框 + 箭头
概念层级、头脑风暴思维导图中心节点 + 放射状分支箭头
实体连接、关联关系图方框 + 带标签的箭头
跨职能工作流、参与者职责泳道图diagram-patterns.md
OOP 类结构、继承关系类图diagram-patterns.md
对象随时间的交互序列图diagram-patterns.md
数据库实体和关系ER 图diagram-patterns.md
数据转换、数据移动DFDdiagram-patterns.md

可用工具

  • create_excalidraw_diagram(elements, title, background_color):根据 Excalidraw 元素 JSON 生成图表

配色方案

在所有图表中统一使用以下颜色。

主色(描边、箭头、文本)
名称十六进制用途
蓝色#4a9eed主要操作、链接
琥珀色#f59e0b警告、突出显示
绿色#22c55e成功、积极
红色#ef4444错误、消极
紫色#8b5cf6点缀、特殊项目
青色#06b6d4信息、次要内容
填充色(形状背景)
颜色十六进制适用场景
浅蓝色#a5d8ff输入、来源、主要节点
浅绿色#b2f2bb成功、输出、已完成
浅橙色#ffd8a8警告、待处理、外部内容
浅紫色#d0bfff处理、中间件
浅红色#ffc9c9错误、关键内容
浅黄色#fff3bf注释、决策
浅青绿色#c3fae8存储、数据
背景区域颜色(用于 opacity: 35,对图层分组)
颜色十六进制适用场景
蓝色区域#dbe4ffUI/前端层
紫色区域#e5dbff逻辑/Agent 层
绿色区域#d3f9d8数据/工具层

元素格式

必填字段(所有元素)

type、id(唯一字符串)、x、y、width、height

默认值(使用这些值时可省略)

strokeColor="#1e1e1e"、backgroundColor="transparent"、fillStyle="solid"、strokeWidth=2、roughness=1、opacity=100

形状类型

矩形

{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
  "roundness": { "type": 3 }, "backgroundColor": "#a5d8ff", "fillStyle": "solid" }
  • roundness: { type: 3 } 表示圆角

椭圆

{ "type": "ellipse", "id": "e1", "x": 100, "y": 100, "width": 150, "height": 150 }

菱形

{ "type": "diamond", "id": "d1", "x": 100, "y": 100, "width": 150, "height": 150 }

形状上的标签(推荐——无需单独的文本元素)

{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
  "label": { "text": "My Label", "fontSize": 20 } }
  • 适用于矩形、椭圆和菱形
  • 文本自动居中;容器自动调整大小以适应文本
  • 也适用于箭头:"label": { "text": "connects" }

独立文本(仅用于标题和注释)

{ "type": "text", "id": "t1", "x": 150, "y": 50, "text": "Title", "fontSize": 24 }
  • x 是左边缘。若要在位置 cx 居中:设置 x = cx - text.length × fontSize × 0.25

箭头

{ "type": "arrow", "id": "a1", "x": 300, "y": 150, "width": 150, "height": 0,
  "points": [[0,0],[150,0]], "endArrowhead": "arrow",
  "startBinding": { "elementId": "r1", "fixedPoint": [1, 0.5] },
  "endBinding": { "elementId": "r2", "fixedPoint": [0, 0.5] } }
  • points:相对于元素 x, y 的 [dx, dy] 偏移量
  • endArrowhead:null | "arrow" | "bar" | "dot" | "triangle"
  • strokeStyle:"solid" | "dashed" | "dotted"
  • 用于绑定的 fixedPoint:顶部 [0.5,0]、底部 [0.5,1]、左侧 [0,0.5]、右侧 [1,0.5]
伪元素(不绘制——用于控制行为)

cameraUpdate — 设置视口

{ "type": "cameraUpdate", "width": 800, "height": 600, "x": 0, "y": 0 }
  • x, y:可视区域的左上角(场景坐标)
  • 必须采用 4:3 比例:400×300、600×450、800×600、1200×900、1600×1200
  • 始终将 cameraUpdate 放在第一个元素,以框定图表
  • 无需 id

delete — 按 ID 移除元素

{ "type": "delete", "ids": "r1,a1,t2" }
  • 以逗号分隔的待移除元素 ID
  • 更新现有图表以添加替代元素前,使用此项移除原有元素
  • 切勿重新使用已删除的 ID——为替代元素分配新 ID

摄像机尺寸指南

图表显示宽度约为 700px。使用以下标准尺寸:

尺寸宽 × 高适用场景
S400 × 3002–3 个元素,近景
M600 × 450小型图表区域
L800 × 600标准(默认)
XL1200 × 900大型概览
XXL1600 × 1200非常复杂的图表

字体大小规则:

  • 正文 / 标签:最小 16
  • 标题 / 标题文本:最小 20
  • 注释:最小 14(谨慎使用)
  • XL/XXL 摄像机:将最小字号提高约 4px

元素尺寸规则:

  • 带标签的矩形/椭圆:最小 120 × 60
  • 元素之间留出 20–30px 间距

更新现有图表

用户要求修改图表时,上下文中会提供当前元素。请使用完整更新后的元素数组进行回复:

  • 未更改的元素保留相同的 id
  • 修改需要更改的元素字段
  • 省略需要移除的元素
  • 使用此前未用过的唯一 ID 添加新元素

示例:流程图

[
  { "type": "cameraUpdate", "width": 800, "height": 600, "x": 0, "y": 0 },
  { "type": "rectangle", "id": "el-1",
    "x": 300, "y": 60, "width": 160, "height": 60,
    "strokeColor": "#4a9eed", "backgroundColor": "#a5d8ff",
    "fillStyle": "solid", "roundness": { "type": 3 },
    "label": { "text": "Start", "fontSize": 18 } },
  { "type": "diamond", "id": "el-2",
    "x": 280, "y": 170, "width": 200, "height": 90,
    "strokeColor": "#f59e0b", "backgroundColor": "#fff3bf",
    "fillStyle": "solid",
    "label": { "text": "Decision?", "fontSize": 16 } },
  { "type": "arrow", "id": "el-3",
    "x": 380, "y": 120, "width": 0, "height": 50,
    "points": [[0,0],[0,50]], "endArrowhead": "arrow",
    "startBinding": { "elementId": "el-1", "fixedPoint": [0.5, 1] },
    "endBinding": { "elementId": "el-2", "fixedPoint": [0.5, 0] } },
  { "type": "rectangle", "id": "el-4",
    "x": 300, "y": 320, "width": 160, "height": 60,
    "strokeColor": "#22c55e", "backgroundColor": "#b2f2bb",
    "fillStyle": "solid", "roundness": { "type": 3 },
    "label": { "text": "End", "fontSize": 18 } },
  { "type": "arrow", "id": "el-5",
    "x": 380, "y": 260, "width": 0, "height": 60,
    "points": [[0,0],[0,60]], "endArrowhead": "arrow",
    "startBinding": { "elementId": "el-2", "fixedPoint": [0.5, 1] },
    "endBinding": { "elementId": "el-4", "fixedPoint": [0.5, 0] } }
]

应避免的常见错误

  • 摄像机必须采用精确的 4:3 比例——非 4:3 视口会导致失真
  • 始终以 cameraUpdate 开头——否则视口位置不可预测
  • 元素数组中不得包含注释——elements 必须是有效的 JSON。切勿在数组中添加 // 或 /* */ 注释,否则会导致 JSON 解析失败
  • 文本对比度——切勿在白色背景上使用浅灰色。白色背景上的文本颜色最低为 #757575。浅色填充上的文本使用深色变体(#15803d,而非 #22c55e)
  • 箭头标签需要留出空间——长标签会溢出短箭头;请缩短标签或加长箭头
  • 不要使用表情符号——Excalidraw 的字体无法渲染表情符号
  • 元素重叠——检查标签、方框和区域叠层是否彼此重叠(至少留出 20px 间距)
  • 摄像机留白——在摄像机框架内留出空白;不要让摄像机尺寸与内容尺寸完全一致

UI 指南(来自 tools-config)

元素格式:

  • 必填:type、x、y、id
  • 形状(矩形/椭圆/菱形):添加 width、height
  • 箭头/线条:添加 width、height、points [[0,0],[dx,dy]]
  • 文本:添加 text、fontSize
  • 在形状上使用 label 字段来显示居中文本
  • 使用带 points 路径的箭头元素连接形状

评论

支持 Markdown