tldraw
Version:
A tiny little drawing editor.
52 lines (44 loc) • 1.33 kB
text/typescript
import { StateNode, TLKeyboardEventInfo, TLPointerEventInfo } from '@tldraw/editor'
import { updateHoveredShapeId } from '../../../tools/selection-logic/updateHoveredShapeId'
export class Idle extends StateNode {
static override id = 'idle'
override onPointerMove(info: TLPointerEventInfo) {
switch (info.target) {
case 'shape':
case 'canvas': {
updateHoveredShapeId(this.editor)
}
}
}
override onPointerDown(info: TLPointerEventInfo) {
this.parent.transition('pointing', info)
}
override onEnter() {
this.editor.setCursor({ type: 'cross', rotation: 0 })
}
override onExit() {
updateHoveredShapeId.cancel()
}
override onKeyDown(info: TLKeyboardEventInfo) {
if (info.key === 'Enter') {
if (this.editor.getIsReadonly()) return null
const onlySelectedShape = this.editor.getOnlySelectedShape()
// If the only selected shape is editable, start editing it
if (
onlySelectedShape &&
this.editor.getShapeUtil(onlySelectedShape).canEdit(onlySelectedShape)
) {
this.editor.setCurrentTool('select')
this.editor.setEditingShape(onlySelectedShape.id)
this.editor.root.getCurrent()?.transition('editing_shape', {
...info,
target: 'shape',
shape: onlySelectedShape,
})
}
}
}
override onCancel() {
this.editor.setCurrentTool('select')
}
}