@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.
- package/LICENSE +22 -0
- package/dist/index.cjs +632 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +183 -0
- package/dist/index.js +626 -0
- package/dist/index.js.map +1 -0
- package/package.json +58 -0
- package/src/component.ts +122 -0
- package/src/constant.ts +39 -0
- package/src/create-plugin.ts +23 -0
- package/src/draw.ts +149 -0
- package/src/env.d.ts +10 -0
- package/src/index.ts +22 -0
- package/src/layer.ts +70 -0
- package/src/service.ts +429 -0
- package/src/type.ts +63 -0
- package/src/wrap-layer-render.ts +38 -0
|
@@ -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
|
+
}
|
package/src/component.ts
ADDED
|
@@ -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
|
+
});
|
package/src/constant.ts
ADDED
|
@@ -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
|
+
}
|