mind-elixir 5.2.0-beta.6 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/readme/zh.md ADDED
@@ -0,0 +1,430 @@
1
+ <p align="center">
2
+ <a href="https://docs.mind-elixir.com" target="_blank" rel="noopener noreferrer">
3
+ <img width="150" src="https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/logo2.png" alt="mindelixir logo2">
4
+ </a>
5
+ <h1 align="center">Mind Elixir</h1>
6
+ </p>
7
+
8
+ <p align="center">
9
+ <a href="https://www.npmjs.com/package/mind-elixir">
10
+ <img src="https://img.shields.io/npm/v/mind-elixir" alt="version">
11
+ </a>
12
+ <a href="https://github.com/ssshooter/mind-elixir-core/blob/master/LICENSE">
13
+ <img src="https://img.shields.io/npm/l/mind-elixir" alt="license">
14
+ </a>
15
+ <a href="https://app.codacy.com/gh/ssshooter/mind-elixir-core?utm_source=github.com&utm_medium=referral&utm_content=ssshooter/mind-elixir-core&utm_campaign=Badge_Grade_Settings">
16
+ <img src="https://api.codacy.com/project/badge/Grade/09fadec5bf094886b30cea6aabf3a88b" alt="code quality">
17
+ </a>
18
+ <a href="https://bundlephobia.com/result?p=mind-elixir">
19
+ <img src="https://badgen.net/bundlephobia/dependency-count/mind-elixir" alt="dependency-count">
20
+ </a>
21
+ <a href="https://packagephobia.com/result?p=mind-elixir">
22
+ <img src="https://packagephobia.com/badge?p=mind-elixir" alt="package size">
23
+ </a>
24
+ </p>
25
+
26
+ [English](/readme.md) |
27
+ [中文](/readme/zh.md) |
28
+ [Español](/readme/es.md) |
29
+ [Français](/readme/fr.md) |
30
+ [Português](/readme/pt.md) |
31
+ [Русский](/readme/ru.md) |
32
+ [日本語](/readme/ja.md) |
33
+ [한국어](/readme/ko.md)
34
+
35
+ Mind elixir 是一个开源的 JavaScript 思维导图核心。你可以在任何前端框架中使用它。
36
+
37
+ 特点:
38
+
39
+ - 轻量级
40
+ - 高性能
41
+ - 框架无关
42
+ - 插件化
43
+ - 内置拖放 / 节点编辑插件
44
+ - 导出为 SVG / PNG / Html
45
+ - 总结节点
46
+ - 支持批量操作
47
+ - 撤销 / 重做
48
+ - 高效快捷键
49
+ - 轻松使用 CSS 变量样式化节点
50
+
51
+ <details>
52
+ <summary>目录</summary>
53
+
54
+ - [立即试用](#立即试用)
55
+ - [演示](#演示)
56
+ - [文档](#文档)
57
+ - [使用](#使用)
58
+ - [安装](#安装)
59
+ - [NPM](#npm)
60
+ - [Script 标签](#script-标签)
61
+ - [初始化](#初始化)
62
+ - [数据结构](#数据结构)
63
+ - [事件处理](#事件处理)
64
+ - [数据导出和导入](#数据导出和导入)
65
+ - [操作守卫](#操作守卫)
66
+ - [导出为图片](#导出为图片)
67
+ - [方案 1](#方案-1)
68
+ - [方案 2](#方案-2)
69
+ - [主题](#主题)
70
+ - [快捷键](#快捷键)
71
+ - [生态](#生态)
72
+ - [开发](#开发)
73
+ - [感谢](#感谢)
74
+ - [贡献者](#贡献者)
75
+
76
+ </details>
77
+
78
+ ## 立即试用
79
+
80
+ ![mindelixir](https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/screenshot2.png)
81
+
82
+ https://mind-elixir.com/
83
+
84
+ ### 演示
85
+
86
+ - 原生 JS - https://codepen.io/ssshooter/pen/OJrJowN
87
+ - React - https://codesandbox.io/s/mind-elixir-3-x-react-18-x-vy9fcq
88
+ - Vue3 - https://codesandbox.io/s/mind-elixir-3-x-vue3-lth484
89
+ - Vue2 - https://codesandbox.io/s/mind-elixir-3-x-vue-2-x-5kdfjp
90
+
91
+ ## 文档
92
+
93
+ https://docs.mind-elixir.com/
94
+
95
+ ## 使用
96
+
97
+ ### 安装
98
+
99
+ #### NPM
100
+
101
+ ```bash
102
+ npm i mind-elixir -S
103
+ ```
104
+
105
+ ```javascript
106
+ import MindElixir from 'mind-elixir'
107
+ ```
108
+
109
+ #### Script 标签
110
+
111
+ ```html
112
+ <script type="module" src="https://cdn.jsdelivr.net/npm/mind-elixir/dist/MindElixir.js"></script>
113
+ ```
114
+
115
+ ### 初始化
116
+
117
+ ```html
118
+ <div id="map"></div>
119
+ <style>
120
+ #map {
121
+ height: 500px;
122
+ width: 100%;
123
+ }
124
+ </style>
125
+ ```
126
+
127
+ **重大变更** 自 1.0.0 起,`data` 应传递给 `init()`,而不是 `options`。
128
+
129
+ ```javascript
130
+ import MindElixir from 'mind-elixir'
131
+ import example from 'mind-elixir/dist/example1'
132
+
133
+ let options = {
134
+ el: '#map', // 或 HTMLDivElement
135
+ direction: MindElixir.LEFT,
136
+ draggable: true, // 默认 true
137
+ contextMenu: true, // 默认 true
138
+ toolBar: true, // 默认 true
139
+ nodeMenu: true, // 默认 true
140
+ keypress: true, // 默认 true
141
+ locale: 'en', // [zh_CN,zh_TW,en,ja,pt,ru] 等待 PRs
142
+ overflowHidden: false, // 默认 false
143
+ mainLinkStyle: 2, // [1,2] 默认 1
144
+ mouseSelectionButton: 0, // 0 为左键,2 为右键,默认 0
145
+ contextMenuOption: {
146
+ focus: true,
147
+ link: true,
148
+ extend: [
149
+ {
150
+ name: '节点编辑',
151
+ onclick: () => {
152
+ alert('扩展菜单')
153
+ },
154
+ },
155
+ ],
156
+ },
157
+ before: {
158
+ insertSibling(el, obj) {
159
+ return true
160
+ },
161
+ async addChild(el, obj) {
162
+ await sleep()
163
+ return true
164
+ },
165
+ },
166
+ }
167
+
168
+ let mind = new MindElixir(options)
169
+
170
+ mind.install(plugin) // 安装你的插件
171
+
172
+ // 创建新的地图数据
173
+ const data = MindElixir.new('new topic')
174
+ // 或 `example`
175
+ // 或从 `.getData()` 返回的数据
176
+ mind.init(data)
177
+
178
+ // 获取一个节点
179
+ MindElixir.E('node-id')
180
+ ```
181
+
182
+ ### 数据结构
183
+
184
+ ```javascript
185
+ // 到目前为止的整个节点数据结构
186
+ const nodeData = {
187
+ topic: '节点主题',
188
+ id: 'bd1c24420cd2c2f5',
189
+ style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' },
190
+ expanded: true,
191
+ parent: null,
192
+ tags: ['标签'],
193
+ icons: ['😀'],
194
+ hyperLink: 'https://github.com/ssshooter/mind-elixir-core',
195
+ image: {
196
+ url: 'https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/logo2.png', // 必填
197
+ // 你需要查询图片的高度和宽度,并计算显示图片的适当值
198
+ height: 90, // 必填
199
+ width: 90, // 必填
200
+ },
201
+ children: [
202
+ {
203
+ topic: '子节点',
204
+ id: 'xxxx',
205
+ // ...
206
+ },
207
+ ],
208
+ }
209
+ ```
210
+
211
+ ### 事件处理
212
+
213
+ ```javascript
214
+ mind.bus.addListener('operation', operation => {
215
+ console.log(operation)
216
+ // 返回 {
217
+ // name: 操作名称,
218
+ // obj: 目标对象
219
+ // }
220
+
221
+ // name: [insertSibling|addChild|removeNode|beginEdit|finishEdit]
222
+ // obj: 目标
223
+
224
+ // name: moveNode
225
+ // obj: {from:目标1,to:目标2}
226
+ })
227
+
228
+
229
+ mind.bus.addListener('selectNodes', nodes => {
230
+ console.log(nodes)
231
+ })
232
+
233
+ mind.bus.addListener('expandNode', node => {
234
+ console.log('expandNode: ', node)
235
+ })
236
+ ```
237
+
238
+ ### 数据导出和导入
239
+
240
+ ```javascript
241
+ // 数据导出
242
+ const data = mind.getData() // JavaScript 对象,见 src/example.js
243
+ mind.getDataString() // 字符串化对象
244
+
245
+ // 数据导入
246
+ // 初始化
247
+ let mind = new MindElixir(options)
248
+ mind.init(data)
249
+ // 数据更新
250
+ mind.refresh(data)
251
+ ```
252
+
253
+ ### 操作守卫
254
+
255
+ ```javascript
256
+ let mind = new MindElixir({
257
+ // ...
258
+ before: {
259
+ insertSibling(el, obj) {
260
+ console.log(el, obj)
261
+ if (this.currentNode.nodeObj.parent.root) {
262
+ return false
263
+ }
264
+ return true
265
+ },
266
+ async addChild(el, obj) {
267
+ await sleep()
268
+ if (this.currentNode.nodeObj.parent.root) {
269
+ return false
270
+ }
271
+ return true
272
+ },
273
+ },
274
+ })
275
+ ```
276
+
277
+ ## 导出为图片
278
+
279
+ ### 方案 1
280
+
281
+ ```typescript
282
+ const mind = {
283
+ /** mind elixir 实例 */
284
+ }
285
+ const downloadPng = async () => {
286
+ const blob = await mind.exportPng() // 获取 Blob!
287
+ if (!blob) return
288
+ const url = URL.createObjectURL(blob)
289
+ const a = document.createElement('a')
290
+ a.href = url
291
+ a.download = 'filename.png'
292
+ a.click()
293
+ URL.revokeObjectURL(url)
294
+ }
295
+ ```
296
+
297
+ ### 方案 2
298
+
299
+ 安装 `@ssshooter/modern-screenshot`,然后:
300
+
301
+ ```typescript
302
+ import { domToPng } from '@ssshooter/modern-screenshot'
303
+
304
+ const download = async () => {
305
+ const dataUrl = await domToPng(mind.nodes, {
306
+ onCloneNode: node => {
307
+ const n = node as HTMLDivElement
308
+ n.style.position = ''
309
+ n.style.top = ''
310
+ n.style.left = ''
311
+ n.style.bottom = ''
312
+ n.style.right = ''
313
+ },
314
+ padding: 300,
315
+ quality: 1,
316
+ })
317
+ const link = document.createElement('a')
318
+ link.download = 'screenshot.png'
319
+ link.href = dataUrl
320
+ link.click()
321
+ }
322
+ ```
323
+
324
+ ## 主题
325
+
326
+ ```javascript
327
+ const options = {
328
+ // ...
329
+ theme: {
330
+ name: 'Dark',
331
+ // 主线颜色调色板
332
+ palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],
333
+ // 覆盖 CSS 变量
334
+ cssVar: {
335
+ '--main-color': '#ffffff',
336
+ '--main-bgcolor': '#4c4f69',
337
+ '--color': '#cccccc',
338
+ '--bgcolor': '#252526',
339
+ '--panel-color': '255, 255, 255',
340
+ '--panel-bgcolor': '45, 55, 72',
341
+ },
342
+ // 所有变量见 /src/index.less
343
+ },
344
+ // ...
345
+ }
346
+
347
+ // ...
348
+
349
+ mind.changeTheme({
350
+ name: 'Latte',
351
+ palette: ['#dd7878', '#ea76cb', '#8839ef', '#e64553', '#fe640b', '#df8e1d', '#40a02b', '#209fb5', '#1e66f5', '#7287fd'],
352
+ cssVar: {
353
+ '--main-color': '#444446',
354
+ '--main-bgcolor': '#ffffff',
355
+ '--color': '#777777',
356
+ '--bgcolor': '#f6f6f6',
357
+ },
358
+ })
359
+ ```
360
+
361
+ 请注意,Mind Elixir 不会观察 `prefers-color-scheme` 的变化。当方案变化时,请**手动**更改主题。
362
+
363
+ ## 快捷键
364
+
365
+ | 快捷键 | 功能 |
366
+ | ------------------ | -------------------------------- |
367
+ | Enter | 插入兄弟节点 |
368
+ | Tab | 插入子节点 |
369
+ | F1 | 居中地图 |
370
+ | F2 | 开始编辑当前节点 |
371
+ | ↑ | 选择上一个兄弟节点 |
372
+ | ↓ | 选择下一个兄弟节点 |
373
+ | ← / → | 选择父节点或第一个子节点 |
374
+ | PageUp / Alt + ↑ | 上移节点 |
375
+ | PageDown / Alt + ↓ | 下移节点 |
376
+ | Ctrl + ↑ | 更改布局模式为侧面 |
377
+ | Ctrl + ← | 更改布局模式为左侧 |
378
+ | Ctrl + → | 更改布局模式为右侧 |
379
+ | Ctrl + C | 复制当前节点 |
380
+ | Ctrl + V | 粘贴复制的节点 |
381
+ | Ctrl + "+" | 放大思维导图 |
382
+ | Ctrl + "-" | 缩小思维导图 |
383
+ | Ctrl + 0 | 重置缩放级别 |
384
+
385
+ ## 生态
386
+
387
+ - [@mind-elixir/node-menu](https://github.com/ssshooter/node-menu)
388
+ - [@mind-elixir/node-menu-neo](https://github.com/ssshooter/node-menu-neo)
389
+ - [@mind-elixir/export-xmind](https://github.com/ssshooter/export-xmind)
390
+ - [@mind-elixir/export-html](https://github.com/ssshooter/export-html)
391
+ - [mind-elixir-react](https://github.com/ssshooter/mind-elixir-react)
392
+
393
+ 欢迎 PR!
394
+
395
+ ## 开发
396
+
397
+ ```
398
+ pnpm i
399
+ pnpm dev
400
+ ```
401
+
402
+ 使用 `dev.dist.ts` 测试生成的文件:
403
+
404
+ ```
405
+ pnpm build
406
+ pnpm link ./
407
+ ```
408
+
409
+ 更新文档:
410
+
411
+ ```
412
+ # 安装 api-extractor
413
+ pnpm install -g @microsoft/api-extractor
414
+ # 维护 /src/docs.ts
415
+ # 生成文档
416
+ pnpm doc
417
+ pnpm doc:md
418
+ ```
419
+
420
+ ## 感谢
421
+
422
+ - [@viselect/vanilla](https://github.com/simonwep/selection/tree/master/packages/vanilla)
423
+
424
+ ## 贡献者
425
+
426
+ 感谢你们对 Mind Elixir 的贡献!你们的支持和奉献使这个项目变得更好。
427
+
428
+ <a href="https://github.com/SSShooter/mind-elixir-core/graphs/contributors">
429
+ <img src="https://contrib.rocks/image?repo=SSShooter/mind-elixir-core&columns=6" />
430
+ </a>