Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" 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# orpnpm i mind-elixir# oryarn 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'// 1. Define optionslet options = {el: '#map', // or HTMLDivElementdirection: MindElixir.LEFT,toolBar: true, // default truekeypress: true, // default trueoverflowHidden: false, // default falsemouseSelectionButton: 0, // 0 for left button, 2 for right button, default 0contextMenu: {locale: en, // [cn,zh_CN,zh_TW,en,ru,ja,pt,it,es,fr,ko,ro,da,fi,de,nl,nb,sv]focus: true,link: true,extend: [{name: 'Node edit',onclick: () => {alert('extend menu')},},],}, // default truebefore: {insertSibling(type, obj) {return true},},// Custom markdown parser (optional)// markdown: (text) => customMarkdownParser(text), // provide your own markdown parser function}// 2. Create instancelet mind = new MindElixir(options)// 3. Initialize with data// Create new dataconst data = MindElixir.new('new topic')// Or use existing data passed from backend// const data = { ... }mind.init(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() // Returns the current data objectconst dataString = mind.getDataString() // Returns serialized data string
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.
// Listen to all operationsmind.bus.addListener('operation', operation => {console.log(operation)// operation: { name: 'action_name', obj: target_object }})// Listen to node selectionmind.bus.addListener('selectNodes', nodes => {console.log(nodes)})// Listen to node expansionmind.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({// ... other optionsbefore: {// Return true to allow, false to prevent// Supports async functionsasync addChild(el, obj) {try {await saveDataToDb()return true} catch (err) {return false // Operation blocked}},// Other hooks: insertSibling, removeNode, moveNode, etc.},})
7. Theme Customization
You can customize the theme during initialization or dynamically.
const options = {// ...theme: {name: 'Dark',// main lines color palettepalette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],// overwrite css variablescssVar: {'--main-color': '#ffffff','--main-bgcolor': '#4c4f69','--color': '#cccccc','--bgcolor': '#252526','--panel-color': '255, 255, 255','--panel-bgcolor': '45, 55, 72',},// all variables see /src/index.less},// ...}
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',},})