fractostate 4.3.2 → 4.3.3
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/index.js +5 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/src/devtools/FractoDevTools.js +3 -1
- package/dist/cjs/src/devtools/FractoDevTools.js.map +1 -1
- package/dist/cjs/src/devtools/MapUtils.js +3 -11
- package/dist/cjs/src/devtools/MapUtils.js.map +1 -1
- package/dist/cjs/src/devtools/MentalMap.css.js +1 -1
- package/dist/cjs/src/devtools/MentalMap.js +141 -80
- package/dist/cjs/src/devtools/MentalMap.js.map +1 -1
- package/dist/cjs/src/devtools/PluginManager.js +1 -1
- package/dist/cjs/src/devtools/PluginManager.js.map +1 -1
- package/dist/cjs/src/devtools/mmap/components/FlowGenealogy.js +99 -0
- package/dist/cjs/src/devtools/mmap/components/FlowGenealogy.js.map +1 -0
- package/dist/cjs/src/devtools/mmap/components/FlowNodes.js +14 -0
- package/dist/cjs/src/devtools/mmap/components/FlowNodes.js.map +1 -0
- package/dist/cjs/src/devtools/mmap/components/MMapLedger.js +22 -0
- package/dist/cjs/src/devtools/mmap/components/MMapLedger.js.map +1 -0
- package/dist/cjs/src/devtools/mmap/components/MMapSidebar.js +14 -0
- package/dist/cjs/src/devtools/mmap/components/MMapSidebar.js.map +1 -0
- package/dist/cjs/src/plugins/storage/StorageAdapter.js +38 -4
- package/dist/cjs/src/plugins/storage/StorageAdapter.js.map +1 -1
- package/dist/cjs/src/store.js +35 -13
- package/dist/cjs/src/store.js.map +1 -1
- package/dist/esm/index.js +5 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/devtools/FractoDevTools.js +3 -1
- package/dist/esm/src/devtools/FractoDevTools.js.map +1 -1
- package/dist/esm/src/devtools/MapUtils.js +5 -11
- package/dist/esm/src/devtools/MapUtils.js.map +1 -1
- package/dist/esm/src/devtools/MentalMap.css.js +1 -1
- package/dist/esm/src/devtools/MentalMap.js +141 -80
- package/dist/esm/src/devtools/MentalMap.js.map +1 -1
- package/dist/esm/src/devtools/PluginManager.js +2 -2
- package/dist/esm/src/devtools/PluginManager.js.map +1 -1
- package/dist/esm/src/devtools/mmap/components/FlowGenealogy.js +97 -0
- package/dist/esm/src/devtools/mmap/components/FlowGenealogy.js.map +1 -0
- package/dist/esm/src/devtools/mmap/components/FlowNodes.js +10 -0
- package/dist/esm/src/devtools/mmap/components/FlowNodes.js.map +1 -0
- package/dist/esm/src/devtools/mmap/components/MMapLedger.js +20 -0
- package/dist/esm/src/devtools/mmap/components/MMapLedger.js.map +1 -0
- package/dist/esm/src/devtools/mmap/components/MMapSidebar.js +12 -0
- package/dist/esm/src/devtools/mmap/components/MMapSidebar.js.map +1 -0
- package/dist/esm/src/plugins/storage/StorageAdapter.js +38 -4
- package/dist/esm/src/plugins/storage/StorageAdapter.js.map +1 -1
- package/dist/esm/src/store.js +35 -13
- package/dist/esm/src/store.js.map +1 -1
- package/dist/plugins.d.ts +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -46,8 +46,10 @@ function initFlow(flow) {
|
|
|
46
46
|
* Use this for computed values that shouldn't be manually modified.
|
|
47
47
|
*/
|
|
48
48
|
function defineDerived(source, selector, derivedKey) {
|
|
49
|
+
const key = derivedKey || `${source.key}_derived_${Date.now()}`;
|
|
50
|
+
store.store.setParent(key, source.key);
|
|
49
51
|
return {
|
|
50
|
-
key
|
|
52
|
+
key,
|
|
51
53
|
source,
|
|
52
54
|
selector,
|
|
53
55
|
};
|
|
@@ -134,10 +136,11 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
134
136
|
return isDerived ? keyOrDef.selector(raw) : raw;
|
|
135
137
|
});
|
|
136
138
|
React.useEffect(() => {
|
|
139
|
+
const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;
|
|
137
140
|
return store.store.subscribe(key, () => {
|
|
138
141
|
const raw = store.store.get(key, initialVal);
|
|
139
142
|
setState(isDerived ? keyOrDef.selector(raw) : raw);
|
|
140
|
-
},
|
|
143
|
+
}, { label });
|
|
141
144
|
}, [key, isDerived, flowOptions?.name, flowOptions?.actor]);
|
|
142
145
|
const toolbox = React.useMemo(() => {
|
|
143
146
|
if (isDerived)
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.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 { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A>(flow: FlowDefinition<T, A>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n return {\n key: derivedKey || `${source.key}_derived_${Date.now()}`,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<\n string,\n (...args: any[]) => (ops: FlowOpsObject<T, A>) => any\n >,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, A> & {\n actions: A;\n },\n): FlowDefinition<T, A>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options?: FlowOptions<T> & { actions?: A },\n): FlowDefinition<T, A> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A>(\n def: FlowDefinition<T, A>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A>(\n def: FlowDefinition<T, A>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n flowOptions?.name || flowOptions?.actor,\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.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 { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A>(flow: FlowDefinition<T, A>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<\n string,\n (...args: any[]) => (ops: FlowOpsObject<T, A>) => any\n >,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, A> & {\n actions: A;\n },\n): FlowDefinition<T, A>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options?: FlowOptions<T> & { actions?: A },\n): FlowDefinition<T, A> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A>(\n def: FlowDefinition<T, A>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A>(\n def: FlowDefinition<T, A>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BiF;AAcjF;AACAA,WAAK,CAAC,eAAe,CAACC,qBAAe,CAAC;AAItC;;;AAGG;AACG,SAAU,QAAQ,CAAO,IAA0B,EAAA;AACvD,IAAAD,WAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AACjD;AAEA;;;AAGG;SACa,aAAa,CAC3B,MAA8B,EAC9B,QAAyB,EACzB,UAAmB,EAAA;AAEnB,IAAA,MAAM,GAAG,GAAG,UAAU,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,GAAG,EAAE,EAAE;IAC/DA,WAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;IAChC,OAAO;QACL,GAAG;QACH,MAAM;QACN,QAAQ;KACT;AACH;SAoBgB,UAAU,CACxB,GAAW,EACX,OAAU,EACV,OAA0C,EAAA;IAE1C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAc,EAAE;AAClD;AAEA;;;AAGG;AACG,SAAU,OAAO,CACrB,GAAyB,EAAA;IAEzB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG;AAClD,IAAA,MAAM,KAAK,GAAGA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC;IAElD,MAAM,YAAY,GAAG,EAAS;AAC9B,IAAA,MAAM,UAAU,GAAwB;AACtC,QAAA,IAAI,IAAI,GAAA;AACN,YAAA,OAAOC,qBAAe,CAAO,GAAG,EAAE,EAAE,EAAED,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;AAC7D,gBAAA,GAAG,WAAW;AACd,gBAAA,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,IAAI,KAAK,GAAA;YACP,OAAOA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QAChC,CAAC;KACF;IAED,MAAM,OAAO,GAAI,GAAW,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO;IAEtE,IAAI,OAAO,EAAE;AACX,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC;QACzC;IACF;AAEA,IAAA,MAAM,OAAO,GAAyB;AACpC,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAMA,WAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,KAAK,EAAE,MAAMA,WAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,OAAO,EAAEA,WAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B,QAAQ,EAAEA,WAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1C,QAAQ,EAAEA,WAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5C,QAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;YACjB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAACA,WAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,YAAAA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,gBAAA,GAAG,WAAW;AACd,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;YACnB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAACA,WAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,YAAAA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,gBAAA,GAAG,WAAW;AACd,gBAAA,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,MAAMA,WAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9B,EAAE,EAAE,WAAW,IAAI,EAAE;QACrB,WAAW,EAAE,CAAC,CAACA,WAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;KAC7C;AAED,IAAA,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AACzB;SAmBgB,OAAO,CACrB,QAAa,EACb,OAAa,EACb,OAAa,EAAA;IAEb,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI,QAAQ;AACxE,IAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC,SAAS;IAE7E,MAAM,GAAG,GAAG;UACP,QAAgB,CAAC;AACpB,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACxB,QAAmB;IAC1B,MAAM,UAAU,GAAG;UACd,QAAgB,CAAC;AACpB,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACzB,OAAO;IACb,MAAM,WAAW,GAAG;AAClB,UAAE,EAAE,IAAK,QAAgB,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC;AAC5D,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACzB,OAAO;IAEb,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGE,cAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,GAAG,GAAGF,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC;AACnD,QAAA,OAAO,SAAS,GAAI,QAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG;AAC1D,IAAA,CAAC,CAAC;IAEFG,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK,IAAI,CAAA,QAAA,EAAW,GAAG,GAAG;AAC1E,QAAA,OAAOH,WAAK,CAAC,SAAS,CACpB,GAAG,EACH,MAAK;YACH,MAAM,GAAG,GAAGA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;AACtC,YAAA,QAAQ,CAAC,SAAS,GAAI,QAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC7D,QAAA,CAAC,EACD,EAAE,KAAK,EAAE,CACV;AACH,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAE3D,IAAA,MAAM,OAAO,GAAGI,aAAO,CAAC,MAAK;AAC3B,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,EAAE;QAExB,MAAM,YAAY,GAAG,EAAS;AAC9B,QAAA,MAAM,UAAU,GAA4B;AAC1C,YAAA,IAAI,IAAI,GAAA;AACN,gBAAA,OAAOH,qBAAe,CAAW,GAAG,EAAE,EAAE,EAAED,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;AACpE,oBAAA,GAAG,WAAW;AACd,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,IAAI,KAAK,GAAA;gBACP,OAAOA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;YACnC,CAAC;SACF;QAED,MAAM,OAAO,GAAI,QAAgB,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO;QAE3E,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChD,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC;YACzC;QACF;QAEA,OAAO;AACL,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,MAAMA,WAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5B,KAAK,EAAE,MAAMA,WAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,YAAA,OAAO,EAAEA,WAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC9B,QAAQ,EAAEA,WAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAC1C,QAAQ,EAAEA,WAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5C,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;gBACjB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAACA,WAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,gBAAAA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,oBAAA,GAAG,WAAW;AACd,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;gBACnB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAACA,WAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,gBAAAA,WAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,oBAAA,GAAG,WAAW;AACd,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,MAAMA,WAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B,EAAE,EAAE,WAAW,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC,CAACA,WAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;SAC7C;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAExC,IAAA,OAAO,CAAC,KAAK,EAAE,OAAO,CAAQ;AAChC;;;;;;;;"}
|
|
@@ -319,7 +319,9 @@ const FractoDevTools = ({ position = "left", initialOpen = false, expanded = fal
|
|
|
319
319
|
: "Flow is at initial state", children: jsxRuntime.jsx(lucideReact.RotateCcw, { size: 14 }) }), jsxRuntime.jsx("button", { className: `fracto-devtools-flow-action ${copiedKey === key ? "copied" : ""}`, onClick: (e) => {
|
|
320
320
|
e.stopPropagation();
|
|
321
321
|
handleCopy(key, data.value);
|
|
322
|
-
}, children: copiedKey === key ? (jsxRuntime.jsx(lucideReact.Zap, { size: 14 })) : (jsxRuntime.jsx(lucideReact.Monitor, { size: 14 })) })] })] }), !collapsedFlows.has(key) && (jsxRuntime.jsxs("div", { className: "fracto-devtools-flow-expanded", children: [jsxRuntime.jsxs("div", { className: "fracto-devtools-meta-grid", children: [jsxRuntime.jsxs("div", { className: "fracto-devtools-meta-item", children: [jsxRuntime.jsx("span", { className: "label", children: "Listeners:" }), jsxRuntime.jsx("span", { className: "value", children:
|
|
322
|
+
}, children: copiedKey === key ? (jsxRuntime.jsx(lucideReact.Zap, { size: 14 })) : (jsxRuntime.jsx(lucideReact.Monitor, { size: 14 })) })] })] }), !collapsedFlows.has(key) && (jsxRuntime.jsxs("div", { className: "fracto-devtools-flow-expanded", children: [jsxRuntime.jsxs("div", { className: "fracto-devtools-meta-grid", children: [jsxRuntime.jsxs("div", { className: "fracto-devtools-meta-item", children: [jsxRuntime.jsx("span", { className: "label", children: "Listeners:" }), jsxRuntime.jsx("span", { className: "value", children: Array.isArray(data.meta.listeners)
|
|
323
|
+
? data.meta.listeners.length
|
|
324
|
+
: data.meta.listeners })] }), jsxRuntime.jsxs("div", { className: "fracto-devtools-meta-item", children: [jsxRuntime.jsx("span", { className: "label", children: "History:" }), jsxRuntime.jsx("span", { className: "value", children: data.meta.historySize })] }), jsxRuntime.jsxs("div", { className: "fracto-devtools-meta-item", children: [jsxRuntime.jsx("span", { className: "label", children: "Redo:" }), jsxRuntime.jsx("span", { className: "value", children: data.meta.redoSize })] })] }), jsxRuntime.jsx("pre", { className: "fracto-devtools-flow-content", children: JSON.stringify(data.value, null, 2) })] })), copiedKey === key && (jsxRuntime.jsx("div", { className: "fracto-devtools-copy-toast", children: "Copied!" }))] }, key)))) }), jsxRuntime.jsxs("div", { className: "fracto-devtools-footer", children: [jsxRuntime.jsx("span", { children: "FractoState Engine v5" }), jsxRuntime.jsxs("span", { className: "fracto-devtools-footer-count", children: [filteredEntries.length, " items"] })] })] }));
|
|
323
325
|
const pluginManagerPortal = showPluginManager &&
|
|
324
326
|
reactDom.createPortal(jsxRuntime.jsx(PluginManager.PluginManager, { snapshot: snapshot, onClose: () => {
|
|
325
327
|
setShowPluginManager(false);
|
|
@@ -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(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":["useState","useRef","useEffect","store","useMemo","useCallback","createPortal","_jsx","MentalMap","_jsxs","Minimize2","Maximize2","X","RotateCcw","ChevronLeft","ChevronRight","Activity","Database","ArrowDownToLine","ArrowUpToLine","ChevronDown","Zap","History","Monitor","PluginManager"],"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\">\n {Array.isArray(data.meta.listeners)\n ? data.meta.listeners.length\n : data.meta.listeners}\n </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":["useState","useRef","useEffect","store","useMemo","useCallback","createPortal","_jsx","MentalMap","_jsxs","Minimize2","Maximize2","X","RotateCcw","ChevronLeft","ChevronRight","Activity","Database","ArrowDownToLine","ArrowUpToLine","ChevronDown","Zap","History","Monitor","PluginManager"],"mappings":"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"}
|
|
@@ -2,15 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var react = require('@xyflow/react');
|
|
5
|
-
|
|
5
|
+
require('lucide-react');
|
|
6
6
|
|
|
7
|
-
const FlowNode = ({ data }) => (
|
|
8
|
-
// Added "nodrag" class to allow clicking without dragging the canvas
|
|
9
|
-
jsxRuntime.jsxs("div", { className: `m2-node-flow nodrag`, style: { cursor: "pointer" }, onClick: () => {
|
|
10
|
-
if (data.onClick)
|
|
11
|
-
data.onClick();
|
|
12
|
-
}, children: [jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Left, style: { opacity: 0 } }), jsxRuntime.jsxs("div", { className: "m2-node-flow-header", children: [jsxRuntime.jsx("div", { className: "m2-node-icon", children: jsxRuntime.jsx(lucideReact.Database, { size: 18 }) }), jsxRuntime.jsx("div", { className: "m2-node-title", children: data.label })] }), jsxRuntime.jsxs("div", { className: "m2-node-preview", children: [JSON.stringify(data.value, null, 2).slice(0, 80), "..."] }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Right, style: { opacity: 0 } })] }));
|
|
13
|
-
const ActorNode = ({ data }) => (jsxRuntime.jsxs("div", { className: `m2-node-actor nodrag ${data.isActive ? "active" : ""}`, children: [jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Left, style: { opacity: 0 } }), jsxRuntime.jsx("div", { className: "m2-actor-avatar", children: data.label.charAt(0).toUpperCase() }), jsxRuntime.jsx("div", { className: "m2-actor-name", children: data.label }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Right, style: { opacity: 0 } })] }));
|
|
14
7
|
// --- Custom Edge ---
|
|
15
8
|
const FiberEdge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style = {}, markerEnd, }) => {
|
|
16
9
|
const [edgePath] = react.getBezierPath({
|
|
@@ -21,10 +14,9 @@ const FiberEdge = ({ id, sourceX, sourceY, targetX, targetY, sourcePosition, tar
|
|
|
21
14
|
targetY,
|
|
22
15
|
targetPosition,
|
|
23
16
|
});
|
|
24
|
-
|
|
17
|
+
const strokeColor = style.stroke || "var(--m2-accent-cyan)";
|
|
18
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { id: id, style: { ...style, stroke: strokeColor, opacity: 0.3 }, className: "m2-edge-path", d: edgePath, markerEnd: markerEnd }), jsxRuntime.jsx("path", { id: `${id}-pulse`, className: "m2-edge-pulse", style: { stroke: strokeColor }, d: edgePath })] }));
|
|
25
19
|
};
|
|
26
20
|
|
|
27
|
-
exports.ActorNode = ActorNode;
|
|
28
21
|
exports.FiberEdge = FiberEdge;
|
|
29
|
-
exports.FlowNode = FlowNode;
|
|
30
22
|
//# sourceMappingURL=MapUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapUtils.js","sources":["../../../../src/devtools/MapUtils.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\n// --- Custom Nodes ---\n\nimport { EdgeProps, getBezierPath, Handle, Position } from \"@xyflow/react\";\nimport { Database } from \"lucide-react\";\n\nexport const FlowNode = ({ data }: any) => (\n // Added \"nodrag\" class to allow clicking without dragging the canvas\n <div\n className={`m2-node-flow nodrag`}\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n if (data.onClick) data.onClick();\n }}\n >\n {/* ${data.isActive ? \"active\" : \"\"} */}\n\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-node-flow-header\">\n <div className=\"m2-node-icon\">\n <Database size={18} />\n </div>\n <div className=\"m2-node-title\">{data.label}</div>\n </div>\n <div className=\"m2-node-preview\">\n {JSON.stringify(data.value, null, 2).slice(0, 80)}...\n </div>\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\nexport const ActorNode = ({ data }: any) => (\n <div className={`m2-node-actor nodrag ${data.isActive ? \"active\" : \"\"}`}>\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-actor-avatar\">{data.label.charAt(0).toUpperCase()}</div>\n <div className=\"m2-actor-name\">{data.label}</div>\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\n// --- Custom Edge ---\n\nexport const FiberEdge = ({\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n style = {},\n markerEnd,\n}: EdgeProps) => {\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n return (\n <>\n <path\n id={id}\n style={style}\n className=\"m2-edge-path\"\n d={edgePath}\n markerEnd={markerEnd}\n />\n <path
|
|
1
|
+
{"version":3,"file":"MapUtils.js","sources":["../../../../src/devtools/MapUtils.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\n// --- Custom Nodes ---\n\nimport { EdgeProps, getBezierPath, Handle, Position } from \"@xyflow/react\";\nimport { Database } from \"lucide-react\";\n\nexport const FlowNode = ({ data }: any) => (\n // Added \"nodrag\" class to allow clicking without dragging the canvas\n <div\n className={`m2-node-flow nodrag`}\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n if (data.onClick) data.onClick();\n }}\n >\n {/* ${data.isActive ? \"active\" : \"\"} */}\n\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-node-flow-header\">\n <div className=\"m2-node-icon\">\n <Database size={18} />\n </div>\n <div className=\"m2-node-title\">{data.label}</div>\n </div>\n <div className=\"m2-node-preview\">\n {JSON.stringify(data.value, null, 2).slice(0, 80)}...\n </div>\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\nexport const ActorNode = ({ data }: any) => (\n <div className={`m2-node-actor nodrag ${data.isActive ? \"active\" : \"\"}`}>\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-actor-avatar\">{data.label.charAt(0).toUpperCase()}</div>\n <div className=\"m2-actor-name\">{data.label}</div>\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\n// --- Custom Edge ---\n\nexport const FiberEdge = ({\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n style = {},\n markerEnd,\n}: EdgeProps) => {\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n const strokeColor = style.stroke || \"var(--m2-accent-cyan)\";\n\n return (\n <>\n <path\n id={id}\n style={{ ...style, stroke: strokeColor, opacity: 0.3 }}\n className=\"m2-edge-path\"\n d={edgePath}\n markerEnd={markerEnd}\n />\n <path\n id={`${id}-pulse`}\n className=\"m2-edge-pulse\"\n style={{ stroke: strokeColor }}\n d={edgePath}\n />\n </>\n );\n};\n"],"names":["getBezierPath","_jsxs","_Fragment","_jsx"],"mappings":";;;;;;AAoEA;AAEO,MAAM,SAAS,GAAG,CAAC,EACxB,EAAE,EACF,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,KAAK,GAAG,EAAE,EACV,SAAS,GACC,KAAI;AACd,IAAA,MAAM,CAAC,QAAQ,CAAC,GAAGA,mBAAa,CAAC;QAC/B,OAAO;QACP,OAAO;QACP,cAAc;QACd,OAAO;QACP,OAAO;QACP,cAAc;AACf,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,uBAAuB;AAE3D,IAAA,QACEC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEC,cAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,EACtD,SAAS,EAAC,cAAc,EACxB,CAAC,EAAE,QAAQ,EACX,SAAS,EAAE,SAAS,EAAA,CACpB,EACFA,cAAA,CAAA,MAAA,EAAA,EACE,EAAE,EAAE,CAAA,EAAG,EAAE,CAAA,MAAA,CAAQ,EACjB,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAC9B,CAAC,EAAE,QAAQ,EAAA,CACX,CAAA,EAAA,CACD;AAEP;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "@import url(\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap\");:root{--m2-bg:#030302ce;--m2-panel-bg:rgba(10,10,16,.85);--m2-card-bg:rgba(22,22,34,.7);--m2-border:hsla(0,0%,100%,.08);--m2-accent-cyan:#00d4ff;--m2-accent-purple:#8b5cf6;--m2-accent-glow:rgba(0,212,255,.3);--m2-text-dim:#94a3b8;--m2-text-bright:#f8fafc;--m2-sidebar-w:280px;--m2-ledger-w:420px;--m2-glass-border:1px solid hsla(0,0%,100%,.1)}.mental-map-overlay{align-items:center;backdrop-filter:none;background:rgba(0,0,0,.05);color:var(--m2-text-bright);display:flex;font-family:Plus Jakarta Sans,sans-serif;inset:0;justify-content:center;pointer-events:none;position:fixed;z-index:999999}.mental-map-overlay *{pointer-events:auto}.mental-map-container{backdrop-filter:blur(20px);background:rgba(15,15,25,.94);border:1px solid rgba(0,212,255,.3);border-radius:32px;box-shadow:0 40px 120px rgba(0,0,0,.8),inset 0 0 1px rgba(0,212,255,.5);display:flex;flex-direction:column;height:92vh;overflow:hidden;position:relative;transition:width .6s,height .6s,border-radius .6s,transform 0s;width:96vw}.mental-map-container.minimized{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,#1a1a2e,#16213e);border:2px solid rgba(0,212,255,.4);border-radius:16px;box-shadow:0 8px 32px rgba(0,212,255,.3),inset 0 0 20px rgba(0,212,255,.2);cursor:grab;display:flex;height:56px;justify-content:center;position:fixed;user-select:none;width:56px;z-index:10000}.mental-map-container.minimized:active{cursor:grabbing}.mental-map-container.minimized>:not(.m2-minimized-logo){display:none!important}.m2-minimized-logo{align-items:center;color:#fff;display:none;font-family:system-ui,-apple-system,sans-serif;font-size:28px;font-weight:700;height:100%;justify-content:center;position:relative;width:100%}.m2-minimized-logo.pulse{animation:m2LogoPulse .4s cubic-bezier(.4,0,.2,1)}@keyframes m2LogoPulse{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.mental-map-container.minimized .m2-minimized-logo{display:flex}.m2-minimized-badge{background:#00d4ff;border:1px solid #fff;border-radius:5px;box-shadow:0 4px 10px rgba(0,0,0,.5);color:#000;font-size:8px;font-weight:900;padding:2px 5px;position:absolute;right:-8px;top:-8px}.m2-header{background:hsla(0,0%,100%,.02);border-bottom:var(--m2-glass-border);height:80px;justify-content:space-between;padding:0 40px;z-index:100}.m2-header,.m2-logo-group{align-items:center;display:flex}.m2-logo-group{gap:16px}.m2-logo-icon{align-items:center;background:linear-gradient(135deg,#1a1a2e,#16213e);border-radius:14px;box-shadow:0 0 20px rgba(0,212,255,.4);display:flex;font-size:24px;height:48px;justify-content:center;width:48px}.m2-header-titles h1{-webkit-text-fill-color:transparent;background:linear-gradient(90deg,#fff,#94a3b8);-webkit-background-clip:text;background-clip:text;font-size:20px;font-weight:800;letter-spacing:-.02em;margin:0}.m2-header-meta{align-items:center;display:flex;gap:12px;margin-top:2px}.m2-engine-badge{background:rgba(0,212,255,.1);border:1px solid rgba(0,212,255,.2);border-radius:6px;color:#00d4ff;font-size:10px;font-weight:800;padding:2px 8px;text-transform:uppercase}.m2-controls{align-items:center;display:flex;gap:24px}.m2-search-wrapper{position:relative;width:380px}.m2-search-input{background:hsla(0,0%,100%,.03);border:var(--m2-glass-border);border-radius:12px;color:#fff;font-size:14px;padding:12px 16px 12px 48px;transition:all .3s;width:100%}.m2-search-input:focus{background:hsla(0,0%,100%,.06);border-color:var(--m2-accent-cyan);box-shadow:0 0 0 4px rgba(0,212,255,.1);outline:none}.m2-search-icon{color:var(--m2-text-dim);left:16px;position:absolute;top:50%;transform:translateY(-50%)}.m2-action-btns{display:flex;gap:8px}.m2-icon-btn{align-items:center;background:hsla(0,0%,100%,.03);border:var(--m2-glass-border);border-radius:12px;color:var(--m2-text-dim);cursor:pointer;display:flex;height:44px;justify-content:center;transition:all .2s;width:44px}.m2-icon-btn:hover{background:hsla(0,0%,100%,.08);color:var(--m2-text-bright)}.m2-close-btn{background:rgba(239,68,68,.1)!important;color:#ef4444!important}.m2-icon-btn.force-visible{display:flex!important;opacity:1!important;visibility:visible!important}.m2-layout{display:flex;flex:1;overflow:hidden}.m2-sidebar{background:rgba(0,0,0,.2);border-right:var(--m2-glass-border);display:flex;flex-direction:column;width:var(--m2-sidebar-w)}.m2-sec-header{color:var(--m2-text-dim);font-size:11px;font-weight:800;letter-spacing:.1em;padding:32px 24px 16px;text-transform:uppercase}.m2-list{flex:1;overflow-y:auto;padding:0 16px}.m2-flow-card{align-items:center;border:1px solid transparent;border-radius:16px;cursor:pointer;display:flex;gap:12px;margin-bottom:8px;padding:12px 16px;transition:all .2s}.m2-flow-card:hover{background:hsla(0,0%,100%,.03);border-color:hsla(0,0%,100%,.05)}.m2-flow-card.active{background:linear-gradient(135deg,rgba(0,212,255,.1),rgba(139,92,246,.1));border-color:rgba(0,212,255,.2)}.m2-flow-card.is-active-now .m2-flow-indicator{animation:markerPulse 1s infinite}.m2-flow-indicator{background:var(--m2-accent-cyan);border-radius:3px;box-shadow:0 0 10px var(--m2-accent-cyan);height:10px;width:10px}@keyframes markerPulse{0%{box-shadow:0 0 0 0 rgba(0,212,255,.7);transform:scale(1)}70%{box-shadow:0 0 0 10px rgba(0,212,255,0);transform:scale(1.2)}to{box-shadow:0 0 0 0 rgba(0,212,255,0);transform:scale(1)}}.m2-flow-info{flex:1}.m2-flow-name{display:block;font-size:14px;font-weight:600}.m2-flow-stats{color:var(--m2-text-dim);font-size:10px}.m2-canvas{background:radial-gradient(circle at center,rgba(139,92,246,.03) 0,transparent 70%);flex:1;position:relative}.m2-node-flow{backdrop-filter:blur(12px);background:var(--m2-card-bg);border:var(--m2-glass-border);border-radius:20px;box-shadow:0 10px 30px rgba(0,0,0,.4);color:#fff;padding:20px;transition:transform .2s;width:240px}.m2-node-flow:hover{border-color:var(--m2-accent-cyan);transform:scale(1.02)}.m2-node-flow-header{align-items:center;display:flex;gap:12px;margin-bottom:12px}.m2-node-icon{align-items:center;background:rgba(0,212,255,.1);border-radius:8px;color:var(--m2-accent-cyan);display:flex;height:32px;justify-content:center;width:32px}.m2-node-title{font-size:13px;font-weight:800;letter-spacing:1px;text-transform:uppercase}.m2-node-preview{background:rgba(0,0,0,.3);border:1px solid hsla(0,0%,100%,.03);border-radius:12px;color:#94a3b8;font-family:JetBrains Mono,monospace;font-size:10px;padding:12px;white-space:pre-wrap}.m2-node-actor{align-items:center;backdrop-filter:blur(12px);background:rgba(139,92,246,.05);border:1px solid rgba(139,92,246,.2);border-radius:50px;box-shadow:0 10px 20px rgba(0,0,0,.2);color:var(--m2-accent-purple);display:flex;gap:10px;padding:8px 16px}.m2-actor-avatar{align-items:center;background:var(--m2-accent-purple);border-radius:50%;color:#fff;display:flex;font-size:10px;font-weight:800;height:24px;justify-content:center;width:24px}.m2-actor-name{font-size:12px;font-weight:700}.m2-edge-path{stroke:hsla(0,0%,100%,.1);stroke-width:2px;fill:none}.m2-edge-pulse{stroke:var(--m2-accent-cyan);stroke-width:3px;stroke-dasharray:5,20;animation:fiberPulse 3s linear infinite;filter:blur(2px);opacity:.8}@keyframes fiberPulse{to{stroke-dashoffset:-100}}.m2-ledger{background:rgba(0,0,0,.3);border-left:var(--m2-glass-border);display:flex;flex-direction:column;transition:width .4s cubic-bezier(.4,0,.2,1),opacity .3s,padding .4s;width:var(--m2-ledger-w)}.m2-ledger.hidden{border-left:none;opacity:0;pointer-events:none;width:0}.m2-ledger-controls{border-bottom:var(--m2-glass-border);padding:32px 24px 16px}.m2-ledger-title-row{align-items:center;display:flex;justify-content:space-between;margin-bottom:24px;min-width:calc(var(--m2-ledger-w) - 48px)}.m2-ledger-title{color:var(--m2-text-dim);font-size:14px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.m2-filter-tabs{display:flex;gap:8px;margin-bottom:0}.m2-tab{background:hsla(0,0%,100%,.03);border:1px solid transparent;border-radius:8px;color:var(--m2-text-dim);cursor:pointer;flex:1;font-size:11px;font-weight:800;padding:8px;text-align:center;transition:all .2s}.m2-tab.active{background:hsla(0,0%,100%,.08);border-color:hsla(0,0%,100%,.1);color:#fff}.m2-trace-list{flex:1;overflow-y:auto;padding:24px}.m2-trace-card{margin-bottom:32px;padding-left:24px;position:relative}.m2-trace-card:before{background:linear-gradient(to bottom,var(--m2-accent-cyan),transparent);bottom:-32px;content:\"\";left:0;position:absolute;top:0;width:1px}.m2-trace-card.reset:before{background:linear-gradient(180deg,#ef4444,transparent)}.m2-trace-dot{background:var(--m2-accent-cyan);border-radius:50%;box-shadow:0 0 10px var(--m2-accent-cyan);height:9px;left:-4px;position:absolute;top:0;width:9px}.m2-trace-card.reset .m2-trace-dot{background:#ef4444;box-shadow:0 0 10px #ef4444}.m2-trace-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:12px}.m2-trace-actor-lbl{color:#fff;font-size:13px;font-weight:700}.m2-trace-ts{color:var(--m2-text-dim);font-size:10px}.m2-trace-op-info{align-items:center;display:flex;gap:8px;margin-bottom:12px}.m2-op-type{background:rgba(0,212,255,.1);border-radius:4px;color:var(--m2-accent-cyan);font-weight:700;padding:2px 8px;text-transform:uppercase}.m2-op-type,.m2-path-tag{font-family:JetBrains Mono,monospace;font-size:9px}.m2-path-tag{color:var(--m2-text-dim)}.m2-trace-data{background:rgba(0,0,0,.4);border:var(--m2-glass-border);border-radius:12px;padding:16px}.m2-trace-json{color:#94a3b8;font-family:JetBrains Mono,monospace;font-size:11px;margin:0;max-height:200px;overflow-y:auto}.m2-flow-overlay-backdrop{align-items:center;backdrop-filter:blur(4px);background:rgba(0,0,0,.6);display:flex;inset:0;justify-content:center;position:absolute;z-index:1000}.m2-flow-overlay{animation:popupIn .3s cubic-bezier(.16,1,.3,1);backdrop-filter:blur(32px);background:var(--m2-panel-bg);border:var(--m2-glass-border);border-radius:24px;box-shadow:0 40px 100px rgba(0,0,0,.8);display:flex;flex-direction:column;max-height:80%;overflow:hidden;width:600px}@keyframes popupIn{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.m2-overlay-header{align-items:center;background:hsla(0,0%,100%,.02);border-bottom:var(--m2-glass-border);display:flex;justify-content:space-between;padding:24px 32px}.m2-overlay-title{align-items:center;display:flex;gap:12px}.m2-overlay-title h2{color:#fff;font-size:18px;font-weight:800;margin:0}.m2-overlay-content{flex:1;overflow-y:auto;padding:24px 32px}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1);border-radius:10px}::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.2)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.m2-trace-card{animation:fadeIn .4s cubic-bezier(.16,1,.3,1) both}.m2-empty-state{align-items:center;animation:fadeIn .4s;color:var(--m2-text-dim);display:flex;flex-direction:column;height:100%;justify-content:center;padding:40px;text-align:center}.m2-empty-icon{color:hsla(0,0%,100%,.1);margin-bottom:24px}.m2-empty-state h3{color:var(--m2-text-bright);font-size:18px;margin:0 0 12px}.m2-empty-state p{font-size:14px;line-height:1.5;max-width:300px}";
|
|
3
|
+
var css_248z = "@import url(\"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap\");:root{--m2-bg:#030302ce;--m2-panel-bg:rgba(10,10,16,.85);--m2-card-bg:rgba(22,22,34,.7);--m2-border:hsla(0,0%,100%,.08);--m2-accent-cyan:#00d4ff;--m2-accent-purple:#8b5cf6;--m2-accent-glow:rgba(0,212,255,.3);--m2-text-dim:#94a3b8;--m2-text-bright:#f8fafc;--m2-sidebar-w:280px;--m2-ledger-w:420px;--m2-glass-border:1px solid hsla(0,0%,100%,.1)}.mental-map-overlay{align-items:center;backdrop-filter:none;background:rgba(0,0,0,.05);color:var(--m2-text-bright);display:flex;font-family:Plus Jakarta Sans,sans-serif;inset:0;justify-content:center;pointer-events:none;position:fixed;z-index:999999}.mental-map-overlay *{pointer-events:auto}.mental-map-container{backdrop-filter:blur(20px);background:rgba(15,15,25,.94);border:1px solid rgba(0,212,255,.3);border-radius:32px;box-shadow:0 40px 120px rgba(0,0,0,.8),inset 0 0 1px rgba(0,212,255,.5);display:flex;flex-direction:column;height:92vh;overflow:hidden;position:relative;transition:width .6s,height .6s,border-radius .6s,transform 0s;width:96vw}.mental-map-container.minimized{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,#1a1a2e,#16213e);border:2px solid rgba(0,212,255,.4);border-radius:16px;box-shadow:0 8px 32px rgba(0,212,255,.3),inset 0 0 20px rgba(0,212,255,.2);cursor:grab;display:flex;height:56px;justify-content:center;position:fixed;user-select:none;width:56px;z-index:10000}.mental-map-container.minimized:active{cursor:grabbing}.mental-map-container.minimized>:not(.m2-minimized-logo){display:none!important}.m2-minimized-logo{align-items:center;color:#fff;display:none;font-family:system-ui,-apple-system,sans-serif;font-size:28px;font-weight:700;height:100%;justify-content:center;position:relative;width:100%}.m2-minimized-logo.pulse{animation:m2LogoPulse .4s cubic-bezier(.4,0,.2,1)}@keyframes m2LogoPulse{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.mental-map-container.minimized .m2-minimized-logo{display:flex}.m2-minimized-badge{background:#00d4ff;border:1px solid #fff;border-radius:5px;box-shadow:0 4px 10px rgba(0,0,0,.5);color:#000;font-size:8px;font-weight:900;padding:2px 5px;position:absolute;right:-8px;top:-8px}.m2-header{background:hsla(0,0%,100%,.02);border-bottom:var(--m2-glass-border);height:80px;justify-content:space-between;padding:0 40px;z-index:100}.m2-header,.m2-logo-group{align-items:center;display:flex}.m2-logo-group{gap:16px}.m2-logo-icon{align-items:center;background:linear-gradient(135deg,#1a1a2e,#16213e);border-radius:14px;box-shadow:0 0 20px rgba(0,212,255,.4);display:flex;font-size:24px;height:48px;justify-content:center;width:48px}.m2-header-titles h1{-webkit-text-fill-color:transparent;background:linear-gradient(90deg,#fff,#94a3b8);-webkit-background-clip:text;background-clip:text;font-size:20px;font-weight:800;letter-spacing:-.02em;margin:0}.m2-header-meta{align-items:center;display:flex;gap:12px;margin-top:2px}.m2-engine-badge{background:rgba(0,212,255,.1);border:1px solid rgba(0,212,255,.2);border-radius:6px;color:#00d4ff;font-size:10px;font-weight:800;padding:2px 8px;text-transform:uppercase}.m2-controls{align-items:center;display:flex;gap:24px}.m2-search-wrapper{position:relative;width:380px}.m2-search-input{background:hsla(0,0%,100%,.03);border:var(--m2-glass-border);border-radius:12px;color:#fff;font-size:14px;padding:12px 16px 12px 48px;transition:all .3s;width:100%}.m2-search-input:focus{background:hsla(0,0%,100%,.06);border-color:var(--m2-accent-cyan);box-shadow:0 0 0 4px rgba(0,212,255,.1);outline:none}.m2-search-icon{color:var(--m2-text-dim);left:16px;position:absolute;top:50%;transform:translateY(-50%)}.m2-action-btns{display:flex;gap:8px}.m2-icon-btn{align-items:center;background:hsla(0,0%,100%,.03);border:var(--m2-glass-border);border-radius:12px;color:var(--m2-text-dim);cursor:pointer;display:flex;height:44px;justify-content:center;transition:all .2s;width:44px}.m2-icon-btn:hover{background:hsla(0,0%,100%,.08);color:var(--m2-text-bright)}.m2-close-btn{background:rgba(239,68,68,.1)!important;color:#ef4444!important}.m2-icon-btn.force-visible{display:flex!important;opacity:1!important;visibility:visible!important}.m2-layout{display:flex;flex:1;overflow:hidden}.m2-sidebar{background:rgba(0,0,0,.2);border-right:var(--m2-glass-border);display:flex;flex-direction:column;width:var(--m2-sidebar-w)}.m2-sec-header{color:var(--m2-text-dim);font-size:11px;font-weight:800;letter-spacing:.1em;padding:32px 24px 16px;text-transform:uppercase}.m2-list{flex:1;overflow-y:auto;padding:0 16px}.m2-flow-card{align-items:center;border:1px solid transparent;border-radius:16px;cursor:pointer;display:flex;gap:12px;margin-bottom:8px;padding:12px 16px;transition:all .2s}.m2-flow-card:hover{background:hsla(0,0%,100%,.03);border-color:hsla(0,0%,100%,.05)}.m2-flow-card.active{background:linear-gradient(135deg,rgba(0,212,255,.1),rgba(139,92,246,.1));border-color:rgba(0,212,255,.2)}.m2-flow-card.is-active-now .m2-flow-indicator{animation:markerPulse 1s infinite}.m2-flow-indicator{background:var(--m2-accent-cyan);border-radius:3px;box-shadow:0 0 10px var(--m2-accent-cyan);height:10px;width:10px}@keyframes markerPulse{0%{box-shadow:0 0 0 0 rgba(0,212,255,.7);transform:scale(1)}70%{box-shadow:0 0 0 10px rgba(0,212,255,0);transform:scale(1.2)}to{box-shadow:0 0 0 0 rgba(0,212,255,0);transform:scale(1)}}.m2-flow-info{flex:1}.m2-flow-name{display:block;font-size:14px;font-weight:600}.m2-flow-stats{color:var(--m2-text-dim);font-size:10px}.m2-canvas{background:radial-gradient(circle at center,rgba(139,92,246,.03) 0,transparent 70%);flex:1;position:relative}.m2-node-flow{backdrop-filter:blur(12px);background:var(--m2-card-bg);border:var(--m2-glass-border);border-radius:20px;box-shadow:0 10px 30px rgba(0,0,0,.4);color:#fff;padding:20px;transition:transform .2s;width:240px}.m2-node-flow.is-hot,.m2-node-flow:hover{border-color:#fbbf24;box-shadow:0 0 25px rgba(251,191,36,.4);transform:scale(1.02)}.m2-node-flow-header{align-items:center;display:flex;gap:12px;margin-bottom:12px}.m2-node-icon{align-items:center;background:rgba(0,212,255,.1);border-radius:8px;color:var(--m2-accent-cyan);display:flex;height:32px;justify-content:center;width:32px}.m2-node-title{font-size:13px;font-weight:800;letter-spacing:1px;text-transform:uppercase}.m2-node-preview{background:rgba(0,0,0,.3);border:1px solid hsla(0,0%,100%,.03);border-radius:12px;color:#94a3b8;font-family:JetBrains Mono,monospace;font-size:10px;padding:12px;white-space:pre-wrap}.m2-node-actor{align-items:center;backdrop-filter:blur(12px);background:rgba(168,85,247,.1);border:1px solid rgba(168,85,247,.4);border-radius:12px;box-shadow:0 0 20px rgba(168,85,247,.15);color:#c084fc;display:flex;gap:12px;padding:10px 16px;transition:all .3s cubic-bezier(.4,0,.2,1)}.m2-node-actor.active,.m2-node-actor.is-hot{background:rgba(251,191,36,.1);border-color:#fbbf24;box-shadow:0 0 30px rgba(251,191,36,.5)}.m2-actor-avatar{align-items:center;background:#a855f7;border-radius:8px;box-shadow:0 0 10px rgba(168,85,247,.5);color:#fff;display:flex;font-size:14px;font-weight:900;height:28px;justify-content:center;width:28px}.m2-actor-name{font-size:12px;font-weight:700}.m2-node-listener{align-items:center;backdrop-filter:blur(12px);background:rgba(0,212,255,.08);border:1px solid rgba(0,212,255,.3);border-radius:50px;box-shadow:0 0 15px rgba(0,212,255,.1);color:var(--m2-accent-cyan);display:flex;gap:10px;padding:8px 18px;transition:all .3s ease}.m2-node-listener.active,.m2-node-listener.is-hot{background:rgba(251,191,36,.15);border-color:#fbbf24;box-shadow:0 0 25px rgba(251,191,36,.5)}.m2-listener-icon{align-items:center;background:var(--m2-accent-cyan);border-radius:50%;color:#000;display:flex;height:24px;justify-content:center;width:24px}.m2-listener-name{font-size:12px;font-weight:700}.m2-edge-path{stroke-width:2px;fill:none}.m2-edge-pulse{stroke-width:3px;stroke-dasharray:5,20;animation:fiberPulse 3s linear infinite;filter:blur(2px);opacity:.8}@keyframes fiberPulse{to{stroke-dashoffset:-100}}.m2-ledger{background:rgba(0,0,0,.3);border-left:var(--m2-glass-border);display:flex;flex-direction:column;transition:width .4s cubic-bezier(.4,0,.2,1),opacity .3s,padding .4s;width:var(--m2-ledger-w)}.m2-ledger.hidden{border-left:none;opacity:0;pointer-events:none;width:0}.m2-ledger-controls{border-bottom:var(--m2-glass-border);padding:32px 24px 16px}.m2-ledger-title-row{align-items:center;display:flex;justify-content:space-between;margin-bottom:24px;min-width:calc(var(--m2-ledger-w) - 48px)}.m2-ledger-title{color:var(--m2-text-dim);font-size:14px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.m2-filter-tabs{display:flex;gap:8px;margin-bottom:0}.m2-tab{background:hsla(0,0%,100%,.03);border:1px solid transparent;border-radius:8px;color:var(--m2-text-dim);cursor:pointer;flex:1;font-size:11px;font-weight:800;padding:8px;text-align:center;transition:all .2s}.m2-tab.active{background:hsla(0,0%,100%,.08);border-color:hsla(0,0%,100%,.1);color:#fff}.m2-trace-list{flex:1;overflow-y:auto;padding:24px}.m2-trace-card{margin-bottom:32px;padding-left:24px;position:relative}.m2-trace-card:before{background:linear-gradient(to bottom,var(--m2-accent-cyan),transparent);bottom:-32px;content:\"\";left:0;position:absolute;top:0;width:1px}.m2-trace-card.reset:before{background:linear-gradient(180deg,#ef4444,transparent)}.m2-trace-dot{background:var(--m2-accent-cyan);border-radius:50%;box-shadow:0 0 10px var(--m2-accent-cyan);height:9px;left:-4px;position:absolute;top:0;width:9px}.m2-trace-card.reset .m2-trace-dot{background:#ef4444;box-shadow:0 0 10px #ef4444}.m2-trace-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:12px}.m2-trace-actor-lbl{color:#fff;font-size:13px;font-weight:700}.m2-trace-ts{color:var(--m2-text-dim);font-size:10px}.m2-trace-op-info{align-items:center;display:flex;gap:8px;margin-bottom:12px}.m2-op-type{background:rgba(0,212,255,.1);border-radius:4px;color:var(--m2-accent-cyan);font-weight:700;padding:2px 8px;text-transform:uppercase}.m2-op-type,.m2-path-tag{font-family:JetBrains Mono,monospace;font-size:9px}.m2-path-tag{color:var(--m2-text-dim)}.m2-trace-data{background:rgba(0,0,0,.4);border:var(--m2-glass-border);border-radius:12px;padding:16px}.m2-trace-json{color:#94a3b8;font-family:JetBrains Mono,monospace;font-size:11px;margin:0;max-height:200px;overflow-y:auto}.m2-flow-overlay-backdrop{align-items:center;backdrop-filter:blur(4px);background:rgba(0,0,0,.6);display:flex;inset:0;justify-content:center;position:absolute;z-index:1000}.m2-flow-overlay{animation:popupIn .3s cubic-bezier(.16,1,.3,1);backdrop-filter:blur(32px);background:var(--m2-panel-bg);border:var(--m2-glass-border);border-radius:24px;box-shadow:0 40px 100px rgba(0,0,0,.8);display:flex;flex-direction:column;max-height:80%;overflow:hidden;width:600px}@keyframes popupIn{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.m2-overlay-header{align-items:center;background:hsla(0,0%,100%,.02);border-bottom:var(--m2-glass-border);display:flex;justify-content:space-between;padding:24px 32px}.m2-overlay-title{align-items:center;display:flex;gap:12px}.m2-overlay-title h2{color:#fff;font-size:18px;font-weight:800;margin:0}.m2-overlay-content{flex:1;overflow-y:auto;padding:24px 32px}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.1);border-radius:10px}::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.2)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.m2-trace-card{animation:fadeIn .4s cubic-bezier(.16,1,.3,1) both}.m2-empty-state{align-items:center;animation:fadeIn .4s;color:var(--m2-text-dim);display:flex;flex-direction:column;height:100%;justify-content:center;padding:40px;text-align:center}.m2-empty-icon{color:hsla(0,0%,100%,.1);margin-bottom:24px}.m2-empty-state h3{color:var(--m2-text-bright);font-size:18px;margin:0 0 12px}.m2-empty-state p{font-size:14px;line-height:1.5;max-width:300px}.genealogy-header-overlay{left:32px;pointer-events:none;position:absolute;top:24px;z-index:10}.gen-badge{align-items:center;background:rgba(139,92,246,.2);border:1px solid rgba(139,92,246,.3);border-radius:10px;color:#c084fc;display:inline-flex;font-size:12px;font-weight:800;gap:8px;margin-bottom:8px;padding:6px 12px;text-transform:uppercase}.genealogy-header-overlay p{color:var(--m2-text-dim);font-size:13px;margin:0}.view-toggle-btn{align-items:center;background:hsla(0,0%,100%,.05);border:var(--m2-glass-border);border-radius:10px;color:var(--m2-text-dim);cursor:pointer;display:flex;font-size:12px;font-weight:700;gap:8px;padding:8px 16px;transition:all .2s}.view-toggle-btn.active{background:var(--m2-accent-cyan);border-color:#fff;color:#000}";
|
|
4
4
|
if (typeof document !== 'undefined') {
|
|
5
5
|
var style = document.createElement('style');
|
|
6
6
|
style.setAttribute('type', 'text/css');
|