> [!warning]
> 非公開APIなので自己責任で実施すること
## アクティブリーフがCanvasかを確認
```ts
app.workspace.activeLeaf.view.getViewType() === "canvas"
```
```ts
export function isActiveLeafCanvas(): boolean {
return this.unsafeApp.workspace.activeLeaf?.view.getViewType() === "canvas";
}
```
## Canvasオブジェクトの取得
```ts
app.workspace.activeLeaf.view.canvas
```
型定義を書くならこんな感じ。
```ts
interface UnsafeCanvasView extends View {
canvas: UnsafeCanvas;
requestSave(): unknown;
}
type UnsafeCardLayout = { x: number; y: number; width: number; height: number };
interface UnsafeCanvas {
posCenter(): { x: number; y: number };
createFileNode(args: {
file: TFile;
pos: { x: number; y: number };
subpath?: unknown | undefined;
size?: unknown | undefined;
position?: unknown | undefined;
save?: unknown | undefined;
focus?: unknown | undefined;
}): UnsafeCardLayout;
}
```
## Canvasにファイルをノードとして追加
以下の`addFileToCanvas`のような処理を書く。
```ts
// Canvasの中央にファイルを追加
export function addFileToCanvas(
file: TFile,
offset: { x: number; y: number } = { x: 0, y: 0 }
): UnsafeCardLayout {
const unsafeView = this.app.workspace.activeLeaf
?.view as UnsafeCanvasView;
const { x, y } = unsafeView.canvas.posCenter();
return unsafeView.canvas.createFileNode({
file,
pos: { x: x + offset.x, y: y + offset.y },
});
}
```
## 参考
- [[📜Another Quick Switcherでキャンバスにファイルを追加]]