Keyboard
Este módulo oferece uma série de funcionalidades referente ao telcado físico, virtual, mapeamento de teclas, e controle de input do teclado físico do seu POS.
Teclado Virtual - Como usar
◼︎ Adicine o componente <Keyboard/>
na raiz do seu projeto.
<Keyboard />
<script>
export default {
components: {
Keyboard: '@mamba/keyboard/Keyboard.html',
},
};
</script>
◼︎ Ou adicine o componente <Keyboard/>
em uma rota específica, podendo assimm passar alguma de suas propriedades pelo HTML.
<Keyboard keyboardType="{KeyboardType.Math}" />
<script>
import { KeyboardType } from '@mamba/keyboard/lib/index.js';
export default {
components: {
Keyboard: '@mamba/keyboard/Keyboard.html',
},
helpers: {
KeyboardType,
},
};
</script>
As propriedades declaradas no elemento HTML, serão usadas no inicializador do teclado virtual, podendo também serem sobrescritas por seus métodos(ex.: Keyboard.setOptions) mais tarde. Essas propriedades são salvas como ponto de partida, caso use o método Keyboard.reset ou Keyboard.resetOptions
Examplo de uso da API
import { KEYBOARD } from '@mamba/core';
import Keyboard from '@mamba/keyboard/api/index.js';
import { KeyboardType, KeyboardUpdateMode } from '@mamba/keyboard/lib/index.js';
Keyboard.isBackspaceEnabled();
Keyboard.disableBackspace();
Keyboard.isBackspaceEnabled();
Keyboard.enableBackspace();
Keyboard.setOptions({
keyboardType: KeyboardType.Math,
updateMode: KeyboardUpdateMode.Manual,
maxLength: String(999.99).length - 1,
onKeyPress: (button) => {
if (button === KEYBOARD.ENTER) {
} else {
}
},
});
Keyboard.hide();
Eventos
type FunctionKeyPressCallback = (
button: string,
instance: Keyboard,
e?: KeyboardHandlerEvent,
) => void;
interface KeyboardTypeEvents {
beforeFirstRender?: (instance: Keyboard) => void;
beforeRender?: (instance: Keyboard) => void;
onRender?: (instance: Keyboard) => void;
onInit?: (instance: Keyboard) => void;
onChange?: (input: string, e?: KeyboardHandlerEvent) => void;
onKeyPress?: (button: string, e?: KeyboardHandlerEvent) => void;
onFunctionKeyPress?: FunctionKeyPressCallback;
onStandardKeyPress?: FunctionKeyPressCallback;
}
Opções
interface KeyboardOptions {
keyboardType?: KeyboardType;
layout?: KeyboardLayoutObject;
layoutName?: string;
layoutDirection?: LayoutDirection;
theme?: string;
themeVariation?: KeyboardThemeVariation | string;
labels?: { [button: string]: string };
outputs?: { [button: string]: string };
activeButtonClass?: string;
hiddenKeyboardClass?: string;
debug?: boolean;
maxLength?: any;
readonly?: boolean;
lastValue?: string;
filtersNumbersOnly?: boolean;
renderCondition?: boolean | (() => boolean);
disabled?: boolean;
visibility?: KeyboardVisibility | string;
disableCursorPositioning?: boolean;
inputPattern?: RegExp;
excludeFromLayout?: { [layoutName: string]: string[] };
allowKeySyntheticEvent?: string[];
input?: KeyboardInputOption;
updateMode?: KeyboardUpdateMode;
keepVisible?: boolean;
lockCursor?: boolean;
autoRender?: boolean;
soundEnabled?: boolean;
beepTone?: BeepTone;
beepTime?: number;
enableLayoutSuggestions?: boolean;
layoutSuggestions?: { [key: string]: [string?, string?, string?, string?] };
[name: string]: any;
}
Passando opções pelo <Input />
Você pode passar opções simples, compatíveis com JSON (não aceita funções/eventos do teclado), pelo elemento HTML input:
<input
data-keyboard="true"
data-keyboard-options='{ "themeVariation": "my-variation", "keepVisible": false }'
/>
Caso você utilize o @mamba/input
, é mais permissivo:
<Input label="Insira o valor" keyboardOptions={{ themeVariation: KeyboardThemeVariation.Compact }}
/>
<script>
export default {
components: {
Input: '@mamba/input',
},
};
</script>
API
Responsável por expor métodos de controle sobre o teclado físico e virutal, bem como métodos de ajuda auxiliares do POS, e acesso aos métodos do teclado virtual e derivados.
Interface
interface Keyboard {
virtualKeyboard: Keyboard;
visibility: KeyboardVisibility;
setKeyboardInputAsNumeric: () => void;
setKeyboardInputAsAlphanumeric: () => void;
getKeyCode: (keyName: string) => number;
getKeyName: (keyCode: number) => string;
isNumericKey: (keyCode: number) => boolean;
isActionKey: (keyCode: number) => boolean;
isBackspaceEnabled: () => boolean;
disableBackspace: () => void;
enableBackspace: () => void;
setKeyboardType(type: KeyboardType): void;
setOptions(options?: {}): void;
setInput(input: string): void;
getInput(): string;
clearInput(): void;
replaceInput(keyboardInput: { default: string }): void;
render(): void;
show(): void;
hide(): void;
unmount(): void;
resetOptions(): void;
reset(): void;
currentInputPatternIsValid(): boolean;
getButtonElement(button: string): undefined | KeyboardElement | KeyboardElement[];
setKeyboardAsCustomType(options: KeyboardOptions = {}): void;
setKeyboardAsDefaultType(): void;
setKeyboardAsMathType(): void;
setKeyboardAsNumericType(): void;
setKeyboardAsPhoneType(): void;
destroy(): void;
}
Métodos
setKeyboardInputAsNumeric()
Define que a máquina irá digitar apenas números.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardInputAsNumeric();
setKeyboardInputAsAlphanumeric()
Define que a máquina irá digitar caracteres alfanuméricos.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardInputAsAlphanumeric();
getKeyCode(keyName: string)
Retorna o código da tecla
referente a uma tecla da máquina.
import Keyboard from '@mamba/keyboard/api/index.js'
Keyboard.getKeyCode('Enter');
Keyboard.getKeyCode('enter');
Keyboard.getKeyCode('Back');
Keyboard.getKeyCode('Close');
Keyboard.getKeyCode('Help');
Keyboard.getKeyCode('Shortcuts');
Keyboard.getKeyCode('0');
...
Keyboard.getKeyCode('9');
getKeyName(keyCode: number)
Retorna o nome da tecla
referente ao código de uma tecla da máquina.
import Keyboard from '@mamba/keyboard/api/index.js'
Keyboard.getKeyName(13);
Keyboard.getKeyName(8);
Keyboard.getKeyName(27);
Keyboard.getKeyName(17);
Keyboard.getKeyName(16);
Keyboard.getKeyName(48);
...
Keyboard.getKeyName(57);
isNumericKey(keyCode: number): void
Retorna se uma tecla representa um número.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.isNumericKey(13);
Keyboard.isNumericKey(57);
isActionKey(keyCode: number): void
(Obsoleto, usar isFunctionKey()
)
Retorna se uma tecla representa uma ação.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.isActionKey(13);
Keyboard.isActionKey(57);
isFunctionKey(keyCode: number): void
Retorna se uma tecla representa uma ação.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.isFunctionKey(13);
Keyboard.isFunctionKey(57);
isBackspaceEnabled(): void
Retorna se o uso do botão físico de voltar
/backspace
está habilitado ou não no aplicativo.
disableBackspace(): void
Desabilita o uso do botão físico de voltar
/backspace
no aplicativo em questão.
enableBackspace(): void
Habilita o uso do botão físico de voltar
/backspace
no aplicativo em questão.
setKeyboardType(type: KeyboardType): void
Altere o tipo de teclado passando um dos tipos do KeyboardType
.
setOptions(options?: {}): void
Define uma nova opção ou modifica as existentes após a inicialização.
setInput(input: string): void
Defina a entrada virtual do teclado virtual. Este método não altera o valores de elementos <input>
getInput(): string
Obtenha a entrada virtual do teclado virtual (você também pode obtê-la pela propriedade onChange
).
clearInput(): void
Limpa a entrada virtual do teclado virtual.
replaceInput(keyboardInput: { default: string }): void
Substitui o valor de entrada virtual do teclado virtual.
render(): void
Renderiza ou atualiza os botões do teclado.
Pode ser chamado direto se autoRender
estiver desativado.
@throws LAYOUT_NOT_FOUND_ERROR
- layout não encontrado.
@throws LAYOUT_NAME_NOT_FOUND_ERROR
- nome do layout não encontrado no objeto de layout
show(): void
Mostra o teclado e montá-lo se já não estiver.
hide(): void
Oculta o teclado. Esse método faz menos processamento do que a propriedade visibility
.
unmount(): void
Remove todas as linhas do teclado e define a visibilidade como oculta.
resetOptions(): void
Redefine as propriedades do teclado.
reset(): void
Redefine as propriedades do teclado e os elementos do teclado.
currentInputPatternIsValid(): boolean
Retorna se a entrada atual é válida com a propriedade pattern
configurada.
getButtonElement(button: string): undefined | KeyboardElement | KeyboardElement[]
Obtém o elemento DOM de um botão. Se houver vários botões com o mesmo nome, será retornado um array dos Elementos DOM.
setKeyboardAsCustomType(options: KeyboardOptions = {}): void
Defina o teclado virtual como tipo personalizado.
Esse método ja define por si só, o tipo do teclado para o tipo customizado(KeyboardType.Custom
)
setKeyboardAsDefaultType(): void
Defina o teclado virtual do tipo alfanumérico padrão.
setKeyboardAsMathType(): void
Defina o teclado virtual do tipo calculadora.
setKeyboardAsNumericType(): void
Defina o teclado virtual como tipo numérico.
setKeyboardAsPhoneType(): void
Defina o teclado virtual como tipo de telefone.
destroy(): void
Destroi o teclado virtual, remove seus ouvintes e elementos do DOM. Este método não deve ser usado se você estiver usando o componente <Keyboard />
.
shouldUpdateKeyboardView(): void
Atualiza os estilos automáticos do teclado virtual. Normalmente posicionamento na tela.
Enumeradores
enum KeyboardUpdateMode {
Auto = 'auto',
Manual = 'manual',
}
enum KeyboardVisibility {
Hidden = 'hidden',
Visible = 'visible',
}
enum LayoutDirection {
Horizontal = 'horizontal',
Vertical = 'vertical',
Fixed = 'fixed',
}
enum KeyboardType {
Default = 'default',
Numeric = 'numeric',
Phone = 'phone',
Math = 'math',
Custom = 'custom',
}
export enum KeyboardThemeVariation {
Large = 'large',
Default = 'default',
Compact = 'compact',
UltraSmall = 'ultra-small',
}
enum BeepTone {
TONE_1 = 'TONE1',
TONE_2 = 'TONE2',
TONE_3 = 'TONE3',
TONE_4 = 'TONE4',
TONE_5 = 'TONE5',
TONE_6 = 'TONE6',
TONE_7 = 'TONE7',
}
Teclados pré-disponíveis
São teclados com temas e já configurado para uso.
import Keyboard from '@mamba/keyboard/api/index.js';
import { KeyboardType } from '@mamba/keyboard/lib/index.js';
Keyboard.setOptions({
keyboardType: KeyboardType.Numeric,
});
Ou use um dos métodos prontos:
◼︎ Default (alfanumérico)
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsDefaultType();
◼︎ Numérico
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsNumericType();
◼︎ Calculadora
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsMathType();
◼︎ Telefone (Number pad)
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsPhoneType();
Keyboard native key map
Para usar as teclas nativas do teclado (teclado físico POS), você precisa instalar @mamba/core
.
O objeto KEYBOARD
fornece os mapas de teclas e nomes de teclas específicos do POS.
import { KEYBOARD } from '@mamba/core';
See @mamba/core Docs for more info.