wuhp commited on
Commit
f4fff4e
·
verified ·
1 Parent(s): 781de58

Update components/PropertiesPanel.tsx

Browse files
Files changed (1) hide show
  1. components/PropertiesPanel.tsx +23 -9
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="w-80 bg-slate-900 border-l border-slate-800 flex flex-col h-full">
21
- <div className="p-4 border-b border-slate-800 flex items-center gap-2">
22
- <Activity size={18} className="text-blue-400"/>
23
- <h2 className="text-sm font-bold text-slate-200 uppercase tracking-wider">System Activity</h2>
 
 
 
 
 
 
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="w-80 bg-slate-900 border-l border-slate-800 flex flex-col h-full">
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="w-80 bg-slate-900 border-l border-slate-800 flex flex-col h-full">
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>