write-example
作者: tldraw
為 tldraw SDK 範例應用程式撰寫範例。用於建立新範例、新增 SDK 示範,或在 apps/examples 中撰寫範例程式碼。
npx skills add https://github.com/tldraw/tldraw --skill write-exampleWriting tldraw examples
The examples project (apps/examples) contains minimal demonstrations of how to use the tldraw SDK. Examples are embedded on the docs site and deployed to examples.tldraw.com.
Standards for examples in apps/examples/src/examples.
Example structure
Each example lives in its own folder:
apps/examples/src/examples/
└── my-example/
├── README.md # Required metadata
├── MyExampleExample.tsx # Main example file
└── my-example.css # Optional styles
Folder name
- Lowercase kebab-case:
custom-canvas,button-demo,magical-wand - Used as the URL path for the example
README.md
Required frontmatter format:
---
title: Example title
component: ./ExampleFile.tsx
category: category-id
priority: 1
keywords: [keyword1, keyword2]
---
One-line summary of what this example demonstrates.
---
Detailed explanation of the example. Include code snippets here if they help explain concepts not obvious from the example code itself.
Frontmatter fields
| Field | Description |
|---|---|
| title | Sentence case, corresponds to folder name |
| component | Relative path to example file |
| category | One of the valid category IDs (see below) |
| priority | Display order within category (lower = higher) |
| keywords | Search terms (avoid obvious terms like "tldraw") |
Valid categories
getting-started, configuration, editor-api, ui, layout, events, shapes/tools, collaboration, data/assets, use-cases
Example file
Naming
- PascalCase ending with "Example":
CustomCanvasExample.tsx,ButtonExample.tsx - Name should correspond to the folder name and title
Structure
import { Tldraw } from 'tldraw'
import 'tldraw/tldraw.css'
export default function MyExampleExample() {
return (
<div className="tldraw__editor">
<Tldraw />
</div>
)
}
Requirements:
- Must have a default export React component
- Use
tldraw__editorclass for full-page examples - Import
tldraw/tldraw.cssfor styles
Layout
- Full page: wrap in
<div className="tldraw__editor"> - Inset: see existing examples for page layout patterns
Styles
- Put CSS in a separate file named after the example:
my-example.css - Import alongside tldraw CSS:
import './my-example.css' - Avoid extensive inline styles via the
styleprop
Control panels
For examples that need buttons or controls, use the TopPanel component slot with TldrawUiButton:
import { Tldraw, TldrawUiButton, useEditor } from 'tldraw'
import 'tldraw/tldraw.css'
import './my-example.css'
function MyControls() {
const editor = useEditor()
return (
<div className="tlui-menu my-controls">
<TldrawUiButton type="normal" onClick={() => editor.zoomIn()}>
Zoom in
</TldrawUiButton>
<TldrawUiButton type="normal" onClick={() => editor.zoomOut()}>
Zoom out
</TldrawUiButton>
</div>
)
}
export default function MyExampleExample() {
return (
<div className="tldraw__editor">
<Tldraw components={{ TopPanel: MyControls }} />
</div>
)
}
CSS for control panels:
.my-controls {
display: flex;
flex-wrap: wrap;
margin: 8px;
}
Comments
Use footnote format with numbered references:
import { Tldraw, type TLComponents } from 'tldraw'
import 'tldraw/tldraw.css'
// [1]
const components: TLComponents = {
PageMenu: null,
}
export default function CustomComponentsExample() {
return (
<div className="tldraw__editor">
{/* [2] */}
<Tldraw components={components} />
</div>
)
}
/*
[1]
Define component overrides outside the React component so they're static.
If defined inside, use useMemo to prevent recreation on every render.
[2]
Pass component overrides via the components prop.
*/
Example types
Tight examples
- Narrow focus on a specific SDK feature
- Minimal styling
- Meant to be read, not used
- Remove any extraneous code
Use-case examples
- Show a recognizable user experience
- Prioritize clarity and completeness
- Category:
use-cases
Additional files
- Split complex code into separate files if it distracts from the example's purpose
- Example: complex input component in
Input.tsx - Keep the main example file focused on demonstrating the concept
Important
- Follow React and TypeScript best practices
- Never use title case for titles - use sentence case
- Keep examples minimal and focused
來自 tldraw 的更多技能
write-issue
tldraw
在 tldraw 儲存庫中撰寫和維護 GitHub 問題的參考標準。當其他技能或工作流程需要問題時,作為輔助指引使用…
official
write-pr
tldraw
在 tldraw 儲存庫中撰寫 pull request 標題與說明的參考標準。當其他技能或工作流程需要時,作為輔助指引使用…
official
write-release-notes
tldraw
為 tldraw SDK 版本撰寫發行說明文章。適用於建立新的版本文件、從頭起草發行說明,或審閱發行…
official
write-tbp
tldraw
撰寫關於 tldraw 功能與實作細節的技術部落格文章。適用於創作說明 tldraw 如何解決有趣問題的部落格內容。
official
write-unit-tests
tldraw
為 tldraw SDK 撰寫單元測試與整合測試。在 packages/editor 或…中建立新測試、增加測試覆蓋率或修復失敗測試時使用。
official
clean-copy
tldraw
在一個新分支上重新實作當前分支,並建立乾淨且具敘事品質的 Git 提交歷史。當被要求建立乾淨的複製分支、清理提交…時使用。
official
commit-changes
tldraw
為目前的變更建立一個 git 提交。當被要求提交變更、製作提交、產生提交訊息,或提交目前的工作目錄時使用…
official
issue
tldraw
根據使用者描述,在 tldraw 儲存庫中建立並研究一個 GitHub issue。當使用者提及 issue、要求建立 issue、回報錯誤時使用。
official