ReferencesCountContainer.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import type { TLBounds } from '@tldraw/core'
  2. import { observer } from 'mobx-react-lite'
  3. import { useRendererContext } from '../../hooks'
  4. import type { TLReactShape } from '../../lib'
  5. import { Container } from '../Container'
  6. import { HTMLContainer } from '../HTMLContainer'
  7. export interface TLReferencesCountContainerProps<S extends TLReactShape> {
  8. hidden: boolean
  9. bounds: TLBounds
  10. shape: S
  11. }
  12. // backlinks
  13. export const ReferencesCountContainer = observer(function ReferencesCountContainer<
  14. S extends TLReactShape
  15. >({ bounds, hidden, shape }: TLReferencesCountContainerProps<S>) {
  16. const {
  17. viewport: {
  18. camera: { zoom },
  19. },
  20. components: { ReferencesCount },
  21. } = useRendererContext()
  22. if (!ReferencesCount) throw Error('Expected a ReferencesCount component.')
  23. const stop: React.EventHandler<any> = e => e.stopPropagation()
  24. const rounded = bounds.height * zoom < 50
  25. return (
  26. <Container
  27. bounds={bounds}
  28. className="tl-references-count-container"
  29. >
  30. <HTMLContainer>
  31. <span
  32. style={{
  33. position: 'absolute',
  34. left: '100%',
  35. pointerEvents: 'all',
  36. transformOrigin: 'left top',
  37. transform: 'translateY(6px) scale(var(--tl-scale))',
  38. }}
  39. onPointerDown={stop}
  40. onWheelCapture={stop}
  41. title="Shape Backlinks"
  42. >
  43. <ReferencesCount
  44. className={'tl-references-count ' + (rounded ? 'tl-references-count-rounded' : '')}
  45. id={shape.id}
  46. shape={shape}
  47. />
  48. </span>
  49. </HTMLContainer>
  50. </Container>
  51. )
  52. })