@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.
Files changed (339) hide show
  1. package/README.md +156 -37
  2. package/dist/index.js +1540 -1395
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.min.js +2981 -1
  5. package/dist/index.min.js.map +1 -0
  6. package/es/.dts-output-manifest.json +1 -0
  7. package/es/.dts.tsbuildinfo +1 -0
  8. package/es/icons.d.ts +0 -1
  9. package/es/icons.js +1 -1
  10. package/es/icons.js.map +1 -1
  11. package/es/index.d.ts +3 -4
  12. package/es/index.js +15 -15
  13. package/es/layouts/amount.d.ts +0 -1
  14. package/es/layouts/amount.js +1 -1
  15. package/es/layouts/amount.js.map +1 -1
  16. package/es/layouts/bankcard.d.ts +0 -1
  17. package/es/layouts/bankcard.js +1 -1
  18. package/es/layouts/bankcard.js.map +1 -1
  19. package/es/layouts/email.d.ts +0 -1
  20. package/es/layouts/email.js +1 -1
  21. package/es/layouts/email.js.map +1 -1
  22. package/es/layouts/idcard.d.ts +0 -1
  23. package/es/layouts/idcard.js +1 -1
  24. package/es/layouts/idcard.js.map +1 -1
  25. package/es/layouts/index.d.ts +11 -12
  26. package/es/layouts/index.js +23 -23
  27. package/es/layouts/index.js.map +1 -1
  28. package/es/layouts/license-plate.d.ts +0 -1
  29. package/es/layouts/license-plate.js +1 -1
  30. package/es/layouts/license-plate.js.map +1 -1
  31. package/es/layouts/number.d.ts +0 -1
  32. package/es/layouts/number.js +1 -1
  33. package/es/layouts/number.js.map +1 -1
  34. package/es/layouts/phone.d.ts +0 -1
  35. package/es/layouts/phone.js +1 -1
  36. package/es/layouts/phone.js.map +1 -1
  37. package/es/layouts/punct.d.ts +0 -1
  38. package/es/layouts/punct.js +1 -1
  39. package/es/layouts/punct.js.map +1 -1
  40. package/es/layouts/qwerty.d.ts +0 -1
  41. package/es/layouts/qwerty.js +1 -1
  42. package/es/layouts/qwerty.js.map +1 -1
  43. package/es/layouts/search.d.ts +0 -1
  44. package/es/layouts/search.js +1 -1
  45. package/es/layouts/search.js.map +1 -1
  46. package/es/layouts/symbol.d.ts +0 -1
  47. package/es/layouts/symbol.js +1 -1
  48. package/es/layouts/symbol.js.map +1 -1
  49. package/es/layouts/url.d.ts +0 -1
  50. package/es/layouts/url.js +1 -1
  51. package/es/layouts/url.js.map +1 -1
  52. package/es/layouts/verifycode.d.ts +0 -1
  53. package/es/layouts/verifycode.js +1 -1
  54. package/es/layouts/verifycode.js.map +1 -1
  55. package/es/managers/index.d.ts +1 -2
  56. package/es/managers/index.js +1 -1
  57. package/es/managers/keyboard-manager.d.ts +2 -1
  58. package/es/managers/keyboard-manager.js +79 -22
  59. package/es/managers/keyboard-manager.js.map +1 -1
  60. package/es/managers/keyboard-renderer.d.ts +3 -2
  61. package/es/managers/keyboard-renderer.js +81 -39
  62. package/es/managers/keyboard-renderer.js.map +1 -1
  63. package/es/managers/position-manager.d.ts +4 -3
  64. package/es/managers/position-manager.js +42 -21
  65. package/es/managers/position-manager.js.map +1 -1
  66. package/es/themes/index.d.ts +1 -2
  67. package/es/themes/index.js +2 -1
  68. package/es/themes/index.js.map +1 -1
  69. package/es/themes/presets.d.ts +0 -1
  70. package/es/themes/presets.js +1 -1
  71. package/es/themes/presets.js.map +1 -1
  72. package/es/themes/types.d.ts +1 -1
  73. package/es/themes/types.js +1 -1
  74. package/es/types/index.d.ts +0 -1
  75. package/es/types/index.js +1 -1
  76. package/es/types/keyboard.d.ts +0 -1
  77. package/es/types/keyboard.js +1 -1
  78. package/es/types/position.d.ts +0 -1
  79. package/es/types/position.js +1 -1
  80. package/es/utils/device.d.ts +0 -1
  81. package/es/utils/device.js +11 -7
  82. package/es/utils/device.js.map +1 -1
  83. package/es/utils/dom.d.ts +4 -1
  84. package/es/utils/dom.js +25 -7
  85. package/es/utils/dom.js.map +1 -1
  86. package/es/utils/event-emitter.d.ts +0 -1
  87. package/es/utils/event-emitter.js +2 -1
  88. package/es/utils/event-emitter.js.map +1 -1
  89. package/es/utils/formatters.d.ts +0 -1
  90. package/es/utils/formatters.js +4 -4
  91. package/es/utils/formatters.js.map +1 -1
  92. package/es/utils/index.d.ts +2 -3
  93. package/es/utils/index.js +5 -5
  94. package/es/utils/random.d.ts +4 -1
  95. package/es/utils/random.js +2 -2
  96. package/es/utils/random.js.map +1 -1
  97. package/esm/icons.js +1 -1
  98. package/esm/icons.js.map +1 -1
  99. package/esm/index.js +15 -15
  100. package/esm/layouts/amount.js +1 -1
  101. package/esm/layouts/amount.js.map +1 -1
  102. package/esm/layouts/bankcard.js +1 -1
  103. package/esm/layouts/bankcard.js.map +1 -1
  104. package/esm/layouts/email.js +1 -1
  105. package/esm/layouts/email.js.map +1 -1
  106. package/esm/layouts/idcard.js +1 -1
  107. package/esm/layouts/idcard.js.map +1 -1
  108. package/esm/layouts/index.js +23 -23
  109. package/esm/layouts/index.js.map +1 -1
  110. package/esm/layouts/license-plate.js +1 -1
  111. package/esm/layouts/license-plate.js.map +1 -1
  112. package/esm/layouts/number.js +1 -1
  113. package/esm/layouts/number.js.map +1 -1
  114. package/esm/layouts/phone.js +1 -1
  115. package/esm/layouts/phone.js.map +1 -1
  116. package/esm/layouts/punct.js +1 -1
  117. package/esm/layouts/punct.js.map +1 -1
  118. package/esm/layouts/qwerty.js +1 -1
  119. package/esm/layouts/qwerty.js.map +1 -1
  120. package/esm/layouts/search.js +1 -1
  121. package/esm/layouts/search.js.map +1 -1
  122. package/esm/layouts/symbol.js +1 -1
  123. package/esm/layouts/symbol.js.map +1 -1
  124. package/esm/layouts/url.js +1 -1
  125. package/esm/layouts/url.js.map +1 -1
  126. package/esm/layouts/verifycode.js +1 -1
  127. package/esm/layouts/verifycode.js.map +1 -1
  128. package/esm/managers/index.js +1 -1
  129. package/esm/managers/keyboard-manager.js +79 -22
  130. package/esm/managers/keyboard-manager.js.map +1 -1
  131. package/esm/managers/keyboard-renderer.js +81 -39
  132. package/esm/managers/keyboard-renderer.js.map +1 -1
  133. package/esm/managers/position-manager.js +42 -21
  134. package/esm/managers/position-manager.js.map +1 -1
  135. package/esm/themes/index.js +2 -1
  136. package/esm/themes/index.js.map +1 -1
  137. package/esm/themes/presets.js +1 -1
  138. package/esm/themes/presets.js.map +1 -1
  139. package/esm/utils/device.js +11 -7
  140. package/esm/utils/device.js.map +1 -1
  141. package/esm/utils/dom.js +25 -7
  142. package/esm/utils/dom.js.map +1 -1
  143. package/esm/utils/event-emitter.js +2 -1
  144. package/esm/utils/event-emitter.js.map +1 -1
  145. package/esm/utils/formatters.js +4 -4
  146. package/esm/utils/formatters.js.map +1 -1
  147. package/esm/utils/random.js +2 -2
  148. package/esm/utils/random.js.map +1 -1
  149. package/lib/icons.cjs +1 -1
  150. package/lib/icons.cjs.map +1 -1
  151. package/{esm/icons.d.ts → lib/icons.d.cts} +0 -1
  152. package/lib/index.cjs +14 -13
  153. package/{esm/index.d.ts → lib/index.d.cts} +3 -4
  154. package/lib/layouts/amount.cjs +1 -1
  155. package/lib/layouts/amount.cjs.map +1 -1
  156. package/{esm/layouts/amount.d.ts → lib/layouts/amount.d.cts} +0 -1
  157. package/lib/layouts/bankcard.cjs +1 -1
  158. package/lib/layouts/bankcard.cjs.map +1 -1
  159. package/{esm/layouts/bankcard.d.ts → lib/layouts/bankcard.d.cts} +0 -1
  160. package/lib/layouts/email.cjs +1 -1
  161. package/lib/layouts/email.cjs.map +1 -1
  162. package/lib/layouts/{email.d.ts → email.d.cts} +0 -1
  163. package/lib/layouts/idcard.cjs +1 -1
  164. package/lib/layouts/idcard.cjs.map +1 -1
  165. package/{esm/layouts/idcard.d.ts → lib/layouts/idcard.d.cts} +0 -1
  166. package/lib/layouts/index.cjs +23 -23
  167. package/lib/layouts/index.cjs.map +1 -1
  168. package/{esm/layouts/index.d.ts → lib/layouts/index.d.cts} +11 -12
  169. package/lib/layouts/license-plate.cjs +1 -1
  170. package/lib/layouts/license-plate.cjs.map +1 -1
  171. package/{esm/layouts/license-plate.d.ts → lib/layouts/license-plate.d.cts} +0 -1
  172. package/lib/layouts/number.cjs +1 -1
  173. package/lib/layouts/number.cjs.map +1 -1
  174. package/{esm/layouts/number.d.ts → lib/layouts/number.d.cts} +0 -1
  175. package/lib/layouts/phone.cjs +1 -1
  176. package/lib/layouts/phone.cjs.map +1 -1
  177. package/lib/layouts/{phone.d.ts → phone.d.cts} +0 -1
  178. package/lib/layouts/punct.cjs +1 -1
  179. package/lib/layouts/punct.cjs.map +1 -1
  180. package/lib/layouts/{punct.d.ts → punct.d.cts} +0 -1
  181. package/lib/layouts/qwerty.cjs +1 -1
  182. package/lib/layouts/qwerty.cjs.map +1 -1
  183. package/{esm/layouts/qwerty.d.ts → lib/layouts/qwerty.d.cts} +0 -1
  184. package/lib/layouts/search.cjs +1 -1
  185. package/lib/layouts/search.cjs.map +1 -1
  186. package/{esm/layouts/search.d.ts → lib/layouts/search.d.cts} +0 -1
  187. package/lib/layouts/symbol.cjs +1 -1
  188. package/lib/layouts/symbol.cjs.map +1 -1
  189. package/{esm/layouts/symbol.d.ts → lib/layouts/symbol.d.cts} +0 -1
  190. package/lib/layouts/url.cjs +1 -1
  191. package/lib/layouts/url.cjs.map +1 -1
  192. package/{esm/layouts/url.d.ts → lib/layouts/url.d.cts} +0 -1
  193. package/lib/layouts/verifycode.cjs +1 -1
  194. package/lib/layouts/verifycode.cjs.map +1 -1
  195. package/lib/layouts/{verifycode.d.ts → verifycode.d.cts} +0 -1
  196. package/lib/managers/index.cjs +1 -1
  197. package/lib/managers/{index.d.ts → index.d.cts} +1 -2
  198. package/lib/managers/keyboard-manager.cjs +79 -22
  199. package/lib/managers/keyboard-manager.cjs.map +1 -1
  200. package/lib/managers/{keyboard-manager.d.ts → keyboard-manager.d.cts} +2 -1
  201. package/lib/managers/keyboard-renderer.cjs +80 -38
  202. package/lib/managers/keyboard-renderer.cjs.map +1 -1
  203. package/lib/managers/{keyboard-renderer.d.ts → keyboard-renderer.d.cts} +3 -2
  204. package/lib/managers/position-manager.cjs +42 -21
  205. package/lib/managers/position-manager.cjs.map +1 -1
  206. package/lib/managers/{position-manager.d.ts → position-manager.d.cts} +4 -3
  207. package/lib/themes/index.cjs +2 -1
  208. package/lib/themes/index.cjs.map +1 -1
  209. package/lib/themes/{index.d.ts → index.d.cts} +1 -2
  210. package/lib/themes/presets.cjs +1 -1
  211. package/lib/themes/presets.cjs.map +1 -1
  212. package/lib/themes/{presets.d.ts → presets.d.cts} +0 -1
  213. package/lib/themes/types.cjs +1 -1
  214. package/{esm/themes/types.d.ts → lib/themes/types.d.cts} +1 -1
  215. package/lib/types/index.cjs +1 -1
  216. package/{esm/types/index.d.ts → lib/types/index.d.cts} +0 -1
  217. package/lib/types/keyboard.cjs +1 -1
  218. package/{esm/types/keyboard.d.ts → lib/types/keyboard.d.cts} +0 -1
  219. package/lib/types/position.cjs +1 -1
  220. package/lib/types/{position.d.ts → position.d.cts} +0 -1
  221. package/lib/utils/device.cjs +11 -7
  222. package/lib/utils/device.cjs.map +1 -1
  223. package/{esm/utils/device.d.ts → lib/utils/device.d.cts} +0 -1
  224. package/lib/utils/dom.cjs +25 -6
  225. package/lib/utils/dom.cjs.map +1 -1
  226. package/{esm/utils/dom.d.ts → lib/utils/dom.d.cts} +4 -1
  227. package/lib/utils/event-emitter.cjs +2 -1
  228. package/lib/utils/event-emitter.cjs.map +1 -1
  229. package/{esm/utils/event-emitter.d.ts → lib/utils/event-emitter.d.cts} +0 -1
  230. package/lib/utils/formatters.cjs +4 -4
  231. package/lib/utils/formatters.cjs.map +1 -1
  232. package/{esm/utils/formatters.d.ts → lib/utils/formatters.d.cts} +0 -1
  233. package/lib/utils/index.cjs +4 -3
  234. package/{esm/utils/index.d.ts → lib/utils/index.d.cts} +2 -3
  235. package/lib/utils/random.cjs +2 -2
  236. package/lib/utils/random.cjs.map +1 -1
  237. package/{esm/utils/random.d.ts → lib/utils/random.d.cts} +4 -1
  238. package/package.json +28 -14
  239. package/es/icons.d.ts.map +0 -1
  240. package/es/index.d.ts.map +0 -1
  241. package/es/layouts/amount.d.ts.map +0 -1
  242. package/es/layouts/bankcard.d.ts.map +0 -1
  243. package/es/layouts/email.d.ts.map +0 -1
  244. package/es/layouts/idcard.d.ts.map +0 -1
  245. package/es/layouts/index.d.ts.map +0 -1
  246. package/es/layouts/license-plate.d.ts.map +0 -1
  247. package/es/layouts/number.d.ts.map +0 -1
  248. package/es/layouts/phone.d.ts.map +0 -1
  249. package/es/layouts/punct.d.ts.map +0 -1
  250. package/es/layouts/qwerty.d.ts.map +0 -1
  251. package/es/layouts/search.d.ts.map +0 -1
  252. package/es/layouts/symbol.d.ts.map +0 -1
  253. package/es/layouts/url.d.ts.map +0 -1
  254. package/es/layouts/verifycode.d.ts.map +0 -1
  255. package/es/managers/index.d.ts.map +0 -1
  256. package/es/managers/keyboard-manager.d.ts.map +0 -1
  257. package/es/managers/keyboard-renderer.d.ts.map +0 -1
  258. package/es/managers/position-manager.d.ts.map +0 -1
  259. package/es/themes/index.d.ts.map +0 -1
  260. package/es/themes/presets.d.ts.map +0 -1
  261. package/es/themes/types.d.ts.map +0 -1
  262. package/es/types/index.d.ts.map +0 -1
  263. package/es/types/keyboard.d.ts.map +0 -1
  264. package/es/types/position.d.ts.map +0 -1
  265. package/es/utils/device.d.ts.map +0 -1
  266. package/es/utils/dom.d.ts.map +0 -1
  267. package/es/utils/event-emitter.d.ts.map +0 -1
  268. package/es/utils/formatters.d.ts.map +0 -1
  269. package/es/utils/index.d.ts.map +0 -1
  270. package/es/utils/random.d.ts.map +0 -1
  271. package/esm/icons.d.ts.map +0 -1
  272. package/esm/index.d.ts.map +0 -1
  273. package/esm/layouts/amount.d.ts.map +0 -1
  274. package/esm/layouts/bankcard.d.ts.map +0 -1
  275. package/esm/layouts/email.d.ts +0 -11
  276. package/esm/layouts/email.d.ts.map +0 -1
  277. package/esm/layouts/idcard.d.ts.map +0 -1
  278. package/esm/layouts/index.d.ts.map +0 -1
  279. package/esm/layouts/license-plate.d.ts.map +0 -1
  280. package/esm/layouts/number.d.ts.map +0 -1
  281. package/esm/layouts/phone.d.ts +0 -15
  282. package/esm/layouts/phone.d.ts.map +0 -1
  283. package/esm/layouts/punct.d.ts +0 -7
  284. package/esm/layouts/punct.d.ts.map +0 -1
  285. package/esm/layouts/qwerty.d.ts.map +0 -1
  286. package/esm/layouts/search.d.ts.map +0 -1
  287. package/esm/layouts/symbol.d.ts.map +0 -1
  288. package/esm/layouts/url.d.ts.map +0 -1
  289. package/esm/layouts/verifycode.d.ts +0 -15
  290. package/esm/layouts/verifycode.d.ts.map +0 -1
  291. package/esm/managers/index.d.ts +0 -8
  292. package/esm/managers/index.d.ts.map +0 -1
  293. package/esm/managers/keyboard-manager.d.ts +0 -130
  294. package/esm/managers/keyboard-manager.d.ts.map +0 -1
  295. package/esm/managers/keyboard-renderer.d.ts +0 -115
  296. package/esm/managers/keyboard-renderer.d.ts.map +0 -1
  297. package/esm/managers/position-manager.d.ts +0 -72
  298. package/esm/managers/position-manager.d.ts.map +0 -1
  299. package/esm/themes/index.d.ts +0 -70
  300. package/esm/themes/index.d.ts.map +0 -1
  301. package/esm/themes/presets.d.ts +0 -39
  302. package/esm/themes/presets.d.ts.map +0 -1
  303. package/esm/themes/types.d.ts.map +0 -1
  304. package/esm/themes/types.js +0 -10
  305. package/esm/types/index.d.ts.map +0 -1
  306. package/esm/types/index.js +0 -10
  307. package/esm/types/keyboard.d.ts.map +0 -1
  308. package/esm/types/keyboard.js +0 -10
  309. package/esm/types/position.d.ts +0 -139
  310. package/esm/types/position.d.ts.map +0 -1
  311. package/esm/types/position.js +0 -10
  312. package/esm/utils/device.d.ts.map +0 -1
  313. package/esm/utils/dom.d.ts.map +0 -1
  314. package/esm/utils/event-emitter.d.ts.map +0 -1
  315. package/esm/utils/formatters.d.ts.map +0 -1
  316. package/esm/utils/index.d.ts.map +0 -1
  317. package/esm/utils/index.js +0 -16
  318. package/esm/utils/random.d.ts.map +0 -1
  319. package/lib/icons.d.ts +0 -58
  320. package/lib/index.d.ts +0 -12
  321. package/lib/layouts/amount.d.ts +0 -14
  322. package/lib/layouts/bankcard.d.ts +0 -15
  323. package/lib/layouts/idcard.d.ts +0 -16
  324. package/lib/layouts/index.d.ts +0 -54
  325. package/lib/layouts/license-plate.d.ts +0 -35
  326. package/lib/layouts/number.d.ts +0 -14
  327. package/lib/layouts/qwerty.d.ts +0 -10
  328. package/lib/layouts/search.d.ts +0 -7
  329. package/lib/layouts/symbol.d.ts +0 -14
  330. package/lib/layouts/url.d.ts +0 -7
  331. package/lib/themes/types.d.ts +0 -118
  332. package/lib/types/index.d.ts +0 -7
  333. package/lib/types/keyboard.d.ts +0 -253
  334. package/lib/utils/device.d.ts +0 -45
  335. package/lib/utils/dom.d.ts +0 -69
  336. package/lib/utils/event-emitter.d.ts +0 -52
  337. package/lib/utils/formatters.d.ts +0 -51
  338. package/lib/utils/index.d.ts +0 -10
  339. package/lib/utils/random.d.ts +0 -71
package/README.md CHANGED
@@ -1,37 +1,156 @@
1
- # @composy/keyboard-core
2
-
3
- 高性能虚拟键盘组件库,支持 Vue 3,提供字母、数字、车牌号等多种键盘布局
4
-
5
- ## 功能特性
6
-
7
- - 🚀 高性能核心引擎
8
- - 🎨 TypeScript 类型完整
9
- - 📦 支持 ESM / CJS 双格式输出
10
-
11
- ## 安装
12
-
13
- ```bash
14
- npm install @composy/keyboard-core
15
- ```
16
-
17
- ## 快速开始
18
-
19
- ```typescript
20
- import { /* 需要的导出 */ } from '@composy/keyboard-core'
21
-
22
- // 根据实际 API 使用
23
- ```
24
-
25
- ## 目录结构
26
-
27
- ```
28
- packages/core/
29
- ├── src/ # 源码
30
- ├── package.json
31
- ├── tsconfig.json # ESM 构建配置
32
- └── tsconfig.cjs.json # CJS 构建配置
33
- ```
34
-
35
- ## License
36
-
37
- MIT
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-*`)实现皮肤定制。