fractostate 4.3.0 → 4.3.2

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.
@@ -48,7 +48,7 @@ const FractoDevTools = ({ position = "left", initialOpen = false, expanded = fal
48
48
  const updateCount = () => {
49
49
  if (!isMountedRef.current)
50
50
  return;
51
- setFlowCount(store.getFlowCount());
51
+ setFlowCount(Object.keys(store.getDebugSnapshot()).length);
52
52
  };
53
53
  updateCount();
54
54
  return store.subscribeGlobal(updateCount);
@@ -56,23 +56,14 @@ const FractoDevTools = ({ position = "left", initialOpen = false, expanded = fal
56
56
  useEffect(() => {
57
57
  if (!isOpen && !showMentalMap && !showPluginManager)
58
58
  return;
59
- let timer;
59
+ setSnapshot(store.getDebugSnapshot());
60
60
  const unsub = store.subscribeGlobal(() => {
61
61
  if (!isMountedRef.current)
62
62
  return;
63
- // Debounce the snapshot update to avoid freezing during high-frequency changes
64
- if (timer)
65
- clearTimeout(timer);
66
- timer = setTimeout(() => {
67
- setSnapshot(store.getDebugSnapshot());
68
- setLastUpdate(Date.now());
69
- }, 100); // 100ms debounce
63
+ setSnapshot(store.getDebugSnapshot());
64
+ setLastUpdate(Date.now());
70
65
  });
71
- return () => {
72
- unsub();
73
- if (timer)
74
- clearTimeout(timer);
75
- };
66
+ return unsub;
76
67
  }, [isOpen, showMentalMap, showPluginManager]);
77
68
  useEffect(() => {
78
69
  if (!isInitialized && Object.keys(snapshot).length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"FractoDevTools.js","sources":["../../../../src/devtools/FractoDevTools.tsx"],"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 { useState, useEffect, useMemo, useRef, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { store } from \"../store\";\nimport \"./FractoDevTools.css\";\nimport \"./MentalMap.css\";\nimport type { FractoDevToolsProps, ViewMode } from \"./FDevT\";\nimport { MentalMap } from \"./MentalMap\";\nimport { PluginManager } from \"./PluginManager\";\nimport {\n ChevronRight,\n ChevronLeft,\n ChevronDown,\n RotateCcw,\n Zap,\n Activity,\n History,\n ArrowDownToLine,\n ArrowUpToLine,\n X,\n Maximize2,\n Minimize2,\n Monitor,\n Database,\n} from \"lucide-react\";\n\nexport const FractoDevTools = ({\n position = \"left\",\n initialOpen = false,\n expanded = false,\n trafficLightsMode = \"indicators\",\n controlsPosition = \"right\",\n maximizeMode = \"overlay\",\n}: FractoDevToolsProps) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const [isMaximized, setIsMaximized] = useState(false);\n const [showMentalMap, setShowMentalMap] = useState(false);\n const [showPluginManager, setShowPluginManager] = useState(false);\n const [snapshot, setSnapshot] = useState<\n Record<string, { value: any; meta: any }>\n >({});\n const [isInitialized, setIsInitialized] = useState(false);\n const [lastUpdate, setLastUpdate] = useState(0);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [viewMode, setViewMode] = useState<ViewMode>(\"all\");\n const [collapsedFlows, setCollapsedFlows] = useState<Set<string>>(new Set());\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const [flowCount, setFlowCount] = useState(0);\n const [mentalMapSide, setMentalMapSide] = useState<\"left\" | \"right\">(\n position,\n );\n\n // Dragging state\n const [coords, setCoords] = useState({ x: 20, y: 20 });\n const [isDragging, setIsDragging] = useState(false);\n\n // Indicators state\n const [activeIndicators, setActiveIndicators] = useState({\n red: false,\n yellow: false,\n green: false,\n });\n\n // Refs to manage pending indicator updates\n const indicatorTimeoutsRef = useRef<Map<string, NodeJS.Timeout>>(new Map());\n const isMountedRef = useRef(true);\n\n // Cleanup on unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n // Clear all pending timeouts\n indicatorTimeoutsRef.current.forEach((timeout) => clearTimeout(timeout));\n indicatorTimeoutsRef.current.clear();\n };\n }, []);\n\n useEffect(() => {\n const updateCount = () => {\n if (!isMountedRef.current) return;\n setFlowCount(store.getFlowCount());\n };\n updateCount();\n return store.subscribeGlobal(updateCount);\n }, []);\n\n useEffect(() => {\n if (!isOpen && !showMentalMap && !showPluginManager) return;\n\n let timer: any;\n const unsub = store.subscribeGlobal(() => {\n if (!isMountedRef.current) return;\n\n // Debounce the snapshot update to avoid freezing during high-frequency changes\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n setSnapshot(store.getDebugSnapshot());\n setLastUpdate(Date.now());\n }, 100); // 100ms debounce\n });\n\n return () => {\n unsub();\n if (timer) clearTimeout(timer);\n };\n }, [isOpen, showMentalMap, showPluginManager]);\n\n useEffect(() => {\n if (!isInitialized && Object.keys(snapshot).length > 0) {\n if (!expanded) {\n setCollapsedFlows(new Set(Object.keys(snapshot)));\n }\n setIsInitialized(true);\n }\n }, [snapshot, expanded, isInitialized]);\n\n // Optimized indicator effect - prevents setState during render\n useEffect(() => {\n if (trafficLightsMode !== \"indicators\") return;\n\n const unsub = store.subscribeEvents((event) => {\n let color: \"yellow\" | \"red\" | null = null;\n if (\n event.type === \"write\" ||\n event.type === \"redo\" ||\n event.type === \"read\"\n ) {\n color = \"yellow\";\n }\n if (event.type === \"reset\" || event.type === \"undo\") {\n color = \"red\";\n }\n\n if (color) {\n // Clear any existing timeout for this color\n const existingTimeout = indicatorTimeoutsRef.current.get(color);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n }\n\n // Use requestAnimationFrame to defer state updates outside render cycle\n requestAnimationFrame(() => {\n if (!isMountedRef.current) return;\n\n setActiveIndicators((prev) => ({ ...prev, [color!]: true }));\n\n const deactivateTimeout = setTimeout(() => {\n if (!isMountedRef.current) return;\n setActiveIndicators((prev) => ({ ...prev, [color!]: false }));\n indicatorTimeoutsRef.current.delete(color!);\n }, 150);\n\n indicatorTimeoutsRef.current.set(color!, deactivateTimeout);\n });\n }\n });\n\n return () => {\n unsub();\n // Cleanup timeouts on unmount\n indicatorTimeoutsRef.current.forEach((timeout) => clearTimeout(timeout));\n indicatorTimeoutsRef.current.clear();\n };\n }, [trafficLightsMode]);\n\n // Handle maximization logic\n const toggleMaximize = () => {\n if (maximizeMode === \"fullscreen\") {\n if (!isMaximized) {\n document.documentElement.requestFullscreen().catch((err) => {\n console.warn(\"[FractoDevTools] Fullscreen denied:\", err.message);\n setIsMaximized(true); // Fallback to overlay\n });\n } else {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n setIsMaximized(false);\n }\n }\n } else {\n setIsMaximized(!isMaximized);\n }\n };\n\n useEffect(() => {\n const handleFsChange = () => setIsMaximized(!!document.fullscreenElement);\n document.addEventListener(\"fullscreenchange\", handleFsChange);\n return () =>\n document.removeEventListener(\"fullscreenchange\", handleFsChange);\n }, []);\n\n // Escape key handler\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (showMentalMap) {\n setShowMentalMap(false);\n return;\n }\n if (isMaximized) {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n setIsMaximized(false);\n }\n }\n }\n };\n window.addEventListener(\"keydown\", handleEsc);\n return () => window.removeEventListener(\"keydown\", handleEsc);\n }, [isMaximized, showMentalMap]);\n\n const filteredEntries = useMemo(() => {\n let entries = Object.entries(snapshot);\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n entries = entries.filter(([key, data]) => {\n const keyMatch = key.toLowerCase().includes(query);\n const valueMatch = JSON.stringify(data.value)\n .toLowerCase()\n .includes(query);\n return keyMatch || valueMatch;\n });\n }\n\n if (viewMode !== \"all\") {\n entries = entries.filter(([_, data]) => {\n const value = data.value;\n if (viewMode === \"objects\") {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n }\n if (viewMode === \"arrays\") {\n return Array.isArray(value);\n }\n if (viewMode === \"primitives\") {\n return typeof value !== \"object\" || value === null;\n }\n return true;\n });\n }\n\n return entries;\n }, [snapshot, searchQuery, viewMode]);\n\n const stats = useMemo(() => {\n const entries = Object.values(snapshot);\n return {\n total: entries.length,\n objects: entries.filter(\n (d) =>\n typeof d.value === \"object\" &&\n d.value !== null &&\n !Array.isArray(d.value),\n ).length,\n arrays: entries.filter((d) => Array.isArray(d.value)).length,\n primitives: entries.filter(\n (d) => typeof d.value !== \"object\" || d.value === null,\n ).length,\n };\n }, [snapshot]);\n\n const isGlobalDirty = useMemo(() => {\n return Object.values(snapshot).some((d) => d.meta.isDirty);\n }, [snapshot]);\n\n const toggleCollapse = (key: string) => {\n setCollapsedFlows((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const collapseAll = () => {\n const keys = Object.keys(snapshot);\n setCollapsedFlows(new Set(keys));\n };\n\n const expandAll = () => {\n setCollapsedFlows(new Set());\n };\n\n const handleResetAll = () => {\n if (!isGlobalDirty) return;\n if (\n confirm(\n \"Are you sure you want to reset ALL flows to their initial state?\",\n )\n ) {\n store.resetAll();\n }\n };\n\n const handleResetFlow = (key: string, isDirty: boolean) => {\n if (!isDirty) return;\n store.reset(key);\n };\n\n const handleCopy = (key: string, value: any) => {\n navigator.clipboard.writeText(JSON.stringify(value, null, 2));\n setCopiedKey(key);\n setTimeout(() => {\n if (isMountedRef.current) {\n setCopiedKey(null);\n }\n }, 2000);\n };\n\n const getValueType = (value: any): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n if (typeof value === \"object\")\n return `object{${Object.keys(value).length}}`;\n return typeof value;\n };\n\n // Drag logic\n const handleMouseDown = (e: React.MouseEvent) => {\n setIsDragging(false);\n const startX = e.clientX;\n const startY = e.clientY;\n const initialCoords = { ...coords };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (\n Math.abs(moveEvent.clientX - startX) > 5 ||\n Math.abs(moveEvent.clientY - startY) > 5\n ) {\n setIsDragging(true);\n }\n\n const dx =\n position === \"left\"\n ? moveEvent.clientX - startX\n : startX - moveEvent.clientX;\n const dy = startY - moveEvent.clientY;\n\n setCoords({\n x: Math.max(0, initialCoords.x + dx),\n y: Math.max(0, initialCoords.y + dy),\n });\n };\n\n const onMouseUp = () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n };\n\n const positionStyle: React.CSSProperties = {\n [position]: `${coords.x}px`,\n bottom: `${coords.y}px`,\n };\n\n // Stable handler for minimize change.\n // We ensure the main panel stays closed when Mental Map is active/minimized.\n const handleMinimizeChange = useCallback((_min: boolean) => {\n setIsOpen(false);\n }, []);\n\n const mentalMapPortal =\n showMentalMap &&\n createPortal(\n <MentalMap\n snapshot={snapshot}\n onClose={() => {\n setShowMentalMap(false);\n setIsOpen(true);\n }}\n onMinimizeChange={handleMinimizeChange}\n minimizedSide={mentalMapSide}\n setIsOpen={setIsOpen}\n />,\n document.body,\n );\n\n const buttonContent = (\n <button\n onMouseDown={handleMouseDown}\n onClick={() => !isDragging && setIsOpen(true)}\n className={`fracto-devtools-button position-${position}`}\n style={{ ...positionStyle, cursor: isDragging ? \"grabbing\" : \"grab\" }}\n title=\"Open FractoState DevTools (Draggable)\"\n >\n F\n {flowCount > 0 && (\n <span className=\"fracto-devtools-badge-count\">{flowCount}</span>\n )}\n </button>\n );\n\n const panelContent = (\n <div\n className={`fracto-devtools-panel position-${position} ${isMaximized ? \"is-maximized\" : \"\"}`}\n style={isMaximized ? {} : positionStyle}\n >\n <div\n className={`fracto-devtools-header mode-${trafficLightsMode} controls-${controlsPosition}`}\n >\n {trafficLightsMode === \"controls\" && (\n <div className=\"fracto-devtools-window-controls\">\n <button\n className=\"fracto-devtools-dot red\"\n onClick={() => setIsOpen(false)}\n title=\"Close Inspector\"\n />\n <button\n className=\"fracto-devtools-dot yellow\"\n onClick={collapseAll}\n title=\"Collapse All\"\n />\n <button\n className=\"fracto-devtools-dot green\"\n onClick={expandAll}\n title=\"Expand All\"\n />\n <button\n className=\"fracto-devtools-dot blue\"\n onClick={toggleMaximize}\n title={isMaximized ? \"Restore\" : \"Maximize\"}\n />\n </div>\n )}\n\n <div className=\"fracto-devtools-header-content\">\n <div\n className={`fracto-devtools-logo ${lastUpdate ? \"pulse\" : \"\"}`}\n key={lastUpdate}\n >\n F\n </div>\n <div>\n <div className=\"fracto-devtools-title\">\n Fracto<span className=\"fracto-devtools-title-state\">State</span>\n </div>\n <div className=\"fracto-devtools-subtitle\">Advanced Inspector</div>\n </div>\n </div>\n\n {trafficLightsMode === \"indicators\" && (\n <div className=\"fracto-devtools-window-indicators\">\n <div\n className={`fracto-devtools-dot red ${activeIndicators.red ? \"active\" : \"\"}`}\n title=\"State Reset/Undo\"\n />\n <div\n className={`fracto-devtools-dot yellow ${activeIndicators.yellow ? \"active\" : \"\"}`}\n title=\"State Activity (Read/Write)\"\n />\n <div\n className={`fracto-devtools-dot green ${flowCount > 0 ? \"active\" : \"\"}`}\n title={\n flowCount > 0\n ? \"Engine Online: Flows Active\"\n : \"Engine Standby: No Flows\"\n }\n />\n <button\n className=\"fracto-devtools-max-minimal\"\n onClick={toggleMaximize}\n title={isMaximized ? \"Minimize\" : \"Maximize\"}\n >\n {isMaximized ? (\n <Minimize2 size={12} strokeWidth={2.5} />\n ) : (\n <Maximize2 size={12} strokeWidth={2.5} />\n )}\n </button>\n <button\n className=\"fracto-devtools-close-minimal\"\n onClick={() => setIsOpen(false)}\n title=\"Close\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n {/* <button\n className=\"fracto-devtools-close-minimal\"\n onClick={() => {\n // setIsOpen(false);\n setShowMentalMap(false);\n }}\n title=\"Close\"\n >\n <X color=\"blue\" size={14} strokeWidth={2.5} />\n </button> */}\n </div>\n )}\n </div>\n\n <div className=\"fracto-devtools-toolbar\">\n <div className=\"fracto-devtools-search-container\">\n <span className=\"fracto-devtools-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"fracto-devtools-search\"\n placeholder=\"Search flows...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n className=\"fracto-devtools-clear-search\"\n onClick={() => setSearchQuery(\"\")}\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"fracto-devtools-filters\">\n <div className=\"fracto-devtools-filter-buttons\">\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"all\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"all\")}\n >\n All ({stats.total})\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"objects\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"objects\")}\n >\n Objects\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"arrays\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"arrays\")}\n >\n Arrays\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"primitives\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"primitives\")}\n >\n Primitives\n </button>\n </div>\n\n <div className=\"fracto-devtools-actions\">\n <button\n onClick={handleResetAll}\n className={`fracto-devtools-action-btn danger ${isGlobalDirty ? \"is-dirty\" : \"\"}`}\n title={\n isGlobalDirty\n ? \"Reset All Flows\"\n : \"All flows are at initial state\"\n }\n >\n <RotateCcw size={16} />\n </button>\n <button\n onClick={() =>\n setMentalMapSide((prev) => (prev === \"left\" ? \"right\" : \"left\"))\n }\n className=\"fracto-devtools-action-btn\"\n title={`Map Logo default: ${mentalMapSide}`}\n >\n {mentalMapSide === \"left\" ? (\n <ChevronLeft size={16} />\n ) : (\n <ChevronRight size={16} />\n )}\n </button>\n <button\n onClick={() => {\n setShowMentalMap(true);\n setIsOpen(false);\n }}\n className=\"fracto-devtools-action-btn\"\n style={{ fontSize: \"16px\" }}\n title=\"Mental Map & Traces\"\n >\n <Activity size={18} />\n </button>\n <button\n onClick={() => {\n setShowPluginManager(true);\n setIsOpen(false);\n }}\n className=\"fracto-devtools-action-btn\"\n style={{ fontSize: \"16px\" }}\n title=\"Plugin Architect\"\n >\n <Database size={18} />\n </button>\n <button\n onClick={collapseAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Collapse All\"\n >\n <ArrowDownToLine size={16} />\n </button>\n <button\n onClick={expandAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Expand All\"\n >\n <ArrowUpToLine size={16} />\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"fracto-devtools-content\">\n {filteredEntries.length === 0 ? (\n <div className=\"fracto-devtools-empty\">No flows detected</div>\n ) : (\n filteredEntries.map(([key, data]) => (\n <div\n key={key}\n className={`fracto-devtools-flow ${collapsedFlows.has(key) ? \"collapsed\" : \"\"}`}\n >\n <div\n className=\"fracto-devtools-flow-header\"\n onClick={() => toggleCollapse(key)}\n >\n <div className=\"fracto-devtools-flow-header-left\">\n <span className=\"fracto-devtools-flow-collapse-icon\">\n {collapsedFlows.has(key) ? (\n <ChevronRight size={14} />\n ) : (\n <ChevronDown size={14} />\n )}\n </span>\n <div className=\"fracto-devtools-flow-key\">{key}</div>\n {data.meta.plugins && data.meta.plugins.length > 0 && (\n <span\n className=\"fracto-devtools-meta-tag\"\n style={{\n background: \"rgba(255, 215, 0, 0.1)\",\n color: \"#ffd700\",\n animation: \"none\",\n }}\n title={`${data.meta.plugins.length} active plugins`}\n >\n <Zap size={10} />\n </span>\n )}\n {data.meta.isDebouncing && (\n <span\n className=\"fracto-devtools-meta-tag\"\n title=\"Sync pending\"\n >\n <History size={12} className=\"spinning\" />\n </span>\n )}\n </div>\n <div className=\"fracto-devtools-flow-actions\">\n <span className=\"fracto-devtools-flow-badge\">\n {getValueType(data.value)}\n </span>\n <button\n className={`fracto-devtools-flow-action ${data.meta.isDirty ? \"is-dirty\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleResetFlow(key, data.meta.isDirty);\n }}\n title={\n data.meta.isDirty\n ? \"Reset Flow\"\n : \"Flow is at initial state\"\n }\n >\n <RotateCcw size={14} />\n </button>\n <button\n className={`fracto-devtools-flow-action ${copiedKey === key ? \"copied\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(key, data.value);\n }}\n >\n {copiedKey === key ? (\n <Zap size={14} />\n ) : (\n <Monitor size={14} />\n )}\n </button>\n </div>\n </div>\n\n {!collapsedFlows.has(key) && (\n <div className=\"fracto-devtools-flow-expanded\">\n <div className=\"fracto-devtools-meta-grid\">\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Listeners:</span>\n <span className=\"value\">{data.meta.listeners}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">History:</span>\n <span className=\"value\">{data.meta.historySize}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Redo:</span>\n <span className=\"value\">{data.meta.redoSize}</span>\n </div>\n </div>\n <pre className=\"fracto-devtools-flow-content\">\n {JSON.stringify(data.value, null, 2)}\n </pre>\n </div>\n )}\n {copiedKey === key && (\n <div className=\"fracto-devtools-copy-toast\">Copied!</div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"fracto-devtools-footer\">\n <span>FractoState Engine v5</span>\n <span className=\"fracto-devtools-footer-count\">\n {filteredEntries.length} items\n </span>\n </div>\n </div>\n );\n\n const pluginManagerPortal =\n showPluginManager &&\n createPortal(\n <PluginManager\n snapshot={snapshot}\n onClose={() => {\n setShowPluginManager(false);\n setIsOpen(true);\n }}\n />,\n document.body,\n );\n\n return (\n <>\n {isOpen\n ? panelContent\n : showMentalMap || showPluginManager\n ? null\n : buttonContent}\n {mentalMapPortal}\n {pluginManagerPortal}\n </>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"FractoDevTools.js","sources":["../../../../src/devtools/FractoDevTools.tsx"],"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 { useState, useEffect, useMemo, useRef, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { store } from \"../store\";\nimport \"./FractoDevTools.css\";\nimport \"./MentalMap.css\";\nimport type { FractoDevToolsProps, ViewMode } from \"./FDevT\";\nimport { MentalMap } from \"./MentalMap\";\nimport { PluginManager } from \"./PluginManager\";\nimport {\n ChevronRight,\n ChevronLeft,\n ChevronDown,\n RotateCcw,\n Zap,\n Activity,\n History,\n ArrowDownToLine,\n ArrowUpToLine,\n X,\n Maximize2,\n Minimize2,\n Monitor,\n Database,\n} from \"lucide-react\";\n\nexport const FractoDevTools = ({\n position = \"left\",\n initialOpen = false,\n expanded = false,\n trafficLightsMode = \"indicators\",\n controlsPosition = \"right\",\n maximizeMode = \"overlay\",\n}: FractoDevToolsProps) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const [isMaximized, setIsMaximized] = useState(false);\n const [showMentalMap, setShowMentalMap] = useState(false);\n const [showPluginManager, setShowPluginManager] = useState(false);\n const [snapshot, setSnapshot] = useState<\n Record<string, { value: any; meta: any }>\n >({});\n const [isInitialized, setIsInitialized] = useState(false);\n const [lastUpdate, setLastUpdate] = useState(0);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [viewMode, setViewMode] = useState<ViewMode>(\"all\");\n const [collapsedFlows, setCollapsedFlows] = useState<Set<string>>(new Set());\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const [flowCount, setFlowCount] = useState(0);\n const [mentalMapSide, setMentalMapSide] = useState<\"left\" | \"right\">(\n position,\n );\n\n // Dragging state\n const [coords, setCoords] = useState({ x: 20, y: 20 });\n const [isDragging, setIsDragging] = useState(false);\n\n // Indicators state\n const [activeIndicators, setActiveIndicators] = useState({\n red: false,\n yellow: false,\n green: false,\n });\n\n // Refs to manage pending indicator updates\n const indicatorTimeoutsRef = useRef<Map<string, NodeJS.Timeout>>(new Map());\n const isMountedRef = useRef(true);\n\n // Cleanup on unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n // Clear all pending timeouts\n indicatorTimeoutsRef.current.forEach((timeout) => clearTimeout(timeout));\n indicatorTimeoutsRef.current.clear();\n };\n }, []);\n\n useEffect(() => {\n const updateCount = () => {\n if (!isMountedRef.current) return;\n setFlowCount(Object.keys(store.getDebugSnapshot()).length);\n };\n updateCount();\n return store.subscribeGlobal(updateCount);\n }, []);\n\n useEffect(() => {\n if (!isOpen && !showMentalMap && !showPluginManager) return;\n\n setSnapshot(store.getDebugSnapshot());\n const unsub = store.subscribeGlobal(() => {\n if (!isMountedRef.current) return;\n setSnapshot(store.getDebugSnapshot());\n setLastUpdate(Date.now());\n });\n\n return unsub;\n }, [isOpen, showMentalMap, showPluginManager]);\n\n useEffect(() => {\n if (!isInitialized && Object.keys(snapshot).length > 0) {\n if (!expanded) {\n setCollapsedFlows(new Set(Object.keys(snapshot)));\n }\n setIsInitialized(true);\n }\n }, [snapshot, expanded, isInitialized]);\n\n // Optimized indicator effect - prevents setState during render\n useEffect(() => {\n if (trafficLightsMode !== \"indicators\") return;\n\n const unsub = store.subscribeEvents((event) => {\n let color: \"yellow\" | \"red\" | null = null;\n if (\n event.type === \"write\" ||\n event.type === \"redo\" ||\n event.type === \"read\"\n ) {\n color = \"yellow\";\n }\n if (event.type === \"reset\" || event.type === \"undo\") {\n color = \"red\";\n }\n\n if (color) {\n // Clear any existing timeout for this color\n const existingTimeout = indicatorTimeoutsRef.current.get(color);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n }\n\n // Use requestAnimationFrame to defer state updates outside render cycle\n requestAnimationFrame(() => {\n if (!isMountedRef.current) return;\n\n setActiveIndicators((prev) => ({ ...prev, [color!]: true }));\n\n const deactivateTimeout = setTimeout(() => {\n if (!isMountedRef.current) return;\n setActiveIndicators((prev) => ({ ...prev, [color!]: false }));\n indicatorTimeoutsRef.current.delete(color!);\n }, 150);\n\n indicatorTimeoutsRef.current.set(color!, deactivateTimeout);\n });\n }\n });\n\n return () => {\n unsub();\n // Cleanup timeouts on unmount\n indicatorTimeoutsRef.current.forEach((timeout) => clearTimeout(timeout));\n indicatorTimeoutsRef.current.clear();\n };\n }, [trafficLightsMode]);\n\n // Handle maximization logic\n const toggleMaximize = () => {\n if (maximizeMode === \"fullscreen\") {\n if (!isMaximized) {\n document.documentElement.requestFullscreen().catch((err) => {\n console.warn(\"[FractoDevTools] Fullscreen denied:\", err.message);\n setIsMaximized(true); // Fallback to overlay\n });\n } else {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n setIsMaximized(false);\n }\n }\n } else {\n setIsMaximized(!isMaximized);\n }\n };\n\n useEffect(() => {\n const handleFsChange = () => setIsMaximized(!!document.fullscreenElement);\n document.addEventListener(\"fullscreenchange\", handleFsChange);\n return () =>\n document.removeEventListener(\"fullscreenchange\", handleFsChange);\n }, []);\n\n // Escape key handler\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (showMentalMap) {\n setShowMentalMap(false);\n return;\n }\n if (isMaximized) {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n setIsMaximized(false);\n }\n }\n }\n };\n window.addEventListener(\"keydown\", handleEsc);\n return () => window.removeEventListener(\"keydown\", handleEsc);\n }, [isMaximized, showMentalMap]);\n\n const filteredEntries = useMemo(() => {\n let entries = Object.entries(snapshot);\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n entries = entries.filter(([key, data]) => {\n const keyMatch = key.toLowerCase().includes(query);\n const valueMatch = JSON.stringify(data.value)\n .toLowerCase()\n .includes(query);\n return keyMatch || valueMatch;\n });\n }\n\n if (viewMode !== \"all\") {\n entries = entries.filter(([_, data]) => {\n const value = data.value;\n if (viewMode === \"objects\") {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n }\n if (viewMode === \"arrays\") {\n return Array.isArray(value);\n }\n if (viewMode === \"primitives\") {\n return typeof value !== \"object\" || value === null;\n }\n return true;\n });\n }\n\n return entries;\n }, [snapshot, searchQuery, viewMode]);\n\n const stats = useMemo(() => {\n const entries = Object.values(snapshot);\n return {\n total: entries.length,\n objects: entries.filter(\n (d) =>\n typeof d.value === \"object\" &&\n d.value !== null &&\n !Array.isArray(d.value),\n ).length,\n arrays: entries.filter((d) => Array.isArray(d.value)).length,\n primitives: entries.filter(\n (d) => typeof d.value !== \"object\" || d.value === null,\n ).length,\n };\n }, [snapshot]);\n\n const isGlobalDirty = useMemo(() => {\n return Object.values(snapshot).some((d) => d.meta.isDirty);\n }, [snapshot]);\n\n const toggleCollapse = (key: string) => {\n setCollapsedFlows((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const collapseAll = () => {\n const keys = Object.keys(snapshot);\n setCollapsedFlows(new Set(keys));\n };\n\n const expandAll = () => {\n setCollapsedFlows(new Set());\n };\n\n const handleResetAll = () => {\n if (!isGlobalDirty) return;\n if (\n confirm(\n \"Are you sure you want to reset ALL flows to their initial state?\",\n )\n ) {\n store.resetAll();\n }\n };\n\n const handleResetFlow = (key: string, isDirty: boolean) => {\n if (!isDirty) return;\n store.reset(key);\n };\n\n const handleCopy = (key: string, value: any) => {\n navigator.clipboard.writeText(JSON.stringify(value, null, 2));\n setCopiedKey(key);\n setTimeout(() => {\n if (isMountedRef.current) {\n setCopiedKey(null);\n }\n }, 2000);\n };\n\n const getValueType = (value: any): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n if (typeof value === \"object\")\n return `object{${Object.keys(value).length}}`;\n return typeof value;\n };\n\n // Drag logic\n const handleMouseDown = (e: React.MouseEvent) => {\n setIsDragging(false);\n const startX = e.clientX;\n const startY = e.clientY;\n const initialCoords = { ...coords };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (\n Math.abs(moveEvent.clientX - startX) > 5 ||\n Math.abs(moveEvent.clientY - startY) > 5\n ) {\n setIsDragging(true);\n }\n\n const dx =\n position === \"left\"\n ? moveEvent.clientX - startX\n : startX - moveEvent.clientX;\n const dy = startY - moveEvent.clientY;\n\n setCoords({\n x: Math.max(0, initialCoords.x + dx),\n y: Math.max(0, initialCoords.y + dy),\n });\n };\n\n const onMouseUp = () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n };\n\n const positionStyle: React.CSSProperties = {\n [position]: `${coords.x}px`,\n bottom: `${coords.y}px`,\n };\n\n // Stable handler for minimize change.\n // We ensure the main panel stays closed when Mental Map is active/minimized.\n const handleMinimizeChange = useCallback((_min: boolean) => {\n setIsOpen(false);\n }, []);\n\n const mentalMapPortal =\n showMentalMap &&\n createPortal(\n <MentalMap\n snapshot={snapshot}\n onClose={() => {\n setShowMentalMap(false);\n setIsOpen(true);\n }}\n onMinimizeChange={handleMinimizeChange}\n minimizedSide={mentalMapSide}\n setIsOpen={setIsOpen}\n />,\n document.body,\n );\n\n const buttonContent = (\n <button\n onMouseDown={handleMouseDown}\n onClick={() => !isDragging && setIsOpen(true)}\n className={`fracto-devtools-button position-${position}`}\n style={{ ...positionStyle, cursor: isDragging ? \"grabbing\" : \"grab\" }}\n title=\"Open FractoState DevTools (Draggable)\"\n >\n F\n {flowCount > 0 && (\n <span className=\"fracto-devtools-badge-count\">{flowCount}</span>\n )}\n </button>\n );\n\n const panelContent = (\n <div\n className={`fracto-devtools-panel position-${position} ${isMaximized ? \"is-maximized\" : \"\"}`}\n style={isMaximized ? {} : positionStyle}\n >\n <div\n className={`fracto-devtools-header mode-${trafficLightsMode} controls-${controlsPosition}`}\n >\n {trafficLightsMode === \"controls\" && (\n <div className=\"fracto-devtools-window-controls\">\n <button\n className=\"fracto-devtools-dot red\"\n onClick={() => setIsOpen(false)}\n title=\"Close Inspector\"\n />\n <button\n className=\"fracto-devtools-dot yellow\"\n onClick={collapseAll}\n title=\"Collapse All\"\n />\n <button\n className=\"fracto-devtools-dot green\"\n onClick={expandAll}\n title=\"Expand All\"\n />\n <button\n className=\"fracto-devtools-dot blue\"\n onClick={toggleMaximize}\n title={isMaximized ? \"Restore\" : \"Maximize\"}\n />\n </div>\n )}\n\n <div className=\"fracto-devtools-header-content\">\n <div\n className={`fracto-devtools-logo ${lastUpdate ? \"pulse\" : \"\"}`}\n key={lastUpdate}\n >\n F\n </div>\n <div>\n <div className=\"fracto-devtools-title\">\n Fracto<span className=\"fracto-devtools-title-state\">State</span>\n </div>\n <div className=\"fracto-devtools-subtitle\">Advanced Inspector</div>\n </div>\n </div>\n\n {trafficLightsMode === \"indicators\" && (\n <div className=\"fracto-devtools-window-indicators\">\n <div\n className={`fracto-devtools-dot red ${activeIndicators.red ? \"active\" : \"\"}`}\n title=\"State Reset/Undo\"\n />\n <div\n className={`fracto-devtools-dot yellow ${activeIndicators.yellow ? \"active\" : \"\"}`}\n title=\"State Activity (Read/Write)\"\n />\n <div\n className={`fracto-devtools-dot green ${flowCount > 0 ? \"active\" : \"\"}`}\n title={\n flowCount > 0\n ? \"Engine Online: Flows Active\"\n : \"Engine Standby: No Flows\"\n }\n />\n <button\n className=\"fracto-devtools-max-minimal\"\n onClick={toggleMaximize}\n title={isMaximized ? \"Minimize\" : \"Maximize\"}\n >\n {isMaximized ? (\n <Minimize2 size={12} strokeWidth={2.5} />\n ) : (\n <Maximize2 size={12} strokeWidth={2.5} />\n )}\n </button>\n <button\n className=\"fracto-devtools-close-minimal\"\n onClick={() => setIsOpen(false)}\n title=\"Close\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n {/* <button\n className=\"fracto-devtools-close-minimal\"\n onClick={() => {\n // setIsOpen(false);\n setShowMentalMap(false);\n }}\n title=\"Close\"\n >\n <X color=\"blue\" size={14} strokeWidth={2.5} />\n </button> */}\n </div>\n )}\n </div>\n\n <div className=\"fracto-devtools-toolbar\">\n <div className=\"fracto-devtools-search-container\">\n <span className=\"fracto-devtools-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"fracto-devtools-search\"\n placeholder=\"Search flows...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n className=\"fracto-devtools-clear-search\"\n onClick={() => setSearchQuery(\"\")}\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"fracto-devtools-filters\">\n <div className=\"fracto-devtools-filter-buttons\">\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"all\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"all\")}\n >\n All ({stats.total})\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"objects\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"objects\")}\n >\n Objects\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"arrays\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"arrays\")}\n >\n Arrays\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"primitives\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"primitives\")}\n >\n Primitives\n </button>\n </div>\n\n <div className=\"fracto-devtools-actions\">\n <button\n onClick={handleResetAll}\n className={`fracto-devtools-action-btn danger ${isGlobalDirty ? \"is-dirty\" : \"\"}`}\n title={\n isGlobalDirty\n ? \"Reset All Flows\"\n : \"All flows are at initial state\"\n }\n >\n <RotateCcw size={16} />\n </button>\n <button\n onClick={() =>\n setMentalMapSide((prev) => (prev === \"left\" ? \"right\" : \"left\"))\n }\n className=\"fracto-devtools-action-btn\"\n title={`Map Logo default: ${mentalMapSide}`}\n >\n {mentalMapSide === \"left\" ? (\n <ChevronLeft size={16} />\n ) : (\n <ChevronRight size={16} />\n )}\n </button>\n <button\n onClick={() => {\n setShowMentalMap(true);\n setIsOpen(false);\n }}\n className=\"fracto-devtools-action-btn\"\n style={{ fontSize: \"16px\" }}\n title=\"Mental Map & Traces\"\n >\n <Activity size={18} />\n </button>\n <button\n onClick={() => {\n setShowPluginManager(true);\n setIsOpen(false);\n }}\n className=\"fracto-devtools-action-btn\"\n style={{ fontSize: \"16px\" }}\n title=\"Plugin Architect\"\n >\n <Database size={18} />\n </button>\n <button\n onClick={collapseAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Collapse All\"\n >\n <ArrowDownToLine size={16} />\n </button>\n <button\n onClick={expandAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Expand All\"\n >\n <ArrowUpToLine size={16} />\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"fracto-devtools-content\">\n {filteredEntries.length === 0 ? (\n <div className=\"fracto-devtools-empty\">No flows detected</div>\n ) : (\n filteredEntries.map(([key, data]) => (\n <div\n key={key}\n className={`fracto-devtools-flow ${collapsedFlows.has(key) ? \"collapsed\" : \"\"}`}\n >\n <div\n className=\"fracto-devtools-flow-header\"\n onClick={() => toggleCollapse(key)}\n >\n <div className=\"fracto-devtools-flow-header-left\">\n <span className=\"fracto-devtools-flow-collapse-icon\">\n {collapsedFlows.has(key) ? (\n <ChevronRight size={14} />\n ) : (\n <ChevronDown size={14} />\n )}\n </span>\n <div className=\"fracto-devtools-flow-key\">{key}</div>\n {data.meta.plugins && data.meta.plugins.length > 0 && (\n <span\n className=\"fracto-devtools-meta-tag\"\n style={{\n background: \"rgba(255, 215, 0, 0.1)\",\n color: \"#ffd700\",\n animation: \"none\",\n }}\n title={`${data.meta.plugins.length} active plugins`}\n >\n <Zap size={10} />\n </span>\n )}\n {data.meta.isDebouncing && (\n <span\n className=\"fracto-devtools-meta-tag\"\n title=\"Sync pending\"\n >\n <History size={12} className=\"spinning\" />\n </span>\n )}\n </div>\n <div className=\"fracto-devtools-flow-actions\">\n <span className=\"fracto-devtools-flow-badge\">\n {getValueType(data.value)}\n </span>\n <button\n className={`fracto-devtools-flow-action ${data.meta.isDirty ? \"is-dirty\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleResetFlow(key, data.meta.isDirty);\n }}\n title={\n data.meta.isDirty\n ? \"Reset Flow\"\n : \"Flow is at initial state\"\n }\n >\n <RotateCcw size={14} />\n </button>\n <button\n className={`fracto-devtools-flow-action ${copiedKey === key ? \"copied\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(key, data.value);\n }}\n >\n {copiedKey === key ? (\n <Zap size={14} />\n ) : (\n <Monitor size={14} />\n )}\n </button>\n </div>\n </div>\n\n {!collapsedFlows.has(key) && (\n <div className=\"fracto-devtools-flow-expanded\">\n <div className=\"fracto-devtools-meta-grid\">\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Listeners:</span>\n <span className=\"value\">{data.meta.listeners}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">History:</span>\n <span className=\"value\">{data.meta.historySize}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Redo:</span>\n <span className=\"value\">{data.meta.redoSize}</span>\n </div>\n </div>\n <pre className=\"fracto-devtools-flow-content\">\n {JSON.stringify(data.value, null, 2)}\n </pre>\n </div>\n )}\n {copiedKey === key && (\n <div className=\"fracto-devtools-copy-toast\">Copied!</div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"fracto-devtools-footer\">\n <span>FractoState Engine v5</span>\n <span className=\"fracto-devtools-footer-count\">\n {filteredEntries.length} items\n </span>\n </div>\n </div>\n );\n\n const pluginManagerPortal =\n showPluginManager &&\n createPortal(\n <PluginManager\n snapshot={snapshot}\n onClose={() => {\n setShowPluginManager(false);\n setIsOpen(true);\n }}\n />,\n document.body,\n );\n\n return (\n <>\n {isOpen\n ? panelContent\n : showMentalMap || showPluginManager\n ? null\n : buttonContent}\n {mentalMapPortal}\n {pluginManagerPortal}\n </>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -101,27 +101,18 @@ class StorageAdapter {
101
101
  },
102
102
  onUpdate: ({ key: hkey, next, store }) => {
103
103
  const storageKey = $key || `fracto_flow_${hkey}`;
104
- // Debounce storage writes to avoid blocking the main thread during high-frequency updates
105
- const timerKey = `persist_${storageKey}`;
106
- if (store.debounceTimers.has(timerKey)) {
107
- clearTimeout(store.debounceTimers.get(timerKey));
104
+ const json = JSON.stringify(next);
105
+ if (type === "indexedDB") {
106
+ this.idbSet(storageKey, json);
108
107
  }
109
- const timer = setTimeout(() => {
110
- const json = JSON.stringify(next);
111
- if (type === "indexedDB") {
112
- this.idbSet(storageKey, json);
113
- }
114
- else if (typeof window !== "undefined") {
115
- window[type].setItem(storageKey, json);
116
- }
117
- store.logPluginActivity?.(hkey, {
118
- plugin: "persist",
119
- action: "auto-save",
120
- description: `Automatically synced changes to ${type}`,
121
- });
122
- store.debounceTimers.delete(timerKey);
123
- }, 300); // 300ms debounce
124
- store.debounceTimers.set(timerKey, timer);
108
+ else if (typeof window !== "undefined") {
109
+ window[type].setItem(storageKey, json);
110
+ }
111
+ store.logPluginActivity?.(hkey, {
112
+ plugin: "persist",
113
+ action: "auto-save",
114
+ description: `Automatically synced changes to ${type}`,
115
+ });
125
116
  },
126
117
  getOps: ({ key: hkey, store }) => {
127
118
  const storageKey = $key || `fracto_flow_${hkey}`;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageAdapter.js","sources":["../../../../../src/plugins/storage/StorageAdapter.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 { FlowPlugin } from \"../../types\";\nimport { PersistOptions } from \"../types/pluginTypes\";\n\nexport class StorageAdapter {\n private IDB_NAME = \"FractoVaultDB\";\n private STORE_NAME = \"kvp\"; // kvp = key_value_pairs\n\n private getIDB() {\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.IDB_NAME, 1);\n request.onupgradeneeded = () =>\n request.result.createObjectStore(this.STORE_NAME);\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n }\n\n private async idbGet(key: string): Promise<any> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME)\n .objectStore(this.STORE_NAME)\n .get(key);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => resolve(null);\n });\n }\n\n private async idbSet(key: string, value: any): Promise<void> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME, \"readwrite\")\n .objectStore(this.STORE_NAME)\n .put(value, key);\n req.onsuccess = () => resolve();\n });\n }\n\n public persist(\n $key: string | undefined,\n type: PersistOptions[\"storage\"],\n ): FlowPlugin {\n if (!type) throw new Error(\"No storage type provided\");\n\n return {\n name: \"persist\",\n onHydrate: ({ key: hkey, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n\n // Notify engine of async task\n (store as any).__hydrating__?.add($key);\n\n const done = (val: any) => {\n (store as any).__hydrating__?.delete($key);\n if (val !== undefined) {\n (store as any).logPluginActivity?.(hkey, {\n plugin: \"persist\",\n action: \"hydrate\",\n description: `Auto-restored state from ${type}`,\n data: val,\n });\n }\n return val;\n };\n\n if (type === \"indexedDB\") {\n return this.idbGet(storageKey).then((data) =>\n done(data ? JSON.parse(data) : undefined),\n );\n }\n\n if (typeof window === \"undefined\") return done(undefined);\n const raw = window[type].getItem(storageKey);\n return done(raw ? JSON.parse(raw) : undefined);\n },\n\n onUpdate: ({ key: hkey, next, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n\n // Debounce storage writes to avoid blocking the main thread during high-frequency updates\n const timerKey = `persist_${storageKey}`;\n if ((store as any).debounceTimers.has(timerKey)) {\n clearTimeout((store as any).debounceTimers.get(timerKey));\n }\n\n const timer = setTimeout(() => {\n const json = JSON.stringify(next);\n if (type === \"indexedDB\") {\n this.idbSet(storageKey, json);\n } else if (typeof window !== \"undefined\") {\n window[type].setItem(storageKey, json);\n }\n\n (store as any).logPluginActivity?.(hkey, {\n plugin: \"persist\",\n action: \"auto-save\",\n description: `Automatically synced changes to ${type}`,\n });\n (store as any).debounceTimers.delete(timerKey);\n }, 300); // 300ms debounce\n\n (store as any).debounceTimers.set(timerKey, timer);\n },\n\n getOps: ({ key: hkey, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n return {\n clear: () => {\n if (type === \"indexedDB\") {\n this.IDB_NAME &&\n this.getIDB().then((db) => {\n db.transaction(this.STORE_NAME, \"readwrite\")\n .objectStore(this.STORE_NAME)\n .delete(storageKey);\n });\n } else if (typeof window !== \"undefined\") {\n window[type].removeItem(storageKey);\n }\n store.logPluginActivity(hkey, {\n plugin: \"persist\",\n action: \"clear\",\n description: `Cleared ${type} storage for key ${storageKey}`,\n });\n },\n update: () => {\n const current = store.get(hkey, undefined, { bypassClone: true });\n const json = JSON.stringify(current);\n if (type === \"indexedDB\") {\n this.idbSet(storageKey, json);\n } else if (typeof window !== \"undefined\") {\n window[type].setItem(storageKey, json);\n }\n store.logPluginActivity(hkey, {\n plugin: \"persist\",\n action: \"update\",\n description: `Manually pushed current state to ${type}`,\n data: current,\n });\n },\n refresh: async () => {\n let data: any;\n if (type === \"indexedDB\") {\n const raw = await this.idbGet(storageKey);\n data = raw ? JSON.parse(raw) : undefined;\n } else if (typeof window !== \"undefined\") {\n const raw = window[type].getItem(storageKey);\n data = raw ? JSON.parse(raw) : undefined;\n }\n if (data !== undefined) {\n store.set(hkey, data, { force: true, actor: \"persist_refresh\" });\n store.logPluginActivity(hkey, {\n plugin: \"persist\",\n action: \"refresh\",\n description: `Successfully restored state from ${type}`,\n data,\n });\n }\n },\n };\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageAdapter.js","sources":["../../../../../src/plugins/storage/StorageAdapter.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 { FlowPlugin } from \"../../types\";\nimport { PersistOptions } from \"../types/pluginTypes\";\n\nexport class StorageAdapter {\n private IDB_NAME = \"FractoVaultDB\";\n private STORE_NAME = \"kvp\"; // kvp = key_value_pairs\n\n private getIDB() {\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.IDB_NAME, 1);\n request.onupgradeneeded = () =>\n request.result.createObjectStore(this.STORE_NAME);\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n }\n\n private async idbGet(key: string): Promise<any> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME)\n .objectStore(this.STORE_NAME)\n .get(key);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => resolve(null);\n });\n }\n\n private async idbSet(key: string, value: any): Promise<void> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME, \"readwrite\")\n .objectStore(this.STORE_NAME)\n .put(value, key);\n req.onsuccess = () => resolve();\n });\n }\n\n public persist(\n $key: string | undefined,\n type: PersistOptions[\"storage\"],\n ): FlowPlugin {\n if (!type) throw new Error(\"No storage type provided\");\n\n return {\n name: \"persist\",\n onHydrate: ({ key: hkey, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n\n // Notify engine of async task\n (store as any).__hydrating__?.add($key);\n\n const done = (val: any) => {\n (store as any).__hydrating__?.delete($key);\n if (val !== undefined) {\n (store as any).logPluginActivity?.(hkey, {\n plugin: \"persist\",\n action: \"hydrate\",\n description: `Auto-restored state from ${type}`,\n data: val,\n });\n }\n return val;\n };\n\n if (type === \"indexedDB\") {\n return this.idbGet(storageKey).then((data) =>\n done(data ? JSON.parse(data) : undefined),\n );\n }\n\n if (typeof window === \"undefined\") return done(undefined);\n const raw = window[type].getItem(storageKey);\n return done(raw ? JSON.parse(raw) : undefined);\n },\n\n onUpdate: ({ key: hkey, next, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n const json = JSON.stringify(next);\n\n if (type === \"indexedDB\") {\n this.idbSet(storageKey, json);\n } else if (typeof window !== \"undefined\") {\n window[type].setItem(storageKey, json);\n }\n\n (store as any).logPluginActivity?.(hkey, {\n plugin: \"persist\",\n action: \"auto-save\",\n description: `Automatically synced changes to ${type}`,\n });\n },\n\n getOps: ({ key: hkey, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n return {\n clear: () => {\n if (type === \"indexedDB\") {\n this.IDB_NAME &&\n this.getIDB().then((db) => {\n db.transaction(this.STORE_NAME, \"readwrite\")\n .objectStore(this.STORE_NAME)\n .delete(storageKey);\n });\n } else if (typeof window !== \"undefined\") {\n window[type].removeItem(storageKey);\n }\n store.logPluginActivity(hkey, {\n plugin: \"persist\",\n action: \"clear\",\n description: `Cleared ${type} storage for key ${storageKey}`,\n });\n },\n update: () => {\n const current = store.get(hkey, undefined, { bypassClone: true });\n const json = JSON.stringify(current);\n if (type === \"indexedDB\") {\n this.idbSet(storageKey, json);\n } else if (typeof window !== \"undefined\") {\n window[type].setItem(storageKey, json);\n }\n store.logPluginActivity(hkey, {\n plugin: \"persist\",\n action: \"update\",\n description: `Manually pushed current state to ${type}`,\n data: current,\n });\n },\n refresh: async () => {\n let data: any;\n if (type === \"indexedDB\") {\n const raw = await this.idbGet(storageKey);\n data = raw ? JSON.parse(raw) : undefined;\n } else if (typeof window !== \"undefined\") {\n const raw = window[type].getItem(storageKey);\n data = raw ? JSON.parse(raw) : undefined;\n }\n if (data !== undefined) {\n store.set(hkey, data, { force: true, actor: \"persist_refresh\" });\n store.logPluginActivity(hkey, {\n plugin: \"persist\",\n action: \"refresh\",\n description: `Successfully restored state from ${type}`,\n data,\n });\n }\n },\n };\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -139,18 +139,6 @@ class MemoryVault {
139
139
  writable: true,
140
140
  value: new Map()
141
141
  });
142
- Object.defineProperty(this, "versions", {
143
- enumerable: true,
144
- configurable: true,
145
- writable: true,
146
- value: new Map()
147
- });
148
- Object.defineProperty(this, "snapshotCache", {
149
- enumerable: true,
150
- configurable: true,
151
- writable: true,
152
- value: new Map()
153
- });
154
142
  Object.defineProperty(this, "proxyCreator", {
155
143
  enumerable: true,
156
144
  configurable: true,
@@ -202,27 +190,16 @@ class MemoryVault {
202
190
  }
203
191
  }
204
192
  /**
205
- * Retrieves state from the vault.
206
- * Optimized with snapshot caching to avoid redundant deep cloning.
193
+ * Retrieves state from the vault. Initializes if a value is provided and the key is missing.
207
194
  */
208
195
  get(key, initialValue, options) {
196
+ // Fast path for existing keys
209
197
  if (this.vault.has(key)) {
210
198
  if (this.hasEventListeners)
211
199
  this.emitEvent("read", key);
212
200
  const val = this.vault.get(key);
213
- // Fast Path: Internal bypass for trusted proxies
214
- if (options?.bypassClone)
215
- return val;
216
- // Fast Path: Return cached snapshot if the version hasn't changed
217
- const currentVersion = this.versions.get(key) || 0;
218
- const cached = this.snapshotCache.get(key);
219
- if (cached && cached.v === currentVersion) {
220
- return cached.s;
221
- }
222
- // Slow Path: Clone and cache
223
- const cloned = deepClone(val);
224
- this.snapshotCache.set(key, { v: currentVersion, s: cloned });
225
- return cloned;
201
+ // BYPASS_CLONE is used internally by the proxy for performance during rapid updates
202
+ return options?.bypassClone ? val : deepClone(val);
226
203
  }
227
204
  if (initialValue === undefined)
228
205
  return undefined;
@@ -252,8 +229,6 @@ class MemoryVault {
252
229
  }
253
230
  }
254
231
  }
255
- // Initial Version
256
- this.versions.set(key, 1);
257
232
  this.vault.set(key, startingValue);
258
233
  this.initialValues.set(key, deepClone(startingValue));
259
234
  // Lazy initialization of history/redo
@@ -267,64 +242,48 @@ class MemoryVault {
267
242
  plugin.onInit?.({ key, initial: startingValue, store: this });
268
243
  }
269
244
  }
270
- // --- ULTRA-OPTIMIZED EFFECTS ENGINE ---
271
- if (options?.effects?.length && this.proxyCreator) {
272
- const v = this;
273
- let ops;
274
- // Lazy Setup: Only build ops if we actually run an effect
275
- const getOps = () => {
276
- if (ops)
277
- return ops;
278
- const boundActions = {};
279
- ops = {
280
- get self() {
281
- return v.proxyCreator(key, [], v.vault.get(key), {
282
- ...options,
283
- actions: boundActions,
284
- });
285
- },
286
- get state() {
287
- return v.vault.get(key);
288
- },
289
- };
290
- if (options.actions) {
291
- for (const [name, fn] of Object.entries(options.actions)) {
292
- boundActions[name] = (...args) => fn(...args)(ops);
293
- }
294
- }
295
- return ops;
245
+ // Handle Auto-Run Effects
246
+ if (options?.effects && this.proxyCreator) {
247
+ const vaultInstance = this;
248
+ const boundActions = {};
249
+ const dynamicOps = {
250
+ get self() {
251
+ return vaultInstance.proxyCreator(key, [], vaultInstance.vault.get(key), { ...options, actions: boundActions });
252
+ },
253
+ get state() {
254
+ return vaultInstance.vault.get(key);
255
+ },
296
256
  };
297
- const reactive = [];
298
- // Categorize and Run Initial
299
- for (const effect of options.effects) {
300
- if (!effect.deps) {
301
- // Static Effect: Run once and forget (ultra fast)
302
- effect.run(getOps());
303
- }
304
- else {
305
- // Reactive Effect: Initialize and track
306
- const initialDeps = effect.deps(startingValue);
307
- effect.run(getOps());
308
- reactive.push({
309
- prev: initialDeps,
310
- depsFn: effect.deps,
311
- run: effect.run,
312
- });
257
+ if (options.actions) {
258
+ for (const [name, fn] of Object.entries(options.actions)) {
259
+ boundActions[name] = (...args) => fn(...args)(dynamicOps);
313
260
  }
314
261
  }
315
- // Fast Path: Only subscribe if we have reactive effects
316
- if (reactive.length > 0) {
262
+ const effectStates = options.effects.map((effect) => {
263
+ const initialDeps = effect.deps
264
+ ? effect.deps(startingValue)
265
+ : undefined;
266
+ // Run immediately (Mount)
267
+ effect.run(dynamicOps);
268
+ return {
269
+ prevDeps: initialDeps,
270
+ depsFn: effect.deps,
271
+ run: effect.run,
272
+ };
273
+ });
274
+ // Subscribe for updates if explicit deps are provided
275
+ if (effectStates.some((e) => e.depsFn)) {
317
276
  this.subscribe(key, () => {
318
- const current = this.vault.get(key);
319
- for (let i = 0; i < reactive.length; i++) {
320
- const e = reactive[i];
321
- const next = e.depsFn(current);
322
- // Shallow comparison is sufficient and MUCH faster for deps arrays
323
- if (!shallowEqual(e.prev, next)) {
324
- e.prev = next;
325
- e.run(getOps());
277
+ const currentState = this.vault.get(key);
278
+ effectStates.forEach((e) => {
279
+ if (e.depsFn) {
280
+ const newDeps = e.depsFn(currentState);
281
+ if (!deepEqual(e.prevDeps, newDeps)) {
282
+ e.prevDeps = newDeps;
283
+ e.run(dynamicOps);
284
+ }
326
285
  }
327
- }
286
+ });
328
287
  });
329
288
  }
330
289
  }
@@ -412,8 +371,6 @@ class MemoryVault {
412
371
  */
413
372
  applySet(key, stateToSet, options) {
414
373
  this.vault.set(key, stateToSet);
415
- // Increment version to invalidate snapshot cache
416
- this.versions.set(key, (this.versions.get(key) || 0) + 1);
417
374
  // Only create history if timeTravel is enabled
418
375
  if (options.timeTravel) {
419
376
  let history = this.histories.get(key);
@@ -421,7 +378,7 @@ class MemoryVault {
421
378
  history = new CircularBuffer(100);
422
379
  this.histories.set(key, history);
423
380
  }
424
- history.push(stateToSet);
381
+ history.push(deepClone(stateToSet));
425
382
  let redo = this.redoStacks.get(key);
426
383
  if (!redo) {
427
384
  redo = [];
@@ -640,14 +597,9 @@ class MemoryVault {
640
597
  this.listeners.clear();
641
598
  this.histories.clear();
642
599
  this.redoStacks.clear();
643
- this.versions.clear();
644
- this.snapshotCache.clear();
645
600
  // Clear clone cache
646
601
  cacheSize = 0;
647
602
  }
648
- getFlowCount() {
649
- return this.vault.size;
650
- }
651
603
  }
652
604
  /**
653
605
  * Circular Buffer implementation for high-performance memory-efficient history.
@@ -799,23 +751,6 @@ function deepEqual(a, b) {
799
751
  }
800
752
  return true;
801
753
  }
802
- /**
803
- * Shallow equality check for dependency arrays
804
- */
805
- function shallowEqual(a, b) {
806
- if (a === b)
807
- return true;
808
- if (!a || !b)
809
- return false;
810
- const len = a.length;
811
- if (len !== b.length)
812
- return false;
813
- for (let i = 0; i < len; i++) {
814
- if (a[i] !== b[i])
815
- return false;
816
- }
817
- return true;
818
- }
819
754
  const store = new MemoryVault();
820
755
 
821
756
  export { store };