@flowgram-vue/minimap-plugin 0.2.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/draw.ts","../src/constant.ts","../src/service.ts","../src/component.ts","../src/wrap-layer-render.ts","../src/layer.ts","../src/create-plugin.ts"],"names":["MinimapDraw","inject","defineComponent","PlaygroundVueContainerKey","h","FlowNodeTransformData","PlaygroundConfigEntity","injectable"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { IPoint, Rectangle } from '@flowgram-vue/utils';\n\nexport namespace MinimapDraw {\n /** 矩形是否合法 */\n const isRectValid = (rect: Rectangle): boolean => rect.width > 0 && rect.height > 0;\n\n /** 清空画布 */\n export const clear = (params: {\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n }) => {\n const { canvas, context } = params;\n context.clearRect(0, 0, canvas.width, canvas.height);\n };\n\n /** 设置背景色 */\n export const backgroundColor = (params: {\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n color: string;\n }) => {\n const { canvas, context, color } = params;\n context.fillStyle = color;\n context.fillRect(0, 0, canvas.width, canvas.height);\n };\n\n /** 绘制矩形 */\n export const rectangle = (params: {\n context: CanvasRenderingContext2D;\n rect: Rectangle;\n color: string;\n }): void => {\n const { context, rect, color } = params;\n if (!isRectValid(rect)) {\n return;\n }\n context.fillStyle = color;\n context.fillRect(rect.x, rect.y, rect.width, rect.height);\n };\n\n /** 绘制圆角矩形 */\n export const roundRectangle = (params: {\n context: CanvasRenderingContext2D;\n rect: Rectangle;\n color: string;\n radius: number;\n borderColor?: string;\n borderWidth?: number;\n borderDashLength?: number;\n }): void => {\n const { context, rect, color, radius, borderColor, borderDashLength, borderWidth = 0 } = params;\n const { x, y, width, height } = rect;\n\n if (!isRectValid(rect)) {\n return;\n }\n\n // 开始新路径\n context.beginPath();\n\n // 绘制圆角矩形路径\n const drawRoundedRectPath = (): void => {\n context.moveTo(x + radius, y);\n context.lineTo(x + width - radius, y);\n context.quadraticCurveTo(x + width, y, x + width, y + radius);\n context.lineTo(x + width, y + height - radius);\n context.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n context.lineTo(x + radius, y + height);\n context.quadraticCurveTo(x, y + height, x, y + height - radius);\n context.lineTo(x, y + radius);\n context.quadraticCurveTo(x, y, x + radius, y);\n context.closePath();\n };\n\n drawRoundedRectPath();\n\n // 填充矩形\n context.fillStyle = color;\n context.fill();\n\n // 如果设置了边框,绘制边框\n if (borderColor && borderWidth > 0) {\n context.strokeStyle = borderColor;\n context.lineWidth = borderWidth;\n\n // 设置虚线样式\n if (borderDashLength) {\n context.setLineDash([borderDashLength, borderDashLength]);\n } else {\n context.setLineDash([]);\n }\n\n context.stroke();\n\n // 重置虚线样式\n context.setLineDash([]);\n }\n };\n\n /** 绘制矩形外的蒙层 */\n export const overlay = (params: {\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n offset: IPoint;\n scale: number;\n rect: Rectangle;\n color: string;\n }): void => {\n const { canvas, context, offset, scale, rect, color } = params;\n\n if (!isRectValid(rect)) {\n return;\n }\n\n context.fillStyle = color;\n\n // 上方蒙层\n context.fillRect(0, 0, canvas.width, (rect.y + offset.y) * scale);\n\n // 下方蒙层\n context.fillRect(\n 0,\n (rect.y + rect.height + offset.y) * scale,\n canvas.width,\n canvas.height - (rect.y + rect.height + offset.y) * scale\n );\n\n // 左侧蒙层\n context.fillRect(\n 0,\n (rect.y + offset.y) * scale,\n (rect.x + offset.x) * scale,\n rect.height * scale\n );\n\n // 右侧蒙层\n context.fillRect(\n (rect.x + rect.width + offset.x) * scale,\n (rect.y + offset.y) * scale,\n canvas.width - (rect.x + rect.width + offset.x) * scale,\n rect.height * scale\n );\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { MinimapCanvasStyle, MinimapInactiveStyle, MinimapServiceOptions } from './type';\n\nexport const MinimapDefaultCanvasStyle: MinimapCanvasStyle = {\n canvasWidth: 250,\n canvasHeight: 250,\n canvasPadding: 50,\n canvasBackground: 'rgba(242, 243, 245, 1)',\n canvasBorderRadius: 10,\n viewportBackground: 'rgba(255, 255, 255, 1)',\n viewportBorderRadius: 4,\n viewportBorderColor: 'rgba(6, 7, 9, 0.10)',\n viewportBorderWidth: 1,\n viewportBorderDashLength: undefined,\n nodeColor: 'rgba(0, 0, 0, 0.10)',\n nodeBorderRadius: 2,\n nodeBorderWidth: 0.145,\n nodeBorderColor: 'rgba(6, 7, 9, 0.10)',\n overlayColor: 'rgba(255, 255, 255, 0.55)',\n};\n\nexport const MinimapDefaultInactiveStyle: MinimapInactiveStyle = {\n scale: 0.7,\n opacity: 1,\n translateX: 15,\n translateY: 15,\n};\n\nexport const MinimapDefaultOptions: MinimapServiceOptions = {\n canvasStyle: MinimapDefaultCanvasStyle,\n canvasClassName: 'gedit-minimap-canvas',\n enableDisplayAllNodes: false,\n activeThrottleTime: 0,\n inactiveThrottleTime: 24,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { throttle } from 'lodash-es';\nimport { inject, injectable } from 'inversify';\nimport { Disposable, DisposableCollection, IPoint, Rectangle } from '@flowgram-vue/utils';\nimport { FlowNodeTransformData } from '@flowgram-vue/document';\nimport { FlowNodeBaseType } from '@flowgram-vue/document';\nimport { FlowDocument } from '@flowgram-vue/document';\nimport { MouseTouchEvent, PlaygroundConfigEntity } from '@flowgram-vue/core';\n\nimport type { MinimapRenderContext, MinimapServiceOptions, MinimapCanvasStyle } from './type';\nimport { MinimapDraw } from './draw';\nimport { MinimapDefaultCanvasStyle, MinimapDefaultOptions } from './constant';\n\n@injectable()\nexport class FlowMinimapService {\n @inject(FlowDocument) private readonly document: FlowDocument;\n\n @inject(PlaygroundConfigEntity)\n private readonly playgroundConfig: PlaygroundConfigEntity;\n\n public readonly canvas: HTMLCanvasElement;\n\n public readonly context2D: CanvasRenderingContext2D;\n\n public activated;\n\n private onActiveCallbacks: Set<(activated: boolean) => void>;\n\n private options: MinimapServiceOptions;\n\n private toDispose: DisposableCollection;\n\n private initialized;\n\n private visible: boolean = false;\n\n private isDragging;\n\n private style: MinimapCanvasStyle;\n\n private dragStart?: IPoint;\n\n constructor() {\n this.canvas = document.createElement('canvas');\n this.context2D = this.canvas.getContext('2d')!;\n this.initialized = !!this.context2D;\n this.onActiveCallbacks = new Set();\n this.toDispose = new DisposableCollection();\n this.render = this._render;\n this.activated = false;\n this.isDragging = false;\n }\n\n public init(options?: Partial<MinimapServiceOptions>) {\n this.options = MinimapDefaultOptions;\n Object.assign(this.options, options);\n this.setThrottle(this.options.inactiveThrottleTime);\n this.initStyle();\n }\n\n public dispose(): void {\n this.toDispose.dispose();\n this.initialized = false;\n this.activated = false;\n this.removeEventListeners();\n }\n\n setVisible(visible: boolean) {\n this.visible = visible;\n }\n\n public setActivate(activate: boolean): void {\n if (activate === this.activated) {\n return;\n }\n if (!activate && this.isDragging) {\n // 拖拽时持续激活\n return;\n }\n this.activated = activate;\n if (activate) {\n this.setThrottle(this.options.activeThrottleTime);\n this.addEventListeners();\n } else {\n this.setThrottle(this.options.inactiveThrottleTime);\n this.removeEventListeners();\n }\n this.render();\n this.onActiveCallbacks.forEach((callback) => callback(activate));\n }\n\n public onActive = (callback: (activated: boolean) => void): Disposable => {\n this.onActiveCallbacks.add(callback);\n return {\n dispose: () => {\n this.onActiveCallbacks.delete(callback);\n },\n };\n };\n\n private initStyle() {\n if (!this.initialized) {\n return;\n }\n const { canvasClassName, canvasStyle } = this.options;\n this.canvas.className = canvasClassName;\n this.style = {\n ...MinimapDefaultCanvasStyle,\n ...canvasStyle,\n };\n this.canvas.width = this.style.canvasWidth;\n this.canvas.height = this.style.canvasHeight;\n this.canvas.style.borderRadius = this.style.canvasBorderRadius\n ? `${this.style.canvasBorderRadius}px`\n : 'unset';\n }\n\n private setThrottle(throttleTime: number) {\n this.render = throttle(this._render, throttleTime);\n }\n\n /**\n * 触发渲染\n */\n public render: () => void = this._render;\n\n private _render(): void {\n if (!this.initialized || !this.visible) {\n return;\n }\n const renderContext = this.createRenderContext();\n this.renderCanvas(renderContext);\n }\n\n private createRenderContext(): MinimapRenderContext {\n const { canvas, context2D } = this;\n const nodeTransforms: FlowNodeTransformData[] = this.transformVisibles;\n const nodeRects: Rectangle[] = nodeTransforms.map((transform) => transform.bounds);\n const viewRect: Rectangle = this.viewRect();\n const renderRect: Rectangle = this.renderRect(nodeRects).withPadding({\n top: this.style.canvasPadding,\n bottom: this.style.canvasPadding,\n left: this.style.canvasPadding,\n right: this.style.canvasPadding,\n });\n const canvasRect: Rectangle = Rectangle.enlarge([viewRect, renderRect]);\n\n const { scale, offset } = this.calculateScaleAndOffset({ canvasRect });\n\n return {\n canvas,\n context2D,\n nodeRects,\n canvasRect,\n viewRect,\n renderRect,\n scale,\n offset,\n };\n }\n\n private renderCanvas(renderContext: MinimapRenderContext) {\n const { canvas, context2D, nodeRects, viewRect, scale, offset } = renderContext;\n\n // 清空画布\n MinimapDraw.clear({ canvas, context: context2D });\n\n // 设置背景色\n MinimapDraw.backgroundColor({\n canvas,\n context: context2D,\n color: this.style.canvasBackground,\n });\n\n // 绘制视窗\n MinimapDraw.roundRectangle({\n context: context2D,\n rect: this.rectOnCanvas({ rect: viewRect, scale, offset }),\n color: this.style.viewportBackground,\n radius: this.style.viewportBorderRadius as number,\n });\n\n // 绘制节点\n nodeRects.forEach((nodeRect: Rectangle) => {\n MinimapDraw.roundRectangle({\n context: context2D,\n rect: this.rectOnCanvas({ rect: nodeRect, scale, offset }),\n color: this.style.nodeColor as string,\n radius: this.style.nodeBorderRadius as number,\n borderWidth: this.style.nodeBorderWidth as number,\n borderColor: this.style.nodeBorderColor as string,\n });\n });\n\n // 绘制视窗边框\n MinimapDraw.roundRectangle({\n context: context2D,\n rect: this.rectOnCanvas({ rect: viewRect, scale, offset }),\n color: 'rgba(255, 255, 255, 0)' as string,\n radius: this.style.viewportBorderRadius as number,\n borderColor: this.style.viewportBorderColor as string,\n borderWidth: this.style.viewportBorderWidth as number,\n borderDashLength: this.style.viewportBorderDashLength as number,\n });\n\n // 绘制视窗外的蒙层\n MinimapDraw.overlay({\n canvas,\n context: context2D,\n offset,\n scale,\n rect: viewRect,\n color: this.style.overlayColor as string,\n });\n }\n\n private calculateScaleAndOffset(params: { canvasRect: Rectangle }): {\n scale: number;\n offset: IPoint;\n } {\n const { canvasRect } = params;\n const { width: canvasWidth, height: canvasHeight } = this.canvas;\n\n // 计算缩放比例\n const scaleX = canvasWidth / canvasRect.width;\n const scaleY = canvasHeight / canvasRect.height;\n const scale = Math.min(scaleX, scaleY);\n\n // 计算缩放后的渲染区域尺寸\n const scaledWidth = canvasRect.width * scale;\n const scaledHeight = canvasRect.height * scale;\n\n // 计算居中偏移量\n const centerOffsetX = (canvasWidth - scaledWidth) / 2;\n const centerOffsetY = (canvasHeight - scaledHeight) / 2;\n\n // 计算最终偏移量\n const offset = {\n x: centerOffsetX / scale - canvasRect.x,\n y: centerOffsetY / scale - canvasRect.y,\n };\n\n return { scale, offset };\n }\n\n private get transformVisibles(): FlowNodeTransformData[] {\n const transformVisible = this.document.getRenderDatas<FlowNodeTransformData>(\n FlowNodeTransformData,\n false\n );\n return transformVisible.filter((transform) => {\n const node = transform.entity;\n // 去除不可见节点\n if (node.hidden) return false;\n // 去除根节点\n if (node.flowNodeType === FlowNodeBaseType.ROOT) return;\n // 去除非一级节点\n if (\n !this.options.enableDisplayAllNodes &&\n node.parent &&\n node.parent.flowNodeType !== FlowNodeBaseType.ROOT\n )\n return;\n return true;\n });\n }\n\n private renderRect(rects: Rectangle[]): Rectangle {\n return Rectangle.enlarge(rects);\n }\n\n private viewRect(): Rectangle {\n const { width, height, scrollX, scrollY, zoom } = this.playgroundConfig.config;\n return new Rectangle(scrollX / zoom, scrollY / zoom, width / zoom, height / zoom);\n }\n\n /** 计算画布坐标系下的矩形 */\n private rectOnCanvas(params: { rect: Rectangle; scale: number; offset: IPoint }): Rectangle {\n const { rect, scale, offset } = params;\n return new Rectangle(\n (rect.x + offset.x) * scale,\n (rect.y + offset.y) * scale,\n rect.width * scale,\n rect.height * scale\n );\n }\n\n private isPointInRect(params: { point: IPoint; rect: Rectangle }): boolean {\n const { point, rect } = params;\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n }\n\n private addEventListeners(): void {\n this.canvas.addEventListener('wheel', this.handleWheel);\n this.canvas.addEventListener('mousedown', this.handleStartDrag);\n this.canvas.addEventListener('touchstart', this.handleStartDrag, { passive: false });\n this.canvas.addEventListener('mousemove', this.handleCursor);\n }\n\n private removeEventListeners(): void {\n this.canvas.removeEventListener('wheel', this.handleWheel);\n this.canvas.removeEventListener('mousedown', this.handleStartDrag);\n this.canvas.removeEventListener('touchstart', this.handleStartDrag);\n this.canvas.removeEventListener('mousemove', this.handleCursor);\n }\n\n private handleWheel = (event: WheelEvent): void => {};\n\n private handleStartDrag = (event: MouseEvent | TouchEvent): void => {\n MouseTouchEvent.preventDefault(event);\n event.stopPropagation();\n const renderContext = this.createRenderContext();\n const { viewRect, scale, offset } = renderContext;\n const canvasRect = this.canvas.getBoundingClientRect();\n const { clientX, clientY } = MouseTouchEvent.getEventCoord(event);\n const mousePoint: IPoint = {\n x: clientX - canvasRect.left,\n y: clientY - canvasRect.top,\n };\n\n const viewRectOnCanvas = this.rectOnCanvas({\n rect: viewRect,\n scale,\n offset,\n });\n if (!this.isPointInRect({ point: mousePoint, rect: viewRectOnCanvas })) {\n return;\n }\n this.isDragging = true;\n this.dragStart = mousePoint;\n // click\n document.addEventListener('mousemove', this.handleDragging);\n document.addEventListener('mouseup', this.handleEndDrag);\n // touch\n document.addEventListener('touchmove', this.handleDragging, { passive: false });\n document.addEventListener('touchend', this.handleEndDrag);\n document.addEventListener('touchcancel', this.handleEndDrag);\n };\n\n private handleDragging = (event: MouseEvent | TouchEvent): void => {\n if (!this.isDragging || !this.dragStart) return;\n MouseTouchEvent.preventDefault(event);\n event.stopPropagation();\n\n const renderContext = this.createRenderContext();\n const { scale } = renderContext;\n const canvasRect = this.canvas.getBoundingClientRect();\n const { clientX, clientY } = MouseTouchEvent.getEventCoord(event);\n const mouseX = clientX - canvasRect.left;\n const mouseY = clientY - canvasRect.top;\n\n const deltaX = (mouseX - this.dragStart.x) / scale;\n const deltaY = (mouseY - this.dragStart.y) / scale;\n\n this.updateScrollPosition(deltaX, deltaY);\n\n this.dragStart = { x: mouseX, y: mouseY };\n this.render();\n };\n\n private handleEndDrag = (event: MouseEvent | TouchEvent): void => {\n MouseTouchEvent.preventDefault(event);\n event.stopPropagation();\n // click\n document.removeEventListener('mousemove', this.handleDragging);\n document.removeEventListener('mouseup', this.handleEndDrag);\n // touch\n document.removeEventListener('touchmove', this.handleDragging);\n document.removeEventListener('touchend', this.handleEndDrag);\n document.removeEventListener('touchcancel', this.handleEndDrag);\n this.isDragging = false;\n this.dragStart = undefined;\n this.setActivate(this.isMouseInCanvas(event));\n };\n\n private handleCursor = (event: MouseEvent): void => {\n if (!this.activated) return;\n\n const renderContext = this.createRenderContext();\n const { viewRect, scale, offset } = renderContext;\n const canvasRect = this.canvas.getBoundingClientRect();\n const mousePoint: IPoint = {\n x: event.clientX - canvasRect.left,\n y: event.clientY - canvasRect.top,\n };\n\n const viewRectOnCanvas = this.rectOnCanvas({\n rect: viewRect,\n scale,\n offset,\n });\n\n if (this.isPointInRect({ point: mousePoint, rect: viewRectOnCanvas })) {\n // 鼠标在视窗框内\n this.canvas.style.cursor = 'grab';\n } else {\n // 鼠标在视窗框外但在画布内\n this.canvas.style.cursor = 'default';\n }\n };\n\n private isMouseInCanvas(event: MouseEvent | TouchEvent): boolean {\n const canvasRect = this.canvas.getBoundingClientRect();\n const { clientX, clientY } = MouseTouchEvent.getEventCoord(event);\n return (\n clientX >= canvasRect.left &&\n clientX <= canvasRect.right &&\n clientY >= canvasRect.top &&\n clientY <= canvasRect.bottom\n );\n }\n\n private updateScrollPosition(deltaX: number, deltaY: number): void {\n const { scrollX, scrollY, zoom } = this.playgroundConfig.config;\n this.playgroundConfig.updateConfig({\n scrollX: scrollX + deltaX * zoom,\n scrollY: scrollY + deltaY * zoom,\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n defineComponent,\n h,\n inject,\n onBeforeUnmount,\n onMounted,\n shallowRef,\n type CSSProperties,\n type PropType,\n} from 'vue';\nimport { PlaygroundVueContainerKey } from '@flowgram-vue/core';\nimport type { Disposable } from '@flowgram-vue/utils';\n\nimport { MinimapInactiveStyle } from './type';\nimport { FlowMinimapService } from './service';\nimport { MinimapDefaultInactiveStyle } from './constant';\n\nexport const MinimapRender = defineComponent({\n name: 'MinimapRender',\n props: {\n service: { type: Object as PropType<FlowMinimapService> },\n panelStyles: { type: Object as PropType<CSSProperties>, default: () => ({}) },\n containerStyles: { type: Object as PropType<CSSProperties>, default: () => ({}) },\n inactiveStyle: {\n type: Object as PropType<Partial<MinimapInactiveStyle>>,\n default: () => ({}),\n },\n },\n setup(props) {\n const inactiveStyle = {\n ...MinimapDefaultInactiveStyle,\n ...props.inactiveStyle,\n };\n const playgroundContainer = inject(PlaygroundVueContainerKey, undefined);\n const service = (props.service ||\n playgroundContainer?.get(FlowMinimapService)) as FlowMinimapService;\n const panelRef = shallowRef<HTMLDivElement | null>(null);\n const activated = shallowRef(false);\n let disposer: Disposable | undefined;\n\n onMounted(() => {\n const canvasContainer = panelRef.value;\n if (canvasContainer && service.canvas) {\n canvasContainer.appendChild(service.canvas);\n }\n disposer = service.onActive((activate: boolean) => {\n activated.value = activate;\n });\n service.setVisible(true);\n service.render();\n });\n\n onBeforeUnmount(() => {\n disposer?.dispose();\n service.setVisible(false);\n });\n\n return () => {\n const scale: number = activated.value ? 1 : inactiveStyle.scale;\n const opacity: number = activated.value ? 1 : inactiveStyle.opacity;\n const translateX: number = activated.value ? 0 : inactiveStyle.translateX;\n const translateY: number = activated.value ? 0 : inactiveStyle.translateY;\n\n return h(\n 'div',\n {\n class: 'minimap-container',\n style: {\n position: 'fixed',\n right: '30px',\n bottom: '70px',\n transition: 'all 0.3s ease',\n transform: `scale(${scale}) translate(${translateX}px, ${translateY}px)`,\n opacity,\n transformOrigin: 'bottom right',\n ...props.containerStyles,\n },\n },\n [\n h('div', {\n class: 'minimap-panel',\n style: {\n display: 'flex',\n width: '100%',\n height: '100%',\n borderRadius: '10px',\n backgroundColor: 'rgba(255, 255, 255, 1)',\n border: '0.572px solid rgba(6, 7, 9, 0.10)',\n overflow: 'hidden',\n boxShadow:\n '0px 2.289px 6.867px 0px rgba(0, 0, 0, 0.08), 0px 4.578px 13.733px 0px rgba(0, 0, 0, 0.04)',\n boxSizing: 'border-box',\n padding: '8px',\n ...props.panelStyles,\n },\n 'data-flow-editor-selectable': 'false',\n ref: (el: unknown) => {\n panelRef.value = (el as HTMLDivElement) || null;\n },\n onMouseenter: () => {\n service.setActivate(true);\n },\n onMouseleave: () => {\n service.setActivate(false);\n },\n onTouchstartCapture: () => {\n service.setActivate(true);\n },\n onTouchendCapture: () => {\n service.setActivate(false);\n },\n }),\n ]\n );\n };\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { defineComponent, h, provide, type VNodeChild } from 'vue';\nimport {\n Playground,\n PlaygroundVueContainerKey,\n PlaygroundVueRefKey,\n type PlaygroundContainerFactory,\n} from '@flowgram-vue/core';\n\nexport const LayerVueProvide = defineComponent({\n name: 'LayerVueProvide',\n props: {\n factory: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const factory = props.factory as PlaygroundContainerFactory;\n provide(PlaygroundVueContainerKey, factory as any);\n try {\n provide(PlaygroundVueRefKey, factory.get(Playground));\n } catch {\n // 测试容器可能重复 bind PlaygroundConfig,此时仅 provide container\n }\n },\n render() {\n return this.$slots.default?.();\n },\n});\n\nexport function wrapLayerRender(factory: PlaygroundContainerFactory, children: VNodeChild) {\n return h(LayerVueProvide, { factory }, () => children);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { h, type VNode } from 'vue';\nimport { inject, injectable } from 'inversify';\nimport { domUtils } from '@flowgram-vue/utils';\nimport {\n FlowNodeEntity,\n FlowNodeTransformData,\n FlowDocumentTransformerEntity,\n} from '@flowgram-vue/document';\nimport {\n Layer,\n observeEntityDatas,\n observeEntity,\n PlaygroundConfigEntity,\n PlaygroundContainerFactory,\n} from '@flowgram-vue/core';\n\nimport { wrapLayerRender } from './wrap-layer-render';\nimport { MinimapLayerOptions } from './type';\nimport { FlowMinimapService } from './service';\nimport { MinimapRender } from './component';\n\n@injectable()\nexport class FlowMinimapLayer extends Layer<MinimapLayerOptions> {\n public static type = 'FlowMinimapLayer';\n\n @inject(FlowMinimapService) private readonly service: FlowMinimapService;\n\n @inject(PlaygroundContainerFactory) private readonly playgroundContainer: PlaygroundContainerFactory;\n\n @observeEntityDatas(FlowNodeEntity, FlowNodeTransformData)\n transformDatas: FlowNodeTransformData[];\n\n @observeEntity(PlaygroundConfigEntity) configEntity: PlaygroundConfigEntity;\n\n @observeEntity(FlowDocumentTransformerEntity)\n readonly documentTransformer: FlowDocumentTransformerEntity;\n\n public readonly node: HTMLElement;\n\n private readonly className = 'gedit-minimap-layer gedit-playground-layer';\n\n constructor() {\n super();\n this.node = domUtils.createDivWithClass(this.className);\n this.node.style.zIndex = '9999';\n }\n\n public render(): VNode | null {\n if (this.documentTransformer.loading) return null;\n this.documentTransformer.refresh();\n this.service.render();\n if (this.options.disableLayer) {\n return null;\n }\n return wrapLayerRender(\n this.playgroundContainer,\n h(MinimapRender, {\n service: this.service,\n panelStyles: this.options.panelStyles,\n containerStyles: this.options.containerStyles,\n inactiveStyle: this.options.inactiveStyle,\n })\n );\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { definePluginCreator, PluginContext } from '@flowgram-vue/core';\n\nimport { CreateMinimapPluginOptions } from './type';\nimport { FlowMinimapService } from './service';\nimport { FlowMinimapLayer } from './layer';\n\nexport const createMinimapPlugin = definePluginCreator<CreateMinimapPluginOptions>({\n onBind: ({ bind }) => {\n bind(FlowMinimapService).toSelf().inSingletonScope();\n },\n onInit: (ctx: PluginContext, opts: CreateMinimapPluginOptions) => {\n ctx.playground.registerLayer(FlowMinimapLayer, opts);\n ctx.get(FlowMinimapService).init(opts);\n },\n onDispose: (ctx: PluginContext) => {\n ctx.get(FlowMinimapService).dispose();\n },\n});\n"]}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@flowgram-vue/minimap-plugin",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "homepage": "https://flowgram.ai/",
7
+ "repository": "https://github.com/Crayon-hua/flowgram-vue",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "main": "./dist/index.cjs",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "files": [
19
+ "src",
20
+ "dist"
21
+ ],
22
+ "dependencies": {
23
+ "inversify": "^6.0.1",
24
+ "lodash-es": "^4.17.21",
25
+ "reflect-metadata": "~0.2.2",
26
+ "@flowgram-vue/core": "0.2.0",
27
+ "@flowgram-vue/utils": "0.2.0",
28
+ "@flowgram-vue/document": "0.2.0"
29
+ },
30
+ "peerDependencies": {
31
+ "vue": "^3.3.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/bezier-js": "4.1.3",
35
+ "@types/lodash-es": "^4.17.12",
36
+ "@types/node": "^20",
37
+ "eslint": "^9.0.0",
38
+ "typescript": "^5.8.3",
39
+ "vitest": "^3.2.4",
40
+ "vue": "^3.5.18",
41
+ "@flowgram-vue/build-config": "0.2.0",
42
+ "@flowgram-vue/eslint-config": "0.2.0",
43
+ "@flowgram-vue/ts-config": "0.2.0"
44
+ },
45
+ "publishConfig": {
46
+ "access": "public",
47
+ "registry": "https://registry.npmjs.org/"
48
+ },
49
+ "scripts": {
50
+ "build": "flowgram-build",
51
+ "test": "exit 0",
52
+ "test:cov": "exit 0",
53
+ "lint": "eslint .",
54
+ "ts-check": "tsc --noEmit",
55
+ "build:fast": "flowgram-build --fast",
56
+ "build:watch": "flowgram-build --watch"
57
+ }
58
+ }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import {
7
+ defineComponent,
8
+ h,
9
+ inject,
10
+ onBeforeUnmount,
11
+ onMounted,
12
+ shallowRef,
13
+ type CSSProperties,
14
+ type PropType,
15
+ } from 'vue';
16
+ import { PlaygroundVueContainerKey } from '@flowgram-vue/core';
17
+ import type { Disposable } from '@flowgram-vue/utils';
18
+
19
+ import { MinimapInactiveStyle } from './type';
20
+ import { FlowMinimapService } from './service';
21
+ import { MinimapDefaultInactiveStyle } from './constant';
22
+
23
+ export const MinimapRender = defineComponent({
24
+ name: 'MinimapRender',
25
+ props: {
26
+ service: { type: Object as PropType<FlowMinimapService> },
27
+ panelStyles: { type: Object as PropType<CSSProperties>, default: () => ({}) },
28
+ containerStyles: { type: Object as PropType<CSSProperties>, default: () => ({}) },
29
+ inactiveStyle: {
30
+ type: Object as PropType<Partial<MinimapInactiveStyle>>,
31
+ default: () => ({}),
32
+ },
33
+ },
34
+ setup(props) {
35
+ const inactiveStyle = {
36
+ ...MinimapDefaultInactiveStyle,
37
+ ...props.inactiveStyle,
38
+ };
39
+ const playgroundContainer = inject(PlaygroundVueContainerKey, undefined);
40
+ const service = (props.service ||
41
+ playgroundContainer?.get(FlowMinimapService)) as FlowMinimapService;
42
+ const panelRef = shallowRef<HTMLDivElement | null>(null);
43
+ const activated = shallowRef(false);
44
+ let disposer: Disposable | undefined;
45
+
46
+ onMounted(() => {
47
+ const canvasContainer = panelRef.value;
48
+ if (canvasContainer && service.canvas) {
49
+ canvasContainer.appendChild(service.canvas);
50
+ }
51
+ disposer = service.onActive((activate: boolean) => {
52
+ activated.value = activate;
53
+ });
54
+ service.setVisible(true);
55
+ service.render();
56
+ });
57
+
58
+ onBeforeUnmount(() => {
59
+ disposer?.dispose();
60
+ service.setVisible(false);
61
+ });
62
+
63
+ return () => {
64
+ const scale: number = activated.value ? 1 : inactiveStyle.scale;
65
+ const opacity: number = activated.value ? 1 : inactiveStyle.opacity;
66
+ const translateX: number = activated.value ? 0 : inactiveStyle.translateX;
67
+ const translateY: number = activated.value ? 0 : inactiveStyle.translateY;
68
+
69
+ return h(
70
+ 'div',
71
+ {
72
+ class: 'minimap-container',
73
+ style: {
74
+ position: 'fixed',
75
+ right: '30px',
76
+ bottom: '70px',
77
+ transition: 'all 0.3s ease',
78
+ transform: `scale(${scale}) translate(${translateX}px, ${translateY}px)`,
79
+ opacity,
80
+ transformOrigin: 'bottom right',
81
+ ...props.containerStyles,
82
+ },
83
+ },
84
+ [
85
+ h('div', {
86
+ class: 'minimap-panel',
87
+ style: {
88
+ display: 'flex',
89
+ width: '100%',
90
+ height: '100%',
91
+ borderRadius: '10px',
92
+ backgroundColor: 'rgba(255, 255, 255, 1)',
93
+ border: '0.572px solid rgba(6, 7, 9, 0.10)',
94
+ overflow: 'hidden',
95
+ boxShadow:
96
+ '0px 2.289px 6.867px 0px rgba(0, 0, 0, 0.08), 0px 4.578px 13.733px 0px rgba(0, 0, 0, 0.04)',
97
+ boxSizing: 'border-box',
98
+ padding: '8px',
99
+ ...props.panelStyles,
100
+ },
101
+ 'data-flow-editor-selectable': 'false',
102
+ ref: (el: unknown) => {
103
+ panelRef.value = (el as HTMLDivElement) || null;
104
+ },
105
+ onMouseenter: () => {
106
+ service.setActivate(true);
107
+ },
108
+ onMouseleave: () => {
109
+ service.setActivate(false);
110
+ },
111
+ onTouchstartCapture: () => {
112
+ service.setActivate(true);
113
+ },
114
+ onTouchendCapture: () => {
115
+ service.setActivate(false);
116
+ },
117
+ }),
118
+ ]
119
+ );
120
+ };
121
+ },
122
+ });
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import type { MinimapCanvasStyle, MinimapInactiveStyle, MinimapServiceOptions } from './type';
7
+
8
+ export const MinimapDefaultCanvasStyle: MinimapCanvasStyle = {
9
+ canvasWidth: 250,
10
+ canvasHeight: 250,
11
+ canvasPadding: 50,
12
+ canvasBackground: 'rgba(242, 243, 245, 1)',
13
+ canvasBorderRadius: 10,
14
+ viewportBackground: 'rgba(255, 255, 255, 1)',
15
+ viewportBorderRadius: 4,
16
+ viewportBorderColor: 'rgba(6, 7, 9, 0.10)',
17
+ viewportBorderWidth: 1,
18
+ viewportBorderDashLength: undefined,
19
+ nodeColor: 'rgba(0, 0, 0, 0.10)',
20
+ nodeBorderRadius: 2,
21
+ nodeBorderWidth: 0.145,
22
+ nodeBorderColor: 'rgba(6, 7, 9, 0.10)',
23
+ overlayColor: 'rgba(255, 255, 255, 0.55)',
24
+ };
25
+
26
+ export const MinimapDefaultInactiveStyle: MinimapInactiveStyle = {
27
+ scale: 0.7,
28
+ opacity: 1,
29
+ translateX: 15,
30
+ translateY: 15,
31
+ };
32
+
33
+ export const MinimapDefaultOptions: MinimapServiceOptions = {
34
+ canvasStyle: MinimapDefaultCanvasStyle,
35
+ canvasClassName: 'gedit-minimap-canvas',
36
+ enableDisplayAllNodes: false,
37
+ activeThrottleTime: 0,
38
+ inactiveThrottleTime: 24,
39
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import { definePluginCreator, PluginContext } from '@flowgram-vue/core';
7
+
8
+ import { CreateMinimapPluginOptions } from './type';
9
+ import { FlowMinimapService } from './service';
10
+ import { FlowMinimapLayer } from './layer';
11
+
12
+ export const createMinimapPlugin = definePluginCreator<CreateMinimapPluginOptions>({
13
+ onBind: ({ bind }) => {
14
+ bind(FlowMinimapService).toSelf().inSingletonScope();
15
+ },
16
+ onInit: (ctx: PluginContext, opts: CreateMinimapPluginOptions) => {
17
+ ctx.playground.registerLayer(FlowMinimapLayer, opts);
18
+ ctx.get(FlowMinimapService).init(opts);
19
+ },
20
+ onDispose: (ctx: PluginContext) => {
21
+ ctx.get(FlowMinimapService).dispose();
22
+ },
23
+ });
package/src/draw.ts ADDED
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import type { IPoint, Rectangle } from '@flowgram-vue/utils';
7
+
8
+ export namespace MinimapDraw {
9
+ /** 矩形是否合法 */
10
+ const isRectValid = (rect: Rectangle): boolean => rect.width > 0 && rect.height > 0;
11
+
12
+ /** 清空画布 */
13
+ export const clear = (params: {
14
+ canvas: HTMLCanvasElement;
15
+ context: CanvasRenderingContext2D;
16
+ }) => {
17
+ const { canvas, context } = params;
18
+ context.clearRect(0, 0, canvas.width, canvas.height);
19
+ };
20
+
21
+ /** 设置背景色 */
22
+ export const backgroundColor = (params: {
23
+ canvas: HTMLCanvasElement;
24
+ context: CanvasRenderingContext2D;
25
+ color: string;
26
+ }) => {
27
+ const { canvas, context, color } = params;
28
+ context.fillStyle = color;
29
+ context.fillRect(0, 0, canvas.width, canvas.height);
30
+ };
31
+
32
+ /** 绘制矩形 */
33
+ export const rectangle = (params: {
34
+ context: CanvasRenderingContext2D;
35
+ rect: Rectangle;
36
+ color: string;
37
+ }): void => {
38
+ const { context, rect, color } = params;
39
+ if (!isRectValid(rect)) {
40
+ return;
41
+ }
42
+ context.fillStyle = color;
43
+ context.fillRect(rect.x, rect.y, rect.width, rect.height);
44
+ };
45
+
46
+ /** 绘制圆角矩形 */
47
+ export const roundRectangle = (params: {
48
+ context: CanvasRenderingContext2D;
49
+ rect: Rectangle;
50
+ color: string;
51
+ radius: number;
52
+ borderColor?: string;
53
+ borderWidth?: number;
54
+ borderDashLength?: number;
55
+ }): void => {
56
+ const { context, rect, color, radius, borderColor, borderDashLength, borderWidth = 0 } = params;
57
+ const { x, y, width, height } = rect;
58
+
59
+ if (!isRectValid(rect)) {
60
+ return;
61
+ }
62
+
63
+ // 开始新路径
64
+ context.beginPath();
65
+
66
+ // 绘制圆角矩形路径
67
+ const drawRoundedRectPath = (): void => {
68
+ context.moveTo(x + radius, y);
69
+ context.lineTo(x + width - radius, y);
70
+ context.quadraticCurveTo(x + width, y, x + width, y + radius);
71
+ context.lineTo(x + width, y + height - radius);
72
+ context.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
73
+ context.lineTo(x + radius, y + height);
74
+ context.quadraticCurveTo(x, y + height, x, y + height - radius);
75
+ context.lineTo(x, y + radius);
76
+ context.quadraticCurveTo(x, y, x + radius, y);
77
+ context.closePath();
78
+ };
79
+
80
+ drawRoundedRectPath();
81
+
82
+ // 填充矩形
83
+ context.fillStyle = color;
84
+ context.fill();
85
+
86
+ // 如果设置了边框,绘制边框
87
+ if (borderColor && borderWidth > 0) {
88
+ context.strokeStyle = borderColor;
89
+ context.lineWidth = borderWidth;
90
+
91
+ // 设置虚线样式
92
+ if (borderDashLength) {
93
+ context.setLineDash([borderDashLength, borderDashLength]);
94
+ } else {
95
+ context.setLineDash([]);
96
+ }
97
+
98
+ context.stroke();
99
+
100
+ // 重置虚线样式
101
+ context.setLineDash([]);
102
+ }
103
+ };
104
+
105
+ /** 绘制矩形外的蒙层 */
106
+ export const overlay = (params: {
107
+ canvas: HTMLCanvasElement;
108
+ context: CanvasRenderingContext2D;
109
+ offset: IPoint;
110
+ scale: number;
111
+ rect: Rectangle;
112
+ color: string;
113
+ }): void => {
114
+ const { canvas, context, offset, scale, rect, color } = params;
115
+
116
+ if (!isRectValid(rect)) {
117
+ return;
118
+ }
119
+
120
+ context.fillStyle = color;
121
+
122
+ // 上方蒙层
123
+ context.fillRect(0, 0, canvas.width, (rect.y + offset.y) * scale);
124
+
125
+ // 下方蒙层
126
+ context.fillRect(
127
+ 0,
128
+ (rect.y + rect.height + offset.y) * scale,
129
+ canvas.width,
130
+ canvas.height - (rect.y + rect.height + offset.y) * scale
131
+ );
132
+
133
+ // 左侧蒙层
134
+ context.fillRect(
135
+ 0,
136
+ (rect.y + offset.y) * scale,
137
+ (rect.x + offset.x) * scale,
138
+ rect.height * scale
139
+ );
140
+
141
+ // 右侧蒙层
142
+ context.fillRect(
143
+ (rect.x + rect.width + offset.x) * scale,
144
+ (rect.y + offset.y) * scale,
145
+ canvas.width - (rect.x + rect.width + offset.x) * scale,
146
+ rect.height * scale
147
+ );
148
+ };
149
+ }
package/src/env.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ declare module '*.vue' {
7
+ import type { DefineComponent } from 'vue';
8
+ const component: DefineComponent<object, object, unknown>;
9
+ export default component;
10
+ }
package/src/index.ts ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ export { MinimapRender } from './component';
7
+ export {
8
+ MinimapDefaultCanvasStyle,
9
+ MinimapDefaultInactiveStyle,
10
+ MinimapDefaultOptions,
11
+ } from './constant';
12
+ export { createMinimapPlugin } from './create-plugin';
13
+ export { FlowMinimapLayer } from './layer';
14
+ export { FlowMinimapService } from './service';
15
+ export type {
16
+ MinimapCanvasStyle,
17
+ MinimapInactiveStyle,
18
+ MinimapServiceOptions,
19
+ MinimapLayerOptions,
20
+ CreateMinimapPluginOptions,
21
+ MinimapRenderContext,
22
+ } from './type';
package/src/layer.ts ADDED
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+
6
+ import { h, type VNode } from 'vue';
7
+ import { inject, injectable } from 'inversify';
8
+ import { domUtils } from '@flowgram-vue/utils';
9
+ import {
10
+ FlowNodeEntity,
11
+ FlowNodeTransformData,
12
+ FlowDocumentTransformerEntity,
13
+ } from '@flowgram-vue/document';
14
+ import {
15
+ Layer,
16
+ observeEntityDatas,
17
+ observeEntity,
18
+ PlaygroundConfigEntity,
19
+ PlaygroundContainerFactory,
20
+ } from '@flowgram-vue/core';
21
+
22
+ import { wrapLayerRender } from './wrap-layer-render';
23
+ import { MinimapLayerOptions } from './type';
24
+ import { FlowMinimapService } from './service';
25
+ import { MinimapRender } from './component';
26
+
27
+ @injectable()
28
+ export class FlowMinimapLayer extends Layer<MinimapLayerOptions> {
29
+ public static type = 'FlowMinimapLayer';
30
+
31
+ @inject(FlowMinimapService) private readonly service: FlowMinimapService;
32
+
33
+ @inject(PlaygroundContainerFactory) private readonly playgroundContainer: PlaygroundContainerFactory;
34
+
35
+ @observeEntityDatas(FlowNodeEntity, FlowNodeTransformData)
36
+ transformDatas: FlowNodeTransformData[];
37
+
38
+ @observeEntity(PlaygroundConfigEntity) configEntity: PlaygroundConfigEntity;
39
+
40
+ @observeEntity(FlowDocumentTransformerEntity)
41
+ readonly documentTransformer: FlowDocumentTransformerEntity;
42
+
43
+ public readonly node: HTMLElement;
44
+
45
+ private readonly className = 'gedit-minimap-layer gedit-playground-layer';
46
+
47
+ constructor() {
48
+ super();
49
+ this.node = domUtils.createDivWithClass(this.className);
50
+ this.node.style.zIndex = '9999';
51
+ }
52
+
53
+ public render(): VNode | null {
54
+ if (this.documentTransformer.loading) return null;
55
+ this.documentTransformer.refresh();
56
+ this.service.render();
57
+ if (this.options.disableLayer) {
58
+ return null;
59
+ }
60
+ return wrapLayerRender(
61
+ this.playgroundContainer,
62
+ h(MinimapRender, {
63
+ service: this.service,
64
+ panelStyles: this.options.panelStyles,
65
+ containerStyles: this.options.containerStyles,
66
+ inactiveStyle: this.options.inactiveStyle,
67
+ })
68
+ );
69
+ }
70
+ }