@andespindola/brainlink 0.1.0-beta.30 → 0.1.0-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,6 +23,7 @@ const state = {
23
23
  nodeDetails: new Map(),
24
24
  transform: { x: 0, y: 0, scale: 1 },
25
25
  pointer: { x: 0, y: 0, down: false, dragNode: null, moved: false },
26
+ cursor: { x: 0, y: 0, inCanvas: false },
26
27
  graphSignature: '',
27
28
  graphStatus: '',
28
29
  last: performance.now()
@@ -687,6 +688,30 @@ const wheelZoomFactor = event => {
687
688
  return event.deltaY < 0 ? 1 + adjustedStep : 1 / (1 + adjustedStep)
688
689
  }
689
690
 
691
+ const isScreenPointInsideCanvas = (screenX, screenY) => {
692
+ const rect = canvas.getBoundingClientRect()
693
+
694
+ return screenX >= rect.left && screenX <= rect.right && screenY >= rect.top && screenY <= rect.bottom
695
+ }
696
+
697
+ const handleWheelZoom = event => {
698
+ if (!isScreenPointInsideCanvas(event.clientX, event.clientY)) {
699
+ return
700
+ }
701
+
702
+ event.preventDefault()
703
+ const rect = canvas.getBoundingClientRect()
704
+ const cursorX = event.clientX - rect.left
705
+ const cursorY = event.clientY - rect.top
706
+ const factor = wheelZoomFactor(event)
707
+
708
+ if (!Number.isFinite(factor) || factor <= 0 || factor === 1) {
709
+ return
710
+ }
711
+
712
+ zoomAtPoint(cursorX, cursorY, factor)
713
+ }
714
+
690
715
  const bindEvents = () => {
691
716
  window.addEventListener('resize', resize)
692
717
  elements.search.addEventListener('input', event => {
@@ -730,14 +755,7 @@ const bindEvents = () => {
730
755
  }
731
756
  if (event.target === elements.contentDialog) elements.contentDialog.close()
732
757
  })
733
- canvas.addEventListener('wheel', event => {
734
- event.preventDefault()
735
- const rect = canvas.getBoundingClientRect()
736
- const cursorX = event.clientX - rect.left
737
- const cursorY = event.clientY - rect.top
738
- const factor = wheelZoomFactor(event)
739
- zoomAtPoint(cursorX, cursorY, factor)
740
- }, { passive: false })
758
+ window.addEventListener('wheel', handleWheelZoom, { passive: false })
741
759
  canvas.addEventListener('dblclick', event => {
742
760
  const rect = canvas.getBoundingClientRect()
743
761
  const cursorX = event.clientX - rect.left
@@ -757,6 +775,7 @@ const bindEvents = () => {
757
775
  canvas.addEventListener('pointermove', event => {
758
776
  const point = worldPoint(event)
759
777
  state.hovered = hitNode(point)
778
+ state.cursor = { x: event.clientX, y: event.clientY, inCanvas: true }
760
779
  if (!state.pointer.down) return
761
780
  const dx = event.clientX - state.pointer.x
762
781
  const dy = event.clientY - state.pointer.y
@@ -780,6 +799,12 @@ const bindEvents = () => {
780
799
  canvas.addEventListener('pointercancel', () => {
781
800
  state.pointer = { x: 0, y: 0, down: false, dragNode: null, moved: false }
782
801
  })
802
+ canvas.addEventListener('pointerenter', event => {
803
+ state.cursor = { x: event.clientX, y: event.clientY, inCanvas: true }
804
+ })
805
+ canvas.addEventListener('pointerleave', event => {
806
+ state.cursor = { x: event.clientX, y: event.clientY, inCanvas: false }
807
+ })
783
808
  window.addEventListener('keydown', event => {
784
809
  if (event.key === '+' || event.key === '=') {
785
810
  event.preventDefault()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andespindola/brainlink",
3
- "version": "0.1.0-beta.30",
3
+ "version": "0.1.0-beta.31",
4
4
  "description": "Local-first knowledge memory for agents with Markdown, backlinks, indexing and context retrieval.",
5
5
  "type": "module",
6
6
  "license": "MIT",