You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.3 KiB
79 lines
2.3 KiB
/** |
|
* Design State - Default canvas interaction mode |
|
* |
|
* In this state, users can: |
|
* - Place components from sidebar |
|
* - Select/deselect components |
|
* - Edit component properties |
|
* - Delete components |
|
*/ |
|
|
|
import { CanvasState } from './CanvasState.js'; |
|
|
|
export class DesignState extends CanvasState { |
|
enter(app) { |
|
super.enter(app); |
|
|
|
// Update UI to reflect design mode |
|
app.arrowToolBtn.classList.remove('active'); |
|
app.canvas.style.cursor = this.getCursor(); |
|
|
|
// Clear any connection state |
|
if (app.connectionStart) { |
|
app.connectionStart.group.classList.remove('selected'); |
|
app.connectionStart = null; |
|
} |
|
|
|
// Notify observers that connection mode is disabled |
|
app.connectionModeSubject.notifyConnectionModeChanged(false); |
|
} |
|
|
|
handleNodeClick(app, node, event) { |
|
event.stopPropagation(); |
|
|
|
// Clear any selected connection when clicking a node |
|
if (app.selectedConnection) { |
|
app.selectedConnection.deselect(); |
|
app.selectedConnection = null; |
|
} |
|
|
|
// Clear previous node selection and select this node |
|
if (app.selectedNode && app.selectedNode !== node) { |
|
app.nodeSelectionSubject.notifyNodeDeselected(app.selectedNode); |
|
} |
|
|
|
// Select the clicked node |
|
node.select(); |
|
app.nodeSelectionSubject.notifyNodeSelected(node); |
|
} |
|
|
|
handleNodeDoubleClick(app, node) { |
|
// Show properties panel for the node |
|
app.propertiesPanelSubject.notifyPropertiesPanelRequested(node); |
|
} |
|
|
|
handleCanvasClick(app, event) { |
|
// Don't hide props panel if clicking on it |
|
if (!app.nodePropsPanel.contains(event.target)) { |
|
// Use observer to notify that properties panel should be closed |
|
if (app.selectedNode) { |
|
app.propertiesPanelSubject.notifyPropertiesPanelClosed(app.selectedNode); |
|
} |
|
} |
|
|
|
// Use base implementation for other clearing logic |
|
super.handleCanvasClick(app, event); |
|
} |
|
|
|
getCursor() { |
|
return 'default'; |
|
} |
|
|
|
allowsPropertiesPanel() { |
|
return true; |
|
} |
|
|
|
getStateName() { |
|
return 'Design'; |
|
} |
|
}
|
|
|