UNPKG

tldraw

Version:

A tiny little drawing editor.

51 lines (47 loc) 1.43 kB
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 }) } }