@cratis/components 0.1.18 → 0.1.19
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/README.md +83 -0
- package/dist/cjs/Common/ErrorBoundary.js +26 -0
- package/dist/cjs/Common/ErrorBoundary.js.map +1 -0
- package/dist/cjs/Common/FormElement.js +10 -0
- package/dist/cjs/Common/FormElement.js.map +1 -0
- package/dist/cjs/Common/index.js +12 -0
- package/dist/cjs/Common/index.js.map +1 -0
- package/dist/cjs/EventModeling/EventModeling.css +146 -0
- package/dist/cjs/EventModeling/EventModeling.js +209 -0
- package/dist/cjs/EventModeling/EventModeling.js.map +1 -0
- package/dist/cjs/EventModeling/components/Canvas.js +403 -0
- package/dist/cjs/EventModeling/components/Canvas.js.map +1 -0
- package/dist/cjs/EventModeling/components/CanvasControls.js +10 -0
- package/dist/cjs/EventModeling/components/CanvasControls.js.map +1 -0
- package/dist/cjs/EventModeling/components/Toolbox.js +18 -0
- package/dist/cjs/EventModeling/components/Toolbox.js.map +1 -0
- package/dist/cjs/EventModeling/engine/connectorGraphics.js +173 -0
- package/dist/cjs/EventModeling/engine/connectorGraphics.js.map +1 -0
- package/dist/cjs/EventModeling/engine/elementSprites.js +301 -0
- package/dist/cjs/EventModeling/engine/elementSprites.js.map +1 -0
- package/dist/cjs/EventModeling/index.js +12 -0
- package/dist/cjs/EventModeling/index.js.map +1 -0
- package/dist/cjs/EventModeling/types.js +60 -0
- package/dist/cjs/EventModeling/types.js.map +1 -0
- package/dist/cjs/PivotViewer/components/PivotCanvas.js.map +1 -1
- package/dist/cjs/PivotViewer/components/PivotViewerMain.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/groups.js +15 -15
- package/dist/cjs/PivotViewer/components/pivot/groups.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/sprites.js +2 -2
- package/dist/cjs/PivotViewer/components/pivot/sprites.js.map +1 -1
- package/dist/cjs/PivotViewer/types.js.map +1 -1
- package/dist/cjs/TimeMachine/TimeMachine.js +0 -3
- package/dist/cjs/TimeMachine/TimeMachine.js.map +1 -1
- package/dist/cjs/index.js +16 -12
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/esm/Common/ErrorBoundary.js +7 -4
- package/dist/esm/Common/ErrorBoundary.js.map +1 -1
- package/dist/esm/Common/FormElement.js +7 -4
- package/dist/esm/Common/FormElement.js.map +1 -1
- package/dist/esm/Common/index.js +4 -4
- package/dist/esm/Common/index.js.map +1 -1
- package/dist/esm/EventModeling/EventModeling.css +146 -0
- package/dist/esm/EventModeling/EventModeling.d.ts +11 -0
- package/dist/esm/EventModeling/EventModeling.d.ts.map +1 -0
- package/dist/esm/EventModeling/EventModeling.js +207 -0
- package/dist/esm/EventModeling/EventModeling.js.map +1 -0
- package/dist/esm/EventModeling/EventModeling.stories.d.ts +10 -0
- package/dist/esm/EventModeling/EventModeling.stories.d.ts.map +1 -0
- package/dist/esm/EventModeling/EventModeling.stories.js +252 -0
- package/dist/esm/EventModeling/EventModeling.stories.js.map +1 -0
- package/dist/esm/EventModeling/components/Canvas.d.ts +23 -0
- package/dist/esm/EventModeling/components/Canvas.d.ts.map +1 -0
- package/dist/esm/EventModeling/components/Canvas.js +382 -0
- package/dist/esm/EventModeling/components/Canvas.js.map +1 -0
- package/dist/esm/EventModeling/components/CanvasControls.d.ts +10 -0
- package/dist/esm/EventModeling/components/CanvasControls.d.ts.map +1 -0
- package/dist/esm/EventModeling/components/CanvasControls.js +8 -0
- package/dist/esm/EventModeling/components/CanvasControls.js.map +1 -0
- package/dist/esm/EventModeling/components/Toolbox.d.ts +9 -0
- package/dist/esm/EventModeling/components/Toolbox.d.ts.map +1 -0
- package/dist/esm/EventModeling/components/Toolbox.js +16 -0
- package/dist/esm/EventModeling/components/Toolbox.js.map +1 -0
- package/dist/esm/EventModeling/engine/connectorGraphics.d.ts +12 -0
- package/dist/esm/EventModeling/engine/connectorGraphics.d.ts.map +1 -0
- package/dist/esm/EventModeling/engine/connectorGraphics.js +151 -0
- package/dist/esm/EventModeling/engine/connectorGraphics.js.map +1 -0
- package/dist/esm/EventModeling/engine/elementSprites.d.ts +23 -0
- package/dist/esm/EventModeling/engine/elementSprites.d.ts.map +1 -0
- package/dist/esm/EventModeling/engine/elementSprites.js +276 -0
- package/dist/esm/EventModeling/engine/elementSprites.js.map +1 -0
- package/dist/esm/EventModeling/index.d.ts +3 -0
- package/dist/esm/EventModeling/index.d.ts.map +1 -0
- package/dist/esm/EventModeling/index.js +3 -0
- package/dist/esm/EventModeling/index.js.map +1 -0
- package/dist/esm/EventModeling/types.d.ts +79 -0
- package/dist/esm/EventModeling/types.d.ts.map +1 -0
- package/dist/esm/EventModeling/types.js +56 -0
- package/dist/esm/EventModeling/types.js.map +1 -0
- package/dist/esm/PivotViewer/components/PivotCanvas.d.ts +2 -2
- package/dist/esm/PivotViewer/components/PivotCanvas.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -1
- package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts +2 -2
- package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/PivotViewerMain.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/groups.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/groups.js +2 -2
- package/dist/esm/PivotViewer/components/pivot/groups.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/sprites.d.ts +4 -4
- package/dist/esm/PivotViewer/components/pivot/sprites.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/sprites.js +2 -2
- package/dist/esm/PivotViewer/components/pivot/sprites.js.map +1 -1
- package/dist/esm/PivotViewer/types.d.ts +2 -2
- package/dist/esm/PivotViewer/types.d.ts.map +1 -1
- package/dist/esm/PivotViewer/types.js.map +1 -1
- package/dist/esm/TimeMachine/TimeMachine.js +1 -1
- package/dist/esm/index.d.ts +5 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +16 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +3 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +36 -78
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Canvas.js","sources":["../../../../EventModeling/components/Canvas.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\nimport * as PIXI from 'pixi.js';\nimport { EventModelingState, ElementType, ElementData, Connector, EdgeSide } from '../types';\nimport { createElementSprite, updateElementSprite, showEdgePoints, hideEdgePoints, setElementSelected, ElementSprite } from '../engine/elementSprites';\nimport { createConnectorGraphics, updateConnectorGraphics, ConnectorGraphics } from '../engine/connectorGraphics';\n\nexport interface CanvasProps {\n state: EventModelingState;\n selectedTool: ElementType | 'select';\n zoom: number;\n pan: { x: number; y: number };\n onZoomChange: (zoom: number) => void;\n onPanChange: (pan: { x: number; y: number }) => void;\n onAddElement: (type: ElementType, x: number, y: number) => void;\n onUpdateElement: (id: string, updates: Partial<ElementData>) => void;\n onAddConnector: (connector: Connector) => void;\n onSelectElement: (id: string | undefined) => void;\n onSelectConnector: (id: string | undefined) => void;\n}\n\n// Helper to get background color from CSS custom properties\nfunction getComputedBackgroundColor(): number {\n const style = getComputedStyle(document.documentElement);\n const bgColorStr = style.getPropertyValue('--surface-ground').trim() || '#18181b'; // zinc-900 as fallback\n \n // Convert hex color string to number\n return parseInt(bgColorStr.replace('#', ''), 16);\n}\n\nexport const Canvas: React.FC<CanvasProps> = ({\n state,\n selectedTool,\n zoom,\n pan,\n onZoomChange,\n onPanChange,\n onAddElement,\n onUpdateElement,\n onAddConnector,\n onSelectElement,\n onSelectConnector,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n const appRef = useRef<PIXI.Application | null>(null);\n const worldRef = useRef<PIXI.Container | null>(null);\n const elementsLayerRef = useRef<PIXI.Container | null>(null);\n const connectorsLayerRef = useRef<PIXI.Container | null>(null);\n \n const spritesRef = useRef<Map<string, ElementSprite>>(new Map());\n const connectorsRef = useRef<Map<string, ConnectorGraphics>>(new Map());\n const [pixiReady, setPixiReady] = useState(false);\n \n // Interaction state\n const draggingElementRef = useRef<{ id: string; startX: number; startY: number; elementStartX: number; elementStartY: number } | null>(null);\n const connectingFromRef = useRef<{ elementId: string; side: EdgeSide; startX: number; startY: number } | null>(null);\n const tempConnectorLineRef = useRef<PIXI.Graphics | null>(null);\n \n // Refs to hold current values for event handlers (avoiding stale closures)\n const zoomRef = useRef(zoom);\n const panRef = useRef(pan);\n const selectedToolRef = useRef(selectedTool);\n const stateRef = useRef(state);\n const onZoomChangeRef = useRef(onZoomChange);\n const onPanChangeRef = useRef(onPanChange);\n const onAddElementRef = useRef(onAddElement);\n const onUpdateElementRef = useRef(onUpdateElement);\n const onAddConnectorRef = useRef(onAddConnector);\n const onSelectElementRef = useRef(onSelectElement);\n \n // Keep refs in sync with props\n useEffect(() => { zoomRef.current = zoom; }, [zoom]);\n useEffect(() => { panRef.current = pan; }, [pan]);\n useEffect(() => { selectedToolRef.current = selectedTool; }, [selectedTool]);\n useEffect(() => { stateRef.current = state; }, [state]);\n useEffect(() => { onZoomChangeRef.current = onZoomChange; }, [onZoomChange]);\n useEffect(() => { onPanChangeRef.current = onPanChange; }, [onPanChange]);\n useEffect(() => { onAddElementRef.current = onAddElement; }, [onAddElement]);\n useEffect(() => { onUpdateElementRef.current = onUpdateElement; }, [onUpdateElement]);\n useEffect(() => { onAddConnectorRef.current = onAddConnector; }, [onAddConnector]);\n useEffect(() => { onSelectElementRef.current = onSelectElement; }, [onSelectElement]);\n\n // Convert screen coordinates to world coordinates\n const screenToWorld = useCallback((screenX: number, screenY: number) => {\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return { x: 0, y: 0 };\n const x = (screenX - rect.left - panRef.current.x) / zoomRef.current;\n const y = (screenY - rect.top - panRef.current.y) / zoomRef.current;\n return { x, y };\n }, []);\n\n // Helper to get edge position in world coordinates\n const getEdgePosition = useCallback((element: ElementData, side: EdgeSide) => {\n const { position, size } = element;\n switch (side) {\n case 'top': return { x: position.x + size.width / 2, y: position.y };\n case 'right': return { x: position.x + size.width, y: position.y + size.height / 2 };\n case 'bottom': return { x: position.x + size.width / 2, y: position.y + size.height };\n case 'left': return { x: position.x, y: position.y + size.height / 2 };\n }\n }, []);\n\n // Handle wheel events - trackpad natural scrolling for pan, pinch for zoom\n const handleWheel = useCallback((e: WheelEvent) => {\n e.preventDefault();\n if (!containerRef.current) return;\n \n const rect = containerRef.current.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const mouseY = e.clientY - rect.top;\n \n const currentZoom = zoomRef.current;\n const currentPan = panRef.current;\n \n // Pinch-to-zoom (ctrlKey is true for pinch gestures on trackpad)\n if (e.ctrlKey) {\n // Use smoother zoom calculation based on actual deltaY\n // Trackpad pinch typically gives small deltaY values (-2 to 2)\n // This creates a more proportional zoom response\n const zoomIntensity = 0.008; // Adjust for smoother/faster zoom\n const delta = Math.exp(-e.deltaY * zoomIntensity);\n const newZoom = Math.max(0.1, Math.min(5, currentZoom * delta));\n \n // Keep the point under cursor stationary\n const worldX = (mouseX - currentPan.x) / currentZoom;\n const worldY = (mouseY - currentPan.y) / currentZoom;\n const newPanX = mouseX - worldX * newZoom;\n const newPanY = mouseY - worldY * newZoom;\n \n onZoomChangeRef.current(newZoom);\n onPanChangeRef.current({ x: newPanX, y: newPanY });\n } else {\n // Two-finger scroll = pan (natural scrolling direction)\n const newPan = {\n x: currentPan.x - e.deltaX,\n y: currentPan.y - e.deltaY,\n };\n onPanChangeRef.current(newPan);\n }\n }, []);\n\n // Handle pointer down on canvas background - add element if tool selected\n const handleCanvasPointerDown = useCallback((e: PointerEvent) => {\n if (!containerRef.current) return;\n \n const tool = selectedToolRef.current;\n \n // If using a creation tool, add element at click position\n if (tool !== 'select') {\n const worldPos = screenToWorld(e.clientX, e.clientY);\n onAddElementRef.current(tool, worldPos.x, worldPos.y);\n }\n }, [screenToWorld]);\n\n // Handle pointer move for dragging elements or drawing connectors\n const handlePointerMove = useCallback((e: PointerEvent) => {\n // Handle element dragging\n if (draggingElementRef.current) {\n const { id, startX, startY, elementStartX, elementStartY } = draggingElementRef.current;\n const dx = (e.clientX - startX) / zoomRef.current;\n const dy = (e.clientY - startY) / zoomRef.current;\n onUpdateElementRef.current(id, {\n position: { x: elementStartX + dx, y: elementStartY + dy }\n });\n }\n \n // Handle connector drawing preview line\n if (connectingFromRef.current && tempConnectorLineRef.current) {\n const worldPos = screenToWorld(e.clientX, e.clientY);\n const line = tempConnectorLineRef.current;\n line.clear();\n line.moveTo(connectingFromRef.current.startX, connectingFromRef.current.startY);\n line.lineTo(worldPos.x, worldPos.y);\n line.stroke({ color: 0x6b7280, width: 2 });\n }\n }, [screenToWorld]);\n\n // Handle pointer up - finish dragging or cancel connecting\n const handlePointerUp = useCallback(() => {\n draggingElementRef.current = null;\n \n // Clean up temp connector line if connection wasn't completed\n if (tempConnectorLineRef.current) {\n tempConnectorLineRef.current.destroy();\n tempConnectorLineRef.current = null;\n }\n connectingFromRef.current = null;\n }, []);\n\n // Handle drag over for toolbox drag-and-drop\n const handleDragOver = useCallback((e: DragEvent) => {\n if (e.dataTransfer?.types.includes('application/x-event-modeling-tool')) {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n }\n }, []);\n\n // Handle drop for toolbox drag-and-drop\n const handleDrop = useCallback((e: DragEvent) => {\n e.preventDefault();\n const tool = e.dataTransfer?.getData('application/x-event-modeling-tool') as ElementType;\n if (tool && containerRef.current) {\n const worldPos = screenToWorld(e.clientX, e.clientY);\n onAddElementRef.current(tool, worldPos.x, worldPos.y);\n }\n }, [screenToWorld]);\n\n // Element pointer down - start dragging\n const handleElementPointerDown = useCallback((id: string, e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n \n const element = stateRef.current.elements.find(el => el.id === id);\n if (!element) return;\n \n // Start dragging\n draggingElementRef.current = {\n id,\n startX: e.globalX,\n startY: e.globalY,\n elementStartX: element.position.x,\n elementStartY: element.position.y,\n };\n \n // Select element\n onSelectElementRef.current(id);\n }, []);\n\n // Edge point pointer down - start connecting\n const handleEdgePointerDown = useCallback((elementId: string, side: EdgeSide, e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n \n const element = stateRef.current.elements.find(el => el.id === elementId);\n if (!element) return;\n \n // Calculate edge position in world coordinates\n const edgePos = getEdgePosition(element, side);\n \n // Start connecting - create temp line\n connectingFromRef.current = {\n elementId,\n side,\n startX: edgePos.x,\n startY: edgePos.y,\n };\n \n // Create temporary connector line\n if (worldRef.current) {\n const line = new PIXI.Graphics();\n worldRef.current.addChild(line);\n tempConnectorLineRef.current = line;\n }\n }, [getEdgePosition]);\n\n // Edge point pointer up - complete connection\n const handleEdgePointerUp = useCallback((elementId: string, side: EdgeSide, e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n \n if (connectingFromRef.current && connectingFromRef.current.elementId !== elementId) {\n // Complete the connection\n const connector: Connector = {\n id: `conn-${Date.now()}`,\n from: { elementId: connectingFromRef.current.elementId, side: connectingFromRef.current.side },\n to: { elementId, side },\n };\n onAddConnectorRef.current(connector);\n }\n \n // Clean up\n if (tempConnectorLineRef.current) {\n tempConnectorLineRef.current.destroy();\n tempConnectorLineRef.current = null;\n }\n connectingFromRef.current = null;\n }, []);\n\n const handleConnectorClick = useCallback((id: string) => {\n onSelectConnector(id);\n onSelectElement(undefined);\n }, [onSelectConnector, onSelectElement]);\n\n // Initialize PIXI\n useEffect(() => {\n if (!containerRef.current || appRef.current) return;\n\n let isMounted = true;\n\n const initPixi = async () => {\n const container = containerRef.current;\n if (!container) return;\n \n const rect = container.getBoundingClientRect();\n const width = rect.width > 0 ? rect.width : container.clientWidth || 800;\n const height = rect.height > 0 ? rect.height : container.clientHeight || 600;\n \n const app = new PIXI.Application();\n \n // Get background color from CSS variable (dark mode)\n const bgColor = getComputedBackgroundColor();\n \n try {\n await app.init({\n background: bgColor,\n antialias: true,\n autoDensity: true,\n resolution: window.devicePixelRatio || 1,\n width,\n height,\n autoStart: true,\n });\n \n // Ensure ticker is running and rendering (required for PIXI v8)\n app.ticker.add(() => {\n app.renderer.render(app.stage);\n });\n } catch (e) {\n console.error('PIXI init failed:', e);\n return;\n }\n\n if (!isMounted || !containerRef.current) {\n app.destroy(true, { children: true });\n return;\n }\n\n appRef.current = app;\n\n const world = new PIXI.Container();\n worldRef.current = world;\n app.stage.addChild(world);\n\n // Connectors layer (below elements)\n const connectorsLayer = new PIXI.Container();\n connectorsLayerRef.current = connectorsLayer;\n world.addChild(connectorsLayer);\n\n // Elements layer (above connectors)\n const elementsLayer = new PIXI.Container();\n elementsLayerRef.current = elementsLayer;\n world.addChild(elementsLayer);\n\n const canvasEl = app.canvas as HTMLCanvasElement;\n \n if (canvasEl && containerRef.current) {\n canvasEl.classList.add('event-modeling-canvas');\n canvasEl.style.touchAction = 'none'; // Prevent browser handling of touch\n containerRef.current.appendChild(canvasEl);\n canvasRef.current = canvasEl;\n\n // Set up event listeners\n canvasEl.addEventListener('wheel', handleWheel, { passive: false });\n canvasEl.addEventListener('pointerdown', handleCanvasPointerDown);\n canvasEl.addEventListener('pointermove', handlePointerMove);\n canvasEl.addEventListener('pointerup', handlePointerUp);\n canvasEl.addEventListener('pointerleave', handlePointerUp);\n \n // Set up drag-and-drop listeners on the container for toolbox support\n containerRef.current.addEventListener('dragover', handleDragOver);\n containerRef.current.addEventListener('drop', handleDrop);\n }\n\n setPixiReady(true);\n };\n\n initPixi();\n\n return () => {\n isMounted = false;\n if (canvasRef.current) {\n canvasRef.current.removeEventListener('wheel', handleWheel);\n canvasRef.current.removeEventListener('pointerdown', handleCanvasPointerDown);\n canvasRef.current.removeEventListener('pointermove', handlePointerMove);\n canvasRef.current.removeEventListener('pointerup', handlePointerUp);\n canvasRef.current.removeEventListener('pointerleave', handlePointerUp);\n }\n if (containerRef.current) {\n containerRef.current.removeEventListener('dragover', handleDragOver);\n containerRef.current.removeEventListener('drop', handleDrop);\n }\n if (appRef.current) {\n appRef.current.destroy(true, { children: true });\n appRef.current = null;\n }\n };\n }, [handleWheel, handleCanvasPointerDown, handlePointerMove, handlePointerUp, handleDragOver, handleDrop]);\n\n // Update world transform when zoom/pan changes\n useEffect(() => {\n if (!pixiReady || !worldRef.current) return;\n worldRef.current.position.set(pan.x, pan.y);\n worldRef.current.scale.set(zoom);\n }, [pixiReady, zoom, pan]);\n\n // Sync elements to PIXI\n useEffect(() => {\n console.log('Sync useEffect running', { pixiReady, hasElementsLayer: !!elementsLayerRef.current, elementCount: state.elements.length });\n if (!pixiReady || !elementsLayerRef.current) {\n console.log('Sync useEffect early return', { pixiReady, hasElementsLayer: !!elementsLayerRef.current });\n return;\n }\n \n const elementsMap = new Map(state.elements.map(el => [el.id, el]));\n\n // Remove deleted elements\n spritesRef.current.forEach((sprite, id) => {\n if (!elementsMap.has(id)) {\n elementsLayerRef.current!.removeChild(sprite.container);\n sprite.container.destroy({ children: true });\n spritesRef.current.delete(id);\n }\n });\n\n // Add or update elements\n state.elements.forEach(elementData => {\n const existing = spritesRef.current.get(elementData.id);\n if (existing) {\n updateElementSprite(existing, elementData);\n } else {\n console.log('Creating sprite for', elementData.id, 'at', elementData.position.x, elementData.position.y);\n const sprite = createElementSprite(\n elementData,\n // These handlers are no-ops - we handle events globally via the container\n Function.prototype as () => void,\n Function.prototype as () => void,\n Function.prototype as () => void,\n Function.prototype as () => void,\n Function.prototype as () => void\n );\n \n spritesRef.current.set(elementData.id, sprite);\n elementsLayerRef.current!.addChild(sprite.container);\n console.log('Sprite added to layer', { \n spritePos: { x: sprite.container.position.x, y: sprite.container.position.y },\n layerChildren: elementsLayerRef.current!.children.length,\n visible: sprite.container.visible,\n alpha: sprite.container.alpha\n });\n \n // Set up proper pointer events on the element\n sprite.container.eventMode = 'static';\n sprite.container.cursor = 'grab';\n \n sprite.container.on('pointerdown', (e: PIXI.FederatedPointerEvent) => {\n handleElementPointerDown(elementData.id, e);\n });\n \n // Set up edge point events for drag-to-connect\n sprite.edgePoints.forEach((edgePoint, side) => {\n edgePoint.eventMode = 'static';\n edgePoint.cursor = 'crosshair';\n edgePoint.on('pointerdown', (e: PIXI.FederatedPointerEvent) => {\n handleEdgePointerDown(elementData.id, side, e);\n });\n edgePoint.on('pointerup', (e: PIXI.FederatedPointerEvent) => {\n handleEdgePointerUp(elementData.id, side, e);\n });\n // Also listen for global pointer up on edge points to complete connection\n edgePoint.on('pointerover', () => {\n // Show edge is a valid drop target while connecting\n if (connectingFromRef.current && connectingFromRef.current.elementId !== elementData.id) {\n edgePoint.alpha = 1;\n edgePoint.scale.set(1.5);\n }\n });\n edgePoint.on('pointerout', () => {\n edgePoint.scale.set(1);\n });\n });\n\n // Show edge points on hover\n sprite.container.on('pointerover', () => showEdgePoints(sprite));\n sprite.container.on('pointerout', () => {\n // Only hide if not actively connecting from this element\n if (!connectingFromRef.current || connectingFromRef.current.elementId !== elementData.id) {\n hideEdgePoints(sprite);\n }\n });\n }\n });\n }, [pixiReady, state.elements, handleElementPointerDown, handleEdgePointerDown, handleEdgePointerUp]);\n\n // Create a stable getter function for elements that always returns fresh data\n const getElementsMapRef = useRef<() => Map<string, ElementData>>(() => new Map());\n useEffect(() => {\n getElementsMapRef.current = () => new Map(stateRef.current.elements.map(el => [el.id, el]));\n }, []);\n\n // Sync connectors to PIXI\n useEffect(() => {\n if (!pixiReady || !connectorsLayerRef.current) return;\n\n const connectorsMap = new Map(state.connectors.map(conn => [conn.id, conn]));\n const elementsMap = new Map(state.elements.map(el => [el.id, el]));\n\n // Remove deleted connectors\n connectorsRef.current.forEach((connGraphics, id) => {\n if (!connectorsMap.has(id)) {\n connectorsLayerRef.current!.removeChild(connGraphics.graphics);\n connGraphics.graphics.destroy();\n connectorsRef.current.delete(id);\n }\n });\n\n // Add or update connectors\n state.connectors.forEach(connector => {\n const existing = connectorsRef.current.get(connector.id);\n if (existing) {\n // Update the connector data and getElements function to always return fresh data\n existing.connector = connector; // Update to latest connector data with potentially new edge sides\n existing.getElements = getElementsMapRef.current;\n updateConnectorGraphics(existing, elementsMap);\n } else {\n const connGraphics = createConnectorGraphics(\n connector,\n getElementsMapRef.current,\n handleConnectorClick\n );\n connectorsRef.current.set(connector.id, connGraphics);\n connectorsLayerRef.current!.addChild(connGraphics.graphics);\n }\n });\n }, [pixiReady, state.connectors, state.elements, handleConnectorClick]);\n\n // Update selection highlight\n useEffect(() => {\n if (!pixiReady) return;\n \n spritesRef.current.forEach((sprite, id) => {\n setElementSelected(sprite, id === state.selectedElementId);\n });\n }, [pixiReady, state.selectedElementId]);\n\n return <div ref={containerRef} className=\"event-modeling-canvas-container\" />;\n};\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface CanvasControlsProps {
|
|
3
|
+
zoom: number;
|
|
4
|
+
onZoomIn: () => void;
|
|
5
|
+
onZoomOut: () => void;
|
|
6
|
+
onZoomReset: () => void;
|
|
7
|
+
onFitToView: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const CanvasControls: React.FC<CanvasControlsProps>;
|
|
10
|
+
//# sourceMappingURL=CanvasControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasControls.d.ts","sourceRoot":"","sources":["../../../../EventModeling/components/CanvasControls.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAuCxD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
const CanvasControls = ({ zoom, onZoomIn, onZoomOut, onZoomReset, onFitToView, }) => {
|
|
4
|
+
return (jsxs("div", { className: "event-modeling-controls", children: [jsx("button", { className: "event-modeling-control-button", onClick: onZoomIn, title: "Zoom In (+)", children: "+" }), jsx("button", { className: "event-modeling-control-button", onClick: onZoomOut, title: "Zoom Out (-)", children: "\u2212" }), jsxs("button", { className: "event-modeling-control-button", onClick: onZoomReset, title: "Reset Zoom (0)", children: [Math.round(zoom * 100), "%"] }), jsx("button", { className: "event-modeling-control-button", onClick: onFitToView, title: "Fit to View (F)", children: "\u22A1" })] }));
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export { CanvasControls };
|
|
8
|
+
//# sourceMappingURL=CanvasControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasControls.js","sources":["../../../../EventModeling/components/CanvasControls.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport React from 'react';\n\nexport interface CanvasControlsProps {\n zoom: number;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onZoomReset: () => void;\n onFitToView: () => void;\n}\n\nexport const CanvasControls: React.FC<CanvasControlsProps> = ({\n zoom,\n onZoomIn,\n onZoomOut,\n onZoomReset,\n onFitToView,\n}) => {\n return (\n <div className=\"event-modeling-controls\">\n <button\n className=\"event-modeling-control-button\"\n onClick={onZoomIn}\n title=\"Zoom In (+)\"\n >\n +\n </button>\n <button\n className=\"event-modeling-control-button\"\n onClick={onZoomOut}\n title=\"Zoom Out (-)\"\n >\n −\n </button>\n <button\n className=\"event-modeling-control-button\"\n onClick={onZoomReset}\n title=\"Reset Zoom (0)\"\n >\n {Math.round(zoom * 100)}%\n </button>\n <button\n className=\"event-modeling-control-button\"\n onClick={onFitToView}\n title=\"Fit to View (F)\"\n >\n ⊡\n </button>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;AAaO,MAAM,cAAc,GAAkC,CAAC,EAC1D,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,WAAW,GACd,KAAI;AACD,IAAA,QACIA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,CACpCC,GAAA,CAAA,QAAA,EAAA,EACI,SAAS,EAAC,+BAA+B,EACzC,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAC,aAAa,EAAA,QAAA,EAAA,GAAA,EAAA,CAGd,EACTA,GAAA,CAAA,QAAA,EAAA,EACI,SAAS,EAAC,+BAA+B,EACzC,OAAO,EAAE,SAAS,EAClB,KAAK,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAGf,EACTD,IAAA,CAAA,QAAA,EAAA,EACI,SAAS,EAAC,+BAA+B,EACzC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAErB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,CAClB,EACTC,GAAA,CAAA,QAAA,EAAA,EACI,SAAS,EAAC,+BAA+B,EACzC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAC,iBAAiB,EAAA,QAAA,EAAA,QAAA,EAAA,CAGlB,CAAA,EAAA,CACP;AAEd;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ElementType } from '../types';
|
|
3
|
+
export interface ToolboxProps {
|
|
4
|
+
selectedTool: ElementType | 'select';
|
|
5
|
+
onToolSelect: (tool: ElementType | 'select') => void;
|
|
6
|
+
onDragStart?: (tool: ElementType, e: React.DragEvent) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const Toolbox: React.FC<ToolboxProps>;
|
|
9
|
+
//# sourceMappingURL=Toolbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../EventModeling/components/Toolbox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,YAAY;IACzB,YAAY,EAAE,WAAW,GAAG,QAAQ,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,KAAK,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;CACjE;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAkE1C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
const Toolbox = ({ selectedTool, onToolSelect, onDragStart }) => {
|
|
5
|
+
const handleDragStart = useCallback((tool, e) => {
|
|
6
|
+
e.dataTransfer.setData('application/x-event-modeling-tool', tool);
|
|
7
|
+
e.dataTransfer.effectAllowed = 'copy';
|
|
8
|
+
if (onDragStart) {
|
|
9
|
+
onDragStart(tool, e);
|
|
10
|
+
}
|
|
11
|
+
}, [onDragStart]);
|
|
12
|
+
return (jsxs("div", { className: "event-modeling-toolbox", children: [jsxs("button", { className: `event-modeling-tool-button select ${selectedTool === 'select' ? 'selected' : ''}`, onClick: () => onToolSelect('select'), title: "Select (V)", children: [jsx("div", { className: "event-modeling-tool-icon", children: "\u2B06" }), jsx("div", { children: "Select" })] }), jsxs("button", { className: `event-modeling-tool-button command ${selectedTool === 'command' ? 'selected' : ''}`, onClick: () => onToolSelect('command'), draggable: true, onDragStart: (e) => handleDragStart('command', e), title: "Command (C) - Click or drag to canvas", children: [jsx("div", { className: "event-modeling-tool-icon" }), jsx("div", { children: "Command" })] }), jsxs("button", { className: `event-modeling-tool-button event ${selectedTool === 'event' ? 'selected' : ''}`, onClick: () => onToolSelect('event'), draggable: true, onDragStart: (e) => handleDragStart('event', e), title: "Event (E) - Click or drag to canvas", children: [jsx("div", { className: "event-modeling-tool-icon" }), jsx("div", { children: "Event" })] }), jsxs("button", { className: `event-modeling-tool-button readmodel ${selectedTool === 'readmodel' ? 'selected' : ''}`, onClick: () => onToolSelect('readmodel'), draggable: true, onDragStart: (e) => handleDragStart('readmodel', e), title: "Read Model (R) - Click or drag to canvas", children: [jsx("div", { className: "event-modeling-tool-icon" }), jsx("div", { children: "View" })] }), jsxs("button", { className: `event-modeling-tool-button process ${selectedTool === 'process' ? 'selected' : ''}`, onClick: () => onToolSelect('process'), draggable: true, onDragStart: (e) => handleDragStart('process', e), title: "Process (P) - Click or drag to canvas", children: [jsx("div", { className: "event-modeling-tool-icon", children: jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "12", cy: "12", r: "10" }), jsx("path", { d: "M12 6v6l4 2" })] }) }), jsx("div", { children: "Process" })] })] }));
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { Toolbox };
|
|
16
|
+
//# sourceMappingURL=Toolbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbox.js","sources":["../../../../EventModeling/components/Toolbox.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport React, { useCallback } from 'react';\nimport { ElementType } from '../types';\n\nexport interface ToolboxProps {\n selectedTool: ElementType | 'select';\n onToolSelect: (tool: ElementType | 'select') => void;\n onDragStart?: (tool: ElementType, e: React.DragEvent) => void;\n}\n\nexport const Toolbox: React.FC<ToolboxProps> = ({ selectedTool, onToolSelect, onDragStart }) => {\n const handleDragStart = useCallback((tool: ElementType, e: React.DragEvent) => {\n e.dataTransfer.setData('application/x-event-modeling-tool', tool);\n e.dataTransfer.effectAllowed = 'copy';\n if (onDragStart) {\n onDragStart(tool, e);\n }\n }, [onDragStart]);\n\n return (\n <div className=\"event-modeling-toolbox\">\n <button\n className={`event-modeling-tool-button select ${selectedTool === 'select' ? 'selected' : ''}`}\n onClick={() => onToolSelect('select')}\n title=\"Select (V)\"\n >\n <div className=\"event-modeling-tool-icon\">⬆</div>\n <div>Select</div>\n </button>\n <button\n className={`event-modeling-tool-button command ${selectedTool === 'command' ? 'selected' : ''}`}\n onClick={() => onToolSelect('command')}\n draggable\n onDragStart={(e) => handleDragStart('command', e)}\n title=\"Command (C) - Click or drag to canvas\"\n >\n <div className=\"event-modeling-tool-icon\"></div>\n <div>Command</div>\n </button>\n <button\n className={`event-modeling-tool-button event ${selectedTool === 'event' ? 'selected' : ''}`}\n onClick={() => onToolSelect('event')}\n draggable\n onDragStart={(e) => handleDragStart('event', e)}\n title=\"Event (E) - Click or drag to canvas\"\n >\n <div className=\"event-modeling-tool-icon\"></div>\n <div>Event</div>\n </button>\n <button\n className={`event-modeling-tool-button readmodel ${selectedTool === 'readmodel' ? 'selected' : ''}`}\n onClick={() => onToolSelect('readmodel')}\n draggable\n onDragStart={(e) => handleDragStart('readmodel', e)}\n title=\"Read Model (R) - Click or drag to canvas\"\n >\n <div className=\"event-modeling-tool-icon\"></div>\n <div>View</div>\n </button>\n <button\n className={`event-modeling-tool-button process ${selectedTool === 'process' ? 'selected' : ''}`}\n onClick={() => onToolSelect('process')}\n draggable\n onDragStart={(e) => handleDragStart('process', e)}\n title=\"Process (P) - Click or drag to canvas\"\n >\n <div className=\"event-modeling-tool-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <path d=\"M12 6v6l4 2\"/>\n </svg>\n </div>\n <div>Process</div>\n </button>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as PIXI from 'pixi.js';
|
|
2
|
+
import { Connector, ElementData } from '../types';
|
|
3
|
+
export interface ConnectorGraphics {
|
|
4
|
+
id: string;
|
|
5
|
+
graphics: PIXI.Graphics;
|
|
6
|
+
connector: Connector;
|
|
7
|
+
getElements: () => Map<string, ElementData>;
|
|
8
|
+
isHovered: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function createConnectorGraphics(connector: Connector, getElements: () => Map<string, ElementData>, onClick: (id: string) => void): ConnectorGraphics;
|
|
11
|
+
export declare function updateConnectorGraphics(connectorGraphics: ConnectorGraphics, elements: Map<string, ElementData>): void;
|
|
12
|
+
//# sourceMappingURL=connectorGraphics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectorGraphics.d.ts","sourceRoot":"","sources":["../../../../EventModeling/engine/connectorGraphics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAY,MAAM,UAAU,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5C,SAAS,EAAE,OAAO,CAAC;CACtB;AAOD,wBAAgB,uBAAuB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAC3C,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAC9B,iBAAiB,CAiCnB;AAmKD,wBAAgB,uBAAuB,CACnC,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GACnC,IAAI,CAGN"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import * as PIXI from 'pixi.js';
|
|
2
|
+
|
|
3
|
+
const CONNECTOR_COLOR = 0x64748b;
|
|
4
|
+
const CONNECTOR_HOVER_COLOR = 0x3b82f6;
|
|
5
|
+
const CONNECTOR_WIDTH = 2;
|
|
6
|
+
const CONNECTOR_HOVER_WIDTH = 3;
|
|
7
|
+
function createConnectorGraphics(connector, getElements, onClick) {
|
|
8
|
+
const graphics = new PIXI.Graphics();
|
|
9
|
+
graphics.eventMode = 'static';
|
|
10
|
+
graphics.cursor = 'pointer';
|
|
11
|
+
graphics.hitArea = new PIXI.Rectangle(0, 0, 0, 0);
|
|
12
|
+
const connectorGraphics = {
|
|
13
|
+
id: connector.id,
|
|
14
|
+
graphics,
|
|
15
|
+
connector,
|
|
16
|
+
getElements,
|
|
17
|
+
isHovered: false,
|
|
18
|
+
};
|
|
19
|
+
drawConnector(graphics, connector, getElements(), false);
|
|
20
|
+
graphics.on('click', () => {
|
|
21
|
+
onClick(connector.id);
|
|
22
|
+
});
|
|
23
|
+
graphics.on('pointerover', () => {
|
|
24
|
+
connectorGraphics.isHovered = true;
|
|
25
|
+
drawConnector(graphics, connector, connectorGraphics.getElements(), true);
|
|
26
|
+
});
|
|
27
|
+
graphics.on('pointerout', () => {
|
|
28
|
+
connectorGraphics.isHovered = false;
|
|
29
|
+
drawConnector(graphics, connector, connectorGraphics.getElements(), false);
|
|
30
|
+
});
|
|
31
|
+
return connectorGraphics;
|
|
32
|
+
}
|
|
33
|
+
function drawConnector(graphics, connector, elements, isHovered) {
|
|
34
|
+
const fromElement = elements.get(connector.from.elementId);
|
|
35
|
+
const toElement = elements.get(connector.to.elementId);
|
|
36
|
+
if (!fromElement || !toElement) {
|
|
37
|
+
graphics.clear();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const fromPoint = getEdgePosition(fromElement, connector.from.side);
|
|
41
|
+
const toPoint = getEdgePosition(toElement, connector.to.side);
|
|
42
|
+
graphics.clear();
|
|
43
|
+
const controlPointOffset = Math.abs(toPoint.x - fromPoint.x) / 3;
|
|
44
|
+
let cp1x, cp1y, cp2x, cp2y;
|
|
45
|
+
if (connector.from.side === 'right' && connector.to.side === 'left') {
|
|
46
|
+
cp1x = fromPoint.x + controlPointOffset;
|
|
47
|
+
cp1y = fromPoint.y;
|
|
48
|
+
cp2x = toPoint.x - controlPointOffset;
|
|
49
|
+
cp2y = toPoint.y;
|
|
50
|
+
}
|
|
51
|
+
else if (connector.from.side === 'bottom' && connector.to.side === 'top') {
|
|
52
|
+
cp1x = fromPoint.x;
|
|
53
|
+
cp1y = fromPoint.y + controlPointOffset;
|
|
54
|
+
cp2x = toPoint.x;
|
|
55
|
+
cp2y = toPoint.y - controlPointOffset;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
switch (connector.from.side) {
|
|
59
|
+
case 'right':
|
|
60
|
+
cp1x = fromPoint.x + controlPointOffset;
|
|
61
|
+
cp1y = fromPoint.y;
|
|
62
|
+
break;
|
|
63
|
+
case 'left':
|
|
64
|
+
cp1x = fromPoint.x - controlPointOffset;
|
|
65
|
+
cp1y = fromPoint.y;
|
|
66
|
+
break;
|
|
67
|
+
case 'bottom':
|
|
68
|
+
cp1x = fromPoint.x;
|
|
69
|
+
cp1y = fromPoint.y + controlPointOffset;
|
|
70
|
+
break;
|
|
71
|
+
case 'top':
|
|
72
|
+
default:
|
|
73
|
+
cp1x = fromPoint.x;
|
|
74
|
+
cp1y = fromPoint.y - controlPointOffset;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
switch (connector.to.side) {
|
|
78
|
+
case 'left':
|
|
79
|
+
cp2x = toPoint.x - controlPointOffset;
|
|
80
|
+
cp2y = toPoint.y;
|
|
81
|
+
break;
|
|
82
|
+
case 'right':
|
|
83
|
+
cp2x = toPoint.x + controlPointOffset;
|
|
84
|
+
cp2y = toPoint.y;
|
|
85
|
+
break;
|
|
86
|
+
case 'top':
|
|
87
|
+
cp2x = toPoint.x;
|
|
88
|
+
cp2y = toPoint.y - controlPointOffset;
|
|
89
|
+
break;
|
|
90
|
+
case 'bottom':
|
|
91
|
+
default:
|
|
92
|
+
cp2x = toPoint.x;
|
|
93
|
+
cp2y = toPoint.y + controlPointOffset;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
graphics.moveTo(fromPoint.x, fromPoint.y);
|
|
98
|
+
graphics.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, toPoint.x, toPoint.y);
|
|
99
|
+
graphics.stroke({
|
|
100
|
+
color: isHovered ? CONNECTOR_HOVER_COLOR : CONNECTOR_COLOR,
|
|
101
|
+
width: isHovered ? CONNECTOR_HOVER_WIDTH : CONNECTOR_WIDTH,
|
|
102
|
+
});
|
|
103
|
+
drawArrowhead(graphics, fromPoint.x, fromPoint.y, cp1x, cp1y, cp2x, cp2y, toPoint.x, toPoint.y, isHovered);
|
|
104
|
+
const minX = Math.min(fromPoint.x, toPoint.x) - 10;
|
|
105
|
+
const minY = Math.min(fromPoint.y, toPoint.y) - 10;
|
|
106
|
+
const maxX = Math.max(fromPoint.x, toPoint.x) + 10;
|
|
107
|
+
const maxY = Math.max(fromPoint.y, toPoint.y) + 10;
|
|
108
|
+
graphics.hitArea = new PIXI.Rectangle(minX, minY, maxX - minX, maxY - minY);
|
|
109
|
+
}
|
|
110
|
+
function drawArrowhead(graphics, startX, startY, cp1x, cp1y, cp2x, cp2y, endX, endY, isHovered) {
|
|
111
|
+
const arrowSize = 10;
|
|
112
|
+
const dx = 3 * (endX - cp2x);
|
|
113
|
+
const dy = 3 * (endY - cp2y);
|
|
114
|
+
const length = Math.sqrt(dx * dx + dy * dy);
|
|
115
|
+
if (length === 0)
|
|
116
|
+
return;
|
|
117
|
+
const unitX = dx / length;
|
|
118
|
+
const unitY = dy / length;
|
|
119
|
+
const perpX = -unitY;
|
|
120
|
+
const perpY = unitX;
|
|
121
|
+
const backX = endX - unitX * arrowSize;
|
|
122
|
+
const backY = endY - unitY * arrowSize;
|
|
123
|
+
const left = { x: backX + perpX * (arrowSize / 2), y: backY + perpY * (arrowSize / 2) };
|
|
124
|
+
const right = { x: backX - perpX * (arrowSize / 2), y: backY - perpY * (arrowSize / 2) };
|
|
125
|
+
graphics.poly([
|
|
126
|
+
endX, endY,
|
|
127
|
+
left.x, left.y,
|
|
128
|
+
right.x, right.y,
|
|
129
|
+
endX, endY
|
|
130
|
+
]);
|
|
131
|
+
graphics.fill({ color: isHovered ? CONNECTOR_HOVER_COLOR : CONNECTOR_COLOR });
|
|
132
|
+
}
|
|
133
|
+
function getEdgePosition(element, side) {
|
|
134
|
+
const { position, size } = element;
|
|
135
|
+
switch (side) {
|
|
136
|
+
case 'top':
|
|
137
|
+
return { x: position.x + size.width / 2, y: position.y };
|
|
138
|
+
case 'right':
|
|
139
|
+
return { x: position.x + size.width, y: position.y + size.height / 2 };
|
|
140
|
+
case 'bottom':
|
|
141
|
+
return { x: position.x + size.width / 2, y: position.y + size.height };
|
|
142
|
+
case 'left':
|
|
143
|
+
return { x: position.x, y: position.y + size.height / 2 };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function updateConnectorGraphics(connectorGraphics, elements) {
|
|
147
|
+
drawConnector(connectorGraphics.graphics, connectorGraphics.connector, elements, connectorGraphics.isHovered);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export { createConnectorGraphics, updateConnectorGraphics };
|
|
151
|
+
//# sourceMappingURL=connectorGraphics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectorGraphics.js","sources":["../../../../EventModeling/engine/connectorGraphics.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport * as PIXI from 'pixi.js';\nimport { Connector, ElementData, EdgeSide } from '../types';\n\nexport interface ConnectorGraphics {\n id: string;\n graphics: PIXI.Graphics;\n connector: Connector;\n getElements: () => Map<string, ElementData>;\n isHovered: boolean;\n}\n\nconst CONNECTOR_COLOR = 0x64748b;\nconst CONNECTOR_HOVER_COLOR = 0x3b82f6;\nconst CONNECTOR_WIDTH = 2;\nconst CONNECTOR_HOVER_WIDTH = 3;\n\nexport function createConnectorGraphics(\n connector: Connector,\n getElements: () => Map<string, ElementData>,\n onClick: (id: string) => void\n): ConnectorGraphics {\n const graphics = new PIXI.Graphics();\n graphics.eventMode = 'static';\n graphics.cursor = 'pointer';\n graphics.hitArea = new PIXI.Rectangle(0, 0, 0, 0); // Will be updated\n\n const connectorGraphics: ConnectorGraphics = {\n id: connector.id,\n graphics,\n connector,\n getElements,\n isHovered: false,\n };\n\n drawConnector(graphics, connector, getElements(), false);\n\n graphics.on('click', () => {\n onClick(connector.id);\n });\n\n graphics.on('pointerover', () => {\n connectorGraphics.isHovered = true;\n // Use fresh element data from getter\n drawConnector(graphics, connector, connectorGraphics.getElements(), true);\n });\n\n graphics.on('pointerout', () => {\n connectorGraphics.isHovered = false;\n // Use fresh element data from getter\n drawConnector(graphics, connector, connectorGraphics.getElements(), false);\n });\n\n return connectorGraphics;\n}\n\nfunction drawConnector(\n graphics: PIXI.Graphics,\n connector: Connector,\n elements: Map<string, ElementData>,\n isHovered: boolean\n): void {\n const fromElement = elements.get(connector.from.elementId);\n const toElement = elements.get(connector.to.elementId);\n\n if (!fromElement || !toElement) {\n graphics.clear();\n return;\n }\n\n const fromPoint = getEdgePosition(fromElement, connector.from.side);\n const toPoint = getEdgePosition(toElement, connector.to.side);\n\n graphics.clear();\n\n // Create a curved path using cubic Bezier\n const controlPointOffset = Math.abs(toPoint.x - fromPoint.x) / 3;\n \n let cp1x: number, cp1y: number, cp2x: number, cp2y: number;\n\n // Adjust control points based on connection direction\n if (connector.from.side === 'right' && connector.to.side === 'left') {\n // Horizontal connection\n cp1x = fromPoint.x + controlPointOffset;\n cp1y = fromPoint.y;\n cp2x = toPoint.x - controlPointOffset;\n cp2y = toPoint.y;\n } else if (connector.from.side === 'bottom' && connector.to.side === 'top') {\n // Vertical connection\n cp1x = fromPoint.x;\n cp1y = fromPoint.y + controlPointOffset;\n cp2x = toPoint.x;\n cp2y = toPoint.y - controlPointOffset;\n } else {\n // Mixed or diagonal connections\n switch (connector.from.side) {\n case 'right':\n cp1x = fromPoint.x + controlPointOffset;\n cp1y = fromPoint.y;\n break;\n case 'left':\n cp1x = fromPoint.x - controlPointOffset;\n cp1y = fromPoint.y;\n break;\n case 'bottom':\n cp1x = fromPoint.x;\n cp1y = fromPoint.y + controlPointOffset;\n break;\n case 'top':\n default:\n cp1x = fromPoint.x;\n cp1y = fromPoint.y - controlPointOffset;\n break;\n }\n\n switch (connector.to.side) {\n case 'left':\n cp2x = toPoint.x - controlPointOffset;\n cp2y = toPoint.y;\n break;\n case 'right':\n cp2x = toPoint.x + controlPointOffset;\n cp2y = toPoint.y;\n break;\n case 'top':\n cp2x = toPoint.x;\n cp2y = toPoint.y - controlPointOffset;\n break;\n case 'bottom':\n default:\n cp2x = toPoint.x;\n cp2y = toPoint.y + controlPointOffset;\n break;\n }\n }\n\n // Draw the curved line\n graphics.moveTo(fromPoint.x, fromPoint.y);\n graphics.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, toPoint.x, toPoint.y);\n graphics.stroke({\n color: isHovered ? CONNECTOR_HOVER_COLOR : CONNECTOR_COLOR,\n width: isHovered ? CONNECTOR_HOVER_WIDTH : CONNECTOR_WIDTH,\n });\n\n // Draw arrowhead at the end - pass all curve points for accurate tangent calculation\n drawArrowhead(graphics, fromPoint.x, fromPoint.y, cp1x, cp1y, cp2x, cp2y, toPoint.x, toPoint.y, isHovered);\n\n // Update hit area for better click detection\n const minX = Math.min(fromPoint.x, toPoint.x) - 10;\n const minY = Math.min(fromPoint.y, toPoint.y) - 10;\n const maxX = Math.max(fromPoint.x, toPoint.x) + 10;\n const maxY = Math.max(fromPoint.y, toPoint.y) + 10;\n graphics.hitArea = new PIXI.Rectangle(minX, minY, maxX - minX, maxY - minY);\n}\n\nfunction drawArrowhead(\n graphics: PIXI.Graphics,\n startX: number,\n startY: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endX: number,\n endY: number,\n isHovered: boolean\n): void {\n const arrowSize = 10;\n \n // Calculate the tangent at the end of the Bezier curve (t = 1)\n // For cubic Bezier: B'(t) = 3(1-t)²(P1-P0) + 6(1-t)t(P2-P1) + 3t²(P3-P2)\n // At t = 1: B'(1) = 3(P3 - P2)\n // This gives us the direction the curve is heading at the endpoint\n const dx = 3 * (endX - cp2x);\n const dy = 3 * (endY - cp2y);\n const length = Math.sqrt(dx * dx + dy * dy);\n \n if (length === 0) return;\n\n const unitX = dx / length;\n const unitY = dy / length;\n\n // Calculate perpendicular\n const perpX = -unitY;\n const perpY = unitX;\n\n // Calculate arrowhead points\n const backX = endX - unitX * arrowSize;\n const backY = endY - unitY * arrowSize;\n const left = { x: backX + perpX * (arrowSize / 2), y: backY + perpY * (arrowSize / 2) };\n const right = { x: backX - perpX * (arrowSize / 2), y: backY - perpY * (arrowSize / 2) };\n\n // Draw filled arrowhead\n graphics.poly([\n endX, endY,\n left.x, left.y,\n right.x, right.y,\n endX, endY\n ]);\n graphics.fill({ color: isHovered ? CONNECTOR_HOVER_COLOR : CONNECTOR_COLOR });\n}\n\nfunction getEdgePosition(element: ElementData, side: EdgeSide): { x: number; y: number } {\n const { position, size } = element;\n \n switch (side) {\n case 'top':\n return { x: position.x + size.width / 2, y: position.y };\n case 'right':\n return { x: position.x + size.width, y: position.y + size.height / 2 };\n case 'bottom':\n return { x: position.x + size.width / 2, y: position.y + size.height };\n case 'left':\n return { x: position.x, y: position.y + size.height / 2 };\n }\n}\n\nexport function updateConnectorGraphics(\n connectorGraphics: ConnectorGraphics,\n elements: Map<string, ElementData>\n): void {\n // Preserve hover state when updating\n drawConnector(connectorGraphics.graphics, connectorGraphics.connector, elements, connectorGraphics.isHovered);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as PIXI from 'pixi.js';
|
|
2
|
+
import { ElementData, EdgeSide } from '../types';
|
|
3
|
+
export interface ElementSprite {
|
|
4
|
+
id: string;
|
|
5
|
+
container: PIXI.Container;
|
|
6
|
+
graphics: PIXI.Graphics;
|
|
7
|
+
selectionBorder?: PIXI.Graphics;
|
|
8
|
+
labelText: PIXI.Text;
|
|
9
|
+
descriptionText?: PIXI.Text;
|
|
10
|
+
edgePoints: Map<EdgeSide, PIXI.Graphics>;
|
|
11
|
+
data: ElementData;
|
|
12
|
+
isDragging: boolean;
|
|
13
|
+
dragOffset?: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function createElementSprite(data: ElementData, onElementClick: (id: string) => void, onElementDragStart: (id: string, x: number, y: number) => void, onElementDragMove: (id: string, x: number, y: number) => void, onElementDragEnd: (id: string) => void, onEdgeClick: (elementId: string, side: EdgeSide) => void): ElementSprite;
|
|
19
|
+
export declare function updateElementSprite(sprite: ElementSprite, data: ElementData): void;
|
|
20
|
+
export declare function showEdgePoints(sprite: ElementSprite): void;
|
|
21
|
+
export declare function hideEdgePoints(sprite: ElementSprite): void;
|
|
22
|
+
export declare function setElementSelected(sprite: ElementSprite, selected: boolean): void;
|
|
23
|
+
//# sourceMappingURL=elementSprites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementSprites.d.ts","sourceRoot":"","sources":["../../../../EventModeling/engine/elementSprites.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAkB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACxB,eAAe,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;IAC5B,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAMD,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,WAAW,EACjB,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EACpC,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EAC9D,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EAC7D,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EACtC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,GACzD,aAAa,CA4Hf;AA8GD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAwClF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAI1D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAI1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CASjF"}
|