Compare commits

..

No commits in common. "9402b6c40f338b4c65ea275e42fb94341cd354db" and "eb7f87dfbca01b1cbcd7ee05fdf90c10f10ad0fb" have entirely different histories.

5 changed files with 47 additions and 80 deletions

View File

@ -75,10 +75,6 @@ server {
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml application/rss+xml;
# Frontend SPA routing must be last so specific locations above take precedence
location = / {
return 301 /velxio/editor;
}
location / {
try_files $uri $uri/ /index.html;
}

View File

@ -18,7 +18,6 @@ interface ComponentPropertyDialogProps {
onClose: () => void;
onRotate: (componentId: string) => void;
onDelete: (componentId: string) => void;
lockComponents?: boolean;
}
export const ComponentPropertyDialog: React.FC<ComponentPropertyDialogProps> = ({
@ -30,7 +29,6 @@ export const ComponentPropertyDialog: React.FC<ComponentPropertyDialogProps> = (
onClose,
onRotate,
onDelete,
lockComponents = false,
}) => {
const dialogRef = useRef<HTMLDivElement>(null);
const [dialogPosition, setDialogPosition] = useState({ x: 0, y: 0 });
@ -153,7 +151,6 @@ export const ComponentPropertyDialog: React.FC<ComponentPropertyDialogProps> = (
>
Rotate
</button>
{!lockComponents && (
<button
className="property-action-button delete-button"
onClick={() => {
@ -165,7 +162,6 @@ export const ComponentPropertyDialog: React.FC<ComponentPropertyDialogProps> = (
>
Delete
</button>
)}
</div>
</div>
);

View File

@ -59,7 +59,6 @@ export const SimulatorCanvas = () => {
updateComponent,
serialMonitorOpen,
toggleSerialMonitor,
lockComponents,
} = useSimulatorStore();
// Active board (for WiFi/BLE status display)
@ -993,8 +992,6 @@ export const SimulatorCanvas = () => {
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if (e.key === 'Delete' || e.key === 'Backspace') {
if (lockComponents) return; // Prevent deletion if locked
if (selectedComponentId) {
removeComponent(selectedComponentId);
setSelectedComponentId(null);
@ -1007,7 +1004,7 @@ export const SimulatorCanvas = () => {
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [selectedComponentId, removeComponent, activeBoardId, boards.length, lockComponents]);
}, [selectedComponentId, removeComponent, activeBoardId, boards.length]);
// Handle component selection from modal
const handleSelectComponent = (metadata: ComponentMetadata) => {
@ -1610,7 +1607,6 @@ export const SimulatorCanvas = () => {
</span>
{/* Add Component */}
{!lockComponents && (
<button
className="add-component-btn"
onClick={() => setShowComponentPicker(true)}
@ -1623,7 +1619,6 @@ export const SimulatorCanvas = () => {
</svg>
Add
</button>
)}
</div>
</div>
@ -1836,7 +1831,6 @@ export const SimulatorCanvas = () => {
removeComponent(id);
setShowPropertyDialog(false);
}}
lockComponents={lockComponents}
/>
);
})()}
@ -1890,7 +1884,6 @@ export const SimulatorCanvas = () => {
<div style={{ padding: '6px 14px', color: '#888', fontSize: 11, borderBottom: '1px solid #3c3c3c', marginBottom: 2 }}>
{label}
</div>
{!lockComponents && (
<button
style={{
display: 'flex', alignItems: 'center', gap: 8,
@ -1914,7 +1907,6 @@ export const SimulatorCanvas = () => {
Remove board
{connectedWires > 0 && <span style={{ color: '#888', fontSize: 11 }}>({connectedWires} wire{connectedWires > 1 ? 's' : ''})</span>}
</button>
)}
</div>
</>
);

View File

@ -61,18 +61,9 @@ export const EditorPage: React.FC = () => {
return {
enabled: params.get('embed') === 'true',
hideEditor: params.get('hideEditor') === 'true',
lockComponents: params.get('lockComponents') === 'true',
};
});
const [embedHideComponentPicker, setEmbedHideComponentPicker] = useState(false);
const setLockComponents = useSimulatorStore((s) => s.setLockComponents);
// Initial URL params sync
useEffect(() => {
if (embedMode.lockComponents) {
setLockComponents(true);
}
}, [embedMode.lockComponents, setLockComponents]);
// Listen for embed mode commands from parent
useEffect(() => {
@ -80,7 +71,6 @@ export const EditorPage: React.FC = () => {
const handler = (e: Event) => {
const detail = (e as CustomEvent).detail || {};
if (detail.hideComponentPicker) setEmbedHideComponentPicker(true);
if (detail.lockComponents !== undefined) setLockComponents(detail.lockComponents);
};
window.addEventListener('velxio-embed-mode', handler);
// Notify parent that Velxio is ready

View File

@ -222,10 +222,6 @@ interface SimulatorState {
esp32CrashBoardId: string | null;
dismissEsp32Crash: () => void;
// ── Lock components ─────────────────────────────────────────────────────
lockComponents: boolean;
setLockComponents: (locked: boolean) => void;
// ── Components ──────────────────────────────────────────────────────────
components: Component[];
addComponent: (component: Component) => void;
@ -790,9 +786,6 @@ export const useSimulatorStore = create<SimulatorState>((set, get) => {
esp32CrashBoardId: null,
dismissEsp32Crash: () => set({ esp32CrashBoardId: null }),
lockComponents: false,
setLockComponents: (locked: boolean) => set({ lockComponents: locked }),
setBoardType: (type: BoardType) => {
const { activeBoardId, running, stopSimulation } = get();
if (running) stopSimulation();