zcw-shared 1.21.0 → 1.23.0

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 (474) hide show
  1. package/dist/functions/algorithm/binarySearch.d.ts +3 -0
  2. package/dist/functions/algorithm/binarySearch.js +58 -0
  3. package/dist/functions/algorithm/binarySearch.js.map +1 -0
  4. package/dist/functions/algorithm/canJump.d.ts +2 -0
  5. package/dist/functions/algorithm/canJump.js +27 -0
  6. package/dist/functions/algorithm/canJump.js.map +1 -0
  7. package/dist/functions/algorithm/climbStairs.d.ts +2 -0
  8. package/dist/functions/algorithm/climbStairs.js +27 -0
  9. package/dist/functions/algorithm/climbStairs.js.map +1 -0
  10. package/dist/functions/algorithm/coinChange.d.ts +2 -0
  11. package/dist/functions/algorithm/coinChange.js +25 -0
  12. package/dist/functions/algorithm/coinChange.js.map +1 -0
  13. package/dist/functions/algorithm/combinationSum.d.ts +1 -0
  14. package/dist/functions/algorithm/combinationSum.js +24 -0
  15. package/dist/functions/algorithm/combinationSum.js.map +1 -0
  16. package/dist/functions/algorithm/editDistance.d.ts +2 -0
  17. package/dist/functions/algorithm/editDistance.js +96 -0
  18. package/dist/functions/algorithm/editDistance.js.map +1 -0
  19. package/dist/functions/algorithm/generateParenthesis.d.ts +1 -0
  20. package/dist/functions/algorithm/generateParenthesis.js +18 -0
  21. package/dist/functions/algorithm/generateParenthesis.js.map +1 -0
  22. package/dist/functions/algorithm/kmp.d.ts +2 -0
  23. package/dist/functions/algorithm/kmp.js +58 -0
  24. package/dist/functions/algorithm/kmp.js.map +1 -0
  25. package/dist/functions/algorithm/knapsack01.d.ts +2 -0
  26. package/dist/functions/algorithm/knapsack01.js +34 -0
  27. package/dist/functions/algorithm/knapsack01.js.map +1 -0
  28. package/dist/functions/algorithm/lengthOfLongestSubstring.d.ts +2 -0
  29. package/dist/functions/algorithm/lengthOfLongestSubstring.js +33 -0
  30. package/dist/functions/algorithm/lengthOfLongestSubstring.js.map +1 -0
  31. package/dist/functions/algorithm/longestCommonSubsequence.d.ts +2 -0
  32. package/dist/functions/algorithm/longestCommonSubsequence.js +37 -0
  33. package/dist/functions/algorithm/longestCommonSubsequence.js.map +1 -0
  34. package/dist/functions/algorithm/longestIncreasingSubsequence.d.ts +2 -0
  35. package/dist/functions/algorithm/longestIncreasingSubsequence.js +49 -0
  36. package/dist/functions/algorithm/longestIncreasingSubsequence.js.map +1 -0
  37. package/dist/functions/algorithm/maxArea.d.ts +1 -0
  38. package/dist/functions/algorithm/maxArea.js +19 -0
  39. package/dist/functions/algorithm/maxArea.js.map +1 -0
  40. package/dist/functions/algorithm/maxProfit.d.ts +2 -0
  41. package/dist/functions/algorithm/maxProfit.js +23 -0
  42. package/dist/functions/algorithm/maxProfit.js.map +1 -0
  43. package/dist/functions/algorithm/meetingRooms.d.ts +6 -0
  44. package/dist/functions/algorithm/meetingRooms.js +31 -0
  45. package/dist/functions/algorithm/meetingRooms.js.map +1 -0
  46. package/dist/functions/algorithm/mergeSort.d.ts +2 -0
  47. package/dist/functions/algorithm/mergeSort.js +72 -0
  48. package/dist/functions/algorithm/mergeSort.js.map +1 -0
  49. package/dist/functions/algorithm/minPathSum.d.ts +2 -0
  50. package/dist/functions/algorithm/minPathSum.js +39 -0
  51. package/dist/functions/algorithm/minPathSum.js.map +1 -0
  52. package/dist/functions/algorithm/minWindow.d.ts +1 -0
  53. package/dist/functions/algorithm/minWindow.js +40 -0
  54. package/dist/functions/algorithm/minWindow.js.map +1 -0
  55. package/dist/functions/algorithm/nQueens.d.ts +1 -0
  56. package/dist/functions/algorithm/nQueens.js +30 -0
  57. package/dist/functions/algorithm/nQueens.js.map +1 -0
  58. package/dist/functions/algorithm/numIslands.d.ts +2 -0
  59. package/dist/functions/algorithm/numIslands.js +59 -0
  60. package/dist/functions/algorithm/numIslands.js.map +1 -0
  61. package/dist/functions/algorithm/permutations.d.ts +1 -0
  62. package/dist/functions/algorithm/permutations.js +22 -0
  63. package/dist/functions/algorithm/permutations.js.map +1 -0
  64. package/dist/functions/algorithm/quickSort.d.ts +3 -0
  65. package/dist/functions/algorithm/quickSort.js +68 -0
  66. package/dist/functions/algorithm/quickSort.js.map +1 -0
  67. package/dist/functions/algorithm/rabinKarp.d.ts +1 -0
  68. package/dist/functions/algorithm/rabinKarp.js +40 -0
  69. package/dist/functions/algorithm/rabinKarp.js.map +1 -0
  70. package/dist/functions/algorithm/taskScheduler.d.ts +1 -0
  71. package/dist/functions/algorithm/taskScheduler.js +15 -0
  72. package/dist/functions/algorithm/taskScheduler.js.map +1 -0
  73. package/dist/functions/algorithm/threeSum.d.ts +2 -0
  74. package/dist/functions/algorithm/threeSum.js +56 -0
  75. package/dist/functions/algorithm/threeSum.js.map +1 -0
  76. package/dist/functions/algorithm/topologicalSort.d.ts +6 -0
  77. package/dist/functions/algorithm/topologicalSort.js +68 -0
  78. package/dist/functions/algorithm/topologicalSort.js.map +1 -0
  79. package/dist/functions/algorithm/trap.d.ts +2 -0
  80. package/dist/functions/algorithm/trap.js +51 -0
  81. package/dist/functions/algorithm/trap.js.map +1 -0
  82. package/dist/functions/algorithm/visualizeGarbageCollection.d.ts +44 -0
  83. package/dist/functions/algorithm/visualizeGarbageCollection.js +263 -0
  84. package/dist/functions/algorithm/visualizeGarbageCollection.js.map +1 -0
  85. package/dist/functions/array-object/chunk.d.ts +1 -0
  86. package/dist/functions/array-object/chunk.js +11 -0
  87. package/dist/functions/array-object/chunk.js.map +1 -0
  88. package/dist/functions/array-object/evolve.d.ts +3 -0
  89. package/dist/functions/array-object/evolve.js +15 -0
  90. package/dist/functions/array-object/evolve.js.map +1 -0
  91. package/dist/functions/array-object/flattenObject.d.ts +5 -0
  92. package/dist/functions/array-object/flattenObject.js +102 -0
  93. package/dist/functions/array-object/flattenObject.js.map +1 -0
  94. package/dist/functions/array-object/groupBy.d.ts +1 -0
  95. package/dist/functions/array-object/groupBy.js +14 -0
  96. package/dist/functions/array-object/groupBy.js.map +1 -0
  97. package/dist/functions/array-object/omit.d.ts +1 -0
  98. package/dist/functions/array-object/omit.js +8 -0
  99. package/dist/functions/array-object/omit.js.map +1 -0
  100. package/dist/functions/array-object/pick.d.ts +1 -0
  101. package/dist/functions/array-object/pick.js +10 -0
  102. package/dist/functions/array-object/pick.js.map +1 -0
  103. package/dist/functions/array-object/shuffle.d.ts +1 -0
  104. package/dist/functions/array-object/shuffle.js +9 -0
  105. package/dist/functions/array-object/shuffle.js.map +1 -0
  106. package/dist/functions/array-object/sortBy.d.ts +1 -0
  107. package/dist/functions/array-object/sortBy.js +13 -0
  108. package/dist/functions/array-object/sortBy.js.map +1 -0
  109. package/dist/functions/async/cachedAsync.d.ts +27 -0
  110. package/dist/functions/async/cachedAsync.js +123 -0
  111. package/dist/functions/async/cachedAsync.js.map +1 -0
  112. package/dist/functions/async/promiseLimit.d.ts +10 -0
  113. package/dist/functions/async/promiseLimit.js +125 -0
  114. package/dist/functions/async/promiseLimit.js.map +1 -0
  115. package/dist/functions/async/retryWithBackoff.d.ts +12 -0
  116. package/dist/functions/async/retryWithBackoff.js +29 -0
  117. package/dist/functions/async/retryWithBackoff.js.map +1 -0
  118. package/dist/functions/browser/detectBrowser.d.ts +39 -0
  119. package/dist/functions/browser/detectBrowser.js +193 -0
  120. package/dist/functions/browser/detectBrowser.js.map +1 -0
  121. package/dist/functions/browser/detectOS.d.ts +5 -0
  122. package/dist/functions/browser/detectOS.js +20 -0
  123. package/dist/functions/browser/detectOS.js.map +1 -0
  124. package/dist/functions/browser/isMobile.d.ts +6 -0
  125. package/dist/functions/browser/isMobile.js +5 -0
  126. package/dist/functions/browser/isMobile.js.map +1 -0
  127. package/dist/functions/data-structures/AVLTree.d.ts +19 -0
  128. package/dist/functions/data-structures/AVLTree.js +197 -0
  129. package/dist/functions/data-structures/AVLTree.js.map +1 -0
  130. package/dist/functions/data-structures/BinarySearchTree.d.ts +19 -0
  131. package/dist/functions/data-structures/BinarySearchTree.js +150 -0
  132. package/dist/functions/data-structures/BinarySearchTree.js.map +1 -0
  133. package/dist/functions/data-structures/Graph.d.ts +19 -0
  134. package/dist/functions/data-structures/Graph.js +190 -0
  135. package/dist/functions/data-structures/Graph.js.map +1 -0
  136. package/dist/functions/data-structures/HashMap.d.ts +13 -0
  137. package/dist/functions/data-structures/HashMap.js +128 -0
  138. package/dist/functions/data-structures/HashMap.js.map +1 -0
  139. package/dist/functions/data-structures/LRUCache.d.ts +41 -0
  140. package/dist/functions/data-structures/LRUCache.js +182 -0
  141. package/dist/functions/data-structures/LRUCache.js.map +1 -0
  142. package/dist/functions/data-structures/Trie.d.ts +16 -0
  143. package/dist/functions/data-structures/Trie.js +127 -0
  144. package/dist/functions/data-structures/Trie.js.map +1 -0
  145. package/dist/functions/data-structures/UnionFind.d.ts +8 -0
  146. package/dist/functions/data-structures/UnionFind.js +53 -0
  147. package/dist/functions/data-structures/UnionFind.js.map +1 -0
  148. package/dist/functions/date/dateRange.d.ts +1 -0
  149. package/dist/functions/date/dateRange.js +18 -0
  150. package/dist/functions/date/dateRange.js.map +1 -0
  151. package/dist/functions/date/formatDate.d.ts +1 -0
  152. package/dist/functions/date/formatDate.js +21 -0
  153. package/dist/functions/date/formatDate.js.map +1 -0
  154. package/dist/functions/date/timeAgo.d.ts +1 -0
  155. package/dist/functions/date/timeAgo.js +49 -0
  156. package/dist/functions/date/timeAgo.js.map +1 -0
  157. package/dist/functions/dom/createThrottledEventListener.d.ts +11 -0
  158. package/dist/functions/dom/createThrottledEventListener.js +51 -0
  159. package/dist/functions/dom/createThrottledEventListener.js.map +1 -0
  160. package/dist/functions/file/formatFileSize.d.ts +1 -0
  161. package/dist/functions/file/formatFileSize.js +16 -0
  162. package/dist/functions/file/formatFileSize.js.map +1 -0
  163. package/dist/functions/file/getFileExtension.d.ts +5 -0
  164. package/dist/functions/file/getFileExtension.js +18 -0
  165. package/dist/functions/file/getFileExtension.js.map +1 -0
  166. package/dist/functions/functional/cond.d.ts +1 -0
  167. package/dist/functions/functional/cond.js +15 -0
  168. package/dist/functions/functional/cond.js.map +1 -0
  169. package/dist/functions/functional/curryAdvanced.d.ts +8 -0
  170. package/dist/functions/functional/curryAdvanced.js +87 -0
  171. package/dist/functions/functional/curryAdvanced.js.map +1 -0
  172. package/dist/functions/functional/flow.d.ts +1 -0
  173. package/dist/functions/functional/flow.js +14 -0
  174. package/dist/functions/functional/flow.js.map +1 -0
  175. package/dist/functions/functional/partial.d.ts +1 -0
  176. package/dist/functions/functional/partial.js +13 -0
  177. package/dist/functions/functional/partial.js.map +1 -0
  178. package/dist/functions/functional/tap.d.ts +1 -0
  179. package/dist/functions/functional/tap.js +14 -0
  180. package/dist/functions/functional/tap.js.map +1 -0
  181. package/dist/functions/functional/until.d.ts +1 -0
  182. package/dist/functions/functional/until.js +10 -0
  183. package/dist/functions/functional/until.js.map +1 -0
  184. package/dist/functions/math/average.d.ts +1 -0
  185. package/dist/functions/math/average.js +8 -0
  186. package/dist/functions/math/average.js.map +1 -0
  187. package/dist/functions/math/median.d.ts +1 -0
  188. package/dist/functions/math/median.js +14 -0
  189. package/dist/functions/math/median.js.map +1 -0
  190. package/dist/functions/math/percentile.d.ts +1 -0
  191. package/dist/functions/math/percentile.js +18 -0
  192. package/dist/functions/math/percentile.js.map +1 -0
  193. package/dist/functions/math/sum.d.ts +1 -0
  194. package/dist/functions/math/sum.js +4 -0
  195. package/dist/functions/math/sum.js.map +1 -0
  196. package/dist/functions/number/clamp.d.ts +1 -0
  197. package/dist/functions/number/clamp.js +7 -0
  198. package/dist/functions/number/clamp.js.map +1 -0
  199. package/dist/functions/number/formatNumber.d.ts +8 -0
  200. package/dist/functions/number/formatNumber.js +16 -0
  201. package/dist/functions/number/formatNumber.js.map +1 -0
  202. package/dist/functions/number/random.d.ts +4 -0
  203. package/dist/functions/number/random.js +9 -0
  204. package/dist/functions/number/random.js.map +1 -0
  205. package/dist/functions/number/range.d.ts +1 -0
  206. package/dist/functions/number/range.js +18 -0
  207. package/dist/functions/number/range.js.map +1 -0
  208. package/dist/functions/patterns/EventEmitter.d.ts +32 -0
  209. package/dist/functions/patterns/EventEmitter.js +108 -0
  210. package/dist/functions/patterns/EventEmitter.js.map +1 -0
  211. package/dist/functions/patterns/adapter.d.ts +8 -0
  212. package/dist/functions/patterns/adapter.js +14 -0
  213. package/dist/functions/patterns/adapter.js.map +1 -0
  214. package/dist/functions/patterns/builder.d.ts +9 -0
  215. package/dist/functions/patterns/builder.js +28 -0
  216. package/dist/functions/patterns/builder.js.map +1 -0
  217. package/dist/functions/patterns/chainOfResponsibility.d.ts +9 -0
  218. package/dist/functions/patterns/chainOfResponsibility.js +19 -0
  219. package/dist/functions/patterns/chainOfResponsibility.js.map +1 -0
  220. package/dist/functions/patterns/command.d.ts +15 -0
  221. package/dist/functions/patterns/command.js +49 -0
  222. package/dist/functions/patterns/command.js.map +1 -0
  223. package/dist/functions/patterns/decorator.d.ts +10 -0
  224. package/dist/functions/patterns/decorator.js +72 -0
  225. package/dist/functions/patterns/decorator.js.map +1 -0
  226. package/dist/functions/patterns/factory.d.ts +8 -0
  227. package/dist/functions/patterns/factory.js +25 -0
  228. package/dist/functions/patterns/factory.js.map +1 -0
  229. package/dist/functions/patterns/observer.d.ts +19 -0
  230. package/dist/functions/patterns/observer.js +89 -0
  231. package/dist/functions/patterns/observer.js.map +1 -0
  232. package/dist/functions/patterns/prototype.d.ts +4 -0
  233. package/dist/functions/patterns/prototype.js +30 -0
  234. package/dist/functions/patterns/prototype.js.map +1 -0
  235. package/dist/functions/patterns/proxy.d.ts +8 -0
  236. package/dist/functions/patterns/proxy.js +41 -0
  237. package/dist/functions/patterns/proxy.js.map +1 -0
  238. package/dist/functions/patterns/singleton.d.ts +11 -0
  239. package/dist/functions/patterns/singleton.js +32 -0
  240. package/dist/functions/patterns/singleton.js.map +1 -0
  241. package/dist/functions/patterns/strategy.d.ts +12 -0
  242. package/dist/functions/patterns/strategy.js +34 -0
  243. package/dist/functions/patterns/strategy.js.map +1 -0
  244. package/dist/functions/patterns/templateMethod.d.ts +8 -0
  245. package/dist/functions/patterns/templateMethod.js +19 -0
  246. package/dist/functions/patterns/templateMethod.js.map +1 -0
  247. package/dist/functions/patterns/usePluginSystem.d.ts +11 -0
  248. package/dist/functions/patterns/usePluginSystem.js +34 -0
  249. package/dist/functions/patterns/usePluginSystem.js.map +1 -0
  250. package/dist/functions/performance/once.d.ts +1 -0
  251. package/dist/functions/performance/once.js +13 -0
  252. package/dist/functions/performance/once.js.map +1 -0
  253. package/dist/functions/performance/useCache.d.ts +18 -0
  254. package/dist/functions/performance/useCache.js +82 -0
  255. package/dist/functions/performance/useCache.js.map +1 -0
  256. package/dist/functions/principles/MyPromise.d.ts +32 -0
  257. package/dist/functions/principles/MyPromise.js +254 -0
  258. package/dist/functions/principles/MyPromise.js.map +1 -0
  259. package/dist/functions/promise/sleep.d.ts +5 -0
  260. package/dist/functions/promise/sleep.js +6 -0
  261. package/dist/functions/promise/sleep.js.map +1 -0
  262. package/dist/functions/promise/timeout.d.ts +6 -0
  263. package/dist/functions/promise/timeout.js +12 -0
  264. package/dist/functions/promise/timeout.js.map +1 -0
  265. package/dist/functions/storage/useLocalStorage.d.ts +8 -0
  266. package/dist/functions/storage/useLocalStorage.js +101 -0
  267. package/dist/functions/storage/useLocalStorage.js.map +1 -0
  268. package/dist/functions/storage/useSessionStorage.d.ts +8 -0
  269. package/dist/functions/storage/useSessionStorage.js +101 -0
  270. package/dist/functions/storage/useSessionStorage.js.map +1 -0
  271. package/dist/functions/storage/useStorage.d.ts +13 -0
  272. package/dist/functions/storage/useStorage.js +62 -0
  273. package/dist/functions/storage/useStorage.js.map +1 -0
  274. package/dist/functions/storage/useStorageWithIndexedDB.d.ts +8 -0
  275. package/dist/functions/storage/useStorageWithIndexedDB.js +132 -0
  276. package/dist/functions/storage/useStorageWithIndexedDB.js.map +1 -0
  277. package/dist/functions/string/testRegex.d.ts +20 -0
  278. package/dist/functions/string/testRegex.js +300 -0
  279. package/dist/functions/string/testRegex.js.map +1 -0
  280. package/dist/functions/string/visualizeRegexSteps.d.ts +39 -0
  281. package/dist/functions/string/visualizeRegexSteps.js +446 -0
  282. package/dist/functions/string/visualizeRegexSteps.js.map +1 -0
  283. package/dist/functions/tencent-cloud/upload.cos.d.ts +20 -0
  284. package/dist/functions/tencent-cloud/upload.cos.js +127 -0
  285. package/dist/functions/tencent-cloud/upload.cos.js.map +1 -0
  286. package/dist/functions/tree/buildTree.d.ts +7 -0
  287. package/dist/functions/tree/buildTree.js +27 -0
  288. package/dist/functions/tree/buildTree.js.map +1 -0
  289. package/dist/functions/tree/filterTree.d.ts +4 -0
  290. package/dist/functions/tree/filterTree.js +21 -0
  291. package/dist/functions/tree/filterTree.js.map +1 -0
  292. package/dist/functions/tree/findNode.d.ts +4 -0
  293. package/dist/functions/tree/findNode.js +21 -0
  294. package/dist/functions/tree/findNode.js.map +1 -0
  295. package/dist/functions/tree/flattenTree.d.ts +6 -0
  296. package/dist/functions/tree/flattenTree.js +21 -0
  297. package/dist/functions/tree/flattenTree.js.map +1 -0
  298. package/dist/functions/url/buildQueryString.d.ts +5 -0
  299. package/dist/functions/url/buildQueryString.js +15 -0
  300. package/dist/functions/url/buildQueryString.js.map +1 -0
  301. package/dist/functions/url/parseUrl.d.ts +11 -0
  302. package/dist/functions/url/parseUrl.js +34 -0
  303. package/dist/functions/url/parseUrl.js.map +1 -0
  304. package/dist/functions/utils/cachedAsync.d.ts +27 -0
  305. package/dist/functions/utils/cachedAsync.js +123 -0
  306. package/dist/functions/utils/cachedAsync.js.map +1 -0
  307. package/dist/functions/utils/errorManager.d.ts +63 -0
  308. package/dist/functions/utils/errorManager.js +199 -0
  309. package/dist/functions/utils/errorManager.js.map +1 -0
  310. package/dist/functions/utils/useAltool.d.ts +39 -0
  311. package/dist/functions/utils/useAltool.js +350 -0
  312. package/dist/functions/utils/useAltool.js.map +1 -0
  313. package/dist/functions/utils/vueDiff.d.ts +38 -0
  314. package/dist/functions/utils/vueDiff.js +333 -0
  315. package/dist/functions/utils/vueDiff.js.map +1 -0
  316. package/dist/functions/validation/isEmail.d.ts +1 -0
  317. package/dist/functions/validation/isEmail.js +8 -0
  318. package/dist/functions/validation/isEmail.js.map +1 -0
  319. package/dist/functions/validation/isIdCard.d.ts +1 -0
  320. package/dist/functions/validation/isIdCard.js +49 -0
  321. package/dist/functions/validation/isIdCard.js.map +1 -0
  322. package/dist/functions/validation/isIpAddress.d.ts +1 -0
  323. package/dist/functions/validation/isIpAddress.js +15 -0
  324. package/dist/functions/validation/isIpAddress.js.map +1 -0
  325. package/dist/functions/validation/isPhone.d.ts +1 -0
  326. package/dist/functions/validation/isPhone.js +12 -0
  327. package/dist/functions/validation/isPhone.js.map +1 -0
  328. package/dist/functions/validation/isUrl.d.ts +5 -0
  329. package/dist/functions/validation/isUrl.js +33 -0
  330. package/dist/functions/validation/isUrl.js.map +1 -0
  331. package/dist/reactive/createReactive.d.ts +10 -0
  332. package/dist/reactive/createReactive.js +50 -0
  333. package/dist/reactive/createReactive.js.map +1 -0
  334. package/dist/reactive/createReactiveErrorManager.d.ts +63 -0
  335. package/dist/reactive/createReactiveErrorManager.js +199 -0
  336. package/dist/reactive/createReactiveErrorManager.js.map +1 -0
  337. package/dist/reactive/createReactiveI18n.d.ts +27 -0
  338. package/dist/reactive/createReactiveI18n.js +119 -0
  339. package/dist/reactive/createReactiveI18n.js.map +1 -0
  340. package/dist/reactive/createReactivePermission.d.ts +40 -0
  341. package/dist/reactive/createReactivePermission.js +189 -0
  342. package/dist/reactive/createReactivePermission.js.map +1 -0
  343. package/dist/reactive/createReactivePinia.d.ts +52 -0
  344. package/dist/reactive/createReactivePinia.js +183 -0
  345. package/dist/reactive/createReactivePinia.js.map +1 -0
  346. package/dist/reactive/useReactiveCookie.d.ts +19 -0
  347. package/dist/reactive/useReactiveCookie.js +84 -0
  348. package/dist/reactive/useReactiveCookie.js.map +1 -0
  349. package/dist/reactive/useReactiveSSE.d.ts +46 -0
  350. package/dist/reactive/useReactiveSSE.js +212 -0
  351. package/dist/reactive/useReactiveSSE.js.map +1 -0
  352. package/dist/reactive/useReactiveWebsocket.d.ts +50 -0
  353. package/dist/reactive/useReactiveWebsocket.js +250 -0
  354. package/dist/reactive/useReactiveWebsocket.js.map +1 -0
  355. package/dist/vue-hooks/browser/useBattery.d.ts +16 -0
  356. package/dist/vue-hooks/browser/useBattery.js +70 -0
  357. package/dist/vue-hooks/browser/useBattery.js.map +1 -0
  358. package/dist/vue-hooks/browser/useBluetooth.d.ts +25 -0
  359. package/dist/vue-hooks/browser/useBluetooth.js +72 -0
  360. package/dist/vue-hooks/browser/useBluetooth.js.map +1 -0
  361. package/dist/vue-hooks/browser/useCamera.d.ts +21 -0
  362. package/dist/vue-hooks/browser/useCamera.js +52 -0
  363. package/dist/vue-hooks/browser/useCamera.js.map +1 -0
  364. package/dist/vue-hooks/browser/useClipboard.d.ts +18 -0
  365. package/dist/vue-hooks/browser/useClipboard.js +33 -0
  366. package/dist/vue-hooks/browser/useClipboard.js.map +1 -0
  367. package/dist/vue-hooks/browser/useFullscreen.d.ts +20 -0
  368. package/dist/vue-hooks/browser/useFullscreen.js +73 -0
  369. package/dist/vue-hooks/browser/useFullscreen.js.map +1 -0
  370. package/dist/vue-hooks/browser/useGamepad.d.ts +25 -0
  371. package/dist/vue-hooks/browser/useGamepad.js +69 -0
  372. package/dist/vue-hooks/browser/useGamepad.js.map +1 -0
  373. package/dist/vue-hooks/browser/useGeolocation.d.ts +24 -0
  374. package/dist/vue-hooks/browser/useGeolocation.js +85 -0
  375. package/dist/vue-hooks/browser/useGeolocation.js.map +1 -0
  376. package/dist/vue-hooks/browser/useMediaSession.d.ts +19 -0
  377. package/dist/vue-hooks/browser/useMediaSession.js +71 -0
  378. package/dist/vue-hooks/browser/useMediaSession.js.map +1 -0
  379. package/dist/vue-hooks/browser/useMicrophone.d.ts +23 -0
  380. package/dist/vue-hooks/browser/useMicrophone.js +66 -0
  381. package/dist/vue-hooks/browser/useMicrophone.js.map +1 -0
  382. package/dist/vue-hooks/browser/useNetwork.d.ts +23 -0
  383. package/dist/vue-hooks/browser/useNetwork.js +57 -0
  384. package/dist/vue-hooks/browser/useNetwork.js.map +1 -0
  385. package/dist/vue-hooks/browser/useOrientation.d.ts +22 -0
  386. package/dist/vue-hooks/browser/useOrientation.js +54 -0
  387. package/dist/vue-hooks/browser/useOrientation.js.map +1 -0
  388. package/dist/vue-hooks/browser/usePageVisibility.d.ts +15 -0
  389. package/dist/vue-hooks/browser/usePageVisibility.js +25 -0
  390. package/dist/vue-hooks/browser/usePageVisibility.js.map +1 -0
  391. package/dist/vue-hooks/browser/useScreenOrientation.d.ts +24 -0
  392. package/dist/vue-hooks/browser/useScreenOrientation.js +67 -0
  393. package/dist/vue-hooks/browser/useScreenOrientation.js.map +1 -0
  394. package/dist/vue-hooks/browser/useScreenWakeLock.d.ts +15 -0
  395. package/dist/vue-hooks/browser/useScreenWakeLock.js +57 -0
  396. package/dist/vue-hooks/browser/useScreenWakeLock.js.map +1 -0
  397. package/dist/vue-hooks/browser/useShare.d.ts +21 -0
  398. package/dist/vue-hooks/browser/useShare.js +39 -0
  399. package/dist/vue-hooks/browser/useShare.js.map +1 -0
  400. package/dist/vue-hooks/browser/useVibration.d.ts +17 -0
  401. package/dist/vue-hooks/browser/useVibration.js +40 -0
  402. package/dist/vue-hooks/browser/useVibration.js.map +1 -0
  403. package/dist/vue-hooks/dom/useClickOutside.d.ts +9 -0
  404. package/dist/vue-hooks/dom/useClickOutside.js +16 -0
  405. package/dist/vue-hooks/dom/useClickOutside.js.map +1 -0
  406. package/dist/vue-hooks/dom/useDraggable.d.ts +33 -0
  407. package/dist/vue-hooks/dom/useDraggable.js +163 -0
  408. package/dist/vue-hooks/dom/useDraggable.js.map +1 -0
  409. package/dist/vue-hooks/dom/useEventListener.d.ts +11 -0
  410. package/dist/vue-hooks/dom/useEventListener.js +18 -0
  411. package/dist/vue-hooks/dom/useEventListener.js.map +1 -0
  412. package/dist/vue-hooks/dom/useResizable.d.ts +50 -0
  413. package/dist/vue-hooks/dom/useResizable.js +178 -0
  414. package/dist/vue-hooks/dom/useResizable.js.map +1 -0
  415. package/dist/vue-hooks/history/useDebouncedRefHistory.d.ts +17 -0
  416. package/dist/vue-hooks/history/useDebouncedRefHistory.js +46 -0
  417. package/dist/vue-hooks/history/useDebouncedRefHistory.js.map +1 -0
  418. package/dist/vue-hooks/history/useManualRefHistory.d.ts +26 -0
  419. package/dist/vue-hooks/history/useManualRefHistory.js +80 -0
  420. package/dist/vue-hooks/history/useManualRefHistory.js.map +1 -0
  421. package/dist/vue-hooks/history/useRefHistory.d.ts +15 -0
  422. package/dist/vue-hooks/history/useRefHistory.js +41 -0
  423. package/dist/vue-hooks/history/useRefHistory.js.map +1 -0
  424. package/dist/vue-hooks/state/createGlobalState.d.ts +2 -0
  425. package/dist/vue-hooks/state/createGlobalState.js +11 -0
  426. package/dist/vue-hooks/state/createGlobalState.js.map +1 -0
  427. package/dist/vue-hooks/state/createInjectionState.d.ts +10 -0
  428. package/dist/vue-hooks/state/createInjectionState.js +20 -0
  429. package/dist/vue-hooks/state/createInjectionState.js.map +1 -0
  430. package/dist/vue-hooks/state/createSharedComposable.d.ts +2 -0
  431. package/dist/vue-hooks/state/createSharedComposable.js +13 -0
  432. package/dist/vue-hooks/state/createSharedComposable.js.map +1 -0
  433. package/dist/vue-hooks/state/injectLocal.d.ts +8 -0
  434. package/dist/vue-hooks/state/injectLocal.js +12 -0
  435. package/dist/vue-hooks/state/injectLocal.js.map +1 -0
  436. package/dist/vue-hooks/state/provideLocal.d.ts +7 -0
  437. package/dist/vue-hooks/state/provideLocal.js +7 -0
  438. package/dist/vue-hooks/state/provideLocal.js.map +1 -0
  439. package/dist/vue-hooks/state/useAsyncState.d.ts +27 -0
  440. package/dist/vue-hooks/state/useAsyncState.js +46 -0
  441. package/dist/vue-hooks/state/useAsyncState.js.map +1 -0
  442. package/dist/vue-hooks/state/useCounter.d.ts +17 -0
  443. package/dist/vue-hooks/state/useCounter.js +44 -0
  444. package/dist/vue-hooks/state/useCounter.js.map +1 -0
  445. package/dist/vue-hooks/state/useToggle.d.ts +13 -0
  446. package/dist/vue-hooks/state/useToggle.js +23 -0
  447. package/dist/vue-hooks/state/useToggle.js.map +1 -0
  448. package/dist/vue-hooks/time/useInterval.d.ts +16 -0
  449. package/dist/vue-hooks/time/useInterval.js +33 -0
  450. package/dist/vue-hooks/time/useInterval.js.map +1 -0
  451. package/dist/vue-hooks/time/useTimeout.d.ts +17 -0
  452. package/dist/vue-hooks/time/useTimeout.js +40 -0
  453. package/dist/vue-hooks/time/useTimeout.js.map +1 -0
  454. package/dist/vue-hooks/worker/useWebWorker.d.ts +25 -0
  455. package/dist/vue-hooks/worker/useWebWorker.js +207 -0
  456. package/dist/vue-hooks/worker/useWebWorker.js.map +1 -0
  457. package/dist/vue-hooks/worker/useWorkerFunction.d.ts +26 -0
  458. package/dist/vue-hooks/worker/useWorkerFunction.js +191 -0
  459. package/dist/vue-hooks/worker/useWorkerFunction.js.map +1 -0
  460. package/dist/vue-hooks/worker/useWorkerPool.d.ts +33 -0
  461. package/dist/vue-hooks/worker/useWorkerPool.js +247 -0
  462. package/dist/vue-hooks/worker/useWorkerPool.js.map +1 -0
  463. package/package.json +178 -65
  464. package/references/browser.d.ts +16 -0
  465. package/references/device.d.ts +340 -0
  466. package/references/dom.d.ts +31 -6
  467. package/references/eventsource.d.ts +121 -0
  468. package/references/node.d.ts +2 -0
  469. package/references/tencent-cloud.d.ts +38 -0
  470. package/references/websocket.d.ts +121 -0
  471. package/types/algorithm-visual.d.ts +79 -0
  472. package/types/algorithm.d.ts +85 -0
  473. package/types/tencent-cloud.d.ts +29 -0
  474. package/types/vue.d.ts +22 -0
@@ -0,0 +1,250 @@
1
+ export var WebSocketStatus;
2
+ (function (WebSocketStatus) {
3
+ WebSocketStatus["CONNECTING"] = "CONNECTING";
4
+ WebSocketStatus["CONNECTED"] = "CONNECTED";
5
+ WebSocketStatus["DISCONNECTED"] = "DISCONNECTED";
6
+ WebSocketStatus["ERROR"] = "ERROR";
7
+ })(WebSocketStatus || (WebSocketStatus = {}));
8
+ export function useReactiveWebsocket(url, options = {}, deps) {
9
+ const defaultOptions = {
10
+ protocols: [],
11
+ immediate: true,
12
+ heartbeat: 0,
13
+ heartbeatMessage: 'ping',
14
+ heartbeatTimeout: 5000,
15
+ reconnect: {
16
+ enabled: true,
17
+ delay: 3000,
18
+ maxRetries: 5,
19
+ retryDelayMultiplier: 1.5
20
+ },
21
+ onConnected: () => { },
22
+ onDisconnected: () => { },
23
+ onError: () => { },
24
+ onMessage: () => { }
25
+ };
26
+ const config = { ...defaultOptions, ...options };
27
+ if (options.reconnect) {
28
+ config.reconnect = { ...defaultOptions.reconnect, ...options.reconnect };
29
+ }
30
+ const state = {
31
+ status: WebSocketStatus.DISCONNECTED,
32
+ data: null,
33
+ error: null,
34
+ retryCount: 0,
35
+ ws: null
36
+ };
37
+ const subscribers = new Set();
38
+ const notify = () => {
39
+ subscribers.forEach(listener => listener());
40
+ };
41
+ let heartbeatTimer = null;
42
+ let reconnectTimer = null;
43
+ let isManualClose = false;
44
+ let isReconnecting = false;
45
+ let lastMessageTime = 0;
46
+ const clearHeartbeat = () => {
47
+ if (heartbeatTimer !== null) {
48
+ deps.clearTimeout(heartbeatTimer);
49
+ heartbeatTimer = null;
50
+ }
51
+ };
52
+ const clearReconnect = () => {
53
+ if (reconnectTimer !== null) {
54
+ deps.clearTimeout(reconnectTimer);
55
+ reconnectTimer = null;
56
+ }
57
+ };
58
+ const startHeartbeat = () => {
59
+ clearHeartbeat();
60
+ if (config.heartbeat <= 0 || !state.ws) {
61
+ return;
62
+ }
63
+ const checkHeartbeat = () => {
64
+ if (!state.ws || state.ws.readyState !== deps.WebSocket.OPEN) {
65
+ deps.log?.('[心跳] 连接未打开,停止心跳检测');
66
+ return;
67
+ }
68
+ const now = Date.now();
69
+ const timeSinceLastMessage = now - lastMessageTime;
70
+ const timeoutThreshold = config.heartbeat + config.heartbeatTimeout;
71
+ deps.log?.(`[心跳] 检查: 距上次消息 ${timeSinceLastMessage}ms, 超时阈值 ${timeoutThreshold}ms`);
72
+ if (timeSinceLastMessage > timeoutThreshold) {
73
+ deps.log?.('[心跳] ⚠️ 检测到超时,主动断开并重连');
74
+ clearHeartbeat();
75
+ const oldWs = state.ws;
76
+ state.ws = null;
77
+ state.status = WebSocketStatus.DISCONNECTED;
78
+ notify();
79
+ try {
80
+ oldWs.close();
81
+ }
82
+ catch (error) {
83
+ deps.log?.('[心跳] 关闭连接失败(忽略):', error);
84
+ }
85
+ if (!isManualClose && !isReconnecting) {
86
+ deps.log?.('[心跳] 开始重连流程');
87
+ attemptReconnect();
88
+ }
89
+ return;
90
+ }
91
+ try {
92
+ deps.log?.('[心跳] 发送心跳消息');
93
+ state.ws.send(config.heartbeatMessage);
94
+ }
95
+ catch (error) {
96
+ deps.log?.('[心跳] 发送失败:', error);
97
+ }
98
+ heartbeatTimer = deps.setTimeout(checkHeartbeat, config.heartbeat);
99
+ };
100
+ heartbeatTimer = deps.setTimeout(checkHeartbeat, config.heartbeat);
101
+ };
102
+ const attemptReconnect = () => {
103
+ if (!config.reconnect.enabled || isManualClose || isReconnecting) {
104
+ return;
105
+ }
106
+ const maxRetries = config.reconnect.maxRetries || 0;
107
+ if (maxRetries > 0 && state.retryCount >= maxRetries) {
108
+ state.status = WebSocketStatus.ERROR;
109
+ state.error = new Error(`重连失败:已达到最大重连次数 ${maxRetries}`);
110
+ notify();
111
+ isReconnecting = false;
112
+ return;
113
+ }
114
+ const delay = (config.reconnect.delay || 3000) * Math.pow(config.reconnect.retryDelayMultiplier || 1, state.retryCount);
115
+ isReconnecting = true;
116
+ clearReconnect();
117
+ reconnectTimer = deps.setTimeout(() => {
118
+ state.retryCount++;
119
+ try {
120
+ connect();
121
+ }
122
+ finally {
123
+ isReconnecting = false;
124
+ }
125
+ }, delay);
126
+ };
127
+ const connect = () => {
128
+ if (state.ws && state.ws.readyState !== deps.WebSocket.CLOSED) {
129
+ deps.log?.('[连接] 已有活跃连接,跳过');
130
+ return;
131
+ }
132
+ isManualClose = false;
133
+ state.status = WebSocketStatus.CONNECTING;
134
+ state.error = null;
135
+ notify();
136
+ try {
137
+ const ws = new deps.WebSocket(url, config.protocols);
138
+ ws.onopen = (event) => {
139
+ if (isManualClose) {
140
+ deps.log?.('[连接] 连接建立但已标记为手动关闭,忽略');
141
+ ws.close();
142
+ return;
143
+ }
144
+ state.status = WebSocketStatus.CONNECTED;
145
+ state.error = null;
146
+ state.retryCount = 0;
147
+ state.ws = ws;
148
+ notify();
149
+ lastMessageTime = Date.now();
150
+ deps.log?.('[连接] 连接成功,记录时间:', lastMessageTime);
151
+ if (config.heartbeat > 0) {
152
+ deps.log?.(`[连接] 启动心跳检测: 间隔=${config.heartbeat}ms, 超时=${config.heartbeatTimeout}ms`);
153
+ }
154
+ startHeartbeat();
155
+ config.onConnected(ws);
156
+ };
157
+ ws.onmessage = (event) => {
158
+ state.data = event.data;
159
+ const oldTime = lastMessageTime;
160
+ lastMessageTime = Date.now();
161
+ deps.log?.(`[消息] 收到消息,更新时间: ${oldTime} -> ${lastMessageTime}`);
162
+ notify();
163
+ config.onMessage(ws, event);
164
+ };
165
+ ws.onerror = (event) => {
166
+ deps.log?.('[错误] WebSocket 错误');
167
+ state.error = new Error('WebSocket 连接错误');
168
+ notify();
169
+ config.onError(ws, event);
170
+ };
171
+ ws.onclose = (event) => {
172
+ clearHeartbeat();
173
+ deps.log?.(`[关闭] 连接关闭: code=${event.code}, wasClean=${event.wasClean}, isManualClose=${isManualClose}`);
174
+ if (state.ws === ws) {
175
+ state.status = WebSocketStatus.DISCONNECTED;
176
+ state.ws = null;
177
+ notify();
178
+ }
179
+ config.onDisconnected(ws, event);
180
+ const shouldReconnect = !isManualClose && !event.wasClean && !isReconnecting;
181
+ deps.log?.(`[关闭] 是否重连: ${shouldReconnect}`);
182
+ if (shouldReconnect) {
183
+ attemptReconnect();
184
+ }
185
+ };
186
+ }
187
+ catch (error) {
188
+ state.status = WebSocketStatus.ERROR;
189
+ state.error = error instanceof Error ? error : new Error('WebSocket 创建失败');
190
+ notify();
191
+ attemptReconnect();
192
+ }
193
+ };
194
+ const disconnect = (code, reason) => {
195
+ deps.log?.('[断开] 手动断开连接');
196
+ isManualClose = true;
197
+ isReconnecting = false;
198
+ clearHeartbeat();
199
+ clearReconnect();
200
+ const ws = state.ws;
201
+ if (ws) {
202
+ state.ws = null;
203
+ try {
204
+ ws.close(code, reason);
205
+ }
206
+ catch (error) {
207
+ deps.log?.('[断开] 关闭连接失败(忽略):', error);
208
+ }
209
+ }
210
+ state.status = WebSocketStatus.DISCONNECTED;
211
+ state.retryCount = 0;
212
+ notify();
213
+ };
214
+ const send = (data) => {
215
+ if (!state.ws || state.ws.readyState !== deps.WebSocket.OPEN) {
216
+ return false;
217
+ }
218
+ try {
219
+ state.ws.send(data);
220
+ return true;
221
+ }
222
+ catch (error) {
223
+ state.error = error instanceof Error ? error : new Error('发送消息失败');
224
+ notify();
225
+ return false;
226
+ }
227
+ };
228
+ const subscribe = (listener) => {
229
+ subscribers.add(listener);
230
+ return () => subscribers.delete(listener);
231
+ };
232
+ const dispose = () => {
233
+ disconnect();
234
+ subscribers.clear();
235
+ isManualClose = false;
236
+ isReconnecting = false;
237
+ };
238
+ if (config.immediate) {
239
+ connect();
240
+ }
241
+ return {
242
+ state,
243
+ send,
244
+ connect,
245
+ disconnect,
246
+ subscribe,
247
+ dispose
248
+ };
249
+ }
250
+ //# sourceMappingURL=useReactiveWebsocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReactiveWebsocket.js","sourceRoot":"","sources":["../../src/reactive/useReactiveWebsocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Ref } from '../../../references/vue.d';
2
+ import type { Navigator } from '../../../references/device.d';
3
+ import type { VueCompositionAPI } from '../../../types/vue.d';
4
+ export interface UseBatteryDeps {
5
+ vue: Pick<Required<VueCompositionAPI>, 'ref' | 'onMounted' | 'onUnmounted'>;
6
+ navigator: Navigator;
7
+ }
8
+ export interface UseBatteryReturn {
9
+ isSupported: Ref<boolean>;
10
+ charging: Ref<boolean>;
11
+ chargingTime: Ref<number>;
12
+ dischargingTime: Ref<number>;
13
+ level: Ref<number>;
14
+ error: Ref<string | null>;
15
+ }
16
+ export declare function useBattery(deps: UseBatteryDeps): UseBatteryReturn;
@@ -0,0 +1,70 @@
1
+ export function useBattery(deps) {
2
+ const isSupported = deps.vue.ref('getBattery' in deps.navigator);
3
+ const charging = deps.vue.ref(false);
4
+ const chargingTime = deps.vue.ref(0);
5
+ const dischargingTime = deps.vue.ref(0);
6
+ const level = deps.vue.ref(1);
7
+ const error = deps.vue.ref(null);
8
+ let batteryManager = null;
9
+ const updateBatteryInfo = (battery) => {
10
+ charging.value = battery.charging;
11
+ chargingTime.value = battery.chargingTime;
12
+ dischargingTime.value = battery.dischargingTime;
13
+ level.value = battery.level;
14
+ };
15
+ const handleChargingChange = () => {
16
+ if (batteryManager) {
17
+ charging.value = batteryManager.charging;
18
+ }
19
+ };
20
+ const handleChargingTimeChange = () => {
21
+ if (batteryManager) {
22
+ chargingTime.value = batteryManager.chargingTime;
23
+ }
24
+ };
25
+ const handleDischargingTimeChange = () => {
26
+ if (batteryManager) {
27
+ dischargingTime.value = batteryManager.dischargingTime;
28
+ }
29
+ };
30
+ const handleLevelChange = () => {
31
+ if (batteryManager) {
32
+ level.value = batteryManager.level;
33
+ }
34
+ };
35
+ deps.vue.onMounted(async () => {
36
+ if (!isSupported.value) {
37
+ error.value = '浏览器不支持电池 API';
38
+ return;
39
+ }
40
+ try {
41
+ batteryManager = await deps.navigator.getBattery();
42
+ updateBatteryInfo(batteryManager);
43
+ batteryManager.addEventListener('chargingchange', handleChargingChange);
44
+ batteryManager.addEventListener('chargingtimechange', handleChargingTimeChange);
45
+ batteryManager.addEventListener('dischargingtimechange', handleDischargingTimeChange);
46
+ batteryManager.addEventListener('levelchange', handleLevelChange);
47
+ }
48
+ catch (err) {
49
+ error.value = err instanceof Error ? err.message : '获取电池信息失败';
50
+ }
51
+ });
52
+ deps.vue.onUnmounted(() => {
53
+ if (batteryManager) {
54
+ batteryManager.removeEventListener('chargingchange', handleChargingChange);
55
+ batteryManager.removeEventListener('chargingtimechange', handleChargingTimeChange);
56
+ batteryManager.removeEventListener('dischargingtimechange', handleDischargingTimeChange);
57
+ batteryManager.removeEventListener('levelchange', handleLevelChange);
58
+ batteryManager = null;
59
+ }
60
+ });
61
+ return {
62
+ isSupported,
63
+ charging,
64
+ chargingTime,
65
+ dischargingTime,
66
+ level,
67
+ error
68
+ };
69
+ }
70
+ //# sourceMappingURL=useBattery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBattery.js","sourceRoot":"","sources":["../../../src/vue-hooks/browser/useBattery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Ref } from '../../../references/vue.d';
2
+ import type { Bluetooth, BluetoothDevice } from '../../../references/device.d';
3
+ import type { VueCompositionAPI } from '../../../types/vue.d';
4
+ export interface UseBluetoothDeps {
5
+ vue: Pick<Required<VueCompositionAPI>, 'ref' | 'onMounted' | 'onUnmounted'>;
6
+ bluetooth: Bluetooth;
7
+ }
8
+ export interface BluetoothRequestOptions {
9
+ filters?: Array<{
10
+ name?: string;
11
+ namePrefix?: string;
12
+ services?: string[];
13
+ }>;
14
+ optionalServices?: string[];
15
+ acceptAllDevices?: boolean;
16
+ }
17
+ export interface UseBluetoothReturn {
18
+ isSupported: Ref<boolean>;
19
+ device: Ref<BluetoothDevice | null>;
20
+ isRequesting: Ref<boolean>;
21
+ error: Ref<string | null>;
22
+ requestDevice: (options?: BluetoothRequestOptions) => Promise<void>;
23
+ disconnect: () => void;
24
+ }
25
+ export declare function useBluetooth(deps: UseBluetoothDeps): UseBluetoothReturn;
@@ -0,0 +1,72 @@
1
+ export function useBluetooth(deps) {
2
+ const isSupported = deps.vue.ref(false);
3
+ const device = deps.vue.ref(null);
4
+ const isRequesting = deps.vue.ref(false);
5
+ const error = deps.vue.ref(null);
6
+ deps.vue.onMounted(async () => {
7
+ try {
8
+ isSupported.value = await deps.bluetooth.getAvailability();
9
+ }
10
+ catch (err) {
11
+ isSupported.value = false;
12
+ error.value = err instanceof Error ? err.message : '检查蓝牙支持失败';
13
+ }
14
+ });
15
+ const handleDisconnect = () => {
16
+ if (device.value) {
17
+ device.value = null;
18
+ error.value = '设备已断开连接';
19
+ }
20
+ };
21
+ const requestDevice = async (options) => {
22
+ if (!isSupported.value) {
23
+ error.value = '浏览器不支持蓝牙 API';
24
+ return;
25
+ }
26
+ isRequesting.value = true;
27
+ error.value = null;
28
+ try {
29
+ const selectedDevice = await deps.bluetooth.requestDevice(options);
30
+ device.value = selectedDevice;
31
+ selectedDevice.addEventListener('gattserverdisconnected', handleDisconnect);
32
+ if (selectedDevice.gatt) {
33
+ await selectedDevice.gatt.connect();
34
+ }
35
+ }
36
+ catch (err) {
37
+ error.value = err instanceof Error ? err.message : '请求蓝牙设备失败';
38
+ device.value = null;
39
+ }
40
+ finally {
41
+ isRequesting.value = false;
42
+ }
43
+ };
44
+ const disconnect = () => {
45
+ try {
46
+ if (device.value) {
47
+ device.value.removeEventListener('gattserverdisconnected', handleDisconnect);
48
+ }
49
+ if (device.value?.gatt?.connected) {
50
+ device.value.gatt.disconnect();
51
+ }
52
+ }
53
+ catch (err) {
54
+ }
55
+ finally {
56
+ device.value = null;
57
+ error.value = null;
58
+ }
59
+ };
60
+ deps.vue.onUnmounted(() => {
61
+ disconnect();
62
+ });
63
+ return {
64
+ isSupported,
65
+ device,
66
+ isRequesting,
67
+ error,
68
+ requestDevice,
69
+ disconnect
70
+ };
71
+ }
72
+ //# sourceMappingURL=useBluetooth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBluetooth.js","sourceRoot":"","sources":["../../../src/vue-hooks/browser/useBluetooth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Ref } from '../../../references/vue.d';
2
+ import type { MediaDevices, MediaStream } from '../../../references/device.d';
3
+ import type { VueCompositionAPI } from '../../../types/vue.d';
4
+ export interface UseCameraDeps {
5
+ vue: Pick<Required<VueCompositionAPI>, 'ref' | 'onUnmounted'>;
6
+ mediaDevices: MediaDevices;
7
+ }
8
+ export interface CameraOptions {
9
+ facingMode?: 'user' | 'environment';
10
+ width?: number;
11
+ height?: number;
12
+ }
13
+ export interface UseCameraReturn {
14
+ isSupported: Ref<boolean>;
15
+ stream: Ref<MediaStream | null>;
16
+ isStarting: Ref<boolean>;
17
+ error: Ref<string | null>;
18
+ start: (options?: CameraOptions) => Promise<void>;
19
+ stop: () => void;
20
+ }
21
+ export declare function useCamera(deps: UseCameraDeps): UseCameraReturn;
@@ -0,0 +1,52 @@
1
+ export function useCamera(deps) {
2
+ const isSupported = deps.vue.ref(!!deps.mediaDevices?.getUserMedia);
3
+ const stream = deps.vue.ref(null);
4
+ const isStarting = deps.vue.ref(false);
5
+ const error = deps.vue.ref(null);
6
+ const start = async (options = {}) => {
7
+ if (!isSupported.value) {
8
+ error.value = '浏览器不支持摄像头 API';
9
+ return;
10
+ }
11
+ isStarting.value = true;
12
+ error.value = null;
13
+ try {
14
+ const constraints = {
15
+ video: {
16
+ facingMode: options.facingMode,
17
+ width: options.width,
18
+ height: options.height
19
+ },
20
+ audio: false
21
+ };
22
+ const mediaStream = await deps.mediaDevices.getUserMedia(constraints);
23
+ stream.value = mediaStream;
24
+ }
25
+ catch (err) {
26
+ error.value = err instanceof Error ? err.message : '启动摄像头失败';
27
+ stream.value = null;
28
+ }
29
+ finally {
30
+ isStarting.value = false;
31
+ }
32
+ };
33
+ const stop = () => {
34
+ if (stream.value) {
35
+ stream.value.getTracks().forEach(track => track.stop());
36
+ stream.value = null;
37
+ }
38
+ error.value = null;
39
+ };
40
+ deps.vue.onUnmounted(() => {
41
+ stop();
42
+ });
43
+ return {
44
+ isSupported,
45
+ stream,
46
+ isStarting,
47
+ error,
48
+ start,
49
+ stop
50
+ };
51
+ }
52
+ //# sourceMappingURL=useCamera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCamera.js","sourceRoot":"","sources":["../../../src/vue-hooks/browser/useCamera.ts"],"names":[],"mappings":"AAqEA,MAAM,UAAU,SAAS,CAAC,IAAmB;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAU,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAqB,IAAI,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAU,KAAK,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAgB,IAAI,CAAC,CAAA;IAG/C,MAAM,KAAK,GAAG,KAAK,EAAE,UAAyB,EAAE,EAAiB,EAAE;QACjE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,KAAK,CAAC,KAAK,GAAG,eAAe,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;QACvB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;QAElB,IAAI,CAAC;YACH,MAAM,WAAW,GAA2B;gBAC1C,KAAK,EAAE;oBACL,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;gBACD,KAAK,EAAE,KAAK;aACb,CAAA;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;YACrE,MAAM,CAAC,KAAK,GAAG,WAAW,CAAA;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5D,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;QACrB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;QAC1B,CAAC;IACH,CAAC,CAAA;IAGD,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACvD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;QACrB,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;IACpB,CAAC,CAAA;IAGD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE;QACxB,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,WAAW;QACX,MAAM;QACN,UAAU;QACV,KAAK;QACL,KAAK;QACL,IAAI;KACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Ref } from '../../../references/vue.d';
2
+ import type { Navigator } from '../../../references/browser.d';
3
+ import type { setTimeout, clearTimeout } from '../../../references/timer.d';
4
+ import type { VueCompositionAPI } from '../../../types/vue.d';
5
+ export interface UseClipboardDeps {
6
+ vue: Pick<Required<VueCompositionAPI>, 'ref'>;
7
+ writeText: Navigator['clipboard']['writeText'];
8
+ readText: Navigator['clipboard']['readText'];
9
+ setTimeout: typeof setTimeout;
10
+ clearTimeout: typeof clearTimeout;
11
+ }
12
+ export interface UseClipboardReturn {
13
+ text: Ref<string>;
14
+ copied: Ref<boolean>;
15
+ isSupported: Ref<boolean>;
16
+ copy: (text: string) => Promise<void>;
17
+ }
18
+ export declare function useClipboard(deps: UseClipboardDeps): UseClipboardReturn;
@@ -0,0 +1,33 @@
1
+ export function useClipboard(deps) {
2
+ const text = deps.vue.ref('');
3
+ const copied = deps.vue.ref(false);
4
+ const isSupported = deps.vue.ref(!!deps.writeText && !!deps.readText);
5
+ let timeoutId = null;
6
+ const copy = async (value) => {
7
+ if (!isSupported.value) {
8
+ throw new Error('Clipboard API is not supported');
9
+ }
10
+ try {
11
+ await deps.writeText(value);
12
+ text.value = value;
13
+ copied.value = true;
14
+ if (timeoutId) {
15
+ deps.clearTimeout(timeoutId);
16
+ }
17
+ timeoutId = deps.setTimeout(() => {
18
+ copied.value = false;
19
+ }, 3000);
20
+ }
21
+ catch (error) {
22
+ copied.value = false;
23
+ throw error;
24
+ }
25
+ };
26
+ return {
27
+ text,
28
+ copied,
29
+ isSupported,
30
+ copy
31
+ };
32
+ }
33
+ //# sourceMappingURL=useClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClipboard.js","sourceRoot":"","sources":["../../../src/vue-hooks/browser/useClipboard.ts"],"names":[],"mappings":"AA2DA,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAS,EAAE,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAU,KAAK,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAU,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAE9E,IAAI,SAAS,GAAQ,IAAI,CAAA;IAEzB,MAAM,IAAI,GAAG,KAAK,EAAE,KAAa,EAAiB,EAAE;QAClD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;YAGnB,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YAC9B,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;gBAC/B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;YACtB,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;YACpB,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,WAAW;QACX,IAAI;KACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Element } from 'references/dom';
2
+ import type { Ref } from '../../../references/vue.d';
3
+ import type { VueCompositionAPI } from '../../../types/vue.d';
4
+ export interface UseFullscreenDeps {
5
+ vue: Pick<Required<VueCompositionAPI>, 'ref' | 'onMounted' | 'onUnmounted'>;
6
+ getFullscreenElement: () => Element | null;
7
+ exitFullscreen: () => Promise<void>;
8
+ requestFullscreen: () => Promise<void>;
9
+ addEventListener: (type: 'fullscreenchange' | 'fullscreenerror', listener: () => void) => void;
10
+ removeEventListener: (type: 'fullscreenchange' | 'fullscreenerror', listener: () => void) => void;
11
+ }
12
+ export interface UseFullscreenReturn {
13
+ isSupported: Ref<boolean>;
14
+ isFullscreen: Ref<boolean>;
15
+ error: Ref<string | null>;
16
+ enter: () => Promise<void>;
17
+ exit: () => Promise<void>;
18
+ toggle: () => Promise<void>;
19
+ }
20
+ export declare function useFullscreen(deps: UseFullscreenDeps): UseFullscreenReturn;