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/ru.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. Вы можете использовать её с любым frontend-фреймворком.
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
+ - [Playground](#playground)
56
+ - [Документация](#документация)
57
+ - [Использование](#использование)
58
+ - [Установка](#установка)
59
+ - [NPM](#npm)
60
+ - [Script tag](#script-tag)
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
+ ### Playground
85
+
86
+ - Vanilla 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 tag
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
+ **Breaking Change** since 1.0.0, `data` should be passed to `init()`, not `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', // or HTMLDivElement
135
+ direction: MindElixir.LEFT,
136
+ draggable: true, // default true
137
+ contextMenu: true, // default true
138
+ toolBar: true, // default true
139
+ nodeMenu: true, // default true
140
+ keypress: true, // default true
141
+ locale: 'en', // [zh_CN,zh_TW,en,ja,pt,ru] waiting for PRs
142
+ overflowHidden: false, // default false
143
+ mainLinkStyle: 2, // [1,2] default 1
144
+ mouseSelectionButton: 0, // 0 for left button, 2 for right button, default 0
145
+ contextMenuOption: {
146
+ focus: true,
147
+ link: true,
148
+ extend: [
149
+ {
150
+ name: 'Node edit',
151
+ onclick: () => {
152
+ alert('extend menu')
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) // install your plugin
171
+
172
+ // create new map data
173
+ const data = MindElixir.new('new topic')
174
+ // or `example`
175
+ // or the data return from `.getData()`
176
+ mind.init(data)
177
+
178
+ // get a node
179
+ MindElixir.E('node-id')
180
+ ```
181
+
182
+ ### Структура данных
183
+
184
+ ```javascript
185
+ // whole node data structure up to now
186
+ const nodeData = {
187
+ topic: 'node topic',
188
+ id: 'bd1c24420cd2c2f5',
189
+ style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' },
190
+ expanded: true,
191
+ parent: null,
192
+ tags: ['Tag'],
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', // required
197
+ // you need to query the height and width of the image and calculate the appropriate value to display the image
198
+ height: 90, // required
199
+ width: 90, // required
200
+ },
201
+ children: [
202
+ {
203
+ topic: 'child',
204
+ id: 'xxxx',
205
+ // ...
206
+ },
207
+ ],
208
+ }
209
+ ```
210
+
211
+ ### Обработка событий
212
+
213
+ ```javascript
214
+ mind.bus.addListener('operation', operation => {
215
+ console.log(operation)
216
+ // return {
217
+ // name: action name,
218
+ // obj: target object
219
+ // }
220
+
221
+ // name: [insertSibling|addChild|removeNode|beginEdit|finishEdit]
222
+ // obj: target
223
+
224
+ // name: moveNode
225
+ // obj: {from:target1,to:target2}
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
+ // data export
242
+ const data = mind.getData() // javascript object, see src/example.js
243
+ mind.getDataString() // stringify object
244
+
245
+ // data import
246
+ // initiate
247
+ let mind = new MindElixir(options)
248
+ mind.init(data)
249
+ // data update
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 instance */
284
+ }
285
+ const downloadPng = async () => {
286
+ const blob = await mind.exportPng() // Get a 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
+ Install `@ssshooter/modern-screenshot`, then:
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
+ // main lines color palette
332
+ palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],
333
+ // overwrite css variables
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
+ // all variables see /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
+ Be aware that Mind Elixir will not observe the change of `prefers-color-scheme`. Please change the theme **manually** when the scheme changes.
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
+ PRs are welcome!
394
+
395
+ ## Разработка
396
+
397
+ ```
398
+ pnpm i
399
+ pnpm dev
400
+ ```
401
+
402
+ Test generated files with `dev.dist.ts`:
403
+
404
+ ```
405
+ pnpm build
406
+ pnpm link ./
407
+ ```
408
+
409
+ Update docs:
410
+
411
+ ```
412
+ # Install api-extractor
413
+ pnpm install -g @microsoft/api-extractor
414
+ # Maintain /src/docs.ts
415
+ # Generate docs
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>