mindelixir logo2

Mind Elixir

version license code quality dependency-count package size

[English](/readme.md) | [中文](/readme/zh.md) | [Español](/readme/es.md) | [Français](/readme/fr.md) | [Português](/readme/pt.md) | [Русский](/readme/ru.md) | [日本語](/readme/ja.md) | [한국어](/readme/ko.md) Mind Elixirは、オープンソースのJavaScriptマインドマップコアです。お好みのフロントエンドフレームワークと組み合わせて使用できます。 特徴: - 軽量 - 高パフォーマンス - フレームワーク非依存 - プラグイン対応 - ドラッグ&ドロップ/ノード編集プラグイン内蔵 - SVG/PNG/HTMLとしてエクスポート可能 - ノードの要約 - 一括操作対応 - 元に戻す/やり直し - 効率的なショートカット - CSSカスタマイズが容易
目次 - [デモを試す](#デモを試す) - [プレイグラウンド](#プレイグラウンド) - [ドキュメント](#ドキュメント) - [使い方](#使い方) - [インストール](#インストール) - [NPM](#npm) - [スクリプトタグ](#スクリプトタグ) - [初期化](#初期化) - [データ構造](#データ構造) - [イベントハンドリング](#イベントハンドリング) - [データのエクスポートとインポート](#データのエクスポートとインポート) - [操作ガード](#操作ガード) - [画像としてエクスポート](#画像としてエクスポート) - [方法1](#方法1) - [方法2](#方法2) - [テーマ](#テーマ) - [ショートカット](#ショートカット) - [エコシステム](#エコシステム) - [開発](#開発) - [謝辞](#謝辞) - [貢献者](#貢献者)
## デモを試す ![mindelixir](https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/screenshot2.png) https://mind-elixir.com/ ### プレイグラウンド - Vanilla JS - https://codepen.io/ssshooter/pen/OJrJowN - React - https://codesandbox.io/s/mind-elixir-3-x-react-18-x-vy9fcq - Vue3 - https://codesandbox.io/s/mind-elixir-3-x-vue3-lth484 - Vue2 - https://codesandbox.io/s/mind-elixir-3-x-vue-2-x-5kdfjp ## ドキュメント https://docs.mind-elixir.com/ ## 使い方 ### インストール #### NPM ```bash npm i mind-elixir -S ``` ```javascript import MindElixir from 'mind-elixir' ``` #### スクリプトタグ ```html ``` ### 初期化 ```html
``` **重要な変更** バージョン1.0.0以降、`data`は`options`ではなく`init()`に渡す必要があります。 ```javascript import MindElixir from 'mind-elixir' import example from 'mind-elixir/dist/example1' let options = { el: '#map', // またはHTMLDivElement direction: MindElixir.LEFT, draggable: true, // デフォルトはtrue contextMenu: true, // デフォルトはtrue toolBar: true, // デフォルトはtrue nodeMenu: true, // デフォルトはtrue keypress: true, // デフォルトはtrue locale: 'ja', // [zh_CN,zh_TW,en,ja,pt,ru] PRs募集中 overflowHidden: false, // デフォルトはfalse mainLinkStyle: 2, // [1,2] デフォルトは1 mouseSelectionButton: 0, // 0は左クリック、2は右クリック、デフォルトは0 contextMenuOption: { focus: true, link: true, extend: [ { name: 'ノード編集', onclick: () => { alert('拡張メニュー') }, }, ], }, before: { insertSibling(el, obj) { return true }, async addChild(el, obj) { await sleep() return true }, }, } let mind = new MindElixir(options) mind.install(plugin) // プラグインのインストール // 新しいマップデータの作成 const data = MindElixir.new('新しいトピック') // または `example` // または `.getData()`の戻り値 mind.init(data) // ノードの取得 MindElixir.E('node-id') ``` ### データ構造 ```javascript // 現在のノードデータ構造 const nodeData = { topic: 'ノードのトピック', id: 'bd1c24420cd2c2f5', style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' }, expanded: true, parent: null, tags: ['タグ'], 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: '子ノード', id: 'xxxx', // ... }, ], } ``` ### イベントハンドリング ```javascript 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('selectNodes', nodes => { console.log(nodes) }) mind.bus.addListener('expandNode', node => { console.log('expandNode: ', node) }) ``` ### データのエクスポートとインポート ```javascript // データのエクスポート const data = mind.getData() // JavaScriptオブジェクト、src/example.jsを参照 mind.getDataString() // オブジェクトを文字列化 // データのインポート // 初期化 let mind = new MindElixir(options) mind.init(data) // データの更新 mind.refresh(data) ``` ### 操作ガード ```javascript 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 }, }, }) ``` ## 画像としてエクスポート ### 方法1 ```typescript const mind = { /** mind elixir instance */ } const downloadPng = async () => { const blob = await mind.exportPng() // Blobを取得 if (!blob) return const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = 'filename.png' a.click() URL.revokeObjectURL(url) } ``` ### 方法2 `@ssshooter/modern-screenshot`をインストールし、次に実行します: ```typescript import { domToPng } from '@ssshooter/modern-screenshot' const download = async () => { const dataUrl = await domToPng(mind.nodes, { onCloneNode: node => { const n = node as HTMLDivElement n.style.position = '' n.style.top = '' n.style.left = '' n.style.bottom = '' n.style.right = '' }, padding: 300, quality: 1, }) const link = document.createElement('a') link.download = 'screenshot.png' link.href = dataUrl link.click() } ``` ## テーマ ```javascript const options = { // ... theme: { name: 'Dark', // メインラインのカラーパレット palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'], // CSS変数の上書き cssVar: { '--main-color': '#ffffff', '--main-bgcolor': '#4c4f69', '--color': '#cccccc', '--bgcolor': '#252526', '--panel-color': '255, 255, 255', '--panel-bgcolor': '45, 55, 72', }, // すべての変数は/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', }, }) ``` Mind Elixirは`prefers-color-scheme`の変更を監視しません。スキームが変更された場合は、テーマを**手動で**変更してください。 ## ショートカット | ショートカット | 機能 | | ------------------ | -------------------------------- | | Enter | 兄弟ノードを挿入 | | Tab | 子ノードを挿入 | | F1 | マップを中央に配置 | | F2 | 現在のノードの編集を開始 | | ↑ | 前の兄弟ノードを選択 | | ↓ | 次の兄弟ノードを選択 | | ← / → | 親または最初の子ノードを選択 | | PageUp / Alt + ↑ | ノードを上に移動 | | PageDown / Alt + ↓ | ノードを下に移動 | | Ctrl + ↑ | レイアウトパターンをサイドに変更 | | Ctrl + ← | レイアウトパターンを左に変更 | | Ctrl + → | レイアウトパターンを右に変更 | | Ctrl + C | 現在のノードをコピー | | Ctrl + V | コピーしたノードを貼り付け | | Ctrl + "+" | マインドマップをズームイン | | Ctrl + "-" | マインドマップをズームアウト | | Ctrl + 0 | ズームレベルをリセット | ## エコシステム - [@mind-elixir/node-menu](https://github.com/ssshooter/node-menu) - [@mind-elixir/node-menu-neo](https://github.com/ssshooter/node-menu-neo) - [@mind-elixir/export-xmind](https://github.com/ssshooter/export-xmind) - [@mind-elixir/export-html](https://github.com/ssshooter/export-html) - [mind-elixir-react](https://github.com/ssshooter/mind-elixir-react) PRsは大歓迎です! ## 開発 ``` pnpm i pnpm dev ``` `dev.dist.ts`で生成されたファイルをテストします: ``` pnpm build pnpm link ./ ``` ドキュメントを更新します: ``` # api-extractorをインストール pnpm install -g @microsoft/api-extractor # /src/docs.tsを維持 # ドキュメントを生成 pnpm doc pnpm doc:md ``` ## 謝辞 - [@viselect/vanilla](https://github.com/simonwep/selection/tree/master/packages/vanilla) ## 貢献者 Mind Elixirへの貢献に感謝します!あなたのサポートと献身がこのプロジェクトをより良くします。