tldraw
Version:
A tiny little drawing editor.
51 lines (47 loc) • 1.43 kB
text/typescript
import {
Editor,
ExtractShapeByProps,
richTextValidator,
TLEventInfo,
TLRichText,
TLShape,
TLShapeId,
} from '@tldraw/editor'
/** @internal */
export function hasRichText(
shape: TLShape
): shape is ExtractShapeByProps<{ richText: TLRichText }> {
return 'richText' in shape.props && richTextValidator.isValid(shape.props.richText)
}
/**
* Start editing a shape that has rich text, such as text, note, geo, or arrow shapes.
* This will enter the editing state for the shape and optionally select all the text.
*
* @param editor - The editor instance.
* @param shapeOrId - The shape to start editing. This shape must have a richText property with a TLRichText value.
* @param options - Options: selectAll or info (TLEventInfo)
*
* @public
*/
export function startEditingShapeWithRichText(
editor: Editor,
shapeOrId: TLShape | TLShapeId,
options: { selectAll?: boolean; info?: TLEventInfo } = {}
) {
const shape = typeof shapeOrId === 'string' ? editor.getShape(shapeOrId) : shapeOrId
if (!shape) return
if (!editor.canEditShape(shape)) return
if (!hasRichText(shape)) {
throw new Error('Shape does not have rich text')
}
// Finish this shape and start editing the next one
editor.setEditingShape(shape)
editor.setCurrentTool('select.editing_shape', {
...options.info,
target: 'shape',
shape: shape,
})
if (options.selectAll) {
editor.emit('select-all-text', { shapeId: shape.id })
}
}