@vnejs/docs 0.2.34 → 0.2.36

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 CHANGED
@@ -2,6 +2,51 @@
2
2
 
3
3
  Краткая история изменений движка (плагины, helpers, packages, CLI и прочий runtime) и внешнего API. Версии — релизы пакета `@vnejs/docs`.
4
4
 
5
+ ## 0.2.36
6
+
7
+ - `views.screens/checkers` — экран русских шашек: `$ checkers show`, сетка на `@vnejs/module.controller.arrows.grid`. API: `EVENTS.CHECKERS.*` (`SHOW` / `HIDE` / `ACCEPT` / `CELL_CLICK` / `FINISH` / `AI_TURN` / grid), `PARAMS.CHECKERS.ROWS` / `COLUMNS`, `CONST.CHECKERS.EXEC_ACTIONS`.
8
+ - `views.screens/checkers` — AI сторон: `$ checkers ai <white|black> <player|sacrifice|random|strong>`; конфиг в `shared.checkersAi` (дефолт оба `player`), на SHOW копируется в state `ai`; AI vs AI стартует после готовности доски. `playMove` всегда ищет ход через `getAllMoves` (пустой `legalMoves: []` больше не блокирует AI). Пауза перед ходом AI: `PARAMS.CHECKERS.AI_DELAY` (1000мс). API: `CONST.CHECKERS.AI_COLORS`, `CONST.CHECKERS.AI_TYPES`, `EVENTS.CHECKERS.AI_TURN`, `PARAMS.CHECKERS.AI_DELAY`, `shared.checkersAi`, `shared.checkersAiBusy`.
9
+ - `views.screens/checkers` — клетки доски: `vne-cursor-type="pointer"` вместо CSS `cursor`.
10
+ - `views.screens/checkers` — доска CSS grid 8×8; размер клеток через `getVneLength(PARAMS.CHECKERS.CELL_SIZE)`, без flex-wrap (раньше клетки были в px и ряд ломался на ~6).
11
+ - `views.screens/checkers` — анимации `PARAMS.CHECKERS.TRANSITION` (300мс): ход фигуры (`transform`), выбор (opacity 70%), взятие — уезд на кладбище (белые слева, чёрные справа; `PARAMS.CHECKERS.GRAVEYARD_GAP`), смена цвета клетки. Позиции — `calc(n * cellLen)`, overlay вне grid-children.
12
+ - `bundles/checkers` — бандл: core + `canvas.layer` + controls/keyboard/gamepad/cursor + `text` + choose + `views.cursor` + gamepad↔cursor + `views.screens/checkers`.
13
+ - `games/checkers` — тестовая игра: два `% choose` с `title` (белые/чёрные) и опциями «Игрок» / «… ИИ» → `$ checkers show`; курсор из Coraline (`icons/original-4k/cursor/default`); скрипты `resize:*` / `build:media:cp` / vercel-target как у Coraline.
14
+ - `views.scenario/choose` — опциональный заголовок из `args.title` (`title: "…"` у `% choose`); API: `PARAMS.CHOOSE_VIEW.VIEW_PROPS.title` / `wrap`.
15
+
16
+ ## 0.2.35
17
+
18
+ - `scenario/qte` — обработка `RESULT` в модуле `qte.result` (`CLOSED` + `applyResult` / `emitNext`); `qte` только `EMIT` → `OPENED` и `shared.qteScenarioSkip`.
19
+ - `scenario/qte` — флаг embedded-режима: `shared.qteScenarioSkip` вместо поля модуля; в `postinject` — `false`. `qte.logs` читает тот же shared. API: `shared.qteScenarioSkip`.
20
+ - `scenario/qte` — логи в модуле `qte.logs`, не `emitLog` из `qte`. `EMIT` / `RESULT` пишут `skipScenario` (для `RESULT` — с `shared.qteScenarioSkip`). `MISSING` — из `qte.scenario` через `CONST.QTE.LOGS_ACTIONS.MISSING`. API: `CONST.QTE.LOGS_ACTIONS` (`EMIT` / `emit`, `RESULT` / `result`, `MISSING` / `missing`).
21
+ - `helpers/get-block-skip-shift` — `getBlockSkipShift(lines, curLine)` сдвигает курсор за indent-поддерево (`indent > parent`). Call-sites: `scenario/choose` / `point_and_click` (`*.skip`), `scenario/qte` (fail), `vars` (не заходить внутрь). Не путать с `getOptionExecShift` (`>=`, пропуск одной option-ветки).
22
+ - `helpers/get-block-options` — `getBlockOptions(lines, curLine, optionPrefix)` собирает `% ….option` на `parentIndent + 2` внутри блока → `{ index, optionLine }[]`. Call-sites: `scenario/choose` / `point_and_click` / `random` (scenario).
23
+ - `module.controller.arrows.grid` — `cachedItemsCount` не считает слоты с `isStub`; после `GRID_UPDATE_ITEMS` невалидные `gridRow` / `gridColumn` (в т.ч. stub после смены `gridIndex`) сдвигаются на ближайшую валидную ячейку. API: `getGridItemsCount`, `snapSelectionToGrid`, `findNearestValidCell`.
24
+ - `views/settings` — константа ключа вкладки дефолтных настроек. API: `CONST.SETTINGS_VIEW.DEFAULT_TAB` (`"DEFAULT"`).
25
+ - `views.screens/settings` — показ полей на `SHOW_BEFORE` в `settings.screen.controller.fields` (`STATE_UPDATE` tabs/tab → `SETTINGS_VIEW.SHOW`); main только эмитит `SHOW_BEFORE` и `HIDE` → `SETTINGS_VIEW.HIDE`.
26
+ - `views.screens/settings.defaults` — показ полей на `SHOW_BEFORE` в `settings.default.controller.fields` с `CONST.SETTINGS_VIEW.DEFAULT_TAB`.
27
+ - `module.controller.bg` — база статичного фона `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `STATE_UPDATE` `{ bgSrc }`; опционально `EVENT_PRELOAD` / `start` / `STATE.CLEAR`; `MEMORY.CLEARED` — флаги preload и/или refresh при `isShow`. Abstract: `EVENT_SHOW` / `HIDE` / `SHOW_BEFORE` / `STATE_UPDATE` / `UPDATE_FAST`, `BGNAME`, `QUALITY_SETTING`. API: `IS_START_PRELOAD_ENABLED`, `IS_STATE_CLEAR_PRELOAD_ENABLED`, `IS_MEMORY_CLEARED_PRELOAD_ENABLED`, `IS_MEMORY_CLEARED_UPDATE_ENABLED`, `loadBg`.
28
+ - `views.screens/gallery` — фон вынесен в `gallery.controller.bg`; main `beforeShow` эмитит `SHOW_BEFORE`, затем `TAB_SET`. API: `EVENTS.GALLERY.SHOW_BEFORE`.
29
+ - `views.screens/save` — фон в `save.controller.bg` (`PRELOAD` / `start` / `MEMORY.CLEARED`); main `beforeShow` → `SHOW_BEFORE` + `TAB_SET`. API: `EVENTS.SAVE_VIEW.SHOW_BEFORE`.
30
+ - `views.screens/settings` — фон в `settings.screen.controller.bg`; API: `EVENTS.SETTINGS_SCREEN_VIEW.SHOW_BEFORE`, `EVENTS.SETTINGS_SCREEN_VIEW.UPDATE_FAST`.
31
+ - `views.screens/settings.defaults` — фон в `settings.default.controller.bg`; API: `EVENTS.SETTINGS_DEFAULT_VIEW.SHOW_BEFORE`, `EVENTS.SETTINGS_DEFAULT_VIEW.STATE_UPDATE`, `EVENTS.SETTINGS_DEFAULT_VIEW.UPDATE_FAST`.
32
+ - `views.screens/intro` — фон в `intro.controller.bg` (`start` preload); API: `EVENTS.INTRO.SHOW_BEFORE`, `EVENTS.INTRO.STATE_UPDATE`, `EVENTS.INTRO.UPDATE_FAST`.
33
+ - `views.screens/loading` — фон в `loading.controller.bg` (`start` / `MEMORY.CLEARED`); API: `EVENTS.LOADING.SHOW_BEFORE`, `EVENTS.LOADING.STATE_UPDATE`, `EVENTS.LOADING.UPDATE_FAST`.
34
+ - `views.screens/mainmenu` — начальный фон в `mainmenu.controller.bg` (`start` / `STATE.CLEAR`); ротация по-прежнему `mainmenu.backgrounds`. API: `EVENTS.MAINMENU.SHOW_BEFORE`.
35
+ - `module.controller.tabs` — abstract `EVENT_STATE_UPDATE`; entrypoint `onTabSetEvent` (guard пустого / того же tab) → `applyTab` (`STATE_UPDATE` `{ tab }`) → abstract `onTabSet` (как `onAccept`). API: `EVENT_STATE_UPDATE`, `applyTab`, `onTabSetEvent`, `onTabSet`.
36
+ - `module.controller.pages` — база пагинации `@vnejs/module.controller.pages`: `PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` → `setPage` → abstract `applyPage` + `UPDATE_FAST`. Стейт `pageIndex` / `pagesCount`. Abstract: `EVENT_PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` / `STATE_UPDATE` / `UPDATE_FAST`, `applyPage`. API: `setPage`, `onPageSet`, `onPageNext`, `onPagePrev`, `applyPage`.
37
+ - `views.screens/gallery` — `gallery.controller.pages.items` на `PAGE_ITEMS_GET` (`vne:gallery:page_items_get`) собирает UI-слот (`CHECK` + media); вместо `ITEM_CREATE` / `vne:gallery:item_create`. Call-sites: grid `getGridItems`, preload. API: `EVENTS.GALLERY.PAGE_ITEMS_GET`.
38
+ - `views.screens/gallery` — `gallery.controller.preload`: PRELOAD / `MEMORY.CLEARED` предзагружают контент вкладок через `PAGE_ITEMS_GET`; фон — `gallery.controller.bg`.
39
+ - `views.screens/save` / `views.screens/gallery` — `isDisableGridChangeVertical = true` в `*.controller.grid`: вертикальные стрелки не эмитят `GRID_NEXT`/`PREV` (не листают страницы); горизонталь по-прежнему может.
40
+ - `views.screens/save` — `save.controller.actions`: `CREATE` → `SAVE.CREATE`, `DELETE` → `SAVE.DELETE`; `group` из payload или `getSaveGroup` (autosave / `pageIndex`); затем `GRID_UPDATE_ITEMS` + `UPDATE_FAST`. Main — SHOW/HIDE/PRELOAD.
41
+ - `views.screens/save` — `save.controller.pages` наследует `@vnejs/module.controller.pages`; `EVENT_PAGE_NEXT`/`PREV` = `GRID_NEXT`/`PREV`; `applyPage` → `STATE_UPDATE` `{ gridIndex, gridsCount }` + `GRID_UPDATE_ITEMS`; стейт `pageIndex` / `pagesCount`; `PAGE_SET` `{ pageIndex }`; `init` пишет `pagesCount`. Main — SHOW/HIDE/PRELOAD. API: `EVENTS.SAVE_VIEW.PAGE_SET` payload `{ pageIndex }`.
42
+ - `views.screens/save` — `TAB_SET` обрабатывает `save.controller.tabs` (`pageIndex: 0`, `GRID_CLEAR`, `STATE_UPDATE` `{ gridIndex, gridsCount }`, `GRID_UPDATE_ITEMS`, опционально `UPDATE_FAST`). `beforeShow` эмитит `TAB_SET` с `isForce` / `isUpdateView: false`.
43
+ - `views.screens/gallery` — `gallery.controller.pages` наследует `@vnejs/module.controller.pages`; `EVENT_PAGE_NEXT`/`PREV` = `GRID_NEXT`/`PREV`; `applyPage` → `STATE_UPDATE` `{ gridIndex, gridsCount }` + `GRID_UPDATE_ITEMS` + `MEMORY.CLEAR`; стейт `pageIndex` / `pagesCount` (вместо `currentPage` / `pages`); `PAGE_SET` `{ pageIndex }`; tabs пишет `pagesCount` при `TAB_SET`. Main — SHOW/HIDE/PRELOAD. API: `EVENTS.GALLERY.PAGE_SET` payload `{ pageIndex }`.
44
+ - `views.screens/gallery` — `gallery.controller.grid` на `@vnejs/module.controller.arrows.grid`; стейт `gridRow` / `gridColumn` / `gridItems` (вместо `current*`); `TAB_SET` в tabs: `GRID_CLEAR` + `STATE_UPDATE` `{ gridIndex, gridsCount }` + `GRID_UPDATE_ITEMS` + опционально `UPDATE_FAST`. `MEMORY.CLEAR` / `UPDATE_FAST` только при `isUpdateView` (не в `beforeShow`), чтобы SHOW не попадал под `viewForceAnimationSources`. API: `EVENTS.GALLERY.UPDATE_FAST`, `EVENTS.GALLERY.GRID_NEXT`, `EVENTS.GALLERY.GRID_PREV`, `EVENTS.GALLERY.GRID_CLEAR`, `EVENTS.GALLERY.GRID_UPDATE_ITEMS`, `EVENTS.GALLERY.PAGE_ITEMS_GET`.
45
+ - `views.screens/settings` — `TAB_SET` в `settings.screen.controller.tabs` (`applyTab` + `SETTINGS_VIEW.TAB_SET` + `UPDATE_FAST`); main на `STATE_UPDATE` только `updateState`. API: `EVENTS.SETTINGS_SCREEN_VIEW.STATE_UPDATE`.
46
+ - `module.controller.arrows.grid` — база сеточной навигации `@vnejs/module.controller.arrows.grid`: четыре стрелки, PUSH/POP на SHOW/HIDE, `STATE_UPDATE` `{ gridRow, gridColumn }` + `UPDATE_FAST`, на краю — `GRID_NEXT` / `GRID_PREV`, сброс позиции — `GRID_CLEAR` (`gridRow` / `gridColumn` → `null` + `STATE_UPDATE`). Abstract: `EVENT_SHOW` / `HIDE` / `STATE_UPDATE` / `UPDATE_FAST` / `GRID_NEXT` / `GRID_PREV` / `GRID_CLEAR`, `CONTROLS_ZINDEX`, `getMaxRows` / `getMaxColumns`. `STATE_UPDATE` зеркалит стейт (`updateState`) и кэш. `GRID_UPDATE_ITEMS` без payload → `getGridItems` из стейта → `STATE_UPDATE` `{ gridItems }`. Флаги `isDisableGridChangeHorizontal` / `isDisableGridChangeVertical` (по умолчанию `false`).
47
+ - `views.screens/save` — `save.controller.grid` наследует `@vnejs/module.controller.arrows.grid`. Внутри сетки — `STATE_UPDATE` с `{ gridRow, gridColumn }` и `UPDATE_FAST`; на краю — `GRID_NEXT` / `GRID_PREV` (`save.controller.pages` мапит на пагинацию); смена tab — `EVENTS.SAVE_VIEW.GRID_CLEAR`. Meta сетки — `STATE_UPDATE` (`gridIndex` / `gridsCount` / `tab`); `GRID_UPDATE_ITEMS` без payload. Загрузка слотов — `getGridItems` через `emitOne(EVENTS.SAVE_VIEW.SLOT_CREATE)`. Модуль `save.view.slot` на `SLOT_CREATE` (`{ key, group, index }`) → `SAVE.GET` + дата/время. API: `EVENTS.SAVE_VIEW.UPDATE_FAST`, `EVENTS.SAVE_VIEW.GRID_NEXT`, `EVENTS.SAVE_VIEW.GRID_PREV`, `EVENTS.SAVE_VIEW.GRID_CLEAR`, `EVENTS.SAVE_VIEW.GRID_UPDATE_ITEMS`, `EVENTS.SAVE_VIEW.SLOT_CREATE`.
48
+ - `module.controller.tabs` / `views.screens/settings` / `views.screens/gallery` — стейт вкладки: `tab` вместо `currentTab`.
49
+
5
50
  ## 0.2.34
6
51
 
7
52
  - `scenario/pause` — логи в модуле `pause.logs`, не `emitLog` из шага. `$ pause` обрабатывает модуль `pause.scenario`: `LINE_EXEC_REG`, затем `EVENTS.PAUSE.EMIT` и `emitNext`. Блокировки — модуль `pause.emit`: в `postinject` создаёт `shared.pauseDisableSources`; `EVENTS.PAUSE.EMIT` (`vne:pause:emit`) эмитит `START`, если набор пуст. `START` больше не смотрит блокировки и не вызывает `emitNext`. `STATE.CLEAR` больше не вызывает `END`. API: `EVENTS.PAUSE.EMIT`, `CONST.PAUSE.LOGS_ACTIONS` (`EMIT` / `emit`, `START` / `start`, `END` / `end`).
package/architecture.md CHANGED
@@ -136,8 +136,12 @@ flowchart TD
136
136
  MCT["@vnejs/module.controller.tabs"]
137
137
  MCP["@vnejs/module.controller.preload"]
138
138
  MCB["@vnejs/module.controller.backgrounds"]
139
+ MCBG["@vnejs/module.controller.bg"]
139
140
  MCAC["@vnejs/module.controller.accept"]
140
141
  MCAV["@vnejs/module.controller.arrows.vertical"]
142
+ MCAH["@vnejs/module.controller.arrows.horizontal"]
143
+ MCAG["@vnejs/module.controller.arrows.grid"]
144
+ MCPG["@vnejs/module.controller.pages"]
141
145
  MCHS["@vnejs/module.controller.hide.on.state"]
142
146
  MCHC["@vnejs/module.controller.hide.on.controls"]
143
147
  MSC["@vnejs/module.scales.common"]
@@ -152,33 +156,41 @@ flowchart TD
152
156
  MC --> MCT
153
157
  MC --> MCP
154
158
  MC --> MCB
159
+ MC --> MCBG
155
160
  MC --> MCAC
156
161
  MC --> MCAV
162
+ MC --> MCAH
163
+ MC --> MCAG
164
+ MC --> MCPG
157
165
  MC --> MCHS
158
166
  MC --> MCHC
159
167
  MC --> MSC
160
168
  MCO --> ML
161
169
  ```
162
170
 
163
- | Пакет | Назначение |
164
- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
165
- | **`@vnejs/module`** | **`Module`**: `VNE`, `on`/`emit`, `inject`, state, shared, media, lifecycle |
166
- | **`@vnejs/module.core`** | **`ModuleCore`** — типизированный доступ к **core-контрактам**; `emitLog`, `emitNext`, … |
167
- | **`@vnejs/module.handlers`** | **`ModuleHandlers`** — параллельные обработчики emit-событий с приоритетами (side effects) |
168
- | **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
169
- | **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
170
- | **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls |
171
- | **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
172
- | **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
173
- | **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на SHOW/HIDE/PRELOAD |
174
- | **`@vnejs/module.controller.tabs`** | Навигация по вкладкам view-экранов: TAB_PREV/TAB_NEXT → `TAB_SET`, PUSH/POP controls на SHOW/HIDE |
175
- | **`@vnejs/module.controller.preload`** | Предзагрузка меток и событий экрана по SHOW / PRELOAD / MEMORY.CLEARED; SHOW/HIDE/PRELOAD задаёт плагин |
176
- | **`@vnejs/module.controller.backgrounds`** | Ротация списка фонов по SHOW / таймеру / MEMORY.CLEARED; стоп на HIDE; события и список задаёт плагин |
177
- | **`@vnejs/module.controller.accept`** | ACCEPT / INTERACT → событие ACCEPT плагина; PUSH/POP controls на SHOW/HIDE |
178
- | **`@vnejs/module.controller.arrows.vertical`** | ARROW_UP / ARROW_BOTTOM по видимым пунктам; PUSH/POP controls на SHOW/HIDE |
179
- | **`@vnejs/module.controller.hide.on.state`** | STATE.SET / STATE.CLEAR → emit HIDE плагина (`isForce` задаёт наследник) |
180
- | **`@vnejs/module.controller.hide.on.controls`** | BACK / MENU / GAMEMENU → emit HIDE плагина; PUSH/POP controls на SHOW/HIDE |
181
- | **`@vnejs/module.scales.common`** | База для scales / RPG-модулей |
171
+ | Пакет | Назначение |
172
+ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
173
+ | **`@vnejs/module`** | **`Module`**: `VNE`, `on`/`emit`, `inject`, state, shared, media, lifecycle |
174
+ | **`@vnejs/module.core`** | **`ModuleCore`** — типизированный доступ к **core-контрактам**; `emitLog`, `emitNext`, … |
175
+ | **`@vnejs/module.handlers`** | **`ModuleHandlers`** — параллельные обработчики emit-событий с приоритетами (side effects) |
176
+ | **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
177
+ | **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
178
+ | **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls |
179
+ | **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
180
+ | **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
181
+ | **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на SHOW/HIDE/PRELOAD |
182
+ | **`@vnejs/module.controller.tabs`** | Навигация по вкладкам: TAB_PREV/TAB_NEXT → `TAB_SET`; guard + `applyTab` (`STATE_UPDATE` `{ tab }`) + abstract `onTabSet`; PUSH/POP на SHOW/HIDE |
183
+ | **`@vnejs/module.controller.preload`** | Предзагрузка меток и событий экрана по SHOW / PRELOAD / MEMORY.CLEARED; SHOW/HIDE/PRELOAD задаёт плагин |
184
+ | **`@vnejs/module.controller.backgrounds`** | Ротация списка фонов по SHOW / таймеру / MEMORY.CLEARED; стоп на HIDE; события и список задаёт плагин |
185
+ | **`@vnejs/module.controller.bg`** | Статичный фон экрана: SHOW_BEFORE → `bgSrc` в стейт; опционально PRELOAD / start / STATE.CLEAR; MEMORY.CLEARED — preload и/или refresh при isShow |
186
+ | **`@vnejs/module.controller.accept`** | ACCEPT / INTERACT → событие ACCEPT плагина; PUSH/POP controls на SHOW/HIDE |
187
+ | **`@vnejs/module.controller.arrows.vertical`** | ARROW_UP / ARROW_BOTTOM по видимым пунктам; PUSH/POP controls на SHOW/HIDE |
188
+ | **`@vnejs/module.controller.arrows.horizontal`** | ARROW_LEFT / ARROW_RIGHT по пунктам; PUSH/POP controls на SHOW/HIDE |
189
+ | **`@vnejs/module.controller.arrows.grid`** | Четыре стрелки по сетке; `GRID_NEXT` / `GRID_PREV` на краю; PUSH/POP на SHOW/HIDE; `GRID_UPDATE_ITEMS` без payload, meta через `STATE_UPDATE` |
190
+ | **`@vnejs/module.controller.pages`** | Пагинация: `PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` → `setPage` → abstract `applyPage` + `UPDATE_FAST`; стейт `pageIndex` / `pagesCount` |
191
+ | **`@vnejs/module.controller.hide.on.state`** | STATE.SET / STATE.CLEAR → emit HIDE плагина (`isForce` задаёт наследник) |
192
+ | **`@vnejs/module.controller.hide.on.controls`** | BACK / MENU / GAMEMENU → emit HIDE плагина; PUSH/POP controls на SHOW/HIDE |
193
+ | **`@vnejs/module.scales.common`** | База для scales / RPG-модулей |
182
194
 
183
195
  ### Принципы
184
196
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnejs/docs",
3
- "version": "0.2.34",
3
+ "version": "0.2.36",
4
4
  "description": "VNEJS documentation for engine consumers and coding agents",
5
5
  "files": [
6
6
  "*.md",
@@ -63,12 +63,12 @@
63
63
  | `choose` | State: `STATE_UPDATE`, синхронизация с `STATE.SET` / `STATE.CLEAR` (→ `SHOW` / `HIDE`). |
64
64
  | `choose.emit` | Обрабатывает `EMIT` (→ `STATE_UPDATE` + `SHOW` или `SKIP`). |
65
65
  | `choose.option` | Обрабатывает `OPTION`. |
66
- | `choose.skip` | Обрабатывает `SKIP`. |
66
+ | `choose.skip` | Обрабатывает `SKIP` через `getBlockSkipShift`. |
67
67
  | `choose.logs` | Логирование `EMIT` / `OPTION` / `SKIP` / `SHOW` / `HIDE`. |
68
68
  | `choose.option.before` | Реестр обработчиков `OPTION_BEFORE_REG`; наследник `@vnejs/module.handlers`. |
69
69
  | `choose.replace` | Реестр обработчиков `OPTION_REPLACE_REG`; наследник `@vnejs/module.replace`. |
70
70
  | `choose.exec` | Реестр обработчиков EXEC_REG / EXEC_GET. |
71
- | `choose.scenario` | Регистрация `% choose`: сбор option-строк, emit `EMIT`. |
71
+ | `choose.scenario` | Регистрация `% choose`: сбор option-строк через `getBlockOptions`, emit `EMIT`. |
72
72
  | `choose.scenario.option` | Регистрация `% choose.option`: skip невыбранных веток. |
73
73
  | `choose.scenario.module` | Регистрация `$ choose`: action `repeat`. |
74
74
 
@@ -54,17 +54,17 @@
54
54
 
55
55
  ## Модули
56
56
 
57
- | Модуль | Зона ответственности |
58
- | --------------------------------- | --------------------------------------------------------------------------------------- |
59
- | `point_and_click` | State: `STATE_UPDATE`, синхронизация с `STATE.SET` / `STATE.CLEAR` (→ `SHOW` / `HIDE`). |
60
- | `point_and_click.emit` | Обрабатывает `EMIT` (→ `STATE_UPDATE` + `SHOW` или `SKIP`). |
61
- | `point_and_click.option` | Обрабатывает `OPTION`. |
62
- | `point_and_click.skip` | Обрабатывает `SKIP`. |
63
- | `point_and_click.logs` | Логирование `EMIT` / `OPTION` / `SKIP` / `SHOW` / `HIDE`. |
64
- | `point_and_click.exec` | Реестр обработчиков EXEC_REG / EXEC_GET. |
65
- | `point_and_click.scenario` | Регистрация `% point-and-click`: сбор option-строк, emit `EMIT`. |
66
- | `point_and_click.scenario.option` | Регистрация `% point-and-click.option`: skip невыбранных веток. |
67
- | `point_and_click.scenario.module` | Регистрация `$ point-and-click`: action `repeat`. |
57
+ | Модуль | Зона ответственности |
58
+ | --------------------------------- | ---------------------------------------------------------------------------------------- |
59
+ | `point_and_click` | State: `STATE_UPDATE`, синхронизация с `STATE.SET` / `STATE.CLEAR` (→ `SHOW` / `HIDE`). |
60
+ | `point_and_click.emit` | Обрабатывает `EMIT` (→ `STATE_UPDATE` + `SHOW` или `SKIP`). |
61
+ | `point_and_click.option` | Обрабатывает `OPTION`. |
62
+ | `point_and_click.skip` | Обрабатывает `SKIP` через `getBlockSkipShift`. |
63
+ | `point_and_click.logs` | Логирование `EMIT` / `OPTION` / `SKIP` / `SHOW` / `HIDE`. |
64
+ | `point_and_click.exec` | Реестр обработчиков EXEC_REG / EXEC_GET. |
65
+ | `point_and_click.scenario` | Регистрация `% point-and-click`: сбор option-строк через `getBlockOptions`, emit `EMIT`. |
66
+ | `point_and_click.scenario.option` | Регистрация `% point-and-click.option`: skip невыбранных веток. |
67
+ | `point_and_click.scenario.module` | Регистрация `$ point-and-click`: action `repeat`. |
68
68
 
69
69
  ## Compatibility
70
70
 
@@ -17,7 +17,10 @@
17
17
 
18
18
  ## Константы
19
19
 
20
- - **`LINE_KEYWORDS.QTE_FALLBACK`** — `"qte-fallback"`: keyword на `% choose.option` для ветки fail QTE (через compatibility choose↔qte).
20
+ | Ключ | Смысл |
21
+ | ---------------------------- | --------------------------------------------------------------------------------------------------- |
22
+ | `LINE_KEYWORDS.QTE_FALLBACK` | `"qte-fallback"`: keyword на `% choose.option` для ветки fail QTE (через compatibility choose↔qte). |
23
+ | `LOGS_ACTIONS` | Метки для логов: `EMIT` (`emit`), `RESULT` (`result`), `MISSING` (`missing`). |
21
24
 
22
25
  ## Параметры
23
26
 
@@ -41,10 +44,12 @@ View сам переводит проценты в геометрию (град
41
44
 
42
45
  ## Модули
43
46
 
44
- | Модуль | Зона ответственности |
45
- | -------------- | ----------------------------------------------------------------------------------------------------------------------------- |
46
- | `qte` | EMIT / RESULT / OPENED / CLOSED; `applyResult` (success → `curLine + 1`, fail → пропуск indented-блока); флаг `skipScenario`. |
47
- | `qte.scenario` | Регистрация `% qte` в SCENARIO; lookup `ITEMS`; при отсутствии id/item — `RESULT { success: false }`. |
47
+ | Модуль | Зона ответственности |
48
+ | -------------- | --------------------------------------------------------------------------------------------------------------------- |
49
+ | `qte` | EMIT → `OPENED`; в `postinject` и на `EMIT` пишет `shared.qteScenarioSkip`. |
50
+ | `qte.result` | RESULT → `CLOSED`; без skip — `applyResult` (success → `curLine + 1`, fail → `getBlockSkipShift`) и `emitNext`. |
51
+ | `qte.logs` | Логи `EMIT` / `RESULT` через `emitLog`; `skipScenario` из `shared.qteScenarioSkip`. |
52
+ | `qte.scenario` | Регистрация `% qte` в SCENARIO; lookup `ITEMS`; при отсутствии id/item — log `MISSING` и `RESULT { success: false }`. |
48
53
 
49
54
  ## Сценарий
50
55
 
@@ -61,7 +66,7 @@ View сам переводит проценты в геометрию (град
61
66
 
62
67
  ## Embedded (`skipScenario`)
63
68
 
64
- При `EMIT` с `skipScenario: true` модуль `qte` на `RESULT` **не** меняет `curLine` и **не** вызывает `emitNext` — только `CLOSED`. Используется compatibility choose↔qte, чтобы ветвление осталось у choose.
69
+ При `EMIT` с `skipScenario: true` ставится `shared.qteScenarioSkip`; на `RESULT` модуль `qte.result` **не** меняет `curLine` и **не** вызывает `emitNext` — только `CLOSED`. Используется compatibility choose↔qte, чтобы ветвление осталось у choose. В `postinject` модуля `qte` флаг — `false`.
65
70
 
66
71
  ## Compatibility
67
72
 
@@ -22,9 +22,9 @@
22
22
 
23
23
  ## Модули
24
24
 
25
- | Модуль | Зона ответственности |
26
- | -------- | -------------------- |
27
- | `random` | Модуль `random`. |
25
+ | Модуль | Зона ответственности |
26
+ | -------- | ------------------------------------------------------------------------------------------------------------------- |
27
+ | `random` | Сбор `% random.option` через `getBlockOptions`, случайный выбор ветки; skip невыбранных через `getOptionExecShift`. |
28
28
 
29
29
  ## Близкие плагины
30
30
 
@@ -31,12 +31,12 @@
31
31
 
32
32
  ## Модули
33
33
 
34
- | Модуль | Зона ответственности |
35
- | --------------- | -------------------------------------------------- |
36
- | `vars.global` | Обрабатывает GLOBAL_GET, GLOBAL_SET, GLOBAL_CLEAR. |
37
- | `vars.inject` | Подмодуль `inject` плагина. |
38
- | `vars` | Реестр обработчиков DEFAULT_REG. |
39
- | `vars.scenario` | Подмодуль `scenario` плагина. |
34
+ | Модуль | Зона ответственности |
35
+ | --------------- | --------------------------------------------------------------------- |
36
+ | `vars.global` | Обрабатывает GLOBAL_GET, GLOBAL_SET, GLOBAL_CLEAR. |
37
+ | `vars.inject` | Подмодуль `inject` плагина. |
38
+ | `vars` | Реестр обработчиков DEFAULT_REG. |
39
+ | `vars.scenario` | На `SCENARIO`: вход внутрь или `getBlockSkipShift` мимо indent-блока. |
40
40
 
41
41
  ## Близкие плагины
42
42
 
@@ -17,7 +17,9 @@
17
17
 
18
18
  ## Константы
19
19
 
20
- Нет.
20
+ | Ключ | Тип | Смысл |
21
+ | ------------- | -------- | -------------------------------------------------------------- |
22
+ | `DEFAULT_TAB` | `string` | Ключ вкладки дефолтных настроек в `PARAMS.TABS` (`"DEFAULT"`). |
21
23
 
22
24
  ## Параметры
23
25
 
@@ -24,12 +24,12 @@ React-UI выбора из текстовых опций. Зависит от sc
24
24
 
25
25
  ## Параметры
26
26
 
27
- | Ключ | Тип | Смысл |
28
- | --------------------- | -------- | ----------------------------------------------- |
29
- | `TRANSITION` | `number` | Длительность анимации показа/скрытия (мс). |
30
- | `ZINDEX` | `number` | Z-index слоя и индекс блока controls. |
31
- | `VIEW_PROPS` | `object` | Пропсы Screen, PositionBox, TextControls, Text. |
32
- | `CONTROLS_EXTENSIONS` | `object` | Дополнительные обработчики controls. |
27
+ | Ключ | Тип | Смысл |
28
+ | --------------------- | -------- | ---------------------------------------------------------------------- |
29
+ | `TRANSITION` | `number` | Длительность анимации показа/скрытия (мс). |
30
+ | `ZINDEX` | `number` | Z-index слоя и индекс блока controls. |
31
+ | `VIEW_PROPS` | `object` | Пропсы Screen, PositionBox, Flex-wrap, title Text, TextControls, Text. |
32
+ | `CONTROLS_EXTENSIONS` | `object` | Дополнительные обработчики controls. |
33
33
 
34
34
  ## Настройки
35
35
 
@@ -43,7 +43,7 @@ React-UI выбора из текстовых опций. Зависит от sc
43
43
  | `choose_view.controller` | `CONTROLS_EXTENSIONS`, `beforeShow` / `afterHide`, зеркало `STATE_UPDATE` / `UPDATE_FAST`. |
44
44
  | `choose_view.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CHOOSE.OPTION` по `currentArrowVerticalItem`; зеркалит `STATE_UPDATE`; PUSH/POP на SHOW/HIDE. |
45
45
  | `choose_view.controller.arrows` | Наследует `@vnejs/module.controller.arrows.vertical`: `ARROW_UP` / `ARROW_BOTTOM` по полному `options[]`; скипает `hided` через `isArrowItemAvailable` (индекс исходный); PUSH/POP на SHOW/HIDE; эмитит `STATE_UPDATE` с `{ currentArrowVerticalItem }` и `UPDATE_FAST`. |
46
- | `choose_view.view` | React-render опций. |
46
+ | `choose_view.view` | React-render опций; опциональный заголовок из `args.title`. |
47
47
 
48
48
  ## Связь с CHOOSE
49
49
 
@@ -0,0 +1,102 @@
1
+ # plugins/views.screens/checkers/
2
+
3
+ Пакет: `@vnejs/plugins.views.screens.checkers` · namespace: `CHECKERS`
4
+
5
+ Экран русских шашек: доска 8×8, навигация стрелками через `@vnejs/module.controller.arrows.grid`, ход через ACCEPT / клик. Стороны — игрок или AI (`player` / `sacrifice` / `random` / `strong`) через `$ checkers ai`.
6
+
7
+ ## События
8
+
9
+ | Ключ | Строка | Смысл |
10
+ | ------------------- | -------------------------------- | ------------------------------------------- |
11
+ | `SHOW` | `vne:checkers:show` | Показать экран и начать партию. |
12
+ | `HIDE` | `vne:checkers:hide` | Скрыть экран. |
13
+ | `UPDATE` | `vne:checkers:update` | Обновить React-view. |
14
+ | `UPDATE_FAST` | `vne:checkers:update_fast` | Быстрый апдейт view (фокус сетки). |
15
+ | `ACCEPT` | `vne:checkers:accept` | Выбор фигуры / клетки / закрытие после win. |
16
+ | `STATE_UPDATE` | `vne:checkers:state_update` | Патч стейта (доска, ход, сетка). |
17
+ | `GRID_NEXT` | `vne:checkers:grid_next` | Край сетки (отключён флагами). |
18
+ | `GRID_PREV` | `vne:checkers:grid_prev` | Край сетки (отключён флагами). |
19
+ | `GRID_CLEAR` | `vne:checkers:grid_clear` | Сброс `gridRow` / `gridColumn`. |
20
+ | `GRID_UPDATE_ITEMS` | `vne:checkers:grid_update_items` | Пересобрать `gridItems` (64 клетки). |
21
+ | `CELL_CLICK` | `vne:checkers:cell_click` | Клик по клетке → фокус + ACCEPT. |
22
+ | `FINISH` | `vne:checkers:finish` | Конец партии → HIDE + `emitNext`. |
23
+ | `AI_TURN` | `vne:checkers:ai_turn` | Ход AI (после SHOW / хода человека). |
24
+
25
+ ## Константы
26
+
27
+ | Ключ | Смысл |
28
+ | -------------- | --------------------------------------------- |
29
+ | `EXEC_ACTIONS` | `SHOW` → `"show"`, `AI` → `"ai"`. |
30
+ | `AI_COLORS` | `WHITE` / `BLACK` → `"white"` / `"black"`. |
31
+ | `AI_TYPES` | `PLAYER` / `SACRIFICE` / `RANDOM` / `STRONG`. |
32
+
33
+ ## Shared
34
+
35
+ | Ключ | Тип / дефолт | Смысл |
36
+ | ---------------- | --------------------------------- | ------------------------------------- |
37
+ | `checkersAi` | `{ white, black }` → оба `player` | Тип управления стороной. |
38
+ | `checkersAiBusy` | `boolean` → `false` | Пока AI ходит — игнор ACCEPT / клика. |
39
+
40
+ ## Параметры
41
+
42
+ | Ключ | Тип | Смысл |
43
+ | --------------- | -------- | ----------------------------------------------------------------------- |
44
+ | `TRANSITION` | `number` | Длительность анимаций экрана / клеток / фигур (мс), по умолчанию `300`. |
45
+ | `AI_DELAY` | `number` | Пауза перед ходом AI (мс), по умолчанию `1000`. |
46
+ | `ZINDEX` | `number` | z-index экрана. |
47
+ | `ROWS` | `number` | `8`. |
48
+ | `COLUMNS` | `number` | `8`. |
49
+ | `CELL_SIZE` | `number` | Размер клетки в design-единицах (`getVneLength`). |
50
+ | `CELL_GAP` | `number` | Зазор между клетками. |
51
+ | `GRAVEYARD_GAP` | `number` | Отступ между доской и «кладбищем» взятых фигур. |
52
+ | `VIEW_PROPS` | `object` | Layout screen / status / flex. Доска — CSS grid 8×8 в view. |
53
+
54
+ ## Модули
55
+
56
+ | Модуль | Зона ответственности |
57
+ | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
58
+ | `checkers.controller` | SHOW/HIDE; `beforeShow` — стартовая доска + снимок `shared.checkersAi` в state; `FINISH` → HIDE + next. |
59
+ | `checkers.controller.grid` | `@vnejs/module.controller.arrows.grid`, 8×8, оба `isDisableGridChange* = true`. |
60
+ | `checkers.controller.accept` | Выбор фигуры / ход / клик; после SHOW ждёт доску и эмитит `AI_TURN`; AI-цикл; победа → `FINISH`. |
61
+ | `checkers` | `$ checkers show` → SHOW; `$ checkers ai <color> <type>` → `shared.checkersAi`. |
62
+ | `checkers.view` | React: доска (`vne-cursor-type` на клетках), фокус, подсветка; анимации; кладбище (белые слева, чёрные справа). |
63
+
64
+ ## AI-типы
65
+
66
+ | Ключ | Поведение |
67
+ | ----------- | -------------------------------------------------------------------------- |
68
+ | `player` | ход человеком |
69
+ | `sacrifice` | среди ходов, после которых у противника есть взятие; иначе любой легальный |
70
+ | `random` | любой легальный ход |
71
+ | `strong` | среди ходов без ответа-взятия; если таких нет — среди «подставляющих» |
72
+
73
+ ## Сценарий
74
+
75
+ ```vne
76
+ % choose
77
+ title: "Кто управляет белыми?"
78
+ % choose.option "Игрок"
79
+ $ checkers ai white player
80
+ % choose.option "Слабый ИИ"
81
+ $ checkers ai white sacrifice
82
+ % choose.option "Средний ИИ"
83
+ $ checkers ai white random
84
+ % choose.option "Сильный ИИ"
85
+ $ checkers ai white strong
86
+ % choose
87
+ title: "Кто управляет чёрными?"
88
+ % choose.option "Игрок"
89
+ $ checkers ai black player
90
+ % choose.option "Слабый ИИ"
91
+ $ checkers ai black sacrifice
92
+ % choose.option "Средний ИИ"
93
+ $ checkers ai black random
94
+ % choose.option "Сильный ИИ"
95
+ $ checkers ai black strong
96
+ $ checkers show
97
+ ```
98
+
99
+ ## Бандл и игра
100
+
101
+ - Бандл: `@vnejs/bundles.checkers` (`bundles/checkers`) — core + `canvas.layer` + controls/keyboard/gamepad/cursor + `text` + choose + `views.cursor` + этот плагин.
102
+ - Тестовая игра: `games/checkers` — `npm run start` / `npm run dev`; иконки курсора — `media/icons/original-4k/cursor/default` (как у Coraline).
@@ -10,20 +10,27 @@ ACCEPT/INTERACT эмитит `CHOOSE` только для выбранного
10
10
 
11
11
  ## События
12
12
 
13
- | Ключ | Строка | Смысл |
14
- | ---------- | ---------------------- | ---------------------------------------- |
15
- | `OPEN` | `vne:gallery:open` | Открыть экран или панель. |
16
- | `CHECK` | `vne:gallery:check` | Проверить состояние или наличие ресурса. |
17
- | `CLEAR` | `vne:gallery:clear` | Очистить накопленное состояние. |
18
- | `SHOW` | `vne:gallery:show` | Показать UI или слой. |
19
- | `HIDE` | `vne:gallery:hide` | Скрыть UI или слой. |
20
- | `PAGE_SET` | `vne:gallery:page_set` | Записать или обновить значение. |
21
- | `TAB_SET` | `vne:gallery:tab_set` | Выбрать вкладку галереи (`{ tab }`). |
22
- | `UPDATE` | `vne:gallery:update` | Обновить состояние или отображение. |
23
- | `PRELOAD` | `vne:gallery:preload` | Событие `PRELOAD` namespace плагина. |
24
- | `CHOOSE` | `vne:gallery:choose` | Событие `CHOOSE` namespace плагина. |
25
- | `ACCEPT` | `vne:gallery:accept` | ACCEPT / INTERACT по выбранному слоту. |
26
- | `STATE_UPDATE` | `vne:gallery:state_update` | Слить partial в стейт accept-модуля. |
13
+ | Ключ | Строка | Смысл |
14
+ | ------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
15
+ | `OPEN` | `vne:gallery:open` | Открыть экран или панель. |
16
+ | `CHECK` | `vne:gallery:check` | Проверить состояние или наличие ресурса. |
17
+ | `CLEAR` | `vne:gallery:clear` | Очистить накопленное состояние. |
18
+ | `SHOW` | `vne:gallery:show` | Показать UI или слой. |
19
+ | `SHOW_BEFORE` | `vne:gallery:show_before` | Хук перед показом: `gallery.controller.bg` пишет `bgSrc` в стейт. |
20
+ | `HIDE` | `vne:gallery:hide` | Скрыть UI или слой. |
21
+ | `PAGE_SET` | `vne:gallery:page_set` | Абсолютный прыжок пагинации UI (`{ pageIndex }`). |
22
+ | `TAB_SET` | `vne:gallery:tab_set` | Выбрать вкладку галереи (`{ tab }`). |
23
+ | `UPDATE` | `vne:gallery:update` | Обновить состояние или отображение. |
24
+ | `UPDATE_FAST` | `vne:gallery:update_fast` | Перерисовать view с `isFast`, без смены стейта. |
25
+ | `PRELOAD` | `vne:gallery:preload` | Событие `PRELOAD` namespace плагина. |
26
+ | `CHOOSE` | `vne:gallery:choose` | Событие `CHOOSE` namespace плагина. |
27
+ | `ACCEPT` | `vne:gallery:accept` | ACCEPT / INTERACT по выбранному слоту. |
28
+ | `STATE_UPDATE` | `vne:gallery:state_update` | Слить partial в стейт (`grid*`, `tab`, `pageIndex` / `pagesCount`, …). |
29
+ | `GRID_NEXT` | `vne:gallery:grid_next` | Край сетки вперёд; `gallery.controller.pages` слушает как `EVENT_PAGE_NEXT`. |
30
+ | `GRID_PREV` | `vne:gallery:grid_prev` | Край сетки назад; `gallery.controller.pages` слушает как `EVENT_PAGE_PREV`. |
31
+ | `GRID_CLEAR` | `vne:gallery:grid_clear` | Сбросить выбор ячейки: `gridRow` / `gridColumn` → `null` (+ `STATE_UPDATE`). |
32
+ | `GRID_UPDATE_ITEMS` | `vne:gallery:grid_update_items` | Пересобрать сетку из стейта (без payload) → `STATE_UPDATE` `{ gridItems }`. Meta — заранее через `STATE_UPDATE`. |
33
+ | `PAGE_ITEMS_GET` | `vne:gallery:page_items_get` | Собрать UI-слот из content (`CHECK` + media); возврат item. Вместо `ITEM_CREATE`. |
27
34
 
28
35
  ## Константы
29
36
 
@@ -49,16 +56,21 @@ ACCEPT/INTERACT эмитит `CHOOSE` только для выбранного
49
56
 
50
57
  ## Модули
51
58
 
52
- | Модуль | Зона ответственности |
53
- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
54
- | `gallery.controller.audio` | Наследник `ModuleControllerAudio`: SHOW/HIDE/PRELOAD → pause global, play/stop `view`-трека; `VOLUME_SETTING = MUSIC.VOLUME`; SHOW передаёт в `AUDIO.PLAY` уже посчитанный `volume`; при `VOLUME_CHANGED` / смене `VOLUME_SETTING` — повторный `AUDIO.VOLUME`. |
55
- | `gallery.controller` | Обрабатывает UPDATE, HIDE, TAB_SET, …. Стрелки в `controls` контроллера; после смены ячейки эмитит `STATE_UPDATE`. |
56
- | `gallery.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CHOOSE` только если слот открыт (`isOpened`, не stub); зеркалит `STATE_UPDATE`; PUSH/POP на SHOW/HIDE. |
57
- | `gallery.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
58
- | `gallery.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
59
- | `gallery.controller.tabs` | Наследник `ModuleControllerTabs`: TAB_PREV/TAB_NEXT → `TAB_SET`; PUSH/POP controls на SHOW/HIDE. |
60
- | `gallery` | Обрабатывает OPEN, CHECK, CLEAR. |
61
- | `gallery.view` | Подмодуль `view` плагина. |
59
+ | Модуль | Зона ответственности |
60
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
61
+ | `gallery.controller.audio` | Наследник `ModuleControllerAudio`: SHOW/HIDE/PRELOAD → pause global, play/stop `view`-трека; `VOLUME_SETTING = MUSIC.VOLUME`; SHOW передаёт в `AUDIO.PLAY` уже посчитанный `volume`; при `VOLUME_CHANGED` / смене `VOLUME_SETTING` — повторный `AUDIO.VOLUME`. |
62
+ | `gallery.controller` | SHOW/HIDE; `beforeShow` → `SHOW_BEFORE` + `TAB_SET`; `STATE_UPDATE` / `UPDATE_FAST`; пустой `controls` на `ZINDEX`. |
63
+ | `gallery.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `STATE_UPDATE` `{ bgSrc }`; PRELOAD → warm-cache фона; `MEMORY.CLEARED` при `isShow` → refresh `bgSrc` + `UPDATE_FAST`. |
64
+ | `gallery.controller.preload` | PRELOAD — page 0 первого таба через `PAGE_ITEMS_GET`; `MEMORY.CLEARED` при `isShow` — текущая / соседние страницы + page 0 остальных табов (`getItemsOnPage` / `getMaxPagesCount` на лету). |
65
+ | `gallery.controller.pages` | Наследует `@vnejs/module.controller.pages`: `EVENT_*` → `GALLERY`; `EVENT_PAGE_NEXT`/`PREV` = `GRID_NEXT`/`PREV`; `applyPage` → `STATE_UPDATE` `{ gridIndex, gridsCount }` + `GRID_UPDATE_ITEMS` + `MEMORY.CLEAR`; стейт `pageIndex` / `pagesCount` (пишет tabs). |
66
+ | `gallery.controller.pages.items` | На `PAGE_ITEMS_GET` собирает UI-слот: `CHECK` + media (`MEDIA.LOAD`); возврат item. |
67
+ | `gallery.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CHOOSE` только если слот открыт (`isOpened`, не stub); зеркалит `STATE_UPDATE` (`grid*`); PUSH/POP на SHOW/HIDE. |
68
+ | `gallery.controller.grid` | Наследует `@vnejs/module.controller.arrows.grid`: четыре стрелки; `isDisableGridChangeVertical = true` (вертикаль не листает страницы); на краю колонок — `GRID_NEXT`/`PREV`; `GRID_CLEAR`; на `GRID_UPDATE_ITEMS` — `getGridItems` через `PAGE_ITEMS_GET` (stub’ы только для layout; в count и snap позиции не входят). |
69
+ | `gallery.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
70
+ | `gallery.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
71
+ | `gallery.controller.tabs` | Наследник `ModuleControllerTabs`: `TAB_SET` → `applyTab` + `onTabSet` (`pageIndex: 0`, `pagesCount`, `GRID_CLEAR`, `STATE_UPDATE` `{ gridIndex, gridsCount }`, `GRID_UPDATE_ITEMS`; при `isUpdateView` — `UPDATE_FAST` + `MEMORY.CLEAR`); TAB_PREV/TAB_NEXT → `TAB_SET`. |
72
+ | `gallery` | Обрабатывает OPEN, CHECK, CLEAR. |
73
+ | `gallery.view` | Подмодуль `view` плагина. |
62
74
 
63
75
  ## Близкие плагины
64
76
 
@@ -68,10 +80,3 @@ ACCEPT/INTERACT эмитит `CHOOSE` только для выбранного
68
80
  - [state.md](../core/state.md) — `STATE`: EVENTS.SET, EVENTS.CLEAR
69
81
  - [storage.md](../core/storage.md) — `STORAGE`: EVENTS.SET, EVENTS.GET, EVENTS.RM_ALL
70
82
  - [system.md](../core/system.md) — `SYSTEM`: EVENTS.STARTED
71
-
72
- ### Остальные
73
-
74
- - [audio.md](../audio/audio.md) — `AUDIO`: EVENTS.GLOBAL_PAUSE, EVENTS.PLAY, EVENTS.STOP, EVENTS.GLOBAL_RESUME, EVENTS.MEDIA_LOAD, EVENTS.VOLUME, EVENTS.VOLUME_CHANGED
75
- - [music.md](../audio/music.md) — `MUSIC`: SETTINGS.VOLUME
76
- - [controls.md](../controls/controls.md) — `CONTROLS`: CONST.BUTTONS.BACK, CONST.BUTTONS.MENU, CONST.BUTTONS.GAMEMENU, CONST.BUTTONS.ARROW_UP, CONST.BUTTONS.ARROW_RIGHT, CONST.BUTTONS.ARROW_BOTTOM, CONST.BUTTONS.ACCEPT, CONST.BUTTONS.INTERACT
77
- - [layer.md](../canvas/layer.md) — `LAYER`: SETTINGS.QUALITY
@@ -6,14 +6,17 @@
6
6
 
7
7
  ## События
8
8
 
9
- | Ключ | Строка | Смысл |
10
- | ---------- | -------------------- | --------------------------------------- |
11
- | `SHOW` | `vne:intro:show` | Показать UI или слой. |
12
- | `HIDE` | `vne:intro:hide` | Скрыть UI или слой. |
13
- | `CLICK` | `vne:intro:click` | Продвинуть сценарий к следующей строке. |
14
- | `UPDATE` | `vne:intro:update` | Обновить состояние или отображение. |
15
- | `SKIP` | `vne:intro:skip` | Продвинуть сценарий к следующей строке. |
16
- | `INTERACT` | `vne:intro:interact` | Продвинуть сценарий к следующей строке. |
9
+ | Ключ | Строка | Смысл |
10
+ | -------------- | ------------------------ | --------------------------------------- |
11
+ | `SHOW` | `vne:intro:show` | Показать UI или слой. |
12
+ | `SHOW_BEFORE` | `vne:intro:show_before` | Хук перед показом: пишет `bgSrc`. |
13
+ | `HIDE` | `vne:intro:hide` | Скрыть UI или слой. |
14
+ | `CLICK` | `vne:intro:click` | Продвинуть сценарий к следующей строке. |
15
+ | `UPDATE` | `vne:intro:update` | Обновить состояние или отображение. |
16
+ | `UPDATE_FAST` | `vne:intro:update_fast` | Перерисовать view с `isFast`. |
17
+ | `SKIP` | `vne:intro:skip` | Продвинуть сценарий к следующей строке. |
18
+ | `INTERACT` | `vne:intro:interact` | Продвинуть сценарий к следующей строке. |
19
+ | `STATE_UPDATE` | `vne:intro:state_update` | Слить partial в стейт. |
17
20
 
18
21
  ## Константы
19
22
 
@@ -31,11 +34,12 @@
31
34
 
32
35
  ## Модули
33
36
 
34
- | Модуль | Зона ответственности |
35
- | ------------------ | ------------------------------------------------------- |
36
- | `intro.controller` | Обрабатывает INTERACT, UPDATE, SHOW, HIDE, …. |
37
- | `intro` | Связь со сценарием: шаг next после завершения действия. |
38
- | `intro.view` | Подмодуль `view` плагина. |
37
+ | Модуль | Зона ответственности |
38
+ | --------------------- | ---------------------------------------------------------------------------------------- |
39
+ | `intro.controller` | SHOW/HIDE; `beforeShow` → `SHOW_BEFORE`; `STATE_UPDATE` / `UPDATE_FAST`; ANY → INTERACT. |
40
+ | `intro.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `bgSrc`; `start` preload. |
41
+ | `intro` | Связь со сценарием: шаг next после завершения действия. |
42
+ | `intro.view` | Подмодуль `view` плагина. |
39
43
 
40
44
  ## Близкие плагины
41
45
 
@@ -6,12 +6,15 @@
6
6
 
7
7
  ## События
8
8
 
9
- | Ключ | Строка | Смысл |
10
- | -------- | -------------------- | ----------------------------------------- |
11
- | `SHOW` | `vne:loading:show` | Показать UI или слой. |
12
- | `HIDE` | `vne:loading:hide` | Скрыть UI или слой. |
13
- | `EMIT` | `vne:loading:emit` | Записать диагностическое сообщение в лог. |
14
- | `UPDATE` | `vne:loading:update` | Обновить состояние или отображение. |
9
+ | Ключ | Строка | Смысл |
10
+ | -------------- | -------------------------- | ----------------------------------------- |
11
+ | `SHOW` | `vne:loading:show` | Показать UI или слой. |
12
+ | `SHOW_BEFORE` | `vne:loading:show_before` | Хук перед показом: пишет `bgSrc`. |
13
+ | `HIDE` | `vne:loading:hide` | Скрыть UI или слой. |
14
+ | `EMIT` | `vne:loading:emit` | Записать диагностическое сообщение в лог. |
15
+ | `UPDATE` | `vne:loading:update` | Обновить состояние или отображение. |
16
+ | `UPDATE_FAST` | `vne:loading:update_fast` | Перерисовать view с `isFast`. |
17
+ | `STATE_UPDATE` | `vne:loading:state_update` | Слить partial в стейт. |
15
18
 
16
19
  ## Константы
17
20
 
@@ -29,11 +32,12 @@
29
32
 
30
33
  ## Модули
31
34
 
32
- | Модуль | Зона ответственности |
33
- | -------------------- | ---------------------------------------------- |
34
- | `loading.controller` | Обрабатывает UPDATE, SHOW, HIDE, STARTED, …. |
35
- | `loading` | Точка входа emit: подготовка и запуск process. |
36
- | `loading.view` | Подмодуль `view` плагина. |
35
+ | Модуль | Зона ответственности |
36
+ | ----------------------- | ----------------------------------------------------------------------------------------------------------------- |
37
+ | `loading.controller` | SHOW/HIDE; `beforeShow` → `SHOW_BEFORE`; `STATE_UPDATE` / `UPDATE_FAST`. |
38
+ | `loading.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `bgSrc`; `start`; `MEMORY.CLEARED` refresh при `isShow`. |
39
+ | `loading` | Точка входа emit: подготовка и запуск process. |
40
+ | `loading.view` | Подмодуль `view` плагина. |
37
41
 
38
42
  ## Близкие плагины
39
43
 
@@ -8,18 +8,19 @@
8
8
 
9
9
  ## События
10
10
 
11
- | Ключ | Строка | Смысл |
12
- | -------------- | --------------------------- | ---------------------------------------------------------------- |
13
- | `HIDE` | `vne:mainmenu:hide` | Скрыть UI или слой. |
14
- | `SHOW` | `vne:mainmenu:show` | Показать UI или слой. |
15
- | `ITEMS` | `vne:mainmenu:items` | Событие `ITEMS` namespace плагина. |
16
- | `PRELOAD` | `vne:mainmenu:preload` | Предзагрузить метки `PRELOAD_LABELS` и события `PRELOAD_EVENTS`. |
17
- | `CLICK` | `vne:mainmenu:click` | Событие `CLICK` namespace плагина. |
18
- | `ACCEPT` | `vne:mainmenu:accept` | Событие `ACCEPT` namespace плагина. |
19
- | `UPDATE` | `vne:mainmenu:update` | Обновить состояние или отображение. |
20
- | `STATE_UPDATE` | `vne:mainmenu:state_update` | Слить partial в стейт контроллера без UPDATE view. |
21
- | `UPDATE_FORCE` | `vne:mainmenu:update_force` | Перерисовать view с `isForce`, стейт не меняет. |
22
- | `UPDATE_FAST` | `vne:mainmenu:update_fast` | Перерисовать view с `isFast`, стейт не меняет. |
11
+ | Ключ | Строка | Смысл |
12
+ | -------------- | --------------------------- | -------------------------------------------------------------------- |
13
+ | `HIDE` | `vne:mainmenu:hide` | Скрыть UI или слой. |
14
+ | `SHOW` | `vne:mainmenu:show` | Показать UI или слой. |
15
+ | `SHOW_BEFORE` | `vne:mainmenu:show_before` | Хук перед показом: начальный `bgSrc` через `mainmenu.controller.bg`. |
16
+ | `ITEMS` | `vne:mainmenu:items` | Событие `ITEMS` namespace плагина. |
17
+ | `PRELOAD` | `vne:mainmenu:preload` | Предзагрузить метки `PRELOAD_LABELS` и события `PRELOAD_EVENTS`. |
18
+ | `CLICK` | `vne:mainmenu:click` | Событие `CLICK` namespace плагина. |
19
+ | `ACCEPT` | `vne:mainmenu:accept` | Событие `ACCEPT` namespace плагина. |
20
+ | `UPDATE` | `vne:mainmenu:update` | Обновить состояние или отображение. |
21
+ | `STATE_UPDATE` | `vne:mainmenu:state_update` | Слить partial в стейт контроллера без UPDATE view. |
22
+ | `UPDATE_FORCE` | `vne:mainmenu:update_force` | Перерисовать view с `isForce`, стейт не меняет. |
23
+ | `UPDATE_FAST` | `vne:mainmenu:update_fast` | Перерисовать view с `isFast`, стейт не меняет. |
23
24
 
24
25
  ## Константы
25
26
 
@@ -48,7 +49,8 @@
48
49
 
49
50
  | Модуль | Зона ответственности |
50
51
  | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
51
- | `mainmenu.controller` | Обрабатывает UPDATE, SHOW, HIDE, STATE_UPDATE, UPDATE_FAST, UPDATE_FORCE, …. На SHOW пушит пустой `controls` на `ZINDEX`, чтобы стопорить слои ниже. |
52
+ | `mainmenu.controller` | UPDATE, SHOW, HIDE, STATE_UPDATE, UPDATE_FAST, UPDATE_FORCE; `beforeShow` → `SHOW_BEFORE` + ITEMS. На SHOW пушит пустой `controls` на `ZINDEX`. |
53
+ | `mainmenu.controller.bg` | Наследует `@vnejs/module.controller.bg`: начальный `bgSrc` на `SHOW_BEFORE`; `start` / `STATE.CLEAR` preload. Ротацию не трогает. |
52
54
  | `mainmenu.hide` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
53
55
  | `mainmenu.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CLICK` по `currentArrowVerticalItem`; зеркалит `STATE_UPDATE`; PUSH/POP на SHOW/HIDE. |
54
56
  | `mainmenu.controller.arrows` | Наследует `@vnejs/module.controller.arrows.vertical`: `ARROW_UP` / `ARROW_BOTTOM` по видимым пунктам; PUSH/POP controls на SHOW/HIDE; эмитит `STATE_UPDATE` с `{ currentArrowVerticalItem }` и `UPDATE_FAST`. |
@@ -8,19 +8,26 @@ ACCEPT/INTERACT повторяет клик по слоту: на вкладке
8
8
 
9
9
  ## События
10
10
 
11
- | Ключ | Строка | Смысл |
12
- | ---------- | ------------------------ | ----------------------------------------------------------------- |
13
- | `SHOW` | `vne:save_view:show` | Показать UI или слой. |
14
- | `HIDE` | `vne:save_view:hide` | Скрыть UI или слой. |
15
- | `PAGE_SET` | `vne:save_view:page_set` | Записать или обновить значение. |
16
- | `TAB_SET` | `vne:save_view:tab_set` | Выбрать вкладку save/load/autosave (`{ tab }`). |
17
- | `CREATE` | `vne:save_view:create` | Создать слот (`{ key, group }`) → `SAVE.CREATE`. |
18
- | `DELETE` | `vne:save_view:delete` | Удалить слот (`{ key, group }`) → `SAVE.DELETE`. |
19
- | `LOAD` | `vne:save_view:load` | Загрузить слот (`{ key, group }`) → `SAVE.PRELOAD` / `SAVE.LOAD`. |
20
- | `UPDATE` | `vne:save_view:update` | Обновить состояние или отображение. |
21
- | `PRELOAD` | `vne:save_view:preload` | Событие `PRELOAD` namespace плагина. |
22
- | `ACCEPT` | `vne:save_view:accept` | ACCEPT / INTERACT по выбранному слоту. |
23
- | `STATE_UPDATE` | `vne:save_view:state_update` | Слить partial в стейт accept-модуля без UPDATE view. |
11
+ | Ключ | Строка | Смысл |
12
+ | ------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
13
+ | `SHOW` | `vne:save_view:show` | Показать UI или слой. |
14
+ | `SHOW_BEFORE` | `vne:save_view:show_before` | Хук перед показом: `save.controller.bg` пишет `bgSrc` в стейт. |
15
+ | `HIDE` | `vne:save_view:hide` | Скрыть UI или слой. |
16
+ | `PAGE_SET` | `vne:save_view:page_set` | Абсолютный прыжок пагинации UI (`{ pageIndex }`). |
17
+ | `TAB_SET` | `vne:save_view:tab_set` | Выбрать вкладку save/load/autosave (`{ tab }`). |
18
+ | `CREATE` | `vne:save_view:create` | Создать слот (`{ key, group }`) → `SAVE.CREATE`. |
19
+ | `DELETE` | `vne:save_view:delete` | Удалить слот (`{ key, group }`) → `SAVE.DELETE`. |
20
+ | `LOAD` | `vne:save_view:load` | Загрузить слот (`{ key, group }`) → `SAVE.PRELOAD` / `SAVE.LOAD`. |
21
+ | `UPDATE` | `vne:save_view:update` | Обновить состояние или отображение. |
22
+ | `UPDATE_FAST` | `vne:save_view:update_fast` | Перерисовать view с `isFast`, без смены стейта. |
23
+ | `PRELOAD` | `vne:save_view:preload` | Событие `PRELOAD` namespace плагина. |
24
+ | `ACCEPT` | `vne:save_view:accept` | ACCEPT / INTERACT по выбранному слоту. |
25
+ | `STATE_UPDATE` | `vne:save_view:state_update` | Слить partial в стейт controller/accept/grid без UPDATE view. |
26
+ | `GRID_NEXT` | `vne:save_view:grid_next` | Край сетки вперёд; `save.controller.pages` слушает как `EVENT_PAGE_NEXT` (намеренный мост, без знания сетки в pages). |
27
+ | `GRID_PREV` | `vne:save_view:grid_prev` | Край сетки назад; `save.controller.pages` слушает как `EVENT_PAGE_PREV`. |
28
+ | `GRID_CLEAR` | `vne:save_view:grid_clear` | Сбросить выбор ячейки: `gridRow` / `gridColumn` → `null` (+ `STATE_UPDATE`). |
29
+ | `GRID_UPDATE_ITEMS` | `vne:save_view:grid_update_items` | Пересобрать сетку из стейта (без payload) → `STATE_UPDATE` `{ gridItems }`. Meta (`gridIndex` / `gridsCount` / `tab`) — заранее через `STATE_UPDATE`. |
30
+ | `SLOT_CREATE` | `vne:save_view:slot_create` | Собрать UI-слот (`{ key, group, index }`) → `SAVE.GET` + дата/время; возврат item. |
24
31
 
25
32
  ## Константы
26
33
 
@@ -39,16 +46,21 @@ ACCEPT/INTERACT повторяет клик по слоту: на вкладке
39
46
 
40
47
  ## Модули
41
48
 
42
- | Модуль | Зона ответственности |
43
- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
44
- | `save.controller.audio` | Наследник `ModuleControllerAudio`: SHOW/HIDE/PRELOAD → pause global, play/stop `view`-трека; `VOLUME_SETTING = MUSIC.VOLUME`; SHOW передаёт в `AUDIO.PLAY` уже посчитанный `volume`; при `VOLUME_CHANGED` / смене `VOLUME_SETTING` — повторный `AUDIO.VOLUME`. |
45
- | `save.controller` | Обрабатывает UPDATE, HIDE, LOAD, TAB_SET, …. SHOW принимает `{ tab }`; в `SAVE.*` передаёт `group` (номер страницы или `autosave`). Стрелки в `controls` контроллера; после смены ячейки эмитит `STATE_UPDATE`. |
46
- | `save.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CREATE` на вкладке save, иначе `LOAD` при `screen`; зеркалит `STATE_UPDATE`; PUSH/POP на SHOW/HIDE. |
47
- | `save.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
48
- | `save.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
49
- | `save.controller.tabs` | Наследник `ModuleControllerTabs`: TAB_PREV/TAB_NEXT → `TAB_SET`; `getTabKeys` фильтрует SAVE vs LOAD/AUTOSAVE. |
50
- | `save.controller.load` | Подмодуль `controller.load` плагина. |
51
- | `save.view` | Подмодуль `view` плагина. |
49
+ | Модуль | Зона ответственности |
50
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
51
+ | `save.controller.audio` | Наследник `ModuleControllerAudio`: SHOW/HIDE/PRELOAD → pause global, play/stop `view`-трека; `VOLUME_SETTING = MUSIC.VOLUME`; SHOW передаёт в `AUDIO.PLAY` уже посчитанный `volume`; при `VOLUME_CHANGED` / смене `VOLUME_SETTING` — повторный `AUDIO.VOLUME`. |
52
+ | `save.controller` | SHOW/HIDE; `beforeShow` → `SHOW_BEFORE` + `TAB_SET`; `STATE_UPDATE` / `UPDATE_FAST`; пустой `controls` на `ZINDEX`. |
53
+ | `save.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `bgSrc`; PRELOAD / `start`; `MEMORY.CLEARED` — preload и refresh при `isShow`. |
54
+ | `save.controller.actions` | CREATE → `SAVE.CREATE`, DELETE → `SAVE.DELETE`; `group` из payload или `getSaveGroup` (autosave / `pageIndex`); затем `GRID_UPDATE_ITEMS` + `UPDATE_FAST`. |
55
+ | `save.controller.pages` | Наследует `@vnejs/module.controller.pages`: `EVENT_*` → `SAVE_VIEW`; `applyPage` → `STATE_UPDATE` `{ gridIndex, gridsCount }` + `GRID_UPDATE_ITEMS`; `init` пишет `pagesCount`. |
56
+ | `save.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CREATE` на вкладке save, иначе `LOAD` при `screen`; зеркалит `STATE_UPDATE`; PUSH/POP на SHOW/HIDE. |
57
+ | `save.controller.grid` | Наследует `@vnejs/module.controller.arrows.grid`: четыре стрелки; `isDisableGridChangeVertical = true` (вертикаль не листает страницы); на краю колонок — `GRID_NEXT`/`PREV`; `GRID_CLEAR`; `GRID_UPDATE_ITEMS` → `getGridItems` / `STATE_UPDATE` `{ gridItems }`. |
58
+ | `save.view.slot` | На `SLOT_CREATE` собирает UI-слот: `SAVE.GET` → `screen` / `ts` / `date` / `time` / `locKey`. |
59
+ | `save.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
60
+ | `save.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
61
+ | `save.controller.tabs` | Наследник `ModuleControllerTabs`: `TAB_SET` → `applyTab` + `onTabSet` (`pageIndex: 0`, `GRID_CLEAR`, `STATE_UPDATE` `{ gridIndex, gridsCount }`, `GRID_UPDATE_ITEMS`, опционально `UPDATE_FAST`); TAB_PREV/TAB_NEXT → `TAB_SET`; `getTabKeys` фильтрует SAVE vs LOAD/AUTOSAVE. |
62
+ | `save.controller.load` | Подмодуль `controller.load` плагина. |
63
+ | `save.view` | Подмодуль `view` плагина. |
52
64
 
53
65
  ## Близкие плагины
54
66
 
@@ -65,7 +77,7 @@ ACCEPT/INTERACT повторяет клик по слоту: на вкладке
65
77
  - [audio.md](../audio/audio.md) — `AUDIO`: EVENTS.GLOBAL_PAUSE, EVENTS.PLAY, EVENTS.STOP, EVENTS.GLOBAL_RESUME, EVENTS.MEDIA_LOAD, EVENTS.VOLUME, EVENTS.VOLUME_CHANGED
66
78
  - [music.md](../audio/music.md) — `MUSIC`: SETTINGS.VOLUME
67
79
  - [confirm.md](./confirm.md) — `CONFIRM`: EVENTS.EMIT
68
- - [controls.md](../controls/controls.md) — `CONTROLS`: CONST.BUTTONS.BACK, CONST.BUTTONS.MENU, CONST.BUTTONS.GAMEMENU, CONST.BUTTONS.ARROW_UP, CONST.BUTTONS.ARROW_RIGHT, CONST.BUTTONS.ARROW_BOTTOM, CONST.BUTTONS.ACCEPT, CONST.BUTTONS.INTERACT
80
+ - [controls.md](../controls/controls.md) — `CONTROLS`: CONST.BUTTONS.BACK, CONST.BUTTONS.MENU, CONST.BUTTONS.GAMEMENU, CONST.BUTTONS.ARROW_UP, CONST.BUTTONS.ARROW_RIGHT, CONST.BUTTONS.ARROW_BOTTOM, CONST.BUTTONS.ARROW_LEFT, CONST.BUTTONS.ACCEPT, CONST.BUTTONS.INTERACT
69
81
  - [loading.md](./loading.md) — `LOADING`: EVENTS.EMIT
70
82
  - [locs.md](../text/locs.md) — `LOCS`: EVENTS.GET
71
83
  - [save.md](../save/save.md) — `SAVE`: EVENTS.CREATE, EVENTS.DELETE, EVENTS.GET, EVENTS.PRELOAD, EVENTS.LOAD
@@ -8,14 +8,17 @@ Breaking: раньше namespace был `SETTINGS_DEFAULTS`, события `vne
8
8
 
9
9
  ## События
10
10
 
11
- | Ключ | Строка | Смысл |
12
- | --------- | ----------------------------------- | --------------------------------------- |
13
- | `UPDATE` | `vne:settings_default_view:update` | Обновить состояние или отображение. |
14
- | `SHOW` | `vne:settings_default_view:show` | Показать UI или слой. |
15
- | `HIDE` | `vne:settings_default_view:hide` | Скрыть UI или слой. |
16
- | `CONFIRM` | `vne:settings_default_view:confirm` | Продвинуть сценарий к следующей строке. |
17
-
18
- На `SHOW` эмитит `SETTINGS_VIEW.SHOW` с `{ tab: PARAMS.SETTINGS_VIEW.TABS.DEFAULT, tabKey: "DEFAULT", locs }`; на `HIDE` — `SETTINGS_VIEW.HIDE`.
11
+ | Ключ | Строка | Смысл |
12
+ | -------------- | ---------------------------------------- | --------------------------------------- |
13
+ | `UPDATE` | `vne:settings_default_view:update` | Обновить состояние или отображение. |
14
+ | `UPDATE_FAST` | `vne:settings_default_view:update_fast` | Перерисовать view с `isFast`. |
15
+ | `SHOW` | `vne:settings_default_view:show` | Показать UI или слой. |
16
+ | `SHOW_BEFORE` | `vne:settings_default_view:show_before` | Хук перед показом: пишет `bgSrc`. |
17
+ | `HIDE` | `vne:settings_default_view:hide` | Скрыть UI или слой. |
18
+ | `CONFIRM` | `vne:settings_default_view:confirm` | Продвинуть сценарий к следующей строке. |
19
+ | `STATE_UPDATE` | `vne:settings_default_view:state_update` | Слить partial в стейт. |
20
+
21
+ На `SHOW_BEFORE` fields-модуль эмитит `SETTINGS_VIEW.SHOW` с `{ tab: TABS[CONST.SETTINGS_VIEW.DEFAULT_TAB], tabKey: CONST.SETTINGS_VIEW.DEFAULT_TAB, locs }`; на `HIDE` — `SETTINGS_VIEW.HIDE`.
19
22
 
20
23
  ## Константы
21
24
 
@@ -37,7 +40,9 @@ Breaking: раньше namespace был `SETTINGS_DEFAULTS`, события `vne
37
40
 
38
41
  | Модуль | Зона ответственности |
39
42
  | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
40
- | `settings.default.controller` | SHOW/HIDE; связка с `SETTINGS_VIEW`. |
43
+ | `settings.default.controller` | SHOW/HIDE; `beforeShow` → `SHOW_BEFORE`; `STATE_UPDATE` / `UPDATE_FAST`. |
44
+ | `settings.default.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `bgSrc`; `MEMORY.CLEARED` при `isShow` → refresh. |
45
+ | `settings.default.controller.fields` | На `SHOW_BEFORE`: `STATE_UPDATE` `{ tab }` + `SETTINGS_VIEW.SHOW` с `CONST.SETTINGS_VIEW.DEFAULT_TAB`. |
41
46
  | `settings.default.controller.accept` | Наследует `@vnejs/module.controller.accept`: только `ACCEPT` (`IS_INTERACT_ENABLED = false`) → `CONFIRM` → `INITED`, `HIDE`, `emitNext`; PUSH/POP на SHOW/HIDE. |
42
47
  | `settings.default` | `SETTINGS.INIT` INITED в `setup`; `LINE_EXEC` как `$ settings.defaults` → `SHOW`, либо `emitNext` при `skip_if_possible` и `INITED`. |
43
48
  | `settings.default.view` | Chrome: title + кнопка Accept. |
@@ -53,5 +58,5 @@ Breaking: раньше namespace был `SETTINGS_DEFAULTS`, события `vne
53
58
 
54
59
  ### Остальные
55
60
 
56
- - [settings.md](../views/settings.md) — `SETTINGS_VIEW`: PARAMS.TABS.DEFAULT, стрелки
61
+ - [settings.md](../views/settings.md) — `SETTINGS_VIEW`: `CONST.DEFAULT_TAB`, стрелки
57
62
  - [controls.md](../controls/controls.md) — `CONTROLS`: CONST.BUTTONS.ACCEPT
@@ -6,15 +6,18 @@
6
6
 
7
7
  ## События
8
8
 
9
- | Ключ | Строка | Смысл |
10
- | --------- | ---------------------------------- | ---------------------------------------------------------------------------- |
11
- | `SHOW` | `vne:settings_screen_view:show` | Показать UI или слой. |
12
- | `HIDE` | `vne:settings_screen_view:hide` | Скрыть UI или слой. |
13
- | `UPDATE` | `vne:settings_screen_view:update` | Обновить состояние или отображение. |
14
- | `PRELOAD` | `vne:settings_screen_view:preload` | Событие `PRELOAD` namespace плагина. |
15
- | `TAB_SET` | `vne:settings_screen_view:tab_set` | Выбрать вкладку по ключу из `PARAMS.SETTINGS_VIEW.TABS` (`{ tab: string }`). |
16
-
17
- На открытии эмитит `SETTINGS_VIEW.SHOW` с `{ tab, tabs, tabKey, locs }`; на `TAB_SET` экрана — `SETTINGS_VIEW.TAB_SET` с `{ tab, tabKey, locs }` (crossfade контента); на `HIDE` — `SETTINGS_VIEW.HIDE`.
9
+ | Ключ | Строка | Смысл |
10
+ | -------------- | --------------------------------------- | ----------------------------------------------------------------------------------- |
11
+ | `SHOW` | `vne:settings_screen_view:show` | Показать UI или слой. |
12
+ | `SHOW_BEFORE` | `vne:settings_screen_view:show_before` | Хук перед показом: bg + `settings.screen.controller.fields` → `SETTINGS_VIEW.SHOW`. |
13
+ | `HIDE` | `vne:settings_screen_view:hide` | Скрыть UI или слой. |
14
+ | `UPDATE` | `vne:settings_screen_view:update` | Обновить состояние или отображение. |
15
+ | `UPDATE_FAST` | `vne:settings_screen_view:update_fast` | Перерисовать view с `isFast`, без смены стейта. |
16
+ | `PRELOAD` | `vne:settings_screen_view:preload` | Событие `PRELOAD` namespace плагина. |
17
+ | `TAB_SET` | `vne:settings_screen_view:tab_set` | Выбрать вкладку по ключу из `PARAMS.SETTINGS_VIEW.TABS` (`{ tab: string }`). |
18
+ | `STATE_UPDATE` | `vne:settings_screen_view:state_update` | Слить partial в стейт (в т.ч. `{ tab }` из tabs-модуля). |
19
+
20
+ На `SHOW_BEFORE` fields-модуль эмитит `SETTINGS_VIEW.SHOW` с `{ tab, tabs, tabKey, locs }`; на `TAB_SET` экрана tabs-модуль шлёт `STATE_UPDATE` `{ tab }`, `SETTINGS_VIEW.TAB_SET` и `UPDATE_FAST`; на `HIDE` — `SETTINGS_VIEW.HIDE`.
18
21
 
19
22
  ## Константы
20
23
 
@@ -36,14 +39,16 @@
36
39
 
37
40
  ## Модули
38
41
 
39
- | Модуль | Зона ответственности |
40
- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
41
- | `settings.screen.controller.audio` | Наследник `ModuleControllerAudio`: SHOW/HIDE/PRELOAD → pause global, play/stop `view`-трека; `VOLUME_SETTING = MUSIC.VOLUME`; SHOW передаёт в `AUDIO.PLAY` уже посчитанный `volume`; при `VOLUME_CHANGED` / смене `VOLUME_SETTING` — повторный `AUDIO.VOLUME`. |
42
- | `settings.screen.controller` | SHOW/HIDE/TAB_SET; связка с `SETTINGS_VIEW`. Пустой `controls` на `ZINDEX`, чтобы стопорить слои ниже. |
43
- | `settings.screen.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
44
- | `settings.screen.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
45
- | `settings.screen.controller.tabs` | Наследник `ModuleControllerTabs`: TAB_PREV/TAB_NEXT → `TAB_SET`; `getTabKeys` по `showInSettings`. |
46
- | `settings.screen.view` | Chrome экрана (Screen, tabs, cross); поля и example text — в `SETTINGS_VIEW`. |
42
+ | Модуль | Зона ответственности |
43
+ | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
44
+ | `settings.screen.controller.audio` | Наследник `ModuleControllerAudio`: SHOW/HIDE/PRELOAD → pause global, play/stop `view`-трека; `VOLUME_SETTING = MUSIC.VOLUME`; SHOW передаёт в `AUDIO.PLAY` уже посчитанный `volume`; при `VOLUME_CHANGED` / смене `VOLUME_SETTING` — повторный `AUDIO.VOLUME`. |
45
+ | `settings.screen.controller` | SHOW/HIDE; `beforeShow` → `SHOW_BEFORE`; `STATE_UPDATE` → `updateState`; `UPDATE_FAST`. Пустой `controls` на `ZINDEX`. |
46
+ | `settings.screen.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW_BEFORE` → `bgSrc`; PRELOAD; `MEMORY.CLEARED` — preload и refresh при `isShow`. |
47
+ | `settings.screen.controller.fields` | На `SHOW_BEFORE`: фильтр tabs (`showInSettings`) → `STATE_UPDATE` `{ tabs, tab }` → `SETTINGS_VIEW.SHOW`. |
48
+ | `settings.screen.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
49
+ | `settings.screen.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
50
+ | `settings.screen.controller.tabs` | Наследник `ModuleControllerTabs`: `TAB_SET` → `applyTab` + `onTabSet` (`SETTINGS_VIEW.TAB_SET` + `UPDATE_FAST`); TAB_PREV/TAB_NEXT → `TAB_SET`; `getTabKeys` по `showInSettings`. |
51
+ | `settings.screen.view` | Chrome экрана (Screen, tabs, cross); поля и example text — в `SETTINGS_VIEW`. |
47
52
 
48
53
  ## Близкие плагины
49
54
 
@@ -4,6 +4,7 @@
4
4
 
5
5
  ```vne
6
6
  % choose
7
+ title: "Меню"
7
8
  % choose.option "Осмотреть"
8
9
  hided: $ flag seen
9
10
  $ flag seen
@@ -24,6 +25,8 @@
24
25
 
25
26
  Если все опции `hided` (или список пуст) — блок пропускается.
26
27
 
28
+ Опционально у блока: `title: "…"` — заголовок над опциями (рисует `views.scenario.choose`).
29
+
27
30
  ## Props и keywords опции
28
31
 
29
32
  ```vne