TLReactShape.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /* eslint-disable @typescript-eslint/no-explicit-any */
  2. import { TLAsset, TLShape, TLShapeProps } from '@tldraw/core'
  3. export interface TLCommonShapeProps<M = unknown> {
  4. meta: M
  5. isEditing: boolean
  6. isBinding: boolean
  7. isHovered: boolean
  8. isSelected: boolean
  9. isErasing: boolean
  10. asset?: TLAsset
  11. }
  12. export type TLIndicatorProps<M = unknown> = TLCommonShapeProps<M>
  13. export interface TLComponentProps<M = unknown> extends TLCommonShapeProps<M> {
  14. events: {
  15. onPointerMove: React.PointerEventHandler
  16. onPointerDown: React.PointerEventHandler
  17. onPointerUp: React.PointerEventHandler
  18. onPointerEnter: React.PointerEventHandler
  19. onPointerLeave: React.PointerEventHandler
  20. onKeyUp: React.KeyboardEventHandler
  21. onKeyDown: React.KeyboardEventHandler
  22. }
  23. onEditingEnd: () => void
  24. }
  25. export interface TLReactShapeConstructor<S extends TLReactShape = TLReactShape> {
  26. new (props: S['props'] & { type: any }): S
  27. id: string
  28. smart: boolean
  29. }
  30. export abstract class TLReactShape<P extends TLShapeProps = TLShapeProps, M = any> extends TLShape<
  31. P,
  32. M
  33. > {
  34. abstract ReactComponent: (props: TLComponentProps<M>) => JSX.Element | null
  35. abstract ReactIndicator: (props: TLIndicatorProps<M>) => JSX.Element | null
  36. }