@vnejs/docs 0.2.35 → 0.2.37

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,8 +2,24 @@
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
+
5
16
  ## 0.2.35
6
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).
7
23
  - `module.controller.arrows.grid` — `cachedItemsCount` не считает слоты с `isStub`; после `GRID_UPDATE_ITEMS` невалидные `gridRow` / `gridColumn` (в т.ч. stub после смены `gridIndex`) сдвигаются на ближайшую валидную ячейку. API: `getGridItemsCount`, `snapSelectionToGrid`, `findNearestValidCell`.
8
24
  - `views/settings` — константа ключа вкладки дефолтных настроек. API: `CONST.SETTINGS_VIEW.DEFAULT_TAB` (`"DEFAULT"`).
9
25
  - `views.screens/settings` — показ полей на `SHOW_BEFORE` в `settings.screen.controller.fields` (`STATE_UPDATE` tabs/tab → `SETTINGS_VIEW.SHOW`); main только эмитит `SHOW_BEFORE` и `HIDE` → `SETTINGS_VIEW.HIDE`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnejs/docs",
3
- "version": "0.2.35",
3
+ "version": "0.2.37",
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
 
@@ -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).
@@ -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