• Stars
    star
    1,957
  • Rank 23,689 (Top 0.5 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 5 years ago
  • Updated 21 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

⚗ Mind Elixir is a JavaScript, framework-agnostic mind map core.

mindelixir logo2

Mind Elixir

version license code quality dependency-count dependency-count

中文 README

Mind elixir is a free open source mind map core.

  • Zero dependency
  • High performance
  • Lightweight
  • Framework agnostic
  • Pluginable
  • Build-in drag and drop / node edit plugin
  • Styling your node with CSS
Table of Contents

Doc

https://doc.mind-elixir.com/

Try now

mindelixir

https://mind-elixir.com/

Playground

Vanilla JS

https://codepen.io/ssshooter/pen/rNqGpwW

Use with React

https://codesandbox.io/s/mind-elixir-2-x-react-q9glxt

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', // or HTMLDivElement
  direction: MindElixir.LEFT,
  draggable: true, // default true
  contextMenu: true, // default true
  toolBar: true, // default true
  nodeMenu: true, // default true
  keypress: true, // default true
  locale: 'en', // [zh_CN,zh_TW,en,ja,pt,ru] waiting for PRs
  overflowHidden: false, // default false
  mainLinkStyle: 2, // [1,2] default 1
  mainNodeVerticalGap: 15, // default 25
  mainNodeHorizontalGap: 15, // default 65
  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) // install your plugin

// create new map data
const data = MindElixir.new('new topic')
// or `example`
// or the data return from `.getData()`
mind.init(data)

// get a node
E('node-id')

Data Structure

// whole node data structure up to now
const 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/logo2.png', // required
    // you need to query the height and width of the image and calculate the appropriate value to display the image
    height: 90, // required
    width: 90, // required
  },
  children: [
    {
      topic: 'child',
      id: 'xxxx',
      // ...
    },
  ],
}

Event Handling

mind.bus.addListener('operation', operation => {
  console.log(operation)
  // return {
  //   name: action name,
  //   obj: target object
  // }

  // name: [insertSibling|addChild|removeNode|beginEdit|finishEdit]
  // obj: target

  // name: moveNode
  // obj: {from:target1,to:target2}
})

mind.bus.addListener('selectNode', node => {
  console.log(node)
})

mind.bus.addListener('expandNode', node => {
  console.log('expandNode: ', node)
})

Data Export And Import

// data export
const data = mind.getData() // javascript object, see src/example.js
mind.getDataString() // stringify object
mind.getDataMd() // markdown

// data import
// initiate
let mind = new MindElixir(options)
mind.init(data)
// data update
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
    },
  },
})

Theme

const options = {
  // ...
  theme: {
    name: 'Dark',
    // main lines color palette
    palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],
    // overwrite css variables
    cssVar: {
      '--main-color': '#ffffff',
      '--main-bgcolor': '#4c4f69',
      '--color': '#cccccc',
      '--bgcolor': '#252526',
    },
    // all variables see /src/index.less
  },
  // ...
}

Not only core

More Repositories

1

img-vuer

An Mobile-First image viewer for Vue3 / 一个移动端优先的 Vue3 图片预览插件
Vue
262
star
2

nippon-color

copy nippon-color PWA build with vue-cli 3
JavaScript
112
star
3

MyDiary-Vue

vue构建的日记应用 来源于「君の名は」( Mydiary created with Vue2 )
Vue
85
star
4

mongoose-doc-cn

mongoose 5.0 中文文档
JavaScript
81
star
5

canvas-img-process

html5 canvas image process ( 3*3 kernel ) canvas卷积核测试 canvas图片后期
Vue
35
star
6

Creepy.CSS

a creepy style UI
CSS
32
star
7

Front-End-EXP

前端的一些坑,一些记录,一些冷知识
29
star
8

PSN-node-displayer

Come on! Show your PSN trophy!
Vue
23
star
9

syncHime

Chrome 同步看视频插件
JavaScript
18
star
10

img-uploader

image-uploader
Vue
16
star
11

gatsby-theme-usubeni

Gatsby Theme For Blog
JavaScript
12
star
12

MyDiary-API

restful API for MyDiary
JavaScript
10
star
13

export-xmind

You can use `@mind-elixir/export-xmind` to export a `.xmind` file.
JavaScript
8
star
14

gatsby-blog-starter

yet another Gatsby blog starter
JavaScript
8
star
15

MyDiary

The diary app in the movie Your Name (Japanese: 君の名は。 Hepburn: Kimi no Na wa. Chinese:你的名字)
JavaScript
8
star
16

caption-blocker

caption blocker 是一个简易字幕遮挡工具
JavaScript
4
star
17

mind-elixir-cloud

Vue
4
star
18

call-map

Check function outgoing/incoming calls as a Mind Map.
TypeScript
4
star
19

mind-elixir-react

react component of mind elixir
JavaScript
3
star
20

node-menu

A node menu plugin of mind-elixir
TypeScript
3
star
21

node-menu-neo

TypeScript
2
star
22

gbf.auto.ahk

granblue fantasy auto script running with autohotkey
AutoHotkey
2
star
23

PSN-node

APIs for fetching psn trophy information
JavaScript
2
star
24

mind-elixir-vue

JavaScript
2
star
25

mark-elixir

TypeScript
1
star
26

photoshop

1
star
27

nest-mongodb-starter

1
star
28

pixivDownloader

输入id,下载大图
JavaScript
1
star
29

v-finger

v-finger
JavaScript
1
star
30

ac-exchange-system

一个未命名甚至未发布的动森大头菜交易系统
Vue
1
star
31

nippon-color-native

nippon-color with react native
JavaScript
1
star
32

lightweight-tour-guide

超轻量网页引导、教程直接复制直接用
JavaScript
1
star
33

mind-elixir-plugin-template

JavaScript
1
star