@will-ui/vue 1.0.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 (699) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -0
  3. package/TAILWIND.md +282 -0
  4. package/dist/_virtual/_rolldown/runtime.js +13 -0
  5. package/dist/components/audioPlayer/AudioPlayer.d.ts +123 -0
  6. package/dist/components/audioPlayer/AudioPlayer.js +375 -0
  7. package/dist/components/audioPlayer/AudioPlayer.js.map +1 -0
  8. package/dist/components/audioPlayer/index.d.ts +2 -0
  9. package/dist/components/audioPlayer/style/index.css +1 -0
  10. package/dist/components/btn/Btn.d.ts +45 -0
  11. package/dist/components/btn/Btn.js +165 -0
  12. package/dist/components/btn/Btn.js.map +1 -0
  13. package/dist/components/btn/config.d.ts +33 -0
  14. package/dist/components/btn/config.js +20 -0
  15. package/dist/components/btn/config.js.map +1 -0
  16. package/dist/components/btn/context.d.ts +12 -0
  17. package/dist/components/btn/context.js +6 -0
  18. package/dist/components/btn/context.js.map +1 -0
  19. package/dist/components/btn/index.d.ts +5 -0
  20. package/dist/components/btn/style/index.css +1 -0
  21. package/dist/components/btnGroup/BtnGroup.d.ts +46 -0
  22. package/dist/components/btnGroup/BtnGroup.js +43 -0
  23. package/dist/components/btnGroup/BtnGroup.js.map +1 -0
  24. package/dist/components/btnGroup/config.d.ts +14 -0
  25. package/dist/components/btnGroup/config.js +11 -0
  26. package/dist/components/btnGroup/config.js.map +1 -0
  27. package/dist/components/btnGroup/index.d.ts +3 -0
  28. package/dist/components/btnGroup/style/index.css +1 -0
  29. package/dist/components/cascade/Cascade.d.ts +1957 -0
  30. package/dist/components/cascade/Cascade.js +283 -0
  31. package/dist/components/cascade/Cascade.js.map +1 -0
  32. package/dist/components/cascade/config.d.ts +30 -0
  33. package/dist/components/cascade/config.js +18 -0
  34. package/dist/components/cascade/config.js.map +1 -0
  35. package/dist/components/cascade/index.d.ts +3 -0
  36. package/dist/components/cascade/style/index.css +1 -0
  37. package/dist/components/checkbox/Checkbox.d.ts +241 -0
  38. package/dist/components/checkbox/Checkbox.js +182 -0
  39. package/dist/components/checkbox/Checkbox.js.map +1 -0
  40. package/dist/components/checkbox/config.d.ts +18 -0
  41. package/dist/components/checkbox/config.js +11 -0
  42. package/dist/components/checkbox/config.js.map +1 -0
  43. package/dist/components/checkbox/index.d.ts +3 -0
  44. package/dist/components/checkbox/style/index.css +1 -0
  45. package/dist/components/choose/Choose.d.ts +1016 -0
  46. package/dist/components/choose/Choose.js +402 -0
  47. package/dist/components/choose/Choose.js.map +1 -0
  48. package/dist/components/choose/config.d.ts +37 -0
  49. package/dist/components/choose/config.js +21 -0
  50. package/dist/components/choose/config.js.map +1 -0
  51. package/dist/components/choose/index.d.ts +3 -0
  52. package/dist/components/choose/injectionKey.d.ts +12 -0
  53. package/dist/components/choose/injectionKey.js +11 -0
  54. package/dist/components/choose/injectionKey.js.map +1 -0
  55. package/dist/components/choose/style/index.css +1 -0
  56. package/dist/components/choose2/Choose2.d.ts +1711 -0
  57. package/dist/components/choose2/Choose2.js +403 -0
  58. package/dist/components/choose2/Choose2.js.map +1 -0
  59. package/dist/components/choose2/config.d.ts +37 -0
  60. package/dist/components/choose2/config.js +20 -0
  61. package/dist/components/choose2/config.js.map +1 -0
  62. package/dist/components/choose2/index.d.ts +3 -0
  63. package/dist/components/choose2/style/index.css +1 -0
  64. package/dist/components/chooseItem/ChooseItem.d.ts +46 -0
  65. package/dist/components/chooseItem/ChooseItem.js +72 -0
  66. package/dist/components/chooseItem/ChooseItem.js.map +1 -0
  67. package/dist/components/chooseItem/config.d.ts +12 -0
  68. package/dist/components/chooseItem/config.js +9 -0
  69. package/dist/components/chooseItem/config.js.map +1 -0
  70. package/dist/components/chooseItem/index.d.ts +3 -0
  71. package/dist/components/chooseItem/style/index.css +1 -0
  72. package/dist/components/circleProgress/CircleProgress.d.ts +83 -0
  73. package/dist/components/circleProgress/CircleProgress.js +108 -0
  74. package/dist/components/circleProgress/CircleProgress.js.map +1 -0
  75. package/dist/components/circleProgress/index.d.ts +1 -0
  76. package/dist/components/circleProgress/style/index.css +1 -0
  77. package/dist/components/close/Close.d.ts +114 -0
  78. package/dist/components/close/Close.js +82 -0
  79. package/dist/components/close/Close.js.map +1 -0
  80. package/dist/components/close/index.d.ts +1 -0
  81. package/dist/components/close/style/index.css +1 -0
  82. package/dist/components/colorPicker/ColorPicker.d.ts +138 -0
  83. package/dist/components/colorPicker/ColorPicker.js +404 -0
  84. package/dist/components/colorPicker/ColorPicker.js.map +1 -0
  85. package/dist/components/colorPicker/config.d.ts +24 -0
  86. package/dist/components/colorPicker/config.js +14 -0
  87. package/dist/components/colorPicker/config.js.map +1 -0
  88. package/dist/components/colorPicker/index.d.ts +4 -0
  89. package/dist/components/colorPicker/style/index.css +1 -0
  90. package/dist/components/confirm/index.d.ts +73 -0
  91. package/dist/components/confirm/index.js +177 -0
  92. package/dist/components/confirm/index.js.map +1 -0
  93. package/dist/components/confirm/src/style/index.css +1 -0
  94. package/dist/components/copy/Copy.d.ts +28 -0
  95. package/dist/components/copy/Copy.js +110 -0
  96. package/dist/components/copy/Copy.js.map +1 -0
  97. package/dist/components/copy/config.d.ts +25 -0
  98. package/dist/components/copy/config.js +13 -0
  99. package/dist/components/copy/config.js.map +1 -0
  100. package/dist/components/copy/index.d.ts +5 -0
  101. package/dist/components/copy/spawnCopyToast.d.ts +13 -0
  102. package/dist/components/copy/spawnCopyToast.js +150 -0
  103. package/dist/components/copy/spawnCopyToast.js.map +1 -0
  104. package/dist/components/copy/style/index.css +1 -0
  105. package/dist/components/cornerEars/CornerEars.d.ts +24 -0
  106. package/dist/components/cornerEars/CornerEars.js +108 -0
  107. package/dist/components/cornerEars/CornerEars.js.map +1 -0
  108. package/dist/components/cornerEars/cornerGeometry.d.ts +8 -0
  109. package/dist/components/cornerEars/cornerGeometry.js +63 -0
  110. package/dist/components/cornerEars/cornerGeometry.js.map +1 -0
  111. package/dist/components/cornerEars/index.d.ts +2 -0
  112. package/dist/components/cornerEars/style/index.css +1 -0
  113. package/dist/components/date/DatePanel.js +398 -0
  114. package/dist/components/date/DatePanel.js.map +1 -0
  115. package/dist/components/date/DatePicker.d.ts +226 -0
  116. package/dist/components/date/DatePicker.js +349 -0
  117. package/dist/components/date/DatePicker.js.map +1 -0
  118. package/dist/components/date/Days.d.ts +44 -0
  119. package/dist/components/date/Days.js +93 -0
  120. package/dist/components/date/Days.js.map +1 -0
  121. package/dist/components/date/Months.d.ts +32 -0
  122. package/dist/components/date/Months.js +87 -0
  123. package/dist/components/date/Months.js.map +1 -0
  124. package/dist/components/date/QuickDate.d.ts +24 -0
  125. package/dist/components/date/QuickDate.js +48 -0
  126. package/dist/components/date/QuickDate.js.map +1 -0
  127. package/dist/components/date/Years.d.ts +38 -0
  128. package/dist/components/date/Years.js +85 -0
  129. package/dist/components/date/Years.js.map +1 -0
  130. package/dist/components/date/_use/quickDate.d.ts +4 -0
  131. package/dist/components/date/_use/quickDate.js +30 -0
  132. package/dist/components/date/_use/quickDate.js.map +1 -0
  133. package/dist/components/date/_use/useDateModules.d.ts +37 -0
  134. package/dist/components/date/_use/useDateModules.js +100 -0
  135. package/dist/components/date/_use/useDateModules.js.map +1 -0
  136. package/dist/components/date/config.d.ts +32 -0
  137. package/dist/components/date/config.js +18 -0
  138. package/dist/components/date/config.js.map +1 -0
  139. package/dist/components/date/index.d.ts +3 -0
  140. package/dist/components/date/style/index.css +1 -0
  141. package/dist/components/date/types.d.ts +32 -0
  142. package/dist/components/drawer/Drawer.d.ts +332 -0
  143. package/dist/components/drawer/Drawer.js +329 -0
  144. package/dist/components/drawer/Drawer.js.map +1 -0
  145. package/dist/components/drawer/config.d.ts +28 -0
  146. package/dist/components/drawer/config.js +16 -0
  147. package/dist/components/drawer/config.js.map +1 -0
  148. package/dist/components/drawer/index.d.ts +3 -0
  149. package/dist/components/drawer/src/style/drawer.css +1 -0
  150. package/dist/components/ellipsis/Ellipsis.d.ts +74 -0
  151. package/dist/components/ellipsis/Ellipsis.js +103 -0
  152. package/dist/components/ellipsis/Ellipsis.js.map +1 -0
  153. package/dist/components/ellipsis/index.d.ts +1 -0
  154. package/dist/components/ellipsis/style/index.css +1 -0
  155. package/dist/components/empty/Empty.d.ts +92 -0
  156. package/dist/components/empty/Empty.js +85 -0
  157. package/dist/components/empty/Empty.js.map +1 -0
  158. package/dist/components/empty/config.d.ts +23 -0
  159. package/dist/components/empty/config.js +14 -0
  160. package/dist/components/empty/config.js.map +1 -0
  161. package/dist/components/empty/index.d.ts +3 -0
  162. package/dist/components/empty/style/index.css +1 -0
  163. package/dist/components/empty/type.d.ts +9 -0
  164. package/dist/components/equalizer/Equalizer.d.ts +62 -0
  165. package/dist/components/equalizer/Equalizer.js +56 -0
  166. package/dist/components/equalizer/Equalizer.js.map +1 -0
  167. package/dist/components/equalizer/index.d.ts +1 -0
  168. package/dist/components/equalizer/style/index.css +1 -0
  169. package/dist/components/fallback/Fallback.d.ts +44 -0
  170. package/dist/components/fallback/Fallback.js +55 -0
  171. package/dist/components/fallback/Fallback.js.map +1 -0
  172. package/dist/components/fallback/index.d.ts +1 -0
  173. package/dist/components/fallback/style/index.css +1 -0
  174. package/dist/components/form/Form.d.ts +169 -0
  175. package/dist/components/form/Form.js +235 -0
  176. package/dist/components/form/Form.js.map +1 -0
  177. package/dist/components/form/_use/formRules.d.ts +18 -0
  178. package/dist/components/form/_use/formRules.js +80 -0
  179. package/dist/components/form/_use/formRules.js.map +1 -0
  180. package/dist/components/form/config.d.ts +35 -0
  181. package/dist/components/form/config.js +20 -0
  182. package/dist/components/form/config.js.map +1 -0
  183. package/dist/components/form/context.d.ts +34 -0
  184. package/dist/components/form/context.js +8 -0
  185. package/dist/components/form/context.js.map +1 -0
  186. package/dist/components/form/index.d.ts +3 -0
  187. package/dist/components/form/style/index.css +1 -0
  188. package/dist/components/formItem/FormItem.d.ts +144 -0
  189. package/dist/components/formItem/FormItem.js +218 -0
  190. package/dist/components/formItem/FormItem.js.map +1 -0
  191. package/dist/components/formItem/config.d.ts +21 -0
  192. package/dist/components/formItem/config.js +12 -0
  193. package/dist/components/formItem/config.js.map +1 -0
  194. package/dist/components/formItem/context.d.ts +22 -0
  195. package/dist/components/formItem/context.js +8 -0
  196. package/dist/components/formItem/context.js.map +1 -0
  197. package/dist/components/formItem/index.d.ts +3 -0
  198. package/dist/components/formItem/style/index.css +1 -0
  199. package/dist/components/icon/Icon.d.ts +117 -0
  200. package/dist/components/icon/Icon.js +116 -0
  201. package/dist/components/icon/Icon.js.map +1 -0
  202. package/dist/components/icon/config.d.ts +28 -0
  203. package/dist/components/icon/config.js +16 -0
  204. package/dist/components/icon/config.js.map +1 -0
  205. package/dist/components/icon/index.d.ts +4 -0
  206. package/dist/components/icon/style/index.css +1 -0
  207. package/dist/components/icon/type.d.ts +16 -0
  208. package/dist/components/image/Image.d.ts +21 -0
  209. package/dist/components/image/Image.js +68 -0
  210. package/dist/components/image/Image.js.map +1 -0
  211. package/dist/components/image/config.d.ts +21 -0
  212. package/dist/components/image/config.js +11 -0
  213. package/dist/components/image/config.js.map +1 -0
  214. package/dist/components/image/index.d.ts +4 -0
  215. package/dist/components/image/style/index.css +1 -0
  216. package/dist/components/index.d.ts +79 -0
  217. package/dist/components/index.js +124 -0
  218. package/dist/components/index.js.map +1 -0
  219. package/dist/components/layer/Layer.d.ts +410 -0
  220. package/dist/components/layer/Layer.js +557 -0
  221. package/dist/components/layer/Layer.js.map +1 -0
  222. package/dist/components/layer/index.d.ts +2 -0
  223. package/dist/components/layer/injectionKey.d.ts +5 -0
  224. package/dist/components/layer/injectionKey.js +6 -0
  225. package/dist/components/layer/injectionKey.js.map +1 -0
  226. package/dist/components/layer/style/index.css +1 -0
  227. package/dist/components/lcdFont/LcdFont.d.ts +126 -0
  228. package/dist/components/lcdFont/LcdFont.js +232 -0
  229. package/dist/components/lcdFont/LcdFont.js.map +1 -0
  230. package/dist/components/lcdFont/config.d.ts +43 -0
  231. package/dist/components/lcdFont/config.js +41 -0
  232. package/dist/components/lcdFont/config.js.map +1 -0
  233. package/dist/components/lcdFont/format.d.ts +8 -0
  234. package/dist/components/lcdFont/format.js +39 -0
  235. package/dist/components/lcdFont/format.js.map +1 -0
  236. package/dist/components/lcdFont/index.d.ts +5 -0
  237. package/dist/components/lcdFont/segments.d.ts +32 -0
  238. package/dist/components/lcdFont/segments.js +326 -0
  239. package/dist/components/lcdFont/segments.js.map +1 -0
  240. package/dist/components/lcdFont/style/index.css +1 -0
  241. package/dist/components/lcdFont/type.d.ts +26 -0
  242. package/dist/components/list/List.d.ts +480 -0
  243. package/dist/components/list/List.js +289 -0
  244. package/dist/components/list/List.js.map +1 -0
  245. package/dist/components/list/config.d.ts +3 -0
  246. package/dist/components/list/index.d.ts +3 -0
  247. package/dist/components/list/style/index.css +1 -0
  248. package/dist/components/loading/Loading.d.ts +97 -0
  249. package/dist/components/loading/Loading.js +124 -0
  250. package/dist/components/loading/Loading.js.map +1 -0
  251. package/dist/components/loading/config.d.ts +22 -0
  252. package/dist/components/loading/config.js +13 -0
  253. package/dist/components/loading/config.js.map +1 -0
  254. package/dist/components/loading/index.d.ts +3 -0
  255. package/dist/components/loading/style/index.css +1 -0
  256. package/dist/components/loading/type.d.ts +13 -0
  257. package/dist/components/mask/Mask.d.ts +79 -0
  258. package/dist/components/mask/Mask.js +82 -0
  259. package/dist/components/mask/Mask.js.map +1 -0
  260. package/dist/components/mask/config.d.ts +21 -0
  261. package/dist/components/mask/config.js +14 -0
  262. package/dist/components/mask/config.js.map +1 -0
  263. package/dist/components/mask/index.d.ts +3 -0
  264. package/dist/components/mask/style/mask.css +1 -0
  265. package/dist/components/match/Match copy.d.ts +1600 -0
  266. package/dist/components/match/Match.d.ts +1621 -0
  267. package/dist/components/match/Match.js +343 -0
  268. package/dist/components/match/Match.js.map +1 -0
  269. package/dist/components/match/config.d.ts +29 -0
  270. package/dist/components/match/config.js +17 -0
  271. package/dist/components/match/config.js.map +1 -0
  272. package/dist/components/match/index.d.ts +3 -0
  273. package/dist/components/match/style/index.css +1 -0
  274. package/dist/components/modal/Modal.d.ts +460 -0
  275. package/dist/components/modal/Modal.js +297 -0
  276. package/dist/components/modal/Modal.js.map +1 -0
  277. package/dist/components/modal/config.d.ts +33 -0
  278. package/dist/components/modal/config.js +19 -0
  279. package/dist/components/modal/config.js.map +1 -0
  280. package/dist/components/modal/index.d.ts +3 -0
  281. package/dist/components/modal/style/index.css +1 -0
  282. package/dist/components/notice/Notice.d.ts +137 -0
  283. package/dist/components/notice/Notice.js +192 -0
  284. package/dist/components/notice/Notice.js.map +1 -0
  285. package/dist/components/notice/index.d.ts +51 -0
  286. package/dist/components/notice/index.js +243 -0
  287. package/dist/components/notice/index.js.map +1 -0
  288. package/dist/components/notice/src/_util/index.d.ts +11 -0
  289. package/dist/components/notice/src/_util/index.js +50 -0
  290. package/dist/components/notice/src/_util/index.js.map +1 -0
  291. package/dist/components/notice/src/style/index.css +1 -0
  292. package/dist/components/notice/types.d.ts +98 -0
  293. package/dist/components/number/Number copy.d.ts +966 -0
  294. package/dist/components/number/Number.d.ts +1034 -0
  295. package/dist/components/number/Number.js +241 -0
  296. package/dist/components/number/Number.js.map +1 -0
  297. package/dist/components/number/config.d.ts +26 -0
  298. package/dist/components/number/config.js +15 -0
  299. package/dist/components/number/config.js.map +1 -0
  300. package/dist/components/number/index.d.ts +3 -0
  301. package/dist/components/number/style/index.css +1 -0
  302. package/dist/components/pagination/index.d.ts +3 -0
  303. package/dist/components/pagination/src/Pagination.d.ts +2830 -0
  304. package/dist/components/pagination/src/Pagination.js +288 -0
  305. package/dist/components/pagination/src/Pagination.js.map +1 -0
  306. package/dist/components/pagination/src/config.d.ts +25 -0
  307. package/dist/components/pagination/src/config.js +20 -0
  308. package/dist/components/pagination/src/config.js.map +1 -0
  309. package/dist/components/pagination/src/style/index.css +1 -0
  310. package/dist/components/picture/Picture.d.ts +18 -0
  311. package/dist/components/picture/Picture.js +254 -0
  312. package/dist/components/picture/Picture.js.map +1 -0
  313. package/dist/components/picture/PictureToolbar.d.ts +29 -0
  314. package/dist/components/picture/PictureToolbar.js +97 -0
  315. package/dist/components/picture/PictureToolbar.js.map +1 -0
  316. package/dist/components/picture/PictureViewport.d.ts +47 -0
  317. package/dist/components/picture/PictureViewport.js +203 -0
  318. package/dist/components/picture/PictureViewport.js.map +1 -0
  319. package/dist/components/picture/config.d.ts +16 -0
  320. package/dist/components/picture/config.js +16 -0
  321. package/dist/components/picture/config.js.map +1 -0
  322. package/dist/components/picture/index.d.ts +5 -0
  323. package/dist/components/picture/pictureFlip.d.ts +16 -0
  324. package/dist/components/picture/pictureFlip.js +103 -0
  325. package/dist/components/picture/pictureFlip.js.map +1 -0
  326. package/dist/components/picture/style/index.css +1 -0
  327. package/dist/components/progress/Progress.d.ts +94 -0
  328. package/dist/components/progress/Progress.js +112 -0
  329. package/dist/components/progress/Progress.js.map +1 -0
  330. package/dist/components/progress/index.d.ts +1 -0
  331. package/dist/components/progress/style/index.css +1 -0
  332. package/dist/components/radio/Radio.d.ts +112 -0
  333. package/dist/components/radio/Radio.js +130 -0
  334. package/dist/components/radio/Radio.js.map +1 -0
  335. package/dist/components/radio/config.d.ts +29 -0
  336. package/dist/components/radio/config.js +18 -0
  337. package/dist/components/radio/config.js.map +1 -0
  338. package/dist/components/radio/index.d.ts +3 -0
  339. package/dist/components/radio/style/index.css +1 -0
  340. package/dist/components/scrollbar/Scrollbar.d.ts +93 -0
  341. package/dist/components/scrollbar/Scrollbar.js +515 -0
  342. package/dist/components/scrollbar/Scrollbar.js.map +1 -0
  343. package/dist/components/scrollbar/index.d.ts +1 -0
  344. package/dist/components/scrollbar/style/index.css +1 -0
  345. package/dist/components/sheet/Sheet.d.ts +1448 -0
  346. package/dist/components/sheet/Sheet.js +592 -0
  347. package/dist/components/sheet/Sheet.js.map +1 -0
  348. package/dist/components/sheet/_cell.d.ts +181 -0
  349. package/dist/components/sheet/_cell.js +132 -0
  350. package/dist/components/sheet/_cell.js.map +1 -0
  351. package/dist/components/sheet/_props.d.ts +170 -0
  352. package/dist/components/sheet/_props.js +183 -0
  353. package/dist/components/sheet/_props.js.map +1 -0
  354. package/dist/components/sheet/_row.d.ts +2 -0
  355. package/dist/components/sheet/_row.js +14 -0
  356. package/dist/components/sheet/_row.js.map +1 -0
  357. package/dist/components/sheet/_tbody.d.ts +348 -0
  358. package/dist/components/sheet/_tbody.js +255 -0
  359. package/dist/components/sheet/_tbody.js.map +1 -0
  360. package/dist/components/sheet/_tfoot.d.ts +195 -0
  361. package/dist/components/sheet/_tfoot.js +78 -0
  362. package/dist/components/sheet/_tfoot.js.map +1 -0
  363. package/dist/components/sheet/_thead.d.ts +529 -0
  364. package/dist/components/sheet/_thead.js +148 -0
  365. package/dist/components/sheet/_thead.js.map +1 -0
  366. package/dist/components/sheet/_use.d.ts +38 -0
  367. package/dist/components/sheet/_use.js +493 -0
  368. package/dist/components/sheet/_use.js.map +1 -0
  369. package/dist/components/sheet/_util.d.ts +34 -0
  370. package/dist/components/sheet/_util.js +111 -0
  371. package/dist/components/sheet/_util.js.map +1 -0
  372. package/dist/components/sheet/index.d.ts +1 -0
  373. package/dist/components/sheet/style/index.css +1 -0
  374. package/dist/components/slideDown/SlideDown.d.ts +62 -0
  375. package/dist/components/slideDown/SlideDown.js +128 -0
  376. package/dist/components/slideDown/SlideDown.js.map +1 -0
  377. package/dist/components/slideDown/index.d.ts +1 -0
  378. package/dist/components/slider/Slider.d.ts +1726 -0
  379. package/dist/components/slider/Slider.js +471 -0
  380. package/dist/components/slider/Slider.js.map +1 -0
  381. package/dist/components/slider/index.d.ts +1 -0
  382. package/dist/components/slider/style/index.css +1 -0
  383. package/dist/components/svgIcon/SvgIcon.d.ts +37 -0
  384. package/dist/components/svgIcon/SvgIcon.js +78 -0
  385. package/dist/components/svgIcon/SvgIcon.js.map +1 -0
  386. package/dist/components/svgIcon/index.d.ts +3 -0
  387. package/dist/components/svgIcon/style/index.css +1 -0
  388. package/dist/components/switch/Switch.d.ts +105 -0
  389. package/dist/components/switch/Switch.js +158 -0
  390. package/dist/components/switch/Switch.js.map +1 -0
  391. package/dist/components/switch/config.d.ts +16 -0
  392. package/dist/components/switch/config.js +11 -0
  393. package/dist/components/switch/config.js.map +1 -0
  394. package/dist/components/switch/index.d.ts +1 -0
  395. package/dist/components/switch/style/index.css +1 -0
  396. package/dist/components/tab/Tab.d.ts +113 -0
  397. package/dist/components/tab/Tab.js +485 -0
  398. package/dist/components/tab/Tab.js.map +1 -0
  399. package/dist/components/tab/index.d.ts +2 -0
  400. package/dist/components/tab/style/index.css +1 -0
  401. package/dist/components/textarea/Textarea.d.ts +37 -0
  402. package/dist/components/textarea/Textarea.js +193 -0
  403. package/dist/components/textarea/Textarea.js.map +1 -0
  404. package/dist/components/textarea/config.d.ts +30 -0
  405. package/dist/components/textarea/config.js +16 -0
  406. package/dist/components/textarea/config.js.map +1 -0
  407. package/dist/components/textarea/index.d.ts +4 -0
  408. package/dist/components/textarea/style/index.css +1 -0
  409. package/dist/components/time/Dial.js +7 -0
  410. package/dist/components/time/Dial.js.map +1 -0
  411. package/dist/components/time/Dial.vue_vue_type_script_setup_true_lang.js +178 -0
  412. package/dist/components/time/Dial.vue_vue_type_script_setup_true_lang.js.map +1 -0
  413. package/dist/components/time/TimePicker.d.ts +1301 -0
  414. package/dist/components/time/TimePicker.js +162 -0
  415. package/dist/components/time/TimePicker.js.map +1 -0
  416. package/dist/components/time/_use/useTimeModules.d.ts +1 -0
  417. package/dist/components/time/index.d.ts +1 -0
  418. package/dist/components/time/style/dial.css +1 -0
  419. package/dist/components/time/style/index.css +1 -0
  420. package/dist/components/toggle/Toggle.d.ts +140 -0
  421. package/dist/components/toggle/Toggle.js +209 -0
  422. package/dist/components/toggle/Toggle.js.map +1 -0
  423. package/dist/components/toggle/index.d.ts +1 -0
  424. package/dist/components/toggle/style/index.css +1 -0
  425. package/dist/components/toggle/style/scale.css +1 -0
  426. package/dist/components/toggle/style/translate.css +1 -0
  427. package/dist/components/tooltip/Tooltip.d.ts +536 -0
  428. package/dist/components/tooltip/Tooltip.js +51 -0
  429. package/dist/components/tooltip/Tooltip.js.map +1 -0
  430. package/dist/components/tooltip/index.d.ts +1 -0
  431. package/dist/components/tooltip/style/index.css +1 -0
  432. package/dist/components/tree/Tree.d.ts +187 -0
  433. package/dist/components/tree/Tree.js +229 -0
  434. package/dist/components/tree/Tree.js.map +1 -0
  435. package/dist/components/tree/TreeItem.d.ts +86 -0
  436. package/dist/components/tree/TreeItem.js +152 -0
  437. package/dist/components/tree/TreeItem.js.map +1 -0
  438. package/dist/components/tree/TreeList.d.ts +86 -0
  439. package/dist/components/tree/TreeList.js +52 -0
  440. package/dist/components/tree/TreeList.js.map +1 -0
  441. package/dist/components/tree/_use/treeState.d.ts +45 -0
  442. package/dist/components/tree/_use/treeState.js +417 -0
  443. package/dist/components/tree/_use/treeState.js.map +1 -0
  444. package/dist/components/tree/config.d.ts +27 -0
  445. package/dist/components/tree/config.js +16 -0
  446. package/dist/components/tree/config.js.map +1 -0
  447. package/dist/components/tree/index.d.ts +4 -0
  448. package/dist/components/tree/style/index.css +1 -0
  449. package/dist/components/tree-choose/TreeChoose.d.ts +833 -0
  450. package/dist/components/tree-choose/TreeChoose.js +320 -0
  451. package/dist/components/tree-choose/TreeChoose.js.map +1 -0
  452. package/dist/components/tree-choose/config.d.ts +41 -0
  453. package/dist/components/tree-choose/config.js +19 -0
  454. package/dist/components/tree-choose/config.js.map +1 -0
  455. package/dist/components/tree-choose/index.d.ts +4 -0
  456. package/dist/components/tree-choose/style/index.css +1 -0
  457. package/dist/components/trigger/Trigger.d.ts +921 -0
  458. package/dist/components/trigger/Trigger.js +105 -0
  459. package/dist/components/trigger/Trigger.js.map +1 -0
  460. package/dist/components/trigger/index.d.ts +1 -0
  461. package/dist/components/trigger/style/index.css +2 -0
  462. package/dist/components/upload/Upload.d.ts +249 -0
  463. package/dist/components/upload/Upload.js +342 -0
  464. package/dist/components/upload/Upload.js.map +1 -0
  465. package/dist/components/upload/config.d.ts +39 -0
  466. package/dist/components/upload/config.js +21 -0
  467. package/dist/components/upload/config.js.map +1 -0
  468. package/dist/components/upload/index.d.ts +4 -0
  469. package/dist/components/upload/style/index.css +1 -0
  470. package/dist/components/upload/types.d.ts +47 -0
  471. package/dist/components/virtual/Virtual.d.ts +57 -0
  472. package/dist/components/virtual/Virtual.js +62 -0
  473. package/dist/components/virtual/Virtual.js.map +1 -0
  474. package/dist/components/virtual/Virtual/345/216/237/347/211/210.d.ts +44 -0
  475. package/dist/components/virtual/index.d.ts +4 -0
  476. package/dist/components/virtual/style/index.css +1 -0
  477. package/dist/components/virtual/useVirtualList.d.ts +50 -0
  478. package/dist/components/virtual/useVirtualList.js +376 -0
  479. package/dist/components/virtual/useVirtualList.js.map +1 -0
  480. package/dist/components/write/Write.d.ts +532 -0
  481. package/dist/components/write/Write.js +228 -0
  482. package/dist/components/write/Write.js.map +1 -0
  483. package/dist/components/write/index.d.ts +1 -0
  484. package/dist/components/write/style/index.css +1 -0
  485. package/dist/config/dictionary.d.ts +21 -0
  486. package/dist/config/dictionary.js +28 -0
  487. package/dist/config/dictionary.js.map +1 -0
  488. package/dist/config/i18n.d.ts +22 -0
  489. package/dist/config/i18n.js +53 -0
  490. package/dist/config/i18n.js.map +1 -0
  491. package/dist/config/plugin.d.ts +88 -0
  492. package/dist/config/plugin.js +13 -0
  493. package/dist/config/plugin.js.map +1 -0
  494. package/dist/config/types.d.ts +56 -0
  495. package/dist/directives/clickOutside.d.ts +10 -0
  496. package/dist/directives/clickOutside.js +69 -0
  497. package/dist/directives/clickOutside.js.map +1 -0
  498. package/dist/directives/index.d.ts +3 -0
  499. package/dist/directives/index.js +13 -0
  500. package/dist/directives/index.js.map +1 -0
  501. package/dist/directives/loading.d.ts +19 -0
  502. package/dist/directives/loading.js +64 -0
  503. package/dist/directives/loading.js.map +1 -0
  504. package/dist/index.d.ts +127 -0
  505. package/dist/index.js +91 -0
  506. package/dist/locales/de-DE/index.d.ts +144 -0
  507. package/dist/locales/de-DE/index.js +140 -0
  508. package/dist/locales/de-DE/index.js.map +1 -0
  509. package/dist/locales/en-US/index.d.ts +144 -0
  510. package/dist/locales/en-US/index.js +140 -0
  511. package/dist/locales/en-US/index.js.map +1 -0
  512. package/dist/locales/index.d.ts +3 -0
  513. package/dist/locales/zh-CN/index.d.ts +144 -0
  514. package/dist/locales/zh-CN/index.js +140 -0
  515. package/dist/locales/zh-CN/index.js.map +1 -0
  516. package/dist/plugin.d.ts +6 -0
  517. package/dist/plugin.js +38 -0
  518. package/dist/plugin.js.map +1 -0
  519. package/dist/styles/index.css +49 -0
  520. package/dist/theme/_transition.css +169 -0
  521. package/dist/theme/index.css +5 -0
  522. package/dist/theme/tokens/_base.css +7 -0
  523. package/dist/theme/tokens/_common.css +37 -0
  524. package/dist/theme/tokens/_scrollbar.css +53 -0
  525. package/dist/theme/tokens/_size.css +18 -0
  526. package/dist/theme/tokens/_text.css +16 -0
  527. package/dist/theme/tokens/_var.css +1087 -0
  528. package/dist/theme/tokens/components/audioPlayer.css +542 -0
  529. package/dist/theme/tokens/components/btn.css +253 -0
  530. package/dist/theme/tokens/components/btnGroup.css +68 -0
  531. package/dist/theme/tokens/components/cascade.css +77 -0
  532. package/dist/theme/tokens/components/checkbox.css +100 -0
  533. package/dist/theme/tokens/components/choose.css +175 -0
  534. package/dist/theme/tokens/components/choose2.css +242 -0
  535. package/dist/theme/tokens/components/chooseItem.css +54 -0
  536. package/dist/theme/tokens/components/circleProgress.css +61 -0
  537. package/dist/theme/tokens/components/close.css +12 -0
  538. package/dist/theme/tokens/components/colorPicker.css +404 -0
  539. package/dist/theme/tokens/components/confirm.css +128 -0
  540. package/dist/theme/tokens/components/copy.css +80 -0
  541. package/dist/theme/tokens/components/cornerEars.css +102 -0
  542. package/dist/theme/tokens/components/date/days.css +79 -0
  543. package/dist/theme/tokens/components/date/index.css +249 -0
  544. package/dist/theme/tokens/components/date/months.css +68 -0
  545. package/dist/theme/tokens/components/drawer.css +189 -0
  546. package/dist/theme/tokens/components/ellipsis.css +46 -0
  547. package/dist/theme/tokens/components/empty.css +24 -0
  548. package/dist/theme/tokens/components/equalizer.css +51 -0
  549. package/dist/theme/tokens/components/fallback.css +4 -0
  550. package/dist/theme/tokens/components/form.css +50 -0
  551. package/dist/theme/tokens/components/formItem.css +194 -0
  552. package/dist/theme/tokens/components/icon.css +41 -0
  553. package/dist/theme/tokens/components/image.css +70 -0
  554. package/dist/theme/tokens/components/layer.css +190 -0
  555. package/dist/theme/tokens/components/lcdFont.css +121 -0
  556. package/dist/theme/tokens/components/list.css +97 -0
  557. package/dist/theme/tokens/components/loading.css +64 -0
  558. package/dist/theme/tokens/components/mask.css +26 -0
  559. package/dist/theme/tokens/components/match.css +119 -0
  560. package/dist/theme/tokens/components/modal.css +136 -0
  561. package/dist/theme/tokens/components/notice.css +264 -0
  562. package/dist/theme/tokens/components/number.css +150 -0
  563. package/dist/theme/tokens/components/pagination.css +215 -0
  564. package/dist/theme/tokens/components/picture.css +299 -0
  565. package/dist/theme/tokens/components/progress.css +101 -0
  566. package/dist/theme/tokens/components/radio.css +183 -0
  567. package/dist/theme/tokens/components/scrollbar.css +160 -0
  568. package/dist/theme/tokens/components/sheet.css +518 -0
  569. package/dist/theme/tokens/components/slider.css +171 -0
  570. package/dist/theme/tokens/components/svgIcon.css +6 -0
  571. package/dist/theme/tokens/components/switch.css +67 -0
  572. package/dist/theme/tokens/components/tab.css +215 -0
  573. package/dist/theme/tokens/components/textarea.css +109 -0
  574. package/dist/theme/tokens/components/time/dial.css +123 -0
  575. package/dist/theme/tokens/components/time/index.css +29 -0
  576. package/dist/theme/tokens/components/toggle/index.css +14 -0
  577. package/dist/theme/tokens/components/toggle/scale.css +34 -0
  578. package/dist/theme/tokens/components/toggle/translate.css +41 -0
  579. package/dist/theme/tokens/components/tooltip.css +77 -0
  580. package/dist/theme/tokens/components/tree-choose.css +154 -0
  581. package/dist/theme/tokens/components/tree.css +172 -0
  582. package/dist/theme/tokens/components/trigger.css +90 -0
  583. package/dist/theme/tokens/components/upload.css +302 -0
  584. package/dist/theme/tokens/components/virtual.css +6 -0
  585. package/dist/theme/tokens/components/write.css +155 -0
  586. package/dist/theme/tokens/iconfont/iconfont.css +103 -0
  587. package/dist/theme/tokens/iconfont/iconfont.ttf +0 -0
  588. package/dist/theme/tokens/iconfont/iconfont.woff +0 -0
  589. package/dist/theme/tokens/iconfont/iconfont.woff2 +0 -0
  590. package/dist/theme/tokens/index.css +19 -0
  591. package/dist/use/index.d.ts +34 -0
  592. package/dist/use/toggle/types.d.ts +27 -0
  593. package/dist/use/toggle/useToggle.d.ts +22 -0
  594. package/dist/use/toggle/useToggleArray.d.ts +14 -0
  595. package/dist/use/toggle/useToggleArray.js +36 -0
  596. package/dist/use/toggle/useToggleArray.js.map +1 -0
  597. package/dist/use/toggle/useToggleCycle.d.ts +11 -0
  598. package/dist/use/toggle/useToggleCycle.js +88 -0
  599. package/dist/use/toggle/useToggleCycle.js.map +1 -0
  600. package/dist/use/toggle/useToggleMap.d.ts +10 -0
  601. package/dist/use/toggle/useToggleObject.d.ts +13 -0
  602. package/dist/use/useAudioPlayer.d.ts +160 -0
  603. package/dist/use/useAudioPlayer.js +799 -0
  604. package/dist/use/useAudioPlayer.js.map +1 -0
  605. package/dist/use/useBoundingClientRect.d.ts +14 -0
  606. package/dist/use/useBoundingClientRect.js +54 -0
  607. package/dist/use/useBoundingClientRect.js.map +1 -0
  608. package/dist/use/useChildComponentsCollector.js +30 -0
  609. package/dist/use/useChildComponentsCollector.js.map +1 -0
  610. package/dist/use/useComponentClass.d.ts +1 -0
  611. package/dist/use/useComponentClass.js +6 -0
  612. package/dist/use/useComponentClass.js.map +1 -0
  613. package/dist/use/useComponentConfig.d.ts +10 -0
  614. package/dist/use/useComponentConfig.js +31 -0
  615. package/dist/use/useComponentConfig.js.map +1 -0
  616. package/dist/use/useCount.d.ts +13 -0
  617. package/dist/use/useCount.js +36 -0
  618. package/dist/use/useCount.js.map +1 -0
  619. package/dist/use/useDate.d.ts +53 -0
  620. package/dist/use/useDate.js +280 -0
  621. package/dist/use/useDate.js.map +1 -0
  622. package/dist/use/useDelay.d.ts +5 -0
  623. package/dist/use/useDelay.js +38 -0
  624. package/dist/use/useDelay.js.map +1 -0
  625. package/dist/use/useDrag.d.ts +17 -0
  626. package/dist/use/useElement.d.ts +15 -0
  627. package/dist/use/useElement.js +41 -0
  628. package/dist/use/useElement.js.map +1 -0
  629. package/dist/use/useEscStack.d.ts +14 -0
  630. package/dist/use/useEscStack.js +62 -0
  631. package/dist/use/useEscStack.js.map +1 -0
  632. package/dist/use/useEvent.d.ts +9 -0
  633. package/dist/use/useEvent.js +43 -0
  634. package/dist/use/useEvent.js.map +1 -0
  635. package/dist/use/useFormItem.d.ts +9 -0
  636. package/dist/use/useFormItem.js +20 -0
  637. package/dist/use/useFormItem.js.map +1 -0
  638. package/dist/use/useGlobalZIndex.d.ts +6 -0
  639. package/dist/use/useGlobalZIndex.js +28 -0
  640. package/dist/use/useGlobalZIndex.js.map +1 -0
  641. package/dist/use/useMouse.d.ts +15 -0
  642. package/dist/use/useMouse.js +36 -0
  643. package/dist/use/useMouse.js.map +1 -0
  644. package/dist/use/useMousePositionInElement.d.ts +6 -0
  645. package/dist/use/useMousePositionInElement.js +27 -0
  646. package/dist/use/useMousePositionInElement.js.map +1 -0
  647. package/dist/use/useParentNode.d.ts +3 -0
  648. package/dist/use/useParentNode.js +25 -0
  649. package/dist/use/useParentNode.js.map +1 -0
  650. package/dist/use/usePercentDrag.d.ts +20 -0
  651. package/dist/use/usePercentDrag.js +59 -0
  652. package/dist/use/usePercentDrag.js.map +1 -0
  653. package/dist/use/usePictureViewport.d.ts +57 -0
  654. package/dist/use/usePictureViewport.js +229 -0
  655. package/dist/use/usePictureViewport.js.map +1 -0
  656. package/dist/use/useRequest.d.ts +7 -0
  657. package/dist/use/useRequest.js +31 -0
  658. package/dist/use/useRequest.js.map +1 -0
  659. package/dist/use/useScaleFromPoint.d.ts +57 -0
  660. package/dist/use/useScaleFromPoint.js +325 -0
  661. package/dist/use/useScaleFromPoint.js.map +1 -0
  662. package/dist/use/useScroll.d.ts +9 -0
  663. package/dist/use/useScroll.js +60 -0
  664. package/dist/use/useScroll.js.map +1 -0
  665. package/dist/use/useSearch.d.ts +11 -0
  666. package/dist/use/useSearch.js +65 -0
  667. package/dist/use/useSearch.js.map +1 -0
  668. package/dist/use/useSlot.d.ts +10 -0
  669. package/dist/use/useSlot.js +57 -0
  670. package/dist/use/useSlot.js.map +1 -0
  671. package/dist/use/useTabIndex.d.ts +1 -0
  672. package/dist/use/useTabIndex.js +18 -0
  673. package/dist/use/useTabIndex.js.map +1 -0
  674. package/dist/use/useUII18n.js +26 -0
  675. package/dist/use/useUII18n.js.map +1 -0
  676. package/dist/use/useUpload.d.ts +49 -0
  677. package/dist/use/useUpload.js +396 -0
  678. package/dist/use/useUpload.js.map +1 -0
  679. package/dist/use/useVisibleResize.d.ts +6 -0
  680. package/dist/use/useVisibleResize.js +77 -0
  681. package/dist/use/useVisibleResize.js.map +1 -0
  682. package/dist/util/calc.d.ts +40 -0
  683. package/dist/util/calc.js +239 -0
  684. package/dist/util/calc.js.map +1 -0
  685. package/dist/util/colors.d.ts +78 -0
  686. package/dist/util/colors.js +320 -0
  687. package/dist/util/colors.js.map +1 -0
  688. package/dist/util/cssVars.d.ts +62 -0
  689. package/dist/util/cssVars.js +170 -0
  690. package/dist/util/cssVars.js.map +1 -0
  691. package/dist/util/dom.d.ts +65 -0
  692. package/dist/util/dom.js +212 -0
  693. package/dist/util/dom.js.map +1 -0
  694. package/dist/util/index.d.ts +5 -0
  695. package/dist/util/tools.d.ts +54 -0
  696. package/dist/util/tools.js +90 -0
  697. package/dist/util/tools.js.map +1 -0
  698. package/dist/util/vnode.d.ts +2 -0
  699. package/package.json +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAudioPlayer.js","names":[],"sources":["../../use/useAudioPlayer.ts"],"sourcesContent":["import {\r\n computed,\r\n onUnmounted,\r\n ref,\r\n toValue,\r\n watch,\r\n type MaybeRefOrGetter,\r\n} from 'vue'\r\n\r\nexport type AudioPlayMode =\r\n | 'sequential'\r\n | 'random'\r\n | 'single-loop'\r\n | 'list-loop'\r\n\r\nexport interface AudioTrack {\r\n id?: string | number\r\n title?: string\r\n name?: string\r\n artist?: string\r\n cover?: string\r\n src?: string\r\n url?: string\r\n blob?: Blob\r\n file?: Blob\r\n arrayBuffer?: ArrayBuffer\r\n mimeType?: string\r\n duration?: number\r\n [key: string]: any\r\n}\r\n\r\nexport interface AudioPlaylist {\r\n id?: string | number\r\n name: string\r\n tracks?: AudioTrack[]\r\n [key: string]: any\r\n}\r\n\r\nexport interface InternalAudioTrack extends Omit<AudioTrack, 'id'> {\r\n id: string\r\n}\r\n\r\nexport interface InternalAudioPlaylist\r\n extends Omit<AudioPlaylist, 'id' | 'tracks'> {\r\n id: string\r\n tracks: InternalAudioTrack[]\r\n}\r\n\r\nexport interface LoadSourceOptions {\r\n autoplay?: boolean\r\n}\r\n\r\nexport interface UseAudioPlayerOptions {\r\n playlists?: MaybeRefOrGetter<AudioPlaylist[]>\r\n source?: MaybeRefOrGetter<AudioTrack | null>\r\n activePlaylistId?: MaybeRefOrGetter<string | number | null | undefined>\r\n activeTrackId?: MaybeRefOrGetter<string | number | null | undefined>\r\n playMode?: MaybeRefOrGetter<AudioPlayMode>\r\n autoplay?: MaybeRefOrGetter<boolean>\r\n preload?: MaybeRefOrGetter<'none' | 'metadata' | 'auto'>\r\n defaultVolume?: number\r\n defaultMuted?: boolean\r\n onPlay?: (track: InternalAudioTrack | null) => void\r\n onPause?: (track: InternalAudioTrack | null) => void\r\n onEnded?: (track: InternalAudioTrack | null) => void\r\n onTimeUpdate?: (payload: {\r\n currentTime: number\r\n duration: number\r\n progressPercent: number\r\n track: InternalAudioTrack | null\r\n }) => void\r\n onVolumeChange?: (payload: {\r\n muted: boolean\r\n volumePercent: number\r\n }) => void\r\n onTrackChange?: (track: InternalAudioTrack | null) => void\r\n onPlaylistChange?: (playlist: InternalAudioPlaylist | null) => void\r\n onPlaylistsChange?: (playlists: InternalAudioPlaylist[]) => void\r\n onPlayModeChange?: (mode: AudioPlayMode) => void\r\n onLoaded?: (track: InternalAudioTrack | null) => void\r\n onError?: (error: unknown) => void\r\n onUpdateActivePlaylistId?: (id: string | null) => void\r\n onUpdateActiveTrackId?: (id: string | null) => void\r\n onUpdatePlayMode?: (mode: AudioPlayMode) => void\r\n}\r\n\r\nconst PLAY_MODES: AudioPlayMode[] = [\r\n 'sequential',\r\n 'random',\r\n 'single-loop',\r\n 'list-loop',\r\n]\r\n\r\nconst clamp = (value: number, min: number, max: number) => {\r\n if (!Number.isFinite(value)) return min\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\nconst normalizePercentInput = (value: number) => {\r\n const safeValue = Number.isFinite(value) ? value : 0\r\n return clamp(safeValue <= 1 ? safeValue * 100 : safeValue, 0, 100)\r\n}\r\n\r\nconst createId = (prefix: string) => {\r\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\r\n}\r\n\r\nexport const formatAudioTime = (seconds: number) => {\r\n if (!Number.isFinite(seconds) || seconds < 0) {\r\n return '00:00'\r\n }\r\n\r\n const totalSeconds = Math.floor(seconds)\r\n const hour = Math.floor(totalSeconds / 3600)\r\n const minute = Math.floor((totalSeconds % 3600) / 60)\r\n const second = totalSeconds % 60\r\n\r\n if (hour > 0) {\r\n return [hour, minute, second]\r\n .map((item) => String(item).padStart(2, '0'))\r\n .join(':')\r\n }\r\n\r\n return [minute, second].map((item) => String(item).padStart(2, '0')).join(':')\r\n}\r\n\r\nconst normalizeTrack = (\r\n track: AudioTrack,\r\n fallbackId: string,\r\n): InternalAudioTrack => {\r\n return {\r\n ...track,\r\n id: track.id != null ? String(track.id) : fallbackId,\r\n }\r\n}\r\n\r\nconst normalizePlaylist = (\r\n playlist: AudioPlaylist,\r\n playlistIndex: number,\r\n): InternalAudioPlaylist => {\r\n const playlistId =\r\n playlist.id != null ? String(playlist.id) : `playlist-${playlistIndex}`\r\n\r\n return {\r\n ...playlist,\r\n id: playlistId,\r\n tracks: (playlist.tracks || []).map((track, trackIndex) =>\r\n normalizeTrack(track, `${playlistId}-track-${trackIndex}`),\r\n ),\r\n }\r\n}\r\n\r\nconst clonePlaylists = (playlists: InternalAudioPlaylist[]) => {\r\n return playlists.map((playlist) => ({\r\n ...playlist,\r\n tracks: playlist.tracks.map((track) => ({ ...track })),\r\n }))\r\n}\r\n\r\nexport default function useAudioPlayer(options: UseAudioPlayerOptions = {}) {\r\n const {\r\n defaultVolume = 100,\r\n defaultMuted = false,\r\n onPlay,\r\n onPause,\r\n onEnded,\r\n onTimeUpdate,\r\n onVolumeChange,\r\n onTrackChange,\r\n onPlaylistChange,\r\n onPlaylistsChange,\r\n onPlayModeChange,\r\n onLoaded,\r\n onError,\r\n onUpdateActivePlaylistId,\r\n onUpdateActiveTrackId,\r\n onUpdatePlayMode,\r\n } = options\r\n\r\n const getPlaylists = () => toValue(options.playlists) ?? []\r\n const getSource = () => toValue(options.source) ?? null\r\n const getActivePlaylistId = () => toValue(options.activePlaylistId)\r\n const getActiveTrackId = () => toValue(options.activeTrackId)\r\n const getPlayMode = () => toValue(options.playMode) ?? 'sequential'\r\n const getAutoplay = () => toValue(options.autoplay) ?? false\r\n const getPreload = () => toValue(options.preload) ?? 'metadata'\r\n\r\n const audioElement =\r\n typeof Audio !== 'undefined'\r\n ? new Audio()\r\n : (null as HTMLAudioElement | null)\r\n\r\n if (audioElement) {\r\n audioElement.preload = getPreload()\r\n audioElement.volume = clamp(defaultVolume, 0, 100) / 100\r\n audioElement.muted = defaultMuted\r\n }\r\n\r\n const playlists = ref<InternalAudioPlaylist[]>(\r\n getPlaylists().map((item, index) => normalizePlaylist(item, index)),\r\n )\r\n const directTrack = ref<InternalAudioTrack | null>(null)\r\n const playbackContext = ref<'playlist' | 'direct'>(\r\n getSource() ? 'direct' : 'playlist',\r\n )\r\n const currentPlaylistId = ref<string | null>(\r\n getActivePlaylistId() != null ? String(getActivePlaylistId()) : null,\r\n )\r\n const currentTrackId = ref<string | null>(\r\n getActiveTrackId() != null ? String(getActiveTrackId()) : null,\r\n )\r\n const playMode = ref<AudioPlayMode>(\r\n PLAY_MODES.includes(getPlayMode()) ? getPlayMode() : 'sequential',\r\n )\r\n\r\n const isReady = ref(false)\r\n const isPlaying = ref(false)\r\n const isLoading = ref(false)\r\n const isMuted = ref(defaultMuted)\r\n const isSeeking = ref(false)\r\n const currentTime = ref(0)\r\n const duration = ref(0)\r\n const bufferedTime = ref(0)\r\n const volumePercent = ref(clamp(defaultVolume, 0, 100))\r\n const lastVolumeBeforeMute = ref(volumePercent.value || 100)\r\n const seekPreviewPercent = ref(0)\r\n const seekPreviewTime = ref(0)\r\n const errorMessage = ref('')\r\n const currentObjectUrl = ref<string | null>(null)\r\n /** 用于取消过期的 load/play,避免切歌时 play 被 pause 打断报错 */\r\n let loadSession = 0\r\n\r\n const currentPlaylist = computed(() => {\r\n if (playbackContext.value !== 'playlist') return null\r\n return (\r\n playlists.value.find((item) => item.id === currentPlaylistId.value) ||\r\n null\r\n )\r\n })\r\n\r\n const currentTrackIndex = computed(() => {\r\n if (playbackContext.value !== 'playlist' || !currentPlaylist.value) {\r\n return -1\r\n }\r\n\r\n return currentPlaylist.value.tracks.findIndex(\r\n (item) => item.id === currentTrackId.value,\r\n )\r\n })\r\n\r\n const currentTrack = computed(() => {\r\n if (playbackContext.value === 'direct') {\r\n return directTrack.value\r\n }\r\n\r\n if (!currentPlaylist.value) return null\r\n return (\r\n currentPlaylist.value.tracks.find(\r\n (item) => item.id === currentTrackId.value,\r\n ) || null\r\n )\r\n })\r\n\r\n const hasTrack = computed(() => Boolean(currentTrack.value))\r\n const progressPercent = computed(() => {\r\n if (!duration.value) return 0\r\n return clamp((currentTime.value / duration.value) * 100, 0, 100)\r\n })\r\n const displayProgressPercent = computed(() => {\r\n return isSeeking.value ? seekPreviewPercent.value : progressPercent.value\r\n })\r\n const displayCurrentTime = computed(() => {\r\n return isSeeking.value ? seekPreviewTime.value : currentTime.value\r\n })\r\n const bufferedPercent = computed(() => {\r\n if (!duration.value) return 0\r\n return clamp((bufferedTime.value / duration.value) * 100, 0, 100)\r\n })\r\n const formattedCurrentTime = computed(() =>\r\n formatAudioTime(currentTime.value),\r\n )\r\n const formattedDuration = computed(() => formatAudioTime(duration.value))\r\n const formattedDisplayCurrentTime = computed(() =>\r\n formatAudioTime(displayCurrentTime.value),\r\n )\r\n const canPlayPrev = computed(() => {\r\n if (playbackContext.value !== 'playlist' || !currentPlaylist.value) {\r\n return false\r\n }\r\n if (playMode.value === 'random' || playMode.value === 'list-loop') {\r\n return currentPlaylist.value.tracks.length > 1\r\n }\r\n\r\n return currentTrackIndex.value > 0\r\n })\r\n const canPlayNext = computed(() => {\r\n if (playbackContext.value !== 'playlist' || !currentPlaylist.value) {\r\n return false\r\n }\r\n if (playMode.value === 'random' || playMode.value === 'list-loop') {\r\n return currentPlaylist.value.tracks.length > 1\r\n }\r\n\r\n return (\r\n currentTrackIndex.value > -1 &&\r\n currentTrackIndex.value < currentPlaylist.value.tracks.length - 1\r\n )\r\n })\r\n const isPaused = computed(() => !isPlaying.value)\r\n\r\n const revokeObjectUrl = () => {\r\n if (currentObjectUrl.value) {\r\n URL.revokeObjectURL(currentObjectUrl.value)\r\n currentObjectUrl.value = null\r\n }\r\n }\r\n\r\n const clearAudioState = () => {\r\n currentTime.value = 0\r\n duration.value = 0\r\n bufferedTime.value = 0\r\n isPlaying.value = false\r\n isLoading.value = false\r\n isReady.value = false\r\n isSeeking.value = false\r\n seekPreviewPercent.value = 0\r\n seekPreviewTime.value = 0\r\n errorMessage.value = ''\r\n }\r\n\r\n const detachMediaSource = () => {\r\n if (!audioElement) return\r\n audioElement.removeAttribute('src')\r\n try {\r\n audioElement.srcObject = null\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n const clearAudioSource = () => {\r\n loadSession += 1\r\n if (!audioElement) {\r\n revokeObjectUrl()\r\n clearAudioState()\r\n return\r\n }\r\n audioElement.pause()\r\n // 移除 src 后不要调用 load():无有效资源时 load 会触发 MEDIA_ELEMENT_ERROR: Format error\r\n detachMediaSource()\r\n revokeObjectUrl()\r\n clearAudioState()\r\n }\r\n\r\n const hasMediaSource = () => {\r\n if (!audioElement) return false\r\n return Boolean(audioElement.getAttribute('src') || audioElement.srcObject)\r\n }\r\n\r\n /** 媒体处于错误态或尚未挂源时需要重新加载 */\r\n const needsMediaReload = () => {\r\n if (!audioElement) return true\r\n if (!hasMediaSource()) return true\r\n return Boolean(audioElement.error)\r\n }\r\n\r\n /**\r\n * 挂载媒体地址。同地址强制重载时先卸源再赋值;不要在空 src 时 load()。\r\n * 赋值 src 本身会触发资源选择,再调 load() 容易与进行中的请求打架导致 Format error。\r\n */\r\n const applyMediaSource = (source: string, forceReload = false) => {\r\n if (!audioElement) return\r\n\r\n const current = audioElement.getAttribute('src')\r\n if (!forceReload && current === source && !audioElement.error) {\r\n return\r\n }\r\n\r\n if (current) {\r\n detachMediaSource()\r\n }\r\n\r\n audioElement.preload = getPreload()\r\n audioElement.src = source\r\n }\r\n\r\n const getTimeByPercent = (percent: number) => {\r\n if (!duration.value) return 0\r\n return duration.value * (normalizePercentInput(percent) / 100)\r\n }\r\n\r\n const resolveTrackSource = (track: InternalAudioTrack | null) => {\r\n if (!track) return ''\r\n\r\n const source = track.src || track.url\r\n if (source) return source\r\n\r\n const binarySource = track.file || track.blob\r\n if (binarySource) {\r\n revokeObjectUrl()\r\n currentObjectUrl.value = URL.createObjectURL(binarySource)\r\n return currentObjectUrl.value\r\n }\r\n\r\n if (track.arrayBuffer) {\r\n revokeObjectUrl()\r\n const blob = new Blob([track.arrayBuffer], {\r\n type: track.mimeType || 'audio/mpeg',\r\n })\r\n currentObjectUrl.value = URL.createObjectURL(blob)\r\n return currentObjectUrl.value\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const emitPlaylistChange = () => {\r\n onPlaylistChange?.(currentPlaylist.value)\r\n onPlaylistsChange?.(clonePlaylists(playlists.value))\r\n }\r\n\r\n const syncSelection = () => {\r\n if (playbackContext.value === 'direct') {\r\n currentPlaylistId.value = null\r\n currentTrackId.value = directTrack.value?.id || null\r\n return\r\n }\r\n\r\n if (!playlists.value.length) {\r\n currentPlaylistId.value = null\r\n currentTrackId.value = null\r\n if (playbackContext.value === 'playlist') {\r\n clearAudioSource()\r\n }\r\n return\r\n }\r\n\r\n const matchedPlaylist =\r\n playlists.value.find((item) => item.id === currentPlaylistId.value) ||\r\n playlists.value[0]\r\n\r\n currentPlaylistId.value = matchedPlaylist.id\r\n\r\n if (!matchedPlaylist.tracks.length) {\r\n currentTrackId.value = null\r\n if (playbackContext.value === 'playlist') {\r\n clearAudioSource()\r\n }\r\n return\r\n }\r\n\r\n const matchedTrack =\r\n matchedPlaylist.tracks.find(\r\n (item) => item.id === currentTrackId.value,\r\n ) || matchedPlaylist.tracks[0]\r\n\r\n currentTrackId.value = matchedTrack.id\r\n }\r\n\r\n const isPlayInterruptedError = (error: unknown) => {\r\n if (!(error instanceof DOMException) && !(error instanceof Error)) {\r\n return false\r\n }\r\n return (\r\n error.name === 'AbortError' ||\r\n /interrupted by a call to pause/i.test(error.message)\r\n )\r\n }\r\n\r\n const waitForCanPlay = (session: number) => {\r\n return new Promise<boolean>((resolve) => {\r\n if (!audioElement) {\r\n resolve(false)\r\n return\r\n }\r\n\r\n if (audioElement.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA) {\r\n resolve(session === loadSession)\r\n return\r\n }\r\n\r\n const onReady = () => {\r\n cleanup()\r\n resolve(session === loadSession)\r\n }\r\n const onError = () => {\r\n cleanup()\r\n resolve(false)\r\n }\r\n const cleanup = () => {\r\n audioElement.removeEventListener('canplay', onReady)\r\n audioElement.removeEventListener('loadeddata', onReady)\r\n audioElement.removeEventListener('error', onError)\r\n }\r\n\r\n audioElement.addEventListener('canplay', onReady)\r\n audioElement.addEventListener('loadeddata', onReady)\r\n audioElement.addEventListener('error', onError)\r\n })\r\n }\r\n\r\n const syncDurationFromElement = () => {\r\n if (!audioElement) return 0\r\n const next = audioElement.duration\r\n if (Number.isFinite(next) && next > 0) {\r\n duration.value = next\r\n return next\r\n }\r\n return duration.value\r\n }\r\n\r\n /** 确保当前曲目已挂上 src 且拿到 duration(初始化不预拉流时首次 seek 需要) */\r\n const ensureMediaReady = async () => {\r\n if (!audioElement || !currentTrack.value) return false\r\n\r\n if (!needsMediaReload() && syncDurationFromElement() > 0) {\r\n return true\r\n }\r\n\r\n if (needsMediaReload()) {\r\n const loaded = await loadCurrentTrack({\r\n autoplay: false,\r\n forceReload: Boolean(audioElement.error),\r\n })\r\n if (!loaded) return false\r\n }\r\n\r\n const session = loadSession\r\n if (syncDurationFromElement() > 0) {\r\n return session === loadSession\r\n }\r\n\r\n return new Promise<boolean>((resolve) => {\r\n if (!audioElement) {\r\n resolve(false)\r\n return\r\n }\r\n\r\n const onReady = () => {\r\n syncDurationFromElement()\r\n cleanup()\r\n resolve(session === loadSession && duration.value > 0)\r\n }\r\n const onError = () => {\r\n cleanup()\r\n resolve(false)\r\n }\r\n const cleanup = () => {\r\n audioElement.removeEventListener('loadedmetadata', onReady)\r\n audioElement.removeEventListener('durationchange', onReady)\r\n audioElement.removeEventListener('error', onError)\r\n }\r\n\r\n audioElement.addEventListener('loadedmetadata', onReady)\r\n audioElement.addEventListener('durationchange', onReady)\r\n audioElement.addEventListener('error', onError)\r\n })\r\n }\r\n\r\n const play = async () => {\r\n if (!audioElement || !currentTrack.value) {\r\n return false\r\n }\r\n\r\n // 无源 / 错误态:重新加载。不可在 loadCurrentTrack 前捕获 session 再比对(会 ++loadSession)。\r\n if (needsMediaReload()) {\r\n return loadCurrentTrack({\r\n autoplay: true,\r\n forceReload: Boolean(audioElement.error),\r\n })\r\n }\r\n\r\n const session = loadSession\r\n\r\n try {\r\n await audioElement.play()\r\n return session === loadSession\r\n } catch (error) {\r\n if (isPlayInterruptedError(error) || session !== loadSession) {\r\n return false\r\n }\r\n\r\n // 播放前资源已损坏时,强制重载一次(loadCurrentTrack 内直接 play,避免递归)\r\n if (audioElement.error || /format error/i.test(String(error))) {\r\n return loadCurrentTrack({\r\n autoplay: true,\r\n forceReload: true,\r\n })\r\n }\r\n\r\n const message =\r\n error instanceof Error ? error.message : 'Audio playback failed.'\r\n errorMessage.value = message\r\n onError?.(error)\r\n return false\r\n }\r\n }\r\n\r\n const pause = () => {\r\n audioElement?.pause()\r\n }\r\n\r\n const togglePlay = async () => {\r\n if (isPlaying.value) {\r\n pause()\r\n return true\r\n }\r\n\r\n return play()\r\n }\r\n\r\n const seek = (time: number) => {\r\n if (!audioElement || !duration.value) return\r\n // 元数据未就绪时 seek 会在 Chromium 触发 MEDIA_ELEMENT_ERROR: Format error\r\n if (audioElement.readyState < HTMLMediaElement.HAVE_METADATA) return\r\n if (audioElement.error) return\r\n const targetTime = clamp(time, 0, duration.value)\r\n try {\r\n audioElement.currentTime = targetTime\r\n currentTime.value = targetTime\r\n } catch {\r\n // ignore InvalidStateError\r\n }\r\n }\r\n\r\n const seekByPercent = (percent: number) => {\r\n seek(getTimeByPercent(percent))\r\n }\r\n\r\n const beginSeeking = (percent?: number) => {\r\n isSeeking.value = true\r\n if (percent == null) {\r\n seekPreviewPercent.value = progressPercent.value\r\n seekPreviewTime.value = currentTime.value\r\n return\r\n }\r\n\r\n updateSeekingByPercent(percent)\r\n }\r\n\r\n const updateSeekingByPercent = (percent: number) => {\r\n const nextPercent = normalizePercentInput(percent)\r\n isSeeking.value = true\r\n seekPreviewPercent.value = nextPercent\r\n seekPreviewTime.value = getTimeByPercent(nextPercent)\r\n }\r\n\r\n const commitSeeking = async (percent?: number) => {\r\n if (percent != null) {\r\n updateSeekingByPercent(percent)\r\n }\r\n\r\n // 先记下百分比:ensure 加载时 loadCurrentTrack 会清空 seek 预览态\r\n const targetPercent = seekPreviewPercent.value\r\n isSeeking.value = false\r\n\r\n const ready = await ensureMediaReady()\r\n if (!ready) return\r\n\r\n seekByPercent(targetPercent)\r\n }\r\n\r\n const cancelSeeking = () => {\r\n isSeeking.value = false\r\n seekPreviewPercent.value = progressPercent.value\r\n seekPreviewTime.value = currentTime.value\r\n }\r\n\r\n const setVolume = (volume: number) => {\r\n setVolumeByPercent(volume)\r\n }\r\n\r\n const setVolumeByPercent = (percent: number) => {\r\n if (!audioElement) return\r\n const nextVolume = normalizePercentInput(percent)\r\n volumePercent.value = nextVolume\r\n audioElement.volume = nextVolume / 100\r\n audioElement.muted = nextVolume === 0\r\n if (nextVolume > 0) {\r\n lastVolumeBeforeMute.value = nextVolume\r\n }\r\n }\r\n\r\n const toggleMute = () => {\r\n if (!audioElement) return\r\n\r\n if (audioElement.muted || volumePercent.value === 0) {\r\n const restoredVolume = lastVolumeBeforeMute.value || 100\r\n audioElement.volume = clamp(restoredVolume, 0, 100) / 100\r\n audioElement.muted = false\r\n volumePercent.value = clamp(restoredVolume, 0, 100)\r\n return\r\n }\r\n\r\n lastVolumeBeforeMute.value = volumePercent.value || 100\r\n audioElement.muted = true\r\n }\r\n\r\n const setPlayMode = (mode: AudioPlayMode) => {\r\n if (!PLAY_MODES.includes(mode)) return\r\n playMode.value = mode\r\n onUpdatePlayMode?.(mode)\r\n onPlayModeChange?.(mode)\r\n }\r\n\r\n const loadCurrentTrack = async (\r\n loadOptions: LoadSourceOptions & { forceReload?: boolean } = {},\r\n ) => {\r\n if (!audioElement || !currentTrack.value) {\r\n clearAudioSource()\r\n return false\r\n }\r\n\r\n const source = resolveTrackSource(currentTrack.value)\r\n if (!source) {\r\n const message = 'Audio source is empty.'\r\n errorMessage.value = message\r\n onError?.(new Error(message))\r\n clearAudioSource()\r\n return false\r\n }\r\n\r\n const session = ++loadSession\r\n errorMessage.value = ''\r\n isLoading.value = true\r\n isReady.value = false\r\n currentTime.value = 0\r\n bufferedTime.value = 0\r\n seekPreviewPercent.value = 0\r\n seekPreviewTime.value = 0\r\n isSeeking.value = false\r\n\r\n try {\r\n audioElement.pause()\r\n } catch {\r\n // ignore\r\n }\r\n\r\n const forceReload =\r\n Boolean(loadOptions.forceReload) || Boolean(audioElement.error)\r\n const needReload =\r\n forceReload || audioElement.getAttribute('src') !== source\r\n\r\n if (needReload) {\r\n applyMediaSource(source, forceReload)\r\n }\r\n\r\n // 不要在 loadedmetadata 前设置 currentTime,否则易触发 Format error\r\n\r\n onTrackChange?.(currentTrack.value)\r\n\r\n if (!loadOptions.autoplay) {\r\n return session === loadSession\r\n }\r\n\r\n const ready = await waitForCanPlay(session)\r\n if (!ready || session !== loadSession) {\r\n if (session === loadSession && !errorMessage.value) {\r\n errorMessage.value = audioElement.error\r\n ? '音频格式不支持或资源无效。'\r\n : '音频加载失败。'\r\n isLoading.value = false\r\n }\r\n return false\r\n }\r\n\r\n try {\r\n audioElement.currentTime = 0\r\n } catch {\r\n // ignore\r\n }\r\n currentTime.value = 0\r\n\r\n // 直接 play,避免经 play() 再次进入 loadCurrentTrack 形成递归\r\n try {\r\n await audioElement.play()\r\n return session === loadSession\r\n } catch (error) {\r\n if (isPlayInterruptedError(error) || session !== loadSession) {\r\n return false\r\n }\r\n const message =\r\n error instanceof Error ? error.message : 'Audio playback failed.'\r\n errorMessage.value = message\r\n onError?.(error)\r\n return false\r\n }\r\n }\r\n\r\n const getRandomTrackIndex = (size: number, excludeIndex: number) => {\r\n if (size <= 1) return excludeIndex\r\n let nextIndex = excludeIndex\r\n while (nextIndex === excludeIndex) {\r\n nextIndex = Math.floor(Math.random() * size)\r\n }\r\n return nextIndex\r\n }\r\n\r\n const moveTrack = async (direction: 'prev' | 'next', fromEnded = false) => {\r\n if (playbackContext.value !== 'playlist' || !currentPlaylist.value) {\r\n return false\r\n }\r\n\r\n const tracks = currentPlaylist.value.tracks\r\n if (!tracks.length || currentTrackIndex.value < 0) {\r\n return false\r\n }\r\n\r\n let nextIndex = currentTrackIndex.value\r\n\r\n if (playMode.value === 'random') {\r\n nextIndex = getRandomTrackIndex(tracks.length, currentTrackIndex.value)\r\n } else if (fromEnded && playMode.value === 'single-loop') {\r\n nextIndex = currentTrackIndex.value\r\n } else if (direction === 'prev') {\r\n if (playMode.value === 'list-loop') {\r\n nextIndex =\r\n (currentTrackIndex.value - 1 + tracks.length) % tracks.length\r\n } else {\r\n nextIndex = currentTrackIndex.value - 1\r\n }\r\n } else if (playMode.value === 'list-loop') {\r\n nextIndex = (currentTrackIndex.value + 1) % tracks.length\r\n } else {\r\n nextIndex = currentTrackIndex.value + 1\r\n }\r\n\r\n if (nextIndex < 0 || nextIndex >= tracks.length) {\r\n if (fromEnded) {\r\n pause()\r\n }\r\n return false\r\n }\r\n\r\n currentTrackId.value = tracks[nextIndex].id\r\n onUpdateActiveTrackId?.(currentTrackId.value)\r\n return loadCurrentTrack({\r\n autoplay: true,\r\n })\r\n }\r\n\r\n const prev = async () => {\r\n if (\r\n playbackContext.value === 'playlist' &&\r\n currentPlaylist.value &&\r\n currentTime.value > 5\r\n ) {\r\n seek(0)\r\n return true\r\n }\r\n\r\n return moveTrack('prev')\r\n }\r\n\r\n const next = async () => {\r\n return moveTrack('next')\r\n }\r\n\r\n const playTrack = async (\r\n trackIdOrIndex: string | number,\r\n playlistId?: string | number,\r\n ) => {\r\n const targetPlaylist =\r\n playlists.value.find(\r\n (item) =>\r\n item.id ===\r\n String(\r\n playlistId != null ? playlistId : currentPlaylistId.value || '',\r\n ),\r\n ) || currentPlaylist.value\r\n\r\n if (!targetPlaylist || !targetPlaylist.tracks.length) {\r\n return false\r\n }\r\n\r\n const targetTrack =\r\n typeof trackIdOrIndex === 'number'\r\n ? targetPlaylist.tracks[trackIdOrIndex]\r\n : targetPlaylist.tracks.find(\r\n (item) => item.id === String(trackIdOrIndex),\r\n )\r\n\r\n if (!targetTrack) {\r\n return false\r\n }\r\n\r\n playbackContext.value = 'playlist'\r\n directTrack.value = null\r\n currentPlaylistId.value = targetPlaylist.id\r\n currentTrackId.value = targetTrack.id\r\n onUpdateActivePlaylistId?.(targetPlaylist.id)\r\n onUpdateActiveTrackId?.(targetTrack.id)\r\n\r\n // 切歌不改播放列表内容,避免触发 props watch 再次 pause 打断 play\r\n return loadCurrentTrack({\r\n autoplay: true,\r\n forceReload: true,\r\n })\r\n }\r\n\r\n const switchPlaylist = async (\r\n playlistId: string | number,\r\n switchOptions: LoadSourceOptions & { trackId?: string | number } = {},\r\n ) => {\r\n const targetPlaylist =\r\n playlists.value.find((item) => item.id === String(playlistId)) || null\r\n\r\n if (!targetPlaylist) return false\r\n\r\n playbackContext.value = 'playlist'\r\n directTrack.value = null\r\n currentPlaylistId.value = targetPlaylist.id\r\n currentTrackId.value =\r\n switchOptions.trackId != null\r\n ? String(switchOptions.trackId)\r\n : targetPlaylist.tracks[0]?.id || null\r\n\r\n onUpdateActivePlaylistId?.(currentPlaylistId.value)\r\n onUpdateActiveTrackId?.(currentTrackId.value)\r\n emitPlaylistChange()\r\n\r\n return loadCurrentTrack({\r\n autoplay: switchOptions.autoplay,\r\n })\r\n }\r\n\r\n const loadSource = async (\r\n source: AudioTrack,\r\n loadOptions: LoadSourceOptions = {},\r\n ) => {\r\n playbackContext.value = 'direct'\r\n directTrack.value = normalizeTrack(source, 'direct-track')\r\n currentPlaylistId.value = null\r\n currentTrackId.value = directTrack.value.id\r\n onUpdateActivePlaylistId?.(null)\r\n onUpdateActiveTrackId?.(directTrack.value.id)\r\n return loadCurrentTrack({\r\n autoplay: loadOptions.autoplay ?? getAutoplay(),\r\n })\r\n }\r\n\r\n const clearSource = () => {\r\n directTrack.value = null\r\n if (playbackContext.value === 'direct') {\r\n currentPlaylistId.value = null\r\n currentTrackId.value = null\r\n clearAudioSource()\r\n onUpdateActivePlaylistId?.(null)\r\n onUpdateActiveTrackId?.(null)\r\n }\r\n }\r\n\r\n const createPlaylist = (name: string, tracks: AudioTrack[] = []) => {\r\n const playlist = normalizePlaylist(\r\n {\r\n id: createId('playlist'),\r\n name,\r\n tracks,\r\n },\r\n playlists.value.length,\r\n )\r\n\r\n playlists.value = [...playlists.value, playlist]\r\n if (!currentPlaylistId.value) {\r\n currentPlaylistId.value = playlist.id\r\n }\r\n emitPlaylistChange()\r\n return playlist\r\n }\r\n\r\n const renamePlaylist = (playlistId: string | number, name: string) => {\r\n const target = playlists.value.find(\r\n (item) => item.id === String(playlistId),\r\n )\r\n if (!target) return false\r\n target.name = name\r\n emitPlaylistChange()\r\n return true\r\n }\r\n\r\n const deletePlaylist = (playlistId: string | number) => {\r\n const targetId = String(playlistId)\r\n const nextPlaylists = playlists.value.filter(\r\n (item) => item.id !== targetId,\r\n )\r\n if (nextPlaylists.length === playlists.value.length) return false\r\n\r\n const deletingCurrent =\r\n playbackContext.value === 'playlist' &&\r\n currentPlaylistId.value === targetId\r\n\r\n playlists.value = nextPlaylists\r\n syncSelection()\r\n\r\n if (deletingCurrent && currentTrack.value) {\r\n loadCurrentTrack({\r\n autoplay: isPlaying.value,\r\n })\r\n }\r\n\r\n emitPlaylistChange()\r\n return true\r\n }\r\n\r\n const addTracksToPlaylist = (\r\n playlistId: string | number,\r\n tracks: AudioTrack[],\r\n ) => {\r\n const target = playlists.value.find(\r\n (item) => item.id === String(playlistId),\r\n )\r\n if (!target || !tracks.length) return []\r\n\r\n const appendedTracks = tracks.map((track, index) =>\r\n normalizeTrack(\r\n track,\r\n createId(`${target.id}-track-${target.tracks.length + index}`),\r\n ),\r\n )\r\n\r\n target.tracks.push(...appendedTracks)\r\n\r\n if (\r\n playbackContext.value === 'playlist' &&\r\n target.id === currentPlaylistId.value &&\r\n !currentTrackId.value\r\n ) {\r\n currentTrackId.value = target.tracks[0]?.id || null\r\n }\r\n\r\n emitPlaylistChange()\r\n return appendedTracks\r\n }\r\n\r\n const removeTracksFromPlaylist = (\r\n playlistId: string | number,\r\n trackIds: Array<string | number>,\r\n ) => {\r\n const target = playlists.value.find(\r\n (item) => item.id === String(playlistId),\r\n )\r\n if (!target || !trackIds.length) return false\r\n\r\n const removingIds = new Set(trackIds.map((item) => String(item)))\r\n const existed = target.tracks.length\r\n target.tracks = target.tracks.filter((item) => !removingIds.has(item.id))\r\n\r\n if (existed === target.tracks.length) {\r\n return false\r\n }\r\n\r\n if (\r\n playbackContext.value === 'playlist' &&\r\n target.id === currentPlaylistId.value &&\r\n currentTrackId.value &&\r\n removingIds.has(currentTrackId.value)\r\n ) {\r\n currentTrackId.value = target.tracks[0]?.id || null\r\n if (currentTrackId.value) {\r\n loadCurrentTrack({\r\n autoplay: isPlaying.value,\r\n })\r\n } else {\r\n clearAudioSource()\r\n }\r\n }\r\n\r\n emitPlaylistChange()\r\n return true\r\n }\r\n\r\n const setPlaylists = (nextPlaylists: AudioPlaylist[]) => {\r\n playlists.value = nextPlaylists.map((item, index) =>\r\n normalizePlaylist(item, index),\r\n )\r\n syncSelection()\r\n if (playbackContext.value === 'playlist' && currentTrack.value) {\r\n loadCurrentTrack({\r\n autoplay: isPlaying.value,\r\n })\r\n }\r\n emitPlaylistChange()\r\n }\r\n\r\n const reset = () => {\r\n pause()\r\n seek(0)\r\n isSeeking.value = false\r\n errorMessage.value = ''\r\n }\r\n\r\n if (audioElement) {\r\n audioElement.addEventListener('play', () => {\r\n isPlaying.value = true\r\n onPlay?.(currentTrack.value)\r\n })\r\n\r\n audioElement.addEventListener('pause', () => {\r\n isPlaying.value = false\r\n onPause?.(currentTrack.value)\r\n })\r\n\r\n audioElement.addEventListener('waiting', () => {\r\n isLoading.value = true\r\n })\r\n\r\n audioElement.addEventListener('canplay', () => {\r\n isLoading.value = false\r\n isReady.value = true\r\n })\r\n\r\n audioElement.addEventListener('loadedmetadata', () => {\r\n duration.value = Number.isFinite(audioElement.duration)\r\n ? audioElement.duration\r\n : currentTrack.value?.duration || 0\r\n isReady.value = true\r\n isLoading.value = false\r\n onLoaded?.(currentTrack.value)\r\n })\r\n\r\n audioElement.addEventListener('durationchange', () => {\r\n duration.value = Number.isFinite(audioElement.duration)\r\n ? audioElement.duration\r\n : duration.value\r\n })\r\n\r\n audioElement.addEventListener('timeupdate', () => {\r\n currentTime.value = audioElement.currentTime || 0\r\n onTimeUpdate?.({\r\n currentTime: currentTime.value,\r\n duration: duration.value,\r\n progressPercent: progressPercent.value,\r\n track: currentTrack.value,\r\n })\r\n })\r\n\r\n audioElement.addEventListener('progress', () => {\r\n if (!audioElement.buffered.length) return\r\n bufferedTime.value = audioElement.buffered.end(\r\n audioElement.buffered.length - 1,\r\n )\r\n })\r\n\r\n audioElement.addEventListener('volumechange', () => {\r\n isMuted.value = audioElement.muted\r\n volumePercent.value = Math.round(audioElement.volume * 100)\r\n if (!audioElement.muted && volumePercent.value > 0) {\r\n lastVolumeBeforeMute.value = volumePercent.value\r\n }\r\n onVolumeChange?.({\r\n muted: isMuted.value,\r\n volumePercent: volumePercent.value,\r\n })\r\n })\r\n\r\n audioElement.addEventListener('ended', async () => {\r\n onEnded?.(currentTrack.value)\r\n await moveTrack('next', true)\r\n })\r\n\r\n audioElement.addEventListener('error', () => {\r\n // 清空资源时可能仍冒泡 error,忽略无有效 src 的情况\r\n if (!hasMediaSource()) {\r\n return\r\n }\r\n\r\n const srcWhenError = audioElement.getAttribute('src')\r\n const sessionWhenError = loadSession\r\n const mediaError = audioElement.error\r\n\r\n // 切源 abort 时 Chromium 常同步抛 Format error,稍后再确认是否真的失败\r\n window.setTimeout(() => {\r\n if (sessionWhenError !== loadSession) return\r\n if (!hasMediaSource()) return\r\n if (audioElement.getAttribute('src') !== srcWhenError) return\r\n if (audioElement.readyState >= HTMLMediaElement.HAVE_METADATA) return\r\n if (!audioElement.error) return\r\n if (audioElement.error.code === MediaError.MEDIA_ERR_ABORTED) return\r\n\r\n const code = audioElement.error.code\r\n const rawMessage = audioElement.error.message || mediaError?.message || ''\r\n const isFormatError =\r\n code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED ||\r\n /format error/i.test(rawMessage)\r\n\r\n errorMessage.value = isFormatError\r\n ? '音频格式不支持或资源无效。'\r\n : rawMessage || 'Audio load failed.'\r\n isLoading.value = false\r\n onError?.(audioElement.error || new Error(errorMessage.value))\r\n }, 80)\r\n })\r\n }\r\n\r\n watch(\r\n () => getPlayMode(),\r\n (value) => {\r\n if (PLAY_MODES.includes(value)) {\r\n playMode.value = value\r\n }\r\n },\r\n )\r\n\r\n watch(\r\n () => getPlaylists(),\r\n (value) => {\r\n const prevTrackId = currentTrackId.value\r\n const prevSource = currentTrack.value\r\n ? currentTrack.value.src || currentTrack.value.url || ''\r\n : ''\r\n const wasPlaying = isPlaying.value\r\n\r\n playlists.value = value.map((item, index) =>\r\n normalizePlaylist(item, index),\r\n )\r\n syncSelection()\r\n\r\n if (playbackContext.value !== 'playlist' || !currentTrack.value) {\r\n return\r\n }\r\n\r\n const nextSource =\r\n currentTrack.value.src || currentTrack.value.url || ''\r\n const sameTrack =\r\n currentTrackId.value === prevTrackId && nextSource === prevSource\r\n\r\n // 当前曲目未变时不重载,避免打断正在进行的 play()\r\n if (sameTrack) {\r\n return\r\n }\r\n\r\n loadCurrentTrack({\r\n autoplay: wasPlaying,\r\n })\r\n },\r\n {\r\n deep: true,\r\n },\r\n )\r\n\r\n watch(\r\n () => getActivePlaylistId(),\r\n (value) => {\r\n if (value == null) return\r\n const nextPlaylistId = String(value)\r\n if (currentPlaylistId.value === nextPlaylistId) return\r\n playbackContext.value = 'playlist'\r\n directTrack.value = null\r\n currentPlaylistId.value = nextPlaylistId\r\n syncSelection()\r\n if (currentTrack.value) {\r\n onUpdateActiveTrackId?.(currentTrack.value.id)\r\n loadCurrentTrack({\r\n autoplay: false,\r\n })\r\n }\r\n },\r\n )\r\n\r\n watch(\r\n () => getActiveTrackId(),\r\n (value) => {\r\n if (value == null) return\r\n const nextTrackId = String(value)\r\n if (currentTrackId.value === nextTrackId) return\r\n playbackContext.value = 'playlist'\r\n directTrack.value = null\r\n currentTrackId.value = nextTrackId\r\n if (currentTrack.value) {\r\n loadCurrentTrack({\r\n autoplay: false,\r\n })\r\n }\r\n },\r\n )\r\n\r\n watch(\r\n () => getSource(),\r\n (value) => {\r\n if (!value) return\r\n loadSource(value, {\r\n autoplay: getAutoplay(),\r\n })\r\n },\r\n {\r\n deep: true,\r\n immediate: true,\r\n },\r\n )\r\n\r\n syncSelection()\r\n\r\n // 初始化不主动拉流:此时资源可能尚未就绪(或列表为空已 clear),\r\n // 过早 load 容易触发 Format error;首次 play / playTrack 再加载。\r\n\r\n onUnmounted(() => {\r\n clearAudioSource()\r\n })\r\n\r\n return {\r\n audioElement,\r\n playlists,\r\n currentPlaylist,\r\n currentPlaylistId,\r\n currentTrack,\r\n currentTrackId,\r\n currentTrackIndex,\r\n playMode,\r\n isPlaying,\r\n isPaused,\r\n isLoading,\r\n isReady,\r\n isMuted,\r\n isSeeking,\r\n hasTrack,\r\n currentTime,\r\n duration,\r\n bufferedTime,\r\n progressPercent,\r\n displayProgressPercent,\r\n bufferedPercent,\r\n seekPreviewPercent,\r\n volumePercent,\r\n displayCurrentTime,\r\n formattedCurrentTime,\r\n formattedDuration,\r\n formattedDisplayCurrentTime,\r\n canPlayPrev,\r\n canPlayNext,\r\n errorMessage,\r\n play,\r\n pause,\r\n togglePlay,\r\n seek,\r\n seekByPercent,\r\n beginSeeking,\r\n updateSeekingByPercent,\r\n commitSeeking,\r\n cancelSeeking,\r\n getTimeByPercent,\r\n setVolume,\r\n setVolumeByPercent,\r\n toggleMute,\r\n setPlayMode,\r\n prev,\r\n next,\r\n playTrack,\r\n switchPlaylist,\r\n loadSource,\r\n clearSource,\r\n createPlaylist,\r\n renamePlaylist,\r\n deletePlaylist,\r\n addTracksToPlaylist,\r\n removeTracksFromPlaylist,\r\n setPlaylists,\r\n reset,\r\n formatTime: formatAudioTime,\r\n }\r\n}\r\n"],"mappings":";;AAsFA,IAAM,aAA8B;CAClC;CACA;CACA;CACA;AACF;AAEA,IAAM,SAAS,OAAe,KAAa,QAAgB;CACzD,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO;CACpC,OAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;AAEA,IAAM,yBAAyB,UAAkB;CAC/C,MAAM,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;CACnD,OAAO,MAAM,aAAa,IAAI,YAAY,MAAM,WAAW,GAAG,GAAG;AACnE;AAEA,IAAM,YAAY,WAAmB;CACnC,OAAO,GAAG,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;AACzE;AAEA,IAAa,mBAAmB,YAAoB;CAClD,IAAI,CAAC,OAAO,SAAS,OAAO,KAAK,UAAU,GACzC,OAAO;CAGT,MAAM,eAAe,KAAK,MAAM,OAAO;CACvC,MAAM,OAAO,KAAK,MAAM,eAAe,IAAI;CAC3C,MAAM,SAAS,KAAK,MAAO,eAAe,OAAQ,EAAE;CACpD,MAAM,SAAS,eAAe;CAE9B,IAAI,OAAO,GACT,OAAO;EAAC;EAAM;EAAQ;CAAM,CAAC,CAC1B,KAAK,SAAS,OAAO,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAC5C,KAAK,GAAG;CAGb,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC,KAAK,SAAS,OAAO,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;AAC/E;AAEA,IAAM,kBACJ,OACA,eACuB;CACvB,OAAO;EACL,GAAG;EACH,IAAI,MAAM,MAAM,OAAO,OAAO,MAAM,EAAE,IAAI;CAC5C;AACF;AAEA,IAAM,qBACJ,UACA,kBAC0B;CAC1B,MAAM,aACJ,SAAS,MAAM,OAAO,OAAO,SAAS,EAAE,IAAI,YAAY;CAE1D,OAAO;EACL,GAAG;EACH,IAAI;EACJ,SAAS,SAAS,UAAU,CAAC,EAAA,CAAG,KAAK,OAAO,eAC1C,eAAe,OAAO,GAAG,WAAW,SAAS,YAAY,CAC3D;CACF;AACF;AAEA,IAAM,kBAAkB,cAAuC;CAC7D,OAAO,UAAU,KAAK,cAAc;EAClC,GAAG;EACH,QAAQ,SAAS,OAAO,KAAK,WAAW,EAAE,GAAG,MAAM,EAAE;CACvD,EAAE;AACJ;AAEA,SAAwB,eAAe,UAAiC,CAAC,GAAG;CAC1E,MAAM,EACJ,gBAAgB,KAChB,eAAe,OACf,QACA,SACA,SACA,cACA,gBACA,eACA,kBACA,mBACA,kBACA,UACA,SACA,0BACA,uBACA,qBACE;CAEJ,MAAM,qBAAqB,QAAQ,QAAQ,SAAS,KAAK,CAAC;CAC1D,MAAM,kBAAkB,QAAQ,QAAQ,MAAM,KAAK;CACnD,MAAM,4BAA4B,QAAQ,QAAQ,gBAAgB;CAClE,MAAM,yBAAyB,QAAQ,QAAQ,aAAa;CAC5D,MAAM,oBAAoB,QAAQ,QAAQ,QAAQ,KAAK;CACvD,MAAM,oBAAoB,QAAQ,QAAQ,QAAQ,KAAK;CACvD,MAAM,mBAAmB,QAAQ,QAAQ,OAAO,KAAK;CAErD,MAAM,eACJ,OAAO,UAAU,cACb,IAAI,MAAM,IACT;CAEP,IAAI,cAAc;EAChB,aAAa,UAAU,WAAW;EAClC,aAAa,SAAS,MAAM,eAAe,GAAG,GAAG,IAAI;EACrD,aAAa,QAAQ;CACvB;CAEA,MAAM,YAAY,IAChB,aAAa,CAAC,CAAC,KAAK,MAAM,UAAU,kBAAkB,MAAM,KAAK,CAAC,CACpE;CACA,MAAM,cAAc,IAA+B,IAAI;CACvD,MAAM,kBAAkB,IACtB,UAAU,IAAI,WAAW,UAC3B;CACA,MAAM,oBAAoB,IACxB,oBAAoB,KAAK,OAAO,OAAO,oBAAoB,CAAC,IAAI,IAClE;CACA,MAAM,iBAAiB,IACrB,iBAAiB,KAAK,OAAO,OAAO,iBAAiB,CAAC,IAAI,IAC5D;CACA,MAAM,WAAW,IACf,WAAW,SAAS,YAAY,CAAC,IAAI,YAAY,IAAI,YACvD;CAEA,MAAM,UAAU,IAAI,KAAK;CACzB,MAAM,YAAY,IAAI,KAAK;CAC3B,MAAM,YAAY,IAAI,KAAK;CAC3B,MAAM,UAAU,IAAI,YAAY;CAChC,MAAM,YAAY,IAAI,KAAK;CAC3B,MAAM,cAAc,IAAI,CAAC;CACzB,MAAM,WAAW,IAAI,CAAC;CACtB,MAAM,eAAe,IAAI,CAAC;CAC1B,MAAM,gBAAgB,IAAI,MAAM,eAAe,GAAG,GAAG,CAAC;CACtD,MAAM,uBAAuB,IAAI,cAAc,SAAS,GAAG;CAC3D,MAAM,qBAAqB,IAAI,CAAC;CAChC,MAAM,kBAAkB,IAAI,CAAC;CAC7B,MAAM,eAAe,IAAI,EAAE;CAC3B,MAAM,mBAAmB,IAAmB,IAAI;;CAEhD,IAAI,cAAc;CAElB,MAAM,kBAAkB,eAAe;EACrC,IAAI,gBAAgB,UAAU,YAAY,OAAO;EACjD,OACE,UAAU,MAAM,MAAM,SAAS,KAAK,OAAO,kBAAkB,KAAK,KAClE;CAEJ,CAAC;CAED,MAAM,oBAAoB,eAAe;EACvC,IAAI,gBAAgB,UAAU,cAAc,CAAC,gBAAgB,OAC3D,OAAO;EAGT,OAAO,gBAAgB,MAAM,OAAO,WACjC,SAAS,KAAK,OAAO,eAAe,KACvC;CACF,CAAC;CAED,MAAM,eAAe,eAAe;EAClC,IAAI,gBAAgB,UAAU,UAC5B,OAAO,YAAY;EAGrB,IAAI,CAAC,gBAAgB,OAAO,OAAO;EACnC,OACE,gBAAgB,MAAM,OAAO,MAC1B,SAAS,KAAK,OAAO,eAAe,KACvC,KAAK;CAET,CAAC;CAED,MAAM,WAAW,eAAe,QAAQ,aAAa,KAAK,CAAC;CAC3D,MAAM,kBAAkB,eAAe;EACrC,IAAI,CAAC,SAAS,OAAO,OAAO;EAC5B,OAAO,MAAO,YAAY,QAAQ,SAAS,QAAS,KAAK,GAAG,GAAG;CACjE,CAAC;CACD,MAAM,yBAAyB,eAAe;EAC5C,OAAO,UAAU,QAAQ,mBAAmB,QAAQ,gBAAgB;CACtE,CAAC;CACD,MAAM,qBAAqB,eAAe;EACxC,OAAO,UAAU,QAAQ,gBAAgB,QAAQ,YAAY;CAC/D,CAAC;CACD,MAAM,kBAAkB,eAAe;EACrC,IAAI,CAAC,SAAS,OAAO,OAAO;EAC5B,OAAO,MAAO,aAAa,QAAQ,SAAS,QAAS,KAAK,GAAG,GAAG;CAClE,CAAC;CACD,MAAM,uBAAuB,eAC3B,gBAAgB,YAAY,KAAK,CACnC;CACA,MAAM,oBAAoB,eAAe,gBAAgB,SAAS,KAAK,CAAC;CACxE,MAAM,8BAA8B,eAClC,gBAAgB,mBAAmB,KAAK,CAC1C;CACA,MAAM,cAAc,eAAe;EACjC,IAAI,gBAAgB,UAAU,cAAc,CAAC,gBAAgB,OAC3D,OAAO;EAET,IAAI,SAAS,UAAU,YAAY,SAAS,UAAU,aACpD,OAAO,gBAAgB,MAAM,OAAO,SAAS;EAG/C,OAAO,kBAAkB,QAAQ;CACnC,CAAC;CACD,MAAM,cAAc,eAAe;EACjC,IAAI,gBAAgB,UAAU,cAAc,CAAC,gBAAgB,OAC3D,OAAO;EAET,IAAI,SAAS,UAAU,YAAY,SAAS,UAAU,aACpD,OAAO,gBAAgB,MAAM,OAAO,SAAS;EAG/C,OACE,kBAAkB,QAAQ,MAC1B,kBAAkB,QAAQ,gBAAgB,MAAM,OAAO,SAAS;CAEpE,CAAC;CACD,MAAM,WAAW,eAAe,CAAC,UAAU,KAAK;CAEhD,MAAM,wBAAwB;EAC5B,IAAI,iBAAiB,OAAO;GAC1B,IAAI,gBAAgB,iBAAiB,KAAK;GAC1C,iBAAiB,QAAQ;EAC3B;CACF;CAEA,MAAM,wBAAwB;EAC5B,YAAY,QAAQ;EACpB,SAAS,QAAQ;EACjB,aAAa,QAAQ;EACrB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,mBAAmB,QAAQ;EAC3B,gBAAgB,QAAQ;EACxB,aAAa,QAAQ;CACvB;CAEA,MAAM,0BAA0B;EAC9B,IAAI,CAAC,cAAc;EACnB,aAAa,gBAAgB,KAAK;EAClC,IAAI;GACF,aAAa,YAAY;EAC3B,QAAQ,CAER;CACF;CAEA,MAAM,yBAAyB;EAC7B,eAAe;EACf,IAAI,CAAC,cAAc;GACjB,gBAAgB;GAChB,gBAAgB;GAChB;EACF;EACA,aAAa,MAAM;EAEnB,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;CAClB;CAEA,MAAM,uBAAuB;EAC3B,IAAI,CAAC,cAAc,OAAO;EAC1B,OAAO,QAAQ,aAAa,aAAa,KAAK,KAAK,aAAa,SAAS;CAC3E;;CAGA,MAAM,yBAAyB;EAC7B,IAAI,CAAC,cAAc,OAAO;EAC1B,IAAI,CAAC,eAAe,GAAG,OAAO;EAC9B,OAAO,QAAQ,aAAa,KAAK;CACnC;;;;;CAMA,MAAM,oBAAoB,QAAgB,cAAc,UAAU;EAChE,IAAI,CAAC,cAAc;EAEnB,MAAM,UAAU,aAAa,aAAa,KAAK;EAC/C,IAAI,CAAC,eAAe,YAAY,UAAU,CAAC,aAAa,OACtD;EAGF,IAAI,SACF,kBAAkB;EAGpB,aAAa,UAAU,WAAW;EAClC,aAAa,MAAM;CACrB;CAEA,MAAM,oBAAoB,YAAoB;EAC5C,IAAI,CAAC,SAAS,OAAO,OAAO;EAC5B,OAAO,SAAS,SAAS,sBAAsB,OAAO,IAAI;CAC5D;CAEA,MAAM,sBAAsB,UAAqC;EAC/D,IAAI,CAAC,OAAO,OAAO;EAEnB,MAAM,SAAS,MAAM,OAAO,MAAM;EAClC,IAAI,QAAQ,OAAO;EAEnB,MAAM,eAAe,MAAM,QAAQ,MAAM;EACzC,IAAI,cAAc;GAChB,gBAAgB;GAChB,iBAAiB,QAAQ,IAAI,gBAAgB,YAAY;GACzD,OAAO,iBAAiB;EAC1B;EAEA,IAAI,MAAM,aAAa;GACrB,gBAAgB;GAChB,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,WAAW,GAAG,EACzC,MAAM,MAAM,YAAY,aAC1B,CAAC;GACD,iBAAiB,QAAQ,IAAI,gBAAgB,IAAI;GACjD,OAAO,iBAAiB;EAC1B;EAEA,OAAO;CACT;CAEA,MAAM,2BAA2B;EAC/B,mBAAmB,gBAAgB,KAAK;EACxC,oBAAoB,eAAe,UAAU,KAAK,CAAC;CACrD;CAEA,MAAM,sBAAsB;EAC1B,IAAI,gBAAgB,UAAU,UAAU;GACtC,kBAAkB,QAAQ;GAC1B,eAAe,QAAQ,YAAY,OAAO,MAAM;GAChD;EACF;EAEA,IAAI,CAAC,UAAU,MAAM,QAAQ;GAC3B,kBAAkB,QAAQ;GAC1B,eAAe,QAAQ;GACvB,IAAI,gBAAgB,UAAU,YAC5B,iBAAiB;GAEnB;EACF;EAEA,MAAM,kBACJ,UAAU,MAAM,MAAM,SAAS,KAAK,OAAO,kBAAkB,KAAK,KAClE,UAAU,MAAM;EAElB,kBAAkB,QAAQ,gBAAgB;EAE1C,IAAI,CAAC,gBAAgB,OAAO,QAAQ;GAClC,eAAe,QAAQ;GACvB,IAAI,gBAAgB,UAAU,YAC5B,iBAAiB;GAEnB;EACF;EAEA,MAAM,eACJ,gBAAgB,OAAO,MACpB,SAAS,KAAK,OAAO,eAAe,KACvC,KAAK,gBAAgB,OAAO;EAE9B,eAAe,QAAQ,aAAa;CACtC;CAEA,MAAM,0BAA0B,UAAmB;EACjD,IAAI,EAAE,iBAAiB,iBAAiB,EAAE,iBAAiB,QACzD,OAAO;EAET,OACE,MAAM,SAAS,gBACf,kCAAkC,KAAK,MAAM,OAAO;CAExD;CAEA,MAAM,kBAAkB,YAAoB;EAC1C,OAAO,IAAI,SAAkB,YAAY;GACvC,IAAI,CAAC,cAAc;IACjB,QAAQ,KAAK;IACb;GACF;GAEA,IAAI,aAAa,cAAc,iBAAiB,kBAAkB;IAChE,QAAQ,YAAY,WAAW;IAC/B;GACF;GAEA,MAAM,gBAAgB;IACpB,QAAQ;IACR,QAAQ,YAAY,WAAW;GACjC;GACA,MAAM,gBAAgB;IACpB,QAAQ;IACR,QAAQ,KAAK;GACf;GACA,MAAM,gBAAgB;IACpB,aAAa,oBAAoB,WAAW,OAAO;IACnD,aAAa,oBAAoB,cAAc,OAAO;IACtD,aAAa,oBAAoB,SAAS,OAAO;GACnD;GAEA,aAAa,iBAAiB,WAAW,OAAO;GAChD,aAAa,iBAAiB,cAAc,OAAO;GACnD,aAAa,iBAAiB,SAAS,OAAO;EAChD,CAAC;CACH;CAEA,MAAM,gCAAgC;EACpC,IAAI,CAAC,cAAc,OAAO;EAC1B,MAAM,OAAO,aAAa;EAC1B,IAAI,OAAO,SAAS,IAAI,KAAK,OAAO,GAAG;GACrC,SAAS,QAAQ;GACjB,OAAO;EACT;EACA,OAAO,SAAS;CAClB;;CAGA,MAAM,mBAAmB,YAAY;EACnC,IAAI,CAAC,gBAAgB,CAAC,aAAa,OAAO,OAAO;EAEjD,IAAI,CAAC,iBAAiB,KAAK,wBAAwB,IAAI,GACrD,OAAO;EAGT,IAAI,iBAAiB,GAKf;OAAA,CAAC,MAJgB,iBAAiB;IACpC,UAAU;IACV,aAAa,QAAQ,aAAa,KAAK;GACzC,CAAC,GACY,OAAO;EAAA;EAGtB,MAAM,UAAU;EAChB,IAAI,wBAAwB,IAAI,GAC9B,OAAO,YAAY;EAGrB,OAAO,IAAI,SAAkB,YAAY;GACvC,IAAI,CAAC,cAAc;IACjB,QAAQ,KAAK;IACb;GACF;GAEA,MAAM,gBAAgB;IACpB,wBAAwB;IACxB,QAAQ;IACR,QAAQ,YAAY,eAAe,SAAS,QAAQ,CAAC;GACvD;GACA,MAAM,gBAAgB;IACpB,QAAQ;IACR,QAAQ,KAAK;GACf;GACA,MAAM,gBAAgB;IACpB,aAAa,oBAAoB,kBAAkB,OAAO;IAC1D,aAAa,oBAAoB,kBAAkB,OAAO;IAC1D,aAAa,oBAAoB,SAAS,OAAO;GACnD;GAEA,aAAa,iBAAiB,kBAAkB,OAAO;GACvD,aAAa,iBAAiB,kBAAkB,OAAO;GACvD,aAAa,iBAAiB,SAAS,OAAO;EAChD,CAAC;CACH;CAEA,MAAM,OAAO,YAAY;EACvB,IAAI,CAAC,gBAAgB,CAAC,aAAa,OACjC,OAAO;EAIT,IAAI,iBAAiB,GACnB,OAAO,iBAAiB;GACtB,UAAU;GACV,aAAa,QAAQ,aAAa,KAAK;EACzC,CAAC;EAGH,MAAM,UAAU;EAEhB,IAAI;GACF,MAAM,aAAa,KAAK;GACxB,OAAO,YAAY;EACrB,SAAS,OAAO;GACd,IAAI,uBAAuB,KAAK,KAAK,YAAY,aAC/C,OAAO;GAIT,IAAI,aAAa,SAAS,gBAAgB,KAAK,OAAO,KAAK,CAAC,GAC1D,OAAO,iBAAiB;IACtB,UAAU;IACV,aAAa;GACf,CAAC;GAGH,MAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;GAC3C,aAAa,QAAQ;GACrB,UAAU,KAAK;GACf,OAAO;EACT;CACF;CAEA,MAAM,cAAc;EAClB,cAAc,MAAM;CACtB;CAEA,MAAM,aAAa,YAAY;EAC7B,IAAI,UAAU,OAAO;GACnB,MAAM;GACN,OAAO;EACT;EAEA,OAAO,KAAK;CACd;CAEA,MAAM,QAAQ,SAAiB;EAC7B,IAAI,CAAC,gBAAgB,CAAC,SAAS,OAAO;EAEtC,IAAI,aAAa,aAAa,iBAAiB,eAAe;EAC9D,IAAI,aAAa,OAAO;EACxB,MAAM,aAAa,MAAM,MAAM,GAAG,SAAS,KAAK;EAChD,IAAI;GACF,aAAa,cAAc;GAC3B,YAAY,QAAQ;EACtB,QAAQ,CAER;CACF;CAEA,MAAM,iBAAiB,YAAoB;EACzC,KAAK,iBAAiB,OAAO,CAAC;CAChC;CAEA,MAAM,gBAAgB,YAAqB;EACzC,UAAU,QAAQ;EAClB,IAAI,WAAW,MAAM;GACnB,mBAAmB,QAAQ,gBAAgB;GAC3C,gBAAgB,QAAQ,YAAY;GACpC;EACF;EAEA,uBAAuB,OAAO;CAChC;CAEA,MAAM,0BAA0B,YAAoB;EAClD,MAAM,cAAc,sBAAsB,OAAO;EACjD,UAAU,QAAQ;EAClB,mBAAmB,QAAQ;EAC3B,gBAAgB,QAAQ,iBAAiB,WAAW;CACtD;CAEA,MAAM,gBAAgB,OAAO,YAAqB;EAChD,IAAI,WAAW,MACb,uBAAuB,OAAO;EAIhC,MAAM,gBAAgB,mBAAmB;EACzC,UAAU,QAAQ;EAGlB,IAAI,CAAC,MADe,iBAAiB,GACzB;EAEZ,cAAc,aAAa;CAC7B;CAEA,MAAM,sBAAsB;EAC1B,UAAU,QAAQ;EAClB,mBAAmB,QAAQ,gBAAgB;EAC3C,gBAAgB,QAAQ,YAAY;CACtC;CAEA,MAAM,aAAa,WAAmB;EACpC,mBAAmB,MAAM;CAC3B;CAEA,MAAM,sBAAsB,YAAoB;EAC9C,IAAI,CAAC,cAAc;EACnB,MAAM,aAAa,sBAAsB,OAAO;EAChD,cAAc,QAAQ;EACtB,aAAa,SAAS,aAAa;EACnC,aAAa,QAAQ,eAAe;EACpC,IAAI,aAAa,GACf,qBAAqB,QAAQ;CAEjC;CAEA,MAAM,mBAAmB;EACvB,IAAI,CAAC,cAAc;EAEnB,IAAI,aAAa,SAAS,cAAc,UAAU,GAAG;GACnD,MAAM,iBAAiB,qBAAqB,SAAS;GACrD,aAAa,SAAS,MAAM,gBAAgB,GAAG,GAAG,IAAI;GACtD,aAAa,QAAQ;GACrB,cAAc,QAAQ,MAAM,gBAAgB,GAAG,GAAG;GAClD;EACF;EAEA,qBAAqB,QAAQ,cAAc,SAAS;EACpD,aAAa,QAAQ;CACvB;CAEA,MAAM,eAAe,SAAwB;EAC3C,IAAI,CAAC,WAAW,SAAS,IAAI,GAAG;EAChC,SAAS,QAAQ;EACjB,mBAAmB,IAAI;EACvB,mBAAmB,IAAI;CACzB;CAEA,MAAM,mBAAmB,OACvB,cAA6D,CAAC,MAC3D;EACH,IAAI,CAAC,gBAAgB,CAAC,aAAa,OAAO;GACxC,iBAAiB;GACjB,OAAO;EACT;EAEA,MAAM,SAAS,mBAAmB,aAAa,KAAK;EACpD,IAAI,CAAC,QAAQ;GACX,MAAM,UAAU;GAChB,aAAa,QAAQ;GACrB,0BAAU,IAAI,MAAM,OAAO,CAAC;GAC5B,iBAAiB;GACjB,OAAO;EACT;EAEA,MAAM,UAAU,EAAE;EAClB,aAAa,QAAQ;EACrB,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,YAAY,QAAQ;EACpB,aAAa,QAAQ;EACrB,mBAAmB,QAAQ;EAC3B,gBAAgB,QAAQ;EACxB,UAAU,QAAQ;EAElB,IAAI;GACF,aAAa,MAAM;EACrB,QAAQ,CAER;EAEA,MAAM,cACJ,QAAQ,YAAY,WAAW,KAAK,QAAQ,aAAa,KAAK;EAIhE,IAFE,eAAe,aAAa,aAAa,KAAK,MAAM,QAGpD,iBAAiB,QAAQ,WAAW;EAKtC,gBAAgB,aAAa,KAAK;EAElC,IAAI,CAAC,YAAY,UACf,OAAO,YAAY;EAIrB,IAAI,CAAC,MADe,eAAe,OAAO,KAC5B,YAAY,aAAa;GACrC,IAAI,YAAY,eAAe,CAAC,aAAa,OAAO;IAClD,aAAa,QAAQ,aAAa,QAC9B,kBACA;IACJ,UAAU,QAAQ;GACpB;GACA,OAAO;EACT;EAEA,IAAI;GACF,aAAa,cAAc;EAC7B,QAAQ,CAER;EACA,YAAY,QAAQ;EAGpB,IAAI;GACF,MAAM,aAAa,KAAK;GACxB,OAAO,YAAY;EACrB,SAAS,OAAO;GACd,IAAI,uBAAuB,KAAK,KAAK,YAAY,aAC/C,OAAO;GAET,MAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;GAC3C,aAAa,QAAQ;GACrB,UAAU,KAAK;GACf,OAAO;EACT;CACF;CAEA,MAAM,uBAAuB,MAAc,iBAAyB;EAClE,IAAI,QAAQ,GAAG,OAAO;EACtB,IAAI,YAAY;EAChB,OAAO,cAAc,cACnB,YAAY,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI;EAE7C,OAAO;CACT;CAEA,MAAM,YAAY,OAAO,WAA4B,YAAY,UAAU;EACzE,IAAI,gBAAgB,UAAU,cAAc,CAAC,gBAAgB,OAC3D,OAAO;EAGT,MAAM,SAAS,gBAAgB,MAAM;EACrC,IAAI,CAAC,OAAO,UAAU,kBAAkB,QAAQ,GAC9C,OAAO;EAGT,IAAI,YAAY,kBAAkB;EAElC,IAAI,SAAS,UAAU,UACrB,YAAY,oBAAoB,OAAO,QAAQ,kBAAkB,KAAK;OACjE,IAAI,aAAa,SAAS,UAAU,eACzC,YAAY,kBAAkB;OACzB,IAAI,cAAc,QAAQ;GAC/B,IAAI,SAAS,UAAU,aACrB,aACG,kBAAkB,QAAQ,IAAI,OAAO,UAAU,OAAO;QAEzD,YAAY,kBAAkB,QAAQ;EAE1C,OAAO,IAAI,SAAS,UAAU,aAC5B,aAAa,kBAAkB,QAAQ,KAAK,OAAO;OAEnD,YAAY,kBAAkB,QAAQ;EAGxC,IAAI,YAAY,KAAK,aAAa,OAAO,QAAQ;GAC/C,IAAI,WACF,MAAM;GAER,OAAO;EACT;EAEA,eAAe,QAAQ,OAAO,UAAU,CAAC;EACzC,wBAAwB,eAAe,KAAK;EAC5C,OAAO,iBAAiB,EACtB,UAAU,KACZ,CAAC;CACH;CAEA,MAAM,OAAO,YAAY;EACvB,IACE,gBAAgB,UAAU,cAC1B,gBAAgB,SAChB,YAAY,QAAQ,GACpB;GACA,KAAK,CAAC;GACN,OAAO;EACT;EAEA,OAAO,UAAU,MAAM;CACzB;CAEA,MAAM,OAAO,YAAY;EACvB,OAAO,UAAU,MAAM;CACzB;CAEA,MAAM,YAAY,OAChB,gBACA,eACG;EACH,MAAM,iBACJ,UAAU,MAAM,MACb,SACC,KAAK,OACL,OACE,cAAc,OAAO,aAAa,kBAAkB,SAAS,EAC/D,CACJ,KAAK,gBAAgB;EAEvB,IAAI,CAAC,kBAAkB,CAAC,eAAe,OAAO,QAC5C,OAAO;EAGT,MAAM,cACJ,OAAO,mBAAmB,WACtB,eAAe,OAAO,kBACtB,eAAe,OAAO,MACnB,SAAS,KAAK,OAAO,OAAO,cAAc,CAC7C;EAEN,IAAI,CAAC,aACH,OAAO;EAGT,gBAAgB,QAAQ;EACxB,YAAY,QAAQ;EACpB,kBAAkB,QAAQ,eAAe;EACzC,eAAe,QAAQ,YAAY;EACnC,2BAA2B,eAAe,EAAE;EAC5C,wBAAwB,YAAY,EAAE;EAGtC,OAAO,iBAAiB;GACtB,UAAU;GACV,aAAa;EACf,CAAC;CACH;CAEA,MAAM,iBAAiB,OACrB,YACA,gBAAmE,CAAC,MACjE;EACH,MAAM,iBACJ,UAAU,MAAM,MAAM,SAAS,KAAK,OAAO,OAAO,UAAU,CAAC,KAAK;EAEpE,IAAI,CAAC,gBAAgB,OAAO;EAE5B,gBAAgB,QAAQ;EACxB,YAAY,QAAQ;EACpB,kBAAkB,QAAQ,eAAe;EACzC,eAAe,QACb,cAAc,WAAW,OACrB,OAAO,cAAc,OAAO,IAC5B,eAAe,OAAO,EAAE,EAAE,MAAM;EAEtC,2BAA2B,kBAAkB,KAAK;EAClD,wBAAwB,eAAe,KAAK;EAC5C,mBAAmB;EAEnB,OAAO,iBAAiB,EACtB,UAAU,cAAc,SAC1B,CAAC;CACH;CAEA,MAAM,aAAa,OACjB,QACA,cAAiC,CAAC,MAC/B;EACH,gBAAgB,QAAQ;EACxB,YAAY,QAAQ,eAAe,QAAQ,cAAc;EACzD,kBAAkB,QAAQ;EAC1B,eAAe,QAAQ,YAAY,MAAM;EACzC,2BAA2B,IAAI;EAC/B,wBAAwB,YAAY,MAAM,EAAE;EAC5C,OAAO,iBAAiB,EACtB,UAAU,YAAY,YAAY,YAAY,EAChD,CAAC;CACH;CAEA,MAAM,oBAAoB;EACxB,YAAY,QAAQ;EACpB,IAAI,gBAAgB,UAAU,UAAU;GACtC,kBAAkB,QAAQ;GAC1B,eAAe,QAAQ;GACvB,iBAAiB;GACjB,2BAA2B,IAAI;GAC/B,wBAAwB,IAAI;EAC9B;CACF;CAEA,MAAM,kBAAkB,MAAc,SAAuB,CAAC,MAAM;EAClE,MAAM,WAAW,kBACf;GACE,IAAI,SAAS,UAAU;GACvB;GACA;EACF,GACA,UAAU,MAAM,MAClB;EAEA,UAAU,QAAQ,CAAC,GAAG,UAAU,OAAO,QAAQ;EAC/C,IAAI,CAAC,kBAAkB,OACrB,kBAAkB,QAAQ,SAAS;EAErC,mBAAmB;EACnB,OAAO;CACT;CAEA,MAAM,kBAAkB,YAA6B,SAAiB;EACpE,MAAM,SAAS,UAAU,MAAM,MAC5B,SAAS,KAAK,OAAO,OAAO,UAAU,CACzC;EACA,IAAI,CAAC,QAAQ,OAAO;EACpB,OAAO,OAAO;EACd,mBAAmB;EACnB,OAAO;CACT;CAEA,MAAM,kBAAkB,eAAgC;EACtD,MAAM,WAAW,OAAO,UAAU;EAClC,MAAM,gBAAgB,UAAU,MAAM,QACnC,SAAS,KAAK,OAAO,QACxB;EACA,IAAI,cAAc,WAAW,UAAU,MAAM,QAAQ,OAAO;EAE5D,MAAM,kBACJ,gBAAgB,UAAU,cAC1B,kBAAkB,UAAU;EAE9B,UAAU,QAAQ;EAClB,cAAc;EAEd,IAAI,mBAAmB,aAAa,OAClC,iBAAiB,EACf,UAAU,UAAU,MACtB,CAAC;EAGH,mBAAmB;EACnB,OAAO;CACT;CAEA,MAAM,uBACJ,YACA,WACG;EACH,MAAM,SAAS,UAAU,MAAM,MAC5B,SAAS,KAAK,OAAO,OAAO,UAAU,CACzC;EACA,IAAI,CAAC,UAAU,CAAC,OAAO,QAAQ,OAAO,CAAC;EAEvC,MAAM,iBAAiB,OAAO,KAAK,OAAO,UACxC,eACE,OACA,SAAS,GAAG,OAAO,GAAG,SAAS,OAAO,OAAO,SAAS,OAAO,CAC/D,CACF;EAEA,OAAO,OAAO,KAAK,GAAG,cAAc;EAEpC,IACE,gBAAgB,UAAU,cAC1B,OAAO,OAAO,kBAAkB,SAChC,CAAC,eAAe,OAEhB,eAAe,QAAQ,OAAO,OAAO,EAAE,EAAE,MAAM;EAGjD,mBAAmB;EACnB,OAAO;CACT;CAEA,MAAM,4BACJ,YACA,aACG;EACH,MAAM,SAAS,UAAU,MAAM,MAC5B,SAAS,KAAK,OAAO,OAAO,UAAU,CACzC;EACA,IAAI,CAAC,UAAU,CAAC,SAAS,QAAQ,OAAO;EAExC,MAAM,cAAc,IAAI,IAAI,SAAS,KAAK,SAAS,OAAO,IAAI,CAAC,CAAC;EAChE,MAAM,UAAU,OAAO,OAAO;EAC9B,OAAO,SAAS,OAAO,OAAO,QAAQ,SAAS,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;EAExE,IAAI,YAAY,OAAO,OAAO,QAC5B,OAAO;EAGT,IACE,gBAAgB,UAAU,cAC1B,OAAO,OAAO,kBAAkB,SAChC,eAAe,SACf,YAAY,IAAI,eAAe,KAAK,GACpC;GACA,eAAe,QAAQ,OAAO,OAAO,EAAE,EAAE,MAAM;GAC/C,IAAI,eAAe,OACjB,iBAAiB,EACf,UAAU,UAAU,MACtB,CAAC;QAED,iBAAiB;EAErB;EAEA,mBAAmB;EACnB,OAAO;CACT;CAEA,MAAM,gBAAgB,kBAAmC;EACvD,UAAU,QAAQ,cAAc,KAAK,MAAM,UACzC,kBAAkB,MAAM,KAAK,CAC/B;EACA,cAAc;EACd,IAAI,gBAAgB,UAAU,cAAc,aAAa,OACvD,iBAAiB,EACf,UAAU,UAAU,MACtB,CAAC;EAEH,mBAAmB;CACrB;CAEA,MAAM,cAAc;EAClB,MAAM;EACN,KAAK,CAAC;EACN,UAAU,QAAQ;EAClB,aAAa,QAAQ;CACvB;CAEA,IAAI,cAAc;EAChB,aAAa,iBAAiB,cAAc;GAC1C,UAAU,QAAQ;GAClB,SAAS,aAAa,KAAK;EAC7B,CAAC;EAED,aAAa,iBAAiB,eAAe;GAC3C,UAAU,QAAQ;GAClB,UAAU,aAAa,KAAK;EAC9B,CAAC;EAED,aAAa,iBAAiB,iBAAiB;GAC7C,UAAU,QAAQ;EACpB,CAAC;EAED,aAAa,iBAAiB,iBAAiB;GAC7C,UAAU,QAAQ;GAClB,QAAQ,QAAQ;EAClB,CAAC;EAED,aAAa,iBAAiB,wBAAwB;GACpD,SAAS,QAAQ,OAAO,SAAS,aAAa,QAAQ,IAClD,aAAa,WACb,aAAa,OAAO,YAAY;GACpC,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,WAAW,aAAa,KAAK;EAC/B,CAAC;EAED,aAAa,iBAAiB,wBAAwB;GACpD,SAAS,QAAQ,OAAO,SAAS,aAAa,QAAQ,IAClD,aAAa,WACb,SAAS;EACf,CAAC;EAED,aAAa,iBAAiB,oBAAoB;GAChD,YAAY,QAAQ,aAAa,eAAe;GAChD,eAAe;IACb,aAAa,YAAY;IACzB,UAAU,SAAS;IACnB,iBAAiB,gBAAgB;IACjC,OAAO,aAAa;GACtB,CAAC;EACH,CAAC;EAED,aAAa,iBAAiB,kBAAkB;GAC9C,IAAI,CAAC,aAAa,SAAS,QAAQ;GACnC,aAAa,QAAQ,aAAa,SAAS,IACzC,aAAa,SAAS,SAAS,CACjC;EACF,CAAC;EAED,aAAa,iBAAiB,sBAAsB;GAClD,QAAQ,QAAQ,aAAa;GAC7B,cAAc,QAAQ,KAAK,MAAM,aAAa,SAAS,GAAG;GAC1D,IAAI,CAAC,aAAa,SAAS,cAAc,QAAQ,GAC/C,qBAAqB,QAAQ,cAAc;GAE7C,iBAAiB;IACf,OAAO,QAAQ;IACf,eAAe,cAAc;GAC/B,CAAC;EACH,CAAC;EAED,aAAa,iBAAiB,SAAS,YAAY;GACjD,UAAU,aAAa,KAAK;GAC5B,MAAM,UAAU,QAAQ,IAAI;EAC9B,CAAC;EAED,aAAa,iBAAiB,eAAe;GAE3C,IAAI,CAAC,eAAe,GAClB;GAGF,MAAM,eAAe,aAAa,aAAa,KAAK;GACpD,MAAM,mBAAmB;GACzB,MAAM,aAAa,aAAa;GAGhC,OAAO,iBAAiB;IACtB,IAAI,qBAAqB,aAAa;IACtC,IAAI,CAAC,eAAe,GAAG;IACvB,IAAI,aAAa,aAAa,KAAK,MAAM,cAAc;IACvD,IAAI,aAAa,cAAc,iBAAiB,eAAe;IAC/D,IAAI,CAAC,aAAa,OAAO;IACzB,IAAI,aAAa,MAAM,SAAS,WAAW,mBAAmB;IAE9D,MAAM,OAAO,aAAa,MAAM;IAChC,MAAM,aAAa,aAAa,MAAM,WAAW,YAAY,WAAW;IACxE,MAAM,gBACJ,SAAS,WAAW,+BACpB,gBAAgB,KAAK,UAAU;IAEjC,aAAa,QAAQ,gBACjB,kBACA,cAAc;IAClB,UAAU,QAAQ;IAClB,UAAU,aAAa,SAAS,IAAI,MAAM,aAAa,KAAK,CAAC;GAC/D,GAAG,EAAE;EACP,CAAC;CACH;CAEA,YACQ,YAAY,IACjB,UAAU;EACT,IAAI,WAAW,SAAS,KAAK,GAC3B,SAAS,QAAQ;CAErB,CACF;CAEA,YACQ,aAAa,IAClB,UAAU;EACT,MAAM,cAAc,eAAe;EACnC,MAAM,aAAa,aAAa,QAC5B,aAAa,MAAM,OAAO,aAAa,MAAM,OAAO,KACpD;EACJ,MAAM,aAAa,UAAU;EAE7B,UAAU,QAAQ,MAAM,KAAK,MAAM,UACjC,kBAAkB,MAAM,KAAK,CAC/B;EACA,cAAc;EAEd,IAAI,gBAAgB,UAAU,cAAc,CAAC,aAAa,OACxD;EAGF,MAAM,aACJ,aAAa,MAAM,OAAO,aAAa,MAAM,OAAO;EAKtD,IAHE,eAAe,UAAU,eAAe,eAAe,YAIvD;EAGF,iBAAiB,EACf,UAAU,WACZ,CAAC;CACH,GACA,EACE,MAAM,KACR,CACF;CAEA,YACQ,oBAAoB,IACzB,UAAU;EACT,IAAI,SAAS,MAAM;EACnB,MAAM,iBAAiB,OAAO,KAAK;EACnC,IAAI,kBAAkB,UAAU,gBAAgB;EAChD,gBAAgB,QAAQ;EACxB,YAAY,QAAQ;EACpB,kBAAkB,QAAQ;EAC1B,cAAc;EACd,IAAI,aAAa,OAAO;GACtB,wBAAwB,aAAa,MAAM,EAAE;GAC7C,iBAAiB,EACf,UAAU,MACZ,CAAC;EACH;CACF,CACF;CAEA,YACQ,iBAAiB,IACtB,UAAU;EACT,IAAI,SAAS,MAAM;EACnB,MAAM,cAAc,OAAO,KAAK;EAChC,IAAI,eAAe,UAAU,aAAa;EAC1C,gBAAgB,QAAQ;EACxB,YAAY,QAAQ;EACpB,eAAe,QAAQ;EACvB,IAAI,aAAa,OACf,iBAAiB,EACf,UAAU,MACZ,CAAC;CAEL,CACF;CAEA,YACQ,UAAU,IACf,UAAU;EACT,IAAI,CAAC,OAAO;EACZ,WAAW,OAAO,EAChB,UAAU,YAAY,EACxB,CAAC;CACH,GACA;EACE,MAAM;EACN,WAAW;CACb,CACF;CAEA,cAAc;CAKd,kBAAkB;EAChB,iBAAiB;CACnB,CAAC;CAED,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY;CACd;AACF"}
@@ -0,0 +1,14 @@
1
+ export default function useBoundingClientRect(el: any): {
2
+ elem: import('vue').ComputedRef<Document | HTMLElement | (Window & typeof globalThis)>;
3
+ rect: {
4
+ height: number;
5
+ width: number;
6
+ x: number;
7
+ y: number;
8
+ bottom: number;
9
+ left: number;
10
+ right: number;
11
+ top: number;
12
+ };
13
+ get: () => void;
14
+ };
@@ -0,0 +1,54 @@
1
+ import { getBoundingClientRect, getElement, isElement } from "../util/dom.js";
2
+ import useEvent from "./useEvent.js";
3
+ import { computed, onMounted, onUnmounted, reactive, watch } from "vue";
4
+ //#region use/useBoundingClientRect.ts
5
+ function useBoundingClientRect(el) {
6
+ const elem = computed(() => getElement(el));
7
+ const rect = reactive({
8
+ height: 0,
9
+ width: 0,
10
+ x: 0,
11
+ y: 0,
12
+ bottom: 0,
13
+ left: 0,
14
+ right: 0,
15
+ top: 0
16
+ });
17
+ function get() {
18
+ if (elem.value && isElement(elem.value)) {
19
+ const el = elem.value;
20
+ const box = getBoundingClientRect(el).toJSON();
21
+ Object.assign(rect, box, {
22
+ height: el.clientHeight,
23
+ width: el.clientWidth
24
+ });
25
+ }
26
+ }
27
+ let observer;
28
+ function observe(target) {
29
+ observer?.disconnect();
30
+ observer = void 0;
31
+ if (!target || !isElement(target) || typeof ResizeObserver === "undefined") return;
32
+ observer = new ResizeObserver(() => get());
33
+ observer.observe(target);
34
+ }
35
+ onMounted(() => {
36
+ get();
37
+ observe(elem.value);
38
+ });
39
+ watch(elem, (el) => {
40
+ get();
41
+ observe(el);
42
+ });
43
+ onUnmounted(() => observer?.disconnect());
44
+ useEvent(window, "resize", get);
45
+ return {
46
+ elem,
47
+ rect,
48
+ get
49
+ };
50
+ }
51
+ //#endregion
52
+ export { useBoundingClientRect as default };
53
+
54
+ //# sourceMappingURL=useBoundingClientRect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBoundingClientRect.js","names":[],"sources":["../../use/useBoundingClientRect.ts"],"sourcesContent":["import { onMounted, onUnmounted, computed, reactive, watch } from \"vue\"\r\nimport useEvent from \"./useEvent\"\r\nimport { getElement, getBoundingClientRect, isElement } from \"../util\"\r\n\r\nexport default function useBoundingClientRect(el: any) {\r\n const elem = computed(() => getElement(el))\r\n const rect = reactive({\r\n height: 0,\r\n width: 0,\r\n x: 0,\r\n y: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n })\r\n function get() {\r\n if (elem.value && isElement(elem.value)) {\r\n const el = elem.value as HTMLElement\r\n const box = getBoundingClientRect(el).toJSON()\r\n // height/width 用布局尺寸(client*),避免 Layer scale 等 transform 把可视高度量成接近 0\r\n Object.assign(rect, box, {\r\n height: el.clientHeight,\r\n width: el.clientWidth,\r\n })\r\n }\r\n }\r\n\r\n let observer: ResizeObserver | undefined\r\n function observe(\r\n target: HTMLElement | typeof window | Document | null | undefined,\r\n ) {\r\n observer?.disconnect()\r\n observer = undefined\r\n if (!target || !isElement(target) || typeof ResizeObserver === \"undefined\")\r\n return\r\n observer = new ResizeObserver(() => get())\r\n observer.observe(target)\r\n }\r\n\r\n onMounted(() => {\r\n get()\r\n observe(elem.value)\r\n })\r\n watch(elem, (el) => {\r\n get()\r\n observe(el)\r\n })\r\n onUnmounted(() => observer?.disconnect())\r\n useEvent(window, \"resize\", get)\r\n return {\r\n elem,\r\n rect,\r\n get,\r\n }\r\n}\r\n"],"mappings":";;;;AAIA,SAAwB,sBAAsB,IAAS;CACrD,MAAM,OAAO,eAAe,WAAW,EAAE,CAAC;CAC1C,MAAM,OAAO,SAAS;EACpB,QAAQ;EACR,OAAO;EACP,GAAG;EACH,GAAG;EACH,QAAQ;EACR,MAAM;EACN,OAAO;EACP,KAAK;CACP,CAAC;CACD,SAAS,MAAM;EACb,IAAI,KAAK,SAAS,UAAU,KAAK,KAAK,GAAG;GACvC,MAAM,KAAK,KAAK;GAChB,MAAM,MAAM,sBAAsB,EAAE,CAAC,CAAC,OAAO;GAE7C,OAAO,OAAO,MAAM,KAAK;IACvB,QAAQ,GAAG;IACX,OAAO,GAAG;GACZ,CAAC;EACH;CACF;CAEA,IAAI;CACJ,SAAS,QACP,QACA;EACA,UAAU,WAAW;EACrB,WAAW,KAAA;EACX,IAAI,CAAC,UAAU,CAAC,UAAU,MAAM,KAAK,OAAO,mBAAmB,aAC7D;EACF,WAAW,IAAI,qBAAqB,IAAI,CAAC;EACzC,SAAS,QAAQ,MAAM;CACzB;CAEA,gBAAgB;EACd,IAAI;EACJ,QAAQ,KAAK,KAAK;CACpB,CAAC;CACD,MAAM,OAAO,OAAO;EAClB,IAAI;EACJ,QAAQ,EAAE;CACZ,CAAC;CACD,kBAAkB,UAAU,WAAW,CAAC;CACxC,SAAS,QAAQ,UAAU,GAAG;CAC9B,OAAO;EACL;EACA;EACA;CACF;AACF"}
@@ -0,0 +1,30 @@
1
+ import { computed, getCurrentInstance, onMounted, onUnmounted, ref } from "vue";
2
+ //#region use/useChildComponentsCollector.ts
3
+ function useChildComponentsCollector() {
4
+ const currentInstance = getCurrentInstance();
5
+ computed(() => {
6
+ if (currentInstance?.uid) return Symbol(currentInstance.uid);
7
+ });
8
+ const container = ref(/* @__PURE__ */ new Map());
9
+ function collector(ins) {
10
+ if (ins !== null) {
11
+ const _uid = Symbol(ins.uid);
12
+ container.value.set(_uid, ins);
13
+ }
14
+ }
15
+ function remove() {
16
+ if (currentInstance) {}
17
+ }
18
+ onMounted(() => {
19
+ collector(currentInstance);
20
+ });
21
+ onUnmounted(remove);
22
+ return {
23
+ container,
24
+ collector
25
+ };
26
+ }
27
+ //#endregion
28
+ export { useChildComponentsCollector as default };
29
+
30
+ //# sourceMappingURL=useChildComponentsCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChildComponentsCollector.js","names":[],"sources":["../../use/useChildComponentsCollector.ts"],"sourcesContent":["import type { ComponentInternalInstance } from \"vue\"\r\nimport { onMounted, onUpdated, onUnmounted } from \"vue\"\r\nimport { ref, computed, getCurrentInstance } from \"vue\"\r\nexport default function useChildComponentsCollector() {\r\n const currentInstance = getCurrentInstance()\r\n const currentUid = computed(() => {\r\n // console.log('computed')\r\n if (currentInstance?.uid) {\r\n return Symbol(currentInstance.uid)\r\n }\r\n })\r\n const container = ref<Map<symbol, ComponentInternalInstance>>(new Map())\r\n\r\n function collector(ins: any) {\r\n if (ins !== null) {\r\n const _uid = Symbol(ins.uid)\r\n container.value.set(_uid, ins)\r\n }\r\n }\r\n\r\n function remove() {\r\n if (currentInstance) {\r\n // container.value.delete()\r\n }\r\n }\r\n\r\n onMounted(() => {\r\n // console.log('onMMMM')\r\n collector(currentInstance)\r\n })\r\n onUnmounted(remove)\r\n\r\n return {\r\n container,\r\n collector,\r\n }\r\n}\r\n"],"mappings":";;AAGA,SAAwB,8BAA8B;CACpD,MAAM,kBAAkB,mBAAmB;CACxB,eAAe;EAEhC,IAAI,iBAAiB,KACnB,OAAO,OAAO,gBAAgB,GAAG;CAErC,CAAC;CACD,MAAM,YAAY,oBAA4C,IAAI,IAAI,CAAC;CAEvE,SAAS,UAAU,KAAU;EAC3B,IAAI,QAAQ,MAAM;GAChB,MAAM,OAAO,OAAO,IAAI,GAAG;GAC3B,UAAU,MAAM,IAAI,MAAM,GAAG;EAC/B;CACF;CAEA,SAAS,SAAS;EAChB,IAAI,iBAAiB,CAErB;CACF;CAEA,gBAAgB;EAEd,UAAU,eAAe;CAC3B,CAAC;CACD,YAAY,MAAM;CAElB,OAAO;EACL;EACA;CACF;AACF"}
@@ -0,0 +1 @@
1
+ export default function useComponentClass(): void;
@@ -0,0 +1,6 @@
1
+ //#region use/useComponentClass.ts
2
+ function useComponentClass() {}
3
+ //#endregion
4
+ export { useComponentClass as default };
5
+
6
+ //# sourceMappingURL=useComponentClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComponentClass.js","names":[],"sources":["../../use/useComponentClass.ts"],"sourcesContent":["import { useAttrs, normalizeClass, watch, ref } from \"vue\"\r\n\r\nexport default function useComponentClass() {}\r\n"],"mappings":";AAEA,SAAwB,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ComputedRef, MaybeRef } from 'vue';
2
+ /**
3
+ * 合并组件实例 props 与 `app.use(UI, { components: { Name: {...} } })` 全局配置。
4
+ *
5
+ * 优先级:显式传入的 props(值不为 undefined)> 全局配置 > fallback
6
+ *
7
+ * 注意:需要支持全局配置的 Boolean 类 prop,组件侧请设 `default: undefined`,
8
+ * 再通过本方法的 fallback 给出最终默认值,否则「未传」会被 Vue 收成 `false`,全局配置无法生效。
9
+ */
10
+ export default function useComponentConfig<T extends Record<string, any>>(name: string, props: MaybeRef<T> | T, fallback?: Partial<T>): ComputedRef<T>;
@@ -0,0 +1,31 @@
1
+ import { UI_CONFIG_KEY, defaultConfig } from "../config/plugin.js";
2
+ import { computed, inject, unref } from "vue";
3
+ //#region use/useComponentConfig.ts
4
+ /**
5
+ * 合并组件实例 props 与 `app.use(UI, { components: { Name: {...} } })` 全局配置。
6
+ *
7
+ * 优先级:显式传入的 props(值不为 undefined)> 全局配置 > fallback
8
+ *
9
+ * 注意:需要支持全局配置的 Boolean 类 prop,组件侧请设 `default: undefined`,
10
+ * 再通过本方法的 fallback 给出最终默认值,否则「未传」会被 Vue 收成 `false`,全局配置无法生效。
11
+ */
12
+ function useComponentConfig(name, props, fallback = {}) {
13
+ const uiConfig = inject(UI_CONFIG_KEY, defaultConfig);
14
+ return computed(() => {
15
+ const local = unref(props);
16
+ const global = uiConfig?.components?.[name] || {};
17
+ const merged = {
18
+ ...fallback,
19
+ ...global
20
+ };
21
+ for (const key of Object.keys(local)) {
22
+ const value = local[key];
23
+ if (value !== void 0) merged[key] = value;
24
+ }
25
+ return merged;
26
+ });
27
+ }
28
+ //#endregion
29
+ export { useComponentConfig as default };
30
+
31
+ //# sourceMappingURL=useComponentConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComponentConfig.js","names":[],"sources":["../../use/useComponentConfig.ts"],"sourcesContent":["import { computed, inject, unref, type ComputedRef, type MaybeRef } from 'vue'\r\nimport {\r\n UI_CONFIG_KEY,\r\n defaultConfig,\r\n type UIPluginConfig,\r\n} from '../config/plugin'\r\n\r\n/**\r\n * 合并组件实例 props 与 `app.use(UI, { components: { Name: {...} } })` 全局配置。\r\n *\r\n * 优先级:显式传入的 props(值不为 undefined)> 全局配置 > fallback\r\n *\r\n * 注意:需要支持全局配置的 Boolean 类 prop,组件侧请设 `default: undefined`,\r\n * 再通过本方法的 fallback 给出最终默认值,否则「未传」会被 Vue 收成 `false`,全局配置无法生效。\r\n */\r\nexport default function useComponentConfig<T extends Record<string, any>>(\r\n name: string,\r\n props: MaybeRef<T> | T,\r\n fallback: Partial<T> = {},\r\n): ComputedRef<T> {\r\n const uiConfig = inject(UI_CONFIG_KEY, defaultConfig) as UIPluginConfig\r\n\r\n return computed(() => {\r\n const local = unref(props) as T\r\n const global = (uiConfig?.components?.[name] || {}) as Partial<T>\r\n const merged = { ...fallback, ...global } as T\r\n\r\n for (const key of Object.keys(local) as (keyof T)[]) {\r\n const value = local[key]\r\n if (value !== undefined) {\r\n merged[key] = value\r\n }\r\n }\r\n\r\n return merged\r\n })\r\n}\r\n"],"mappings":";;;;;;;;;;;AAeA,SAAwB,mBACtB,MACA,OACA,WAAuB,CAAC,GACR;CAChB,MAAM,WAAW,OAAO,eAAe,aAAa;CAEpD,OAAO,eAAe;EACpB,MAAM,QAAQ,MAAM,KAAK;EACzB,MAAM,SAAU,UAAU,aAAa,SAAS,CAAC;EACjD,MAAM,SAAS;GAAE,GAAG;GAAU,GAAG;EAAO;EAExC,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GAAkB;GACnD,MAAM,QAAQ,MAAM;GACpB,IAAI,UAAU,KAAA,GACZ,OAAO,OAAO;EAElB;EAEA,OAAO;CACT,CAAC;AACH"}
@@ -0,0 +1,13 @@
1
+ import { ComputedRef } from 'vue';
2
+ interface CountType {
3
+ init: number | ComputedRef<number>;
4
+ step?: number;
5
+ }
6
+ export default function useCount({ init, step }?: CountType): {
7
+ count: import('vue').Ref<number, number>;
8
+ add: (delta?: number) => number;
9
+ reset: (num?: number) => void;
10
+ get: () => number;
11
+ set: (num: number) => void;
12
+ };
13
+ export {};
@@ -0,0 +1,36 @@
1
+ import { resolveAccuracy } from "../util/calc.js";
2
+ import { ref, unref } from "vue";
3
+ //#region use/useCount.ts
4
+ function useCount({ init, step } = {
5
+ init: 0,
6
+ step: 1
7
+ }) {
8
+ const count = ref(unref(init));
9
+ const _step = ref(step || 1);
10
+ function add(delta) {
11
+ if (typeof delta === "number") count.value += delta ?? _step.value;
12
+ else count.value += _step.value;
13
+ count.value = resolveAccuracy(count.value);
14
+ return count.value;
15
+ }
16
+ function reset(num) {
17
+ count.value = num ?? 0;
18
+ }
19
+ function set(num) {
20
+ count.value = num;
21
+ }
22
+ function get() {
23
+ return count.value;
24
+ }
25
+ return {
26
+ count,
27
+ add,
28
+ reset,
29
+ get,
30
+ set
31
+ };
32
+ }
33
+ //#endregion
34
+ export { useCount as default };
35
+
36
+ //# sourceMappingURL=useCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCount.js","names":[],"sources":["../../use/useCount.ts"],"sourcesContent":["import type { ComputedRef } from \"vue\"\r\nimport { ref, unref } from \"vue\"\r\nimport { resolveAccuracy } from \"../util\"\r\ninterface CountType {\r\n init: number | ComputedRef<number>\r\n step?: number\r\n}\r\nexport default function useCount(\r\n { init, step }: CountType = { init: 0, step: 1 }\r\n) {\r\n const count = ref(unref(init))\r\n const _step = ref(step || 1)\r\n function add(delta?: number) {\r\n if (typeof delta === \"number\") {\r\n count.value += delta ?? _step.value\r\n } else {\r\n count.value += _step.value\r\n }\r\n count.value = resolveAccuracy(count.value)\r\n return count.value\r\n }\r\n function reset(num?: number) {\r\n count.value = num ?? 0\r\n }\r\n function set(num: number) {\r\n count.value = num\r\n }\r\n function get() {\r\n return count.value\r\n }\r\n\r\n return {\r\n count,\r\n add,\r\n reset,\r\n get,\r\n set,\r\n }\r\n}\r\n"],"mappings":";;;AAOA,SAAwB,SACtB,EAAE,MAAM,SAAoB;CAAE,MAAM;CAAG,MAAM;AAAE,GAC/C;CACA,MAAM,QAAQ,IAAI,MAAM,IAAI,CAAC;CAC7B,MAAM,QAAQ,IAAI,QAAQ,CAAC;CAC3B,SAAS,IAAI,OAAgB;EAC3B,IAAI,OAAO,UAAU,UACnB,MAAM,SAAS,SAAS,MAAM;OAE9B,MAAM,SAAS,MAAM;EAEvB,MAAM,QAAQ,gBAAgB,MAAM,KAAK;EACzC,OAAO,MAAM;CACf;CACA,SAAS,MAAM,KAAc;EAC3B,MAAM,QAAQ,OAAO;CACvB;CACA,SAAS,IAAI,KAAa;EACxB,MAAM,QAAQ;CAChB;CACA,SAAS,MAAM;EACb,OAAO,MAAM;CACf;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -0,0 +1,53 @@
1
+ import { Ref, ComputedRef } from 'vue';
2
+ import { DateFormatType } from '../config/types';
3
+ type DateType = Date | number | string | undefined;
4
+ type DateOptionType = DateType | Ref<DateType> | ComputedRef<DateType>;
5
+ export default function useDate(date: DateOptionType, fmt?: Ref<DateFormatType> | ComputedRef<DateFormatType> | DateFormatType): {
6
+ addMonths: (date?: DateType, n?: number) => Date;
7
+ addYears: (date?: DateType, n?: number) => Date;
8
+ day: ComputedRef<number>;
9
+ dayMap: ComputedRef<ReadonlyMap<number, string>>;
10
+ format: (date?: DateType, formart?: DateFormatType) => string;
11
+ formatDate: (date: DateType, formart?: DateFormatType) => Date;
12
+ month: ComputedRef<number>;
13
+ year: ComputedRef<number>;
14
+ yearPanelLength: number;
15
+ getDaysInMonth: (date?: DateType) => number;
16
+ getDaysInPanel: (date?: DateType) => {
17
+ prev: number[][];
18
+ cur: number[][];
19
+ next: number[][];
20
+ };
21
+ getYearsInPanel: (_year?: number) => {
22
+ years: number[];
23
+ from: number;
24
+ to: number;
25
+ };
26
+ getStartDayInMonth: (date?: DateType) => number;
27
+ getMonth: (date?: DateType) => number;
28
+ getYear: (date?: DateType) => number;
29
+ isSameDay: (a: DateType, b: DateType) => boolean;
30
+ isSameMonth: (a: DateType, b: DateType) => boolean;
31
+ isToday: (date?: DateType) => boolean;
32
+ isMaxDayThanDate: (givenDate: DateType, minDate: DateType) => boolean;
33
+ isMinDayThanDate: (givenDate: DateType, minDate: DateType) => boolean;
34
+ isMaxMonthThanDate: (givenDate: DateType, maxDate: DateType) => boolean;
35
+ isMinMonthThanDate: (givenDate: DateType, minDate: DateType) => boolean;
36
+ isMinYearThanDate: (givenDate: DateType, minDate: DateType) => boolean;
37
+ isMaxYearThanDate: (givenDate: DateType, maxDate: DateType) => boolean;
38
+ parse: (date?: DateType, formatString?: DateFormatType) => Date;
39
+ };
40
+ export declare const quickList: {
41
+ Today: string;
42
+ Yesterday: string;
43
+ Recent3Day: string;
44
+ Recent7Day: string;
45
+ ThisWeek: string;
46
+ PreWeek: string;
47
+ ThisMonth: string;
48
+ PreMonth: string;
49
+ ThisYear: string;
50
+ };
51
+ export type TQuickKey = keyof typeof quickList;
52
+ export declare function getRangeDate(_k: TQuickKey): [string, string];
53
+ export {};