@vnejs/docs 0.2.57 → 0.2.59

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,22 @@
2
2
 
3
3
  Краткая история изменений движка (плагины, helpers, packages, CLI и прочий runtime) и внешнего API. Версии — релизы пакета `@vnejs/docs`.
4
4
 
5
+ ## 0.2.59
6
+
7
+ - `views.scenario/interface.controls`, `views.scenario/interface.fastforward` — hide не сбрасывает локальный стейт (`SHOULD_CLEAR_STATE_ON_CLEANUP` = `false`). Иначе `$ interface show` после выбора публиковал `isVisible: false`, и кнопки с индикатором прокрутки оставались прозрачными. API: `InterfaceControlsController.SHOULD_CLEAR_STATE_ON_CLEANUP`, `InterfaceFastforwardController.SHOULD_CLEAR_STATE_ON_CLEANUP`.
8
+ - `module.controller.hide.on.controls`, `module.controller.accept`, `module.controller.interact`, `module.controller.arrows.vertical`, `module.controller.arrows.horizontal`, `module.controller.arrows.grid`, `module.controller.tabs`, `module.controller.audio` — свой `state.isShow` снят. Повторный `SHOW` / `HIDE` обрывает `ModuleController` на `GATE`; расширения больше не пропускают `POP` по локальному флагу. API: снято `state.isShow` у `ModuleControllerHideOnControlsState`, `ModuleControllerAcceptState`, `ModuleControllerInteractState`, `ModuleControllerArrowsVerticalState`, `ModuleControllerArrowsHorizontalState`, `ModuleControllerArrowsGridState`, `ModuleControllerTabsState`, `ModuleControllerAudioState`.
9
+ - `module.components` — `ModuleController.setShow` пишет `{ isShow }` через `EVENT_UPDATE_STATE`, затем вызывает `updateView(isForce, false)`.
10
+ - `module.controller.backgrounds`, `module.controller.bg`, `module.controller.preload` — подписка на `EVENT_UPDATE_STATE` (`updateState`). Свой `isShow` на `SHOW` / `HIDE` снят. `backgrounds` на `HIDE.AFTER` всегда снимает таймер ротации. API: `ModuleControllerPreload.EVENT_UPDATE_STATE`.
11
+
12
+ ## 0.2.58
13
+
14
+ - `text/text` — `STATE.SET` и `STATE.CLEAR` эмитят `TEXT.EMIT` с `isKeepProcessState`, чтобы восстановление не затирало `text.process.state`. `TEXT.EMIT_END` с этим флагом не шлёт `TEXT.PROCESS_STATE` и `TEXT.EMIT_NEXT`. Сценарный `TEXT.EMIT` флаг не ставит. API: `TextEmitPayload.isKeepProcessState`, `TextEmitEndPayload.isKeepProcessState`.
15
+ - `scenario/choose` — у каждого открытия выбора свой `id` (`crypto.randomUUID()` на `EMIT`, `""` после закрытия). `STATE.SET` при другом открытом выборе пишет срез и шлёт `HIDE`, затем `SHOW` с `{ isForce: true }`. Смена `isShow` шлёт один `EVENTS.CHOOSE.HIDE` или `EVENTS.CHOOSE.SHOW` с `{ isForce: true }`. API: `ChoosePluginModelState.id`.
16
+ - `module.controller.interact` — `BUTTONS.ANY` → `EVENTS.INTERACT.EMIT`; после показа `EVENTS.INTERACT.PUSH` с `onInteract`, перед скрытием `EVENTS.INTERACT.POP`; controls PUSH/POP на `SHOW.CONTROLS` / `HIDE.CONTROLS`. API: `ModuleControllerInteract.onInteract`, `ModuleControllerInteract.EVENT_SHOW`, `ModuleControllerInteract.EVENT_HIDE`, `ModuleControllerInteract.CONTROLS_ZINDEX`, `ModuleControllerInteract.CONTROLS_CHECK_NEXT`.
17
+ - `views/video` — `BUTTONS.ANY` и `INTERACT.PUSH` / `POP` в `video.controller.interact` на `@vnejs/module.controller.interact`; `onInteract` возвращает промис `EVENTS.VIDEO.HIDE`. `video.controller` на `SHOW.BEFORE` эмитит `EVENTS.INTERFACE.TEXT_HIDE`, на `HIDE.AFTER` — `EVENTS.VIDEO.SET_SRC` и `EVENTS.SCENARIO.NEXT`.
18
+ - `views.screens/intro` — `BUTTONS.ANY` и `INTERACT.PUSH` / `POP` в `intro.controller.interact` на `@vnejs/module.controller.interact`; `onInteract` → `EVENTS.INTRO.INTERACT`.
19
+ - `views.screens/credits` — `credits.controller.accept` заменён на `credits.controller.interact` на `@vnejs/module.controller.interact`; `onInteract` → `EVENTS.CREDITS.HIDE`. Снято `EVENTS.CREDITS.ACCEPT`.
20
+
5
21
  ## 0.2.57
6
22
 
7
23
  - `module.controller.arrows.horizontal` — кнопки зовут переопределяемые `onArrowLeft` / `onArrowRight` (по умолчанию `decCurrentItem` / `incCurrentItem`). Хук может вернуть `Promise`. `getMaxCurrentItem` больше не abstract, по умолчанию `0`. `EVENT_UPDATE_STATE` сливает partial в стейт модуля. API: `ModuleControllerArrowsHorizontal.onArrowLeft`, `ModuleControllerArrowsHorizontal.onArrowRight`, `ModuleControllerArrowsHorizontal.getMaxCurrentItem`.
package/architecture.md CHANGED
@@ -137,6 +137,7 @@ flowchart TD
137
137
  MCB["@vnejs/module.controller.backgrounds"]
138
138
  MCBG["@vnejs/module.controller.bg"]
139
139
  MCAC["@vnejs/module.controller.accept"]
140
+ MCIN["@vnejs/module.controller.interact"]
140
141
  MCAV["@vnejs/module.controller.arrows.vertical"]
141
142
  MCAH["@vnejs/module.controller.arrows.horizontal"]
142
143
  MCAG["@vnejs/module.controller.arrows.grid"]
@@ -156,6 +157,7 @@ flowchart TD
156
157
  MC --> MCB
157
158
  MC --> MCBG
158
159
  MC --> MCAC
160
+ MC --> MCIN
159
161
  MC --> MCAV
160
162
  MC --> MCAH
161
163
  MC --> MCAG
@@ -166,28 +168,29 @@ flowchart TD
166
168
  MCO --> ML
167
169
  ```
168
170
 
169
- | Пакет | Назначение |
170
- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
171
- | **`@vnejs/module`** | **`Module`**: `VNE`, `on`/`emit`, `inject`, state, shared, media, lifecycle |
172
- | **`@vnejs/module.core`** | **`ModuleCore`** — типизированный доступ к **core-контрактам** |
173
- | **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
174
- | **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
175
- | **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls. SHOW/HIDE по `CONST.COMPONENTS.LIFECYCLE_PRIORITY`; `UPDATE_STATE`, `UPDATE_FAST`, `EXTERNAL_UPDATE` (`isShow` → `updateViewFast`) |
176
- | **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
177
- | **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
178
- | **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на `SHOW.AFTER` / `HIDE.AFTER` / PRELOAD |
179
- | **`@vnejs/module.controller.tabs`** | Навигация по вкладкам: TAB_PREV/TAB_NEXT → `TAB_SET`; guard + `applyTab` (`UPDATE_STATE` `{ tab }`) + abstract `onTabSet`; вкладка на `SHOW.BEFORE`, PUSH/POP на `CONTROLS` |
180
- | **`@vnejs/module.controller.preload`** | Предзагрузка меток и событий экрана на `SHOW.BEFORE` / PRELOAD / MEMORY.CLEARED; SHOW/HIDE/PRELOAD задаёт плагин |
181
- | **`@vnejs/module.controller.backgrounds`** | Ротация списка фонов на `SHOW.AFTER` / таймеру / MEMORY.CLEARED; стоп на `HIDE.AFTER`; события и список задаёт плагин |
182
- | **`@vnejs/module.controller.bg`** | Статичный фон экрана: `SHOW.BEFORE` пишет `bgSrc` через `UPDATE_STATE`; `isShow` на `SHOW.MAIN` / `HIDE.MAIN`; опционально PRELOAD / start / STATE.CLEAR; MEMORY.CLEARED — preload и/или refresh при isShow |
183
- | **`@vnejs/module.controller.accept`** | ACCEPT / INTERACT → событие ACCEPT плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
184
- | **`@vnejs/module.controller.arrows.vertical`** | ARROW_UP / ARROW_BOTTOM по видимым пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE` |
185
- | **`@vnejs/module.controller.arrows.horizontal`** | ARROW_LEFT / ARROW_RIGHT по пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE` |
186
- | **`@vnejs/module.controller.arrows.grid`** | Четыре стрелки по сетке; `GRID_NEXT` / `GRID_PREV` на краю; PUSH/POP на `SHOW.CONTROLS` / `HIDE.CONTROLS`; `GRID_UPDATE_ITEMS` без payload, meta через `UPDATE_STATE` |
187
- | **`@vnejs/module.controller.pages`** | Пагинация: `PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` → `setPage` → `UPDATE_STATE` (`pageIndex`) + abstract `applyPage` + `UPDATE_FAST` |
188
- | **`@vnejs/module.controller.hide.on.state`** | STATE.SET / STATE.CLEAR → emit HIDE плагина (`isForce` задаёт наследник) |
189
- | **`@vnejs/module.controller.hide.on.controls`** | BACK / MENU / GAMEMENU → emit HIDE плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
190
- | **`@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-контрактам** |
175
+ | **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
176
+ | **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
177
+ | **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls. `SHOW`: `GATE` `-200`, `BEFORE` `-100`, `MAIN` `0`, `CONTROLS` `100`, `AFTER` `200`, `CLEANUP` `300`. `HIDE`: `GATE` `-300`, `CONTROLS` `-200`, `BEFORE` `-100`, `MAIN` `0`, `AFTER` `100`, `CLEANUP` `200`. `setShow` эмитит `UPDATE_STATE` `{ isShow }`, затем `updateView(isForce, false)`. `UPDATE_FAST`, `EXTERNAL_UPDATE` (`isShow` → `updateViewFast`) |
178
+ | **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
179
+ | **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
180
+ | **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на `SHOW.AFTER` / `HIDE.AFTER` / PRELOAD |
181
+ | **`@vnejs/module.controller.tabs`** | Навигация по вкладкам: TAB_PREV/TAB_NEXT → `TAB_SET`; guard + `applyTab` (`UPDATE_STATE` `{ tab }`) + abstract `onTabSet`; вкладка на `SHOW.BEFORE`, PUSH/POP на `CONTROLS` |
182
+ | **`@vnejs/module.controller.preload`** | Предзагрузка меток и событий на `SHOW.BEFORE` (эмитит PRELOAD) и по PRELOAD. `isShow` из `UPDATE_STATE`; `MEMORY.CLEARED` — только при `isShow`. События задаёт плагин (`EVENT_SHOW` / `EVENT_HIDE` / `EVENT_PRELOAD` / `EVENT_UPDATE_STATE`) |
183
+ | **`@vnejs/module.controller.backgrounds`** | Ротация списка фонов на `SHOW.AFTER` / таймеру / `MEMORY.CLEARED` при `isShow` из `UPDATE_STATE`. Таймер на `HIDE.AFTER` снимается всегда. События и список задаёт плагин |
184
+ | **`@vnejs/module.controller.bg`** | Статичный фон экрана: `SHOW.BEFORE` пишет `bgSrc` через `UPDATE_STATE`; `isShow` приходит из `UPDATE_STATE`. Опционально PRELOAD / start / STATE.CLEAR; `MEMORY.CLEARED` — preload и/или refresh при `isShow` |
185
+ | **`@vnejs/module.controller.accept`** | ACCEPT / INTERACT → событие ACCEPT плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
186
+ | **`@vnejs/module.controller.interact`** | `BUTTONS.ANY` → `INTERACT.EMIT`; после показа `INTERACT.PUSH` (`onInteract`), перед скрытием `INTERACT.POP`; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
187
+ | **`@vnejs/module.controller.arrows.vertical`** | ARROW_UP / ARROW_BOTTOM по видимым пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE` |
188
+ | **`@vnejs/module.controller.arrows.horizontal`** | ARROW_LEFT / ARROW_RIGHT по пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE` |
189
+ | **`@vnejs/module.controller.arrows.grid`** | Четыре стрелки по сетке; `GRID_NEXT` / `GRID_PREV` на краю; PUSH/POP на `SHOW.CONTROLS` / `HIDE.CONTROLS`; `GRID_UPDATE_ITEMS` без payload, meta через `UPDATE_STATE` |
190
+ | **`@vnejs/module.controller.pages`** | Пагинация: `PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` → `setPage` → `UPDATE_STATE` (`pageIndex`) + abstract `applyPage` + `UPDATE_FAST` |
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.CONTROLS` / `HIDE.CONTROLS` |
193
+ | **`@vnejs/module.scales.common`** | База для scales / RPG-модулей |
191
194
 
192
195
  ### Принципы
193
196
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnejs/docs",
3
- "version": "0.2.57",
3
+ "version": "0.2.59",
4
4
  "description": "VNEJS documentation for engine consumers and coding agents",
5
5
  "files": [
6
6
  "*.md",
@@ -57,20 +57,28 @@ Payloads и результаты хендлеров типизированы ч
57
57
 
58
58
  Нет.
59
59
 
60
+ ## Стейт
61
+
62
+ `globalState.choose`: `options`, `args`, `isShow`, `id`.
63
+
64
+ `id` — экземпляр открытия. `crypto.randomUUID()` на `EMIT` (в том числе `$ choose repeat`), `""` после закрытия. В сейв и снапшот истории попадает вместе со стейтом. В сценарий не выводится.
65
+
66
+ `STATE.SET` не меняет стейт, если совпали `isShow` и `id`. Другой открытый выбор (`isShow: true`, другой `id`): запись среза, затем `HIDE` и `SHOW` с `{ isForce: true }`, чтобы view заново прочитал опции. Смена видимости — один `SHOW` или `HIDE` с `{ isForce: true }`. Пока выбор скрыт, другой срез только записывается в стейт.
67
+
60
68
  ## Модули
61
69
 
62
- | Модуль | Зона ответственности |
63
- | ------------------------ | --------------------------------------------------------------------------------------- |
64
- | `choose` | State: `STATE_UPDATE`, синхронизация с `STATE.SET` / `STATE.CLEAR` (→ `SHOW` / `HIDE`). |
65
- | `choose.emit` | Обрабатывает `EMIT` (→ `STATE_UPDATE` + `SHOW` или `SKIP`). |
66
- | `choose.option` | Обрабатывает `OPTION`. |
67
- | `choose.skip` | Обрабатывает `SKIP` через `getBlockSkipShift`. |
68
- | `choose.logs` | Логирование `EMIT` / `OPTION` / `SKIP` / `SHOW` / `HIDE`. |
69
- | `choose.replace` | Реестр обработчиков `OPTION_REPLACE_REG`; наследник `@vnejs/module.replace`. |
70
- | `choose.exec` | Реестр обработчиков EXEC_REG / EXEC_GET. |
71
- | `choose.scenario` | Регистрация `% choose`: сбор option-строк через `getBlockOptions`, emit `EMIT`. |
72
- | `choose.scenario.option` | Регистрация `% choose.option`: skip невыбранных веток. |
73
- | `choose.scenario.module` | Регистрация `$ choose`: action `repeat`. |
70
+ | Модуль | Зона ответственности |
71
+ | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
72
+ | `choose` | State (`id`, `options`, `args`, `isShow`): `STATE_UPDATE`, `STATE.SET` / `STATE.CLEAR` (→ `SHOW` / `HIDE`; смена открытого выбора — `HIDE`, затем `SHOW`). |
73
+ | `choose.emit` | Обрабатывает `EMIT` (→ `STATE_UPDATE` + `SHOW` или `SKIP`). |
74
+ | `choose.option` | Обрабатывает `OPTION`. |
75
+ | `choose.skip` | Обрабатывает `SKIP` через `getBlockSkipShift`. |
76
+ | `choose.logs` | Логирование `EMIT` / `OPTION` / `SKIP` / `SHOW` / `HIDE`. |
77
+ | `choose.replace` | Реестр обработчиков `OPTION_REPLACE_REG`; наследник `@vnejs/module.replace`. |
78
+ | `choose.exec` | Реестр обработчиков EXEC_REG / EXEC_GET. |
79
+ | `choose.scenario` | Регистрация `% choose`: сбор option-строк через `getBlockOptions`, emit `EMIT`. |
80
+ | `choose.scenario.option` | Регистрация `% choose.option`: skip невыбранных веток. |
81
+ | `choose.scenario.module` | Регистрация `$ choose`: action `repeat`. |
74
82
 
75
83
  ## Compatibility
76
84
 
@@ -8,25 +8,25 @@
8
8
 
9
9
  Payloads и результаты хендлеров типизированы через module augmentation контракта (`VneEventPayloadMap` / `VneEventResultMap`); типы — в `@vnejs/contracts.text`.
10
10
 
11
- | Ключ | Строка | Смысл |
12
- | --------------------- | ------------------------------ | ------------------------------------------------------------------- |
13
- | `EMIT` | `vne:text:emit` | Начать вывод: подготовка токенов, обновление state, запуск process. |
14
- | `EMIT_END` | `vne:text:emit_end` | Завершить текущий шаг; при autonext перейти к следующему. |
15
- | `EMIT_NEXT` | `vne:text:emit_next` | Перейти к следующему шагу emit (подписки с `priority` на Observer). |
16
- | `EMIT_BEFORE` | `vne:text:emit_before` | Хук перед основным emit (подписки с `priority` на Observer). |
17
- | `EMIT_PROCESS` | `vne:text:emit_process` | Запустить пошаговый процесс вывода. |
18
- | `PREPARE_TOKENS` | `vne:text:prepare_tokens` | Подготовить токены или промежуточные данные. |
19
- | `PROCESS_CANCEL` | `vne:text:process_cancel` | Отменить текущий процесс. |
20
- | `PROCESS_STATE` | `vne:text:process_state` | Изменить состояние процесса. |
21
- | `CHANGED` | `vne:text:changed` | Зафиксировать изменение состояния. |
22
- | `SPEAKER_CHANGED` | `vne:text:speaker_changed` | Зафиксировать смену текущего спикера. |
23
- | `SPEAKER_INFO_UPDATE` | `vne:text:speaker_info_update` | Обновить метаданные спикера (цвет, имя, opacity). |
24
- | `STATE_UPDATE` | `vne:text:state_update` | Обновить накопленное состояние модуля. |
25
- | `STATE_CHANGED` | `vne:text:state_changed` | Сигнал об изменении накопленного состояния. |
26
- | `RECALC` | `vne:text:recalc` | Запросить данные у обработчиков и продолжить цепочку. |
27
- | `RECALC_DONE` | `vne:text:recalc_done` | Завершить операцию `RECALC`. |
28
- | `REPLACE` | `vne:text:replace` | Заменить текущее значение или контент. |
29
- | `REPLACE_REG` | `vne:text:replace_reg` | Зарегистрировать обработчик `REPLACE`. |
11
+ | Ключ | Строка | Смысл |
12
+ | --------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
13
+ | `EMIT` | `vne:text:emit` | Начать вывод: подготовка токенов, обновление state, запуск process. С `isKeepProcessState` после `STATE_CHANGED` сразу `EMIT_END`. |
14
+ | `EMIT_END` | `vne:text:emit_end` | Завершить текущий шаг; при autonext перейти к следующему. С `isKeepProcessState` не шлёт `PROCESS_STATE` и `EMIT_NEXT`. |
15
+ | `EMIT_NEXT` | `vne:text:emit_next` | Перейти к следующему шагу emit (подписки с `priority` на Observer). |
16
+ | `EMIT_BEFORE` | `vne:text:emit_before` | Хук перед основным emit (подписки с `priority` на Observer). |
17
+ | `EMIT_PROCESS` | `vne:text:emit_process` | Запустить пошаговый процесс вывода. |
18
+ | `PREPARE_TOKENS` | `vne:text:prepare_tokens` | Подготовить токены или промежуточные данные. |
19
+ | `PROCESS_CANCEL` | `vne:text:process_cancel` | Отменить текущий процесс. |
20
+ | `PROCESS_STATE` | `vne:text:process_state` | Изменить состояние процесса. |
21
+ | `CHANGED` | `vne:text:changed` | Зафиксировать изменение состояния. |
22
+ | `SPEAKER_CHANGED` | `vne:text:speaker_changed` | Зафиксировать смену текущего спикера. |
23
+ | `SPEAKER_INFO_UPDATE` | `vne:text:speaker_info_update` | Обновить метаданные спикера (цвет, имя, opacity). |
24
+ | `STATE_UPDATE` | `vne:text:state_update` | Обновить накопленное состояние модуля. |
25
+ | `STATE_CHANGED` | `vne:text:state_changed` | Сигнал об изменении накопленного состояния. |
26
+ | `RECALC` | `vne:text:recalc` | Запросить данные у обработчиков и продолжить цепочку. |
27
+ | `RECALC_DONE` | `vne:text:recalc_done` | Завершить операцию `RECALC`. |
28
+ | `REPLACE` | `vne:text:replace` | Заменить текущее значение или контент. |
29
+ | `REPLACE_REG` | `vne:text:replace_reg` | Зарегистрировать обработчик `REPLACE`. |
30
30
 
31
31
  ## Константы
32
32
 
@@ -48,19 +48,19 @@ Payloads и результаты хендлеров типизированы ч
48
48
 
49
49
  ## Модули
50
50
 
51
- | Модуль | Зона ответственности |
52
- | ---------------------- | -------------------------------------------------------------------------------------------------------- |
53
- | `text.emit.end` | Завершение emit и переход к next или финальному state. |
54
- | `text.emit.next` | На `EMIT_NEXT`: `PROCESS_STATE` NEXT, затем `onTextEmitNext` → `emit SCENARIO.NEXT` (`priority` 999999). |
55
- | `text.emit` | Точка входа emit: подготовка и запуск process. |
56
- | `text.exec` | Подмодуль `exec` плагина. |
57
- | `text.prepare.tokens` | Токенизация текста перед отображением. |
58
- | `text.process.state` | В `postinject` — `shared.textProcessSkipSources`; PROCESS_STATE, SET, CLEAR. |
59
- | `text.process.enabled` | Подмодуль `process.enabled` плагина. |
60
- | `text.recalc` | Пересчёт производного состояния текста. |
61
- | `text.replace` | Реестр обработчиков REPLACE_REG. |
62
- | `text.speaker` | SPEAKER_INFO_UPDATE, CLEAR, SET; на `EMIT_BEFORE` (`priority` 100) — speaker. |
63
- | `text` | Обрабатывает STATE_UPDATE, STATE_CHANGED, CLEAR, SET. |
51
+ | Модуль | Зона ответственности |
52
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------- |
53
+ | `text.emit.end` | Завершение emit и переход к next или финальному state. `isKeepProcessState` выходит без `PROCESS_STATE` и `EMIT_NEXT`. |
54
+ | `text.emit.next` | На `EMIT_NEXT`: `PROCESS_STATE` NEXT, затем `onTextEmitNext` → `emit SCENARIO.NEXT` (`priority` 999999). |
55
+ | `text.emit` | Точка входа emit: подготовка и запуск process. `isKeepProcessState` после `STATE_CHANGED` сразу `EMIT_END`. |
56
+ | `text.exec` | Подмодуль `exec` плагина. |
57
+ | `text.prepare.tokens` | Токенизация текста перед отображением. |
58
+ | `text.process.state` | В `postinject` — `shared.textProcessSkipSources`; PROCESS_STATE, SET, CLEAR. |
59
+ | `text.process.enabled` | Подмодуль `process.enabled` плагина. |
60
+ | `text.recalc` | Пересчёт производного состояния текста. |
61
+ | `text.replace` | Реестр обработчиков REPLACE_REG. |
62
+ | `text.speaker` | SPEAKER_INFO_UPDATE, CLEAR, SET; на `EMIT_BEFORE` (`priority` 100) — speaker. |
63
+ | `text` | Обрабатывает STATE_UPDATE, STATE_CHANGED, CLEAR, SET. `STATE.SET` и `STATE.CLEAR` передают `isKeepProcessState`. |
64
64
 
65
65
  ## Compatibility
66
66
 
@@ -40,19 +40,20 @@ Payloads и результаты хендлеров типизированы ч
40
40
 
41
41
  ## Модули
42
42
 
43
- | Модуль | Зона ответственности |
44
- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
45
- | `video.controller` | SHOW/HIDE, `BUTTONS.ANY` → `INTERACT.EMIT`. |
46
- | `video.controller.src` | `SET_SRC` → `UPDATE_STATE` `{ src }` + `UPDATE_FAST`. |
47
- | `video.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: только `STATE.CLEAR` → `HIDE` с `{ isForce: true }` (`IS_STATE_SET_ENABLED = false`). |
48
- | `video` | Обрабатывает HIDE, PLAY, LOAD, GET, …. |
49
- | `video.view` | Подмодуль `view` плагина. |
43
+ | Модуль | Зона ответственности |
44
+ | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
45
+ | `video.controller` | SHOW/HIDE; `SHOW.BEFORE` → `INTERFACE.TEXT_HIDE`; `HIDE.AFTER` → `SET_SRC` и `SCENARIO.NEXT`. |
46
+ | `video.controller.interact` | Наследует `@vnejs/module.controller.interact`: `BUTTONS.ANY` → `INTERACT.EMIT`; `onInteract` возвращает промис `VIDEO.HIDE`; `CONTROLS_CHECK_NEXT = false`. |
47
+ | `video.controller.src` | `SET_SRC` → `UPDATE_STATE` `{ src }` + `UPDATE_FAST`. |
48
+ | `video.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: только `STATE.CLEAR` → `HIDE` с `{ isForce: true }` (`IS_STATE_SET_ENABLED = false`). |
49
+ | `video` | Обрабатывает HIDE, PLAY, LOAD, GET, …. |
50
+ | `video.view` | Подмодуль `view` плагина. |
50
51
 
51
52
  ## Близкие плагины
52
53
 
53
54
  ### plugins/core/
54
55
 
55
- - [interact.md](../core/interact.md) — `INTERACT`: EVENTS.EMIT, EVENTS.PUSH
56
+ - [interact.md](../core/interact.md) — `INTERACT`: EVENTS.EMIT, EVENTS.PUSH, EVENTS.POP
56
57
  - [media.md](../core/media.md) — `MEDIA`: EVENTS.LOAD, EVENTS.GET, CONST.PRIORITIES.BACKGROUND, CONST.TYPES.VIDEO
57
58
  - [scenario.md](../core/scenario.md) — `SCENARIO`: EVENTS.NEXT, EVENTS.LINE_EXEC_REG, EVENTS.LINE_LOAD_REG
58
59
  - [state.md](../core/state.md) — `STATE`: EVENTS.CLEAR, EVENTS.SET
@@ -37,10 +37,10 @@ Payloads и результаты хендлеров типизированы ч
37
37
 
38
38
  ## Модули
39
39
 
40
- | Модуль | Зона ответственности |
41
- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
42
- | `interface.controls.controller` | Обрабатывает UPDATE, VISIBLE, INTERACT, SHOW, …. `CONTROLS_EXTENSIONS` сливается в `CONTROLS` в `ModuleController.init`. |
43
- | `interface.controls.view` | Подмодуль `controls.view` плагина. |
40
+ | Модуль | Зона ответственности |
41
+ | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
42
+ | `interface.controls.controller` | Обрабатывает UPDATE, VISIBLE, INTERACT, SHOW, …. `CONTROLS_EXTENSIONS` сливается в `CONTROLS` в `ModuleController.init`. `SHOULD_CLEAR_STATE_ON_CLEANUP` — `false`: hide не сбрасывает `isVisible` и `view`, чтобы следующий `$ interface show` снова показал кнопки. |
43
+ | `interface.controls.view` | Подмодуль `controls.view` плагина. |
44
44
 
45
45
  ## Близкие плагины
46
46
 
@@ -35,10 +35,10 @@ Payloads и результаты хендлеров типизированы ч
35
35
 
36
36
  ## Модули
37
37
 
38
- | Модуль | Зона ответственности |
39
- | ---------------------------------- | -------------------------------------------- |
40
- | `interface.fastforward.controller` | Обрабатывает UPDATE, TOGGLE, START, STOP, …. |
41
- | `interface.fastforward.view` | Подмодуль `fastforward.view` плагина. |
38
+ | Модуль | Зона ответственности |
39
+ | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
40
+ | `interface.fastforward.controller` | Обрабатывает UPDATE, TOGGLE, START, STOP, …. `SHOULD_CLEAR_STATE_ON_CLEANUP` — `false`: hide не сбрасывает `isVisible` и `view`, чтобы следующий `$ interface show` снова показал кнопку. |
41
+ | `interface.fastforward.view` | Подмодуль `fastforward.view` плагина. |
42
42
 
43
43
  ## Близкие плагины
44
44
 
@@ -54,14 +54,14 @@ Payloads и результаты хендлеров типизированы ч
54
54
 
55
55
  ## Модули
56
56
 
57
- | Модуль | Зона ответственности |
58
- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
59
- | `interface.controller` | Обрабатывает VIEW_UPDATE, VIEW_SHOW, VIEW_HIDE, …. Пустой `controls` на `ZINDEX`; `CONTROLS_UNVISIBLE` при скрытии слоя. |
60
- | `interface.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `INTERFACE.INTERACT`; видимый слой → `INTERACT.EMIT`, скрытый → `INTERFACE.VISIBLE`; PUSH/POP на VIEW_SHOW/HIDE. |
61
- | `interface` | STATE.SET / STATE.CLEAR → STATE_CHANGED. |
62
- | `interface.scenario` | `$ interface`: `LINE_EXEC_REG` → SHOW / HIDE / VIEW по `CONST.INTERFACE.EXEC_ACTIONS`. |
63
- | `interface.actions` | SHOW / HIDE / VISIBLE / TEXT_HIDE / VIEW через `globalState.interface`. |
64
- | `interface.view` | Подмодуль `view` плагина. |
57
+ | Модуль | Зона ответственности |
58
+ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
59
+ | `interface.controller` | Обрабатывает VIEW_UPDATE, VIEW_SHOW, VIEW_HIDE, …. Пустой `controls` на `ZINDEX`; `CONTROLS_UNVISIBLE` при скрытии слоя. `SHOULD_CLEAR_STATE_ON_CLEANUP` — `false`, поэтому текст и задник переживают hide. |
60
+ | `interface.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `INTERFACE.INTERACT`; видимый слой → `INTERACT.EMIT`, скрытый → `INTERFACE.VISIBLE`; PUSH/POP на VIEW_SHOW/HIDE. |
61
+ | `interface` | STATE.SET / STATE.CLEAR → STATE_CHANGED. |
62
+ | `interface.scenario` | `$ interface`: `LINE_EXEC_REG` → SHOW / HIDE / VIEW по `CONST.INTERFACE.EXEC_ACTIONS`. |
63
+ | `interface.actions` | SHOW / HIDE / VISIBLE / TEXT_HIDE / VIEW через `globalState.interface`. |
64
+ | `interface.view` | Подмодуль `view` плагина. |
65
65
 
66
66
  ## Compatibility
67
67
 
@@ -16,7 +16,6 @@ Payloads и результаты хендлеров типизированы ч
16
16
  | `UPDATE_FAST` | `vne:credits:update_fast` | Быстрое обновление отображения. |
17
17
  | `UPDATE_FORCE` | `vne:credits:update_force` | Перерисовать view с `isForce`, стейт не меняет. |
18
18
  | `UPDATE_STATE` | `vne:credits:update_state` | Слить partial в стейт контроллера. |
19
- | `ACCEPT` | `vne:credits:accept` | ACCEPT / INTERACT → затем `HIDE`. |
20
19
 
21
20
  ## Константы
22
21
 
@@ -34,22 +33,23 @@ Payloads и результаты хендлеров типизированы ч
34
33
 
35
34
  ## Модули
36
35
 
37
- | Модуль | Зона ответственности |
38
- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
39
- | `credits.controller` | SHOW/HIDE по фазам `CONST.COMPONENTS.LIFECYCLE_PRIORITY`; пустой `controls` на `ZINDEX`; на `HIDE.AFTER` — `SCENARIO.NEXT`. |
40
- | `credits.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `CREDITS.ACCEPT` → `HIDE`; PUSH/POP на SHOW/HIDE. |
41
- | `credits.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
42
- | `credits.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
43
- | `credits` | Модуль `credits`. |
44
- | `credits.view` | Подмодуль `view` плагина. |
36
+ | Модуль | Зона ответственности |
37
+ | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
38
+ | `credits.controller` | SHOW/HIDE по фазам `CONST.COMPONENTS.LIFECYCLE_PRIORITY`; пустой `controls` на `ZINDEX`; на `HIDE.AFTER` — `SCENARIO.NEXT`. |
39
+ | `credits.controller.interact` | Наследует `@vnejs/module.controller.interact`: `BUTTONS.ANY` → `INTERACT.EMIT`; `onInteract` → `CREDITS.HIDE`. |
40
+ | `credits.hide.controls` | Наследует `@vnejs/module.controller.hide.on.controls`: `BACK` / `MENU` / `GAMEMENU` → `HIDE`; PUSH/POP на SHOW/HIDE. |
41
+ | `credits.hide.state` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
42
+ | `credits` | Модуль `credits`. |
43
+ | `credits.view` | Подмодуль `view` плагина. |
45
44
 
46
45
  ## Близкие плагины
47
46
 
48
47
  ### plugins/core/
49
48
 
49
+ - [interact.md](../core/interact.md) — `INTERACT`: EVENTS.EMIT, EVENTS.PUSH, EVENTS.POP
50
50
  - [state.md](../core/state.md) — `STATE`: EVENTS.SET, EVENTS.CLEAR
51
51
  - [scenario.md](../core/scenario.md) — `SCENARIO`: EVENTS.NEXT, EVENTS.LINE_EXEC_REG
52
52
 
53
53
  ### Остальные
54
54
 
55
- - [controls.md](../controls/controls.md) — `CONTROLS`: CONST.BUTTONS.ACCEPT, CONST.BUTTONS.INTERACT, CONST.BUTTONS.BACK, CONST.BUTTONS.MENU, CONST.BUTTONS.GAMEMENU
55
+ - [controls.md](../controls/controls.md) — `CONTROLS`: CONST.BUTTONS.ANY, CONST.BUTTONS.BACK, CONST.BUTTONS.MENU, CONST.BUTTONS.GAMEMENU
@@ -36,17 +36,19 @@ Payloads и результаты хендлеров типизированы ч
36
36
 
37
37
  ## Модули
38
38
 
39
- | Модуль | Зона ответственности |
40
- | --------------------- | -------------------------------------------------------------------------------------------------------------- |
41
- | `intro.controller` | SHOW/HIDE по фазам `CONST.COMPONENTS.LIFECYCLE_PRIORITY`; `UPDATE_STATE` / `UPDATE_FAST`; ANY → INTERACT. |
42
- | `intro.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW` + `LIFECYCLE_PRIORITY.SHOW.BEFORE` → `bgSrc`; `start` preload. |
43
- | `intro` | Связь со сценарием: шаг next после завершения действия. |
44
- | `intro.view` | Подмодуль `view` плагина. |
39
+ | Модуль | Зона ответственности |
40
+ | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
41
+ | `intro.controller` | SHOW/HIDE по фазам `CONST.COMPONENTS.LIFECYCLE_PRIORITY`; `UPDATE_STATE` / `UPDATE_FAST`. |
42
+ | `intro.controller.interact` | Наследует `@vnejs/module.controller.interact`: `BUTTONS.ANY` → `INTERACT.EMIT`; `onInteract` → `INTRO.INTERACT`; `CONTROLS_CHECK_NEXT = false`. |
43
+ | `intro.controller.bg` | Наследует `@vnejs/module.controller.bg`: `SHOW` + `LIFECYCLE_PRIORITY.SHOW.BEFORE` → `bgSrc`; `start` preload. |
44
+ | `intro` | Связь со сценарием: шаг next после завершения действия. |
45
+ | `intro.view` | Подмодуль `view` плагина. |
45
46
 
46
47
  ## Близкие плагины
47
48
 
48
49
  ### plugins/core/
49
50
 
51
+ - [interact.md](../core/interact.md) — `INTERACT`: EVENTS.EMIT, EVENTS.PUSH, EVENTS.POP
50
52
  - [logs.md](../core/logs.md) — `LOGS`: `EVENTS.LOGS.EMIT` (`action`, …)
51
53
  - [scenario.md](../core/scenario.md) — `SCENARIO`: EVENTS.NEXT, EVENTS.LINE_EXEC_REG, CONST.LINE_KEYWORDS.SKIP_IF_POSSIBLE
52
54
  - [system.md](../core/system.md) — `SYSTEM`: EVENTS.STARTED
@@ -51,12 +51,12 @@ Payloads и результаты хендлеров типизированы ч
51
51
  | Модуль | Зона ответственности |
52
52
  | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
53
53
  | `mainmenu.controller` | UPDATE, SHOW, HIDE по фазам `CONST.COMPONENTS.LIFECYCLE_PRIORITY`; на `SHOW.BEFORE` — ITEMS. Пустой `controls` на `ZINDEX`. UPDATE_STATE, UPDATE_FAST, UPDATE_FORCE. |
54
- | `mainmenu.controller.bg` | Наследует `@vnejs/module.controller.bg`: начальный `bgSrc` на `SHOW` + `LIFECYCLE_PRIORITY.SHOW.BEFORE`; `start` / `STATE.CLEAR` preload. Ротацию не трогает. |
54
+ | `mainmenu.controller.bg` | Наследует `@vnejs/module.controller.bg`: начальный `bgSrc` на `SHOW` + `LIFECYCLE_PRIORITY.SHOW.BEFORE`; `isShow` из `UPDATE_STATE`; `start` / `STATE.CLEAR` preload. Ротацию не трогает. |
55
55
  | `mainmenu.hide` | Наследует `@vnejs/module.controller.hide.on.state`: `STATE.SET` / `STATE.CLEAR` → `HIDE` с `{ isForce: true }`. |
56
56
  | `mainmenu.controller.accept` | Наследует `@vnejs/module.controller.accept`: `ACCEPT` / `INTERACT` → `ACCEPT` → `CLICK` по `currentArrowVerticalItem`; зеркалит `UPDATE_STATE`; PUSH/POP на SHOW/HIDE. |
57
57
  | `mainmenu.controller.arrows` | Наследует `@vnejs/module.controller.arrows.vertical`: `ARROW_UP` / `ARROW_BOTTOM` по видимым пунктам; PUSH/POP controls на SHOW/HIDE; эмитит `UPDATE_STATE` с `{ currentArrowVerticalItem }` и `UPDATE_FAST`. |
58
- | `mainmenu.backgrounds` | Наследует `@vnejs/module.controller.backgrounds`: ротация `BACKGROUNDS`, preload и таймер; эмитит `UPDATE_STATE` и `UPDATE_FAST`. |
59
- | `mainmenu.preload` | Наследует `@vnejs/module.controller.preload`: по SHOW / PRELOAD / MEMORY.CLEARED грузит `PRELOAD_LABELS` и `PRELOAD_EVENTS`. |
58
+ | `mainmenu.backgrounds` | Наследует `@vnejs/module.controller.backgrounds`: ротация `BACKGROUNDS`, preload и таймер; `isShow` из `UPDATE_STATE`; эмитит `UPDATE_STATE` и `UPDATE_FAST`. Таймер снимается на `HIDE.AFTER`. |
59
+ | `mainmenu.preload` | Наследует `@vnejs/module.controller.preload`: по SHOW / PRELOAD грузит `PRELOAD_LABELS` и `PRELOAD_EVENTS`. `MEMORY.CLEARED` — только при `isShow` из `UPDATE_STATE`. |
60
60
  | `mainmenu.scenario` | LINE_EXEC → SHOW, LINE_LOAD → PRELOAD. |
61
61
  | `mainmenu` | Обрабатывает ITEMS и CLICK. |
62
62
  | `mainmenu.view` | Подмодуль `view` плагина. |