@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
package/README.md
CHANGED
|
@@ -1,37 +1,156 @@
|
|
|
1
|
-
# @composy/keyboard-core
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
npm install @composy/keyboard-core
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
├──
|
|
30
|
-
├──
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
# @composy/keyboard-core
|
|
2
|
+
|
|
3
|
+
基于实际源码能力构建的 **框架无关虚拟键盘核心模块**,是 `@composy/keyboard-workspace` 内
|
|
4
|
+
`@composy/keyboard-vue`
|
|
5
|
+
的底层。本模块不依赖任何 UI 框架,纯 TypeScript 实现,提供键盘状态管理(`KeyboardManager`)、弹出层位置计算(`PositionManager`)、DOM 渲染(`KeyboardRenderer`)、内置/自定义布局注册、主题系统、输入框光标/文本工具与设备检测能力。内置 qwerty、数字、金额、身份证、手机号、车牌号、邮箱、网址、搜索等 20+ 种场景化布局,特别支持车牌号输入时的"省份 → 字母数字"智能切换,适用于 PC 与移动端的下沉式虚拟键盘输入场景。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# pnpm
|
|
11
|
+
pnpm add @composy/keyboard-core
|
|
12
|
+
|
|
13
|
+
# npm
|
|
14
|
+
npm install @composy/keyboard-core
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
> 框架适配(如 Vue 3)请安装对应的 `@composy/keyboard-vue` 适配包,直接消费本核心模块。
|
|
18
|
+
|
|
19
|
+
## 目录结构
|
|
20
|
+
|
|
21
|
+
基于真实 `src/` 布局:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
src/
|
|
25
|
+
├── index.ts # 入口,聚合导出各子模块
|
|
26
|
+
├── managers/ # keyboard-manager / position-manager / keyboard-renderer
|
|
27
|
+
├── layouts/ # 20+ 内置布局:qwerty/number/symbol/license-plate/idcard/phone/amount/bankcard/verifycode/email/url/search/punct 等
|
|
28
|
+
├── themes/ # 主题系统:types.ts / presets.ts / index.ts
|
|
29
|
+
├── types/ # 类型定义:keyboard.ts / position.ts / index.ts
|
|
30
|
+
├── utils/ # dom / device / formatters / event-emitter / random
|
|
31
|
+
└── icons.ts # 图标
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 核心 API 详表
|
|
35
|
+
|
|
36
|
+
### 类(Manager)
|
|
37
|
+
|
|
38
|
+
| 名称 | 类型 | 签名 | 用途 |
|
|
39
|
+
| ------------------ | ---- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
40
|
+
| `KeyboardManager` | 类 | `new KeyboardManager(options: KeyboardOptions = {})`,继承 `EventEmitter<KeyboardEventMap>` | 键盘状态管理核心:显示/隐藏、大小写切换、按键处理、绑定输入框、车牌号智能切换 |
|
|
41
|
+
| `PositionManager` | 类 | `new PositionManager(config: PopupPositionConfig = {})` | 计算键盘弹出层位置,支持移动端 bottom-sheet、PC 端 top/bottom 自适应翻转与视口边界调整 |
|
|
42
|
+
| `KeyboardRenderer` | 类 | `new KeyboardRenderer(options: KeyboardRendererOptions = {})` | 框架无关的键盘 DOM 渲染器:创建 DOM、注入样式、绑定输入框、管理主题与位置 |
|
|
43
|
+
|
|
44
|
+
### 工厂函数
|
|
45
|
+
|
|
46
|
+
| 名称 | 类型 | 签名 | 用途 |
|
|
47
|
+
| ------------------------ | ---- | --------------------------------------------------------- | ------------------- |
|
|
48
|
+
| `createKeyboardManager` | 函数 | `(options?: KeyboardOptions) => KeyboardManager` | 创建键盘管理器实例 |
|
|
49
|
+
| `createPositionManager` | 函数 | `(config?: PopupPositionConfig) => PositionManager` | 创建位置管理器实例 |
|
|
50
|
+
| `createKeyboardRenderer` | 函数 | `(options?: KeyboardRendererOptions) => KeyboardRenderer` | 创建 DOM 渲染器实例 |
|
|
51
|
+
|
|
52
|
+
### 布局函数
|
|
53
|
+
|
|
54
|
+
| 名称 | 类型 | 签名 | 用途 |
|
|
55
|
+
| --------------------- | ---- | ------------------------------------------------------------- | ------------------------------------ |
|
|
56
|
+
| `registerLayout` | 函数 | `(name: string, layout: KeyboardConfig): void` | 注册自定义布局(不允许覆盖内置布局) |
|
|
57
|
+
| `registerLayouts` | 函数 | `(layouts: Record<string, KeyboardConfig>): void` | 批量注册自定义布局 |
|
|
58
|
+
| `unregisterLayout` | 函数 | `(name: string): boolean` | 移除自定义布局,返回是否成功 |
|
|
59
|
+
| `getLayout` | 函数 | `(type: KeyboardType \| string): KeyboardConfig \| undefined` | 按类型或名称获取布局配置 |
|
|
60
|
+
| `getAvailableLayouts` | 函数 | `(): string[]` | 获取所有可用布局名称数组 |
|
|
61
|
+
| `hasLayout` | 函数 | `(name: string): boolean` | 判断布局是否存在 |
|
|
62
|
+
|
|
63
|
+
### 常量(布局与数据)
|
|
64
|
+
|
|
65
|
+
| 名称 | 类型 | 签名 | 用途 |
|
|
66
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ---------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
67
|
+
| `qwertyLayout`/`numberLayout`/`integerLayout`/`symbolLayout`/`symbolLayout2` | 常量 | `KeyboardConfig` | 标准字母 / 数字 / 整数 / 两种符号布局 |
|
|
68
|
+
| `licensePlateLayout` 等 | 常量 | `KeyboardConfig` | 车牌号系列(另有 `licensePlateProvinceLayout`/`licensePlateLetterLayout`/`licensePlateAlphanumericLayout`) |
|
|
69
|
+
| `idcardLayout`/`phoneLayout`/`phoneSimpleLayout`/`amountLayout`/`amountSimpleLayout`/`bankcardLayout`/`verifycodeLayout`/`emailLayout`/`urlLayout`/`searchLayout`/`punctLayout` | 常量 | `KeyboardConfig` | 场景化与输入场景键盘布局 |
|
|
70
|
+
| `PROVINCES`/`PLATE_LETTERS`/`EMAIL_SUFFIXES` | 常量 | `string[]` | 车牌省份简称数组 / 车牌允许字母数组 / 常用邮箱后缀数组 |
|
|
71
|
+
|
|
72
|
+
### 类型
|
|
73
|
+
|
|
74
|
+
| 名称 | 类型 | 签名 | 用途 |
|
|
75
|
+
| ------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
76
|
+
| `KeyboardType` | 类型 | `qwerty`/`number`/`integer`/`symbol`/`license-plate`/`idcard`/`phone`/`amount`/`bankcard`/`verifycode`/`email`/`url`/`search` 等 20+ 种 | 键盘类型联合类型 |
|
|
77
|
+
| `KeyType` | 类型 | `char`/`backspace`/`shift`/`space`/`enter`/`tab`/`close`/`clear`/`done`/`custom` | 按键类型 |
|
|
78
|
+
| `KeyDefinition` / `KeyboardRow` | 接口 | — | 单个按键定义(id/type/label/value/width/icon/options/data)/ 键盘行(keys + className) |
|
|
79
|
+
| `KeyboardConfig` | 接口 | — | 键盘布局配置(type/name/rows/supportShift/switchable) |
|
|
80
|
+
| `KeyboardState` | 接口 | — | 键盘运行时状态(visible/type/isUpperCase/value/cursorPosition/maxLength) |
|
|
81
|
+
| `KeyboardEventMap` | 接口 | — | 事件映射:keypress/input/backspace/clear/confirm/show/hide/switch/shift/stateChange |
|
|
82
|
+
| `KeyboardOptions` | 接口 | — | 键盘选项(type/value/maxLength/customLayouts/enableVibrate 等) |
|
|
83
|
+
|
|
84
|
+
> 另有 `PopupPlacement`、`PopupPositionConfig`、`PopupPositionResult`、`Position`、`BoundingRect`
|
|
85
|
+
> 及 DOM/设备工具函数等由各子模块通过 `export *` 一并导出,均以 `src/index.ts` 实际导出为准。
|
|
86
|
+
|
|
87
|
+
## 使用示例
|
|
88
|
+
|
|
89
|
+
直接使用 DOM 渲染器(框架无关):
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import {
|
|
93
|
+
createKeyboardRenderer,
|
|
94
|
+
getAvailableLayouts,
|
|
95
|
+
KeyboardManager,
|
|
96
|
+
} from '@composy/keyboard-core'
|
|
97
|
+
|
|
98
|
+
// 渲染器:绑定输入框并自动管理 DOM/位置/主题
|
|
99
|
+
const input = document.querySelector<HTMLInputElement>('#plate')
|
|
100
|
+
if (!input) throw new Error('Missing #plate input')
|
|
101
|
+
const keyboard = createKeyboardRenderer({
|
|
102
|
+
type: 'license-plate', // 车牌号键盘(自动省份→字母数字切换)
|
|
103
|
+
maxLength: 8,
|
|
104
|
+
enableVibrate: true,
|
|
105
|
+
onInput: v => console.info('输入:', v),
|
|
106
|
+
onConfirm: v => console.info('确认:', v),
|
|
107
|
+
})
|
|
108
|
+
keyboard.bindInput(input) // 聚焦时自动打开,阻止原生键盘
|
|
109
|
+
keyboard.open(input)
|
|
110
|
+
keyboard.setValue('京')
|
|
111
|
+
keyboard.destroy()
|
|
112
|
+
|
|
113
|
+
// 底层管理器:手动控制状态
|
|
114
|
+
const manager = new KeyboardManager({ type: 'qwerty', maxLength: 6 })
|
|
115
|
+
manager.on('confirm', ({ value }) => console.info(value))
|
|
116
|
+
manager.show()
|
|
117
|
+
manager.handleKey({ id: 'a', type: 'char', label: { lower: 'a', upper: 'A' } })
|
|
118
|
+
console.info(getAvailableLayouts())
|
|
119
|
+
manager.destroy()
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 构建脚本 & 验证命令
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
pnpm build # 构建产物(es/lib/esm/dist)
|
|
126
|
+
pnpm type-check # 类型检查
|
|
127
|
+
pnpm type-check:cjs # CJS 配置类型检查
|
|
128
|
+
pnpm lint / lint:check / lint:fix # 代码规范(/0-warning 严格 / 自动修复)
|
|
129
|
+
pnpm test # 单元测试(可加 --watch/--coverage/--changed/--failed/--ui)
|
|
130
|
+
pnpm release # 发布
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 产物说明
|
|
134
|
+
|
|
135
|
+
构建由 `@composy/builder`(`ldesign-builder build`)驱动,产出多格式产物:
|
|
136
|
+
|
|
137
|
+
| 目录 | 说明 | package.json 入口 |
|
|
138
|
+
| ------- | --------------------------------- | ------------------------------------- |
|
|
139
|
+
| `es/` | ES Modules(含 `.d.ts` 类型声明) | `module` / `exports.import` / `types` |
|
|
140
|
+
| `lib/` | CommonJS(`.cjs`) | `main` / `exports.require` |
|
|
141
|
+
| `esm/` | ESM 兼容产物 | 随 `exports` 子路径分发 |
|
|
142
|
+
| `dist/` | 浏览器 UMD/IIFE 压缩产物 | `unpkg` / `jsdelivr` / `browser` |
|
|
143
|
+
|
|
144
|
+
`sideEffects: false` 便于 tree-shaking。`exports`
|
|
145
|
+
提供子路径:`./layouts`、`./managers`、`./themes`、`./types`、`./utils`(均支持通配符深层路径)。
|
|
146
|
+
|
|
147
|
+
## 备注
|
|
148
|
+
|
|
149
|
+
- **框架无关 / peerDeps**:纯核心逻辑,不绑定 React/Vue,无运行期第三方依赖;框架适配由上层
|
|
150
|
+
`@composy/keyboard-vue` 等提供,`devDependencies` 仅含构建/测试工具。
|
|
151
|
+
- **车牌号智能切换**:使用 `license-plate`
|
|
152
|
+
键盘时,会根据当前输入长度自动在省份键盘(第 1 位)与字母数字键盘(第 2-8 位)之间切换。
|
|
153
|
+
- **自定义布局**:通过 `registerLayout`/`registerLayouts`
|
|
154
|
+
注册,内置布局不可被同名覆盖(会打印告警)。
|
|
155
|
+
- **主题系统**:渲染器支持通过 `theme` 传入主题名或
|
|
156
|
+
`ThemeConfig`,应用 CSS 变量(`--keyboard-*`)实现皮肤定制。
|