English | 中文 | Español | Français | Português | Русский | 日本語 | 한국어
Mind elixir es un núcleo de mapas mentales de JavaScript de código abierto. Puedes usarlo con cualquier framework frontend que prefieras.
- UX fluida - Interacciones suaves e intuitivas
- Bien diseñado - Interfaz limpia y moderna
- Compatible con móviles - Eventos táctiles para dispositivos móviles
- Atajos eficientes - Atajos de teclado para usuarios avanzados
- Ligero - Tamaño de paquete mínimo
- Alto rendimiento - Optimizado para mapas mentales grandes
- Agnóstico al framework - Funciona con cualquier framework frontend
- Extensible - Arquitectura de plugins
- Edición interactiva - Capacidades de arrastrar y soltar / edición de nodos incorporadas
- Operaciones masivas - Selección y operación de múltiples nodos
- Deshacer / Rehacer - Historial completo de operaciones
- Conexiones de nodos y resumen - Enlace personalizado de nodos y resumen de contenido
- Múltiples formatos de exportación - Exportación SVG / PNG / HTML
- Estilizado fácil - Personaliza mapas mentales con variables CSS
- Soporte de temas - Temas incorporados y estilizado personalizado
Tabla de Contenidos
- Vanilla JS - https://codepen.io/ssshooter/pen/vEOqWjE
- React - https://codesandbox.io/p/devbox/mind-elixir-3-x-react-18-x-forked-f3mtcd
- Vue3 - https://codesandbox.io/p/sandbox/mind-elixir-3-x-vue3-lth484
npm i mind-elixir -Simport MindElixir from 'mind-elixir'<script type="module" src="https://cdn.jsdelivr.net/npm/mind-elixir/dist/MindElixir.js"></script>Y en tu archivo CSS:
@import 'https://cdn.jsdelivr.net/npm/mind-elixir/dist/style.css';<div id="map"></div>
<style>
#map {
height: 500px;
width: 100%;
}
</style>Cambio Importante desde la versión 1.0.0, data debe ser pasado a init(), no options.
import MindElixir from 'mind-elixir'
import { es } from 'mind-elixir/i18n'
import example from 'mind-elixir/dist/example1'
let options = {
el: '#map', // o HTMLDivElement
direction: MindElixir.LEFT,
draggable: true, // por defecto true
contextMenu: true, // por defecto true
toolBar: true, // por defecto true
keypress: true, // por defecto true
overflowHidden: false, // por defecto false
mouseSelectionButton: 0, // 0 para botón izquierdo, 2 para botón derecho, por defecto 0
contextMenu: {
locale: es,
focus: true,
link: true,
extend: [
{
name: 'Editar nodo',
onclick: () => {
alert('menú extendido')
},
},
],
},
before: {
insertSibling(el, obj) {
return true
},
async addChild(el, obj) {
await sleep()
return true
},
},
}
let mind = new MindElixir(options)
mind.install(plugin) // instala tu plugin
// crea nuevos datos de mapa
const data = MindElixir.new('nuevo tema')
// o `example`
// o los datos devueltos por `.getData()`
mind.init(data)
// obtener un nodo
MindElixir.E('node-id')// estructura completa de datos de nodo hasta ahora
const nodeData = {
topic: 'tema del nodo',
id: 'bd1c24420cd2c2f5',
style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' },
expanded: true,
parent: null,
tags: ['Etiqueta'],
icons: ['😀'],
hyperLink: 'https://github.com/ssshooter/mind-elixir-core',
image: {
url: 'https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/logo2.png', // requerido
// necesitas consultar la altura y el ancho de la imagen y calcular el valor apropiado para mostrar la imagen
height: 90, // requerido
width: 90, // requerido
},
children: [
{
topic: 'hijo',
id: 'xxxx',
// ...
},
],
}mind.bus.addListener('operation', operation => {
console.log(operation)
// return {
// name: nombre de la acción,
// obj: objeto objetivo
// }
// name: [insertSibling|addChild|removeNode|beginEdit|finishEdit]
// obj: objetivo
// name: moveNode
// obj: {from:objetivo1,to:objetivo2}
})
mind.bus.addListener('selectNodes', nodes => {
console.log(nodes)
})
mind.bus.addListener('expandNode', node => {
console.log('expandNode: ', node)
})// exportación de datos
const data = mind.getData() // objeto javascript, ver src/example.js
mind.getDataString() // objeto en cadena
// importación de datos
// iniciar
let mind = new MindElixir(options)
mind.init(data)
// actualización de datos
mind.refresh(data)Mind Elixir soporta análisis de markdown personalizado:
// Deshabilitar markdown (predeterminado)
let mind = new MindElixir({
// opción markdown omitida - sin procesamiento markdown
})
// Usar analizador markdown personalizado
let mind = new MindElixir({
markdown: text => {
// Tu implementación markdown personalizada
return text
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
.replace(/\*(.*?)\*/g, '<em>$1</em>')
.replace(/`(.*?)`/g, '<code>$1</code>')
},
})
// Usar cualquier biblioteca markdown (ej. marked, markdown-it, etc.)
import { marked } from 'marked'
let mind = new MindElixir({
markdown: text => marked(text),
})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
},
},
})Instala @zumer/snapdom, luego:
import { snapdom } from '@zumer/snapdom'
const download = async () => {
const result = await snapdom(mind.nodes)
await result.download({ format: 'jpg', filename: 'my-capture' })
}Para otros formatos de exportación y opciones avanzadas, consulta la documentación de Mind Elixir.
⚠️ Obsoleto: El métodomind.exportSvg()está obsoleto y se eliminará en una versión futura.
// OBSOLETO - No usar en nuevos proyectos
const svgData = await mind.exportSvg()const options = {
// ...
theme: {
name: 'Oscuro',
// paleta de colores de las líneas principales
palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],
// sobrescribir variables css
cssVar: {
'--main-color': '#ffffff',
'--main-bgcolor': '#4c4f69',
'--color': '#cccccc',
'--bgcolor': '#252526',
'--panel-color': '255, 255, 255',
'--panel-bgcolor': '45, 55, 72',
},
// todas las variables ver /src/index.less
},
// ...
}
// ...
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',
},
})Ten en cuenta que Mind Elixir no observará el cambio de prefers-color-scheme. Por favor, cambia el tema manualmente cuando el esquema cambie.
Consulta la Guía de Atajos para información detallada.
- @mind-elixir/node-menu
- @mind-elixir/node-menu-neo
- @mind-elixir/export-xmind
- @mind-elixir/export-html
- mind-elixir-react
¡Las PRs son bienvenidas!
pnpm i
pnpm dev
Prueba los archivos generados con dev.dist.ts:
pnpm build
pnpm link ./
Actualiza la documentación:
# Instalar api-extractor
pnpm install -g @microsoft/api-extractor
# Mantener /src/docs.ts
# Generar documentación
pnpm doc
pnpm doc:md
Usa DeepWiki para aprender más sobre Mind Elixir
¡Gracias por tus contribuciones a Mind Elixir! Tu apoyo y dedicación hacen que este proyecto sea mejor.
