@vnejs/docs 0.2.65 → 0.2.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -35
- package/architecture/backends.md +18 -0
- package/architecture/build.md +37 -0
- package/architecture/bundles.md +20 -0
- package/architecture/cli.md +25 -0
- package/architecture/compatibility.md +22 -0
- package/architecture/configs.md +19 -0
- package/architecture/contracts.md +30 -0
- package/architecture/dependencies.md +55 -0
- package/architecture/editor.md +7 -0
- package/architecture/games.md +38 -0
- package/architecture/helpers.md +14 -0
- package/architecture/model.md +43 -0
- package/architecture/modules.md +87 -0
- package/architecture/packages.md +43 -0
- package/architecture/plugins.md +36 -0
- package/architecture/uis.md +23 -0
- package/changelog/0.2.18.md +7 -0
- package/changelog/0.2.19.md +14 -0
- package/changelog/0.2.20.md +10 -0
- package/changelog/0.2.21.md +5 -0
- package/changelog/0.2.22.md +11 -0
- package/changelog/0.2.23.md +4 -0
- package/changelog/0.2.25.md +6 -0
- package/changelog/0.2.26.md +12 -0
- package/changelog/0.2.29.md +10 -0
- package/changelog/0.2.31.md +5 -0
- package/changelog/0.2.32.md +3 -0
- package/changelog/0.2.33.md +5 -0
- package/changelog/0.2.34.md +8 -0
- package/changelog/0.2.35.md +33 -0
- package/changelog/0.2.36.md +10 -0
- package/changelog/0.2.38.md +19 -0
- package/changelog/0.2.39.md +16 -0
- package/changelog/0.2.40.md +9 -0
- package/changelog/0.2.42.md +3 -0
- package/changelog/0.2.43.md +10 -0
- package/changelog/0.2.46.md +3 -0
- package/changelog/0.2.47.md +25 -0
- package/changelog/0.2.49.md +3 -0
- package/changelog/0.2.50.md +6 -0
- package/changelog/0.2.51.md +6 -0
- package/changelog/0.2.52.md +5 -0
- package/changelog/0.2.53.md +12 -0
- package/changelog/0.2.55.md +19 -0
- package/changelog/0.2.56.md +11 -0
- package/changelog/0.2.57.md +7 -0
- package/changelog/0.2.58.md +8 -0
- package/changelog/0.2.59.md +6 -0
- package/changelog/0.2.60.md +5 -0
- package/changelog/0.2.61.md +11 -0
- package/changelog/0.2.62.md +8 -0
- package/changelog/0.2.63.md +4 -0
- package/changelog/0.2.64.md +4 -0
- package/changelog/0.2.65.md +3 -0
- package/changelog/0.2.66.md +5 -0
- package/changelog/README.md +43 -0
- package/manifest.json +66 -5
- package/package.json +6 -4
- package/plugins/ai/ai.md +29 -29
- package/plugins/ai/checkers.md +26 -26
- package/plugins/audio/ambient.md +20 -20
- package/plugins/audio/audio.md +40 -40
- package/plugins/audio/music.md +20 -20
- package/plugins/audio/sound.md +20 -20
- package/plugins/audio/voice.md +23 -23
- package/plugins/canvas/bg.md +44 -44
- package/plugins/canvas/bg.speak.md +34 -34
- package/plugins/canvas/fill.md +33 -33
- package/plugins/canvas/layer.md +35 -35
- package/plugins/canvas/sprite.md +46 -46
- package/plugins/canvas/sprite.speak.md +33 -33
- package/plugins/canvas/text.md +37 -37
- package/plugins/canvas/video.md +37 -37
- package/plugins/canvas.layers/bl.md +33 -33
- package/plugins/canvas.layers/fl.md +33 -33
- package/plugins/canvas.layers/ml.md +33 -33
- package/plugins/canvas.layers/ul.md +32 -32
- package/plugins/canvas.props/animation.md +25 -25
- package/plugins/canvas.props/clip.md +22 -22
- package/plugins/canvas.props/filters.md +20 -20
- package/plugins/canvas.props/mask.md +23 -23
- package/plugins/canvas.props/scale.md +20 -20
- package/plugins/common/grid.md +23 -23
- package/plugins/common/turn.md +18 -18
- package/plugins/controls/controls.md +31 -31
- package/plugins/controls/cursor.md +54 -54
- package/plugins/controls/gamepad.md +56 -56
- package/plugins/controls/keyboard.md +17 -17
- package/plugins/core/components.md +28 -28
- package/plugins/core/interact.md +26 -26
- package/plugins/core/logs.md +28 -28
- package/plugins/core/media.md +38 -38
- package/plugins/core/memory.md +28 -28
- package/plugins/core/platforms.md +19 -19
- package/plugins/core/scenario.md +48 -48
- package/plugins/core/settings.md +24 -24
- package/plugins/core/stack.md +39 -39
- package/plugins/core/state.md +30 -30
- package/plugins/core/storage.md +56 -56
- package/plugins/core/system.md +37 -37
- package/plugins/core/vendors.md +19 -19
- package/plugins/entities/entities.md +16 -16
- package/plugins/entities/wallet.md +27 -27
- package/plugins/font/montserrat.md +16 -16
- package/plugins/game/checkers.md +38 -38
- package/plugins/platform/android.md +17 -17
- package/plugins/platform/electron.md +21 -21
- package/plugins/platform/metric.md +23 -23
- package/plugins/rpg/damage.md +22 -22
- package/plugins/rpg/hit.md +24 -24
- package/plugins/rpg/skills.md +26 -26
- package/plugins/save/auto.md +26 -26
- package/plugins/save/continue.md +23 -23
- package/plugins/save/quick.md +24 -24
- package/plugins/save/save.md +37 -37
- package/plugins/scales/health.md +17 -17
- package/plugins/scales/mana.md +17 -17
- package/plugins/scales/scales.md +31 -31
- package/plugins/scenario/autoread.md +36 -36
- package/plugins/scenario/choose.md +74 -65
- package/plugins/scenario/fastforward.md +46 -46
- package/plugins/scenario/history.md +41 -41
- package/plugins/scenario/pause.md +27 -27
- package/plugins/scenario/point_and_click.md +51 -51
- package/plugins/scenario/qte.md +54 -54
- package/plugins/scenario/random.md +17 -17
- package/plugins/settings/filter.md +19 -19
- package/plugins/settings/potato.md +22 -22
- package/plugins/settings/ratio.md +19 -19
- package/plugins/settings/textsize.md +19 -19
- package/plugins/settings/volume.md +21 -21
- package/plugins/text/inject.md +22 -22
- package/plugins/text/locs.md +36 -36
- package/plugins/text/meet.md +19 -19
- package/plugins/text/smooth.md +33 -33
- package/plugins/text/text.md +76 -69
- package/plugins/text/wall.md +20 -20
- package/plugins/time/date.md +22 -22
- package/plugins/time/time.md +23 -23
- package/plugins/vars/counters.md +28 -28
- package/plugins/vars/flags.md +24 -24
- package/plugins/vars/vars.md +29 -29
- package/plugins/views/achievement.md +44 -44
- package/plugins/views/comment.md +31 -31
- package/plugins/views/controls.hints.md +34 -34
- package/plugins/views/cursor.md +19 -19
- package/plugins/views/fps.md +33 -33
- package/plugins/views/gamepad.debug.md +32 -32
- package/plugins/views/settings.md +39 -39
- package/plugins/views/video.md +37 -37
- package/plugins/views.scenario/choose.md +41 -41
- package/plugins/views.scenario/interface.controls.md +31 -31
- package/plugins/views.scenario/interface.fastforward.md +29 -29
- package/plugins/views.scenario/interface.md +74 -74
- package/plugins/views.scenario/point_and_click.md +39 -39
- package/plugins/views.scenario/qte.md +51 -51
- package/plugins/views.screens/checkers.md +35 -35
- package/plugins/views.screens/confirm.md +35 -35
- package/plugins/views.screens/credits.md +31 -31
- package/plugins/views.screens/disclaimer.md +42 -42
- package/plugins/views.screens/eula.md +37 -37
- package/plugins/views.screens/gallery.full.md +41 -41
- package/plugins/views.screens/gallery.md +75 -75
- package/plugins/views.screens/gamemenu.md +41 -41
- package/plugins/views.screens/history.md +39 -39
- package/plugins/views.screens/intro.md +32 -32
- package/plugins/views.screens/loading.md +30 -30
- package/plugins/views.screens/mainmenu.md +49 -49
- package/plugins/views.screens/mainmenu.socials.md +25 -25
- package/plugins/views.screens/save.md +66 -66
- package/plugins/views.screens/settings.defaults.md +37 -37
- package/plugins/views.screens/settings.md +40 -40
- package/scenario.catalog/README.md +13 -13
- package/scenario.catalog/index.md +35 -35
- package/scenario.catalog/stubs/achievement.md +4 -4
- package/scenario.catalog/stubs/audio.ambient.md +4 -4
- package/scenario.catalog/stubs/audio.music.md +4 -4
- package/scenario.catalog/stubs/audio.sound.md +4 -4
- package/scenario.catalog/stubs/audio.voice.md +4 -4
- package/scenario.catalog/stubs/bl.animation.md +5 -5
- package/scenario.catalog/stubs/bl.bg.md +5 -5
- package/scenario.catalog/stubs/bl.clip.md +5 -5
- package/scenario.catalog/stubs/bl.fill.md +5 -5
- package/scenario.catalog/stubs/bl.filter.md +5 -5
- package/scenario.catalog/stubs/bl.mask.md +5 -5
- package/scenario.catalog/stubs/bl.scale.md +5 -5
- package/scenario.catalog/stubs/bl.sprite.md +5 -5
- package/scenario.catalog/stubs/bl.text.md +5 -5
- package/scenario.catalog/stubs/bl.video.md +5 -5
- package/scenario.catalog/stubs/choose.block.md +7 -7
- package/scenario.catalog/stubs/choose.md +4 -4
- package/scenario.catalog/stubs/choose.option.md +7 -7
- package/scenario.catalog/stubs/comment.md +5 -5
- package/scenario.catalog/stubs/counter.md +5 -5
- package/scenario.catalog/stubs/credits.md +4 -4
- package/scenario.catalog/stubs/date.md +4 -4
- package/scenario.catalog/stubs/disclaimer.md +5 -5
- package/scenario.catalog/stubs/fl.animation.md +5 -5
- package/scenario.catalog/stubs/fl.bg.md +5 -5
- package/scenario.catalog/stubs/fl.clip.md +5 -5
- package/scenario.catalog/stubs/fl.fill.md +5 -5
- package/scenario.catalog/stubs/fl.filter.md +5 -5
- package/scenario.catalog/stubs/fl.mask.md +5 -5
- package/scenario.catalog/stubs/fl.scale.md +5 -5
- package/scenario.catalog/stubs/fl.sprite.md +5 -5
- package/scenario.catalog/stubs/fl.text.md +5 -5
- package/scenario.catalog/stubs/fl.video.md +5 -5
- package/scenario.catalog/stubs/flag.md +13 -13
- package/scenario.catalog/stubs/interface.md +4 -4
- package/scenario.catalog/stubs/intro.md +4 -4
- package/scenario.catalog/stubs/mainmenu.md +4 -4
- package/scenario.catalog/stubs/ml.animation.md +5 -5
- package/scenario.catalog/stubs/ml.bg.md +5 -5
- package/scenario.catalog/stubs/ml.clip.md +5 -5
- package/scenario.catalog/stubs/ml.fill.md +5 -5
- package/scenario.catalog/stubs/ml.filter.md +5 -5
- package/scenario.catalog/stubs/ml.mask.md +5 -5
- package/scenario.catalog/stubs/ml.scale.md +5 -5
- package/scenario.catalog/stubs/ml.sprite.md +5 -5
- package/scenario.catalog/stubs/ml.text.md +5 -5
- package/scenario.catalog/stubs/ml.video.md +5 -5
- package/scenario.catalog/stubs/other.md +6 -6
- package/scenario.catalog/stubs/pause.md +5 -5
- package/scenario.catalog/stubs/point-and-click.block.md +4 -4
- package/scenario.catalog/stubs/point-and-click.md +4 -4
- package/scenario.catalog/stubs/point-and-click.option.md +4 -4
- package/scenario.catalog/stubs/qte.md +4 -4
- package/scenario.catalog/stubs/random.md +4 -4
- package/scenario.catalog/stubs/random.option.md +4 -4
- package/scenario.catalog/stubs/save.auto.md +4 -4
- package/scenario.catalog/stubs/save.md +5 -5
- package/scenario.catalog/stubs/scenario.md +4 -4
- package/scenario.catalog/stubs/settings.defaults.md +4 -4
- package/scenario.catalog/stubs/stack.md +4 -4
- package/scenario.catalog/stubs/text.meet.md +4 -4
- package/scenario.catalog/stubs/text.wall.md +4 -4
- package/scenario.catalog/stubs/time.md +4 -4
- package/scenario.catalog/stubs/ul.animation.md +5 -5
- package/scenario.catalog/stubs/ul.bg.md +5 -5
- package/scenario.catalog/stubs/ul.clip.md +5 -5
- package/scenario.catalog/stubs/ul.fill.md +5 -5
- package/scenario.catalog/stubs/ul.filter.md +5 -5
- package/scenario.catalog/stubs/ul.mask.md +5 -5
- package/scenario.catalog/stubs/ul.scale.md +5 -5
- package/scenario.catalog/stubs/ul.sprite.md +5 -5
- package/scenario.catalog/stubs/ul.text.md +5 -5
- package/scenario.catalog/stubs/video.md +4 -4
- package/scenario.catalog/stubs/wallet.md +4 -4
- package/scenario.guide/README.md +38 -38
- package/scenario.guide/audio.md +11 -11
- package/scenario.guide/canvas.md +23 -23
- package/scenario.guide/choose.md +28 -28
- package/scenario.guide/dialogue.md +23 -23
- package/scenario.guide/flow.md +21 -21
- package/scenario.guide/point-and-click.md +12 -12
- package/scenario.guide/qte-random.md +20 -20
- package/scenario.guide/vars.md +19 -19
- package/scenario.guide/views.md +20 -20
- package/CHANGELOG.md +0 -387
- package/architecture.md +0 -566
package/plugins/common/grid.md
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
# plugins/common/grid/
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Package: `@vnejs/plugins.common.grid` · namespace: `GRID`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Stores square grids by string `id` (several parallel boards). A cell item is any object with required `id: string`; in one grid `id` is unique. Empty cell — `null`. Matrix is dense `(item | null)[][]`.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Do not confuse with UI navigation `*.GRID_*` from `@vnejs/module.controller.arrows.grid` (arrow focus on screen).
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Events
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Handler payloads and results are typed through module augmentation of the contract (`VneEventPayloadMap` / `VneEventResultMap`). The types live in `@vnejs/contracts.common.grid`.
|
|
12
12
|
|
|
13
|
-
|
|
|
14
|
-
| --------- | ------------------ |
|
|
15
|
-
| `SET` | `vne:grid:set` |
|
|
16
|
-
| `GET` | `vne:grid:get` | `emitOne({ id })` → `{ id, rows, columns, cells } \| undefined`.
|
|
17
|
-
| `UNSET` | `vne:grid:unset` |
|
|
18
|
-
| `CHANGED` | `vne:grid:changed` |
|
|
19
|
-
| `PUT` | `vne:grid:put` | `{ id, row, column, item }` —
|
|
20
|
-
| `MOVE` | `vne:grid:move` | `{ id, from, to }` —
|
|
21
|
-
| `REMOVE` | `vne:grid:remove` | `{ id, row?, column?, itemId? }` —
|
|
13
|
+
| Key | String | Meaning |
|
|
14
|
+
| --------- | ------------------ | ----------------------------------------------------------------------------------------------- |
|
|
15
|
+
| `SET` | `vne:grid:set` | Create/replace `{ id, rows, columns, cells? }`. Without `cells` — empty matrix. Then `CHANGED`. |
|
|
16
|
+
| `GET` | `vne:grid:get` | `emitOne({ id })` → `{ id, rows, columns, cells } \| undefined`. |
|
|
17
|
+
| `UNSET` | `vne:grid:unset` | Remove by `{ id }`. No `CHANGED`. |
|
|
18
|
+
| `CHANGED` | `vne:grid:changed` | Full snapshot after `SET` / `PUT` / `MOVE` / `REMOVE`. |
|
|
19
|
+
| `PUT` | `vne:grid:put` | `{ id, row, column, item }` — place item; same `item.id` is cleared from the old cell first. |
|
|
20
|
+
| `MOVE` | `vne:grid:move` | `{ id, from, to }` — move; occupied `to` — swap. |
|
|
21
|
+
| `REMOVE` | `vne:grid:remove` | `{ id, row?, column?, itemId? }` — clear by position or by `itemId`. |
|
|
22
22
|
|
|
23
23
|
State: map `id → { rows, columns, cells }`.
|
|
24
24
|
|
|
25
|
-
`STATE.SET` / `STATE.CLEAR`
|
|
25
|
+
`STATE.SET` / `STATE.CLEAR` do not write the map directly: missing ids — `UNSET`, present ids — `SET`.
|
|
26
26
|
|
|
27
|
-
##
|
|
27
|
+
## Constants / Params / Settings
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
None.
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## Modules
|
|
32
32
|
|
|
33
|
-
|
|
|
33
|
+
| Module | Role |
|
|
34
34
|
| ------ | ---------------------------------------------------------------- |
|
|
35
35
|
| `grid` | `SET` / `GET` / `UNSET` / `CHANGED` / `PUT` / `MOVE` / `REMOVE`. |
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Related plugins
|
|
38
38
|
|
|
39
|
-
- [game/checkers.md](../game/checkers.md) —
|
|
40
|
-
- [views.screens/checkers.md](../views.screens/checkers.md) / [ai/checkers.md](../ai/checkers.md) —
|
|
41
|
-
- [common/turn.md](./turn.md) —
|
|
39
|
+
- [game/checkers.md](../game/checkers.md) — writes `GRID.SET` with `CONST.CHECKERS.GRID_ID`, reads via `GET`
|
|
40
|
+
- [views.screens/checkers.md](../views.screens/checkers.md) / [ai/checkers.md](../ai/checkers.md) — mirror via `CHANGED` / `UNSET`
|
|
41
|
+
- [common/turn.md](./turn.md) — side to move (separate map)
|
package/plugins/common/turn.md
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
# plugins/common/turn/
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Package: `@vnejs/plugins.common.turn` · namespace: `TURNS`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Stores the current turn by string `id` (several parallel games) and `owner` (who moves — arbitrary string).
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Events
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Handler payloads and results are typed through module augmentation of the contract (`VneEventPayloadMap` / `VneEventResultMap`). The types live in `@vnejs/contracts.common.turn`.
|
|
10
10
|
|
|
11
|
-
|
|
|
12
|
-
| --------- | ------------------- |
|
|
13
|
-
| `SET` | `vne:turns:set` |
|
|
14
|
-
| `GET` | `vne:turns:get` | `emitOne({ id })` → `owner` (`string \| undefined`).
|
|
15
|
-
| `UNSET` | `vne:turns:unset` |
|
|
16
|
-
| `CHANGED` | `vne:turns:changed` |
|
|
11
|
+
| Key | String | Meaning |
|
|
12
|
+
| --------- | ------------------- | --------------------------------------------------------------- |
|
|
13
|
+
| `SET` | `vne:turns:set` | Write `{ id, owner }`. Without `id` or without `owner` — no-op. |
|
|
14
|
+
| `GET` | `vne:turns:get` | `emitOne({ id })` → `owner` (`string \| undefined`). |
|
|
15
|
+
| `UNSET` | `vne:turns:unset` | Remove the entry by `{ id }`. |
|
|
16
|
+
| `CHANGED` | `vne:turns:changed` | After a successful `SET`: `{ id, owner }`. |
|
|
17
17
|
|
|
18
18
|
State: map `id → owner`.
|
|
19
19
|
|
|
20
|
-
`STATE.SET` / `STATE.CLEAR`
|
|
20
|
+
`STATE.SET` / `STATE.CLEAR` do not write the map directly: for new and changed ids — `TURNS.SET`, for removed — `TURNS.UNSET`.
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Constants / Params / Settings
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
None.
|
|
25
25
|
|
|
26
|
-
##
|
|
26
|
+
## Modules
|
|
27
27
|
|
|
28
|
-
|
|
|
28
|
+
| Module | Role |
|
|
29
29
|
| ------- | ------------------------------------ |
|
|
30
30
|
| `turns` | `SET` / `GET` / `UNSET` / `CHANGED`. |
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## Related plugins
|
|
33
33
|
|
|
34
|
-
- [game/checkers.md](../game/checkers.md) —
|
|
35
|
-
- [views.screens/checkers.md](../views.screens/checkers.md) / [ai/checkers.md](../ai/checkers.md) —
|
|
34
|
+
- [game/checkers.md](../game/checkers.md) — writes `TURNS.SET` with `CONST.CHECKERS.TURN_ID`, reads via `GET`; board — via [`common/grid`](./grid.md)
|
|
35
|
+
- [views.screens/checkers.md](../views.screens/checkers.md) / [ai/checkers.md](../ai/checkers.md) — mirror via `CHANGED` / `UNSET`
|
|
@@ -1,54 +1,54 @@
|
|
|
1
1
|
# plugins/controls/controls/
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Package: `@vnejs/plugins.controls.controls` · namespace: `CONTROLS`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Stack of abstract control-button handlers (push/pop/emit) and the current input device type (keyboard / xbox / playstation).
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Events
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Handler payloads and results are typed through module augmentation of the contract (`VneEventPayloadMap` / `VneEventResultMap`). The types live in `@vnejs/contracts.controls`.
|
|
10
10
|
|
|
11
|
-
|
|
|
12
|
-
| ---------------- | ----------------------------- |
|
|
13
|
-
| `EMIT` | `vne:controls:emit` |
|
|
14
|
-
| `PUSH` | `vne:controls:push` |
|
|
15
|
-
| `POP` | `vne:controls:pop` |
|
|
16
|
-
| `DEVICE_SET` | `vne:controls:device_set` |
|
|
17
|
-
| `DEVICE_CHANGED` | `vne:controls:device_changed` |
|
|
11
|
+
| Key | String | Meaning |
|
|
12
|
+
| ---------------- | ----------------------------- | -------------------------------------------------------- |
|
|
13
|
+
| `EMIT` | `vne:controls:emit` | Start an action or cycle. |
|
|
14
|
+
| `PUSH` | `vne:controls:push` | Push onto the queue or stack. |
|
|
15
|
+
| `POP` | `vne:controls:pop` | Pop from the queue or stack. |
|
|
16
|
+
| `DEVICE_SET` | `vne:controls:device_set` | Request a device type change (`{ device }`). |
|
|
17
|
+
| `DEVICE_CHANGED` | `vne:controls:device_changed` | Device type actually changed (`{ device, prevDevice }`). |
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Constants
|
|
20
20
|
|
|
21
|
-
|
|
|
22
|
-
| --------------------- |
|
|
23
|
-
| `BUTTONS` |
|
|
24
|
-
| `DEVICES.KEYBOARD` | `"keyboard"`
|
|
25
|
-
| `DEVICES.XBOX` | `"xbox"`
|
|
26
|
-
| `DEVICES.PLAYSTATION` | `"playstation"`
|
|
21
|
+
| Key | Meaning |
|
|
22
|
+
| --------------------- | ----------------------------------------------- |
|
|
23
|
+
| `BUTTONS` | Abstract control buttons (`ACCEPT`, `BACK`, …). |
|
|
24
|
+
| `DEVICES.KEYBOARD` | `"keyboard"` |
|
|
25
|
+
| `DEVICES.XBOX` | `"xbox"` |
|
|
26
|
+
| `DEVICES.PLAYSTATION` | `"playstation"` |
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## Parameters
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
None.
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## Settings
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
None.
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## Modules
|
|
37
37
|
|
|
38
|
-
|
|
|
39
|
-
| ----------------- |
|
|
40
|
-
| `controls` |
|
|
41
|
-
| `controls.device` |
|
|
38
|
+
| Module | Role |
|
|
39
|
+
| ----------------- | ------------------------------------------------------------------------------------------------ |
|
|
40
|
+
| `controls` | Handles EMIT, PUSH, POP; sets `shared.isControlsLocked` while an async EMIT handler runs. |
|
|
41
|
+
| `controls.device` | Holds `currentDevice`; on `DEVICE_SET` emits `DEVICE_CHANGED` only when the type really changes. |
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Sources of `DEVICE_SET`: keyboard (keydown) → keyboard; `controls.gamepad.device` (button_press / axis_move) → xbox|playstation by `gamepad.id`; cursor (`mousemove`) → keyboard.
|
|
44
44
|
|
|
45
|
-
##
|
|
45
|
+
## Related plugins
|
|
46
46
|
|
|
47
47
|
### plugins/core/
|
|
48
48
|
|
|
49
|
-
—
|
|
49
|
+
— None
|
|
50
50
|
|
|
51
|
-
###
|
|
51
|
+
### Other
|
|
52
52
|
|
|
53
53
|
- [keyboard.md](./keyboard.md) — `KEYBOARD`
|
|
54
54
|
- [gamepad.md](./gamepad.md) — `GAMEPAD`
|
|
@@ -1,66 +1,66 @@
|
|
|
1
1
|
# plugins/controls/cursor/
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Package: `@vnejs/plugins.controls.cursor` · namespace: `CURSOR`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Custom cursor: position, shift, scroll under cursor, view, and programmatic click. A DOM click from touch emits `HIDE`: the event has `pointerType === "touch"`, there was a touch `pointerdown` before the click, or the click has `sourceCapabilities.firesTouchEvents`.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Events
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Handler payloads and results are typed through module augmentation of the contract (`VneEventPayloadMap` / `VneEventResultMap`). The types live in `@vnejs/contracts.controls.cursor`.
|
|
10
10
|
|
|
11
|
-
|
|
|
11
|
+
| Key | String | Meaning |
|
|
12
12
|
| -------------- | ------------------------- | ------------------------------------------------------------ |
|
|
13
|
-
| `SHOW` | `vne:cursor:show` |
|
|
14
|
-
| `HIDE` | `vne:cursor:hide` |
|
|
15
|
-
| `UPDATE` | `vne:cursor:update` |
|
|
16
|
-
| `UPDATE_FAST` | `vne:cursor:update_fast` |
|
|
17
|
-
| `UPDATE_FORCE` | `vne:cursor:update_force` |
|
|
18
|
-
| `UPDATE_STATE` | `vne:cursor:update_state` |
|
|
19
|
-
| `CLICK` | `vne:cursor:click` |
|
|
20
|
-
| `VIEW_SET` | `vne:cursor:view_set` |
|
|
21
|
-
| `MOVE` | `vne:cursor:move` |
|
|
22
|
-
| `MOVED` | `vne:cursor:moved` |
|
|
23
|
-
| `SET_X_Y` | `vne:cursor:set_x_y` |
|
|
24
|
-
| `SHIFT` | `vne:cursor:shift` |
|
|
25
|
-
| `SCROLL` | `vne:cursor:scroll` |
|
|
26
|
-
|
|
27
|
-
##
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
##
|
|
32
|
-
|
|
33
|
-
|
|
|
34
|
-
| ------------------------- | --------- |
|
|
35
|
-
| `DEFAULT_VIEW` | `string` |
|
|
36
|
-
| `DEFAULT_SHIFT_SPEED` | `number` |
|
|
37
|
-
| `DEFAULT_SHIFT_REVERSE_X` | `boolean` |
|
|
38
|
-
| `DEFAULT_SHIFT_REVERSE_Y` | `boolean` |
|
|
39
|
-
| `BASE_SHIFT_SPEED` | `number` |
|
|
40
|
-
| `DEFAULT_SCROLL_SPEED` | `number` |
|
|
41
|
-
| `BASE_SCROLL_SPEED` | `number` |
|
|
42
|
-
|
|
43
|
-
##
|
|
44
|
-
|
|
45
|
-
|
|
|
13
|
+
| `SHOW` | `vne:cursor:show` | Show UI or layer. |
|
|
14
|
+
| `HIDE` | `vne:cursor:hide` | Hide UI or layer. |
|
|
15
|
+
| `UPDATE` | `vne:cursor:update` | Update state or display. |
|
|
16
|
+
| `UPDATE_FAST` | `vne:cursor:update_fast` | Fast display update. |
|
|
17
|
+
| `UPDATE_FORCE` | `vne:cursor:update_force` | Redraw view with `isForce`; does not change state. |
|
|
18
|
+
| `UPDATE_STATE` | `vne:cursor:update_state` | Merge partial into controller state (`CursorUpdatePayload`). |
|
|
19
|
+
| `CLICK` | `vne:cursor:click` | Plugin namespace event `CLICK`. |
|
|
20
|
+
| `VIEW_SET` | `vne:cursor:view_set` | Write or update a value. |
|
|
21
|
+
| `MOVE` | `vne:cursor:move` | Plugin namespace event `MOVE`. |
|
|
22
|
+
| `MOVED` | `vne:cursor:moved` | Plugin namespace event `MOVED`. |
|
|
23
|
+
| `SET_X_Y` | `vne:cursor:set_x_y` | Set cursor position (`{ x?, y? }`) with clamp and `MOVED`. |
|
|
24
|
+
| `SHIFT` | `vne:cursor:shift` | Shift cursor position (`{ x?, y? }`). |
|
|
25
|
+
| `SCROLL` | `vne:cursor:scroll` | Scroll nearest scrollable under cursor (`{ x?, y? }`). |
|
|
26
|
+
|
|
27
|
+
## Constants
|
|
28
|
+
|
|
29
|
+
None.
|
|
30
|
+
|
|
31
|
+
## Parameters
|
|
32
|
+
|
|
33
|
+
| Key | Type | Meaning |
|
|
34
|
+
| ------------------------- | --------- | --------------------- |
|
|
35
|
+
| `DEFAULT_VIEW` | `string` | Default: `"default"`. |
|
|
36
|
+
| `DEFAULT_SHIFT_SPEED` | `number` | Default: `1`. |
|
|
37
|
+
| `DEFAULT_SHIFT_REVERSE_X` | `boolean` | Default: `false`. |
|
|
38
|
+
| `DEFAULT_SHIFT_REVERSE_Y` | `boolean` | Default: `false`. |
|
|
39
|
+
| `BASE_SHIFT_SPEED` | `number` | Default: `16`. |
|
|
40
|
+
| `DEFAULT_SCROLL_SPEED` | `number` | Default: `1`. |
|
|
41
|
+
| `BASE_SCROLL_SPEED` | `number` | Default: `16`. |
|
|
42
|
+
|
|
43
|
+
## Settings
|
|
44
|
+
|
|
45
|
+
| Key | Type | Meaning |
|
|
46
46
|
| ------------------------------------------------ | --------- | ---------------------------------------- |
|
|
47
|
-
| `SHIFT_SPEED` (`vne:cursor:shift_speed`) | `number` |
|
|
48
|
-
| `SHIFT_REVERSE_Y` (`vne:cursor:shift_reverse_y`) | `boolean` |
|
|
49
|
-
| `SHIFT_REVERSE_X` (`vne:cursor:shift_reverse_x`) | `boolean` |
|
|
50
|
-
| `SCROLL_SPEED` (`vne:cursor:scroll_speed`) | `number` |
|
|
47
|
+
| `SHIFT_SPEED` (`vne:cursor:shift_speed`) | `number` | Multiplier for cursor shift speed. |
|
|
48
|
+
| `SHIFT_REVERSE_Y` (`vne:cursor:shift_reverse_y`) | `boolean` | Invert Y axis on `SHIFT`. |
|
|
49
|
+
| `SHIFT_REVERSE_X` (`vne:cursor:shift_reverse_x`) | `boolean` | Invert X axis on `SHIFT`. |
|
|
50
|
+
| `SCROLL_SPEED` (`vne:cursor:scroll_speed`) | `number` | Multiplier for scroll speed on `SCROLL`. |
|
|
51
51
|
|
|
52
|
-
##
|
|
52
|
+
## Modules
|
|
53
53
|
|
|
54
|
-
|
|
|
55
|
-
| ----------------------------------- |
|
|
56
|
-
| `cursor` (`Cursor`) | SET_X_Y, resize;
|
|
57
|
-
| `cursor.view.set` (`CursorViewSet`) | VIEW_SET + STATE/STARTED
|
|
58
|
-
| `cursor.move` (`CursorMove`) | MOVE (
|
|
59
|
-
| `cursor.shift` (`CursorShift`) | SHIFT + INIT `SHIFT_SPEED` / `SHIFT_REVERSE_*`.
|
|
60
|
-
| `cursor.click` (`CursorClick`) | CLICK
|
|
61
|
-
| `cursor.scroll` (`CursorScroll`) | SCROLL + INIT `SCROLL_SPEED`.
|
|
54
|
+
| Module | Role |
|
|
55
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `cursor` (`Cursor`) | SET_X_Y, resize; owns `globalState.cursor` (x/y). |
|
|
57
|
+
| `cursor.view.set` (`CursorViewSet`) | VIEW_SET + STATE/STARTED to set `view`. Name `view.set` to avoid clash with `plugins/views/cursor` (`cursor.view`). |
|
|
58
|
+
| `cursor.move` (`CursorMove`) | MOVE (mouse) → `CONTROLS.DEVICE_SET` (keyboard) + SHOW + SET_X_Y; hides system cursor. |
|
|
59
|
+
| `cursor.shift` (`CursorShift`) | SHIFT + INIT `SHIFT_SPEED` / `SHIFT_REVERSE_*`. |
|
|
60
|
+
| `cursor.click` (`CursorClick`) | CLICK at cursor coordinates. DOM click from touch emits `HIDE`. |
|
|
61
|
+
| `cursor.scroll` (`CursorScroll`) | SCROLL + INIT `SCROLL_SPEED`. |
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## Related plugins
|
|
64
64
|
|
|
65
65
|
### plugins/core/
|
|
66
66
|
|
|
@@ -68,7 +68,7 @@ Payloads и результаты хендлеров типизированы ч
|
|
|
68
68
|
- [state.md](../core/state.md) — `STATE`: EVENTS.SET, EVENTS.CLEAR
|
|
69
69
|
- [system.md](../core/system.md) — `SYSTEM`: EVENTS.STARTED, EVENTS.RESIZE
|
|
70
70
|
|
|
71
|
-
###
|
|
71
|
+
### Other
|
|
72
72
|
|
|
73
73
|
- [controls.md](./controls.md) — `CONTROLS`: EVENTS.DEVICE_SET (mousemove → keyboard)
|
|
74
|
-
- [gamepad.md](./gamepad.md) —
|
|
74
|
+
- [gamepad.md](./gamepad.md) — sticks via `compatibility.controls.gamepad-with-controls.cursor`: left → `SHIFT`, right → `SCROLL`; device type (xbox|ps) — `controls.gamepad.device`
|
|
@@ -1,72 +1,72 @@
|
|
|
1
1
|
# plugins/controls/gamepad/
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Package: `@vnejs/plugins.controls.gamepad` · namespace: `GAMEPAD`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Gamepad → abstract control events via joypad.js.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Events
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Handler payloads and results are typed through module augmentation of the contract (`VneEventPayloadMap` / `VneEventResultMap`). The types live in `@vnejs/contracts.controls.gamepad`.
|
|
10
10
|
|
|
11
|
-
|
|
|
12
|
-
| ------ | ------------------ |
|
|
13
|
-
| `EMIT` | `vne:gamepad:emit` |
|
|
11
|
+
| Key | String | Meaning |
|
|
12
|
+
| ------ | ------------------ | -------------------------------------------------------------------- |
|
|
13
|
+
| `EMIT` | `vne:gamepad:emit` | Proxy a press to `CONTROLS.EMIT` (`{ keys }`) with lock `inProcess`. |
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Constants
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
None.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Parameters
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
None.
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Settings
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
None.
|
|
26
26
|
|
|
27
|
-
##
|
|
27
|
+
## Button mapping (W3C / Xbox standard)
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
After joypad yields logical name `button_N`, button and trigger modules emit `GAMEPAD.EMIT`, and `controls.gamepad` proxies keys to `CONTROLS.EMIT`:
|
|
30
30
|
|
|
31
|
-
| joypad |
|
|
32
|
-
| ---------------- |
|
|
33
|
-
| `button_0` | A / Cross (
|
|
34
|
-
| `button_1` | B / Circle (
|
|
35
|
-
| `button_2` | X / Square (
|
|
36
|
-
| `button_3` | Y / Triangle (
|
|
37
|
-
| `button_4` | LB / L1
|
|
38
|
-
| `button_5` | RB / R1
|
|
39
|
-
| `button_6` | LT / L2
|
|
40
|
-
| `button_7` | RT / R2
|
|
41
|
-
| `button_8` | View / Select
|
|
42
|
-
| `button_9` | Menu / Start
|
|
43
|
-
| `button_12`…`15` | D-pad
|
|
31
|
+
| joypad | Physical (standard) | Abstract control |
|
|
32
|
+
| ---------------- | ------------------- | ------------------------------------------ |
|
|
33
|
+
| `button_0` | A / Cross (bottom) | `ACCEPT` |
|
|
34
|
+
| `button_1` | B / Circle (right) | `BACK` |
|
|
35
|
+
| `button_2` | X / Square (left) | `INTERACT` |
|
|
36
|
+
| `button_3` | Y / Triangle (top) | `MENU` |
|
|
37
|
+
| `button_4` | LB / L1 | `TAB_PREV` |
|
|
38
|
+
| `button_5` | RB / R1 | `TAB_NEXT` |
|
|
39
|
+
| `button_6` | LT / L2 | `FASTFORWARD_START` / `FASTFORWARD_FINISH` |
|
|
40
|
+
| `button_7` | RT / R2 | (cursor click via compatibility) |
|
|
41
|
+
| `button_8` | View / Select | `GAMEMENU` |
|
|
42
|
+
| `button_9` | Menu / Start | `MENU` |
|
|
43
|
+
| `button_12`…`15` | D-pad | `ARROW_*` |
|
|
44
44
|
|
|
45
|
-
##
|
|
45
|
+
## Profiles and active pad
|
|
46
46
|
|
|
47
|
-
joypad.js
|
|
47
|
+
joypad.js applies **one** `customButtonMapping` to all devices. On Steam Deck you often see two pads at once (raw HID + Steam Input Xbox virtual); you cannot pick the quiet virtual pad ahead of time.
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
So the plugin:
|
|
50
50
|
|
|
51
|
-
1.
|
|
52
|
-
2.
|
|
53
|
-
3.
|
|
51
|
+
1. If there is one pad — use its profile at once.
|
|
52
|
+
2. If there are several pads — wait for the **first real press** and lock to the `gamepad.index` that sent it (not ghost Steam Input).
|
|
53
|
+
3. Then ignore events from other indexes; mapping only for the locked pad.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Profile priority: `steam-deck` → `playstation` → `nintendo` → `firefox` → `standard`.
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Raw button dump for debugging — separate view plugin [gamepad.debug](../views/gamepad.debug.md) (toggle in Extra).
|
|
58
58
|
|
|
59
|
-
|
|
|
60
|
-
| ------------- |
|
|
61
|
-
| `standard` |
|
|
62
|
-
| `steam-deck` | preferred
|
|
63
|
-
| `playstation` | `mapping !== "standard"`
|
|
64
|
-
| `nintendo` |
|
|
65
|
-
| `firefox` | Firefox UA
|
|
59
|
+
| Profile | When | What it does |
|
|
60
|
+
| ------------- | ----------------------------------------------------------------------------------- | -------------------------------- |
|
|
61
|
+
| `standard` | default; preferred with `mapping: "standard"` | identity |
|
|
62
|
+
| `steam-deck` | preferred without standard + Deck/Steam id (`28de` / `valve` / …) or `?steamDeck=1` | raw HID Deck → W3C |
|
|
63
|
+
| `playstation` | `mapping !== "standard"` and PS id | raw Square-first → W3C |
|
|
64
|
+
| `nintendo` | Nintendo/Switch id, including with `standard` | A/B and X/Y for Nintendo confirm |
|
|
65
|
+
| `firefox` | Firefox UA and no device profile matched | indexes from joypad.js docs |
|
|
66
66
|
|
|
67
|
-
Electron
|
|
67
|
+
Electron with `STEAM_DECK=1` adds `?steamDeck=1`.
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
All mappings — object `CUSTOM_BUTTON_MAPPING` in `plugins/controls/gamepad/src/profiles/custom-button-mapping.ts`:
|
|
70
70
|
|
|
71
71
|
- `CUSTOM_BUTTON_MAPPING.STANDARD` — `null` (identity)
|
|
72
72
|
- `CUSTOM_BUTTON_MAPPING.STEAM_DECK` — A→7, B→5, X→6, Y→4, LB→3, RB→2, LT→1, RT→0, Select→12, Start→14, D-pad → 8/11/10/9
|
|
@@ -74,21 +74,21 @@ Electron при `STEAM_DECK=1` добавляет `?steamDeck=1`.
|
|
|
74
74
|
- `CUSTOM_BUTTON_MAPPING.NINTENDO` — ACCEPT←1 (A), BACK←0 (B), INTERACT←3 (X), MENU←2 (Y)
|
|
75
75
|
- `CUSTOM_BUTTON_MAPPING.FIREFOX` — `button_0`←1, `button_7`←11, `button_8`←12
|
|
76
76
|
|
|
77
|
-
##
|
|
77
|
+
## Modules
|
|
78
78
|
|
|
79
|
-
|
|
|
80
|
-
| -------------------------- |
|
|
81
|
-
| `controls.gamepad` | `connect` / `disconnect` → sync
|
|
82
|
-
| `controls.gamepad.buttons` | `button_press` / `button_release` → `GAMEPAD.EMIT`; lock
|
|
83
|
-
| `controls.gamepad.device` | `button_press` / `axis_move` → `CONTROLS.DEVICE_SET` (`DEVICES.XBOX`
|
|
79
|
+
| Module | Role |
|
|
80
|
+
| -------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
81
|
+
| `controls.gamepad` | `connect` / `disconnect` → sync profile; `GAMEPAD.EMIT` → `CONTROLS.EMIT` with lock `inProcess`. |
|
|
82
|
+
| `controls.gamepad.buttons` | `button_press` / `button_release` → `GAMEPAD.EMIT`; lock active pad. |
|
|
83
|
+
| `controls.gamepad.device` | `button_press` / `axis_move` → `CONTROLS.DEVICE_SET` (`DEVICES.XBOX` or `DEVICES.PLAYSTATION` by `gamepad.id`). |
|
|
84
84
|
|
|
85
|
-
##
|
|
85
|
+
## Related plugins
|
|
86
86
|
|
|
87
87
|
### plugins/core/
|
|
88
88
|
|
|
89
|
-
—
|
|
89
|
+
— None
|
|
90
90
|
|
|
91
|
-
###
|
|
91
|
+
### Other
|
|
92
92
|
|
|
93
|
-
- [controls.md](./controls.md) — `CONTROLS`: EVENTS.EMIT, EVENTS.DEVICE_SET (
|
|
94
|
-
- [cursor.md](./cursor.md) —
|
|
93
|
+
- [controls.md](./controls.md) — `CONTROLS`: EVENTS.EMIT, EVENTS.DEVICE_SET (via `controls.gamepad.device` → xbox|playstation), CONST.BUTTONS, CONST.DEVICES
|
|
94
|
+
- [cursor.md](./cursor.md) — via `compatibility.controls.gamepad-with-controls.cursor`: left stick (axes 0–1) → `CURSOR.SHIFT`, right stick (axes 2–3) → `CURSOR.SCROLL`; RT → `CURSOR.CLICK`
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
# plugins/controls/keyboard/
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Package: `@vnejs/plugins.controls.keyboard` · namespace: `KEYBOARD`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Keyboard → abstract control events.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Events
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
None.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Constants
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
None.
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Parameters
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
None.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Settings
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
None.
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Modules
|
|
24
24
|
|
|
25
|
-
|
|
|
26
|
-
| ------------------- |
|
|
27
|
-
| `controls.keyboard` |
|
|
25
|
+
| Module | Role |
|
|
26
|
+
| ------------------- | ---------------------------- |
|
|
27
|
+
| `controls.keyboard` | Plugin `keyboard` submodule. |
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Related plugins
|
|
30
30
|
|
|
31
31
|
### plugins/core/
|
|
32
32
|
|
|
33
|
-
—
|
|
33
|
+
— None
|
|
34
34
|
|
|
35
|
-
###
|
|
35
|
+
### Other
|
|
36
36
|
|
|
37
37
|
- [controls.md](./controls.md) — `CONTROLS`: EVENTS.EMIT, EVENTS.DEVICE_SET, CONST.BUTTONS, CONST.DEVICES
|