| name | Integrate Mind Elixir |
| description | Guide for integrating Mind Elixir into a frontend project, covering installation, initialization, data structure, and basic usage. |
Integrate Mind Elixir
This skill guides you through the process of integrating mind-elixir into a frontend project. Mind Elixir is a framework-agnostic JavaScript mind map core.
1. Installation
You can install Mind Elixir via your package manager or use a script tag.
NPM / Yarn / PNPM
npm i mind-elixir -S
pnpm i mind-elixir
yarn add mind-elixir
Script Tag
<script type="module" src="https://cdn.jsdelivr.net/npm/mind-elixir/dist/MindElixir.js"></script>
CSS:
If you use the script tag, you also need to import the CSS:
@import 'https://cdn.jsdelivr.net/npm/mind-elixir/dist/style.css';
2. Basic Usage
HTML Structure
Create a container for the mind map.
<div id="map"></div>
<style>
#map {
height: 500px;
width: 100%;
}
</style>
Initialization
Import and initialize Mind Elixir in your JavaScript/TypeScript file.
import MindElixir from 'mind-elixir'
import { en } from 'mind-elixir/i18n'
import 'mind-elixir/style.css'
let options = {
el: '#map',
direction: MindElixir.LEFT,
toolBar: true,
keypress: true,
overflowHidden: false,
mouseSelectionButton: 0,
contextMenu: {
locale: en,
focus: true,
link: true,
extend: [
{
name: 'Node edit',
onclick: () => {
alert('extend menu')
},
},
],
},
before: {
insertSibling(type, obj) {
return true
},
},
}
mind = (options)
data = .()
mind.(data)
3. Data Structure
The standard node data structure is as follows:
const nodeData = {
topic: 'node topic',
id: 'bd1c24420cd2c2f5',
style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' },
expanded: true,
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/logo2.png',
height: 90,
width: 90,
},
children: [
{
topic: 'child',
id: 'xxxx',
},
],
}
4. Basic Operations
Get Data
const data = mind.getData()
const dataString = mind.getDataString()
Refresh Data
If you have updated data from an external source or need to re-render:
mind.refresh(data)
5. Event Handling
You can listen to various events using mind.bus.
mind.bus.addListener('operation', operation => {
console.log(operation)
})
mind.bus.addListener('selectNodes', nodes => {
console.log(nodes)
})
mind.bus.addListener('expandNode', node => {
console.log('expandNode: ', node)
})
6. Operation Guards
You can use before hooks to intercept and control user operations. This is useful for asynchronous validation or saving data before applying changes.
let mind = new MindElixir({
before: {
async addChild(el, obj) {
try {
await saveDataToDb()
return true
} catch (err) {
return false
}
},
},
})
7. Theme Customization
You can customize the theme during initialization or dynamically.
const options = {
theme: {
name: 'Dark',
palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],
cssVar: {
'--main-color': '#ffffff',
'--main-bgcolor': '#4c4f69',
'--color': '#cccccc',
'--bgcolor': '#252526',
'--panel-color': '255, 255, 255',
'--panel-bgcolor': '45, 55, 72',
},
},
}
Change theme dynamically:
mind.changeTheme({
name: 'Latte',
palette: ['#dd7878', '#ea76cb', '#8839ef', '#e64553', '#fe640b', '#df8e1d', '#40a02b', '#209fb5', '#1e66f5', '#7287fd'],
cssVar: {
'--main-color': '#444446',
'--main-bgcolor': '#ffffff',
'--color': '#777777',
'--bgcolor': '#f6f6f6',
},
})