fractostate 4.7.1 → 4.8.0
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/dist/cjs/src/devtools/MentalMap.js +1 -2
- package/dist/cjs/src/devtools/MentalMap.js.map +1 -1
- package/dist/cjs/src/proxy.js +132 -0
- package/dist/cjs/src/proxy.js.map +1 -1
- package/dist/esm/src/devtools/MentalMap.js +1 -2
- package/dist/esm/src/devtools/MentalMap.js.map +1 -1
- package/dist/esm/src/proxy.js +132 -0
- package/dist/esm/src/proxy.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/plugins.d.ts +1 -1
- package/dist/types-B6F3mRRc.d.ts +288 -0
- package/dist/types-glPP8lSw.d.ts +216 -0
- package/package.json +1 -1
|
@@ -28,7 +28,6 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
28
28
|
const [overlayFlow, setOverlayFlow] = React.useState(null);
|
|
29
29
|
const [searchQuery, setSearchQuery] = React.useState("");
|
|
30
30
|
const [isMinimized, setIsMinimized] = React.useState(false);
|
|
31
|
-
const [isFullscreen, setIsFullscreen] = React.useState(false);
|
|
32
31
|
const [isLedgerVisible, setIsLedgerVisible] = React.useState(true);
|
|
33
32
|
const [viewMode, setViewMode] = React.useState("live");
|
|
34
33
|
React.useEffect(() => {
|
|
@@ -165,7 +164,7 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
165
164
|
}
|
|
166
165
|
});
|
|
167
166
|
// --- Node ACTORS (Left) ---
|
|
168
|
-
namedActors.forEach((actor,
|
|
167
|
+
namedActors.forEach((actor, _) => {
|
|
169
168
|
const actorId = `actor-${actor.label}-${key}`;
|
|
170
169
|
const isActorHot = isFlowHot && activity.actor === actor.label;
|
|
171
170
|
newNodes.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentalMap.js","sources":["../../../../src/devtools/MentalMap.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n Edge,\n Node,\n useNodesState,\n useEdgesState,\n ConnectionLineType,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Database,\n Search,\n X,\n RefreshCcw,\n Maximize2,\n Cpu,\n Minimize2,\n PanelRightClose,\n PanelRight,\n Activity,\n GitBranch,\n Network,\n} from \"lucide-react\";\nimport \"./MentalMap.css\";\nimport { MMapProps } from \"./mmap/MMapTypes\";\nimport { FlowNode, ActorNode, ListenerNode } from \"./mmap/components/FlowNodes\";\nimport { FiberEdge } from \"./MapUtils\";\nimport { MMapSidebar } from \"./mmap/components/MMapSidebar\";\nimport { MMapLedger } from \"./mmap/components/MMapLedger\";\nimport { FlowGenealogy } from \"./mmap/components/FlowGenealogy\";\n\nconst nodeTypes = {\n flow: FlowNode,\n actor: ActorNode,\n listener: ListenerNode,\n};\n\nconst edgeTypes = {\n fiber: FiberEdge,\n};\n\nexport const MentalMap = ({\n snapshot,\n onClose,\n onMinimizeChange,\n minimizedSide = \"right\",\n setIsOpen,\n}: MMapProps) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [selectedFlow, setSelectedFlow] = useState<string | null>(null);\n const [overlayFlow, setOverlayFlow] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isMinimized, setIsMinimized] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [isLedgerVisible, setIsLedgerVisible] = useState(true);\n const [viewMode, setViewMode] = useState<\"live\" | \"genealogy\">(\"live\");\n\n useEffect(() => {\n onMinimizeChange?.(isMinimized);\n }, [isMinimized, onMinimizeChange]);\n\n // Logic pour le drag du logo réduit\n const [minimizedPos, setMinimizedPos] = useState({\n x: minimizedSide === \"right\" ? window.innerWidth - 100 : 40,\n y: window.innerHeight - 100,\n });\n const [isDraggingLogo, setIsDraggingLogo] = useState(false);\n const wasDragged = useRef(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleLogoMouseDown = (e: React.MouseEvent) => {\n if (!isMinimized) return;\n setIsDraggingLogo(true);\n wasDragged.current = false;\n setDragOffset({\n x: e.clientX - minimizedPos.x,\n y: e.clientY - minimizedPos.y,\n });\n };\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isDraggingLogo) {\n wasDragged.current = true;\n setMinimizedPos({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n }\n };\n const handleMouseUp = () => {\n setTimeout(() => {\n setIsDraggingLogo(false);\n }, 0);\n };\n\n if (isDraggingLogo) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDraggingLogo, dragOffset]);\n\n const [activeFlows, setActiveFlows] = useState<Set<string>>(new Set());\n\n // Detect recent activity\n const recentActivity = useMemo(() => {\n const now = Date.now();\n const activityMap: Record<\n string,\n { active: boolean; actor?: string; type?: string }\n > = {};\n\n Object.entries(snapshot).forEach(([key, data]) => {\n const traces = data.meta.traces || [];\n const lastTrace = traces[traces.length - 1];\n if (lastTrace && now - lastTrace.timestamp < 1000) {\n activityMap[key] = {\n active: true,\n actor: lastTrace.actor,\n type: lastTrace.type,\n };\n }\n });\n return activityMap;\n }, [snapshot]);\n\n useEffect(() => {\n const active = new Set<string>();\n Object.keys(recentActivity).forEach((key) => active.add(key));\n setActiveFlows(active);\n }, [recentActivity]);\n\n const filteredFlows = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n const entries = Object.entries(snapshot);\n if (!query) return entries;\n\n return entries.filter(([key, data]) => {\n if (key.toLowerCase().includes(query)) return true;\n const consumers = data.meta.consumers || [];\n if (consumers.some((c: any) => c.toLowerCase().includes(query)))\n return true;\n try {\n if (JSON.stringify(data.value).toLowerCase().includes(query))\n return true;\n } catch (e) {}\n return false;\n });\n }, [snapshot, searchQuery]);\n\n useEffect(() => {\n if (viewMode !== \"live\") return;\n\n const flowEntries = filteredFlows;\n const newNodes: Node[] = [];\n const newEdges: Edge[] = [];\n\n const actorX = 50;\n const flowX = 500;\n const listenerX = 950;\n\n let flowY = 100;\n let actorY = 100;\n let listenerY = 100;\n\n flowEntries.forEach(([key, data]) => {\n const activity = recentActivity[key];\n const isFlowHot = !!activity;\n\n // --- Node FLOW (Center) ---\n newNodes.push({\n id: `flow-${key}`,\n type: \"flow\",\n position: { x: flowX, y: flowY },\n data: {\n label: key.toUpperCase(),\n value: data.value,\n isActive: selectedFlow === key,\n isHot: isFlowHot,\n onClick: () => setOverlayFlow(key),\n },\n });\n\n // Split Listeners: Named (Actors) vs Anonymous (UI)\n const rawListeners = data.meta.listeners || [];\n const namedActors: any[] = [];\n const uiListeners: any[] = [];\n\n rawListeners.forEach((l: any) => {\n const isUI =\n l.label.startsWith(\"useFlow(\") || l.label === \"Anonymous Subscriber\";\n if (isUI) uiListeners.push(l);\n else namedActors.push(l);\n });\n\n // Mix in the explicit consumers (those who wrote in the past)\n const explicitConsumers = data.meta.consumers || [];\n explicitConsumers.forEach((name: string) => {\n if (!namedActors.find((a) => a.label === name)) {\n namedActors.push({ label: name, isExplicit: true });\n }\n });\n\n // --- Node ACTORS (Left) ---\n namedActors.forEach((actor, i) => {\n const actorId = `actor-${actor.label}-${key}`;\n const isActorHot = isFlowHot && activity.actor === actor.label;\n\n newNodes.push({\n id: actorId,\n type: \"actor\",\n position: { x: actorX, y: actorY },\n data: {\n label: actor.label,\n isActive: selectedFlow === key,\n isHot: isActorHot,\n },\n });\n\n newEdges.push({\n id: `edge-${actor.label}-${key}`,\n source: actorId,\n target: `flow-${key}`,\n targetHandle: \"actor-target\",\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isActorHot ? \"#fbbf24\" : \"#a855f7\",\n strokeWidth: isActorHot ? 4 : 2,\n },\n });\n\n actorY += 120;\n });\n\n // --- Node UI LISTENERS (Right) ---\n // Group UI Listeners by label to avoid redundancy\n const groupedUI = uiListeners.reduce((acc: any, curr: any) => {\n if (!acc[curr.label]) {\n acc[curr.label] = { ...curr, count: 0 };\n }\n acc[curr.label].count += 1;\n return acc;\n }, {}); \n\n Object.values(groupedUI).forEach((group: any, _: number) => {\n const listenerId = `listener-${key}-${group.label}`;\n const isListenerHot =\n isFlowHot && (activity.type === \"read\" || activity.type === \"write\");\n\n newNodes.push({\n id: listenerId,\n type: \"listener\",\n position: { x: listenerX, y: listenerY },\n data: {\n label:\n group.count > 1\n ? `${group.label} (x${group.count})`\n : group.label,\n isActive: selectedFlow === key,\n isHot: isListenerHot,\n },\n });\n\n newEdges.push({\n id: `edge-flow-listener-${key}-${group.label}`,\n source: `flow-${key}`,\n sourceHandle: \"listener-source\",\n target: listenerId,\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isListenerHot ? \"#fbbf24\" : \"#00d4ff\",\n strokeWidth: isListenerHot ? 3 : 2,\n },\n });\n\n listenerY += 100;\n });\n\n const maxRowHeight = Math.max(\n 250,\n namedActors.length * 120,\n Object.keys(groupedUI).length * 100,\n );\n flowY += maxRowHeight + 50;\n if (actorY < flowY) actorY = flowY;\n if (listenerY < flowY) listenerY = flowY;\n });\n\n setNodes(newNodes);\n setEdges(newEdges);\n }, [\n filteredFlows,\n selectedFlow,\n viewMode,\n recentActivity,\n setNodes,\n setEdges,\n ]);\n\n return (\n <motion.div\n className=\"mental-map-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n {/* ... reste du header identique ... */}\n <div\n className={`mental-map-container ${isMinimized ? \"minimized\" : \"\"}`}\n style={\n isMinimized\n ? {\n left: minimizedPos.x,\n top: minimizedPos.y,\n bottom: \"auto\",\n right: \"auto\",\n }\n : {}\n }\n onMouseDown={handleLogoMouseDown}\n onClick={() => {\n if (!wasDragged.current && isMinimized) setIsMinimized(false);\n }}\n >\n <div\n className={`m2-minimized-logo ${activeFlows.size > 0 ? \"pulse\" : \"\"}`}\n >\n F<span className=\"m2-minimized-badge\">FTE</span>\n </div>\n\n <header className=\"m2-header\">\n <div className=\"m2-logo-group\">\n <div className=\"m2-logo-icon\">\n <Cpu color=\"white\" size={28} />\n </div>\n <div className=\"m2-header-titles\">\n <h1>Mental Map & Trace Engine</h1>\n <div className=\"m2-header-meta\">\n <span className=\"m2-engine-badge\">FM2/FTE5</span>\n <span style={{ fontSize: 10, opacity: 0.5, fontWeight: 700 }}>\n NEHONIX FCE\n </span>\n </div>\n </div>\n </div>\n <div className=\"m2-controls\">\n <div\n className=\"m2-view-switcher\"\n style={{ display: \"flex\", gap: 8, marginRight: 16 }}\n >\n <button\n className={`view-toggle-btn ${viewMode === \"live\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"live\")}\n >\n <Network size={16} /> Live Graph\n </button>\n <button\n className={`view-toggle-btn ${viewMode === \"genealogy\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"genealogy\")}\n >\n <GitBranch size={16} /> Genealogy\n </button>\n </div>\n <div className=\"m2-search-wrapper\">\n <Search className=\"m2-search-icon\" size={18} />\n <input\n type=\"text\"\n className=\"m2-search-input\"\n placeholder=\"Search flows, actors or data patterns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <div className=\"m2-action-btns\">\n <button\n className=\"m2-icon-btn\"\n title=\"Refresh\"\n onClick={() => window.location.reload()}\n >\n <RefreshCcw size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Minimize\"\n style={{color: \"blue\"}}\n\n onClick={(e) => {\n e.stopPropagation();\n setIsMinimized(true);\n setIsOpen(false);\n }}\n >\n <Minimize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Fullscreen\"\n onClick={() => {\n if (!document.fullscreenElement)\n document.documentElement.requestFullscreen();\n else document.exitFullscreen();\n }}\n >\n <Maximize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Toggle Ledger\"\n onClick={() => setIsLedgerVisible(!isLedgerVisible)}\n >\n {isLedgerVisible ? (\n <PanelRightClose size={20} />\n ) : (\n <PanelRight size={20} />\n )}\n </button>\n <button\n className=\"m2-icon-btn m2-close-btn force-visible\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n title=\"Close\"\n >\n <X size={24} />\n </button>\n </div>\n </div>\n </header>\n\n <div className=\"m2-layout\">\n <MMapSidebar\n filteredFlows={filteredFlows}\n selectedFlow={selectedFlow}\n setSelectedFlow={setSelectedFlow}\n activeFlows={activeFlows}\n />\n <main className=\"m2-canvas\">\n {viewMode === \"live\" ? (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineType={ConnectionLineType.Bezier}\n onNodeClick={(_, node) => {\n if (node.type === \"flow\")\n setOverlayFlow(node.id.replace(\"flow-\", \"\"));\n }}\n fitView\n colorMode=\"dark\"\n >\n <Background color=\"#1e293b\" gap={20} />{\" \"}\n <Controls showInteractive={false} />\n </ReactFlow>\n ) : (\n <FlowGenealogy\n snapshot={snapshot}\n onSelectFlow={setOverlayFlow}\n />\n )}\n </main>\n <MMapLedger\n snapshot={snapshot}\n selectedFlow={selectedFlow}\n isLedgerVisible={isLedgerVisible}\n />\n </div>\n\n <AnimatePresence>\n {overlayFlow && (\n <motion.div\n className=\"m2-flow-overlay-backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setOverlayFlow(null)}\n >\n <div\n className=\"m2-flow-overlay\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"m2-overlay-header\">\n <div className=\"m2-overlay-title\">\n <Database color=\"#00d4ff\" size={24} />\n <h2>{overlayFlow} Activity</h2>\n </div>\n <button\n className=\"m2-icon-btn m2-close-btn\"\n onClick={() => setOverlayFlow(null)}\n >\n <X size={20} />\n </button>\n </div>\n <div className=\"m2-overlay-content\">\n {snapshot[overlayFlow].meta.traces.length === 0 ? (\n <div className=\"m2-empty-state\">\n <Activity size={48} className=\"m2-empty-icon\" />\n <h3>No Activity Detected</h3>\n <p>This flow hasn't emitted any events yet.</p>\n </div>\n ) : (\n <div className=\"m2-trace-list\">\n {[...snapshot[overlayFlow].meta.traces]\n .reverse()\n .map((trace, i) => (\n <div\n key={i}\n className={`m2-trace-card ${trace.type === \"reset\" ? \"reset\" : \"\"}`}\n >\n <div className=\"m2-trace-dot\" />\n <div className=\"m2-trace-header\">\n <span className=\"m2-trace-actor-lbl\">\n {trace.actor}\n </span>\n <span className=\"m2-trace-ts\">\n {new Date(trace.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"m2-trace-op-info\">\n <span className=\"m2-op-type\">{trace.type}</span>\n </div>\n <div className=\"m2-trace-data\">\n <pre className=\"m2-trace-json\">\n {JSON.stringify(trace.value, null, 2)}\n </pre>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </motion.div>\n );\n};\n"],"names":["FlowNode","ActorNode","ListenerNode","FiberEdge","useNodesState","useEdgesState","useState","useEffect","useRef","useMemo","_jsx","motion","_jsxs","Cpu","Network","GitBranch","Search","RefreshCcw","Minimize2","Maximize2","PanelRightClose","PanelRight","X","MMapSidebar","ReactFlow","ConnectionLineType","Background","Controls","FlowGenealogy","MMapLedger","AnimatePresence","Database","Activity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MentalMap.js","sources":["../../../../src/devtools/MentalMap.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n Edge,\n Node,\n useNodesState,\n useEdgesState,\n ConnectionLineType,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Database,\n Search,\n X,\n RefreshCcw,\n Maximize2,\n Cpu,\n Minimize2,\n PanelRightClose,\n PanelRight,\n Activity,\n GitBranch,\n Network,\n} from \"lucide-react\";\nimport \"./MentalMap.css\";\nimport { MMapProps } from \"./mmap/MMapTypes\";\nimport { FlowNode, ActorNode, ListenerNode } from \"./mmap/components/FlowNodes\";\nimport { FiberEdge } from \"./MapUtils\";\nimport { MMapSidebar } from \"./mmap/components/MMapSidebar\";\nimport { MMapLedger } from \"./mmap/components/MMapLedger\";\nimport { FlowGenealogy } from \"./mmap/components/FlowGenealogy\";\n\nconst nodeTypes = {\n flow: FlowNode,\n actor: ActorNode,\n listener: ListenerNode,\n};\n\nconst edgeTypes = {\n fiber: FiberEdge,\n};\n\nexport const MentalMap = ({\n snapshot,\n onClose,\n onMinimizeChange,\n minimizedSide = \"right\",\n setIsOpen,\n}: MMapProps) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [selectedFlow, setSelectedFlow] = useState<string | null>(null);\n const [overlayFlow, setOverlayFlow] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isMinimized, setIsMinimized] = useState(false);\n const [isLedgerVisible, setIsLedgerVisible] = useState(true);\n const [viewMode, setViewMode] = useState<\"live\" | \"genealogy\">(\"live\");\n\n useEffect(() => {\n onMinimizeChange?.(isMinimized);\n }, [isMinimized, onMinimizeChange]);\n\n // Logic pour le drag du logo réduit\n const [minimizedPos, setMinimizedPos] = useState({\n x: minimizedSide === \"right\" ? window.innerWidth - 100 : 40,\n y: window.innerHeight - 100,\n });\n const [isDraggingLogo, setIsDraggingLogo] = useState(false);\n const wasDragged = useRef(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleLogoMouseDown = (e: React.MouseEvent) => {\n if (!isMinimized) return;\n setIsDraggingLogo(true);\n wasDragged.current = false;\n setDragOffset({\n x: e.clientX - minimizedPos.x,\n y: e.clientY - minimizedPos.y,\n });\n };\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isDraggingLogo) {\n wasDragged.current = true;\n setMinimizedPos({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n }\n };\n const handleMouseUp = () => {\n setTimeout(() => {\n setIsDraggingLogo(false);\n }, 0);\n };\n\n if (isDraggingLogo) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDraggingLogo, dragOffset]);\n\n const [activeFlows, setActiveFlows] = useState<Set<string>>(new Set());\n\n // Detect recent activity\n const recentActivity = useMemo(() => {\n const now = Date.now();\n const activityMap: Record<\n string,\n { active: boolean; actor?: string; type?: string }\n > = {};\n\n Object.entries(snapshot).forEach(([key, data]) => {\n const traces = data.meta.traces || [];\n const lastTrace = traces[traces.length - 1];\n if (lastTrace && now - lastTrace.timestamp < 1000) {\n activityMap[key] = {\n active: true,\n actor: lastTrace.actor,\n type: lastTrace.type,\n };\n }\n });\n return activityMap;\n }, [snapshot]);\n\n useEffect(() => {\n const active = new Set<string>();\n Object.keys(recentActivity).forEach((key) => active.add(key));\n setActiveFlows(active);\n }, [recentActivity]);\n\n const filteredFlows = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n const entries = Object.entries(snapshot);\n if (!query) return entries;\n\n return entries.filter(([key, data]) => {\n if (key.toLowerCase().includes(query)) return true;\n const consumers = data.meta.consumers || [];\n if (consumers.some((c: any) => c.toLowerCase().includes(query)))\n return true;\n try {\n if (JSON.stringify(data.value).toLowerCase().includes(query))\n return true;\n } catch (e) {}\n return false;\n });\n }, [snapshot, searchQuery]);\n\n useEffect(() => {\n if (viewMode !== \"live\") return;\n\n const flowEntries = filteredFlows;\n const newNodes: Node[] = [];\n const newEdges: Edge[] = [];\n\n const actorX = 50;\n const flowX = 500;\n const listenerX = 950;\n\n let flowY = 100;\n let actorY = 100;\n let listenerY = 100;\n\n flowEntries.forEach(([key, data]) => {\n const activity = recentActivity[key];\n const isFlowHot = !!activity;\n\n // --- Node FLOW (Center) ---\n newNodes.push({\n id: `flow-${key}`,\n type: \"flow\",\n position: { x: flowX, y: flowY },\n data: {\n label: key.toUpperCase(),\n value: data.value,\n isActive: selectedFlow === key,\n isHot: isFlowHot,\n onClick: () => setOverlayFlow(key),\n },\n });\n\n // Split Listeners: Named (Actors) vs Anonymous (UI)\n const rawListeners = data.meta.listeners || [];\n const namedActors: any[] = [];\n const uiListeners: any[] = [];\n\n rawListeners.forEach((l: any) => {\n const isUI =\n l.label.startsWith(\"useFlow(\") || l.label === \"Anonymous Subscriber\";\n if (isUI) uiListeners.push(l);\n else namedActors.push(l);\n });\n\n // Mix in the explicit consumers (those who wrote in the past)\n const explicitConsumers = data.meta.consumers || [];\n explicitConsumers.forEach((name: string) => {\n if (!namedActors.find((a) => a.label === name)) {\n namedActors.push({ label: name, isExplicit: true });\n }\n });\n\n // --- Node ACTORS (Left) ---\n namedActors.forEach((actor, _) => {\n const actorId = `actor-${actor.label}-${key}`;\n const isActorHot = isFlowHot && activity.actor === actor.label;\n\n newNodes.push({\n id: actorId,\n type: \"actor\",\n position: { x: actorX, y: actorY },\n data: {\n label: actor.label,\n isActive: selectedFlow === key,\n isHot: isActorHot,\n },\n });\n\n newEdges.push({\n id: `edge-${actor.label}-${key}`,\n source: actorId,\n target: `flow-${key}`,\n targetHandle: \"actor-target\",\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isActorHot ? \"#fbbf24\" : \"#a855f7\",\n strokeWidth: isActorHot ? 4 : 2,\n },\n });\n\n actorY += 120;\n });\n\n // --- Node UI LISTENERS (Right) ---\n // Group UI Listeners by label to avoid redundancy\n const groupedUI = uiListeners.reduce((acc: any, curr: any) => {\n if (!acc[curr.label]) {\n acc[curr.label] = { ...curr, count: 0 };\n }\n acc[curr.label].count += 1;\n return acc;\n }, {}); \n\n Object.values(groupedUI).forEach((group: any, _: number) => {\n const listenerId = `listener-${key}-${group.label}`;\n const isListenerHot =\n isFlowHot && (activity.type === \"read\" || activity.type === \"write\");\n\n newNodes.push({\n id: listenerId,\n type: \"listener\",\n position: { x: listenerX, y: listenerY },\n data: {\n label:\n group.count > 1\n ? `${group.label} (x${group.count})`\n : group.label,\n isActive: selectedFlow === key,\n isHot: isListenerHot,\n },\n });\n\n newEdges.push({\n id: `edge-flow-listener-${key}-${group.label}`,\n source: `flow-${key}`,\n sourceHandle: \"listener-source\",\n target: listenerId,\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isListenerHot ? \"#fbbf24\" : \"#00d4ff\",\n strokeWidth: isListenerHot ? 3 : 2,\n },\n });\n\n listenerY += 100;\n });\n\n const maxRowHeight = Math.max(\n 250,\n namedActors.length * 120,\n Object.keys(groupedUI).length * 100,\n );\n flowY += maxRowHeight + 50;\n if (actorY < flowY) actorY = flowY;\n if (listenerY < flowY) listenerY = flowY;\n });\n\n setNodes(newNodes);\n setEdges(newEdges);\n }, [\n filteredFlows,\n selectedFlow,\n viewMode,\n recentActivity,\n setNodes,\n setEdges,\n ]);\n\n return (\n <motion.div\n className=\"mental-map-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n {/* ... reste du header identique ... */}\n <div\n className={`mental-map-container ${isMinimized ? \"minimized\" : \"\"}`}\n style={\n isMinimized\n ? {\n left: minimizedPos.x,\n top: minimizedPos.y,\n bottom: \"auto\",\n right: \"auto\",\n }\n : {}\n }\n onMouseDown={handleLogoMouseDown}\n onClick={() => {\n if (!wasDragged.current && isMinimized) setIsMinimized(false);\n }}\n >\n <div\n className={`m2-minimized-logo ${activeFlows.size > 0 ? \"pulse\" : \"\"}`}\n >\n F<span className=\"m2-minimized-badge\">FTE</span>\n </div>\n\n <header className=\"m2-header\">\n <div className=\"m2-logo-group\">\n <div className=\"m2-logo-icon\">\n <Cpu color=\"white\" size={28} />\n </div>\n <div className=\"m2-header-titles\">\n <h1>Mental Map & Trace Engine</h1>\n <div className=\"m2-header-meta\">\n <span className=\"m2-engine-badge\">FM2/FTE5</span>\n <span style={{ fontSize: 10, opacity: 0.5, fontWeight: 700 }}>\n NEHONIX FCE\n </span>\n </div>\n </div>\n </div>\n <div className=\"m2-controls\">\n <div\n className=\"m2-view-switcher\"\n style={{ display: \"flex\", gap: 8, marginRight: 16 }}\n >\n <button\n className={`view-toggle-btn ${viewMode === \"live\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"live\")}\n >\n <Network size={16} /> Live Graph\n </button>\n <button\n className={`view-toggle-btn ${viewMode === \"genealogy\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"genealogy\")}\n >\n <GitBranch size={16} /> Genealogy\n </button>\n </div>\n <div className=\"m2-search-wrapper\">\n <Search className=\"m2-search-icon\" size={18} />\n <input\n type=\"text\"\n className=\"m2-search-input\"\n placeholder=\"Search flows, actors or data patterns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <div className=\"m2-action-btns\">\n <button\n className=\"m2-icon-btn\"\n title=\"Refresh\"\n onClick={() => window.location.reload()}\n >\n <RefreshCcw size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Minimize\"\n style={{color: \"blue\"}}\n\n onClick={(e) => {\n e.stopPropagation();\n setIsMinimized(true);\n setIsOpen(false);\n }}\n >\n <Minimize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Fullscreen\"\n onClick={() => {\n if (!document.fullscreenElement)\n document.documentElement.requestFullscreen();\n else document.exitFullscreen();\n }}\n >\n <Maximize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Toggle Ledger\"\n onClick={() => setIsLedgerVisible(!isLedgerVisible)}\n >\n {isLedgerVisible ? (\n <PanelRightClose size={20} />\n ) : (\n <PanelRight size={20} />\n )}\n </button>\n <button\n className=\"m2-icon-btn m2-close-btn force-visible\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n title=\"Close\"\n >\n <X size={24} />\n </button>\n </div>\n </div>\n </header>\n\n <div className=\"m2-layout\">\n <MMapSidebar\n filteredFlows={filteredFlows}\n selectedFlow={selectedFlow}\n setSelectedFlow={setSelectedFlow}\n activeFlows={activeFlows}\n />\n <main className=\"m2-canvas\">\n {viewMode === \"live\" ? (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineType={ConnectionLineType.Bezier}\n onNodeClick={(_, node) => {\n if (node.type === \"flow\")\n setOverlayFlow(node.id.replace(\"flow-\", \"\"));\n }}\n fitView\n colorMode=\"dark\"\n >\n <Background color=\"#1e293b\" gap={20} />{\" \"}\n <Controls showInteractive={false} />\n </ReactFlow>\n ) : (\n <FlowGenealogy\n snapshot={snapshot}\n onSelectFlow={setOverlayFlow}\n />\n )}\n </main>\n <MMapLedger\n snapshot={snapshot}\n selectedFlow={selectedFlow}\n isLedgerVisible={isLedgerVisible}\n />\n </div>\n\n <AnimatePresence>\n {overlayFlow && (\n <motion.div\n className=\"m2-flow-overlay-backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setOverlayFlow(null)}\n >\n <div\n className=\"m2-flow-overlay\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"m2-overlay-header\">\n <div className=\"m2-overlay-title\">\n <Database color=\"#00d4ff\" size={24} />\n <h2>{overlayFlow} Activity</h2>\n </div>\n <button\n className=\"m2-icon-btn m2-close-btn\"\n onClick={() => setOverlayFlow(null)}\n >\n <X size={20} />\n </button>\n </div>\n <div className=\"m2-overlay-content\">\n {snapshot[overlayFlow].meta.traces.length === 0 ? (\n <div className=\"m2-empty-state\">\n <Activity size={48} className=\"m2-empty-icon\" />\n <h3>No Activity Detected</h3>\n <p>This flow hasn't emitted any events yet.</p>\n </div>\n ) : (\n <div className=\"m2-trace-list\">\n {[...snapshot[overlayFlow].meta.traces]\n .reverse()\n .map((trace, i) => (\n <div\n key={i}\n className={`m2-trace-card ${trace.type === \"reset\" ? \"reset\" : \"\"}`}\n >\n <div className=\"m2-trace-dot\" />\n <div className=\"m2-trace-header\">\n <span className=\"m2-trace-actor-lbl\">\n {trace.actor}\n </span>\n <span className=\"m2-trace-ts\">\n {new Date(trace.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"m2-trace-op-info\">\n <span className=\"m2-op-type\">{trace.type}</span>\n </div>\n <div className=\"m2-trace-data\">\n <pre className=\"m2-trace-json\">\n {JSON.stringify(trace.value, null, 2)}\n </pre>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </motion.div>\n );\n};\n"],"names":["FlowNode","ActorNode","ListenerNode","FiberEdge","useNodesState","useEdgesState","useState","useEffect","useRef","useMemo","_jsx","motion","_jsxs","Cpu","Network","GitBranch","Search","RefreshCcw","Minimize2","Maximize2","PanelRightClose","PanelRight","X","MMapSidebar","ReactFlow","ConnectionLineType","Background","Controls","FlowGenealogy","MMapLedger","AnimatePresence","Database","Activity"],"mappings":"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"}
|
package/dist/cjs/src/proxy.js
CHANGED
|
@@ -96,6 +96,16 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
96
96
|
};
|
|
97
97
|
if (prop === "__actions__")
|
|
98
98
|
return options.actions;
|
|
99
|
+
if (prop === "_undo")
|
|
100
|
+
return () => store.store.undo(key);
|
|
101
|
+
if (prop === "_redo")
|
|
102
|
+
return () => store.store.redo(key);
|
|
103
|
+
if (prop === "_canUndo")
|
|
104
|
+
return (store.store.getHistory(key)?.length || 0) > 1;
|
|
105
|
+
if (prop === "_canRedo")
|
|
106
|
+
return (store.store.getRedoStack(key)?.length || 0) > 0;
|
|
107
|
+
if (prop === "_history")
|
|
108
|
+
return store.store.getHistory(key);
|
|
99
109
|
// Handle plugin-provided operations (e.g., _persist)
|
|
100
110
|
const pluginOps = store.store.getPluginOps(key, options);
|
|
101
111
|
if (prop in pluginOps)
|
|
@@ -150,6 +160,26 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
150
160
|
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
151
161
|
update(liveVal / amount, "_divide");
|
|
152
162
|
};
|
|
163
|
+
case "_pow":
|
|
164
|
+
return (n) => update(Math.pow(currentVal, n), "_pow");
|
|
165
|
+
case "_sqrt":
|
|
166
|
+
return () => update(Math.sqrt(currentVal), "_sqrt");
|
|
167
|
+
case "_abs":
|
|
168
|
+
return () => update(Math.abs(currentVal), "_abs");
|
|
169
|
+
case "_round":
|
|
170
|
+
return () => update(Math.round(currentVal), "_round");
|
|
171
|
+
case "_floor":
|
|
172
|
+
return () => update(Math.floor(currentVal), "_floor");
|
|
173
|
+
case "_ceil":
|
|
174
|
+
return () => update(Math.ceil(currentVal), "_ceil");
|
|
175
|
+
case "_mod":
|
|
176
|
+
return (n) => update(currentVal % n, "_mod");
|
|
177
|
+
case "_clamp":
|
|
178
|
+
return (min, max) => update(Math.min(Math.max(currentVal, min), max), "_clamp");
|
|
179
|
+
case "_negate":
|
|
180
|
+
return () => update(-currentVal, "_negate");
|
|
181
|
+
case "_toPrecision":
|
|
182
|
+
return (p) => update(parseFloat(currentVal.toPrecision(p)), "_toPrecision");
|
|
153
183
|
}
|
|
154
184
|
}
|
|
155
185
|
// --- Array Operations (Optimized with minimal allocations) ---
|
|
@@ -206,6 +236,53 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
206
236
|
newArr[i + 1] = currentVal[i];
|
|
207
237
|
update(newArr, "_insertAt");
|
|
208
238
|
};
|
|
239
|
+
// --- New Ops (v4.8.0) ---
|
|
240
|
+
case "_splice":
|
|
241
|
+
return (s, d, ...items) => {
|
|
242
|
+
const next = [...currentVal];
|
|
243
|
+
next.splice(s, d, ...items);
|
|
244
|
+
update(next, "_splice");
|
|
245
|
+
};
|
|
246
|
+
case "_reverse":
|
|
247
|
+
return () => update([...currentVal].reverse(), "_reverse");
|
|
248
|
+
case "_sort":
|
|
249
|
+
return (fn) => update([...currentVal].sort(fn), "_sort");
|
|
250
|
+
case "_fill":
|
|
251
|
+
return (v, s, e) => {
|
|
252
|
+
const next = [...currentVal];
|
|
253
|
+
next.fill(v, s, e);
|
|
254
|
+
update(next, "_fill");
|
|
255
|
+
};
|
|
256
|
+
case "_concat":
|
|
257
|
+
return (other) => update(currentVal.concat(other), "_concat");
|
|
258
|
+
case "_uniq":
|
|
259
|
+
return () => update(Array.from(new Set(currentVal)), "_uniq");
|
|
260
|
+
case "_shuffle":
|
|
261
|
+
return () => {
|
|
262
|
+
const next = [...currentVal];
|
|
263
|
+
for (let i = next.length - 1; i > 0; i--) {
|
|
264
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
265
|
+
[next[i], next[j]] = [next[j], next[i]];
|
|
266
|
+
}
|
|
267
|
+
update(next, "_shuffle");
|
|
268
|
+
};
|
|
269
|
+
// Traversers that return a proxy to an item
|
|
270
|
+
case "_at":
|
|
271
|
+
return (i) => {
|
|
272
|
+
const idx = i < 0 ? currentVal.length + i : i;
|
|
273
|
+
return createDeepProxy(key, getCachedPath(path, idx.toString()), currentVal[idx], options);
|
|
274
|
+
};
|
|
275
|
+
case "_first":
|
|
276
|
+
return () => createDeepProxy(key, getCachedPath(path, "0"), currentVal[0], options);
|
|
277
|
+
case "_last":
|
|
278
|
+
return () => createDeepProxy(key, getCachedPath(path, (currentVal.length - 1).toString()), currentVal[currentVal.length - 1], options);
|
|
279
|
+
case "_findBy":
|
|
280
|
+
return (fn) => {
|
|
281
|
+
const idx = currentVal.findIndex(fn);
|
|
282
|
+
if (idx === -1)
|
|
283
|
+
return undefined;
|
|
284
|
+
return createDeepProxy(key, getCachedPath(path, idx.toString()), currentVal[idx], options);
|
|
285
|
+
};
|
|
209
286
|
}
|
|
210
287
|
}
|
|
211
288
|
// --- String Operations ---
|
|
@@ -221,6 +298,27 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
221
298
|
return () => update(currentVal.toLowerCase(), "_lowercase");
|
|
222
299
|
case "_trim":
|
|
223
300
|
return () => update(currentVal.trim(), "_trim");
|
|
301
|
+
// --- New Ops (v4.8.0) ---
|
|
302
|
+
case "_replace":
|
|
303
|
+
return (p, r) => update(currentVal.replace(p, r), "_replace");
|
|
304
|
+
case "_replaceAll":
|
|
305
|
+
return (p, r) => update(currentVal.replaceAll(p, r), "_replaceAll");
|
|
306
|
+
case "_substring":
|
|
307
|
+
return (s, e) => update(currentVal.substring(s, e), "_substring");
|
|
308
|
+
case "_slice":
|
|
309
|
+
return (s, e) => update(currentVal.slice(s, e), "_slice");
|
|
310
|
+
case "_capitalize":
|
|
311
|
+
return () => update(currentVal.charAt(0).toUpperCase() + currentVal.slice(1), "_capitalize");
|
|
312
|
+
case "_truncate":
|
|
313
|
+
return (l, s = "...") => update(currentVal.length > l
|
|
314
|
+
? currentVal.substring(0, l) + s
|
|
315
|
+
: currentVal, "_truncate");
|
|
316
|
+
case "_padEnd":
|
|
317
|
+
return (l, f) => update(currentVal.padEnd(l, f), "_padEnd");
|
|
318
|
+
case "_padStart":
|
|
319
|
+
return (l, f) => update(currentVal.padStart(l, f), "_padStart");
|
|
320
|
+
case "_repeat":
|
|
321
|
+
return (c) => update(currentVal.repeat(c), "_repeat");
|
|
224
322
|
}
|
|
225
323
|
}
|
|
226
324
|
// --- Boolean Operations ---
|
|
@@ -252,6 +350,40 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
252
350
|
update(next, "_delete");
|
|
253
351
|
};
|
|
254
352
|
}
|
|
353
|
+
// --- New Ops (v4.8.0) ---
|
|
354
|
+
if (prop === "_pick") {
|
|
355
|
+
return (keys) => {
|
|
356
|
+
const next = {};
|
|
357
|
+
keys.forEach((k) => {
|
|
358
|
+
if (k in currentVal)
|
|
359
|
+
next[k] = currentVal[k];
|
|
360
|
+
});
|
|
361
|
+
update(next, "_pick");
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
if (prop === "_omit") {
|
|
365
|
+
return (keys) => {
|
|
366
|
+
const next = { ...currentVal };
|
|
367
|
+
keys.forEach((k) => delete next[k]);
|
|
368
|
+
update(next, "_omit");
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
if (prop === "_defaults") {
|
|
372
|
+
return (d) => update({ ...d, ...currentVal }, "_defaults");
|
|
373
|
+
}
|
|
374
|
+
if (prop === "_clear")
|
|
375
|
+
return () => update({}, "_clear");
|
|
376
|
+
if (prop === "_clone")
|
|
377
|
+
return () => update({ ...currentVal }, "_clone");
|
|
378
|
+
if (prop === "_assign")
|
|
379
|
+
return (s) => update({ ...currentVal, ...s }, "_assign");
|
|
380
|
+
if (prop === "_mapValues") {
|
|
381
|
+
return (fn) => {
|
|
382
|
+
const next = {};
|
|
383
|
+
Object.keys(currentVal).forEach((k) => (next[k] = fn(currentVal[k], k)));
|
|
384
|
+
update(next, "_mapValues");
|
|
385
|
+
};
|
|
386
|
+
}
|
|
255
387
|
}
|
|
256
388
|
// Recursive step: create a new proxy for the child property
|
|
257
389
|
// Use cached path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":["store"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n case \"_pow\":\n return (n: number) => update(Math.pow(currentVal, n), \"_pow\");\n case \"_sqrt\":\n return () => update(Math.sqrt(currentVal), \"_sqrt\");\n case \"_abs\":\n return () => update(Math.abs(currentVal), \"_abs\");\n case \"_round\":\n return () => update(Math.round(currentVal), \"_round\");\n case \"_floor\":\n return () => update(Math.floor(currentVal), \"_floor\");\n case \"_ceil\":\n return () => update(Math.ceil(currentVal), \"_ceil\");\n case \"_mod\":\n return (n: number) => update(currentVal % n, \"_mod\");\n case \"_clamp\":\n return (min: number, max: number) =>\n update(Math.min(Math.max(currentVal, min), max), \"_clamp\");\n case \"_negate\":\n return () => update(-currentVal, \"_negate\");\n case \"_toPrecision\":\n return (p: number) =>\n update(parseFloat(currentVal.toPrecision(p)), \"_toPrecision\");\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n // --- New Ops (v4.8.0) ---\n case \"_splice\":\n return (s: number, d: number, ...items: any[]) => {\n const next = [...currentVal];\n next.splice(s, d, ...items);\n update(next, \"_splice\");\n };\n case \"_reverse\":\n return () => update([...currentVal].reverse(), \"_reverse\");\n case \"_sort\":\n return (fn: any) => update([...currentVal].sort(fn), \"_sort\");\n case \"_fill\":\n return (v: any, s?: number, e?: number) => {\n const next = [...currentVal];\n next.fill(v, s, e);\n update(next, \"_fill\");\n };\n case \"_concat\":\n return (other: any[]) =>\n update(currentVal.concat(other), \"_concat\");\n case \"_uniq\":\n return () => update(Array.from(new Set(currentVal)), \"_uniq\");\n case \"_shuffle\":\n return () => {\n const next = [...currentVal];\n for (let i = next.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [next[i], next[j]] = [next[j], next[i]];\n }\n update(next, \"_shuffle\");\n };\n // Traversers that return a proxy to an item\n case \"_at\":\n return (i: number) => {\n const idx = i < 0 ? currentVal.length + i : i;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n case \"_first\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, \"0\"),\n currentVal[0],\n options,\n );\n case \"_last\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, (currentVal.length - 1).toString()),\n currentVal[currentVal.length - 1],\n options,\n );\n case \"_findBy\":\n return (fn: (item: any, idx: number) => boolean) => {\n const idx = currentVal.findIndex(fn);\n if (idx === -1) return undefined;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n // --- New Ops (v4.8.0) ---\n case \"_replace\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replace(p, r), \"_replace\");\n case \"_replaceAll\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replaceAll(p, r), \"_replaceAll\");\n case \"_substring\":\n return (s: number, e?: number) =>\n update(currentVal.substring(s, e), \"_substring\");\n case \"_slice\":\n return (s: number, e?: number) =>\n update(currentVal.slice(s, e), \"_slice\");\n case \"_capitalize\":\n return () =>\n update(\n currentVal.charAt(0).toUpperCase() + currentVal.slice(1),\n \"_capitalize\",\n );\n case \"_truncate\":\n return (l: number, s = \"...\") =>\n update(\n currentVal.length > l\n ? currentVal.substring(0, l) + s\n : currentVal,\n \"_truncate\",\n );\n case \"_padEnd\":\n return (l: number, f?: string) =>\n update(currentVal.padEnd(l, f), \"_padEnd\");\n case \"_padStart\":\n return (l: number, f?: string) =>\n update(currentVal.padStart(l, f), \"_padStart\");\n case \"_repeat\":\n return (c: number) => update(currentVal.repeat(c), \"_repeat\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n // --- New Ops (v4.8.0) ---\n if (prop === \"_pick\") {\n return (keys: string[]) => {\n const next: any = {};\n keys.forEach((k) => {\n if (k in currentVal) next[k] = currentVal[k];\n });\n update(next, \"_pick\");\n };\n }\n if (prop === \"_omit\") {\n return (keys: string[]) => {\n const next = { ...currentVal };\n keys.forEach((k) => delete next[k]);\n update(next, \"_omit\");\n };\n }\n if (prop === \"_defaults\") {\n return (d: any) => update({ ...d, ...currentVal }, \"_defaults\");\n }\n if (prop === \"_clear\") return () => update({}, \"_clear\");\n if (prop === \"_clone\") return () => update({ ...currentVal }, \"_clone\");\n if (prop === \"_assign\")\n return (s: any) => update({ ...currentVal, ...s }, \"_assign\");\n if (prop === \"_mapValues\") {\n return (fn: any) => {\n const next: any = {};\n Object.keys(currentVal).forEach(\n (k) => (next[k] = fn(currentVal[k], k)),\n );\n update(next, \"_mapValues\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":["store"],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BiF;AAKjF;AACA,MAAM,SAAS,GAAG,IAAI,OAAO,EAAmC;AAEhE,SAAS,aAAa,CAAC,IAAc,EAAE,IAAY,EAAA;IACjD,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,KAAK,GAAG,IAAI,GAAG,EAAE;AACjB,QAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC5B;IAEA,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC;AACxB,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;IACzB;AACA,IAAA,OAAO,MAAM;AACf;AAEA;;;;;AAKG;AACG,SAAU,eAAe,CAC7B,GAAW,EACX,IAAc,EACd,UAAe,EACf,OAAyB,EAAA;;AAGzB,IAAA,MAAM,MAAM,GAAG,CACb,GAAQ,EACR,QAAiB,EACjB,YAAY,GAAG,KAAK,EACpB,EAAW,KACT;AACF,QAAA,IAAI;;;;;;AAMF,YAAA,MAAM,YAAY,GAAGA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC;AACnD,YAAAA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE;AACvB,gBAAA,GAAG,OAAO;AACV,gBAAA,KAAK,EAAE,QAAQ;gBACf,YAAY;AACZ,gBAAA,GAAG,EAAE,EAAE,IAAK,OAAe,CAAC,GAAG,IAAI,KAAK;AACxC,gBAAA,KAAK,EAAE,IAAI;AACL,aAAA,CAAC;QACX;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CACX,CAAA,iCAAA,EAAoC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,EACrD,KAAK,CACN;AACD,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAW,KAAI;QACvC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AAC9B,IAAA,CAAC;AAED,IAAA,OAAO,IAAI,KAAK,CAAC,MAAK,EAAE,CAAC,EAAE;QACzB,GAAG,CAAC,OAAY,EAAE,IAAS,EAAA;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,SAAS;;YAG9C,IAAI,IAAI,KAAK,MAAM;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,KAAK,MAAM;gBACjB,OAAO,CAAC,GAAQ,KAAI;oBAClB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;AAClC,gBAAA,CAAC;YACH,IAAI,IAAI,KAAK,QAAQ;gBACnB,OAAO,CAAC,GAAQ,KAAI;oBAClB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;AACrC,gBAAA,CAAC;YACH,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAQ,OAAe,CAAC,OAAO;YAC3D,IAAI,IAAI,KAAK,OAAO;gBAAE,OAAO,MAAMA,WAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAClD,IAAI,IAAI,KAAK,OAAO;gBAAE,OAAO,MAAMA,WAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAClD,IAAI,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,CAACA,WAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;YACxE,IAAI,IAAI,KAAK,UAAU;AACrB,gBAAA,OAAO,CAACA,WAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAOA,WAAK,CAAC,UAAU,CAAC,GAAG,CAAC;;YAGrD,MAAM,SAAS,GAAGA,WAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;YAClD,IAAI,IAAI,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS,CAAC,IAAI,CAAC;;AAG7C,YAAA,MAAM,OAAO,GAAG,OAAO,UAAU;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;;AAGzC,YAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;gBACxB,QAAQ,IAAI;AACV,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,CAAC,MAAM,GAAG,CAAC,KAAI;AACpB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAEA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACPA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,YAAY,CAAC;AACxC,wBAAA,CAAC;AACH,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,CAAC,MAAM,GAAG,CAAC,KAAI;AACpB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAEA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACPA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,YAAY,CAAC;AACxC,wBAAA,CAAC;AACH,oBAAA,KAAK,MAAM;wBACT,OAAO,CAAC,MAAc,KAAI;AACxB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAEA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACPA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC;AAClC,wBAAA,CAAC;AACH,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,MAAc,KAAI;AACxB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAEA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACPA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC;AACvC,wBAAA,CAAC;AACH,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,MAAc,KAAI;AACxB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAEA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACPA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC;AACvC,wBAAA,CAAC;AACH,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,MAAc,KAAI;4BACxB,IAAI,MAAM,KAAK,CAAC;AAAE,gCAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AACjE,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAEA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACPA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC;AACrC,wBAAA,CAAC;AACH,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;AAC/D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;AACrD,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;AACnD,oBAAA,KAAK,QAAQ;AACX,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;AACvD,oBAAA,KAAK,QAAQ;AACX,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;AACvD,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;AACrD,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,CAAC;AACtD,oBAAA,KAAK,QAAQ;wBACX,OAAO,CAAC,GAAW,EAAE,GAAW,KAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC9D,oBAAA,KAAK,SAAS;wBACZ,OAAO,MAAM,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC;AAC7C,oBAAA,KAAK,cAAc;AACjB,wBAAA,OAAO,CAAC,CAAS,KACf,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;;YAErE;;YAGA,IAAI,OAAO,EAAE;gBACX,QAAQ,IAAI;AACV,oBAAA,KAAK,OAAO;wBACV,OAAO,CAAC,IAAS,KAAI;;AAEnB,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACvD,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;AAClB,4BAAA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AACzB,wBAAA,CAAC;AACH,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;AACtD,oBAAA,KAAK,QAAQ;AACX,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AACpD,oBAAA,KAAK,UAAU;wBACb,OAAO,CAAC,IAAS,KAAI;;AAEnB,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACjC,4BAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;4BAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3D,4BAAA,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAC5B,wBAAA,CAAC;AACH,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,EAAO,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;AAC9D,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,EAAO,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AACxD,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,KAAa,KAAI;;AAEvB,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjC,IAAI,CAAC,GAAG,CAAC;AACT,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gCAC5B,IAAI,CAAC,KAAK,KAAK;oCAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;4BAC9C;AACA,4BAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7B,wBAAA,CAAC;AACH,oBAAA,KAAK,WAAW;AACd,wBAAA,OAAO,CAAC,KAAa,EAAE,IAAS,KAAI;AAClC,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACzD,4BAAA,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;4BACpB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC/D,4BAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7B,wBAAA,CAAC;;AAEH,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,GAAG,KAAY,KAAI;AAC/C,4BAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;4BAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;AAC3B,4BAAA,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;AACzB,wBAAA,CAAC;AACH,oBAAA,KAAK,UAAU;AACb,wBAAA,OAAO,MAAM,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;AAC5D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,EAAO,KAAK,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC/D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,CAAM,EAAE,CAAU,EAAE,CAAU,KAAI;AACxC,4BAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;4BAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClB,4BAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,wBAAA,CAAC;AACH,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,KAAY,KAClB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;AAC/C,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;AAC/D,oBAAA,KAAK,UAAU;AACb,wBAAA,OAAO,MAAK;AACV,4BAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;AAC5B,4BAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,gCAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC7C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;4BACzC;AACA,4BAAA,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1B,wBAAA,CAAC;;AAEH,oBAAA,KAAK,KAAK;wBACR,OAAO,CAAC,CAAS,KAAI;AACnB,4BAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;4BAC7C,OAAO,eAAe,CACpB,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EACnC,UAAU,CAAC,GAAG,CAAC,EACf,OAAO,CACR;AACH,wBAAA,CAAC;AACH,oBAAA,KAAK,QAAQ;wBACX,OAAO,MACL,eAAe,CACb,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,EACxB,UAAU,CAAC,CAAC,CAAC,EACb,OAAO,CACR;AACL,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MACL,eAAe,CACb,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EACvD,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EACjC,OAAO,CACR;AACL,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,EAAuC,KAAI;4BACjD,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;4BACpC,IAAI,GAAG,KAAK,EAAE;AAAE,gCAAA,OAAO,SAAS;4BAChC,OAAO,eAAe,CACpB,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EACnC,UAAU,CAAC,GAAG,CAAC,EACf,OAAO,CACR;AACH,wBAAA,CAAC;;YAEP;;AAGA,YAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;gBACxB,QAAQ,IAAI;AACV,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,GAAW,KAAK,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,SAAS,CAAC;AAC7D,oBAAA,KAAK,UAAU;AACb,wBAAA,OAAO,CAAC,GAAW,KAAK,MAAM,CAAC,GAAG,GAAG,UAAU,EAAE,UAAU,CAAC;AAC9D,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC;AAC7D,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC;AAC7D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC;;AAEjD,oBAAA,KAAK,UAAU;wBACb,OAAO,CAAC,CAAkB,EAAE,CAAS,KACnC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC;AAChD,oBAAA,KAAK,aAAa;wBAChB,OAAO,CAAC,CAAkB,EAAE,CAAS,KACnC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;AACtD,oBAAA,KAAK,YAAY;wBACf,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC;AACpD,oBAAA,KAAK,QAAQ;wBACX,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC5C,oBAAA,KAAK,aAAa;wBAChB,OAAO,MACL,MAAM,CACJ,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EACxD,aAAa,CACd;AACL,oBAAA,KAAK,WAAW;AACd,wBAAA,OAAO,CAAC,CAAS,EAAE,CAAC,GAAG,KAAK,KAC1B,MAAM,CACJ,UAAU,CAAC,MAAM,GAAG;8BAChB,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;AAC/B,8BAAE,UAAU,EACd,WAAW,CACZ;AACL,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC;AAC9C,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC;AAClD,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;;YAEnE;;AAGA,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,OAAO,MAAM,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC;gBAC7C;YACF;;YAGA,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE;AAC3D,gBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACrB,OAAO,CAAC,GAAQ,KAAI;;AAElB,wBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;AACjD,wBAAA,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1B,oBAAA,CAAC;gBACH;AACA,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,OAAO,CAAC,QAAgB,KAAI;;AAE1B,wBAAA,IAAI,EAAE,QAAQ,IAAI,UAAU,CAAC;4BAAE;wBAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;wBACpC,MAAM,IAAI,GAAQ,EAAE;AACpB,wBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;4BACpB,IAAI,CAAC,KAAK,QAAQ;gCAAE,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wBAC7C;AACA,wBAAA,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;AACzB,oBAAA,CAAC;gBACH;;AAEA,gBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;oBACpB,OAAO,CAAC,IAAc,KAAI;wBACxB,MAAM,IAAI,GAAQ,EAAE;AACpB,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;4BACjB,IAAI,CAAC,IAAI,UAAU;gCAAE,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC9C,wBAAA,CAAC,CAAC;AACF,wBAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,oBAAA,CAAC;gBACH;AACA,gBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;oBACpB,OAAO,CAAC,IAAc,KAAI;AACxB,wBAAA,MAAM,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE;AAC9B,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,wBAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,oBAAA,CAAC;gBACH;AACA,gBAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,oBAAA,OAAO,CAAC,CAAM,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC;gBACjE;gBACA,IAAI,IAAI,KAAK,QAAQ;oBAAE,OAAO,MAAM,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC;gBACxD,IAAI,IAAI,KAAK,QAAQ;AAAE,oBAAA,OAAO,MAAM,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,QAAQ,CAAC;gBACvE,IAAI,IAAI,KAAK,SAAS;AACpB,oBAAA,OAAO,CAAC,CAAM,KAAK,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;AAC/D,gBAAA,IAAI,IAAI,KAAK,YAAY,EAAE;oBACzB,OAAO,CAAC,EAAO,KAAI;wBACjB,MAAM,IAAI,GAAQ,EAAE;AACpB,wBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAC7B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACxC;AACD,wBAAA,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;AAC5B,oBAAA,CAAC;gBACH;YACF;;;YAIA,MAAM,OAAO,GACX,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK;AACpC,kBAAE,UAAU,CAAC,IAAI;kBACf,SAAS;YACf,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;YACzC,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,CAAC;AACD,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAA;AAC3B,YAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AACpC,gBAAA,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;YAC5B;AACA,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,4DAAA,EAA+D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAChF;QACH,CAAC;AACF,KAAA,CAAkC;AACrC;AAEA;;AAEG;SACa,SAAS,CAAC,GAAQ,EAAE,IAAc,EAAE,KAAU,EAAA;IAC5D,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD;AAEA,SAAS,kBAAkB,CACzB,GAAQ,EACR,IAAc,EACd,KAAU,EACV,KAAa,EAAA;AAEb,IAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AAEvC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAExB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAA,CAAE,CAAC;AAE7D,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;AAG9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;YAChE;iBAAO;AACL,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;YAC1C;QACF;AACA,QAAA,OAAO,MAAM;IACf;;AAGA,IAAA,MAAM,UAAU,GAAG,GAAG,IAAI,EAAE;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IACpC,MAAM,MAAM,GAAQ,EAAE;AAEtB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC;AACT,YAAA,GAAG,KAAK;AACN,kBAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC;AAC5D,kBAAE,UAAU,CAAC,GAAG,CAAC;IACvB;AAEA,IAAA,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,EAAE;AACzB,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;IACtE;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACH,SAAS,SAAS,CAAC,GAAQ,EAAE,IAAc,EAAA;IACzC,IAAI,OAAO,GAAG,GAAG;AACjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B;AACA,IAAA,OAAO,OAAO;AAChB;;;;;"}
|
|
@@ -26,7 +26,6 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
26
26
|
const [overlayFlow, setOverlayFlow] = useState(null);
|
|
27
27
|
const [searchQuery, setSearchQuery] = useState("");
|
|
28
28
|
const [isMinimized, setIsMinimized] = useState(false);
|
|
29
|
-
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
30
29
|
const [isLedgerVisible, setIsLedgerVisible] = useState(true);
|
|
31
30
|
const [viewMode, setViewMode] = useState("live");
|
|
32
31
|
useEffect(() => {
|
|
@@ -163,7 +162,7 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
163
162
|
}
|
|
164
163
|
});
|
|
165
164
|
// --- Node ACTORS (Left) ---
|
|
166
|
-
namedActors.forEach((actor,
|
|
165
|
+
namedActors.forEach((actor, _) => {
|
|
167
166
|
const actorId = `actor-${actor.label}-${key}`;
|
|
168
167
|
const isActorHot = isFlowHot && activity.actor === actor.label;
|
|
169
168
|
newNodes.push({
|