@vnejs/docs 0.2.22 → 0.2.24
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/CHANGELOG.md +5 -0
- package/README.md +6 -6
- package/architecture.md +75 -75
- package/manifest.json +1 -7
- package/package.json +1 -1
- package/plugins/audio/ambient.md +5 -5
- package/plugins/audio/audio.md +26 -26
- package/plugins/audio/music.md +5 -5
- package/plugins/audio/sound.md +5 -5
- package/plugins/audio/voice.md +9 -9
- package/plugins/canvas/bg.md +23 -23
- package/plugins/canvas/bg.speak.md +19 -19
- package/plugins/canvas/fill.md +23 -23
- package/plugins/canvas/layer.md +20 -20
- package/plugins/canvas/sprite.md +29 -29
- package/plugins/canvas/sprite.speak.md +16 -16
- package/plugins/canvas/text.md +24 -24
- package/plugins/canvas/video.md +22 -22
- package/plugins/canvas.layers/bl.md +12 -12
- package/plugins/canvas.layers/fl.md +12 -12
- package/plugins/canvas.layers/ml.md +12 -12
- package/plugins/canvas.layers/ul.md +11 -11
- package/plugins/canvas.props/animation.md +10 -10
- package/plugins/canvas.props/clip.md +7 -7
- package/plugins/canvas.props/filters.md +2 -2
- package/plugins/canvas.props/mask.md +8 -8
- package/plugins/canvas.props/scale.md +5 -5
- package/plugins/controls/controls.md +15 -15
- package/plugins/controls/cursor.md +34 -34
- package/plugins/controls/gamepad.md +27 -27
- package/plugins/controls/keyboard.md +2 -2
- package/plugins/core/components.md +10 -10
- package/plugins/core/interact.md +12 -12
- package/plugins/core/logs.md +10 -10
- package/plugins/core/media.md +21 -21
- package/plugins/core/memory.md +10 -10
- package/plugins/core/platforms.md +11 -11
- package/plugins/core/scenario.md +22 -22
- package/plugins/core/settings.md +9 -9
- package/plugins/core/stack.md +18 -18
- package/plugins/core/state.md +13 -13
- package/plugins/core/storage.md +29 -29
- package/plugins/core/system.md +24 -24
- package/plugins/core/vendors.md +6 -6
- package/plugins/entities/wallet.md +11 -11
- package/plugins/platform/android.md +2 -2
- package/plugins/platform/electron.md +2 -2
- package/plugins/platform/metric.md +7 -7
- package/plugins/rpg/damage.md +7 -7
- package/plugins/rpg/hit.md +8 -8
- package/plugins/rpg/skills.md +11 -11
- package/plugins/save/auto.md +11 -11
- package/plugins/save/continue.md +8 -8
- package/plugins/save/save.md +23 -23
- package/plugins/scales/health.md +2 -2
- package/plugins/scales/mana.md +2 -2
- package/plugins/scales/scales.md +15 -15
- package/plugins/scenario/autoread.md +14 -14
- package/plugins/scenario/choose.md +36 -36
- package/plugins/scenario/fastforward.md +34 -34
- package/plugins/scenario/pause.md +6 -6
- package/plugins/scenario/point_and_click.md +30 -30
- package/plugins/scenario/qte.md +16 -16
- package/plugins/scenario/random.md +3 -3
- package/plugins/settings/filter.md +5 -5
- package/plugins/settings/potato.md +6 -6
- package/plugins/settings/ratio.md +4 -4
- package/plugins/settings/textsize.md +5 -5
- package/plugins/settings/volume.md +7 -7
- package/plugins/text/inject.md +7 -7
- package/plugins/text/locs.md +13 -13
- package/plugins/text/meet.md +4 -4
- package/plugins/text/smooth.md +18 -18
- package/plugins/text/text.md +41 -41
- package/plugins/text/wall.md +4 -4
- package/plugins/time/date.md +6 -6
- package/plugins/time/time.md +7 -7
- package/plugins/vars/counters.md +12 -12
- package/plugins/vars/flags.md +10 -10
- package/plugins/vars/vars.md +16 -16
- package/plugins/views/achievement.md +26 -26
- package/plugins/views/comment.md +13 -13
- package/plugins/views/controls.hints.md +12 -12
- package/plugins/views/cursor.md +3 -3
- package/plugins/views/fps.md +13 -13
- package/plugins/views/gamepad.debug.md +16 -16
- package/plugins/views/settings.md +22 -22
- package/plugins/views/video.md +18 -18
- package/plugins/views.scenario/choose.md +21 -21
- package/plugins/views.scenario/interface.controls.md +13 -13
- package/plugins/views.scenario/interface.fastforward.md +11 -11
- package/plugins/views.scenario/interface.md +29 -29
- package/plugins/views.scenario/point_and_click.md +15 -15
- package/plugins/views.scenario/qte.md +25 -25
- package/plugins/views.screens/confirm.md +20 -20
- package/plugins/views.screens/credits.md +14 -14
- package/plugins/views.screens/disclaimer.md +20 -20
- package/plugins/views.screens/eula.md +21 -21
- package/plugins/views.screens/gallery.full.md +10 -10
- package/plugins/views.screens/gallery.md +30 -30
- package/plugins/views.screens/gamemenu.md +21 -21
- package/plugins/views.screens/history.md +26 -26
- package/plugins/views.screens/intro.md +14 -14
- package/plugins/views.screens/loading.md +13 -13
- package/plugins/views.screens/mainmenu.md +33 -33
- package/plugins/views.screens/mainmenu.socials.md +7 -7
- package/plugins/views.screens/save.md +21 -21
- package/plugins/views.screens/settings.defaults.md +14 -14
- package/plugins/views.screens/settings.md +16 -16
- package/scenario.catalog/index.md +69 -69
- package/scenario.catalog/stubs/achievement.md +6 -6
- package/scenario.catalog/stubs/audio.ambient.md +6 -6
- package/scenario.catalog/stubs/audio.music.md +6 -6
- package/scenario.catalog/stubs/audio.sound.md +6 -6
- package/scenario.catalog/stubs/audio.voice.md +6 -6
- package/scenario.catalog/stubs/bl.animation.md +6 -6
- package/scenario.catalog/stubs/bl.bg.md +6 -6
- package/scenario.catalog/stubs/bl.clip.md +6 -6
- package/scenario.catalog/stubs/bl.fill.md +6 -6
- package/scenario.catalog/stubs/bl.filter.md +6 -6
- package/scenario.catalog/stubs/bl.mask.md +6 -6
- package/scenario.catalog/stubs/bl.scale.md +6 -6
- package/scenario.catalog/stubs/bl.sprite.md +6 -6
- package/scenario.catalog/stubs/bl.text.md +6 -6
- package/scenario.catalog/stubs/bl.video.md +6 -6
- package/scenario.catalog/stubs/choose.block.md +4 -4
- package/scenario.catalog/stubs/choose.md +5 -5
- package/scenario.catalog/stubs/choose.option.md +4 -4
- package/scenario.catalog/stubs/comment.md +6 -6
- package/scenario.catalog/stubs/counter.md +5 -5
- package/scenario.catalog/stubs/credits.md +6 -6
- package/scenario.catalog/stubs/date.md +6 -6
- package/scenario.catalog/stubs/disclaimer.md +6 -6
- package/scenario.catalog/stubs/fl.animation.md +6 -6
- package/scenario.catalog/stubs/fl.bg.md +6 -6
- package/scenario.catalog/stubs/fl.clip.md +6 -6
- package/scenario.catalog/stubs/fl.fill.md +6 -6
- package/scenario.catalog/stubs/fl.filter.md +6 -6
- package/scenario.catalog/stubs/fl.mask.md +6 -6
- package/scenario.catalog/stubs/fl.scale.md +6 -6
- package/scenario.catalog/stubs/fl.sprite.md +6 -6
- package/scenario.catalog/stubs/fl.text.md +6 -6
- package/scenario.catalog/stubs/fl.video.md +6 -6
- package/scenario.catalog/stubs/flag.md +7 -7
- package/scenario.catalog/stubs/interface.md +6 -6
- package/scenario.catalog/stubs/intro.md +6 -6
- package/scenario.catalog/stubs/mainmenu.md +6 -6
- package/scenario.catalog/stubs/ml.animation.md +6 -6
- package/scenario.catalog/stubs/ml.bg.md +6 -6
- package/scenario.catalog/stubs/ml.clip.md +6 -6
- package/scenario.catalog/stubs/ml.fill.md +6 -6
- package/scenario.catalog/stubs/ml.filter.md +6 -6
- package/scenario.catalog/stubs/ml.mask.md +6 -6
- package/scenario.catalog/stubs/ml.scale.md +6 -6
- package/scenario.catalog/stubs/ml.sprite.md +6 -6
- package/scenario.catalog/stubs/ml.text.md +6 -6
- package/scenario.catalog/stubs/ml.video.md +6 -6
- package/scenario.catalog/stubs/other.md +6 -6
- package/scenario.catalog/stubs/pause.md +6 -6
- package/scenario.catalog/stubs/point-and-click.block.md +4 -4
- package/scenario.catalog/stubs/point-and-click.md +5 -5
- package/scenario.catalog/stubs/point-and-click.option.md +4 -4
- package/scenario.catalog/stubs/qte.md +6 -6
- package/scenario.catalog/stubs/random.md +6 -6
- package/scenario.catalog/stubs/random.option.md +6 -6
- package/scenario.catalog/stubs/save.auto.md +6 -6
- package/scenario.catalog/stubs/save.md +6 -6
- package/scenario.catalog/stubs/scenario.md +6 -6
- package/scenario.catalog/stubs/settings.defaults.md +6 -6
- package/scenario.catalog/stubs/stack.md +6 -6
- package/scenario.catalog/stubs/text.meet.md +6 -6
- package/scenario.catalog/stubs/text.wall.md +6 -6
- package/scenario.catalog/stubs/time.md +6 -6
- package/scenario.catalog/stubs/ul.animation.md +6 -6
- package/scenario.catalog/stubs/ul.bg.md +6 -6
- package/scenario.catalog/stubs/ul.clip.md +6 -6
- package/scenario.catalog/stubs/ul.fill.md +6 -6
- package/scenario.catalog/stubs/ul.filter.md +6 -6
- package/scenario.catalog/stubs/ul.mask.md +6 -6
- package/scenario.catalog/stubs/ul.scale.md +6 -6
- package/scenario.catalog/stubs/ul.sprite.md +6 -6
- package/scenario.catalog/stubs/ul.text.md +6 -6
- package/scenario.catalog/stubs/video.md +6 -6
- package/scenario.catalog/stubs/wallet.md +6 -6
- package/scenario.guide/README.md +21 -21
- package/scenario.guide/audio.md +6 -6
- package/scenario.guide/canvas.md +13 -13
- package/scenario.guide/choose.md +5 -5
- package/scenario.guide/flow.md +10 -10
- package/scenario.guide/point-and-click.md +5 -5
- package/scenario.guide/qte-random.md +4 -4
- package/scenario.guide/vars.md +6 -6
- package/scenario.guide/views.md +12 -12
|
@@ -6,9 +6,9 @@ CSS-анимация canvas-слоя с сохранением в state.
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `SET`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ------- | --------------------------- | ---------------------------------- |
|
|
11
|
+
| `SET` | `vne:layer_animation:set` | Записать или обновить значение. |
|
|
12
12
|
| `UNSET` | `vne:layer_animation:unset` | Событие `UNSET` namespace плагина. |
|
|
13
13
|
|
|
14
14
|
## Константы
|
|
@@ -18,21 +18,21 @@ CSS-анимация canvas-слоя с сохранением в state.
|
|
|
18
18
|
|
|
19
19
|
## Параметры
|
|
20
20
|
|
|
21
|
-
| Ключ
|
|
22
|
-
|
|
23
|
-
| `ANIMATIONS`
|
|
21
|
+
| Ключ | Тип | Смысл |
|
|
22
|
+
| --------------------------- | --------- | -------------------------------------------- |
|
|
23
|
+
| `ANIMATIONS` | `string` | Значение по умолчанию: "ANIMATIONS". |
|
|
24
24
|
| `DEFAULT_DANGEROUS_ENABLED` | `boolean` | Значение по умолчанию для включения функции. |
|
|
25
25
|
|
|
26
26
|
## Настройки
|
|
27
27
|
|
|
28
|
-
| Ключ
|
|
29
|
-
|
|
28
|
+
| Ключ | Тип | Смысл |
|
|
29
|
+
| ------------------------------------------------------------- | --------- | ------------------------------- |
|
|
30
30
|
| `DANGEROUS_ENABLED` (`vne:layer_animation:dangerous_enabled`) | `boolean` | Включить или выключить функцию. |
|
|
31
31
|
|
|
32
32
|
## Модули
|
|
33
33
|
|
|
34
|
-
| Модуль
|
|
35
|
-
|
|
34
|
+
| Модуль | Зона ответственности |
|
|
35
|
+
| ----------------- | ---------------------------------------- |
|
|
36
36
|
| `layer.animation` | Обрабатывает SET, UNSET, CLEAR, CHANGED. |
|
|
37
37
|
|
|
38
38
|
## Близкие плагины
|
|
@@ -6,9 +6,9 @@ CSS clip-path canvas-слоя с плавной сменой.
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `SET`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ------- | ---------------------- | ---------------------------------- |
|
|
11
|
+
| `SET` | `vne:layer_clip:set` | Записать или обновить значение. |
|
|
12
12
|
| `UNSET` | `vne:layer_clip:unset` | Событие `UNSET` namespace плагина. |
|
|
13
13
|
|
|
14
14
|
## Константы
|
|
@@ -17,8 +17,8 @@ CSS clip-path canvas-слоя с плавной сменой.
|
|
|
17
17
|
|
|
18
18
|
## Параметры
|
|
19
19
|
|
|
20
|
-
| Ключ
|
|
21
|
-
|
|
20
|
+
| Ключ | Тип | Смысл |
|
|
21
|
+
| ------- | -------- | ------------------------------- |
|
|
22
22
|
| `CLIPS` | `string` | Значение по умолчанию: "CLIPS". |
|
|
23
23
|
|
|
24
24
|
## Настройки
|
|
@@ -27,8 +27,8 @@ CSS clip-path canvas-слоя с плавной сменой.
|
|
|
27
27
|
|
|
28
28
|
## Модули
|
|
29
29
|
|
|
30
|
-
| Модуль
|
|
31
|
-
|
|
30
|
+
| Модуль | Зона ответственности |
|
|
31
|
+
| ------------ | ------------------------------- |
|
|
32
32
|
| `layer.clip` | Обрабатывает SET, UNSET, CLEAR. |
|
|
33
33
|
|
|
34
34
|
## Близкие плагины
|
|
@@ -22,8 +22,8 @@ CSS filter canvas-слоя с плавной сменой.
|
|
|
22
22
|
|
|
23
23
|
## Модули
|
|
24
24
|
|
|
25
|
-
| Модуль
|
|
26
|
-
|
|
25
|
+
| Модуль | Зона ответственности |
|
|
26
|
+
| -------------- | ------------------------------- |
|
|
27
27
|
| `layer.filter` | Обрабатывает SET, UNSET, CLEAR. |
|
|
28
28
|
|
|
29
29
|
## Близкие плагины
|
|
@@ -6,10 +6,10 @@ CSS mask canvas-слоя с анимированной сменой параме
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `SET`
|
|
12
|
-
| `UNSET`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| -------- | ----------------------- | ----------------------------------- |
|
|
11
|
+
| `SET` | `vne:layer_mask:set` | Записать или обновить значение. |
|
|
12
|
+
| `UNSET` | `vne:layer_mask:unset` | Событие `UNSET` namespace плагина. |
|
|
13
13
|
| `CHANGE` | `vne:layer_mask:change` | Событие `CHANGE` namespace плагина. |
|
|
14
14
|
|
|
15
15
|
## Константы
|
|
@@ -18,8 +18,8 @@ CSS mask canvas-слоя с анимированной сменой параме
|
|
|
18
18
|
|
|
19
19
|
## Параметры
|
|
20
20
|
|
|
21
|
-
| Ключ
|
|
22
|
-
|
|
21
|
+
| Ключ | Тип | Смысл |
|
|
22
|
+
| ------- | -------- | ------------------------------- |
|
|
23
23
|
| `MASKS` | `string` | Значение по умолчанию: "MASKS". |
|
|
24
24
|
|
|
25
25
|
## Настройки
|
|
@@ -28,8 +28,8 @@ CSS mask canvas-слоя с анимированной сменой параме
|
|
|
28
28
|
|
|
29
29
|
## Модули
|
|
30
30
|
|
|
31
|
-
| Модуль
|
|
32
|
-
|
|
31
|
+
| Модуль | Зона ответственности |
|
|
32
|
+
| ------------ | --------------------------------------- |
|
|
33
33
|
| `layer.mask` | Обрабатывает SET, UNSET, CHANGE, CLEAR. |
|
|
34
34
|
|
|
35
35
|
## Близкие плагины
|
|
@@ -6,9 +6,9 @@ CSS scale и transform-origin canvas-слоя.
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `SET`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ------- | ----------------------- | ---------------------------------- |
|
|
11
|
+
| `SET` | `vne:layer_scale:set` | Записать или обновить значение. |
|
|
12
12
|
| `UNSET` | `vne:layer_scale:unset` | Событие `UNSET` namespace плагина. |
|
|
13
13
|
|
|
14
14
|
## Константы
|
|
@@ -25,8 +25,8 @@ CSS scale и transform-origin canvas-слоя.
|
|
|
25
25
|
|
|
26
26
|
## Модули
|
|
27
27
|
|
|
28
|
-
| Модуль
|
|
29
|
-
|
|
28
|
+
| Модуль | Зона ответственности |
|
|
29
|
+
| ------------- | ------------------------------- |
|
|
30
30
|
| `layer.scale` | Обрабатывает SET, UNSET, CLEAR. |
|
|
31
31
|
|
|
32
32
|
## Близкие плагины
|
|
@@ -6,22 +6,22 @@
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `EMIT`
|
|
12
|
-
| `PUSH`
|
|
13
|
-
| `POP`
|
|
14
|
-
| `DEVICE_SET`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ---------------- | ----------------------------- | ----------------------------------------------------------- |
|
|
11
|
+
| `EMIT` | `vne:controls:emit` | Инициировать действие или цикл. |
|
|
12
|
+
| `PUSH` | `vne:controls:push` | Добавить элемент в очередь или стек. |
|
|
13
|
+
| `POP` | `vne:controls:pop` | Извлечь элемент из очереди или стека. |
|
|
14
|
+
| `DEVICE_SET` | `vne:controls:device_set` | Запросить смену типа устройства (`{ device }`). |
|
|
15
15
|
| `DEVICE_CHANGED` | `vne:controls:device_changed` | Тип устройства реально сменился (`{ device, prevDevice }`). |
|
|
16
16
|
|
|
17
17
|
## Константы
|
|
18
18
|
|
|
19
|
-
| Ключ
|
|
20
|
-
|
|
21
|
-
| `BUTTONS`
|
|
22
|
-
| `DEVICES.KEYBOARD`
|
|
23
|
-
| `DEVICES.XBOX`
|
|
24
|
-
| `DEVICES.PLAYSTATION` | `"playstation"`
|
|
19
|
+
| Ключ | Смысл |
|
|
20
|
+
| --------------------- | ------------------------------------------------- |
|
|
21
|
+
| `BUTTONS` | Абстрактные control-кнопки (`ACCEPT`, `BACK`, …). |
|
|
22
|
+
| `DEVICES.KEYBOARD` | `"keyboard"` |
|
|
23
|
+
| `DEVICES.XBOX` | `"xbox"` |
|
|
24
|
+
| `DEVICES.PLAYSTATION` | `"playstation"` |
|
|
25
25
|
|
|
26
26
|
## Параметры
|
|
27
27
|
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
|
|
34
34
|
## Модули
|
|
35
35
|
|
|
36
|
-
| Модуль
|
|
37
|
-
|
|
38
|
-
| `controls`
|
|
36
|
+
| Модуль | Зона ответственности |
|
|
37
|
+
| ----------------- | ------------------------------------------------------------------------------------------ |
|
|
38
|
+
| `controls` | Обрабатывает EMIT, PUSH, POP. |
|
|
39
39
|
| `controls.device` | Хранит `currentDevice`; на `DEVICE_SET` эмитит `DEVICE_CHANGED` только при реальной смене. |
|
|
40
40
|
|
|
41
41
|
Источники `DEVICE_SET`: keyboard (keydown) → keyboard; `controls.gamepad.device` (button_press / axis_move) → xbox|playstation по `gamepad.id`; cursor (`mousemove`) → keyboard.
|
|
@@ -6,18 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `SHOW`
|
|
12
|
-
| `HIDE`
|
|
13
|
-
| `UPDATE`
|
|
14
|
-
| `CLICK`
|
|
15
|
-
| `VIEW_SET` | `vne:cursor:view_set` | Записать или обновить значение.
|
|
16
|
-
| `MOVE`
|
|
17
|
-
| `MOVED`
|
|
18
|
-
| `SET_X_Y`
|
|
19
|
-
| `SHIFT`
|
|
20
|
-
| `SCROLL`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ---------- | --------------------- | ------------------------------------------------------------ |
|
|
11
|
+
| `SHOW` | `vne:cursor:show` | Показать UI или слой. |
|
|
12
|
+
| `HIDE` | `vne:cursor:hide` | Скрыть UI или слой. |
|
|
13
|
+
| `UPDATE` | `vne:cursor:update` | Обновить состояние или отображение. |
|
|
14
|
+
| `CLICK` | `vne:cursor:click` | Событие `CLICK` namespace плагина. |
|
|
15
|
+
| `VIEW_SET` | `vne:cursor:view_set` | Записать или обновить значение. |
|
|
16
|
+
| `MOVE` | `vne:cursor:move` | Событие `MOVE` namespace плагина. |
|
|
17
|
+
| `MOVED` | `vne:cursor:moved` | Событие `MOVED` namespace плагина. |
|
|
18
|
+
| `SET_X_Y` | `vne:cursor:set_x_y` | Установить позицию курсора (`{ x?, y? }`) с clamp и `MOVED`. |
|
|
19
|
+
| `SHIFT` | `vne:cursor:shift` | Сдвиг позиции курсора (`{ x?, y? }`). |
|
|
20
|
+
| `SCROLL` | `vne:cursor:scroll` | Скролл ближайшего scrollable под курсором (`{ x?, y? }`). |
|
|
21
21
|
|
|
22
22
|
## Константы
|
|
23
23
|
|
|
@@ -25,35 +25,35 @@
|
|
|
25
25
|
|
|
26
26
|
## Параметры
|
|
27
27
|
|
|
28
|
-
| Ключ
|
|
29
|
-
|
|
30
|
-
| `DEFAULT_VIEW`
|
|
31
|
-
| `DEFAULT_SHIFT_SPEED`
|
|
32
|
-
| `DEFAULT_SHIFT_REVERSE_X` | `boolean` | Значение по умолчанию: false.
|
|
33
|
-
| `DEFAULT_SHIFT_REVERSE_Y` | `boolean` | Значение по умолчанию: false.
|
|
34
|
-
| `BASE_SHIFT_SPEED`
|
|
35
|
-
| `DEFAULT_SCROLL_SPEED`
|
|
36
|
-
| `BASE_SCROLL_SPEED`
|
|
28
|
+
| Ключ | Тип | Смысл |
|
|
29
|
+
| ------------------------- | --------- | --------------------------------- |
|
|
30
|
+
| `DEFAULT_VIEW` | `string` | Значение по умолчанию: "default". |
|
|
31
|
+
| `DEFAULT_SHIFT_SPEED` | `number` | Значение по умолчанию: 1. |
|
|
32
|
+
| `DEFAULT_SHIFT_REVERSE_X` | `boolean` | Значение по умолчанию: false. |
|
|
33
|
+
| `DEFAULT_SHIFT_REVERSE_Y` | `boolean` | Значение по умолчанию: false. |
|
|
34
|
+
| `BASE_SHIFT_SPEED` | `number` | Значение по умолчанию: 16. |
|
|
35
|
+
| `DEFAULT_SCROLL_SPEED` | `number` | Значение по умолчанию: 1. |
|
|
36
|
+
| `BASE_SCROLL_SPEED` | `number` | Значение по умолчанию: 16. |
|
|
37
37
|
|
|
38
38
|
## Настройки
|
|
39
39
|
|
|
40
|
-
| Ключ
|
|
41
|
-
|
|
42
|
-
| `SHIFT_SPEED` (`vne:cursor:shift_speed`)
|
|
43
|
-
| `SHIFT_REVERSE_Y` (`vne:cursor:shift_reverse_y`) | `boolean` | Инверсия оси Y при `SHIFT`.
|
|
44
|
-
| `SHIFT_REVERSE_X` (`vne:cursor:shift_reverse_x`) | `boolean` | Инверсия оси X при `SHIFT`.
|
|
45
|
-
| `SCROLL_SPEED` (`vne:cursor:scroll_speed`)
|
|
40
|
+
| Ключ | Тип | Смысл |
|
|
41
|
+
| ------------------------------------------------ | --------- | ---------------------------------------- |
|
|
42
|
+
| `SHIFT_SPEED` (`vne:cursor:shift_speed`) | `number` | Множитель скорости сдвига курсора. |
|
|
43
|
+
| `SHIFT_REVERSE_Y` (`vne:cursor:shift_reverse_y`) | `boolean` | Инверсия оси Y при `SHIFT`. |
|
|
44
|
+
| `SHIFT_REVERSE_X` (`vne:cursor:shift_reverse_x`) | `boolean` | Инверсия оси X при `SHIFT`. |
|
|
45
|
+
| `SCROLL_SPEED` (`vne:cursor:scroll_speed`) | `number` | Множитель скорости скролла при `SCROLL`. |
|
|
46
46
|
|
|
47
47
|
## Модули
|
|
48
48
|
|
|
49
|
-
| Модуль
|
|
50
|
-
|
|
51
|
-
| `cursor` (`Cursor`)
|
|
49
|
+
| Модуль | Зона ответственности |
|
|
50
|
+
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
51
|
+
| `cursor` (`Cursor`) | SET_X_Y, resize; владеет `globalState.cursor` (x/y). |
|
|
52
52
|
| `cursor.view_set` (`CursorView`) | VIEW_SET + STATE/STARTED для проставления `view`. Имя `view_set`, чтобы не пересечься с `plugins/views/cursor` (`cursor.view`). |
|
|
53
|
-
| `cursor.move` (`CursorMove`)
|
|
54
|
-
| `cursor.shift` (`CursorShift`)
|
|
55
|
-
| `cursor.click` (`CursorClick`)
|
|
56
|
-
| `cursor.scroll` (`CursorScroll`) | SCROLL + INIT `SCROLL_SPEED`.
|
|
53
|
+
| `cursor.move` (`CursorMove`) | MOVE (мышь) → `CONTROLS.DEVICE_SET` (keyboard) + SHOW + SET_X_Y; скрывает системный курсор. |
|
|
54
|
+
| `cursor.shift` (`CursorShift`) | SHIFT + INIT `SHIFT_SPEED` / `SHIFT_REVERSE_*`. |
|
|
55
|
+
| `cursor.click` (`CursorClick`) | CLICK по координатам курсора. |
|
|
56
|
+
| `cursor.scroll` (`CursorScroll`) | SCROLL + INIT `SCROLL_SPEED`. |
|
|
57
57
|
|
|
58
58
|
## Близкие плагины
|
|
59
59
|
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ------ | ------------------ | ----------------------------------------------------------------------- |
|
|
11
11
|
| `EMIT` | `vne:gamepad:emit` | Проксировать нажатие в `CONTROLS.EMIT` (`{ keys }`) с lock `inProcess`. |
|
|
12
12
|
|
|
13
13
|
## Константы
|
|
@@ -26,19 +26,19 @@
|
|
|
26
26
|
|
|
27
27
|
После того как joypad выдаёт логическое имя `button_N`, модули кнопок и триггеров эмитят `GAMEPAD.EMIT`, а `controls.gamepad` проксирует ключи в `CONTROLS.EMIT`:
|
|
28
28
|
|
|
29
|
-
| joypad
|
|
30
|
-
|
|
31
|
-
| `button_0`
|
|
32
|
-
| `button_1`
|
|
33
|
-
| `button_2`
|
|
34
|
-
| `button_3`
|
|
35
|
-
| `button_4`
|
|
36
|
-
| `button_5`
|
|
37
|
-
| `button_6`
|
|
38
|
-
| `button_7`
|
|
39
|
-
| `button_8`
|
|
40
|
-
| `button_9`
|
|
41
|
-
| `button_12`…`15` | D-pad
|
|
29
|
+
| joypad | Физическая (standard) | Абстрактный control |
|
|
30
|
+
| ---------------- | --------------------- | ------------------------------------------ |
|
|
31
|
+
| `button_0` | A / Cross (низ) | `ACCEPT` |
|
|
32
|
+
| `button_1` | B / Circle (право) | `BACK` |
|
|
33
|
+
| `button_2` | X / Square (лево) | `INTERACT` |
|
|
34
|
+
| `button_3` | Y / Triangle (верх) | `MENU` |
|
|
35
|
+
| `button_4` | LB / L1 | `TAB_PREV` |
|
|
36
|
+
| `button_5` | RB / R1 | `TAB_NEXT` |
|
|
37
|
+
| `button_6` | LT / L2 | `FASTFORWARD_START` / `FASTFORWARD_FINISH` |
|
|
38
|
+
| `button_7` | RT / R2 | (cursor click через compatibility) |
|
|
39
|
+
| `button_8` | View / Select | `GAMEMENU` |
|
|
40
|
+
| `button_9` | Menu / Start | `MENU` |
|
|
41
|
+
| `button_12`…`15` | D-pad | `ARROW_*` |
|
|
42
42
|
|
|
43
43
|
## Профили и активный пад
|
|
44
44
|
|
|
@@ -54,13 +54,13 @@ joypad.js применяет **один** `customButtonMapping` ко всем у
|
|
|
54
54
|
|
|
55
55
|
Сырой дамп кнопок для отладки — отдельный view-плагин [gamepad.debug](../views/gamepad.debug.md) (toggle в Extra).
|
|
56
56
|
|
|
57
|
-
| Профиль
|
|
58
|
-
|
|
59
|
-
| `standard`
|
|
60
|
-
| `steam-deck`
|
|
61
|
-
| `playstation` | `mapping !== "standard"` и id PS
|
|
62
|
-
| `nintendo`
|
|
63
|
-
| `firefox`
|
|
57
|
+
| Профиль | Когда | Что делает |
|
|
58
|
+
| ------------- | -------------------------------------------------------------------------------- | ------------------------------ |
|
|
59
|
+
| `standard` | по умолчанию; preferred с `mapping: "standard"` | identity |
|
|
60
|
+
| `steam-deck` | preferred без standard + id Deck/Steam (`28de` / `valve` / …) или `?steamDeck=1` | raw HID Deck → W3C |
|
|
61
|
+
| `playstation` | `mapping !== "standard"` и id PS | raw Square-first → W3C |
|
|
62
|
+
| `nintendo` | id Nintendo/Switch, в т.ч. при `standard` | A/B и X/Y под Nintendo confirm |
|
|
63
|
+
| `firefox` | Firefox UA и не сработал device-профиль | индексы из доки joypad.js |
|
|
64
64
|
|
|
65
65
|
Electron при `STEAM_DECK=1` добавляет `?steamDeck=1`.
|
|
66
66
|
|
|
@@ -74,11 +74,11 @@ Electron при `STEAM_DECK=1` добавляет `?steamDeck=1`.
|
|
|
74
74
|
|
|
75
75
|
## Модули
|
|
76
76
|
|
|
77
|
-
| Модуль
|
|
78
|
-
|
|
79
|
-
| `controls.gamepad`
|
|
80
|
-
| `controls.gamepad.buttons` | `button_press` / `button_release` → `GAMEPAD.EMIT`; lock активного пада.
|
|
81
|
-
| `controls.gamepad.device`
|
|
77
|
+
| Модуль | Зона ответственности |
|
|
78
|
+
| -------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
79
|
+
| `controls.gamepad` | `connect` / `disconnect` → sync профиля; `GAMEPAD.EMIT` → `CONTROLS.EMIT` с lock `inProcess`. |
|
|
80
|
+
| `controls.gamepad.buttons` | `button_press` / `button_release` → `GAMEPAD.EMIT`; lock активного пада. |
|
|
81
|
+
| `controls.gamepad.device` | `button_press` / `axis_move` → `CONTROLS.DEVICE_SET` (`DEVICES.XBOX` или `DEVICES.PLAYSTATION` по `gamepad.id`). |
|
|
82
82
|
|
|
83
83
|
## Близкие плагины
|
|
84
84
|
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
|
|
23
23
|
## Модули
|
|
24
24
|
|
|
25
|
-
| Модуль
|
|
26
|
-
|
|
25
|
+
| Модуль | Зона ответственности |
|
|
26
|
+
| ------------------- | ----------------------------- |
|
|
27
27
|
| `controls.keyboard` | Подмодуль `keyboard` плагина. |
|
|
28
28
|
|
|
29
29
|
## Близкие плагины
|
|
@@ -6,12 +6,12 @@ React/DOM-контейнер для монтирования view-компоне
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `RENDER`
|
|
12
|
-
| `INJECT`
|
|
13
|
-
| `INJECT_REG`
|
|
14
|
-
| `EXTERNAL_UPDATE` | `vne:components:external_update` | Запрос на принудительное обновление отображения UI без полного re-render.
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ----------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `RENDER` | `vne:components:render` | Запрос на отрисовку: создаётся дочерний контейнер, вызывается переданная `renderFunc`; завершение — когда компонент вызовет `onMount`. |
|
|
12
|
+
| `INJECT` | `vne:components:inject` | Прогон значения через все зарегистрированные inject-обработчики по очереди; возвращает массив результатов. |
|
|
13
|
+
| `INJECT_REG` | `vne:components:inject_reg` | Регистрация нового inject-обработчика в цепочку. |
|
|
14
|
+
| `EXTERNAL_UPDATE` | `vne:components:external_update` | Запрос на принудительное обновление отображения UI без полного re-render. |
|
|
15
15
|
|
|
16
16
|
## Константы
|
|
17
17
|
|
|
@@ -27,11 +27,11 @@ React/DOM-контейнер для монтирования view-компоне
|
|
|
27
27
|
|
|
28
28
|
## Модули
|
|
29
29
|
|
|
30
|
-
| Модуль
|
|
31
|
-
|
|
30
|
+
| Модуль | Зона ответственности |
|
|
31
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------ |
|
|
32
32
|
| `components.render` | Создаёт `#components` в DOM; обрабатывает `RENDER`; инициализирует `shared.viewForceAnimationSources`. |
|
|
33
|
-
| `components.inject` | Регистрация и последовательный вызов inject-обработчиков на `INJECT` / `INJECT_REG`.
|
|
34
|
-
| `components.logs`
|
|
33
|
+
| `components.inject` | Регистрация и последовательный вызов inject-обработчиков на `INJECT` / `INJECT_REG`. |
|
|
34
|
+
| `components.logs` | Логирование `RENDER` (результат фильтруется из ответа emit). |
|
|
35
35
|
|
|
36
36
|
## Близкие плагины
|
|
37
37
|
|
package/plugins/core/interact.md
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `EMIT`
|
|
12
|
-
| `PUSH`
|
|
13
|
-
| `POP`
|
|
14
|
-
| `PUSH_POP` | `vne:interact:push_pop` | Временно подменить handler (`skipHandler`), выполнить `handler`, затем pop по `key`.
|
|
15
|
-
| `STARTED`
|
|
16
|
-
| `ENDED`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ---------- | ----------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `EMIT` | `vne:interact:emit` | Запуск цикла взаимодействия: если не занят — `STARTED`, параллельный вызов всех handlers, затем `ENDED`. |
|
|
12
|
+
| `PUSH` | `vne:interact:push` | Зарегистрировать handler под ключом. Payload: `{ key?, handler? }`. |
|
|
13
|
+
| `POP` | `vne:interact:pop` | Снять handler по ключу. Payload: `{ key? }`. |
|
|
14
|
+
| `PUSH_POP` | `vne:interact:push_pop` | Временно подменить handler (`skipHandler`), выполнить `handler`, затем pop по `key`. |
|
|
15
|
+
| `STARTED` | `vne:interact:started` | Начало цикла взаимодействия — перед параллельным вызовом handlers. |
|
|
16
|
+
| `ENDED` | `vne:interact:ended` | Завершение цикла взаимодействия — после выполнения всех handlers. |
|
|
17
17
|
|
|
18
18
|
## Константы
|
|
19
19
|
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
|
|
30
30
|
## Модули
|
|
31
31
|
|
|
32
|
-
| Модуль
|
|
33
|
-
|
|
34
|
-
| `interact`
|
|
35
|
-
| `interact.logs` | Логирование всех событий interact.
|
|
32
|
+
| Модуль | Зона ответственности |
|
|
33
|
+
| --------------- | ------------------------------------------------------------------ |
|
|
34
|
+
| `interact` | Хранит стек handlers; реализует `EMIT`, `PUSH`, `POP`, `PUSH_POP`. |
|
|
35
|
+
| `interact.logs` | Логирование всех событий interact. |
|
|
36
36
|
|
|
37
37
|
## Близкие плагины
|
|
38
38
|
|
package/plugins/core/logs.md
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `EMIT`
|
|
12
|
-
| `PUSH`
|
|
13
|
-
| `LOAD`
|
|
14
|
-
| `CLEAR` | `vne:logs:clear` | Очистить `window.VneLogs`.
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| ------- | ---------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `EMIT` | `vne:logs:emit` | Поставить запись в очередь логов (если логирование включено); затем сформировать `PUSH` с uid и timestamp. |
|
|
12
|
+
| `PUSH` | `vne:logs:push` | Записать строку в `window.VneLogs` и при необходимости вывести в консоль. |
|
|
13
|
+
| `LOAD` | `vne:logs:load` | Скачать накопленные логи как JSON-файл через `SYSTEM.FILE_LOAD`. |
|
|
14
|
+
| `CLEAR` | `vne:logs:clear` | Очистить `window.VneLogs`. |
|
|
15
15
|
|
|
16
16
|
## Константы
|
|
17
17
|
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
|
|
24
24
|
## Настройки
|
|
25
25
|
|
|
26
|
-
| Ключ
|
|
27
|
-
|
|
26
|
+
| Ключ | Тип | Смысл |
|
|
27
|
+
| ------------------------------ | --------- | ------------------------------------------------------------ |
|
|
28
28
|
| `ENABLED` (`vne:logs:enabled`) | `boolean` | Включено ли логирование; инициализируется при старте модуля. |
|
|
29
29
|
|
|
30
30
|
## Модули
|
|
31
31
|
|
|
32
|
-
| Модуль | Зона ответственности
|
|
33
|
-
|
|
32
|
+
| Модуль | Зона ответственности |
|
|
33
|
+
| ------ | ----------------------------------------------------------------------------- |
|
|
34
34
|
| `logs` | Очередь логов, `EMIT`/`PUSH`/`LOAD`/`CLEAR`; регистрация настройки `ENABLED`. |
|
|
35
35
|
|
|
36
36
|
## Близкие плагины
|
package/plugins/core/media.md
CHANGED
|
@@ -6,20 +6,20 @@
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `GET`
|
|
12
|
-
| `SET`
|
|
13
|
-
| `LOAD`
|
|
14
|
-
| `LOAD_CHECK`
|
|
15
|
-
| `LOAD_START`
|
|
16
|
-
| `LOAD_END`
|
|
17
|
-
| `ERROR_NO_SRC`
|
|
18
|
-
| `ERROR_FETCH`
|
|
19
|
-
| `PROCESS`
|
|
20
|
-
| `PROCESS_CHECK` | `vne:media:process_check` | Есть ли уже promise/результат process для `mediaId`.
|
|
21
|
-
| `MEMORY_GET`
|
|
22
|
-
| `MEMORY_SET`
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| --------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `GET` | `vne:media:get` | Получить готовый медиа-элемент: из кэша или через цепочку load. Битый или отсутствующий asset → `null`, без вечного wait. |
|
|
12
|
+
| `SET` | `vne:media:set` | Положить готовый DOM-элемент в memory-подсистему media. |
|
|
13
|
+
| `LOAD` | `vne:media:load` | Запуск загрузки по id/type/name с учётом semaphore и dedup через `LOAD_CHECK`. Слот очереди освобождается и при ошибке. |
|
|
14
|
+
| `LOAD_CHECK` | `vne:media:load_check` | Проверить: уже в памяти, в процессе process или load. |
|
|
15
|
+
| `LOAD_START` | `vne:media:load_start` | Начало загрузки asset (маркер lifecycle). |
|
|
16
|
+
| `LOAD_END` | `vne:media:load_end` | Окончание загрузки asset (маркер lifecycle). |
|
|
17
|
+
| `ERROR_NO_SRC` | `vne:media:error_no_src` | В манифесте нет src для запрошенного asset. |
|
|
18
|
+
| `ERROR_FETCH` | `vne:media:error_fetch` | Ошибка fetch: сеть, HTTP не-ok, timeout. Битый blob в память не кладётся. |
|
|
19
|
+
| `PROCESS` | `vne:media:process` | Скачать blob, создать `<img>` / `<audio>` / `<video>`, вызвать `SET`. |
|
|
20
|
+
| `PROCESS_CHECK` | `vne:media:process_check` | Есть ли уже promise/результат process для `mediaId`. |
|
|
21
|
+
| `MEMORY_GET` | `vne:media:memory_get` | Прокси к `MEMORY.GET` для namespace media. |
|
|
22
|
+
| `MEMORY_SET` | `vne:media:memory_set` | Прокси к `MEMORY.SET` для namespace media. |
|
|
23
23
|
|
|
24
24
|
## Константы
|
|
25
25
|
|
|
@@ -37,13 +37,13 @@
|
|
|
37
37
|
|
|
38
38
|
## Модули
|
|
39
39
|
|
|
40
|
-
| Модуль
|
|
41
|
-
|
|
42
|
-
| `media.load`
|
|
43
|
-
| `media.process` | Fetch blob и создание DOM-медиа. HTTP не-ok и timeout fetch → `ERROR_FETCH`, без `SET`.
|
|
44
|
-
| `media.memory`
|
|
45
|
-
| `media`
|
|
46
|
-
| `media.logs`
|
|
40
|
+
| Модуль | Зона ответственности |
|
|
41
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
42
|
+
| `media.load` | Semaphore-gated load, dedup, делегирование в process/memory. Слот всегда освобождается (`finally`), даже если process reject. |
|
|
43
|
+
| `media.process` | Fetch blob и создание DOM-медиа. HTTP не-ok и timeout fetch → `ERROR_FETCH`, без `SET`. |
|
|
44
|
+
| `media.memory` | REG в memory, монтирование элементов в скрытый `#media`. |
|
|
45
|
+
| `media` | Высокоуровневый get/set. `GET` возвращает `null`, если asset нет или не готов (битая картинка, error). |
|
|
46
|
+
| `media.logs` | Логирование lifecycle media. |
|
|
47
47
|
|
|
48
48
|
## Близкие плагины
|
|
49
49
|
|
package/plugins/core/memory.md
CHANGED
|
@@ -6,14 +6,14 @@ In-memory кэш с reference counting по namespace модуля; исполь
|
|
|
6
6
|
|
|
7
7
|
## События
|
|
8
8
|
|
|
9
|
-
| Ключ
|
|
10
|
-
|
|
11
|
-
| `GET`
|
|
12
|
-
| `SET`
|
|
13
|
-
| `REG`
|
|
14
|
-
| `KEYS`
|
|
15
|
-
| `CLEAR`
|
|
16
|
-
| `CLEARED` | `vne:memory:cleared` | In-memory кэш полностью очищен.
|
|
9
|
+
| Ключ | Строка | Смысл |
|
|
10
|
+
| --------- | -------------------- | ------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `GET` | `vne:memory:get` | Получить значение по `module` + `key`; сбросить счётчик ссылок до `initCounter`. |
|
|
12
|
+
| `SET` | `vne:memory:set` | Сохранить значение; при первой записи вызвать `onAdd` зарегистрированного namespace. |
|
|
13
|
+
| `REG` | `vne:memory:reg` | Зарегистрировать namespace с `initCounter`, хуками `onAdd` / `onClear`. |
|
|
14
|
+
| `KEYS` | `vne:memory:keys` | Список ключей в namespace. |
|
|
15
|
+
| `CLEAR` | `vne:memory:clear` | Уменьшить счётчики, удалить записи с нулевым счётчиком, вызвать `onClear`, затем `CLEARED`. |
|
|
16
|
+
| `CLEARED` | `vne:memory:cleared` | In-memory кэш полностью очищен. |
|
|
17
17
|
|
|
18
18
|
## Константы
|
|
19
19
|
|
|
@@ -29,8 +29,8 @@ In-memory кэш с reference counting по namespace модуля; исполь
|
|
|
29
29
|
|
|
30
30
|
## Модули
|
|
31
31
|
|
|
32
|
-
| Модуль
|
|
33
|
-
|
|
32
|
+
| Модуль | Зона ответственности |
|
|
33
|
+
| -------- | ----------------------------------------------------------- |
|
|
34
34
|
| `memory` | Единый модуль: reg/get/set/keys/clear и reference counting. |
|
|
35
35
|
|
|
36
36
|
## Близкие плагины
|