@composy/keyboard-core 0.0.1 → 0.0.2
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 +156 -37
- package/dist/index.js +1540 -1395
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2981 -1
- package/dist/index.min.js.map +1 -0
- package/es/.dts-output-manifest.json +1 -0
- package/es/.dts.tsbuildinfo +1 -0
- package/es/icons.d.ts +0 -1
- package/es/icons.js +1 -1
- package/es/icons.js.map +1 -1
- package/es/index.d.ts +3 -4
- package/es/index.js +15 -15
- package/es/layouts/amount.d.ts +0 -1
- package/es/layouts/amount.js +1 -1
- package/es/layouts/amount.js.map +1 -1
- package/es/layouts/bankcard.d.ts +0 -1
- package/es/layouts/bankcard.js +1 -1
- package/es/layouts/bankcard.js.map +1 -1
- package/es/layouts/email.d.ts +0 -1
- package/es/layouts/email.js +1 -1
- package/es/layouts/email.js.map +1 -1
- package/es/layouts/idcard.d.ts +0 -1
- package/es/layouts/idcard.js +1 -1
- package/es/layouts/idcard.js.map +1 -1
- package/es/layouts/index.d.ts +11 -12
- package/es/layouts/index.js +23 -23
- package/es/layouts/index.js.map +1 -1
- package/es/layouts/license-plate.d.ts +0 -1
- package/es/layouts/license-plate.js +1 -1
- package/es/layouts/license-plate.js.map +1 -1
- package/es/layouts/number.d.ts +0 -1
- package/es/layouts/number.js +1 -1
- package/es/layouts/number.js.map +1 -1
- package/es/layouts/phone.d.ts +0 -1
- package/es/layouts/phone.js +1 -1
- package/es/layouts/phone.js.map +1 -1
- package/es/layouts/punct.d.ts +0 -1
- package/es/layouts/punct.js +1 -1
- package/es/layouts/punct.js.map +1 -1
- package/es/layouts/qwerty.d.ts +0 -1
- package/es/layouts/qwerty.js +1 -1
- package/es/layouts/qwerty.js.map +1 -1
- package/es/layouts/search.d.ts +0 -1
- package/es/layouts/search.js +1 -1
- package/es/layouts/search.js.map +1 -1
- package/es/layouts/symbol.d.ts +0 -1
- package/es/layouts/symbol.js +1 -1
- package/es/layouts/symbol.js.map +1 -1
- package/es/layouts/url.d.ts +0 -1
- package/es/layouts/url.js +1 -1
- package/es/layouts/url.js.map +1 -1
- package/es/layouts/verifycode.d.ts +0 -1
- package/es/layouts/verifycode.js +1 -1
- package/es/layouts/verifycode.js.map +1 -1
- package/es/managers/index.d.ts +1 -2
- package/es/managers/index.js +1 -1
- package/es/managers/keyboard-manager.d.ts +2 -1
- package/es/managers/keyboard-manager.js +79 -22
- package/es/managers/keyboard-manager.js.map +1 -1
- package/es/managers/keyboard-renderer.d.ts +3 -2
- package/es/managers/keyboard-renderer.js +81 -39
- package/es/managers/keyboard-renderer.js.map +1 -1
- package/es/managers/position-manager.d.ts +4 -3
- package/es/managers/position-manager.js +42 -21
- package/es/managers/position-manager.js.map +1 -1
- package/es/themes/index.d.ts +1 -2
- package/es/themes/index.js +2 -1
- package/es/themes/index.js.map +1 -1
- package/es/themes/presets.d.ts +0 -1
- package/es/themes/presets.js +1 -1
- package/es/themes/presets.js.map +1 -1
- package/es/themes/types.d.ts +1 -1
- package/es/themes/types.js +1 -1
- package/es/types/index.d.ts +0 -1
- package/es/types/index.js +1 -1
- package/es/types/keyboard.d.ts +0 -1
- package/es/types/keyboard.js +1 -1
- package/es/types/position.d.ts +0 -1
- package/es/types/position.js +1 -1
- package/es/utils/device.d.ts +0 -1
- package/es/utils/device.js +11 -7
- package/es/utils/device.js.map +1 -1
- package/es/utils/dom.d.ts +4 -1
- package/es/utils/dom.js +25 -7
- package/es/utils/dom.js.map +1 -1
- package/es/utils/event-emitter.d.ts +0 -1
- package/es/utils/event-emitter.js +2 -1
- package/es/utils/event-emitter.js.map +1 -1
- package/es/utils/formatters.d.ts +0 -1
- package/es/utils/formatters.js +4 -4
- package/es/utils/formatters.js.map +1 -1
- package/es/utils/index.d.ts +2 -3
- package/es/utils/index.js +5 -5
- package/es/utils/random.d.ts +4 -1
- package/es/utils/random.js +2 -2
- package/es/utils/random.js.map +1 -1
- package/esm/icons.js +1 -1
- package/esm/icons.js.map +1 -1
- package/esm/index.js +15 -15
- package/esm/layouts/amount.js +1 -1
- package/esm/layouts/amount.js.map +1 -1
- package/esm/layouts/bankcard.js +1 -1
- package/esm/layouts/bankcard.js.map +1 -1
- package/esm/layouts/email.js +1 -1
- package/esm/layouts/email.js.map +1 -1
- package/esm/layouts/idcard.js +1 -1
- package/esm/layouts/idcard.js.map +1 -1
- package/esm/layouts/index.js +23 -23
- package/esm/layouts/index.js.map +1 -1
- package/esm/layouts/license-plate.js +1 -1
- package/esm/layouts/license-plate.js.map +1 -1
- package/esm/layouts/number.js +1 -1
- package/esm/layouts/number.js.map +1 -1
- package/esm/layouts/phone.js +1 -1
- package/esm/layouts/phone.js.map +1 -1
- package/esm/layouts/punct.js +1 -1
- package/esm/layouts/punct.js.map +1 -1
- package/esm/layouts/qwerty.js +1 -1
- package/esm/layouts/qwerty.js.map +1 -1
- package/esm/layouts/search.js +1 -1
- package/esm/layouts/search.js.map +1 -1
- package/esm/layouts/symbol.js +1 -1
- package/esm/layouts/symbol.js.map +1 -1
- package/esm/layouts/url.js +1 -1
- package/esm/layouts/url.js.map +1 -1
- package/esm/layouts/verifycode.js +1 -1
- package/esm/layouts/verifycode.js.map +1 -1
- package/esm/managers/index.js +1 -1
- package/esm/managers/keyboard-manager.js +79 -22
- package/esm/managers/keyboard-manager.js.map +1 -1
- package/esm/managers/keyboard-renderer.js +81 -39
- package/esm/managers/keyboard-renderer.js.map +1 -1
- package/esm/managers/position-manager.js +42 -21
- package/esm/managers/position-manager.js.map +1 -1
- package/esm/themes/index.js +2 -1
- package/esm/themes/index.js.map +1 -1
- package/esm/themes/presets.js +1 -1
- package/esm/themes/presets.js.map +1 -1
- package/esm/utils/device.js +11 -7
- package/esm/utils/device.js.map +1 -1
- package/esm/utils/dom.js +25 -7
- package/esm/utils/dom.js.map +1 -1
- package/esm/utils/event-emitter.js +2 -1
- package/esm/utils/event-emitter.js.map +1 -1
- package/esm/utils/formatters.js +4 -4
- package/esm/utils/formatters.js.map +1 -1
- package/esm/utils/random.js +2 -2
- package/esm/utils/random.js.map +1 -1
- package/lib/icons.cjs +1 -1
- package/lib/icons.cjs.map +1 -1
- package/{esm/icons.d.ts → lib/icons.d.cts} +0 -1
- package/lib/index.cjs +14 -13
- package/{esm/index.d.ts → lib/index.d.cts} +3 -4
- package/lib/layouts/amount.cjs +1 -1
- package/lib/layouts/amount.cjs.map +1 -1
- package/{esm/layouts/amount.d.ts → lib/layouts/amount.d.cts} +0 -1
- package/lib/layouts/bankcard.cjs +1 -1
- package/lib/layouts/bankcard.cjs.map +1 -1
- package/{esm/layouts/bankcard.d.ts → lib/layouts/bankcard.d.cts} +0 -1
- package/lib/layouts/email.cjs +1 -1
- package/lib/layouts/email.cjs.map +1 -1
- package/lib/layouts/{email.d.ts → email.d.cts} +0 -1
- package/lib/layouts/idcard.cjs +1 -1
- package/lib/layouts/idcard.cjs.map +1 -1
- package/{esm/layouts/idcard.d.ts → lib/layouts/idcard.d.cts} +0 -1
- package/lib/layouts/index.cjs +23 -23
- package/lib/layouts/index.cjs.map +1 -1
- package/{esm/layouts/index.d.ts → lib/layouts/index.d.cts} +11 -12
- package/lib/layouts/license-plate.cjs +1 -1
- package/lib/layouts/license-plate.cjs.map +1 -1
- package/{esm/layouts/license-plate.d.ts → lib/layouts/license-plate.d.cts} +0 -1
- package/lib/layouts/number.cjs +1 -1
- package/lib/layouts/number.cjs.map +1 -1
- package/{esm/layouts/number.d.ts → lib/layouts/number.d.cts} +0 -1
- package/lib/layouts/phone.cjs +1 -1
- package/lib/layouts/phone.cjs.map +1 -1
- package/lib/layouts/{phone.d.ts → phone.d.cts} +0 -1
- package/lib/layouts/punct.cjs +1 -1
- package/lib/layouts/punct.cjs.map +1 -1
- package/lib/layouts/{punct.d.ts → punct.d.cts} +0 -1
- package/lib/layouts/qwerty.cjs +1 -1
- package/lib/layouts/qwerty.cjs.map +1 -1
- package/{esm/layouts/qwerty.d.ts → lib/layouts/qwerty.d.cts} +0 -1
- package/lib/layouts/search.cjs +1 -1
- package/lib/layouts/search.cjs.map +1 -1
- package/{esm/layouts/search.d.ts → lib/layouts/search.d.cts} +0 -1
- package/lib/layouts/symbol.cjs +1 -1
- package/lib/layouts/symbol.cjs.map +1 -1
- package/{esm/layouts/symbol.d.ts → lib/layouts/symbol.d.cts} +0 -1
- package/lib/layouts/url.cjs +1 -1
- package/lib/layouts/url.cjs.map +1 -1
- package/{esm/layouts/url.d.ts → lib/layouts/url.d.cts} +0 -1
- package/lib/layouts/verifycode.cjs +1 -1
- package/lib/layouts/verifycode.cjs.map +1 -1
- package/lib/layouts/{verifycode.d.ts → verifycode.d.cts} +0 -1
- package/lib/managers/index.cjs +1 -1
- package/lib/managers/{index.d.ts → index.d.cts} +1 -2
- package/lib/managers/keyboard-manager.cjs +79 -22
- package/lib/managers/keyboard-manager.cjs.map +1 -1
- package/lib/managers/{keyboard-manager.d.ts → keyboard-manager.d.cts} +2 -1
- package/lib/managers/keyboard-renderer.cjs +80 -38
- package/lib/managers/keyboard-renderer.cjs.map +1 -1
- package/lib/managers/{keyboard-renderer.d.ts → keyboard-renderer.d.cts} +3 -2
- package/lib/managers/position-manager.cjs +42 -21
- package/lib/managers/position-manager.cjs.map +1 -1
- package/lib/managers/{position-manager.d.ts → position-manager.d.cts} +4 -3
- package/lib/themes/index.cjs +2 -1
- package/lib/themes/index.cjs.map +1 -1
- package/lib/themes/{index.d.ts → index.d.cts} +1 -2
- package/lib/themes/presets.cjs +1 -1
- package/lib/themes/presets.cjs.map +1 -1
- package/lib/themes/{presets.d.ts → presets.d.cts} +0 -1
- package/lib/themes/types.cjs +1 -1
- package/{esm/themes/types.d.ts → lib/themes/types.d.cts} +1 -1
- package/lib/types/index.cjs +1 -1
- package/{esm/types/index.d.ts → lib/types/index.d.cts} +0 -1
- package/lib/types/keyboard.cjs +1 -1
- package/{esm/types/keyboard.d.ts → lib/types/keyboard.d.cts} +0 -1
- package/lib/types/position.cjs +1 -1
- package/lib/types/{position.d.ts → position.d.cts} +0 -1
- package/lib/utils/device.cjs +11 -7
- package/lib/utils/device.cjs.map +1 -1
- package/{esm/utils/device.d.ts → lib/utils/device.d.cts} +0 -1
- package/lib/utils/dom.cjs +25 -6
- package/lib/utils/dom.cjs.map +1 -1
- package/{esm/utils/dom.d.ts → lib/utils/dom.d.cts} +4 -1
- package/lib/utils/event-emitter.cjs +2 -1
- package/lib/utils/event-emitter.cjs.map +1 -1
- package/{esm/utils/event-emitter.d.ts → lib/utils/event-emitter.d.cts} +0 -1
- package/lib/utils/formatters.cjs +4 -4
- package/lib/utils/formatters.cjs.map +1 -1
- package/{esm/utils/formatters.d.ts → lib/utils/formatters.d.cts} +0 -1
- package/lib/utils/index.cjs +4 -3
- package/{esm/utils/index.d.ts → lib/utils/index.d.cts} +2 -3
- package/lib/utils/random.cjs +2 -2
- package/lib/utils/random.cjs.map +1 -1
- package/{esm/utils/random.d.ts → lib/utils/random.d.cts} +4 -1
- package/package.json +28 -14
- package/es/icons.d.ts.map +0 -1
- package/es/index.d.ts.map +0 -1
- package/es/layouts/amount.d.ts.map +0 -1
- package/es/layouts/bankcard.d.ts.map +0 -1
- package/es/layouts/email.d.ts.map +0 -1
- package/es/layouts/idcard.d.ts.map +0 -1
- package/es/layouts/index.d.ts.map +0 -1
- package/es/layouts/license-plate.d.ts.map +0 -1
- package/es/layouts/number.d.ts.map +0 -1
- package/es/layouts/phone.d.ts.map +0 -1
- package/es/layouts/punct.d.ts.map +0 -1
- package/es/layouts/qwerty.d.ts.map +0 -1
- package/es/layouts/search.d.ts.map +0 -1
- package/es/layouts/symbol.d.ts.map +0 -1
- package/es/layouts/url.d.ts.map +0 -1
- package/es/layouts/verifycode.d.ts.map +0 -1
- package/es/managers/index.d.ts.map +0 -1
- package/es/managers/keyboard-manager.d.ts.map +0 -1
- package/es/managers/keyboard-renderer.d.ts.map +0 -1
- package/es/managers/position-manager.d.ts.map +0 -1
- package/es/themes/index.d.ts.map +0 -1
- package/es/themes/presets.d.ts.map +0 -1
- package/es/themes/types.d.ts.map +0 -1
- package/es/types/index.d.ts.map +0 -1
- package/es/types/keyboard.d.ts.map +0 -1
- package/es/types/position.d.ts.map +0 -1
- package/es/utils/device.d.ts.map +0 -1
- package/es/utils/dom.d.ts.map +0 -1
- package/es/utils/event-emitter.d.ts.map +0 -1
- package/es/utils/formatters.d.ts.map +0 -1
- package/es/utils/index.d.ts.map +0 -1
- package/es/utils/random.d.ts.map +0 -1
- package/esm/icons.d.ts.map +0 -1
- package/esm/index.d.ts.map +0 -1
- package/esm/layouts/amount.d.ts.map +0 -1
- package/esm/layouts/bankcard.d.ts.map +0 -1
- package/esm/layouts/email.d.ts +0 -11
- package/esm/layouts/email.d.ts.map +0 -1
- package/esm/layouts/idcard.d.ts.map +0 -1
- package/esm/layouts/index.d.ts.map +0 -1
- package/esm/layouts/license-plate.d.ts.map +0 -1
- package/esm/layouts/number.d.ts.map +0 -1
- package/esm/layouts/phone.d.ts +0 -15
- package/esm/layouts/phone.d.ts.map +0 -1
- package/esm/layouts/punct.d.ts +0 -7
- package/esm/layouts/punct.d.ts.map +0 -1
- package/esm/layouts/qwerty.d.ts.map +0 -1
- package/esm/layouts/search.d.ts.map +0 -1
- package/esm/layouts/symbol.d.ts.map +0 -1
- package/esm/layouts/url.d.ts.map +0 -1
- package/esm/layouts/verifycode.d.ts +0 -15
- package/esm/layouts/verifycode.d.ts.map +0 -1
- package/esm/managers/index.d.ts +0 -8
- package/esm/managers/index.d.ts.map +0 -1
- package/esm/managers/keyboard-manager.d.ts +0 -130
- package/esm/managers/keyboard-manager.d.ts.map +0 -1
- package/esm/managers/keyboard-renderer.d.ts +0 -115
- package/esm/managers/keyboard-renderer.d.ts.map +0 -1
- package/esm/managers/position-manager.d.ts +0 -72
- package/esm/managers/position-manager.d.ts.map +0 -1
- package/esm/themes/index.d.ts +0 -70
- package/esm/themes/index.d.ts.map +0 -1
- package/esm/themes/presets.d.ts +0 -39
- package/esm/themes/presets.d.ts.map +0 -1
- package/esm/themes/types.d.ts.map +0 -1
- package/esm/themes/types.js +0 -10
- package/esm/types/index.d.ts.map +0 -1
- package/esm/types/index.js +0 -10
- package/esm/types/keyboard.d.ts.map +0 -1
- package/esm/types/keyboard.js +0 -10
- package/esm/types/position.d.ts +0 -139
- package/esm/types/position.d.ts.map +0 -1
- package/esm/types/position.js +0 -10
- package/esm/utils/device.d.ts.map +0 -1
- package/esm/utils/dom.d.ts.map +0 -1
- package/esm/utils/event-emitter.d.ts.map +0 -1
- package/esm/utils/formatters.d.ts.map +0 -1
- package/esm/utils/index.d.ts.map +0 -1
- package/esm/utils/index.js +0 -16
- package/esm/utils/random.d.ts.map +0 -1
- package/lib/icons.d.ts +0 -58
- package/lib/index.d.ts +0 -12
- package/lib/layouts/amount.d.ts +0 -14
- package/lib/layouts/bankcard.d.ts +0 -15
- package/lib/layouts/idcard.d.ts +0 -16
- package/lib/layouts/index.d.ts +0 -54
- package/lib/layouts/license-plate.d.ts +0 -35
- package/lib/layouts/number.d.ts +0 -14
- package/lib/layouts/qwerty.d.ts +0 -10
- package/lib/layouts/search.d.ts +0 -7
- package/lib/layouts/symbol.d.ts +0 -14
- package/lib/layouts/url.d.ts +0 -7
- package/lib/themes/types.d.ts +0 -118
- package/lib/types/index.d.ts +0 -7
- package/lib/types/keyboard.d.ts +0 -253
- package/lib/utils/device.d.ts +0 -45
- package/lib/utils/dom.d.ts +0 -69
- package/lib/utils/event-emitter.d.ts +0 -52
- package/lib/utils/formatters.d.ts +0 -51
- package/lib/utils/index.d.ts +0 -10
- package/lib/utils/random.d.ts +0 -71
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qwerty.cjs","names":[],"sources":["../../src/layouts/qwerty.ts"],"sourcesContent":["/**\n * QWERTY 标准字母键盘布局\n * @module layouts/qwerty\n */\n\nimport type { KeyboardConfig, KeyDefinition } from '../types'\n\n/**\n * 创建字符按键\n */\nfunction createCharKey(char: string): KeyDefinition {\n return {\n id: `char-${char.toLowerCase()}`,\n type: 'char',\n label: { lower: char.toLowerCase(), upper: char.toUpperCase() },\n value: { lower: char.toLowerCase(), upper: char.toUpperCase() },\n }\n}\n\n/**\n * QWERTY 键盘配置\n */\nexport const qwertyLayout: KeyboardConfig = {\n type: 'qwerty',\n name: '字母键盘',\n supportShift: true,\n defaultUpperCase: false,\n switchable: ['number', 'symbol'],\n rows: [\n {\n keys: [\n createCharKey('Q'),\n createCharKey('W'),\n createCharKey('E'),\n createCharKey('R'),\n createCharKey('T'),\n createCharKey('Y'),\n createCharKey('U'),\n createCharKey('I'),\n createCharKey('O'),\n createCharKey('P'),\n ],\n },\n {\n keys: [\n createCharKey('A'),\n createCharKey('S'),\n createCharKey('D'),\n createCharKey('F'),\n createCharKey('G'),\n createCharKey('H'),\n createCharKey('J'),\n createCharKey('K'),\n createCharKey('L'),\n ],\n },\n {\n keys: [\n {\n id: 'shift',\n type: 'shift',\n label: '⇧',\n width: 1.5,\n className: 'key-shift',\n },\n createCharKey('Z'),\n createCharKey('X'),\n createCharKey('C'),\n createCharKey('V'),\n createCharKey('B'),\n createCharKey('N'),\n createCharKey('M'),\n {\n id: 'backspace',\n type: 'backspace',\n label: '⌫',\n width: 1.5,\n className: 'key-backspace',\n },\n ],\n },\n {\n keys: [\n {\n id: 'switch-number',\n type: 'tab',\n label: '123',\n width: 1.5,\n className: 'key-switch',\n data: { targetType: 'number' },\n },\n {\n id: 'switch-symbol',\n type: 'tab',\n label: '#+=',\n width: 1.25,\n className: 'key-switch',\n data: { targetType: 'symbol' },\n },\n {\n id: 'space',\n type: 'space',\n label: '空格',\n value: ' ',\n width: 4,\n className: 'key-space',\n },\n {\n id: 'done',\n type: 'done',\n label: '完成',\n width: 2,\n className: 'key-done',\n },\n ],\n },\n ],\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAS,cAAc,MAA6B;CAClD,OAAO;EACL,IAAI,QAAQ,KAAK,YAAY;EAC7B,MAAM;EACN,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;EAC9D,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;CAChE;AACF;AAKO,MAAM,eAA+B;CAC1C,MAAM;CACN,MAAM;CACN,cAAc;CACd,kBAAkB;CAClB,YAAY,CAAC,UAAU,QAAQ;CAC/B,MAAM;EACJ,EACE,MAAM;GACJ,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;EACnB,EACF;EACA,EACE,MAAM;GACJ,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;EACnB,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"qwerty.cjs","names":[],"sources":["../../src/layouts/qwerty.ts"],"sourcesContent":["/**\r\n * QWERTY 标准字母键盘布局\r\n * @module layouts/qwerty\r\n */\r\n\r\nimport type { KeyboardConfig, KeyDefinition } from '../types'\r\n\r\n/**\r\n * 创建字符按键\r\n */\r\nfunction createCharKey(char: string): KeyDefinition {\r\n return {\r\n id: `char-${char.toLowerCase()}`,\r\n type: 'char',\r\n label: { lower: char.toLowerCase(), upper: char.toUpperCase() },\r\n value: { lower: char.toLowerCase(), upper: char.toUpperCase() },\r\n }\r\n}\r\n\r\n/**\r\n * QWERTY 键盘配置\r\n */\r\nexport const qwertyLayout: KeyboardConfig = {\r\n type: 'qwerty',\r\n name: '字母键盘',\r\n supportShift: true,\r\n defaultUpperCase: false,\r\n switchable: ['number', 'symbol'],\r\n rows: [\r\n {\r\n keys: [\r\n createCharKey('Q'),\r\n createCharKey('W'),\r\n createCharKey('E'),\r\n createCharKey('R'),\r\n createCharKey('T'),\r\n createCharKey('Y'),\r\n createCharKey('U'),\r\n createCharKey('I'),\r\n createCharKey('O'),\r\n createCharKey('P'),\r\n ],\r\n },\r\n {\r\n keys: [\r\n createCharKey('A'),\r\n createCharKey('S'),\r\n createCharKey('D'),\r\n createCharKey('F'),\r\n createCharKey('G'),\r\n createCharKey('H'),\r\n createCharKey('J'),\r\n createCharKey('K'),\r\n createCharKey('L'),\r\n ],\r\n },\r\n {\r\n keys: [\r\n {\r\n id: 'shift',\r\n type: 'shift',\r\n label: '⇧',\r\n width: 1.5,\r\n className: 'key-shift',\r\n },\r\n createCharKey('Z'),\r\n createCharKey('X'),\r\n createCharKey('C'),\r\n createCharKey('V'),\r\n createCharKey('B'),\r\n createCharKey('N'),\r\n createCharKey('M'),\r\n {\r\n id: 'backspace',\r\n type: 'backspace',\r\n label: '⌫',\r\n width: 1.5,\r\n className: 'key-backspace',\r\n },\r\n ],\r\n },\r\n {\r\n keys: [\r\n {\r\n id: 'switch-number',\r\n type: 'tab',\r\n label: '123',\r\n width: 1.5,\r\n className: 'key-switch',\r\n data: { targetType: 'number' },\r\n },\r\n {\r\n id: 'switch-symbol',\r\n type: 'tab',\r\n label: '#+=',\r\n width: 1.25,\r\n className: 'key-switch',\r\n data: { targetType: 'symbol' },\r\n },\r\n {\r\n id: 'space',\r\n type: 'space',\r\n label: '空格',\r\n value: ' ',\r\n width: 4,\r\n className: 'key-space',\r\n },\r\n {\r\n id: 'done',\r\n type: 'done',\r\n label: '完成',\r\n width: 2,\r\n className: 'key-done',\r\n },\r\n ],\r\n },\r\n ],\r\n}\r\n"],"mappings":";;;;;;;;;;;AAUA,SAAS,cAAc,MAA6B;CAClD,OAAO;EACL,IAAI,QAAQ,KAAK,YAAY;EAC7B,MAAM;EACN,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;EAC9D,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;CAChE;AACF;AAKO,MAAM,eAA+B;CAC1C,MAAM;CACN,MAAM;CACN,cAAc;CACd,kBAAkB;CAClB,YAAY,CAAC,UAAU,QAAQ;CAC/B,MAAM;EACJ,EACE,MAAM;GACJ,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;EACnB,EACF;EACA,EACE,MAAM;GACJ,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;EACnB,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB,cAAc,GAAG;GACjB;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;CACF;AACF"}
|
package/lib/layouts/search.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.cjs","names":[],"sources":["../../src/layouts/search.ts"],"sourcesContent":["/**\n * 搜索键盘布局\n * @module layouts/search\n */\n\n// 导入键盘配置和按键定义的类型\nimport type { KeyboardConfig, KeyDefinition } from '../types'\n// 导入删除、Shift和语音图标资源\nimport { ICON_DELETE, ICON_SHIFT, ICON_VOICE } from '../icons'\n\n/**\n * 创建字符按键(支持大小写)\n * @param char - 字符,用于生成大小写标签和值\n * @returns 返回一个按键定义对象\n */\nfunction createCharKey(char: string): KeyDefinition {\n return {\n id: `search-char-${char.toLowerCase()}`,
|
|
1
|
+
{"version":3,"file":"search.cjs","names":[],"sources":["../../src/layouts/search.ts"],"sourcesContent":["/**\r\n * 搜索键盘布局\r\n * @module layouts/search\r\n */\r\n\r\n// 导入键盘配置和按键定义的类型\r\nimport type { KeyboardConfig, KeyDefinition } from '../types'\r\n// 导入删除、Shift和语音图标资源\r\nimport { ICON_DELETE, ICON_SHIFT, ICON_VOICE } from '../icons'\r\n\r\n/**\r\n * 创建字符按键(支持大小写)\r\n * @param char - 字符,用于生成大小写标签和值\r\n * @returns 返回一个按键定义对象\r\n */\r\nfunction createCharKey(char: string): KeyDefinition {\r\n return {\r\n id: `search-char-${char.toLowerCase()}`, // 按键唯一标识,格式为 search-char-x\r\n type: 'char', // 按键类型为字符键\r\n label: { lower: char.toLowerCase(), upper: char.toUpperCase() }, // 显示标签:小写/大写\r\n value: { lower: char.toLowerCase(), upper: char.toUpperCase() }, // 输出值:小写/大写\r\n }\r\n}\r\n\r\n// 导出搜索键盘布局配置\r\nexport const searchLayout: KeyboardConfig = {\r\n type: 'search', // 布局类型标识为 search\r\n name: '搜索键盘', // 布局显示名称\r\n supportShift: true, // 支持Shift切换大小写\r\n defaultUpperCase: false, // 默认为小写状态\r\n switchable: ['symbol', 'number'], // 可切换到符号键盘和数字键盘\r\n rows: [\r\n // QWERTY 第一行:q w e r t y u i o p\r\n {\r\n keys: 'qwertyuiop'.split('').map(createCharKey), // 将字符串拆分为字符数组,逐个创建按键\r\n },\r\n // QWERTY 第二行:a s d f g h j k l\r\n {\r\n keys: 'asdfghjkl'.split('').map(createCharKey), // 将字符串拆分为字符数组,逐个创建按键\r\n },\r\n // QWERTY 第三行 + Shift + 退格\r\n {\r\n keys: [\r\n {\r\n id: 'shift', // Shift键标识\r\n type: 'shift', // 按键类型为Shift\r\n icon: ICON_SHIFT, // 使用Shift图标\r\n label: '', // 无文字标签,仅显示图标\r\n width: 1.5, // 宽度为1.5倍\r\n className: 'key-shift', // CSS类名\r\n },\r\n ...'zxcvbnm'.split('').map(createCharKey), // 展开第三行字母 z x c v b n m 的按键定义\r\n {\r\n id: 'backspace', // 退格键标识\r\n type: 'backspace', // 按键类型为退格\r\n icon: ICON_DELETE, // 使用删除图标\r\n label: '', // 无文字标签,仅显示图标\r\n width: 1.5, // 宽度为1.5倍\r\n className: 'key-backspace', // CSS类名\r\n },\r\n ],\r\n },\r\n // 底部行:切换 + 空格 + 语音 + 搜索\r\n {\r\n keys: [\r\n {\r\n id: 'switch-number',\r\n type: 'tab',\r\n label: '123',\r\n width: 1.25,\r\n className: 'key-switch',\r\n data: { targetType: 'number' },\r\n }, // 切换到数字键盘,宽度1.25倍\r\n {\r\n id: 'switch-symbol',\r\n type: 'tab',\r\n label: '#+=',\r\n width: 1.25,\r\n className: 'key-switch',\r\n data: { targetType: 'symbol' },\r\n }, // 切换到符号键盘,宽度1.25倍\r\n {\r\n id: 'space',\r\n type: 'space',\r\n label: '',\r\n value: ' ',\r\n width: 4,\r\n className: 'key-space',\r\n }, // 空格键,宽度4倍\r\n {\r\n id: 'voice',\r\n type: 'custom',\r\n icon: ICON_VOICE,\r\n label: '',\r\n width: 1,\r\n className: 'key-voice',\r\n data: { action: 'voice' },\r\n }, // 语音输入按钮,宽度1倍\r\n {\r\n id: 'search-done',\r\n type: 'done',\r\n label: '搜索',\r\n width: 2,\r\n className: 'key-done',\r\n }, // 搜索/完成按钮,宽度2倍\r\n ],\r\n },\r\n ],\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAeA,SAAS,cAAc,MAA6B;CAClD,OAAO;EACL,IAAI,eAAe,KAAK,YAAY;EACpC,MAAM;EACN,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;EAC9D,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;CAChE;AACF;AAGO,MAAM,eAA+B;CAC1C,MAAM;CACN,MAAM;CACN,cAAc;CACd,kBAAkB;CAClB,YAAY,CAAC,UAAU,QAAQ;CAC/B,MAAM;EAEJ,EACE,MAAM,aAAa,MAAM,EAAE,CAAA,CAAE,IAAI,aAAa,EAChD;EAEA,EACE,MAAM,YAAY,MAAM,EAAE,CAAA,CAAE,IAAI,aAAa,EAC/C;EAEA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,MAAM,cAAA;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA,GAAG,UAAU,MAAM,EAAE,CAAA,CAAE,IAAI,aAAa;GACxC;IACE,IAAI;IACJ,MAAM;IACN,MAAM,cAAA;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;EAEA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA;IACE,IAAI;IACJ,MAAM;IACN,MAAM,cAAA;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,QAAQ,QAAQ;GAC1B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;CACF;AACF"}
|
package/lib/layouts/symbol.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol.cjs","names":[],"sources":["../../src/layouts/symbol.ts"],"sourcesContent":["/**\n * 符号键盘布局\n * @module layouts/symbol\n */\n\nimport type { KeyboardConfig, KeyDefinition } from '../types'\n\n/**\n * 创建符号按键\n */\nfunction createSymbolKey(symbol: string, id?: string): KeyDefinition {\n return {\n id: id || `symbol-${symbol.charCodeAt(0)}`,\n type: 'char',\n label: symbol,\n value: symbol,\n }\n}\n\n/**\n * 符号键盘配置\n */\nexport const symbolLayout: KeyboardConfig = {\n type: 'symbol',\n name: '符号键盘',\n supportShift: false,\n switchable: ['qwerty', 'number'],\n rows: [\n {\n keys: [\n createSymbolKey('1'),\n createSymbolKey('2'),\n createSymbolKey('3'),\n createSymbolKey('4'),\n createSymbolKey('5'),\n createSymbolKey('6'),\n createSymbolKey('7'),\n createSymbolKey('8'),\n createSymbolKey('9'),\n createSymbolKey('0'),\n ],\n },\n {\n keys: [\n createSymbolKey('-'),\n createSymbolKey('/'),\n createSymbolKey(':'),\n createSymbolKey(';'),\n createSymbolKey('('),\n createSymbolKey(')'),\n createSymbolKey('¥', 'yen'),\n createSymbolKey('@'),\n createSymbolKey('\"', 'quote'),\n ],\n },\n {\n keys: [\n {\n id: 'switch-symbol-2',\n type: 'tab',\n label: '#+= ',\n width: 1.5,\n className: 'key-switch',\n data: { targetType: 'symbol-2' },\n },\n createSymbolKey('.'),\n createSymbolKey(','),\n createSymbolKey('?'),\n createSymbolKey('!'),\n createSymbolKey('
|
|
1
|
+
{"version":3,"file":"symbol.cjs","names":[],"sources":["../../src/layouts/symbol.ts"],"sourcesContent":["/**\r\n * 符号键盘布局\r\n * @module layouts/symbol\r\n */\r\n\r\nimport type { KeyboardConfig, KeyDefinition } from '../types'\r\n\r\n/**\r\n * 创建符号按键\r\n */\r\nfunction createSymbolKey(symbol: string, id?: string): KeyDefinition {\r\n return {\r\n id: id || `symbol-${symbol.charCodeAt(0)}`,\r\n type: 'char',\r\n label: symbol,\r\n value: symbol,\r\n }\r\n}\r\n\r\n/**\r\n * 符号键盘配置\r\n */\r\nexport const symbolLayout: KeyboardConfig = {\r\n type: 'symbol',\r\n name: '符号键盘',\r\n supportShift: false,\r\n switchable: ['qwerty', 'number'],\r\n rows: [\r\n {\r\n keys: [\r\n createSymbolKey('1'),\r\n createSymbolKey('2'),\r\n createSymbolKey('3'),\r\n createSymbolKey('4'),\r\n createSymbolKey('5'),\r\n createSymbolKey('6'),\r\n createSymbolKey('7'),\r\n createSymbolKey('8'),\r\n createSymbolKey('9'),\r\n createSymbolKey('0'),\r\n ],\r\n },\r\n {\r\n keys: [\r\n createSymbolKey('-'),\r\n createSymbolKey('/'),\r\n createSymbolKey(':'),\r\n createSymbolKey(';'),\r\n createSymbolKey('('),\r\n createSymbolKey(')'),\r\n createSymbolKey('¥', 'yen'),\r\n createSymbolKey('@'),\r\n createSymbolKey('\"', 'quote'),\r\n ],\r\n },\r\n {\r\n keys: [\r\n {\r\n id: 'switch-symbol-2',\r\n type: 'tab',\r\n label: '#+= ',\r\n width: 1.5,\r\n className: 'key-switch',\r\n data: { targetType: 'symbol-2' },\r\n },\r\n createSymbolKey('.'),\r\n createSymbolKey(','),\r\n createSymbolKey('?'),\r\n createSymbolKey('!'),\r\n createSymbolKey(\"'\", 'apostrophe'),\r\n {\r\n id: 'backspace',\r\n type: 'backspace',\r\n label: '⌫',\r\n width: 1.5,\r\n className: 'key-backspace',\r\n },\r\n ],\r\n },\r\n {\r\n keys: [\r\n {\r\n id: 'switch-qwerty',\r\n type: 'tab',\r\n label: 'ABC',\r\n width: 1.5,\r\n className: 'key-switch',\r\n data: { targetType: 'qwerty' },\r\n },\r\n {\r\n id: 'switch-number',\r\n type: 'tab',\r\n label: '123',\r\n width: 1.25,\r\n className: 'key-switch',\r\n data: { targetType: 'number' },\r\n },\r\n {\r\n id: 'space',\r\n type: 'space',\r\n label: '空格',\r\n value: ' ',\r\n width: 4,\r\n className: 'key-space',\r\n },\r\n {\r\n id: 'done',\r\n type: 'done',\r\n label: '完成',\r\n width: 2,\r\n className: 'key-done',\r\n },\r\n ],\r\n },\r\n ],\r\n}\r\n\r\n/**\r\n * 符号键盘第二页\r\n */\r\nexport const symbolLayout2: KeyboardConfig = {\r\n type: 'symbol',\r\n name: '符号键盘2',\r\n supportShift: false,\r\n switchable: ['qwerty', 'number'],\r\n rows: [\r\n {\r\n keys: [\r\n createSymbolKey('['),\r\n createSymbolKey(']'),\r\n createSymbolKey('{'),\r\n createSymbolKey('}'),\r\n createSymbolKey('#'),\r\n createSymbolKey('%'),\r\n createSymbolKey('^'),\r\n createSymbolKey('*'),\r\n createSymbolKey('+'),\r\n createSymbolKey('='),\r\n ],\r\n },\r\n {\r\n keys: [\r\n createSymbolKey('_'),\r\n createSymbolKey('\\\\'),\r\n createSymbolKey('|'),\r\n createSymbolKey('~'),\r\n createSymbolKey('<'),\r\n createSymbolKey('>'),\r\n createSymbolKey('€', 'euro'),\r\n createSymbolKey('$'),\r\n createSymbolKey('&'),\r\n ],\r\n },\r\n {\r\n keys: [\r\n {\r\n id: 'switch-symbol-1',\r\n type: 'tab',\r\n label: '123',\r\n width: 1.5,\r\n className: 'key-switch',\r\n data: { targetType: 'symbol' },\r\n },\r\n createSymbolKey('`', 'backtick'),\r\n createSymbolKey('·', 'middle-dot'),\r\n createSymbolKey('…', 'ellipsis'),\r\n createSymbolKey('°', 'degree'),\r\n createSymbolKey('•', 'bullet'),\r\n {\r\n id: 'backspace',\r\n type: 'backspace',\r\n label: '⌫',\r\n width: 1.5,\r\n className: 'key-backspace',\r\n },\r\n ],\r\n },\r\n {\r\n keys: [\r\n {\r\n id: 'switch-qwerty',\r\n type: 'tab',\r\n label: 'ABC',\r\n width: 1.5,\r\n className: 'key-switch',\r\n data: { targetType: 'qwerty' },\r\n },\r\n {\r\n id: 'switch-number',\r\n type: 'tab',\r\n label: '123',\r\n width: 1.25,\r\n className: 'key-switch',\r\n data: { targetType: 'number' },\r\n },\r\n {\r\n id: 'space',\r\n type: 'space',\r\n label: '空格',\r\n value: ' ',\r\n width: 4,\r\n className: 'key-space',\r\n },\r\n {\r\n id: 'done',\r\n type: 'done',\r\n label: '完成',\r\n width: 2,\r\n className: 'key-done',\r\n },\r\n ],\r\n },\r\n ],\r\n}\r\n"],"mappings":";;;;;;;;;;;AAUA,SAAS,gBAAgB,QAAgB,IAA4B;CACnE,OAAO;EACL,IAAI,MAAM,UAAU,OAAO,WAAW,CAAC;EACvC,MAAM;EACN,OAAO;EACP,OAAO;CACT;AACF;AAKO,MAAM,eAA+B;CAC1C,MAAM;CACN,MAAM;CACN,cAAc;CACd,YAAY,CAAC,UAAU,QAAQ;CAC/B,MAAM;EACJ,EACE,MAAM;GACJ,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;EACrB,EACF;EACA,EACE,MAAM;GACJ,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,KAAK,KAAK;GAC1B,gBAAgB,GAAG;GACnB,gBAAgB,MAAK,OAAO;EAC9B,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,WAAW;GACjC;GACA,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,KAAK,YAAY;GACjC;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;CACF;AACF;AAKO,MAAM,gBAAgC;CAC3C,MAAM;CACN,MAAM;CACN,cAAc;CACd,YAAY,CAAC,UAAU,QAAQ;CAC/B,MAAM;EACJ,EACE,MAAM;GACJ,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;EACrB,EACF;EACA,EACE,MAAM;GACJ,gBAAgB,GAAG;GACnB,gBAAgB,IAAI;GACpB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;GACnB,gBAAgB,KAAK,MAAM;GAC3B,gBAAgB,GAAG;GACnB,gBAAgB,GAAG;EACrB,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA,gBAAgB,KAAK,UAAU;GAC/B,gBAAgB,KAAK,YAAY;GACjC,gBAAgB,KAAK,UAAU;GAC/B,gBAAgB,KAAK,QAAQ;GAC7B,gBAAgB,KAAK,QAAQ;GAC7B;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;EACA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;CACF;AACF"}
|
package/lib/layouts/url.cjs
CHANGED
package/lib/layouts/url.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.cjs","names":[],"sources":["../../src/layouts/url.ts"],"sourcesContent":["/**\n * URL/链接键盘布局\n * @module layouts/url\n */\n\n// 导入键盘配置和按键定义的类型\nimport type { KeyboardConfig, KeyDefinition } from '../types'\n// 导入删除和Shift图标资源\nimport { ICON_DELETE, ICON_SHIFT } from '../icons'\n\n/**\n * 创建字符按键(支持大小写)\n * @param char - 字符,用于生成大小写标签和值\n * @returns 返回一个按键定义对象\n */\nfunction createCharKey(char: string): KeyDefinition {\n return {\n id: `url-char-${char.toLowerCase()}`,
|
|
1
|
+
{"version":3,"file":"url.cjs","names":[],"sources":["../../src/layouts/url.ts"],"sourcesContent":["/**\r\n * URL/链接键盘布局\r\n * @module layouts/url\r\n */\r\n\r\n// 导入键盘配置和按键定义的类型\r\nimport type { KeyboardConfig, KeyDefinition } from '../types'\r\n// 导入删除和Shift图标资源\r\nimport { ICON_DELETE, ICON_SHIFT } from '../icons'\r\n\r\n/**\r\n * 创建字符按键(支持大小写)\r\n * @param char - 字符,用于生成大小写标签和值\r\n * @returns 返回一个按键定义对象\r\n */\r\nfunction createCharKey(char: string): KeyDefinition {\r\n return {\r\n id: `url-char-${char.toLowerCase()}`, // 按键唯一标识,格式为 url-char-x\r\n type: 'char', // 按键类型为字符键\r\n label: { lower: char.toLowerCase(), upper: char.toUpperCase() }, // 显示标签:小写/大写\r\n value: { lower: char.toLowerCase(), upper: char.toUpperCase() }, // 输出值:小写/大写\r\n }\r\n}\r\n\r\n/**\r\n * 创建快捷片段按键\r\n * 用于URL键盘中常用的符号和域名后缀\r\n * @param label - 按键显示文本\r\n * @param width - 可选,按键宽度倍数\r\n * @returns 返回一个片段按键定义对象\r\n */\r\nfunction snippet(label: string, width?: number): KeyDefinition {\r\n // 生成唯一 ID:用 label 的字符编码(去除非法字符后拼接)\r\n const idSuffix =\r\n label.replace(/[^a-z0-9]/gi, '') ||\r\n label\r\n .split('')\r\n .map(c => c.charCodeAt(0))\r\n .join('')\r\n return {\r\n id: `url-snippet-${idSuffix}`, // 按键唯一标识,格式为 url-snippet-xxx\r\n type: 'char', // 按键类型为字符键\r\n label, // 显示文本\r\n value: label, // 输出值与显示文本相同\r\n width, // 按键宽度倍数\r\n className: 'key-snippet', // 自定义CSS类名,用于样式控制\r\n }\r\n}\r\n\r\n// 导出URL键盘布局配置\r\nexport const urlLayout: KeyboardConfig = {\r\n type: 'url', // 布局类型标识为 url\r\n name: '网址键盘', // 布局显示名称\r\n supportShift: true, // 支持Shift切换大小写\r\n defaultUpperCase: false, // 默认为小写状态\r\n switchable: ['symbol', 'number'], // 可切换到符号键盘和数字键盘\r\n rows: [\r\n // QWERTY 第一行:q w e r t y u i o p\r\n {\r\n keys: 'qwertyuiop'.split('').map(createCharKey), // 将字符串拆分为字符数组,逐个创建按键\r\n },\r\n // QWERTY 第二行:a s d f g h j k l\r\n {\r\n keys: 'asdfghjkl'.split('').map(createCharKey), // 将字符串拆分为字符数组,逐个创建按键\r\n },\r\n // QWERTY 第三行 + Shift + 退格\r\n {\r\n keys: [\r\n {\r\n id: 'shift', // Shift键标识\r\n type: 'shift', // 按键类型为Shift\r\n icon: ICON_SHIFT, // 使用Shift图标\r\n label: '', // 无文字标签,仅显示图标\r\n width: 1.5, // 宽度为1.5倍\r\n className: 'key-shift', // CSS类名\r\n },\r\n ...'zxcvbnm'.split('').map(createCharKey), // 展开第三行字母 z x c v b n m 的按键定义\r\n {\r\n id: 'backspace', // 退格键标识\r\n type: 'backspace', // 按键类型为退格\r\n icon: ICON_DELETE, // 使用删除图标\r\n label: '', // 无文字标签,仅显示图标\r\n width: 1.5, // 宽度为1.5倍\r\n className: 'key-backspace', // CSS类名\r\n },\r\n ],\r\n },\r\n // 底部行:切换 + 符号 + 域名后缀 + 前往\r\n {\r\n keys: [\r\n {\r\n id: 'switch-number',\r\n type: 'tab',\r\n label: '123',\r\n width: 1.2,\r\n className: 'key-switch',\r\n data: { targetType: 'number' },\r\n }, // 切换到数字键盘\r\n snippet('/', 0.8), // 斜杠快捷键,宽度0.8倍\r\n snippet('.', 0.8), // 点号快捷键,宽度0.8倍\r\n snippet('-', 0.8), // 横杠快捷键,宽度0.8倍\r\n snippet('.com', 1.5), // .com域名后缀快捷键,宽度1.5倍\r\n snippet('.cn', 1.2), // .cn域名后缀快捷键,宽度1.2倍\r\n {\r\n id: 'space',\r\n type: 'space',\r\n label: '',\r\n value: ' ',\r\n width: 1.5,\r\n className: 'key-space',\r\n }, // 空格键,宽度1.5倍\r\n {\r\n id: 'url-go',\r\n type: 'done',\r\n label: '前往',\r\n width: 1.5,\r\n className: 'key-done',\r\n }, // 前往/完成按钮,宽度1.5倍\r\n ],\r\n },\r\n ],\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAeA,SAAS,cAAc,MAA6B;CAClD,OAAO;EACL,IAAI,YAAY,KAAK,YAAY;EACjC,MAAM;EACN,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;EAC9D,OAAO;GAAE,OAAO,KAAK,YAAY;GAAG,OAAO,KAAK,YAAY;EAAE;CAChE;AACF;AASA,SAAS,QAAQ,OAAe,OAA+B;CAQ7D,OAAO;EACL,IAAI,eANJ,MAAM,QAAQ,eAAe,EAAE,KAC/B,MACG,MAAM,EAAE,CAAA,CACR,KAAI,MAAK,EAAE,WAAW,CAAC,CAAC,CAAA,CACxB,KAAK,EAAE;EAGV,MAAM;EACN;EACA,OAAO;EACP;EACA,WAAW;CACb;AACF;AAGO,MAAM,YAA4B;CACvC,MAAM;CACN,MAAM;CACN,cAAc;CACd,kBAAkB;CAClB,YAAY,CAAC,UAAU,QAAQ;CAC/B,MAAM;EAEJ,EACE,MAAM,aAAa,MAAM,EAAE,CAAA,CAAE,IAAI,aAAa,EAChD;EAEA,EACE,MAAM,YAAY,MAAM,EAAE,CAAA,CAAE,IAAI,aAAa,EAC/C;EAEA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,MAAM,cAAA;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA,GAAG,UAAU,MAAM,EAAE,CAAA,CAAE,IAAI,aAAa;GACxC;IACE,IAAI;IACJ,MAAM;IACN,MAAM,cAAA;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;EAEA,EACE,MAAM;GACJ;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM,EAAE,YAAY,SAAS;GAC/B;GACA,QAAQ,KAAK,EAAG;GAChB,QAAQ,KAAK,EAAG;GAChB,QAAQ,KAAK,EAAG;GAChB,QAAQ,QAAQ,GAAG;GACnB,QAAQ,OAAO,GAAG;GAClB;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;GACb;GACA;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,WAAW;GACb;EACF,EACF;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifycode.cjs","names":[],"sources":["../../src/layouts/verifycode.ts"],"sourcesContent":["/**\n * 验证码键盘布局\n * @module layouts/verifycode\n */\n\n// 从类型定义文件中导入 KeyboardConfig(键盘配置)和 KeyDefinition(按键定义)类型\nimport type { KeyboardConfig, KeyDefinition } from '../types'\n// 从图标模块中导入删除键图标和清除键图标\nimport {
|
|
1
|
+
{"version":3,"file":"verifycode.cjs","names":[],"sources":["../../src/layouts/verifycode.ts"],"sourcesContent":["/**\r\n * 验证码键盘布局\r\n * @module layouts/verifycode\r\n */\r\n\r\n// 从类型定义文件中导入 KeyboardConfig(键盘配置)和 KeyDefinition(按键定义)类型\r\nimport type { KeyboardConfig, KeyDefinition } from '../types'\r\n// 从图标模块中导入删除键图标和清除键图标\r\nimport { ICON_CLEAR, ICON_DELETE } from '../icons'\r\n\r\n/**\r\n * 创建数字按键\r\n * @param num - 数字字符串(如 '0'-'9')\r\n * @returns 返回一个按键定义对象\r\n */\r\nfunction createNumberKey(num: string): KeyDefinition {\r\n return {\r\n id: `verify-${num}`, // 按键唯一标识符,格式为 verify-数字\r\n type: 'char', // 按键类型为字符键\r\n label: num, // 按键上显示的文本\r\n value: num, // 按键按下后输出的值\r\n className: 'key-num', // 按键的 CSS 类名,用于样式定制\r\n }\r\n}\r\n\r\n/**\r\n * 验证码键盘配置 - 4x4布局(与其他数字键盘一致)\r\n * 布局结构:\r\n * 第1行: 1 2 3 [退格]\r\n * 第2行: 4 5 6 [清除]\r\n * 第3行: 7 8 9 [关闭]\r\n * 第4行: [空] 0 [确定(占2格)]\r\n */\r\nexport const verifycodeLayout: KeyboardConfig = {\r\n type: 'verifycode', // 键盘类型标识\r\n name: '验证码键盘', // 键盘的显示名称\r\n supportShift: false, // 不支持 Shift 切换(纯数字键盘无需切换)\r\n rows: [\r\n // 键盘的行数组\r\n // ---- 第1行 ----\r\n {\r\n className: 'numpad-row', // 行的 CSS 类名\r\n keys: [\r\n // 该行包含的按键数组\r\n createNumberKey('1'), // 数字键 1\r\n createNumberKey('2'), // 数字键 2\r\n createNumberKey('3'), // 数字键 3\r\n {\r\n id: 'backspace', // 退格键的唯一标识\r\n type: 'backspace', // 按键类型为退格,删除最后一个字符\r\n icon: ICON_DELETE, // 使用删除图标作为显示内容\r\n label: '', // 无文本标签(由图标替代)\r\n className: 'key-numpad-fn', // 功能键的 CSS 类名\r\n },\r\n ],\r\n },\r\n // ---- 第2行 ----\r\n {\r\n className: 'numpad-row', // 行的 CSS 类名\r\n keys: [\r\n createNumberKey('4'), // 数字键 4\r\n createNumberKey('5'), // 数字键 5\r\n createNumberKey('6'), // 数字键 6\r\n {\r\n id: 'clear', // 清除键的唯一标识\r\n type: 'clear', // 按键类型为清除,清空所有输入\r\n icon: ICON_CLEAR, // 使用清除图标作为显示内容\r\n label: '', // 无文本标签\r\n className: 'key-numpad-fn', // 功能键的 CSS 类名\r\n },\r\n ],\r\n },\r\n // ---- 第3行 ----\r\n {\r\n className: 'numpad-row', // 行的 CSS 类名\r\n keys: [\r\n createNumberKey('7'), // 数字键 7\r\n createNumberKey('8'), // 数字键 8\r\n createNumberKey('9'), // 数字键 9\r\n {\r\n id: 'close', // 关闭键的唯一标识\r\n type: 'close', // 按键类型为关闭,收起键盘\r\n label: '关闭', // 按钮上显示的文本\r\n className: 'key-numpad-fn', // 功能键的 CSS 类名\r\n },\r\n ],\r\n },\r\n // ---- 第4行 ----\r\n {\r\n className: 'numpad-row', // 行的 CSS 类名\r\n keys: [\r\n {\r\n id: 'empty', // 占位空键的唯一标识\r\n type: 'char', // 类型为字符键(但被禁用)\r\n label: '', // 无显示文本\r\n value: '', // 无输出值\r\n disabled: true, // 禁用状态,不可点击\r\n className: 'key-numpad-empty', // 空占位键的 CSS 类名\r\n },\r\n createNumberKey('0'), // 数字键 0\r\n {\r\n id: 'done', // 确定键的唯一标识\r\n type: 'done', // 按键类型为确定,完成输入\r\n label: '确定', // 按钮上显示的文本\r\n width: 2, // 占据 2 个键的宽度\r\n className: 'key-numpad-done', // 确定键的 CSS 类名\r\n },\r\n ],\r\n },\r\n ],\r\n data: {\r\n // 键盘的附加数据\r\n maxLength: 6, // 验证码最大输入长度为 6 位\r\n inputType: 'verifycode', // 输入类型标识,用于外部判断\r\n },\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAeA,SAAS,gBAAgB,KAA4B;CACnD,OAAO;EACL,IAAI,UAAU;EACd,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;CACb;AACF;AAUO,MAAM,mBAAmC;CAC9C,MAAM;CACN,MAAM;CACN,cAAc;CACd,MAAM;EAGJ;GACE,WAAW;GACX,MAAM;IAEJ,gBAAgB,GAAG;IACnB,gBAAgB,GAAG;IACnB,gBAAgB,GAAG;IACnB;KACE,IAAI;KACJ,MAAM;KACN,MAAM,cAAA;KACN,OAAO;KACP,WAAW;IACb;GACF;EACF;EAEA;GACE,WAAW;GACX,MAAM;IACJ,gBAAgB,GAAG;IACnB,gBAAgB,GAAG;IACnB,gBAAgB,GAAG;IACnB;KACE,IAAI;KACJ,MAAM;KACN,MAAM,cAAA;KACN,OAAO;KACP,WAAW;IACb;GACF;EACF;EAEA;GACE,WAAW;GACX,MAAM;IACJ,gBAAgB,GAAG;IACnB,gBAAgB,GAAG;IACnB,gBAAgB,GAAG;IACnB;KACE,IAAI;KACJ,MAAM;KACN,OAAO;KACP,WAAW;IACb;GACF;EACF;EAEA;GACE,WAAW;GACX,MAAM;IACJ;KACE,IAAI;KACJ,MAAM;KACN,OAAO;KACP,OAAO;KACP,UAAU;KACV,WAAW;IACb;IACA,gBAAgB,GAAG;IACnB;KACE,IAAI;KACJ,MAAM;KACN,OAAO;KACP,OAAO;KACP,WAAW;IACb;GACF;EACF;CACF;CACA,MAAM;EAEJ,WAAW;EACX,WAAW;CACb;AACF"}
|
package/lib/managers/index.cjs
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
* ***********************************
|
|
3
3
|
* @composy/keyboard-core v0.0.1 *
|
|
4
4
|
* Built with rollup *
|
|
5
|
-
* Build time: 2024-
|
|
5
|
+
* Build time: 2024-10-12 17:29:15 *
|
|
6
6
|
* Build mode: production *
|
|
7
7
|
* Minified: No *
|
|
8
8
|
* ***********************************
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
11
11
|
const require_index = require("../layouts/index.cjs");
|
|
12
|
-
const require_event_emitter = require("../utils/event-emitter.cjs");
|
|
13
12
|
const require_device = require("../utils/device.cjs");
|
|
14
13
|
const require_dom = require("../utils/dom.cjs");
|
|
14
|
+
const require_event_emitter = require("../utils/event-emitter.cjs");
|
|
15
15
|
//#region src/managers/keyboard-manager.ts
|
|
16
16
|
const DEFAULT_OPTIONS = {
|
|
17
17
|
type: "qwerty",
|
|
@@ -23,14 +23,28 @@ const DEFAULT_OPTIONS = {
|
|
|
23
23
|
enableVibrate: true,
|
|
24
24
|
customLayouts: {}
|
|
25
25
|
};
|
|
26
|
+
function normalizeMaxLength(value) {
|
|
27
|
+
if (value === void 0 || !Number.isFinite(value)) return void 0;
|
|
28
|
+
return Math.max(0, Math.floor(value));
|
|
29
|
+
}
|
|
30
|
+
function clampValue(value, maxLength) {
|
|
31
|
+
return maxLength === void 0 ? value : value.slice(0, maxLength);
|
|
32
|
+
}
|
|
26
33
|
var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
27
34
|
constructor(options = {}) {
|
|
28
35
|
super();
|
|
29
36
|
/** 当前布局配置 */
|
|
30
37
|
this.currentLayout = null;
|
|
38
|
+
this.destroyed = false;
|
|
39
|
+
const maxLength = normalizeMaxLength(options.maxLength);
|
|
31
40
|
this.options = {
|
|
32
41
|
...DEFAULT_OPTIONS,
|
|
33
|
-
...options
|
|
42
|
+
...options,
|
|
43
|
+
maxLength,
|
|
44
|
+
customLayouts: {
|
|
45
|
+
...DEFAULT_OPTIONS.customLayouts,
|
|
46
|
+
...options.customLayouts ?? {}
|
|
47
|
+
}
|
|
34
48
|
};
|
|
35
49
|
if (options.customLayouts) Object.entries(options.customLayouts).forEach(([name, layout]) => {
|
|
36
50
|
this.options.customLayouts[name] = layout;
|
|
@@ -39,8 +53,8 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
39
53
|
visible: false,
|
|
40
54
|
type: this.options.type,
|
|
41
55
|
isUpperCase: this.options.defaultUpperCase,
|
|
42
|
-
value: this.options.value,
|
|
43
|
-
cursorPosition: this.options.value.length,
|
|
56
|
+
value: clampValue(this.options.value, this.options.maxLength),
|
|
57
|
+
cursorPosition: clampValue(this.options.value, this.options.maxLength).length,
|
|
44
58
|
maxLength: this.options.maxLength,
|
|
45
59
|
inputElement: null
|
|
46
60
|
};
|
|
@@ -62,7 +76,10 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
62
76
|
* 获取配置选项
|
|
63
77
|
*/
|
|
64
78
|
getOptions() {
|
|
65
|
-
return {
|
|
79
|
+
return {
|
|
80
|
+
...this.options,
|
|
81
|
+
customLayouts: { ...this.options.customLayouts }
|
|
82
|
+
};
|
|
66
83
|
}
|
|
67
84
|
/**
|
|
68
85
|
* 加载键盘布局
|
|
@@ -82,7 +99,11 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
82
99
|
* 显示键盘
|
|
83
100
|
*/
|
|
84
101
|
show(inputElement) {
|
|
85
|
-
if (this.
|
|
102
|
+
if (this.destroyed) return;
|
|
103
|
+
if (this.state.visible) {
|
|
104
|
+
if (inputElement && this.state.inputElement !== inputElement) this.bindInput(inputElement);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
86
107
|
this.state.visible = true;
|
|
87
108
|
this.state.inputElement = inputElement ?? null;
|
|
88
109
|
if (inputElement) {
|
|
@@ -96,6 +117,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
96
117
|
* 隐藏键盘
|
|
97
118
|
*/
|
|
98
119
|
hide() {
|
|
120
|
+
if (this.destroyed) return;
|
|
99
121
|
if (!this.state.visible) return;
|
|
100
122
|
const prevType = this.state.type;
|
|
101
123
|
this.state.visible = false;
|
|
@@ -107,6 +129,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
107
129
|
* 切换键盘显示/隐藏
|
|
108
130
|
*/
|
|
109
131
|
toggle(inputElement) {
|
|
132
|
+
if (this.destroyed) return;
|
|
110
133
|
if (this.state.visible) this.hide();
|
|
111
134
|
else this.show(inputElement);
|
|
112
135
|
}
|
|
@@ -114,6 +137,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
114
137
|
* 切换键盘类型
|
|
115
138
|
*/
|
|
116
139
|
switchType(type) {
|
|
140
|
+
if (this.destroyed) return;
|
|
117
141
|
if (this.state.type === type) return;
|
|
118
142
|
const fromType = this.state.type;
|
|
119
143
|
if (!this.loadLayout(type)) return;
|
|
@@ -128,6 +152,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
128
152
|
* 切换大小写
|
|
129
153
|
*/
|
|
130
154
|
toggleShift() {
|
|
155
|
+
if (this.destroyed) return;
|
|
131
156
|
if (!this.currentLayout?.supportShift) return;
|
|
132
157
|
this.state.isUpperCase = !this.state.isUpperCase;
|
|
133
158
|
this.emitStateChange();
|
|
@@ -137,6 +162,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
137
162
|
* 设置大小写状态
|
|
138
163
|
*/
|
|
139
164
|
setShift(isUpperCase) {
|
|
165
|
+
if (this.destroyed) return;
|
|
140
166
|
if (!this.currentLayout?.supportShift) return;
|
|
141
167
|
if (this.state.isUpperCase === isUpperCase) return;
|
|
142
168
|
this.state.isUpperCase = isUpperCase;
|
|
@@ -147,6 +173,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
147
173
|
* 处理按键
|
|
148
174
|
*/
|
|
149
175
|
handleKey(key) {
|
|
176
|
+
if (this.destroyed) return;
|
|
150
177
|
if (this.options.enableVibrate && require_device.isMobile()) require_device.vibrate(10);
|
|
151
178
|
this.emit("keypress", {
|
|
152
179
|
key,
|
|
@@ -192,12 +219,15 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
192
219
|
require_dom.setInputCursorPosition(input, result.cursorPosition);
|
|
193
220
|
this.state.value = result.value;
|
|
194
221
|
this.state.cursorPosition = result.cursorPosition;
|
|
195
|
-
|
|
222
|
+
this.dispatchInputEvent(input);
|
|
196
223
|
} else {
|
|
197
|
-
if (this.state.maxLength && this.state.value.length >= this.state.maxLength) return;
|
|
198
|
-
const
|
|
224
|
+
if (this.state.maxLength !== void 0 && this.state.value.length >= this.state.maxLength) return;
|
|
225
|
+
const availableLength = this.state.maxLength === void 0 ? keyValue.length : this.state.maxLength - this.state.value.length;
|
|
226
|
+
const valueToInsert = keyValue.slice(0, Math.max(0, availableLength));
|
|
227
|
+
if (!valueToInsert) return;
|
|
228
|
+
const newValue = this.state.value.slice(0, this.state.cursorPosition) + valueToInsert + this.state.value.slice(this.state.cursorPosition);
|
|
199
229
|
this.state.value = newValue;
|
|
200
|
-
this.state.cursorPosition +=
|
|
230
|
+
this.state.cursorPosition += valueToInsert.length;
|
|
201
231
|
}
|
|
202
232
|
this.emitStateChange();
|
|
203
233
|
this.emit("input", {
|
|
@@ -217,7 +247,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
217
247
|
require_dom.setInputCursorPosition(input, result.cursorPosition);
|
|
218
248
|
this.state.value = result.value;
|
|
219
249
|
this.state.cursorPosition = result.cursorPosition;
|
|
220
|
-
|
|
250
|
+
this.dispatchInputEvent(input);
|
|
221
251
|
this.emitStateChange();
|
|
222
252
|
this.emit("backspace", {
|
|
223
253
|
deletedChar: result.deletedChar,
|
|
@@ -256,7 +286,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
256
286
|
const previousValue = this.state.value;
|
|
257
287
|
if (this.state.inputElement) {
|
|
258
288
|
this.state.inputElement.value = "";
|
|
259
|
-
this.state.inputElement
|
|
289
|
+
this.dispatchInputEvent(this.state.inputElement);
|
|
260
290
|
}
|
|
261
291
|
this.state.value = "";
|
|
262
292
|
this.state.cursorPosition = 0;
|
|
@@ -298,11 +328,14 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
298
328
|
* 设置值
|
|
299
329
|
*/
|
|
300
330
|
setValue(value) {
|
|
301
|
-
this.
|
|
302
|
-
|
|
331
|
+
if (this.destroyed) return;
|
|
332
|
+
const nextValue = clampValue(value, this.state.maxLength);
|
|
333
|
+
this.state.value = nextValue;
|
|
334
|
+
this.state.cursorPosition = nextValue.length;
|
|
303
335
|
if (this.state.inputElement) {
|
|
304
|
-
this.state.inputElement.value =
|
|
305
|
-
require_dom.setInputCursorPosition(this.state.inputElement,
|
|
336
|
+
this.state.inputElement.value = nextValue;
|
|
337
|
+
require_dom.setInputCursorPosition(this.state.inputElement, nextValue.length);
|
|
338
|
+
this.dispatchInputEvent(this.state.inputElement);
|
|
306
339
|
}
|
|
307
340
|
this.emitStateChange();
|
|
308
341
|
this.autoSwitchLicensePlate();
|
|
@@ -311,6 +344,7 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
311
344
|
* 追加值(在光标位置插入文本)
|
|
312
345
|
*/
|
|
313
346
|
appendValue(text) {
|
|
347
|
+
if (this.destroyed) return;
|
|
314
348
|
if (!text) return;
|
|
315
349
|
const input = this.state.inputElement;
|
|
316
350
|
if (input) {
|
|
@@ -319,9 +353,10 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
319
353
|
require_dom.setInputCursorPosition(input, result.cursorPosition);
|
|
320
354
|
this.state.value = result.value;
|
|
321
355
|
this.state.cursorPosition = result.cursorPosition;
|
|
322
|
-
|
|
356
|
+
this.dispatchInputEvent(input);
|
|
323
357
|
} else {
|
|
324
|
-
if (this.state.maxLength
|
|
358
|
+
if (this.state.maxLength !== void 0) text = text.slice(0, Math.max(0, this.state.maxLength - this.state.value.length));
|
|
359
|
+
if (!text) return;
|
|
325
360
|
const newValue = this.state.value.slice(0, this.state.cursorPosition) + text + this.state.value.slice(this.state.cursorPosition);
|
|
326
361
|
this.state.value = newValue;
|
|
327
362
|
this.state.cursorPosition += text.length;
|
|
@@ -332,22 +367,38 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
332
367
|
* 设置最大长度
|
|
333
368
|
*/
|
|
334
369
|
setMaxLength(maxLength) {
|
|
335
|
-
this.
|
|
370
|
+
if (this.destroyed) return;
|
|
371
|
+
const normalizedMaxLength = normalizeMaxLength(maxLength);
|
|
372
|
+
this.state.maxLength = normalizedMaxLength;
|
|
373
|
+
const nextValue = clampValue(this.state.value, normalizedMaxLength);
|
|
374
|
+
const changed = nextValue !== this.state.value;
|
|
375
|
+
this.state.value = nextValue;
|
|
376
|
+
this.state.cursorPosition = Math.min(this.state.cursorPosition, nextValue.length);
|
|
377
|
+
if (this.state.inputElement && this.state.inputElement.value !== nextValue) {
|
|
378
|
+
this.state.inputElement.value = nextValue;
|
|
379
|
+
require_dom.setInputCursorPosition(this.state.inputElement, this.state.cursorPosition);
|
|
380
|
+
this.dispatchInputEvent(this.state.inputElement);
|
|
381
|
+
}
|
|
336
382
|
this.emitStateChange();
|
|
383
|
+
if (changed) this.autoSwitchLicensePlate();
|
|
337
384
|
}
|
|
338
385
|
/**
|
|
339
386
|
* 绑定输入框
|
|
340
387
|
*/
|
|
341
388
|
bindInput(input) {
|
|
389
|
+
if (this.destroyed) return;
|
|
342
390
|
this.state.inputElement = input;
|
|
343
|
-
|
|
344
|
-
|
|
391
|
+
const nextValue = clampValue(input.value, this.state.maxLength);
|
|
392
|
+
if (input.value !== nextValue) input.value = nextValue;
|
|
393
|
+
this.state.value = nextValue;
|
|
394
|
+
this.state.cursorPosition = Math.min(require_dom.getInputCursorPosition(input), nextValue.length);
|
|
345
395
|
this.emitStateChange();
|
|
346
396
|
}
|
|
347
397
|
/**
|
|
348
398
|
* 解绑输入框
|
|
349
399
|
*/
|
|
350
400
|
unbindInput() {
|
|
401
|
+
if (this.destroyed) return;
|
|
351
402
|
this.state.inputElement = null;
|
|
352
403
|
this.emitStateChange();
|
|
353
404
|
}
|
|
@@ -357,13 +408,19 @@ var KeyboardManager = class extends require_event_emitter.EventEmitter {
|
|
|
357
408
|
emitStateChange() {
|
|
358
409
|
this.emit("stateChange", { ...this.state });
|
|
359
410
|
}
|
|
411
|
+
dispatchInputEvent(input) {
|
|
412
|
+
const EventConstructor = input.ownerDocument.defaultView?.Event ?? Event;
|
|
413
|
+
input.dispatchEvent(new EventConstructor("input", { bubbles: true }));
|
|
414
|
+
}
|
|
360
415
|
/**
|
|
361
416
|
* 销毁
|
|
362
417
|
*/
|
|
363
418
|
destroy() {
|
|
419
|
+
if (this.destroyed) return;
|
|
364
420
|
this.hide();
|
|
365
421
|
this.clear();
|
|
366
422
|
this.state.inputElement = null;
|
|
423
|
+
this.destroyed = true;
|
|
367
424
|
}
|
|
368
425
|
};
|
|
369
426
|
function createKeyboardManager(options) {
|