ReferencesCountContainer.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. aria-label="references-count-container"
  30. >
  31. <HTMLContainer>
  32. <span
  33. style={{
  34. position: 'absolute',
  35. left: '100%',
  36. pointerEvents: 'all',
  37. transformOrigin: 'left top',
  38. transform: 'translateY(6px) scale(var(--tl-scale))',
  39. }}
  40. onPointerDown={stop}
  41. onWheelCapture={stop}
  42. title="Shape Backlinks"
  43. >
  44. <ReferencesCount
  45. className={'tl-references-count ' + (rounded ? 'tl-references-count-rounded' : '')}
  46. id={shape.id}
  47. shape={shape}
  48. />
  49. </span>
  50. </HTMLContainer>
  51. </Container>
  52. )
  53. })