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 저장소에서 풀 리퀘스트 제목과 설명을 작성하기 위한 참조 표준입니다. 다른 스킬이나 워크플로우가 필요할 때 지원 지침으로 사용됩니다...
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 이슈를 생성하고 조사합니다. 사용자가 이슈를 언급하거나, 이슈 생성을 요청하거나, 버그를 신고할 때 사용합니다.
official