{
  "version": 3,
  "sources": ["../../../../../src/lib/ui/components/Minimap/MinimapManager.ts"],
  "sourcesContent": ["import {\n\tBox,\n\tComputedCache,\n\tEditor,\n\tTLShape,\n\tVec,\n\tatom,\n\tbind,\n\tclamp,\n\tcomputed,\n\tPI2,\n\treact,\n\tuniqueId,\n} from '@tldraw/editor'\n\nexport class MinimapManager {\n\tdisposables = [] as (() => void)[]\n\n\t@bind\n\tclose() {\n\t\tthis.disposables.forEach((d) => d())\n\t}\n\n\tprivate readonly ctx: CanvasRenderingContext2D\n\tprivate readonly shapeRectCache: ComputedCache<Box | null, TLShape>\n\n\tconstructor(\n\t\tpublic editor: Editor,\n\t\tpublic readonly elem: HTMLCanvasElement,\n\t\tpublic readonly container: HTMLElement\n\t) {\n\t\tconst ctx = elem.getContext('2d')\n\t\tif (!ctx) throw new Error('Minimap: could not get 2D canvas context')\n\t\tthis.ctx = ctx\n\t\t// Per-shape minimap rect cache. Each entry re-derives only when the\n\t\t// underlying shape record (or its masked page bounds) changes, so a\n\t\t// single shape edit invalidates one entry instead of the whole render.\n\t\t// `null` means \"do not draw this shape\" (hideInMinimap or no bounds).\n\t\tthis.shapeRectCache = editor.store.createComputedCache<Box | null, TLShape>(\n\t\t\t'minimap-shape-rect',\n\t\t\t(shape) => {\n\t\t\t\tconst util = editor.getShapeUtil(shape.type)\n\t\t\t\tif (util.hideInMinimap?.(shape)) return null\n\t\t\t\treturn editor.getShapeMaskedPageBounds(shape.id) ?? null\n\t\t\t}\n\t\t)\n\t\tthis.colors = this._getColors()\n\t\tthis.disposables.push(this._listenForCanvasResize(), react('minimap render', this.render))\n\t}\n\n\tprivate _getColors() {\n\t\tconst style = this.editor.getContainerWindow().getComputedStyle(this.editor.getContainer())\n\t\treturn {\n\t\t\tshapeFill: style.getPropertyValue('--tl-color-text-3').trim(),\n\t\t\tselectFill: style.getPropertyValue('--tl-color-selected').trim(),\n\t\t\tviewportFill: style.getPropertyValue('--tl-color-muted-1').trim(),\n\t\t\tbackground: style.getPropertyValue('--tl-color-low').trim(),\n\t\t}\n\t}\n\n\tprivate colors: ReturnType<MinimapManager['_getColors']>\n\t// this should be called after dark/light mode changes have propagated to the dom\n\tupdateColors() {\n\t\tthis.colors = this._getColors()\n\t}\n\n\treadonly id = uniqueId()\n\t@computed\n\tgetDpr() {\n\t\treturn this.editor.getInstanceState().devicePixelRatio\n\t}\n\n\t@computed\n\tgetContentPageBounds() {\n\t\tconst viewportPageBounds = this.editor.getViewportPageBounds()\n\t\tconst commonShapeBounds = this.editor.getCurrentPageBounds()\n\t\treturn commonShapeBounds\n\t\t\t? Box.Expand(commonShapeBounds, viewportPageBounds)\n\t\t\t: viewportPageBounds\n\t}\n\n\tprivate _getCanvasBoundingRect() {\n\t\tconst { x, y, width, height } = this.elem.getBoundingClientRect()\n\t\treturn new Box(x, y, width, height)\n\t}\n\n\tprivate readonly canvasBoundingClientRect = atom('canvasBoundingClientRect', new Box())\n\n\tgetCanvasScreenBounds() {\n\t\treturn this.canvasBoundingClientRect.get()\n\t}\n\n\tprivate _listenForCanvasResize() {\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tconst rect = this._getCanvasBoundingRect()\n\t\t\tthis.canvasBoundingClientRect.set(rect)\n\t\t})\n\t\tobserver.observe(this.elem)\n\t\tobserver.observe(this.container)\n\t\treturn () => observer.disconnect()\n\t}\n\n\t@computed\n\tgetCanvasSize() {\n\t\tconst rect = this.canvasBoundingClientRect.get()\n\t\tconst dpr = this.getDpr()\n\t\treturn new Vec(rect.width * dpr, rect.height * dpr)\n\t}\n\n\toriginPagePoint = new Vec()\n\toriginPageCenter = new Vec()\n\n\tisInViewport = false\n\n\t/** Get the canvas's true bounds converted to page bounds. */\n\t@computed getCanvasPageBounds() {\n\t\tconst canvasScreenBounds = this.getCanvasScreenBounds()\n\t\tconst contentPageBounds = this.getContentPageBounds()\n\n\t\tconst aspectRatio = canvasScreenBounds.width / canvasScreenBounds.height\n\n\t\tlet targetWidth = contentPageBounds.width\n\t\tlet targetHeight = targetWidth / aspectRatio\n\t\tif (targetHeight < contentPageBounds.height) {\n\t\t\ttargetHeight = contentPageBounds.height\n\t\t\ttargetWidth = targetHeight * aspectRatio\n\t\t}\n\n\t\tconst box = new Box(0, 0, targetWidth, targetHeight)\n\t\tbox.center = contentPageBounds.center\n\t\treturn box\n\t}\n\n\t/** Minimap screen-pixels per page-unit \u2014 same convention as `editor.getCamera().z`. */\n\t@computed getZoom() {\n\t\treturn this.getCanvasScreenBounds().width / this.getCanvasPageBounds().width\n\t}\n\n\tgetMinimapPagePoint(clientX: number, clientY: number) {\n\t\tconst canvasPageBounds = this.getCanvasPageBounds()\n\t\tconst canvasScreenBounds = this.getCanvasScreenBounds()\n\n\t\t// first offset the canvas position\n\t\tlet x = clientX - canvasScreenBounds.x\n\t\tlet y = clientY - canvasScreenBounds.y\n\n\t\t// then multiply by the ratio between the page and screen bounds\n\t\tx *= canvasPageBounds.width / canvasScreenBounds.width\n\t\ty *= canvasPageBounds.height / canvasScreenBounds.height\n\n\t\t// then add the canvas page bounds' offset\n\t\tx += canvasPageBounds.minX\n\t\ty += canvasPageBounds.minY\n\n\t\treturn new Vec(x, y, 1)\n\t}\n\n\tminimapScreenPointToPagePoint(x: number, y: number, shiftKey = false, clampToBounds = false) {\n\t\tconst { editor } = this\n\t\tconst vpPageBounds = editor.getViewportPageBounds()\n\n\t\tlet { x: px, y: py } = this.getMinimapPagePoint(x, y)\n\n\t\tif (clampToBounds) {\n\t\t\tconst shapesPageBounds = this.editor.getCurrentPageBounds() ?? new Box()\n\n\t\t\tconst minX = shapesPageBounds.minX - vpPageBounds.width / 2\n\t\t\tconst maxX = shapesPageBounds.maxX + vpPageBounds.width / 2\n\t\t\tconst minY = shapesPageBounds.minY - vpPageBounds.height / 2\n\t\t\tconst maxY = shapesPageBounds.maxY + vpPageBounds.height / 2\n\n\t\t\tconst lx = Math.max(0, minX + vpPageBounds.width - px)\n\t\t\tconst rx = Math.max(0, -(maxX - vpPageBounds.width - px))\n\t\t\tconst ly = Math.max(0, minY + vpPageBounds.height - py)\n\t\t\tconst ry = Math.max(0, -(maxY - vpPageBounds.height - py))\n\n\t\t\tpx += (lx - rx) / 2\n\t\t\tpy += (ly - ry) / 2\n\n\t\t\tpx = clamp(px, minX, maxX)\n\t\t\tpy = clamp(py, minY, maxY)\n\t\t}\n\n\t\tif (shiftKey) {\n\t\t\tconst { originPagePoint } = this\n\t\t\tconst dx = Math.abs(px - originPagePoint.x)\n\t\t\tconst dy = Math.abs(py - originPagePoint.y)\n\t\t\tif (dx > dy) {\n\t\t\t\tpy = originPagePoint.y\n\t\t\t} else {\n\t\t\t\tpx = originPagePoint.x\n\t\t\t}\n\t\t}\n\n\t\treturn new Vec(px, py)\n\t}\n\n\t// Shape geometry in page space, split into unselected/selected fills. Built\n\t// from the per-shape rect cache and selection only, so it survives pan/zoom of\n\t// the main canvas \u2014 those move the `ctx` transform, not the paths themselves.\n\t@computed\n\tprivate getShapePaths() {\n\t\tconst { editor } = this\n\t\tconst selectedIds = new Set<string>(editor.getSelectedShapeIds())\n\t\tconst ids = editor.getCurrentPageShapeIdsSorted()\n\n\t\tconst shapes = new Path2D()\n\t\tconst selected = new Path2D()\n\n\t\tfor (let i = 0, len = ids.length; i < len; i++) {\n\t\t\tconst shapeId = ids[i]\n\t\t\tconst bounds = this.shapeRectCache.get(shapeId)\n\t\t\tif (!bounds) continue\n\t\t\tconst target = selectedIds.has(shapeId) ? selected : shapes\n\t\t\ttarget.rect(bounds.x, bounds.y, bounds.w, bounds.h)\n\t\t}\n\n\t\treturn { shapes, selected }\n\t}\n\n\t@bind\n\trender() {\n\t\tconst { ctx, editor, elem } = this\n\t\tconst canvasSize = this.getCanvasSize()\n\t\tconst canvasPageBounds = this.getCanvasPageBounds()\n\t\tconst dpr = this.getDpr()\n\t\tconst zoom = this.getZoom()\n\n\t\t// Size the backing canvas to device pixels. Assigning width/height\n\t\t// also resets the context transform and clears the canvas.\n\t\tif (elem.width !== canvasSize.x || elem.height !== canvasSize.y) {\n\t\t\telem.width = canvasSize.x\n\t\t\telem.height = canvasSize.y\n\t\t}\n\n\t\tctx.resetTransform()\n\t\t// Background fill (opaque \u2014 matches the WebGL clear color).\n\t\tctx.fillStyle = this.colors.background\n\t\tctx.fillRect(0, 0, canvasSize.x, canvasSize.y)\n\n\t\t// Transform: 1 page unit = `zoom * dpr` device pixels, with the minimap's\n\t\t// page bounds pinned to the top-left of the canvas.\n\t\tctx.scale(dpr * zoom, dpr * zoom)\n\t\tctx.translate(-canvasPageBounds.minX, -canvasPageBounds.minY)\n\n\t\t// Shapes \u2014 page-space paths from a computed, so a pan/zoom that only moves\n\t\t// the transform above reuses them instead of rebuilding per shape.\n\t\tconst { shapes: shapesPath, selected: selectedPath } = this.getShapePaths()\n\n\t\tctx.fillStyle = this.colors.shapeFill\n\t\tctx.fill(shapesPath)\n\n\t\tctx.fillStyle = this.colors.selectFill\n\t\tctx.fill(selectedPath)\n\n\t\t// Viewport indicator. roundRect is pricier than rect, so when the corner\n\t\t// radius would be sub-pixel on screen (and thus invisible) fall back to a\n\t\t// plain rect.\n\t\tconst viewport = editor.getViewportPageBounds()\n\t\tconst { minX: vx, minY: vy, width: vw, height: vh } = viewport\n\t\tconst r = Math.min(vw / 4, vh / 4, 4 / zoom)\n\t\tctx.beginPath()\n\t\tif (r * zoom < 1) {\n\t\t\tctx.rect(vx, vy, vw, vh)\n\t\t} else {\n\t\t\tctx.roundRect(vx, vy, vw, vh, r)\n\t\t}\n\t\tctx.fillStyle = this.colors.viewportFill\n\t\tctx.fill()\n\n\t\t// Let active overlay utils contribute to the minimap. The ctx is already\n\t\t// in page space, matching the main-canvas overlay render contract.\n\t\tconst entries = editor.overlays.getActiveOverlayEntries()\n\t\tfor (const { util, overlays } of entries) {\n\t\t\tctx.save()\n\t\t\tutil.renderMinimap(ctx, overlays, zoom)\n\t\t\tctx.restore()\n\t\t}\n\n\t\t// Collaborator cursors live on the DOM layer, not the overlay canvas, so the minimap draws\n\t\t// their dots natively \u2014 including off-screen collaborators, which is the point of a minimap.\n\t\tconst dotRadius = 3 / zoom\n\t\tfor (const presence of editor.getVisibleCollaboratorsOnCurrentPage()) {\n\t\t\tif (!presence.cursor) continue\n\t\t\tctx.beginPath()\n\t\t\tctx.arc(presence.cursor.x, presence.cursor.y, dotRadius, 0, PI2)\n\t\t\tctx.fillStyle = presence.color\n\t\t\tctx.fill()\n\t\t}\n\t}\n}\n"],
  "mappings": "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",
  "names": []
}
