MCPcopy Index your code
hub / github.com/davidmnoll/chkflow

github.com/davidmnoll/chkflow @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
71 symbols 187 edges 19 files 1 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Chkflow


Chkflow is a react component editor/view for tree and graph data structures inspired by workflowy's interface.

screenshot of chkflow component

Integrate it into your react project:

yarn add chkflow

or

npm install -S chkflow

Usage:

Example usage with javascript:

import './App.css';
import ChkFlow from 'chkflow';

function getNodes(){
  let savedNodes = window.localStorage.getItem('chkFlowNodes')

  if (savedNodes) {
    console.log('retrieved nodes')
    let nodes = JSON.parse(savedNodes)
    return nodes;
  }

}

function getEnv(){
  let savedEnv = window.localStorage.getItem('chkFlowEnvironment')
  if (savedEnv){
    console.log('retrieved environment')
    let environment = JSON.parse(savedEnv);
    return environment
  }
}


function setStateCallback(state){
  window.localStorage.setItem('chkFlowEnvironment', JSON.stringify(state.environment));
  window.localStorage.setItem('chkFlowNodes', JSON.stringify(state.nodes));
}

function App() {



  const nodes = getNodes();
  const environment = getEnv();
  const settings = {
    setStateCallback: setStateCallback,
    nodes: nodes,
    environment: environment
  }  



  return (



      <ChkFlow {...settings} />



  );
}

export default App;


Example usage with typescript:

import './App.css';
import ChkFlow from 'chkflow';
import type {
  ChkFlowEnvironment,
  ChkFlowNodes,
  ChkFlowSettings,
  ChkFlowState,
  ChkFlowNode
} from 'chkflow'

function getNodes(): ChkFlowNodes | undefined{
  let savedNodes = window.localStorage.getItem('chkFlowNodes')

  if (savedNodes) {
    console.log('retrieved nodes')
    let nodes = JSON.parse(savedNodes)
    return nodes;
  }

}

function getEnv(): ChkFlowEnvironment | undefined{
  let savedEnv = window.localStorage.getItem('chkFlowEnvironment')
  if (savedEnv){
    console.log('retrieved environment')
    let environment = JSON.parse(savedEnv);
    return environment
  }
}


function setStateCallback(state: ChkFlowState): void{
  window.localStorage.setItem('chkFlowEnvironment', JSON.stringify(state.environment));
  window.localStorage.setItem('chkFlowNodes', JSON.stringify(state.nodes));
}

function App() {



  const nodes = getNodes();
  const environment = getEnv();
  const settings: ChkFlowSettings = {
    setStateCallback: setStateCallback,
    nodes: nodes as ChkFlowNodes,
    environment: environment as ChkFlowEnvironment
  }  



  return (



      <ChkFlow {...settings} />



  );
}

export default App;


Structure of Nodes: e.g.

const dummyNodes = {
    '0' : { text: '[root] (you should not be seeing this)', rel: {'child': ['1','3']}, isCollapsed: false },
    '1' : { text: 'chores', rel: {'child': ['5', '2']}, isCollapsed: false  },
    '2' : { text: 'clean', rel: {'child': ['4']}, isCollapsed: false  },
    '3' : { text: 'study', rel: {'child': []}, isCollapsed: false  },
    '4' : { text: 'bathroom', rel: {'child': []}, isCollapsed: false  },
    '5' : { text: 'groceries', rel: {'child': ['6','7']}, isCollapsed: false  },
    '6' : { text: 'milk', rel: {'child': []}, isCollapsed: false  },
    '7' : { text: 'eggs', rel: {'child': []}, isCollapsed: false  },
}
const dummyEnvironment = {
    homePath: [{rel:'root',id:'0'}, {rel:'child', id:'1'}, {rel:'child', id:'5'}] as Types.NodePath,
    activeNode: null,
}

Extension points exported contracts — how you extend this code

TreeNodeProps (Interface)
Display Components & Props
src/chk/types.d.ts
ChkFlowState (Interface)
(no doc)
src/chk/types.d.ts
ChkFlowNode (Interface)
(no doc)
src/chk/types.d.ts
BaseNodeInfo (Interface)
(no doc)
src/chk/types.d.ts
ContainerProps (Interface)
(no doc)
src/chk/types.d.ts

Core symbols most depended-on inside this repo

pathCurrentLast
called by 8
src/chk/Utils.ts
getSubs
called by 8
src/chk/Utils.ts
getVisuallyNextNodePath
called by 8
src/chk/Utils.ts
getVisuallyPreviousNodePath
called by 8
src/chk/Utils.ts
setStateAndSave
called by 8
src/chk/ChkFlow.tsx
pathCurrent
called by 7
src/chk/Utils.ts
delArrayPrefix
called by 6
src/chk/Utils.ts
pathParent
called by 5
src/chk/Utils.ts

Shape

Function 48
Method 16
Interface 5
Class 2

Languages

TypeScript100%

Modules by API surface

src/chk/Utils.ts31 symbols
src/chk/ChkFlow.tsx18 symbols
src/chk/DefaultTreeNode.tsx8 symbols
src/chk/types.d.ts5 symbols
src/App.tsx4 symbols
src/chk/DefaultContainer.tsx3 symbols
src/__tests__/test_keyboard_events.test.tsx1 symbols
config/webpack.package.config.js1 symbols

For agents

$ claude mcp add chkflow \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact