Bootstrapping multimodal input mesh...

SINAPSE

Multimodal input abstraction · modular src/ · local UMD bundle

STATE: BOOTING LOCAL BUNDLE
Playground Surface mouse · touch · keyboard

Clique nos quadrantes, toque a área ou use as setas do teclado. A zona central é ignorada.

ps
si
ga
om
dead zone
container rebindado · touch on por padrão · setas: ← ↑ → ↓
--:--:--SYSTEMaguardando atividade...
Input Controls configure()

Liga e desliga estratégias de input no singleton default carregado pelo bundle local deste demo.

Booting runtime snapshot...
Manual Dispatch Lab fire.action.section

Dispare a camada semântica diretamente para validar handlers, contadores e combos.

Nenhum dispatch executado.
Semantic Telemetry global handlers

Leitura consolidada dos eventos observados pelos handlers globais do Sinapse.

events 0
last action -
last section -
combos 0
--:--:--SYSTEMaguardando eventos...
Camera Lab

Treino guiado com gestos reais

Ative a câmera frontal, aponte o indicador para si, ps, ga e om, e valide press, tap e hold sem sair da mesma tela.

offline
PScima
SIesquerda
GAdireita
OMbaixo
camera lab

Ative a câmera frontal

O Sinapse vai pedir permissão e ligar um preview ao vivo dentro deste stage para você validar os gestos em sequência.

etapa 1 de 12
PRESS · SI
Aponte o dedo indicador para la esquerda, espere o label reagir e solte para registrar o primeiro press.
Camera Session camera-only

Enquanto o lab estiver ativo, os outros inputs ficam desligados temporariamente. Ao sair da aba, o estado anterior volta.

permission idle
tracking idle
direction -
last gesture -
Sessão inativa. Ative a câmera para iniciar o checklist guiado.
Guided Checklist 0 / 12

Sequência fixa: presstaphold, sempre em si, ps, ga e om.

Gesture Lab

Reconhecimento de Mudras

Configure poses de mão personalizadas (mudras) para cada seção. Diferente do pointing, o gesture usa visão computacional para reconhecer formas, não direções.

offline
gesture lab

Inicie o treinamento de poses

O Sinapse abrirá um assistente para capturar seus gestos base (PRESS) e variações (TAP) para as quatro seções.

Gesture Session gesture-only

Sessão dedicada ao input de mudras. A configuração é persistida localmente.

permission idle
tracking idle
last section -
last action -
Aguardando ativação do lab de gestos.
Gesture Instructions Mudra Concept

Como configurar seus gestos:

1. PRESS: Escolha uma pose estática (ex: 🫰 para SI, 🖐️ para PS).
2. TAP: Após o PRESS, faça um movimento rápido (ex: fechar o dedo ou girar de leve).
3. REUSO: Suas poses ficam salvas. Se quiser mudar, use o botão Reset Config.
Combo Arsenal .then sequence

Três combos pré-registrados demonstram sequências semânticas sobre o dispatcher.

Registrando combos...
Registered Handlers get_registered_handlers()

Snapshot do mapa interno de handlers exposto pela API pública do singleton.

Aguardando registro de handlers...
Event Stream live ledger

Timeline completa de tudo que entrou no dispatcher durante a sessão atual.

--:--:--SYSTEMsem eventos.
Module Map src/ layout v2.0.0

Refatoração do monólito de 955 linhas em módulos ES coesos. O esbuild os agrupa no UMD sem alterações ao build.mjs.

packages/sinapse/

├── main.mjs          entry + singleton  64 linhas
├── build.mjs         esbuild → UMD      inalterado
├── package.json      type: module · inalterado

└── src/

    ├── constants.mjs _root · enums      28 linhas
    ├── spatial.mjs   coord → seção     43 linhas
    ├── processor.mjs start/end → ação  148 linhas
    ├── install.mjs   factory principal 377 linhas

    └── strategies/
        ├── keyboard.mjs  37 linhas
        ├── mouse.mjs     40 linhas
        ├── touch.mjs     49 linhas
        ├── voice.mjs     87 linhas
        ├── orientation.mjs 79 linhas
        ├── camera.mjs    455 linhas
        └── gesture.mjs   827 linhas
main.mjs src/install.mjs processor.mjs + strategies/* constants.mjs + spatial.mjs
API Pública interface inalterada

A API continua compatível. O pacote ganhou chaves opcionais de câmera para modo contínuo, preview em container e callbacks de estado/direção.

// ESM — import direto dos módulos import sinapse, { install, SECTIONS, ACTIONS, INPUT_TYPES } from '@iandara/sinapse'; // UMD — CDN global (este demo) const s = window.sinapse; // singleton default // Binders encadeados s.on.press.si(() => { ... }); s.on.hold.ps.then.tap.om('label', cb); s.once.tap.ga.then.press.om(cb); // Configuração em runtime s.configure({ mouse: true, keyboard: false, hold_duration: 450, camera_interaction_mode: 'continuous', camera_preview_target: stage }); // Disparo manual (testes) s.fire.press.si(); s.fire.holding.ps(3); // Instância independente via install() const local = install(el, { tap_speed: 200 }, { touch: true });
Responsabilidades separação de conceitos

Cada módulo tem uma única responsabilidade — testável e substituível de forma independente.

constants.mjs _root, SECTIONS, ACTIONS, INPUT_TYPES DIRECTION_TO_SECTION spatial.mjs get_section_from_location(x, y, w, h) get_section_from_alpha(alpha) processor.mjs create_action_processor(dispatcher, config) → { start(section, id), end(section, id) } máquina de estados: press · tap · hold · holding · unhold · keep · keeping · unkeep install.mjs install(container, options, settings) → dispatcher · _manage_input · _create_binder → combo engine · configure · destroy · restart seletivo da camera strategies/* install_keyboard(processor) → teardown fn install_mouse(processor, el) → teardown fn install_touch(processor, el) → teardown fn install_voice(processor) → { start, stop } install_orientation(proc, cfg) → { stop, request_permission } install_camera(proc, cfg) → { start, stop } com pulse/continuous · preview_target · camera_on_state · camera_on_direction