illustrate
The content is based on the original author and the following configuration items have been added:
{
"lastEdit": true,
"customStyle": true,
"maxDepth": 5,
"memoName": "功能描述"
}

中文 README
Mind elixir is a free open source mind map core.
- High performance
- Lightweight
- Framework agnostic
- Pluginable
- Build-in drag and drop / node edit plugin
Table of Contents
Doc
https://doc.mind-elixir.com/
Try now

https://mind-elixir.com/
Playground
Vanilla JS
https://codepen.io/ssshooter/pen/GVQRYK
Use with React
https://codesandbox.io/s/mind-elixir-react-9sisb
Use with Vue
https://codesandbox.io/s/mind-elixir-vue-nqjjl
Use with Vue3
https://codesandbox.io/s/mind-elixir-vue3-dtcq6u
Usage
Install
NPM
npm i mind-elixir -S
import MindElixir, { E } from 'mind-elixir'
Script tag
<script src="https://cdn.jsdelivr.net/npm/mind-elixir/dist/MindElixir.js"></script>
HTML structure
<div id="map"></div>
<style>
#map {
height: 500px;
width: 100%;
}
</style>
Init
Breaking Change since 1.0.0, data should be passed to init(), not options.
import MindElixir, { E } from 'mind-elixir'
import example from 'mind-elixir/dist/example1'
let options = {
el: '#map',
direction: MindElixir.LEFT,
draggable: true,
contextMenu: true,
toolBar: true,
nodeMenu: true,
keypress: true,
locale: 'en',
lastEdit: true,
customStyle: true,
maxDepth: 5,
memoName: '功能描述',
overflowHidden: false,
primaryLinkStyle: 2,
primaryNodeVerticalGap: 15,
primaryNodeHorizontalGap: 15,
contextMenuOption: {
focus: true,
link: true,
extend: [
{
name: 'Node edit',
onclick: () => {
alert('extend menu')
},
},
],
},
allowUndo: false,
before: {
insertSibling(el, obj) {
return true
},
async addChild(el, obj) {
await sleep()
return true
},
},
}
let mind = new MindElixir(options)
mind.install(plugin)
const data = MindElixir.new('new topic')
mind.init(data)
E('node-id')
Data Structure
nodeData = {
topic: 'node topic',
id: 'bd1c24420cd2c2f5',
style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' },
parent: null,
tags: ['Tag'],
icons: ['😀'],
hyperLink: 'https://github.com/ssshooter/mind-elixir-core',
image: {
url: 'https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/logo.png',
height: 90,
width: 300,
},
children: [
{
topic: 'child',
id: 'xxxx',
},
],
}
Event Handling
mind.bus.addListener('operation', operation => {
console.log(operation)
})
mind.bus.addListener('selectNode', node => {
console.log(node)
})
mind.bus.addListener('expandNode', node => {
console.log('expandNode: ', node)
})
Data Export And Import
const data = mind.getAllData()
mind.getAllDataString()
mind.getAllDataMd()
let mind = new MindElixir(options)
mind.init(data)
mind.refresh(data)
Operation Guards
let mind = new MindElixir({
before: {
insertSibling(el, obj) {
console.log(el, obj)
if (this.currentNode.nodeObj.parent.root) {
return false
}
return true
},
async addChild(el, obj) {
await sleep()
if (this.currentNode.nodeObj.parent.root) {
return false
}
return true
},
},
})
Not only core