Skip to content

Latest commit

 

History

History
453 lines (361 loc) · 12.1 KB

File metadata and controls

453 lines (361 loc) · 12.1 KB

mindelixir logo2

Mind Elixir

SSShooter%2Fmind-elixir-core | Trendshift

versión licencia calidad del código cantidad de dependencias tamaño del paquete

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.

Características

🎨 Experiencia de Usuario

  • 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

Rendimiento y Arquitectura

  • 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

🛠️ Características Principales

  • 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

📤 Exportación y Personalización

  • 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

v5 Cambios Rupturistas

Tabla de Contenidos

Prueba ahora

mindelixir

https://mind-elixir.com/

Playground

Documentación

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

Uso

Instalar

NPM

npm i mind-elixir -S
import MindElixir from 'mind-elixir'

Etiqueta de script

<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';

Inicializar

<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 de Datos

// 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',
      // ...
    },
  ],
}

Manejo de Eventos

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 e Importación de Datos

// 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)

Soporte de Markdown

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),
})

Guardias de Operación

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
    },
  },
})

Exportar como Imagen

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.

API Obsoleta

⚠️ Obsoleto: El método mind.exportSvg() está obsoleto y se eliminará en una versión futura.

// OBSOLETO - No usar en nuevos proyectos
const svgData = await mind.exportSvg()

Tema

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.

Atajos

Consulta la Guía de Atajos para información detallada.

¿Quién lo está usando?

Ecosistema

¡Las PRs son bienvenidas!

Desarrollo

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

Agradecimientos

Contribuidores

¡Gracias por tus contribuciones a Mind Elixir! Tu apoyo y dedicación hacen que este proyecto sea mejor.