Spaces:
Running
Running
Update components/PropertiesPanel.tsx
Browse files
components/PropertiesPanel.tsx
CHANGED
|
@@ -1,10 +1,9 @@
|
|
| 1 |
|
| 2 |
-
|
| 3 |
import React from 'react';
|
| 4 |
import { Node } from 'reactflow';
|
| 5 |
import { NodeData, LayerDefinition, LogEntry } from '../types';
|
| 6 |
import { LAYER_DEFINITIONS } from '../constants';
|
| 7 |
-
import { X, Trash2, Activity, Info, CheckCircle, AlertTriangle, AlertOctagon } from 'lucide-react';
|
| 8 |
|
| 9 |
interface PropertiesPanelProps {
|
| 10 |
selectedNode: Node<NodeData> | null;
|
|
@@ -12,15 +11,30 @@ interface PropertiesPanelProps {
|
|
| 12 |
onDelete: (id: string) => void;
|
| 13 |
onClose: () => void;
|
| 14 |
logs?: LogEntry[];
|
|
|
|
| 15 |
}
|
| 16 |
|
| 17 |
-
const PropertiesPanel: React.FC<PropertiesPanelProps> = ({ selectedNode, onChange, onDelete, onClose, logs = [] }) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
if (!selectedNode) {
|
| 19 |
return (
|
| 20 |
-
<div className=
|
| 21 |
-
<div className="p-4 border-b border-slate-800 flex items-center
|
| 22 |
-
<
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
</div>
|
| 25 |
|
| 26 |
<div className="flex-1 overflow-y-auto p-4 space-y-3 scrollbar-thin scrollbar-thumb-slate-700">
|
|
@@ -65,7 +79,7 @@ const PropertiesPanel: React.FC<PropertiesPanelProps> = ({ selectedNode, onChang
|
|
| 65 |
|
| 66 |
if (!definition) {
|
| 67 |
return (
|
| 68 |
-
<div className=
|
| 69 |
<div className="p-4 border-b border-slate-800 flex justify-between items-center">
|
| 70 |
<h2 className="text-lg font-bold text-slate-100">Unknown Layer</h2>
|
| 71 |
<button onClick={onClose}><X size={18} className="text-slate-500 hover:text-white"/></button>
|
|
@@ -106,7 +120,7 @@ const PropertiesPanel: React.FC<PropertiesPanelProps> = ({ selectedNode, onChang
|
|
| 106 |
};
|
| 107 |
|
| 108 |
return (
|
| 109 |
-
<div className=
|
| 110 |
<div className="p-4 border-b border-slate-800 flex justify-between items-center">
|
| 111 |
<div>
|
| 112 |
<h2 className="text-lg font-bold text-slate-100">{definition.label}</h2>
|
|
|
|
| 1 |
|
|
|
|
| 2 |
import React from 'react';
|
| 3 |
import { Node } from 'reactflow';
|
| 4 |
import { NodeData, LayerDefinition, LogEntry } from '../types';
|
| 5 |
import { LAYER_DEFINITIONS } from '../constants';
|
| 6 |
+
import { X, Trash2, Activity, Info, CheckCircle, AlertTriangle, AlertOctagon, ChevronDown } from 'lucide-react';
|
| 7 |
|
| 8 |
interface PropertiesPanelProps {
|
| 9 |
selectedNode: Node<NodeData> | null;
|
|
|
|
| 11 |
onDelete: (id: string) => void;
|
| 12 |
onClose: () => void;
|
| 13 |
logs?: LogEntry[];
|
| 14 |
+
isOpen: boolean; // Mobile visibility state
|
| 15 |
}
|
| 16 |
|
| 17 |
+
const PropertiesPanel: React.FC<PropertiesPanelProps> = ({ selectedNode, onChange, onDelete, onClose, logs = [], isOpen }) => {
|
| 18 |
+
|
| 19 |
+
const containerClasses = `
|
| 20 |
+
bg-slate-900 flex flex-col transition-all duration-300 z-30 shadow-2xl
|
| 21 |
+
fixed inset-x-0 bottom-0 h-[60vh] w-full border-t border-slate-700 rounded-t-xl
|
| 22 |
+
${isOpen ? 'translate-y-0' : 'translate-y-full'}
|
| 23 |
+
md:relative md:inset-auto md:h-full md:w-80 md:border-l md:border-t-0 md:rounded-none md:translate-y-0 md:shadow-none
|
| 24 |
+
`;
|
| 25 |
+
|
| 26 |
if (!selectedNode) {
|
| 27 |
return (
|
| 28 |
+
<div className={containerClasses}>
|
| 29 |
+
<div className="p-4 border-b border-slate-800 flex items-center justify-between">
|
| 30 |
+
<div className="flex items-center gap-2">
|
| 31 |
+
<Activity size={18} className="text-blue-400"/>
|
| 32 |
+
<h2 className="text-sm font-bold text-slate-200 uppercase tracking-wider">System Activity</h2>
|
| 33 |
+
</div>
|
| 34 |
+
{/* Mobile Close Handle */}
|
| 35 |
+
<button onClick={onClose} className="md:hidden text-slate-500 hover:text-white">
|
| 36 |
+
<ChevronDown size={20} />
|
| 37 |
+
</button>
|
| 38 |
</div>
|
| 39 |
|
| 40 |
<div className="flex-1 overflow-y-auto p-4 space-y-3 scrollbar-thin scrollbar-thumb-slate-700">
|
|
|
|
| 79 |
|
| 80 |
if (!definition) {
|
| 81 |
return (
|
| 82 |
+
<div className={containerClasses}>
|
| 83 |
<div className="p-4 border-b border-slate-800 flex justify-between items-center">
|
| 84 |
<h2 className="text-lg font-bold text-slate-100">Unknown Layer</h2>
|
| 85 |
<button onClick={onClose}><X size={18} className="text-slate-500 hover:text-white"/></button>
|
|
|
|
| 120 |
};
|
| 121 |
|
| 122 |
return (
|
| 123 |
+
<div className={containerClasses}>
|
| 124 |
<div className="p-4 border-b border-slate-800 flex justify-between items-center">
|
| 125 |
<div>
|
| 126 |
<h2 className="text-lg font-bold text-slate-100">{definition.label}</h2>
|