@composy/keyboard-vue 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 (172) hide show
  1. package/README.md +48 -24
  2. package/dist/index.css +552 -560
  3. package/dist/index.js +228 -192
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.css +1 -1
  6. package/dist/index.min.js +954 -1
  7. package/dist/index.min.js.map +1 -0
  8. package/es/.dts-output-manifest.json +1 -0
  9. package/es/.dts.tsbuildinfo +1 -0
  10. package/es/components/KeyboardKey.js +1 -1
  11. package/es/components/KeyboardKey.js.map +1 -1
  12. package/es/components/KeyboardKey.vue_vue_type_script_setup_true_lang.js +16 -7
  13. package/es/components/KeyboardKey.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/es/components/KeyboardPopup.js +1 -1
  15. package/es/components/KeyboardPopup.js.map +1 -1
  16. package/es/components/KeyboardPopup.vue_vue_type_script_setup_true_lang.js +8 -5
  17. package/es/components/KeyboardPopup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/es/components/LicensePlateKeyboard.js +1 -1
  19. package/es/components/LicensePlateKeyboard.js.map +1 -1
  20. package/es/components/LicensePlateKeyboard.vue_vue_type_script_setup_true_lang.js +2 -2
  21. package/es/components/LicensePlateKeyboard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/es/components/VirtualKeyboard.js +1 -1
  23. package/es/components/VirtualKeyboard.js.map +1 -1
  24. package/es/components/VirtualKeyboard.vue_vue_type_script_setup_true_lang.js +4 -4
  25. package/es/components/VirtualKeyboard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/es/components/index.d.ts +1 -2
  27. package/es/components/index.d.ts.map +1 -1
  28. package/es/components/index.js +1 -1
  29. package/es/composables/index.d.ts +0 -1
  30. package/es/composables/index.js +1 -1
  31. package/es/composables/useKeyboard.d.ts +1 -2
  32. package/es/composables/useKeyboard.d.ts.map +1 -1
  33. package/es/composables/useKeyboard.js +8 -15
  34. package/es/composables/useKeyboard.js.map +1 -1
  35. package/es/composables/useKeyboardPopup.d.ts +2 -51
  36. package/es/composables/useKeyboardPopup.d.ts.map +1 -1
  37. package/es/composables/useKeyboardPopup.js +66 -49
  38. package/es/composables/useKeyboardPopup.js.map +1 -1
  39. package/es/directives/index.d.ts +0 -1
  40. package/es/directives/index.js +1 -1
  41. package/es/directives/v-keyboard.d.ts +0 -1
  42. package/es/directives/v-keyboard.d.ts.map +1 -1
  43. package/es/directives/v-keyboard.js +10 -11
  44. package/es/directives/v-keyboard.js.map +1 -1
  45. package/es/index.d.ts +3 -4
  46. package/es/index.d.ts.map +1 -1
  47. package/es/index.js +2 -5
  48. package/es/index.js.map +1 -1
  49. package/es/plugins/engine-plugin.d.ts +0 -1
  50. package/es/plugins/engine-plugin.d.ts.map +1 -1
  51. package/es/plugins/engine-plugin.js +19 -4
  52. package/es/plugins/engine-plugin.js.map +1 -1
  53. package/es/plugins/index.d.ts +0 -1
  54. package/es/plugins/index.js +1 -1
  55. package/es/style/css.js +1 -1
  56. package/es/style/index.css +2 -0
  57. package/es/style/index.js +1 -1
  58. package/es/styles/index.css +391 -0
  59. package/es/styles/keyboard.css +252 -0
  60. package/es/styles/themes.css +137 -0
  61. package/esm/components/KeyboardKey.js +17 -0
  62. package/esm/components/KeyboardKey.js.map +1 -0
  63. package/esm/components/KeyboardKey.vue_vue_type_script_setup_true_lang.js +140 -0
  64. package/esm/components/KeyboardKey.vue_vue_type_script_setup_true_lang.js.map +1 -0
  65. package/esm/components/KeyboardPopup.js +17 -0
  66. package/esm/components/KeyboardPopup.js.map +1 -0
  67. package/esm/components/KeyboardPopup.vue_vue_type_script_setup_true_lang.js +167 -0
  68. package/esm/components/KeyboardPopup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  69. package/esm/components/LicensePlateKeyboard.js +17 -0
  70. package/esm/components/LicensePlateKeyboard.js.map +1 -0
  71. package/esm/components/LicensePlateKeyboard.vue_vue_type_script_setup_true_lang.js +97 -0
  72. package/esm/components/LicensePlateKeyboard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  73. package/esm/components/VirtualKeyboard.js +17 -0
  74. package/esm/components/VirtualKeyboard.js.map +1 -0
  75. package/esm/components/VirtualKeyboard.vue_vue_type_script_setup_true_lang.js +127 -0
  76. package/esm/components/VirtualKeyboard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  77. package/{lib → esm}/components/index.d.ts +1 -1
  78. package/esm/components/index.d.ts.map +1 -0
  79. package/esm/components/index.js +15 -0
  80. package/esm/composables/index.d.ts.map +1 -0
  81. package/esm/composables/index.js +13 -0
  82. package/{lib → esm}/composables/useKeyboard.d.ts +1 -1
  83. package/esm/composables/useKeyboard.d.ts.map +1 -0
  84. package/esm/composables/useKeyboard.js +68 -0
  85. package/esm/composables/useKeyboard.js.map +1 -0
  86. package/esm/composables/useKeyboardPopup.d.ts +25 -0
  87. package/esm/composables/useKeyboardPopup.d.ts.map +1 -0
  88. package/esm/composables/useKeyboardPopup.js +136 -0
  89. package/esm/composables/useKeyboardPopup.js.map +1 -0
  90. package/esm/directives/index.d.ts.map +1 -0
  91. package/esm/directives/index.js +12 -0
  92. package/esm/directives/v-keyboard.d.ts.map +1 -0
  93. package/esm/directives/v-keyboard.js +64 -0
  94. package/esm/directives/v-keyboard.js.map +1 -0
  95. package/esm/index.d.ts +42 -0
  96. package/esm/index.d.ts.map +1 -0
  97. package/esm/index.js +34 -0
  98. package/esm/index.js.map +1 -0
  99. package/esm/plugins/engine-plugin.d.ts.map +1 -0
  100. package/esm/plugins/engine-plugin.js +53 -0
  101. package/esm/plugins/engine-plugin.js.map +1 -0
  102. package/esm/plugins/index.d.ts.map +1 -0
  103. package/esm/plugins/index.js +12 -0
  104. package/esm/style/css.js +1 -0
  105. package/esm/style/index.js +1 -0
  106. package/{es → esm}/style/index.less +1 -1
  107. package/esm/styles/index.less +5 -0
  108. package/esm/styles/keyboard.less +286 -0
  109. package/esm/styles/themes.less +164 -0
  110. package/lib/components/KeyboardKey.cjs +1 -1
  111. package/lib/components/KeyboardKey.cjs.map +1 -1
  112. package/lib/components/KeyboardKey.vue_vue_type_script_setup_true_lang.cjs +16 -7
  113. package/lib/components/KeyboardKey.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  114. package/lib/components/KeyboardPopup.cjs +1 -1
  115. package/lib/components/KeyboardPopup.cjs.map +1 -1
  116. package/lib/components/KeyboardPopup.vue_vue_type_script_setup_true_lang.cjs +8 -5
  117. package/lib/components/KeyboardPopup.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  118. package/lib/components/LicensePlateKeyboard.cjs +1 -1
  119. package/lib/components/LicensePlateKeyboard.cjs.map +1 -1
  120. package/lib/components/LicensePlateKeyboard.vue_vue_type_script_setup_true_lang.cjs +2 -2
  121. package/lib/components/LicensePlateKeyboard.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  122. package/lib/components/VirtualKeyboard.cjs +1 -1
  123. package/lib/components/VirtualKeyboard.cjs.map +1 -1
  124. package/lib/components/VirtualKeyboard.vue_vue_type_script_setup_true_lang.cjs +4 -4
  125. package/lib/components/VirtualKeyboard.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  126. package/lib/components/index.cjs +1 -1
  127. package/lib/components/index.d.cts +8 -0
  128. package/lib/components/index.d.cts.map +1 -0
  129. package/lib/composables/index.cjs +1 -1
  130. package/lib/composables/index.d.cts +6 -0
  131. package/lib/composables/index.d.cts.map +1 -0
  132. package/lib/composables/useKeyboard.cjs +8 -15
  133. package/lib/composables/useKeyboard.cjs.map +1 -1
  134. package/lib/composables/useKeyboard.d.cts +112 -0
  135. package/lib/composables/useKeyboard.d.cts.map +1 -0
  136. package/lib/composables/useKeyboardPopup.cjs +66 -49
  137. package/lib/composables/useKeyboardPopup.cjs.map +1 -1
  138. package/lib/composables/useKeyboardPopup.d.cts +24 -0
  139. package/lib/composables/useKeyboardPopup.d.cts.map +1 -0
  140. package/lib/directives/index.cjs +1 -1
  141. package/lib/directives/index.d.cts +5 -0
  142. package/lib/directives/index.d.cts.map +1 -0
  143. package/lib/directives/v-keyboard.cjs +10 -11
  144. package/lib/directives/v-keyboard.cjs.map +1 -1
  145. package/lib/directives/v-keyboard.d.cts +35 -0
  146. package/lib/directives/v-keyboard.d.cts.map +1 -0
  147. package/lib/index.cjs +2 -2
  148. package/lib/index.cjs.map +1 -1
  149. package/lib/index.d.cts +41 -0
  150. package/lib/index.d.cts.map +1 -0
  151. package/lib/plugins/engine-plugin.cjs +19 -3
  152. package/lib/plugins/engine-plugin.cjs.map +1 -1
  153. package/lib/plugins/engine-plugin.d.cts +36 -0
  154. package/lib/plugins/engine-plugin.d.cts.map +1 -0
  155. package/lib/plugins/index.cjs +1 -1
  156. package/lib/plugins/index.d.cts +5 -0
  157. package/lib/plugins/index.d.cts.map +1 -0
  158. package/lib/style/index.css +1 -1
  159. package/lib/styles/index.css +357 -195
  160. package/lib/styles/keyboard.css +92 -186
  161. package/lib/styles/themes.css +102 -178
  162. package/package.json +43 -34
  163. package/es/styles/index.less +0 -267
  164. package/es/styles/keyboard.less +0 -399
  165. package/es/styles/themes.less +0 -233
  166. package/lib/composables/useKeyboardPopup.d.ts +0 -73
  167. package/lib/index.d.ts +0 -42
  168. /package/{lib → esm}/composables/index.d.ts +0 -0
  169. /package/{lib → esm}/directives/index.d.ts +0 -0
  170. /package/{lib → esm}/directives/v-keyboard.d.ts +0 -0
  171. /package/{lib → esm}/plugins/engine-plugin.d.ts +0 -0
  172. /package/{lib → esm}/plugins/index.d.ts +0 -0
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/keyboard-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:14 *
5
+ * Build time: 2024-10-12 17:44:15 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
@@ -2,8 +2,8 @@
2
2
  * 键盘管理 Composable
3
3
  * @module composables/useKeyboard
4
4
  */
5
+ import type { KeyboardConfig, KeyboardEventMap, KeyboardOptions, KeyboardState, KeyboardType, KeyDefinition } from '@composy/keyboard-core';
5
6
  import type { Ref } from 'vue';
6
- import { type KeyboardConfig, type KeyboardEventMap, type KeyboardOptions, type KeyboardState, type KeyboardType, type KeyDefinition } from '@composy/keyboard-core';
7
7
  /**
8
8
  * useKeyboard 选项
9
9
  */
@@ -110,4 +110,3 @@ export interface UseKeyboardReturn {
110
110
  * 键盘管理 Composable
111
111
  */
112
112
  export declare function useKeyboard(options?: UseKeyboardOptions): UseKeyboardReturn;
113
- //# sourceMappingURL=useKeyboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboard.d.ts","sourceRoot":"","sources":["../../src/composables/useKeyboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAA;AAE/B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAErB;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;IAEvB;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAEzB;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAElB;;OAEG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAE3B;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAElC;;OAEG;IACH,KAAK,EAAE,aAAa,CAAA;IAEpB;;OAEG;IACH,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAE9D;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAA;IAEhB;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAEhE;;OAEG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,KAAK,IAAI,CAAA;IAEjD;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;IAEvC;;OAEG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAA;IAE3C;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAEjC;;OAEG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAEnC;;OAEG;IACH,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAE1C;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAElE;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAA;IAEvB;;OAEG;IACH,EAAE,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACnC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,KACzC,MAAM,IAAI,CAAA;IAEf;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,KACzC,MAAM,IAAI,CAAA;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CA8E/E"}
1
+ {"version":3,"file":"useKeyboard.d.ts","sourceRoot":"","sources":["../../src/composables/useKeyboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,EACd,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAI9B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAErB;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;IAEvB;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAEzB;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAElB;;OAEG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAE3B;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAElC;;OAEG;IACH,KAAK,EAAE,aAAa,CAAA;IAEpB;;OAEG;IACH,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAE9D;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAA;IAEhB;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAEhE;;OAEG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,KAAK,IAAI,CAAA;IAEjD;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;IAEvC;;OAEG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAA;IAE3C;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAEjC;;OAEG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAEnC;;OAEG;IACH,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAE1C;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAElE;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAA;IAEvB;;OAEG;IACH,EAAE,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACnC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,KACzC,MAAM,IAAI,CAAA;IAEf;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,KACzC,MAAM,IAAI,CAAA;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA4EnB"}
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/keyboard-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:14 *
5
+ * Build time: 2024-10-12 17:44:15 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
@@ -13,21 +13,14 @@ import { createKeyboardManager } from "@composy/keyboard-core";
13
13
  function useKeyboard(options = {}) {
14
14
  const { immediate = false, ...keyboardOptions } = options;
15
15
  const manager = createKeyboardManager(keyboardOptions);
16
- const visible = ref(false);
17
- const type = ref(keyboardOptions.type ?? "qwerty");
18
- const isUpperCase = ref(keyboardOptions.defaultUpperCase ?? false);
19
- const value = ref(keyboardOptions.value ?? "");
20
- const cursorPosition = ref(keyboardOptions.value?.length ?? 0);
16
+ const initialState = manager.getState();
17
+ const visible = ref(initialState.visible);
18
+ const type = ref(initialState.type);
19
+ const isUpperCase = ref(initialState.isUpperCase);
20
+ const value = ref(initialState.value);
21
+ const cursorPosition = ref(initialState.cursorPosition);
21
22
  const layout = shallowRef(manager.getLayout());
22
- const state = reactive({
23
- visible: false,
24
- type: keyboardOptions.type ?? "qwerty",
25
- isUpperCase: keyboardOptions.defaultUpperCase ?? false,
26
- value: keyboardOptions.value ?? "",
27
- cursorPosition: keyboardOptions.value?.length ?? 0,
28
- maxLength: keyboardOptions.maxLength,
29
- inputElement: null
30
- });
23
+ const state = reactive({ ...initialState });
31
24
  const syncState = (newState) => {
32
25
  visible.value = newState.visible;
33
26
  type.value = newState.type;
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboard.js","names":[],"sources":["../../src/composables/useKeyboard.ts"],"sourcesContent":["/**\n * 键盘管理 Composable\n * @module composables/useKeyboard\n */\n\nimport { computed, onBeforeUnmount, reactive, ref, shallowRef, watch } from 'vue'\nimport type { Ref } from 'vue'\nimport {\n createKeyboardManager,\n type KeyboardConfig,\n type KeyboardEventMap,\n type KeyboardOptions,\n type KeyboardState,\n type KeyboardType,\n type KeyDefinition,\n} from '@composy/keyboard-core'\n\n/**\n * useKeyboard 选项\n */\nexport interface UseKeyboardOptions extends KeyboardOptions {\n /**\n * 是否立即显示\n */\n immediate?: boolean\n}\n\n/**\n * useKeyboard 返回值\n */\nexport interface UseKeyboardReturn {\n /**\n * 键盘是否可见\n */\n visible: Ref<boolean>\n\n /**\n * 当前键盘类型\n */\n type: Ref<KeyboardType>\n\n /**\n * 是否大写状态\n */\n isUpperCase: Ref<boolean>\n\n /**\n * 当前输入值\n */\n value: Ref<string>\n\n /**\n * 光标位置\n */\n cursorPosition: Ref<number>\n\n /**\n * 当前布局配置\n */\n layout: Ref<KeyboardConfig | null>\n\n /**\n * 完整状态\n */\n state: KeyboardState\n\n /**\n * 显示键盘\n */\n show: (input?: HTMLInputElement | HTMLTextAreaElement) => void\n\n /**\n * 隐藏键盘\n */\n hide: () => void\n\n /**\n * 切换显示/隐藏\n */\n toggle: (input?: HTMLInputElement | HTMLTextAreaElement) => void\n\n /**\n * 切换键盘类型\n */\n switchType: (type: KeyboardType | string) => void\n\n /**\n * 切换大小写\n */\n toggleShift: () => void\n\n /**\n * 处理按键\n */\n handleKey: (key: KeyDefinition) => void\n\n /**\n * 获取按键显示文本\n */\n getKeyLabel: (key: KeyDefinition) => string\n\n /**\n * 设置值\n */\n setValue: (value: string) => void\n\n /**\n * 追加值(在光标位置插入文本)\n */\n appendValue: (text: string) => void\n\n /**\n * 设置最大长度\n */\n setMaxLength: (maxLength?: number) => void\n\n /**\n * 绑定输入框\n */\n bindInput: (input: HTMLInputElement | HTMLTextAreaElement) => void\n\n /**\n * 解绑输入框\n */\n unbindInput: () => void\n\n /**\n * 事件监听\n */\n on: <K extends keyof KeyboardEventMap>(\n event: K,\n handler: (data: KeyboardEventMap[K]) => void\n ) => () => void\n\n /**\n * 单次事件监听\n */\n once: <K extends keyof KeyboardEventMap>(\n event: K,\n handler: (data: KeyboardEventMap[K]) => void\n ) => () => void\n\n /**\n * 销毁\n */\n destroy: () => void\n}\n\n/**\n * 键盘管理 Composable\n */\nexport function useKeyboard(options: UseKeyboardOptions = {}): UseKeyboardReturn {\n const { immediate = false, ...keyboardOptions } = options\n\n // 创建键盘管理器\n const manager = createKeyboardManager(keyboardOptions)\n\n // 响应式状态\n const visible = ref(false)\n const type = ref<KeyboardType>(keyboardOptions.type ?? 'qwerty')\n const isUpperCase = ref(keyboardOptions.defaultUpperCase ?? false)\n const value = ref(keyboardOptions.value ?? '')\n const cursorPosition = ref(keyboardOptions.value?.length ?? 0)\n const layout = shallowRef<KeyboardConfig | null>(manager.getLayout())\n\n // 完整状态(响应式对象)\n const state = reactive<KeyboardState>({\n visible: false,\n type: keyboardOptions.type ?? 'qwerty',\n isUpperCase: keyboardOptions.defaultUpperCase ?? false,\n value: keyboardOptions.value ?? '',\n cursorPosition: keyboardOptions.value?.length ?? 0,\n maxLength: keyboardOptions.maxLength,\n inputElement: null,\n })\n\n // 同步管理器状态到 Vue 响应式状态\n const syncState = (newState: KeyboardState) => {\n visible.value = newState.visible\n type.value = newState.type\n isUpperCase.value = newState.isUpperCase\n value.value = newState.value\n cursorPosition.value = newState.cursorPosition\n\n Object.assign(state, newState)\n }\n\n // 监听状态变化\n manager.on('stateChange', syncState)\n\n // 监听键盘类型切换,更新布局\n manager.on('switch', () => {\n layout.value = manager.getLayout()\n })\n\n // 立即显示\n if (immediate) {\n manager.show()\n }\n\n // 组件卸载时销毁\n onBeforeUnmount(() => {\n manager.destroy()\n })\n\n return {\n visible,\n type,\n isUpperCase,\n value,\n cursorPosition,\n layout,\n state,\n show: (input?: HTMLInputElement | HTMLTextAreaElement) => manager.show(input),\n hide: () => manager.hide(),\n toggle: (input?: HTMLInputElement | HTMLTextAreaElement) => manager.toggle(input),\n switchType: (t: KeyboardType | string) => manager.switchType(t),\n toggleShift: () => manager.toggleShift(),\n handleKey: (key: KeyDefinition) => manager.handleKey(key),\n getKeyLabel: (key: KeyDefinition) => manager.getKeyLabel(key),\n setValue: (v: string) => manager.setValue(v),\n appendValue: (text: string) => manager.appendValue(text),\n setMaxLength: (maxLength?: number) => manager.setMaxLength(maxLength),\n bindInput: (input: HTMLInputElement | HTMLTextAreaElement) => manager.bindInput(input),\n unbindInput: () => manager.unbindInput(),\n on: (event, handler) => manager.on(event, handler),\n once: (event, handler) => manager.once(event, handler),\n destroy: () => manager.destroy(),\n }\n}\n"],"mappings":";;;;;;;;;;;;AAuJO,SAAS,YAAY,UAA8B,CAAC,GAAsB;CAC/E,MAAM,EAAE,YAAY,OAAO,GAAG,oBAAoB;CAGlD,MAAM,UAAU,sBAAsB,eAAe;CAGrD,MAAM,UAAU,IAAI,KAAK;CACzB,MAAM,OAAO,IAAkB,gBAAgB,QAAQ,QAAQ;CAC/D,MAAM,cAAc,IAAI,gBAAgB,oBAAoB,KAAK;CACjE,MAAM,QAAQ,IAAI,gBAAgB,SAAS,EAAE;CAC7C,MAAM,iBAAiB,IAAI,gBAAgB,OAAO,UAAU,CAAC;CAC7D,MAAM,SAAS,WAAkC,QAAQ,UAAU,CAAC;CAGpE,MAAM,QAAQ,SAAwB;EACpC,SAAS;EACT,MAAM,gBAAgB,QAAQ;EAC9B,aAAa,gBAAgB,oBAAoB;EACjD,OAAO,gBAAgB,SAAS;EAChC,gBAAgB,gBAAgB,OAAO,UAAU;EACjD,WAAW,gBAAgB;EAC3B,cAAc;CAChB,CAAC;CAGD,MAAM,aAAa,aAA4B;EAC7C,QAAQ,QAAQ,SAAS;EACzB,KAAK,QAAQ,SAAS;EACtB,YAAY,QAAQ,SAAS;EAC7B,MAAM,QAAQ,SAAS;EACvB,eAAe,QAAQ,SAAS;EAEhC,OAAO,OAAO,OAAO,QAAQ;CAC/B;CAGA,QAAQ,GAAG,eAAe,SAAS;CAGnC,QAAQ,GAAG,gBAAgB;EACzB,OAAO,QAAQ,QAAQ,UAAU;CACnC,CAAC;CAGD,IAAI,WACF,QAAQ,KAAK;CAIf,sBAAsB;EACpB,QAAQ,QAAQ;CAClB,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,UAAmD,QAAQ,KAAK,KAAK;EAC5E,YAAY,QAAQ,KAAK;EACzB,SAAS,UAAmD,QAAQ,OAAO,KAAK;EAChF,aAAa,MAA6B,QAAQ,WAAW,CAAC;EAC9D,mBAAmB,QAAQ,YAAY;EACvC,YAAY,QAAuB,QAAQ,UAAU,GAAG;EACxD,cAAc,QAAuB,QAAQ,YAAY,GAAG;EAC5D,WAAW,MAAc,QAAQ,SAAS,CAAC;EAC3C,cAAc,SAAiB,QAAQ,YAAY,IAAI;EACvD,eAAe,cAAuB,QAAQ,aAAa,SAAS;EACpE,YAAY,UAAkD,QAAQ,UAAU,KAAK;EACrF,mBAAmB,QAAQ,YAAY;EACvC,KAAK,OAAO,YAAY,QAAQ,GAAG,OAAO,OAAO;EACjD,OAAO,OAAO,YAAY,QAAQ,KAAK,OAAO,OAAO;EACrD,eAAe,QAAQ,QAAQ;CACjC;AACF"}
1
+ {"version":3,"file":"useKeyboard.js","names":[],"sources":["../../src/composables/useKeyboard.ts"],"sourcesContent":["/**\r\n * 键盘管理 Composable\r\n * @module composables/useKeyboard\r\n */\r\n\r\nimport type {\r\n KeyboardConfig,\r\n KeyboardEventMap,\r\n KeyboardOptions,\r\n KeyboardState,\r\n KeyboardType,\r\n KeyDefinition,\r\n} from '@composy/keyboard-core'\r\nimport type { Ref } from 'vue'\r\nimport { createKeyboardManager } from '@composy/keyboard-core'\r\nimport { onBeforeUnmount, reactive, ref, shallowRef } from 'vue'\r\n\r\n/**\r\n * useKeyboard 选项\r\n */\r\nexport interface UseKeyboardOptions extends KeyboardOptions {\r\n /**\r\n * 是否立即显示\r\n */\r\n immediate?: boolean\r\n}\r\n\r\n/**\r\n * useKeyboard 返回值\r\n */\r\nexport interface UseKeyboardReturn {\r\n /**\r\n * 键盘是否可见\r\n */\r\n visible: Ref<boolean>\r\n\r\n /**\r\n * 当前键盘类型\r\n */\r\n type: Ref<KeyboardType>\r\n\r\n /**\r\n * 是否大写状态\r\n */\r\n isUpperCase: Ref<boolean>\r\n\r\n /**\r\n * 当前输入值\r\n */\r\n value: Ref<string>\r\n\r\n /**\r\n * 光标位置\r\n */\r\n cursorPosition: Ref<number>\r\n\r\n /**\r\n * 当前布局配置\r\n */\r\n layout: Ref<KeyboardConfig | null>\r\n\r\n /**\r\n * 完整状态\r\n */\r\n state: KeyboardState\r\n\r\n /**\r\n * 显示键盘\r\n */\r\n show: (input?: HTMLInputElement | HTMLTextAreaElement) => void\r\n\r\n /**\r\n * 隐藏键盘\r\n */\r\n hide: () => void\r\n\r\n /**\r\n * 切换显示/隐藏\r\n */\r\n toggle: (input?: HTMLInputElement | HTMLTextAreaElement) => void\r\n\r\n /**\r\n * 切换键盘类型\r\n */\r\n switchType: (type: KeyboardType | string) => void\r\n\r\n /**\r\n * 切换大小写\r\n */\r\n toggleShift: () => void\r\n\r\n /**\r\n * 处理按键\r\n */\r\n handleKey: (key: KeyDefinition) => void\r\n\r\n /**\r\n * 获取按键显示文本\r\n */\r\n getKeyLabel: (key: KeyDefinition) => string\r\n\r\n /**\r\n * 设置值\r\n */\r\n setValue: (value: string) => void\r\n\r\n /**\r\n * 追加值(在光标位置插入文本)\r\n */\r\n appendValue: (text: string) => void\r\n\r\n /**\r\n * 设置最大长度\r\n */\r\n setMaxLength: (maxLength?: number) => void\r\n\r\n /**\r\n * 绑定输入框\r\n */\r\n bindInput: (input: HTMLInputElement | HTMLTextAreaElement) => void\r\n\r\n /**\r\n * 解绑输入框\r\n */\r\n unbindInput: () => void\r\n\r\n /**\r\n * 事件监听\r\n */\r\n on: <K extends keyof KeyboardEventMap>(\r\n event: K,\r\n handler: (data: KeyboardEventMap[K]) => void\r\n ) => () => void\r\n\r\n /**\r\n * 单次事件监听\r\n */\r\n once: <K extends keyof KeyboardEventMap>(\r\n event: K,\r\n handler: (data: KeyboardEventMap[K]) => void\r\n ) => () => void\r\n\r\n /**\r\n * 销毁\r\n */\r\n destroy: () => void\r\n}\r\n\r\n/**\r\n * 键盘管理 Composable\r\n */\r\nexport function useKeyboard(\r\n options: UseKeyboardOptions = {}\r\n): UseKeyboardReturn {\r\n const { immediate = false, ...keyboardOptions } = options\r\n\r\n // 创建键盘管理器\r\n const manager = createKeyboardManager(keyboardOptions)\r\n const initialState = manager.getState()\r\n\r\n // 响应式状态\r\n const visible = ref(initialState.visible)\r\n const type = ref<KeyboardType>(initialState.type)\r\n const isUpperCase = ref(initialState.isUpperCase)\r\n const value = ref(initialState.value)\r\n const cursorPosition = ref(initialState.cursorPosition)\r\n const layout = shallowRef<KeyboardConfig | null>(manager.getLayout())\r\n\r\n // 完整状态(响应式对象)\r\n const state = reactive<KeyboardState>({\r\n ...initialState,\r\n })\r\n\r\n // 同步管理器状态到 Vue 响应式状态\r\n const syncState = (newState: KeyboardState) => {\r\n visible.value = newState.visible\r\n type.value = newState.type\r\n isUpperCase.value = newState.isUpperCase\r\n value.value = newState.value\r\n cursorPosition.value = newState.cursorPosition\r\n\r\n Object.assign(state, newState)\r\n }\r\n\r\n // 监听状态变化\r\n manager.on('stateChange', syncState)\r\n\r\n // 监听键盘类型切换,更新布局\r\n manager.on('switch', () => {\r\n layout.value = manager.getLayout()\r\n })\r\n\r\n // 立即显示\r\n if (immediate) {\r\n manager.show()\r\n }\r\n\r\n // 组件卸载时销毁\r\n onBeforeUnmount(() => {\r\n manager.destroy()\r\n })\r\n\r\n return {\r\n visible,\r\n type,\r\n isUpperCase,\r\n value,\r\n cursorPosition,\r\n layout,\r\n state,\r\n show: (input?: HTMLInputElement | HTMLTextAreaElement) =>\r\n manager.show(input),\r\n hide: () => manager.hide(),\r\n toggle: (input?: HTMLInputElement | HTMLTextAreaElement) =>\r\n manager.toggle(input),\r\n switchType: (t: KeyboardType | string) => manager.switchType(t),\r\n toggleShift: () => manager.toggleShift(),\r\n handleKey: (key: KeyDefinition) => manager.handleKey(key),\r\n getKeyLabel: (key: KeyDefinition) => manager.getKeyLabel(key),\r\n setValue: (v: string) => manager.setValue(v),\r\n appendValue: (text: string) => manager.appendValue(text),\r\n setMaxLength: (maxLength?: number) => manager.setMaxLength(maxLength),\r\n bindInput: (input: HTMLInputElement | HTMLTextAreaElement) =>\r\n manager.bindInput(input),\r\n unbindInput: () => manager.unbindInput(),\r\n on: (event, handler) => manager.on(event, handler),\r\n once: (event, handler) => manager.once(event, handler),\r\n destroy: () => manager.destroy(),\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAuJO,SAAS,YACd,UAA8B,CAAC,GACZ;CACnB,MAAM,EAAE,YAAY,OAAO,GAAG,oBAAoB;CAGlD,MAAM,UAAU,sBAAsB,eAAe;CACrD,MAAM,eAAe,QAAQ,SAAS;CAGtC,MAAM,UAAU,IAAI,aAAa,OAAO;CACxC,MAAM,OAAO,IAAkB,aAAa,IAAI;CAChD,MAAM,cAAc,IAAI,aAAa,WAAW;CAChD,MAAM,QAAQ,IAAI,aAAa,KAAK;CACpC,MAAM,iBAAiB,IAAI,aAAa,cAAc;CACtD,MAAM,SAAS,WAAkC,QAAQ,UAAU,CAAC;CAGpE,MAAM,QAAQ,SAAwB,EACpC,GAAG,aACL,CAAC;CAGD,MAAM,aAAa,aAA4B;EAC7C,QAAQ,QAAQ,SAAS;EACzB,KAAK,QAAQ,SAAS;EACtB,YAAY,QAAQ,SAAS;EAC7B,MAAM,QAAQ,SAAS;EACvB,eAAe,QAAQ,SAAS;EAEhC,OAAO,OAAO,OAAO,QAAQ;CAC/B;CAGA,QAAQ,GAAG,eAAe,SAAS;CAGnC,QAAQ,GAAG,gBAAgB;EACzB,OAAO,QAAQ,QAAQ,UAAU;CACnC,CAAC;CAGD,IAAI,WACF,QAAQ,KAAK;CAIf,sBAAsB;EACpB,QAAQ,QAAQ;CAClB,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,UACL,QAAQ,KAAK,KAAK;EACpB,YAAY,QAAQ,KAAK;EACzB,SAAS,UACP,QAAQ,OAAO,KAAK;EACtB,aAAa,MAA6B,QAAQ,WAAW,CAAC;EAC9D,mBAAmB,QAAQ,YAAY;EACvC,YAAY,QAAuB,QAAQ,UAAU,GAAG;EACxD,cAAc,QAAuB,QAAQ,YAAY,GAAG;EAC5D,WAAW,MAAc,QAAQ,SAAS,CAAC;EAC3C,cAAc,SAAiB,QAAQ,YAAY,IAAI;EACvD,eAAe,cAAuB,QAAQ,aAAa,SAAS;EACpE,YAAY,UACV,QAAQ,UAAU,KAAK;EACzB,mBAAmB,QAAQ,YAAY;EACvC,KAAK,OAAO,YAAY,QAAQ,GAAG,OAAO,OAAO;EACjD,OAAO,OAAO,YAAY,QAAQ,KAAK,OAAO,OAAO;EACrD,eAAe,QAAQ,QAAQ;CACjC;AACF"}
@@ -1,73 +1,24 @@
1
1
  /**
2
- * 键盘弹出层 Composable
2
+ * Keyboard popup composable.
3
3
  * @module composables/useKeyboardPopup
4
4
  */
5
+ import type { PopupPlacement, PopupPositionConfig } from '@composy/keyboard-core';
5
6
  import type { CSSProperties, Ref } from 'vue';
6
- import { type PopupPlacement, type PopupPositionConfig } from '@composy/keyboard-core';
7
- /**
8
- * useKeyboardPopup 选项
9
- */
10
7
  export interface UseKeyboardPopupOptions extends PopupPositionConfig {
11
- /**
12
- * 是否显示
13
- */
14
8
  visible?: Ref<boolean>;
15
- /**
16
- * 目标元素
17
- */
18
9
  target?: Ref<HTMLElement | null>;
19
- /**
20
- * 弹出层元素
21
- */
22
10
  popup?: Ref<HTMLElement | null>;
23
- /**
24
- * 点击外部关闭
25
- */
26
11
  closeOnClickOutside?: boolean;
27
- /**
28
- * 关闭回调
29
- */
30
12
  onClose?: () => void;
31
13
  }
32
- /**
33
- * useKeyboardPopup 返回值
34
- */
35
14
  export interface UseKeyboardPopupReturn {
36
- /**
37
- * 弹出层样式
38
- */
39
15
  popupStyles: Ref<CSSProperties>;
40
- /**
41
- * 遮罩层样式
42
- */
43
16
  maskStyles: Ref<CSSProperties>;
44
- /**
45
- * 当前弹出位置
46
- */
47
17
  placement: Ref<PopupPlacement>;
48
- /**
49
- * 是否移动端
50
- */
51
18
  isMobileDevice: Ref<boolean>;
52
- /**
53
- * 是否显示遮罩
54
- */
55
19
  showMask: Ref<boolean>;
56
- /**
57
- * 是否正在动画中
58
- */
59
20
  isAnimating: Ref<boolean>;
60
- /**
61
- * 更新位置
62
- */
63
21
  updatePosition: () => void;
64
- /**
65
- * 关闭弹出层
66
- */
67
22
  close: () => void;
68
23
  }
69
- /**
70
- * 键盘弹出层 Composable
71
- */
72
24
  export declare function useKeyboardPopup(options?: UseKeyboardPopupOptions): UseKeyboardPopupReturn;
73
- //# sourceMappingURL=useKeyboardPopup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardPopup.d.ts","sourceRoot":"","sources":["../../src/composables/useKeyboardPopup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC7C,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAEzB,MAAM,wBAAwB,CAAA;AAE/B;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAEhC;;OAEG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAE/B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;IAE/B;;OAEG;IACH,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;IAE9B;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;IAE9B;;OAEG;IACH,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAE5B;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAEtB;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAEzB;;OAEG;IACH,cAAc,EAAE,MAAM,IAAI,CAAA;IAE1B;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,sBAAsB,CAkK9F"}
1
+ {"version":3,"file":"useKeyboardPopup.d.ts","sourceRoot":"","sources":["../../src/composables/useKeyboardPopup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAS7C,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;IAC/B,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;IAC9B,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;IAC9B,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACzB,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAwKxB"}
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/keyboard-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:14 *
5
+ * Build time: 2024-10-12 17:44:15 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
@@ -22,12 +22,28 @@ function useKeyboardPopup(options = {}) {
22
22
  let cleanupClickOutside = null;
23
23
  let cleanupViewportChange = null;
24
24
  let cleanupScroll = null;
25
+ let animationFrame = null;
26
+ let visibilitySession = 0;
27
+ const cleanupOpenResources = () => {
28
+ cleanupClickOutside?.();
29
+ cleanupClickOutside = null;
30
+ cleanupViewportChange?.();
31
+ cleanupViewportChange = null;
32
+ cleanupScroll?.();
33
+ cleanupScroll = null;
34
+ };
35
+ const cancelAnimationFrame = () => {
36
+ if (animationFrame === null || typeof window === "undefined") return;
37
+ window.cancelAnimationFrame(animationFrame);
38
+ animationFrame = null;
39
+ };
25
40
  const updatePosition = () => {
26
- if (!popup.value) return;
27
- const popupRect = popup.value.getBoundingClientRect();
41
+ const popupElement = popup.value;
42
+ if (!popupElement) return;
43
+ const popupRect = popupElement.getBoundingClientRect();
28
44
  const result = positionManager.calculate(target.value, {
29
- width: popupRect.width || 300,
30
- height: popupRect.height || 260
45
+ width: Math.max(0, popupRect.width),
46
+ height: Math.max(0, popupRect.height)
31
47
  });
32
48
  placement.value = result.placement;
33
49
  showMask.value = positionManager.shouldShowMask();
@@ -36,71 +52,72 @@ function useKeyboardPopup(options = {}) {
36
52
  left: "0",
37
53
  right: "0",
38
54
  bottom: "0",
39
- maxHeight: `${result.maxHeight}px`,
55
+ maxHeight: result.maxHeight === void 0 ? void 0 : `${result.maxHeight}px`,
40
56
  zIndex: 1e3
41
57
  };
42
58
  else popupStyles.value = {
43
59
  position: "fixed",
44
60
  left: `${result.position.x}px`,
45
61
  top: `${result.position.y}px`,
46
- maxHeight: result.maxHeight ? `${result.maxHeight}px` : void 0,
47
- maxWidth: result.maxWidth ? `${result.maxWidth}px` : void 0,
62
+ maxHeight: result.maxHeight === void 0 ? void 0 : `${result.maxHeight}px`,
63
+ maxWidth: result.maxWidth === void 0 ? void 0 : `${result.maxWidth}px`,
48
64
  zIndex: 1e3
49
65
  };
50
- if (showMask.value) maskStyles.value = {
66
+ maskStyles.value = showMask.value ? {
51
67
  position: "fixed",
52
- top: "0",
53
- left: "0",
54
- right: "0",
55
- bottom: "0",
56
- backgroundColor: "rgba(0, 0, 0, 0.5)",
68
+ inset: "0",
69
+ backgroundColor: "var(--keyboard-mask-bg)",
57
70
  zIndex: 999
58
- };
71
+ } : {};
59
72
  };
60
73
  const close = () => {
61
- onClose?.();
74
+ if (visible.value) onClose?.();
62
75
  };
63
76
  watch(visible, (newVisible) => {
64
- if (newVisible) {
65
- isMobileDevice.value = isMobile();
66
- requestAnimationFrame(() => {
67
- updatePosition();
68
- if (closeOnClickOutside && popup.value) cleanupClickOutside = onClickOutside(popup.value, (event) => {
69
- if (target.value && target.value.contains(event.target)) return;
70
- close();
71
- });
72
- });
73
- cleanupViewportChange = onViewportChange(() => {
74
- isMobileDevice.value = isMobile();
75
- updatePosition();
77
+ visibilitySession += 1;
78
+ const currentSession = visibilitySession;
79
+ cancelAnimationFrame();
80
+ cleanupOpenResources();
81
+ if (!newVisible) {
82
+ isAnimating.value = false;
83
+ showMask.value = false;
84
+ popupStyles.value = {};
85
+ maskStyles.value = {};
86
+ return;
87
+ }
88
+ isMobileDevice.value = isMobile();
89
+ isAnimating.value = true;
90
+ if (typeof window !== "undefined") animationFrame = window.requestAnimationFrame(() => {
91
+ animationFrame = null;
92
+ if (!visible.value || currentSession !== visibilitySession) return;
93
+ updatePosition();
94
+ isAnimating.value = false;
95
+ if (closeOnClickOutside && popup.value) cleanupClickOutside = onClickOutside(popup.value, (event) => {
96
+ if (target.value && event.target instanceof Node && target.value.contains(event.target)) return;
97
+ close();
76
98
  });
77
- if (!isMobileDevice.value) {
78
- const handleScroll = () => {
79
- requestAnimationFrame(() => {
80
- updatePosition();
81
- });
82
- };
83
- window.addEventListener("scroll", handleScroll, true);
84
- cleanupScroll = () => {
85
- window.removeEventListener("scroll", handleScroll, true);
86
- };
87
- }
88
- } else {
89
- cleanupClickOutside?.();
90
- cleanupClickOutside = null;
91
- cleanupViewportChange?.();
92
- cleanupViewportChange = null;
93
- cleanupScroll?.();
94
- cleanupScroll = null;
99
+ });
100
+ cleanupViewportChange = onViewportChange(() => {
101
+ if (!visible.value) return;
102
+ isMobileDevice.value = isMobile();
103
+ updatePosition();
104
+ });
105
+ if (!isMobileDevice.value && typeof window !== "undefined") {
106
+ const handleScroll = () => {
107
+ if (!visible.value) return;
108
+ window.requestAnimationFrame(updatePosition);
109
+ };
110
+ window.addEventListener("scroll", handleScroll, true);
111
+ cleanupScroll = () => window.removeEventListener("scroll", handleScroll, true);
95
112
  }
96
113
  }, { immediate: true });
97
114
  watch(target, () => {
98
115
  if (visible.value) updatePosition();
99
116
  });
100
117
  onBeforeUnmount(() => {
101
- cleanupClickOutside?.();
102
- cleanupViewportChange?.();
103
- cleanupScroll?.();
118
+ visibilitySession += 1;
119
+ cancelAnimationFrame();
120
+ cleanupOpenResources();
104
121
  });
105
122
  return {
106
123
  popupStyles,
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardPopup.js","names":[],"sources":["../../src/composables/useKeyboardPopup.ts"],"sourcesContent":["/**\n * 键盘弹出层 Composable\n * @module composables/useKeyboardPopup\n */\n\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport type { CSSProperties, Ref } from 'vue'\nimport {\n createPositionManager,\n isMobile,\n onClickOutside,\n onViewportChange,\n type PopupPlacement,\n type PopupPositionConfig,\n type PopupPositionResult,\n} from '@composy/keyboard-core'\n\n/**\n * useKeyboardPopup 选项\n */\nexport interface UseKeyboardPopupOptions extends PopupPositionConfig {\n /**\n * 是否显示\n */\n visible?: Ref<boolean>\n\n /**\n * 目标元素\n */\n target?: Ref<HTMLElement | null>\n\n /**\n * 弹出层元素\n */\n popup?: Ref<HTMLElement | null>\n\n /**\n * 点击外部关闭\n */\n closeOnClickOutside?: boolean\n\n /**\n * 关闭回调\n */\n onClose?: () => void\n}\n\n/**\n * useKeyboardPopup 返回值\n */\nexport interface UseKeyboardPopupReturn {\n /**\n * 弹出层样式\n */\n popupStyles: Ref<CSSProperties>\n\n /**\n * 遮罩层样式\n */\n maskStyles: Ref<CSSProperties>\n\n /**\n * 当前弹出位置\n */\n placement: Ref<PopupPlacement>\n\n /**\n * 是否移动端\n */\n isMobileDevice: Ref<boolean>\n\n /**\n * 是否显示遮罩\n */\n showMask: Ref<boolean>\n\n /**\n * 是否正在动画中\n */\n isAnimating: Ref<boolean>\n\n /**\n * 更新位置\n */\n updatePosition: () => void\n\n /**\n * 关闭弹出层\n */\n close: () => void\n}\n\n/**\n * 键盘弹出层 Composable\n */\nexport function useKeyboardPopup(options: UseKeyboardPopupOptions = {}): UseKeyboardPopupReturn {\n const {\n visible = ref(false),\n target = ref(null),\n popup = ref(null),\n closeOnClickOutside = true,\n onClose,\n ...positionConfig\n } = options\n\n // 创建位置管理器\n const positionManager = createPositionManager(positionConfig)\n\n // 响应式状态\n const popupStyles = ref<CSSProperties>({})\n const maskStyles = ref<CSSProperties>({})\n const placement = ref<PopupPlacement>('bottom')\n const isMobileDevice = ref(isMobile())\n const showMask = ref(false)\n const isAnimating = ref(false)\n\n // 清理函数\n let cleanupClickOutside: (() => void) | null = null\n let cleanupViewportChange: (() => void) | null = null\n let cleanupScroll: (() => void) | null = null\n\n /**\n * 更新弹出层位置\n */\n const updatePosition = () => {\n if (!popup.value) return\n\n const popupRect = popup.value.getBoundingClientRect()\n const result = positionManager.calculate(target.value, {\n width: popupRect.width || 300,\n height: popupRect.height || 260,\n })\n\n placement.value = result.placement\n showMask.value = positionManager.shouldShowMask()\n\n // 设置弹出层样式\n if (result.placement === 'bottom-sheet') {\n // 移动端底部弹出\n popupStyles.value = {\n position: 'fixed',\n left: '0',\n right: '0',\n bottom: '0',\n maxHeight: `${result.maxHeight}px`,\n zIndex: 1000,\n }\n }\n else {\n // PC 端下拉弹出\n popupStyles.value = {\n position: 'fixed',\n left: `${result.position.x}px`,\n top: `${result.position.y}px`,\n maxHeight: result.maxHeight ? `${result.maxHeight}px` : undefined,\n maxWidth: result.maxWidth ? `${result.maxWidth}px` : undefined,\n zIndex: 1000,\n }\n }\n\n // 设置遮罩层样式\n if (showMask.value) {\n maskStyles.value = {\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 999,\n }\n }\n }\n\n /**\n * 关闭弹出层\n */\n const close = () => {\n onClose?.()\n }\n\n // 监听 visible 变化\n watch(visible, (newVisible) => {\n if (newVisible) {\n // 显示时\n isMobileDevice.value = isMobile()\n\n // 延迟计算位置(等待 DOM 渲染)\n requestAnimationFrame(() => {\n updatePosition()\n\n // 添加点击外部关闭监听\n if (closeOnClickOutside && popup.value) {\n cleanupClickOutside = onClickOutside(popup.value, (event) => {\n // 检查是否点击在目标元素上\n if (target.value && target.value.contains(event.target as Node)) {\n return\n }\n close()\n })\n }\n })\n\n // 监听视口变化\n cleanupViewportChange = onViewportChange(() => {\n isMobileDevice.value = isMobile()\n updatePosition()\n })\n\n // PC 端监听滚动事件,跟随滚动\n if (!isMobileDevice.value) {\n const handleScroll = () => {\n requestAnimationFrame(() => {\n updatePosition()\n })\n }\n window.addEventListener('scroll', handleScroll, true)\n cleanupScroll = () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\n }\n }\n else {\n // 隐藏时清理\n cleanupClickOutside?.()\n cleanupClickOutside = null\n cleanupViewportChange?.()\n cleanupViewportChange = null\n cleanupScroll?.()\n cleanupScroll = null\n }\n }, { immediate: true })\n\n // 监听目标元素变化\n watch(target, () => {\n if (visible.value) {\n updatePosition()\n }\n })\n\n // 组件卸载时清理\n onBeforeUnmount(() => {\n cleanupClickOutside?.()\n cleanupViewportChange?.()\n cleanupScroll?.()\n })\n\n return {\n popupStyles,\n maskStyles,\n placement,\n isMobileDevice,\n showMask,\n isAnimating,\n updatePosition,\n close,\n }\n}\n"],"mappings":";;;;;;;;;;;;AA+FO,SAAS,iBAAiB,UAAmC,CAAC,GAA2B;CAC9F,MAAM,EACJ,UAAU,IAAI,KAAK,GACnB,SAAS,IAAI,IAAI,GACjB,QAAQ,IAAI,IAAI,GAChB,sBAAsB,MACtB,SACA,GAAG,mBACD;CAGJ,MAAM,kBAAkB,sBAAsB,cAAc;CAG5D,MAAM,cAAc,IAAmB,CAAC,CAAC;CACzC,MAAM,aAAa,IAAmB,CAAC,CAAC;CACxC,MAAM,YAAY,IAAoB,QAAQ;CAC9C,MAAM,iBAAiB,IAAI,SAAS,CAAC;CACrC,MAAM,WAAW,IAAI,KAAK;CAC1B,MAAM,cAAc,IAAI,KAAK;CAG7B,IAAI,sBAA2C;CAC/C,IAAI,wBAA6C;CACjD,IAAI,gBAAqC;CAKzC,MAAM,uBAAuB;EAC3B,IAAI,CAAC,MAAM,OAAO;EAElB,MAAM,YAAY,MAAM,MAAM,sBAAsB;EACpD,MAAM,SAAS,gBAAgB,UAAU,OAAO,OAAO;GACrD,OAAO,UAAU,SAAS;GAC1B,QAAQ,UAAU,UAAU;EAC9B,CAAC;EAED,UAAU,QAAQ,OAAO;EACzB,SAAS,QAAQ,gBAAgB,eAAe;EAGhD,IAAI,OAAO,cAAc,gBAEvB,YAAY,QAAQ;GAClB,UAAU;GACV,MAAM;GACN,OAAO;GACP,QAAQ;GACR,WAAW,GAAG,OAAO,UAAS;GAC9B,QAAQ;EACV;OAIA,YAAY,QAAQ;GAClB,UAAU;GACV,MAAM,GAAG,OAAO,SAAS,EAAC;GAC1B,KAAK,GAAG,OAAO,SAAS,EAAC;GACzB,WAAW,OAAO,YAAY,GAAG,OAAO,UAAS,MAAO,KAAA;GACxD,UAAU,OAAO,WAAW,GAAG,OAAO,SAAQ,MAAO,KAAA;GACrD,QAAQ;EACV;EAIF,IAAI,SAAS,OACX,WAAW,QAAQ;GACjB,UAAU;GACV,KAAK;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,iBAAiB;GACjB,QAAQ;EACV;CAEJ;CAKA,MAAM,cAAc;EAClB,UAAU;CACZ;CAGA,MAAM,UAAU,eAAe;EAC7B,IAAI,YAAY;GAEd,eAAe,QAAQ,SAAS;GAGhC,4BAA4B;IAC1B,eAAe;IAGf,IAAI,uBAAuB,MAAM,OAC/B,sBAAsB,eAAe,MAAM,QAAQ,UAAU;KAE3D,IAAI,OAAO,SAAS,OAAO,MAAM,SAAS,MAAM,MAAc,GAC5D;KAEF,MAAM;IACR,CAAC;GAEL,CAAC;GAGD,wBAAwB,uBAAuB;IAC7C,eAAe,QAAQ,SAAS;IAChC,eAAe;GACjB,CAAC;GAGD,IAAI,CAAC,eAAe,OAAO;IACzB,MAAM,qBAAqB;KACzB,4BAA4B;MAC1B,eAAe;KACjB,CAAC;IACH;IACA,OAAO,iBAAiB,UAAU,cAAc,IAAI;IACpD,sBAAsB;KACpB,OAAO,oBAAoB,UAAU,cAAc,IAAI;IACzD;GACF;EACF,OACK;GAEH,sBAAsB;GACtB,sBAAsB;GACtB,wBAAwB;GACxB,wBAAwB;GACxB,gBAAgB;GAChB,gBAAgB;EAClB;CACF,GAAG,EAAE,WAAW,KAAK,CAAC;CAGtB,MAAM,cAAc;EAClB,IAAI,QAAQ,OACV,eAAe;CAEnB,CAAC;CAGD,sBAAsB;EACpB,sBAAsB;EACtB,wBAAwB;EACxB,gBAAgB;CAClB,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"useKeyboardPopup.js","names":[],"sources":["../../src/composables/useKeyboardPopup.ts"],"sourcesContent":["/**\r\n * Keyboard popup composable.\r\n * @module composables/useKeyboardPopup\r\n */\r\n\r\nimport type {\r\n PopupPlacement,\r\n PopupPositionConfig,\r\n} from '@composy/keyboard-core'\r\nimport type { CSSProperties, Ref } from 'vue'\r\nimport {\r\n createPositionManager,\r\n isMobile,\r\n onClickOutside,\r\n onViewportChange,\r\n} from '@composy/keyboard-core'\r\nimport { onBeforeUnmount, ref, watch } from 'vue'\r\n\r\nexport interface UseKeyboardPopupOptions extends PopupPositionConfig {\r\n visible?: Ref<boolean>\r\n target?: Ref<HTMLElement | null>\r\n popup?: Ref<HTMLElement | null>\r\n closeOnClickOutside?: boolean\r\n onClose?: () => void\r\n}\r\n\r\nexport interface UseKeyboardPopupReturn {\r\n popupStyles: Ref<CSSProperties>\r\n maskStyles: Ref<CSSProperties>\r\n placement: Ref<PopupPlacement>\r\n isMobileDevice: Ref<boolean>\r\n showMask: Ref<boolean>\r\n isAnimating: Ref<boolean>\r\n updatePosition: () => void\r\n close: () => void\r\n}\r\n\r\nexport function useKeyboardPopup(\r\n options: UseKeyboardPopupOptions = {}\r\n): UseKeyboardPopupReturn {\r\n const {\r\n visible = ref(false),\r\n target = ref(null),\r\n popup = ref(null),\r\n closeOnClickOutside = true,\r\n onClose,\r\n ...positionConfig\r\n } = options\r\n\r\n const positionManager = createPositionManager(positionConfig)\r\n const popupStyles = ref<CSSProperties>({})\r\n const maskStyles = ref<CSSProperties>({})\r\n const placement = ref<PopupPlacement>('bottom')\r\n const isMobileDevice = ref(isMobile())\r\n const showMask = ref(false)\r\n const isAnimating = ref(false)\r\n\r\n let cleanupClickOutside: (() => void) | null = null\r\n let cleanupViewportChange: (() => void) | null = null\r\n let cleanupScroll: (() => void) | null = null\r\n let animationFrame: number | null = null\r\n let visibilitySession = 0\r\n\r\n const cleanupOpenResources = () => {\r\n cleanupClickOutside?.()\r\n cleanupClickOutside = null\r\n cleanupViewportChange?.()\r\n cleanupViewportChange = null\r\n cleanupScroll?.()\r\n cleanupScroll = null\r\n }\r\n\r\n const cancelAnimationFrame = () => {\r\n if (animationFrame === null || typeof window === 'undefined') return\r\n window.cancelAnimationFrame(animationFrame)\r\n animationFrame = null\r\n }\r\n\r\n const updatePosition = () => {\r\n const popupElement = popup.value\r\n if (!popupElement) return\r\n\r\n const popupRect = popupElement.getBoundingClientRect()\r\n const result = positionManager.calculate(target.value, {\r\n width: Math.max(0, popupRect.width),\r\n height: Math.max(0, popupRect.height),\r\n })\r\n\r\n placement.value = result.placement\r\n showMask.value = positionManager.shouldShowMask()\r\n\r\n if (result.placement === 'bottom-sheet') {\r\n popupStyles.value = {\r\n position: 'fixed',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n maxHeight:\r\n result.maxHeight === undefined ? undefined : `${result.maxHeight}px`,\r\n zIndex: 1000,\r\n }\r\n } else {\r\n popupStyles.value = {\r\n position: 'fixed',\r\n left: `${result.position.x}px`,\r\n top: `${result.position.y}px`,\r\n maxHeight:\r\n result.maxHeight === undefined ? undefined : `${result.maxHeight}px`,\r\n maxWidth:\r\n result.maxWidth === undefined ? undefined : `${result.maxWidth}px`,\r\n zIndex: 1000,\r\n }\r\n }\r\n\r\n maskStyles.value = showMask.value\r\n ? {\r\n position: 'fixed',\r\n inset: '0',\r\n backgroundColor: 'var(--keyboard-mask-bg)',\r\n zIndex: 999,\r\n }\r\n : {}\r\n }\r\n\r\n const close = () => {\r\n if (visible.value) onClose?.()\r\n }\r\n\r\n watch(\r\n visible,\r\n newVisible => {\r\n visibilitySession += 1\r\n const currentSession = visibilitySession\r\n cancelAnimationFrame()\r\n cleanupOpenResources()\r\n\r\n if (!newVisible) {\r\n isAnimating.value = false\r\n showMask.value = false\r\n popupStyles.value = {}\r\n maskStyles.value = {}\r\n return\r\n }\r\n\r\n isMobileDevice.value = isMobile()\r\n isAnimating.value = true\r\n\r\n if (typeof window !== 'undefined') {\r\n animationFrame = window.requestAnimationFrame(() => {\r\n animationFrame = null\r\n if (!visible.value || currentSession !== visibilitySession) return\r\n\r\n updatePosition()\r\n isAnimating.value = false\r\n if (closeOnClickOutside && popup.value) {\r\n cleanupClickOutside = onClickOutside(popup.value, event => {\r\n if (\r\n target.value &&\r\n event.target instanceof Node &&\r\n target.value.contains(event.target)\r\n )\r\n return\r\n close()\r\n })\r\n }\r\n })\r\n }\r\n\r\n cleanupViewportChange = onViewportChange(() => {\r\n if (!visible.value) return\r\n isMobileDevice.value = isMobile()\r\n updatePosition()\r\n })\r\n\r\n if (!isMobileDevice.value && typeof window !== 'undefined') {\r\n const handleScroll = () => {\r\n if (!visible.value) return\r\n window.requestAnimationFrame(updatePosition)\r\n }\r\n window.addEventListener('scroll', handleScroll, true)\r\n cleanupScroll = () =>\r\n window.removeEventListener('scroll', handleScroll, true)\r\n }\r\n },\r\n { immediate: true }\r\n )\r\n\r\n watch(target, () => {\r\n if (visible.value) updatePosition()\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n visibilitySession += 1\r\n cancelAnimationFrame()\r\n cleanupOpenResources()\r\n })\r\n\r\n return {\r\n popupStyles,\r\n maskStyles,\r\n placement,\r\n isMobileDevice,\r\n showMask,\r\n isAnimating,\r\n updatePosition,\r\n close,\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAqCO,SAAS,iBACd,UAAmC,CAAC,GACZ;CACxB,MAAM,EACJ,UAAU,IAAI,KAAK,GACnB,SAAS,IAAI,IAAI,GACjB,QAAQ,IAAI,IAAI,GAChB,sBAAsB,MACtB,SACA,GAAG,mBACD;CAEJ,MAAM,kBAAkB,sBAAsB,cAAc;CAC5D,MAAM,cAAc,IAAmB,CAAC,CAAC;CACzC,MAAM,aAAa,IAAmB,CAAC,CAAC;CACxC,MAAM,YAAY,IAAoB,QAAQ;CAC9C,MAAM,iBAAiB,IAAI,SAAS,CAAC;CACrC,MAAM,WAAW,IAAI,KAAK;CAC1B,MAAM,cAAc,IAAI,KAAK;CAE7B,IAAI,sBAA2C;CAC/C,IAAI,wBAA6C;CACjD,IAAI,gBAAqC;CACzC,IAAI,iBAAgC;CACpC,IAAI,oBAAoB;CAExB,MAAM,6BAA6B;EACjC,sBAAsB;EACtB,sBAAsB;EACtB,wBAAwB;EACxB,wBAAwB;EACxB,gBAAgB;EAChB,gBAAgB;CAClB;CAEA,MAAM,6BAA6B;EACjC,IAAI,mBAAmB,QAAQ,OAAO,WAAW,aAAa;EAC9D,OAAO,qBAAqB,cAAc;EAC1C,iBAAiB;CACnB;CAEA,MAAM,uBAAuB;EAC3B,MAAM,eAAe,MAAM;EAC3B,IAAI,CAAC,cAAc;EAEnB,MAAM,YAAY,aAAa,sBAAsB;EACrD,MAAM,SAAS,gBAAgB,UAAU,OAAO,OAAO;GACrD,OAAO,KAAK,IAAI,GAAG,UAAU,KAAK;GAClC,QAAQ,KAAK,IAAI,GAAG,UAAU,MAAM;EACtC,CAAC;EAED,UAAU,QAAQ,OAAO;EACzB,SAAS,QAAQ,gBAAgB,eAAe;EAEhD,IAAI,OAAO,cAAc,gBACvB,YAAY,QAAQ;GAClB,UAAU;GACV,MAAM;GACN,OAAO;GACP,QAAQ;GACR,WACE,OAAO,cAAc,KAAA,IAAY,KAAA,IAAY,GAAG,OAAO,UAAS;GAClE,QAAQ;EACV;OAEA,YAAY,QAAQ;GAClB,UAAU;GACV,MAAM,GAAG,OAAO,SAAS,EAAC;GAC1B,KAAK,GAAG,OAAO,SAAS,EAAC;GACzB,WACE,OAAO,cAAc,KAAA,IAAY,KAAA,IAAY,GAAG,OAAO,UAAS;GAClE,UACE,OAAO,aAAa,KAAA,IAAY,KAAA,IAAY,GAAG,OAAO,SAAQ;GAChE,QAAQ;EACV;EAGF,WAAW,QAAQ,SAAS,QACxB;GACE,UAAU;GACV,OAAO;GACP,iBAAiB;GACjB,QAAQ;EACV,IACA,CAAC;CACP;CAEA,MAAM,cAAc;EAClB,IAAI,QAAQ,OAAO,UAAU;CAC/B;CAEA,MACE,UACA,eAAc;EACZ,qBAAqB;EACrB,MAAM,iBAAiB;EACvB,qBAAqB;EACrB,qBAAqB;EAErB,IAAI,CAAC,YAAY;GACf,YAAY,QAAQ;GACpB,SAAS,QAAQ;GACjB,YAAY,QAAQ,CAAC;GACrB,WAAW,QAAQ,CAAC;GACpB;EACF;EAEA,eAAe,QAAQ,SAAS;EAChC,YAAY,QAAQ;EAEpB,IAAI,OAAO,WAAW,aACpB,iBAAiB,OAAO,4BAA4B;GAClD,iBAAiB;GACjB,IAAI,CAAC,QAAQ,SAAS,mBAAmB,mBAAmB;GAE5D,eAAe;GACf,YAAY,QAAQ;GACpB,IAAI,uBAAuB,MAAM,OAC/B,sBAAsB,eAAe,MAAM,QAAO,UAAS;IACzD,IACE,OAAO,SACP,MAAM,kBAAkB,QACxB,OAAO,MAAM,SAAS,MAAM,MAAM,GAElC;IACF,MAAM;GACR,CAAC;EAEL,CAAC;EAGH,wBAAwB,uBAAuB;GAC7C,IAAI,CAAC,QAAQ,OAAO;GACpB,eAAe,QAAQ,SAAS;GAChC,eAAe;EACjB,CAAC;EAED,IAAI,CAAC,eAAe,SAAS,OAAO,WAAW,aAAa;GAC1D,MAAM,qBAAqB;IACzB,IAAI,CAAC,QAAQ,OAAO;IACpB,OAAO,sBAAsB,cAAc;GAC7C;GACA,OAAO,iBAAiB,UAAU,cAAc,IAAI;GACpD,sBACE,OAAO,oBAAoB,UAAU,cAAc,IAAI;EAC3D;CACF,GACA,EAAE,WAAW,KAAK,CACpB;CAEA,MAAM,cAAc;EAClB,IAAI,QAAQ,OAAO,eAAe;CACpC,CAAC;CAED,sBAAsB;EACpB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;CACvB,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -3,4 +3,3 @@
3
3
  * @module directives
4
4
  */
5
5
  export * from './v-keyboard';
6
- //# sourceMappingURL=index.d.ts.map
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/keyboard-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:14 *
5
+ * Build time: 2024-10-12 17:44:15 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
@@ -33,4 +33,3 @@ export interface VKeyboardBinding {
33
33
  * ```
34
34
  */
35
35
  export declare const vKeyboard: Directive<HTMLInputElement | HTMLTextAreaElement, VKeyboardBinding | string | boolean>;
36
- //# sourceMappingURL=v-keyboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v-keyboard.d.ts","sourceRoot":"","sources":["../../src/directives/v-keyboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,KAAK,CAAA;AAEtD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAC7D,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAID;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,gBAAgB,GAAG,mBAAmB,EAAE,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAmD5G,CAAA"}
1
+ {"version":3,"file":"v-keyboard.d.ts","sourceRoot":"","sources":["../../src/directives/v-keyboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,KAAK,CAAA;AAEtD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,mBAAmB,KAAK,IAAI,CAAA;IAC7D,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAQD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,EAAE,SAAS,CAC/B,gBAAgB,GAAG,mBAAmB,EACtC,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAmDpC,CAAA"}
@@ -2,13 +2,13 @@
2
2
  * ***********************************
3
3
  * @composy/keyboard-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:14 *
5
+ * Build time: 2024-10-12 17:44:15 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
9
9
  */
10
10
  //#region src/directives/v-keyboard.ts
11
- const KEYBOARD_ATTR = "__v_keyboard__";
11
+ const directiveStates = /* @__PURE__ */ new WeakMap();
12
12
  const vKeyboard = {
13
13
  mounted(el, binding) {
14
14
  const options = parseBinding(binding);
@@ -19,14 +19,14 @@ const vKeyboard = {
19
19
  };
20
20
  el.addEventListener("focus", handleFocus);
21
21
  el.setAttribute("inputmode", "none");
22
- el[KEYBOARD_ATTR] = { cleanup: () => {
22
+ directiveStates.set(el, { cleanup: () => {
23
23
  el.removeEventListener("focus", handleFocus);
24
24
  el.removeAttribute("inputmode");
25
- } };
25
+ } });
26
26
  },
27
27
  updated(el, binding) {
28
- const oldCleanup = el[KEYBOARD_ATTR]?.cleanup;
29
- if (oldCleanup) oldCleanup();
28
+ directiveStates.get(el)?.cleanup();
29
+ directiveStates.delete(el);
30
30
  const options = parseBinding(binding);
31
31
  if (!options.enabled) return;
32
32
  const handleFocus = () => {
@@ -35,15 +35,14 @@ const vKeyboard = {
35
35
  };
36
36
  el.addEventListener("focus", handleFocus);
37
37
  el.setAttribute("inputmode", "none");
38
- el[KEYBOARD_ATTR] = { cleanup: () => {
38
+ directiveStates.set(el, { cleanup: () => {
39
39
  el.removeEventListener("focus", handleFocus);
40
40
  el.removeAttribute("inputmode");
41
- } };
41
+ } });
42
42
  },
43
43
  unmounted(el) {
44
- const data = el[KEYBOARD_ATTR];
45
- if (data?.cleanup) data.cleanup();
46
- delete el[KEYBOARD_ATTR];
44
+ directiveStates.get(el)?.cleanup();
45
+ directiveStates.delete(el);
47
46
  }
48
47
  };
49
48
  function parseBinding(binding) {
@@ -1 +1 @@
1
- {"version":3,"file":"v-keyboard.js","names":[],"sources":["../../src/directives/v-keyboard.ts"],"sourcesContent":["/**\n * v-keyboard 指令\n * 自动在输入框聚焦时打开虚拟键盘\n * @module directives/v-keyboard\n */\n\nimport type { Directive, DirectiveBinding } from 'vue'\n\n/**\n * 指令绑定值\n */\nexport interface VKeyboardBinding {\n /** 键盘类型 */\n type?: string\n /** 是否启用 */\n enabled?: boolean\n /** 打开键盘回调 */\n onOpen?: (el: HTMLInputElement | HTMLTextAreaElement) => void\n /** 关闭键盘回调 */\n onClose?: () => void\n}\n\nconst KEYBOARD_ATTR = '__v_keyboard__'\n\n/**\n * v-keyboard 指令\n *\n * @example\n * ```html\n * <!-- 基础用法 -->\n * <input v-keyboard />\n *\n * <!-- 指定键盘类型 -->\n * <input v-keyboard=\"{ type: 'number' }\" />\n *\n * <!-- 配合回调 -->\n * <input v-keyboard=\"{ type: 'phone', onOpen: handleOpen }\" />\n * ```\n */\nexport const vKeyboard: Directive<HTMLInputElement | HTMLTextAreaElement, VKeyboardBinding | string | boolean> = {\n mounted(el, binding) {\n const options = parseBinding(binding)\n if (!options.enabled) return\n\n const handleFocus = () => {\n // 阻止原生键盘\n el.blur()\n options.onOpen?.(el)\n }\n\n el.addEventListener('focus', handleFocus)\n el.setAttribute('inputmode', 'none')\n\n // 存储清理函数\n ;(el as any)[KEYBOARD_ATTR] = {\n cleanup: () => {\n el.removeEventListener('focus', handleFocus)\n el.removeAttribute('inputmode')\n },\n }\n },\n\n updated(el, binding) {\n const oldCleanup = (el as any)[KEYBOARD_ATTR]?.cleanup\n if (oldCleanup) oldCleanup()\n\n const options = parseBinding(binding)\n if (!options.enabled) return\n\n const handleFocus = () => {\n el.blur()\n options.onOpen?.(el)\n }\n\n el.addEventListener('focus', handleFocus)\n el.setAttribute('inputmode', 'none')\n\n ;(el as any)[KEYBOARD_ATTR] = {\n cleanup: () => {\n el.removeEventListener('focus', handleFocus)\n el.removeAttribute('inputmode')\n },\n }\n },\n\n unmounted(el) {\n const data = (el as any)[KEYBOARD_ATTR]\n if (data?.cleanup) data.cleanup()\n delete (el as any)[KEYBOARD_ATTR]\n },\n}\n\n/**\n * 解析指令绑定值\n */\nfunction parseBinding(binding: DirectiveBinding<VKeyboardBinding | string | boolean>): VKeyboardBinding & { enabled: boolean } {\n const value = binding.value\n\n if (value === false) {\n return { enabled: false }\n }\n\n if (value === true || value === undefined) {\n return { enabled: true }\n }\n\n if (typeof value === 'string') {\n return { enabled: true, type: value }\n }\n\n return {\n enabled: value.enabled !== false,\n ...value,\n }\n}\n"],"mappings":";;;;;;;;;;AAsBA,MAAM,gBAAgB;AAiBf,MAAM,YAAoG;CAC/G,QAAQ,IAAI,SAAS;EACnB,MAAM,UAAU,aAAa,OAAO;EACpC,IAAI,CAAC,QAAQ,SAAS;EAEtB,MAAM,oBAAoB;GAExB,GAAG,KAAK;GACR,QAAQ,SAAS,EAAE;EACrB;EAEA,GAAG,iBAAiB,SAAS,WAAW;EACxC,GAAG,aAAa,aAAa,MAAM;EAGjC,GAAW,iBAAiB,EAC5B,eAAe;GACb,GAAG,oBAAoB,SAAS,WAAW;GAC3C,GAAG,gBAAgB,WAAW;EAChC,EACF;CACF;CAEA,QAAQ,IAAI,SAAS;EACnB,MAAM,aAAc,GAAW,cAAa,EAAG;EAC/C,IAAI,YAAY,WAAW;EAE3B,MAAM,UAAU,aAAa,OAAO;EACpC,IAAI,CAAC,QAAQ,SAAS;EAEtB,MAAM,oBAAoB;GACxB,GAAG,KAAK;GACR,QAAQ,SAAS,EAAE;EACrB;EAEA,GAAG,iBAAiB,SAAS,WAAW;EACxC,GAAG,aAAa,aAAa,MAAM;EAEjC,GAAW,iBAAiB,EAC5B,eAAe;GACb,GAAG,oBAAoB,SAAS,WAAW;GAC3C,GAAG,gBAAgB,WAAW;EAChC,EACF;CACF;CAEA,UAAU,IAAI;EACZ,MAAM,OAAQ,GAAW;EACzB,IAAI,MAAM,SAAS,KAAK,QAAQ;EAChC,OAAQ,GAAW;CACrB;AACF;AAKA,SAAS,aAAa,SAAyG;CAC7H,MAAM,QAAQ,QAAQ;CAEtB,IAAI,UAAU,OACZ,OAAO,EAAE,SAAS,MAAM;CAG1B,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B,OAAO,EAAE,SAAS,KAAK;CAGzB,IAAI,OAAO,UAAU,UACnB,OAAO;EAAE,SAAS;EAAM,MAAM;CAAM;CAGtC,OAAO;EACL,SAAS,MAAM,YAAY;EAC3B,GAAG;CACL;AACF"}
1
+ {"version":3,"file":"v-keyboard.js","names":[],"sources":["../../src/directives/v-keyboard.ts"],"sourcesContent":["/**\r\n * v-keyboard 指令\r\n * 自动在输入框聚焦时打开虚拟键盘\r\n * @module directives/v-keyboard\r\n */\r\n\r\nimport type { Directive, DirectiveBinding } from 'vue'\r\n\r\n/**\r\n * 指令绑定值\r\n */\r\nexport interface VKeyboardBinding {\r\n /** 键盘类型 */\r\n type?: string\r\n /** 是否启用 */\r\n enabled?: boolean\r\n /** 打开键盘回调 */\r\n onOpen?: (el: HTMLInputElement | HTMLTextAreaElement) => void\r\n /** 关闭键盘回调 */\r\n onClose?: () => void\r\n}\r\n\r\ninterface KeyboardDirectiveState {\r\n cleanup: () => void\r\n}\r\n\r\nconst directiveStates = new WeakMap<HTMLElement, KeyboardDirectiveState>()\r\n\r\n/**\r\n * v-keyboard 指令\r\n *\r\n * @example\r\n * ```html\r\n * <!-- 基础用法 -->\r\n * <input v-keyboard />\r\n *\r\n * <!-- 指定键盘类型 -->\r\n * <input v-keyboard=\"{ type: 'number' }\" />\r\n *\r\n * <!-- 配合回调 -->\r\n * <input v-keyboard=\"{ type: 'phone', onOpen: handleOpen }\" />\r\n * ```\r\n */\r\nexport const vKeyboard: Directive<\r\n HTMLInputElement | HTMLTextAreaElement,\r\n VKeyboardBinding | string | boolean\r\n> = {\r\n mounted(el, binding) {\r\n const options = parseBinding(binding)\r\n if (!options.enabled) return\r\n\r\n const handleFocus = () => {\r\n // 阻止原生键盘\r\n el.blur()\r\n options.onOpen?.(el)\r\n }\r\n\r\n el.addEventListener('focus', handleFocus)\r\n el.setAttribute('inputmode', 'none')\r\n\r\n // 存储清理函数\r\n directiveStates.set(el, {\r\n cleanup: () => {\r\n el.removeEventListener('focus', handleFocus)\r\n el.removeAttribute('inputmode')\r\n },\r\n })\r\n },\r\n\r\n updated(el, binding) {\r\n directiveStates.get(el)?.cleanup()\r\n directiveStates.delete(el)\r\n\r\n const options = parseBinding(binding)\r\n if (!options.enabled) return\r\n\r\n const handleFocus = () => {\r\n el.blur()\r\n options.onOpen?.(el)\r\n }\r\n\r\n el.addEventListener('focus', handleFocus)\r\n el.setAttribute('inputmode', 'none')\r\n\r\n directiveStates.set(el, {\r\n cleanup: () => {\r\n el.removeEventListener('focus', handleFocus)\r\n el.removeAttribute('inputmode')\r\n },\r\n })\r\n },\r\n\r\n unmounted(el) {\r\n directiveStates.get(el)?.cleanup()\r\n directiveStates.delete(el)\r\n },\r\n}\r\n\r\n/**\r\n * 解析指令绑定值\r\n */\r\nfunction parseBinding(\r\n binding: DirectiveBinding<VKeyboardBinding | string | boolean>\r\n): VKeyboardBinding & { enabled: boolean } {\r\n const value = binding.value\r\n\r\n if (value === false) {\r\n return { enabled: false }\r\n }\r\n\r\n if (value === true || value === undefined) {\r\n return { enabled: true }\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return { enabled: true, type: value }\r\n }\r\n\r\n return {\r\n enabled: value.enabled !== false,\r\n ...value,\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;AA0BA,MAAM,kCAAkB,IAAI,QAA6C;AAiBlE,MAAM,YAGT;CACF,QAAQ,IAAI,SAAS;EACnB,MAAM,UAAU,aAAa,OAAO;EACpC,IAAI,CAAC,QAAQ,SAAS;EAEtB,MAAM,oBAAoB;GAExB,GAAG,KAAK;GACR,QAAQ,SAAS,EAAE;EACrB;EAEA,GAAG,iBAAiB,SAAS,WAAW;EACxC,GAAG,aAAa,aAAa,MAAM;EAGnC,gBAAgB,IAAI,IAAI,EACtB,eAAe;GACb,GAAG,oBAAoB,SAAS,WAAW;GAC3C,GAAG,gBAAgB,WAAW;EAChC,EACF,CAAC;CACH;CAEA,QAAQ,IAAI,SAAS;EACnB,gBAAgB,IAAI,EAAE,CAAA,EAAG,QAAQ;EACjC,gBAAgB,OAAO,EAAE;EAEzB,MAAM,UAAU,aAAa,OAAO;EACpC,IAAI,CAAC,QAAQ,SAAS;EAEtB,MAAM,oBAAoB;GACxB,GAAG,KAAK;GACR,QAAQ,SAAS,EAAE;EACrB;EAEA,GAAG,iBAAiB,SAAS,WAAW;EACxC,GAAG,aAAa,aAAa,MAAM;EAEnC,gBAAgB,IAAI,IAAI,EACtB,eAAe;GACb,GAAG,oBAAoB,SAAS,WAAW;GAC3C,GAAG,gBAAgB,WAAW;EAChC,EACF,CAAC;CACH;CAEA,UAAU,IAAI;EACZ,gBAAgB,IAAI,EAAE,CAAA,EAAG,QAAQ;EACjC,gBAAgB,OAAO,EAAE;CAC3B;AACF;AAKA,SAAS,aACP,SACyC;CACzC,MAAM,QAAQ,QAAQ;CAEtB,IAAI,UAAU,OACZ,OAAO,EAAE,SAAS,MAAM;CAG1B,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B,OAAO,EAAE,SAAS,KAAK;CAGzB,IAAI,OAAO,UAAU,UACnB,OAAO;EAAE,SAAS;EAAM,MAAM;CAAM;CAGtC,OAAO;EACL,SAAS,MAAM,YAAY;EAC3B,GAAG;CACL;AACF"}
package/es/index.d.ts CHANGED
@@ -6,10 +6,10 @@
6
6
  import type { Plugin } from 'vue';
7
7
  export * from './components';
8
8
  export * from './composables';
9
- export * from './plugins';
10
9
  export * from './directives';
11
- export { createKeyboardManager, createPositionManager, createKeyboardRenderer, KeyboardManager, PositionManager, KeyboardRenderer, getLayout, registerLayout, registerLayouts, hasLayout, getAvailableLayouts, unregisterLayout, qwertyLayout, numberLayout, integerLayout, symbolLayout, symbolLayout2, licensePlateLayout, licensePlateProvinceLayout, licensePlateLetterLayout, licensePlateAlphanumericLayout, PROVINCES, PLATE_LETTERS, idcardLayout, phoneLayout, phoneSimpleLayout, amountLayout, amountSimpleLayout, bankcardLayout, verifycodeLayout, emailLayout, urlLayout, searchLayout, punctLayout, EMAIL_SUFFIXES, EventEmitter, isMobile, isTouchDevice, getDeviceType, getViewportInfo, vibrate, onViewportChange, getBoundingRect, onClickOutside, insertTextAtCursor, deleteCharBeforeCursor, shuffleArray, getRandomNumbers, getRandomLetters, getRandomAlphanumeric, createRandomNumberLayout, createRandomPinLayout, createRandomLetterLayout, createRandomMixedLayout, refreshRandomLayout, formatPhone, formatBankCard, formatAmount, formatIdCard, formatLicensePlate, formatVerifyCode, registerFormatter, getFormatter, applyFormatter, getTheme, registerTheme, getAvailableThemes, getAllThemes, setCurrentTheme, getCurrentTheme, themeToCSS, applyTheme, generateThemeStyle, mergeTheme, createTheme, miuiTheme, iosTheme, materialTheme, minimalTheme, darkTheme, presetThemes, defaultTheme, } from '@composy/keyboard-core';
12
- export type { KeyboardType, KeyType, KeyDefinition, KeyboardRow, KeyboardConfig, KeyboardState, KeyboardEventMap, KeyboardOptions, DeviceType, PopupPlacement, Position, Size, BoundingRect, PopupPositionConfig, PopupPositionResult, ViewportInfo, ThemeName, ThemeColors, ThemeSizes, ThemeEffects, ThemeConfig, ThemeCSSVariables, KeyboardRendererOptions, FormatterFunction, } from '@composy/keyboard-core';
10
+ export * from './plugins';
11
+ export { amountLayout, amountSimpleLayout, applyFormatter, applyTheme, bankcardLayout, createKeyboardManager, createKeyboardRenderer, createPositionManager, createRandomLetterLayout, createRandomMixedLayout, createRandomNumberLayout, createRandomPinLayout, createTheme, darkTheme, defaultTheme, deleteCharBeforeCursor, EMAIL_SUFFIXES, emailLayout, EventEmitter, formatAmount, formatBankCard, formatIdCard, formatLicensePlate, formatPhone, formatVerifyCode, generateThemeStyle, getAllThemes, getAvailableLayouts, getAvailableThemes, getBoundingRect, getCurrentTheme, getDeviceType, getFormatter, getLayout, getRandomAlphanumeric, getRandomLetters, getRandomNumbers, getTheme, getViewportInfo, hasLayout, idcardLayout, insertTextAtCursor, integerLayout, iosTheme, isMobile, isTouchDevice, KeyboardManager, KeyboardRenderer, licensePlateAlphanumericLayout, licensePlateLayout, licensePlateLetterLayout, licensePlateProvinceLayout, materialTheme, mergeTheme, minimalTheme, miuiTheme, numberLayout, onClickOutside, onViewportChange, phoneLayout, phoneSimpleLayout, PLATE_LETTERS, PositionManager, presetThemes, PROVINCES, punctLayout, qwertyLayout, refreshRandomLayout, registerFormatter, registerLayout, registerLayouts, registerTheme, searchLayout, setCurrentTheme, shuffleArray, symbolLayout, symbolLayout2, themeToCSS, unregisterLayout, urlLayout, verifycodeLayout, vibrate, } from '@composy/keyboard-core';
12
+ export type { BoundingRect, DeviceType, FormatterFunction, KeyboardConfig, KeyboardEventMap, KeyboardOptions, KeyboardRendererOptions, KeyboardRow, KeyboardState, KeyboardType, KeyDefinition, KeyType, PopupPlacement, PopupPositionConfig, PopupPositionResult, Position, Size, ThemeColors, ThemeConfig, ThemeCSSVariables, ThemeEffects, ThemeName, ThemeSizes, ViewportInfo, } from '@composy/keyboard-core';
13
13
  /**
14
14
  * 键盘插件配置
15
15
  */
@@ -39,4 +39,3 @@ export declare const KeyboardVuePlugin: Plugin;
39
39
  */
40
40
  export declare const KeyboardPlugin: import("vue").ObjectPlugin<any[]>;
41
41
  export default KeyboardVuePlugin;
42
- //# sourceMappingURL=index.d.ts.map
package/es/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,KAAK,CAAA;AAKtC,cAAc,cAAc,CAAA;AAG5B,cAAc,eAAe,CAAA;AAG7B,cAAc,WAAW,CAAA;AAGzB,cAAc,cAAc,CAAA;AAG5B,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,gBAAgB,EAGhB,SAAS,EACT,cAAc,EACd,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,SAAS,EACT,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EAGd,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EAEtB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EAGnB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EAGd,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,wBAAwB,CAAA;AAG/B,YAAY,EACV,YAAY,EACZ,OAAO,EACP,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EAEZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EAEjB,uBAAuB,EAEvB,iBAAiB,GAClB,MAAM,wBAAwB,CAAA;AAE/B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAY/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,mCAAoB,CAAA;AAG/C,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,KAAK,CAAA;AAStC,cAAc,cAAc,CAAA;AAG5B,cAAc,eAAe,CAAA;AAG7B,cAAc,cAAc,CAAA;AAG5B,cAAc,WAAW,CAAA;AAGzB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EAEd,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,WAAW,EAEX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,kBAAkB,EAElB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EAEZ,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAEhB,QAAQ,EACR,eAAe,EACf,SAAS,EAET,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,8BAA8B,EAC9B,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,OAAO,GACR,MAAM,wBAAwB,CAAA;AAG/B,YAAY,EACV,YAAY,EACZ,UAAU,EAEV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EAEf,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,YAAY,EAEZ,SAAS,EACT,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAA;AAE/B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAY/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,mCAAoB,CAAA;AAG/C,eAAe,iBAAiB,CAAA"}
package/es/index.js CHANGED
@@ -2,22 +2,19 @@
2
2
  * ***********************************
3
3
  * @composy/keyboard-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:42:14 *
5
+ * Build time: 2024-10-12 17:44:15 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
9
9
  */
10
10
  import KeyboardKey_default from "./components/KeyboardKey.js";
11
- import VirtualKeyboard_default from "./components/VirtualKeyboard.js";
12
11
  import { useKeyboard } from "./composables/useKeyboard.js";
13
12
  import { useKeyboardPopup } from "./composables/useKeyboardPopup.js";
13
+ import VirtualKeyboard_default from "./components/VirtualKeyboard.js";
14
14
  import KeyboardPopup_default from "./components/KeyboardPopup.js";
15
15
  import LicensePlateKeyboard_default from "./components/LicensePlateKeyboard.js";
16
- import "./components/index.js";
17
16
  import { vKeyboard } from "./directives/v-keyboard.js";
18
- import "./composables/index.js";
19
17
  import { KeyboardEnginePlugin } from "./plugins/engine-plugin.js";
20
- import "./plugins/index.js";
21
18
  import { EMAIL_SUFFIXES, EventEmitter, KeyboardManager, KeyboardRenderer, PLATE_LETTERS, PROVINCES, PositionManager, amountLayout, amountSimpleLayout, applyFormatter, applyTheme, bankcardLayout, createKeyboardManager, createKeyboardRenderer, createPositionManager, createRandomLetterLayout, createRandomMixedLayout, createRandomNumberLayout, createRandomPinLayout, createTheme, darkTheme, defaultTheme, deleteCharBeforeCursor, emailLayout, formatAmount, formatBankCard, formatIdCard, formatLicensePlate, formatPhone, formatVerifyCode, generateThemeStyle, getAllThemes, getAvailableLayouts, getAvailableThemes, getBoundingRect, getCurrentTheme, getDeviceType, getFormatter, getLayout, getRandomAlphanumeric, getRandomLetters, getRandomNumbers, getTheme, getViewportInfo, hasLayout, idcardLayout, insertTextAtCursor, integerLayout, iosTheme, isMobile, isTouchDevice, licensePlateAlphanumericLayout, licensePlateLayout, licensePlateLetterLayout, licensePlateProvinceLayout, materialTheme, mergeTheme, minimalTheme, miuiTheme, numberLayout, onClickOutside, onViewportChange, phoneLayout, phoneSimpleLayout, presetThemes, punctLayout, qwertyLayout, refreshRandomLayout, registerFormatter, registerLayout, registerLayouts, registerTheme, searchLayout, setCurrentTheme, shuffleArray, symbolLayout, symbolLayout2, themeToCSS, unregisterLayout, urlLayout, verifycodeLayout, vibrate } from "@composy/keyboard-core";
22
19
  //#region src/index.ts
23
20
  const KeyboardVuePlugin = { install(app, options = {}) {