@tplc/wot 1.0.7 → 1.0.8

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 (518) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/components/common/AbortablePromise.ts +3 -11
  3. package/components/common/abstracts/_config.scss +1 -1
  4. package/components/common/abstracts/_function.scss +26 -13
  5. package/components/common/abstracts/_mixin.scss +117 -71
  6. package/components/common/abstracts/variable.scss +325 -697
  7. package/components/common/base64.ts +1 -2
  8. package/components/common/canvasHelper.ts +1 -1
  9. package/components/common/interceptor.ts +43 -0
  10. package/components/common/props.ts +8 -8
  11. package/components/common/util.ts +145 -60
  12. package/components/composables/index.ts +11 -0
  13. package/components/composables/useChildren.ts +9 -18
  14. package/components/composables/useCountDown.ts +2 -2
  15. package/components/composables/useLockScroll.ts +1 -3
  16. package/components/composables/useParent.ts +4 -4
  17. package/components/composables/usePopover.ts +43 -60
  18. package/components/composables/useQueue.ts +2 -2
  19. package/components/composables/useTouch.ts +2 -3
  20. package/components/composables/useTranslate.ts +2 -13
  21. package/components/composables/useUpload.ts +389 -0
  22. package/components/wd-action-sheet/index.scss +22 -22
  23. package/components/wd-action-sheet/types.ts +11 -21
  24. package/components/wd-action-sheet/wd-action-sheet.vue +21 -40
  25. package/components/wd-backtop/index.scss +5 -5
  26. package/components/wd-backtop/types.ts +3 -15
  27. package/components/wd-backtop/wd-backtop.vue +12 -20
  28. package/components/wd-badge/index.scss +14 -10
  29. package/components/wd-badge/types.ts +6 -9
  30. package/components/wd-badge/wd-badge.vue +29 -37
  31. package/components/wd-button/index.scss +76 -80
  32. package/components/wd-button/types.ts +43 -13
  33. package/components/wd-button/wd-button.vue +41 -22
  34. package/components/wd-calendar/index.scss +58 -145
  35. package/components/wd-calendar/types.ts +23 -41
  36. package/components/wd-calendar/wd-calendar.vue +123 -130
  37. package/components/wd-calendar-view/month/index.scss +33 -65
  38. package/components/wd-calendar-view/month/month.vue +80 -113
  39. package/components/wd-calendar-view/month/types.ts +2 -1
  40. package/components/wd-calendar-view/monthPanel/index.scss +15 -15
  41. package/components/wd-calendar-view/monthPanel/month-panel.vue +64 -78
  42. package/components/wd-calendar-view/monthPanel/types.ts +58 -10
  43. package/components/wd-calendar-view/types.ts +12 -36
  44. package/components/wd-calendar-view/utils.ts +14 -36
  45. package/components/wd-calendar-view/wd-calendar-view.vue +7 -7
  46. package/components/wd-calendar-view/year/index.scss +18 -13
  47. package/components/wd-calendar-view/year/types.ts +2 -1
  48. package/components/wd-calendar-view/year/year.vue +25 -43
  49. package/components/wd-calendar-view/yearPanel/index.scss +4 -4
  50. package/components/wd-calendar-view/yearPanel/types.ts +2 -2
  51. package/components/wd-calendar-view/yearPanel/year-panel.vue +36 -41
  52. package/components/wd-card/index.scss +11 -10
  53. package/components/wd-card/types.ts +1 -1
  54. package/components/wd-card/wd-card.vue +6 -9
  55. package/components/wd-cell/index.scss +56 -41
  56. package/components/wd-cell/types.ts +23 -8
  57. package/components/wd-cell/wd-cell.vue +48 -18
  58. package/components/wd-cell-group/index.scss +8 -7
  59. package/components/wd-cell-group/types.ts +1 -1
  60. package/components/wd-cell-group/wd-cell-group.vue +5 -5
  61. package/components/wd-checkbox/index.scss +35 -35
  62. package/components/wd-checkbox/types.ts +6 -6
  63. package/components/wd-checkbox/wd-checkbox.vue +12 -20
  64. package/components/wd-checkbox-group/index.scss +4 -4
  65. package/components/wd-checkbox-group/types.ts +2 -2
  66. package/components/wd-checkbox-group/wd-checkbox-group.vue +9 -12
  67. package/components/wd-circle/index.scss +5 -5
  68. package/components/wd-circle/types.ts +2 -2
  69. package/components/wd-circle/wd-circle.vue +18 -40
  70. package/components/wd-col/index.scss +2 -2
  71. package/components/wd-col/types.ts +1 -1
  72. package/components/wd-col/wd-col.vue +11 -53
  73. package/components/wd-col-picker/index.scss +41 -115
  74. package/components/wd-col-picker/types.ts +10 -14
  75. package/components/wd-col-picker/wd-col-picker.vue +103 -155
  76. package/components/wd-collapse/index.scss +7 -13
  77. package/components/wd-collapse/types.ts +4 -10
  78. package/components/wd-collapse/wd-collapse.vue +22 -55
  79. package/components/wd-collapse-item/index.scss +16 -5
  80. package/components/wd-collapse-item/types.ts +14 -2
  81. package/components/wd-collapse-item/wd-collapse-item.vue +70 -81
  82. package/components/wd-config-provider/types.ts +69 -40
  83. package/components/wd-config-provider/wd-config-provider.vue +11 -11
  84. package/components/wd-count-down/index.scss +3 -2
  85. package/components/wd-count-down/types.ts +1 -1
  86. package/components/wd-count-down/wd-count-down.vue +5 -5
  87. package/components/wd-count-to/index.scss +2 -1
  88. package/components/wd-count-to/types.ts +10 -3
  89. package/components/wd-count-to/wd-count-to.vue +9 -18
  90. package/components/wd-curtain/index.scss +28 -23
  91. package/components/wd-curtain/types.ts +46 -9
  92. package/components/wd-curtain/wd-curtain.vue +45 -47
  93. package/components/wd-datetime-picker/index.scss +65 -145
  94. package/components/wd-datetime-picker/types.ts +41 -31
  95. package/components/wd-datetime-picker/wd-datetime-picker.vue +307 -333
  96. package/components/wd-datetime-picker-view/types.ts +29 -46
  97. package/components/wd-datetime-picker-view/util.ts +30 -0
  98. package/components/wd-datetime-picker-view/wd-datetime-picker-view.vue +104 -119
  99. package/components/wd-divider/index.scss +78 -10
  100. package/components/wd-divider/types.ts +26 -3
  101. package/components/wd-divider/wd-divider.vue +33 -10
  102. package/components/wd-drop-menu/index.scss +17 -45
  103. package/components/wd-drop-menu/types.ts +3 -3
  104. package/components/wd-drop-menu/wd-drop-menu.vue +61 -25
  105. package/components/wd-drop-menu-item/index.scss +15 -15
  106. package/components/wd-drop-menu-item/types.ts +18 -15
  107. package/components/wd-drop-menu-item/wd-drop-menu-item.vue +33 -54
  108. package/components/wd-fab/index.scss +13 -12
  109. package/components/wd-fab/types.ts +9 -4
  110. package/components/wd-fab/wd-fab.vue +70 -51
  111. package/components/wd-floating-panel/index.scss +64 -0
  112. package/components/wd-floating-panel/type.ts +32 -0
  113. package/components/wd-floating-panel/wd-floating-panel.vue +140 -0
  114. package/components/wd-form/types.ts +8 -16
  115. package/components/wd-form/wd-form.vue +67 -45
  116. package/components/wd-form-item/index.scss +3 -2
  117. package/components/wd-form-item/types.ts +2 -8
  118. package/components/wd-form-item/wd-form-item.vue +3 -3
  119. package/components/wd-grid/index.scss +2 -2
  120. package/components/wd-grid/types.ts +5 -0
  121. package/components/wd-grid/wd-grid.vue +11 -12
  122. package/components/wd-grid-item/index.scss +44 -33
  123. package/components/wd-grid-item/types.ts +7 -4
  124. package/components/wd-grid-item/wd-grid-item.vue +39 -44
  125. package/components/wd-icon/index.scss +311 -303
  126. package/components/wd-icon/types.ts +3 -3
  127. package/components/wd-icon/wd-icon.vue +6 -6
  128. package/components/wd-img/types.ts +1 -1
  129. package/components/wd-img/wd-img.vue +12 -4
  130. package/components/wd-img-cropper/index.scss +43 -39
  131. package/components/wd-img-cropper/types.ts +6 -8
  132. package/components/wd-img-cropper/wd-img-cropper.vue +132 -127
  133. package/components/wd-index-anchor/index.scss +7 -6
  134. package/components/wd-index-anchor/type.ts +2 -2
  135. package/components/wd-index-anchor/wd-index-anchor.vue +3 -9
  136. package/components/wd-index-bar/index.scss +5 -5
  137. package/components/wd-index-bar/type.ts +3 -2
  138. package/components/wd-index-bar/wd-index-bar.vue +15 -51
  139. package/components/wd-input/index.scss +44 -33
  140. package/components/wd-input/types.ts +40 -19
  141. package/components/wd-input/wd-input.vue +58 -42
  142. package/components/wd-input-number/index.scss +23 -31
  143. package/components/wd-input-number/types.ts +42 -14
  144. package/components/wd-input-number/wd-input-number.vue +374 -141
  145. package/components/wd-keyboard/constants.ts +81 -0
  146. package/components/wd-keyboard/index.scss +102 -0
  147. package/components/wd-keyboard/key/index.scss +79 -0
  148. package/components/wd-keyboard/key/index.vue +71 -0
  149. package/components/wd-keyboard/key/types.ts +11 -0
  150. package/components/wd-keyboard/types.ts +92 -0
  151. package/components/wd-keyboard/wd-keyboard.vue +206 -0
  152. package/components/wd-loading/index.scss +9 -6
  153. package/components/wd-loading/types.ts +1 -1
  154. package/components/wd-loading/wd-loading.vue +9 -9
  155. package/components/wd-loadmore/index.scss +5 -5
  156. package/components/wd-loadmore/types.ts +8 -2
  157. package/components/wd-loadmore/wd-loadmore.vue +28 -13
  158. package/components/wd-message-box/index.scss +21 -34
  159. package/components/wd-message-box/index.ts +30 -29
  160. package/components/wd-message-box/types.ts +33 -8
  161. package/components/wd-message-box/wd-message-box.vue +130 -152
  162. package/components/wd-navbar/index.scss +14 -24
  163. package/components/wd-navbar/types.ts +1 -1
  164. package/components/wd-navbar/wd-navbar.vue +14 -45
  165. package/components/wd-navbar-capsule/index.scss +16 -15
  166. package/components/wd-navbar-capsule/types.ts +8 -0
  167. package/components/wd-navbar-capsule/wd-navbar-capsule.vue +8 -4
  168. package/components/wd-notice-bar/index.scss +15 -33
  169. package/components/wd-notice-bar/types.ts +14 -3
  170. package/components/wd-notice-bar/wd-notice-bar.vue +109 -66
  171. package/components/wd-notify/index.scss +5 -5
  172. package/components/wd-notify/index.ts +17 -15
  173. package/components/wd-notify/types.ts +4 -0
  174. package/components/wd-notify/wd-notify.vue +21 -19
  175. package/components/wd-number-keyboard/index.scss +10 -10
  176. package/components/wd-number-keyboard/key/index.scss +7 -5
  177. package/components/wd-number-keyboard/key/index.vue +6 -9
  178. package/components/wd-number-keyboard/key/types.ts +1 -1
  179. package/components/wd-number-keyboard/types.ts +4 -0
  180. package/components/wd-number-keyboard/wd-number-keyboard.vue +22 -44
  181. package/components/wd-overlay/index.scss +3 -3
  182. package/components/wd-overlay/types.ts +2 -2
  183. package/components/wd-overlay/wd-overlay.vue +7 -15
  184. package/components/wd-pagination/index.scss +17 -17
  185. package/components/wd-pagination/types.ts +1 -1
  186. package/components/wd-pagination/wd-pagination.vue +10 -21
  187. package/components/wd-password-input/index.scss +7 -6
  188. package/components/wd-password-input/types.ts +2 -8
  189. package/components/wd-password-input/wd-password-input.vue +6 -15
  190. package/components/wd-picker/index.scss +46 -153
  191. package/components/wd-picker/types.ts +22 -19
  192. package/components/wd-picker/wd-picker.vue +89 -86
  193. package/components/wd-picker-view/index.scss +13 -12
  194. package/components/wd-picker-view/types.ts +16 -26
  195. package/components/wd-picker-view/wd-picker-view.vue +32 -24
  196. package/components/wd-popover/index.scss +29 -36
  197. package/components/wd-popover/types.ts +1 -1
  198. package/components/wd-popover/wd-popover.vue +20 -56
  199. package/components/wd-popup/index.scss +47 -75
  200. package/components/wd-popup/types.ts +40 -4
  201. package/components/wd-popup/wd-popup.vue +100 -157
  202. package/components/wd-progress/index.scss +20 -14
  203. package/components/wd-progress/types.ts +10 -6
  204. package/components/wd-progress/wd-progress.vue +137 -141
  205. package/components/wd-radio/index.scss +54 -53
  206. package/components/wd-radio/types.ts +15 -6
  207. package/components/wd-radio/wd-radio.vue +41 -59
  208. package/components/wd-radio-group/index.scss +5 -5
  209. package/components/wd-radio-group/types.ts +4 -1
  210. package/components/wd-radio-group/wd-radio-group.vue +6 -9
  211. package/components/wd-rate/index.scss +1 -1
  212. package/components/wd-rate/types.ts +10 -5
  213. package/components/wd-rate/wd-rate.vue +35 -17
  214. package/components/wd-resize/index.scss +2 -1
  215. package/components/wd-resize/types.ts +1 -1
  216. package/components/wd-resize/wd-resize.vue +11 -22
  217. package/components/wd-root-portal/wd-root-portal.vue +50 -0
  218. package/components/wd-row/index.scss +1 -1
  219. package/components/wd-row/types.ts +1 -1
  220. package/components/wd-row/wd-row.vue +14 -35
  221. package/components/wd-search/index.scss +29 -29
  222. package/components/wd-search/types.ts +22 -3
  223. package/components/wd-search/wd-search.vue +70 -120
  224. package/components/wd-segmented/index.scss +19 -15
  225. package/components/wd-segmented/types.ts +16 -4
  226. package/components/wd-segmented/wd-segmented.vue +34 -34
  227. package/components/wd-select-picker/index.scss +55 -122
  228. package/components/wd-select-picker/types.ts +29 -36
  229. package/components/wd-select-picker/wd-select-picker.vue +128 -274
  230. package/components/wd-sidebar/index.scss +5 -5
  231. package/components/wd-sidebar/types.ts +22 -3
  232. package/components/wd-sidebar/wd-sidebar.vue +26 -4
  233. package/components/wd-sidebar-item/index.scss +17 -13
  234. package/components/wd-sidebar-item/types.ts +3 -3
  235. package/components/wd-sidebar-item/wd-sidebar-item.vue +12 -10
  236. package/components/wd-signature/index.scss +31 -0
  237. package/components/wd-signature/types.ts +263 -0
  238. package/components/wd-signature/wd-signature.vue +630 -0
  239. package/components/wd-skeleton/index.scss +8 -13
  240. package/components/wd-skeleton/types.ts +6 -6
  241. package/components/wd-skeleton/wd-skeleton.vue +15 -31
  242. package/components/wd-slider/index.scss +24 -17
  243. package/components/wd-slider/types.ts +45 -17
  244. package/components/wd-slider/wd-slider.vue +275 -297
  245. package/components/wd-sort-button/index.scss +10 -7
  246. package/components/wd-sort-button/types.ts +1 -1
  247. package/components/wd-sort-button/wd-sort-button.vue +7 -14
  248. package/components/wd-status-tip/index.scss +8 -8
  249. package/components/wd-status-tip/types.ts +8 -2
  250. package/components/wd-status-tip/wd-status-tip.vue +14 -37
  251. package/components/wd-step/index.scss +29 -30
  252. package/components/wd-step/types.ts +1 -1
  253. package/components/wd-step/wd-step.vue +8 -9
  254. package/components/wd-steps/index.scss +1 -1
  255. package/components/wd-steps/types.ts +1 -1
  256. package/components/wd-steps/wd-steps.vue +5 -5
  257. package/components/wd-sticky/index.scss +1 -1
  258. package/components/wd-sticky/types.ts +1 -1
  259. package/components/wd-sticky/wd-sticky.vue +21 -29
  260. package/components/wd-sticky-box/index.scss +1 -1
  261. package/components/wd-sticky-box/wd-sticky-box.vue +7 -6
  262. package/components/wd-swipe-action/index.scss +1 -1
  263. package/components/wd-swipe-action/types.ts +2 -5
  264. package/components/wd-swipe-action/wd-swipe-action.vue +9 -22
  265. package/components/wd-swiper-nav/index.scss +22 -16
  266. package/components/wd-swiper-nav/types.ts +1 -9
  267. package/components/wd-swiper-nav/wd-swiper-nav.vue +2 -5
  268. package/components/wd-switch/index.scss +15 -15
  269. package/components/wd-switch/types.ts +8 -6
  270. package/components/wd-switch/wd-switch.vue +15 -15
  271. package/components/wd-tab/index.scss +11 -3
  272. package/components/wd-tab/types.ts +11 -1
  273. package/components/wd-tab/wd-tab.vue +28 -36
  274. package/components/wd-tabbar/index.scss +12 -7
  275. package/components/wd-tabbar/types.ts +3 -18
  276. package/components/wd-tabbar/wd-tabbar.vue +10 -23
  277. package/components/wd-tabbar-item/index.scss +15 -12
  278. package/components/wd-tabbar-item/types.ts +3 -3
  279. package/components/wd-tabbar-item/wd-tabbar-item.vue +11 -13
  280. package/components/wd-table/index.scss +40 -9
  281. package/components/wd-table/types.ts +13 -15
  282. package/components/wd-table/wd-table.vue +123 -94
  283. package/components/wd-table-col/index.scss +6 -4
  284. package/components/wd-table-col/types.ts +1 -1
  285. package/components/wd-table-col/wd-table-col.vue +12 -12
  286. package/components/wd-tag/index.scss +19 -19
  287. package/components/wd-tag/types.ts +1 -1
  288. package/components/wd-tag/wd-tag.vue +14 -20
  289. package/components/wd-text/index.scss +4 -1
  290. package/components/wd-text/types.ts +4 -4
  291. package/components/wd-text/wd-text.vue +12 -11
  292. package/components/wd-textarea/index.scss +51 -41
  293. package/components/wd-textarea/types.ts +24 -34
  294. package/components/wd-textarea/wd-textarea.vue +59 -66
  295. package/components/wd-toast/index.scss +31 -18
  296. package/components/wd-toast/index.ts +26 -43
  297. package/components/wd-toast/types.ts +117 -3
  298. package/components/wd-toast/wd-toast.vue +49 -69
  299. package/components/wd-tooltip/index.scss +21 -16
  300. package/components/wd-tooltip/types.ts +8 -3
  301. package/components/wd-tooltip/wd-tooltip.vue +17 -43
  302. package/components/wd-tour/index.scss +123 -0
  303. package/components/wd-tour/types.ts +153 -0
  304. package/components/wd-tour/wd-tour.vue +509 -0
  305. package/components/wd-transition/index.scss +39 -35
  306. package/components/wd-transition/types.ts +27 -9
  307. package/components/wd-transition/wd-transition.vue +45 -34
  308. package/components/wd-upload/index.scss +23 -21
  309. package/components/wd-upload/types.ts +43 -30
  310. package/components/wd-upload/wd-upload.vue +183 -247
  311. package/components/wd-video-preview/index.scss +9 -9
  312. package/components/wd-video-preview/types.ts +1 -1
  313. package/components/wd-video-preview/wd-video-preview.vue +18 -22
  314. package/components/wd-watermark/index.scss +7 -7
  315. package/components/wd-watermark/types.ts +2 -8
  316. package/components/wd-watermark/wd-watermark.vue +38 -135
  317. package/dayjs/constant.js +26 -0
  318. package/dayjs/index.d.ts +430 -0
  319. package/dayjs/index.js +542 -0
  320. package/dayjs/locale/en.js +13 -0
  321. package/dayjs/utils.js +59 -0
  322. package/global.d.ts +97 -91
  323. package/index.ts +2 -10
  324. package/locale/index.ts +3 -15
  325. package/locale/lang/ar-SA.ts +133 -0
  326. package/locale/lang/de-DE.ts +133 -0
  327. package/locale/lang/en-US.ts +31 -26
  328. package/locale/lang/es-ES.ts +133 -0
  329. package/locale/lang/fr-FR.ts +133 -0
  330. package/locale/lang/ja-JP.ts +133 -0
  331. package/locale/lang/ko-KR.ts +133 -0
  332. package/locale/lang/pt-PT.ts +133 -0
  333. package/locale/lang/ru-RU.ts +133 -0
  334. package/locale/lang/th-TH.ts +28 -22
  335. package/locale/lang/tr-TR.ts +138 -0
  336. package/locale/lang/ug-CN.ts +137 -0
  337. package/locale/lang/vi-VN.ts +27 -30
  338. package/locale/lang/zh-CN.ts +32 -22
  339. package/locale/lang/zh-HK.ts +18 -31
  340. package/locale/lang/zh-TW.ts +22 -31
  341. package/package.json +1 -1
  342. package/types/components/common/interceptor.d.ts +15 -0
  343. package/types/components/common/util.d.ts +61 -1
  344. package/types/components/composables/useCell.d.ts +1 -1
  345. package/types/components/composables/useLockScroll.d.ts +1 -2
  346. package/types/components/composables/useParent.d.ts +1 -1
  347. package/types/components/composables/usePopover.d.ts +2 -2
  348. package/types/components/composables/useUpload.d.ts +41 -0
  349. package/types/components/wd-action-sheet/types.d.ts +13 -4
  350. package/types/components/wd-action-sheet/wd-action-sheet.vue.d.ts +20 -11
  351. package/types/components/wd-backtop/types.d.ts +1 -9
  352. package/types/components/wd-backtop/wd-backtop.vue.d.ts +6 -25
  353. package/types/components/wd-badge/types.d.ts +3 -6
  354. package/types/components/wd-badge/wd-badge.vue.d.ts +7 -14
  355. package/types/components/wd-button/types.d.ts +44 -8
  356. package/types/components/wd-button/wd-button.vue.d.ts +13 -9
  357. package/types/components/wd-calendar/types.d.ts +24 -18
  358. package/types/components/wd-calendar/wd-calendar.vue.d.ts +48 -32
  359. package/types/components/wd-calendar-view/month/month.vue.d.ts +11 -3
  360. package/types/components/wd-calendar-view/month/types.d.ts +4 -0
  361. package/types/components/wd-calendar-view/monthPanel/month-panel.vue.d.ts +18 -12
  362. package/types/components/wd-calendar-view/monthPanel/types.d.ts +48 -6
  363. package/types/components/wd-calendar-view/types.d.ts +11 -4
  364. package/types/components/wd-calendar-view/utils.d.ts +3 -12
  365. package/types/components/wd-calendar-view/wd-calendar-view.vue.d.ts +1 -1
  366. package/types/components/wd-calendar-view/year/types.d.ts +4 -0
  367. package/types/components/wd-calendar-view/year/year.vue.d.ts +11 -3
  368. package/types/components/wd-cell/types.d.ts +37 -1
  369. package/types/components/wd-cell/wd-cell.vue.d.ts +53 -9
  370. package/types/components/wd-checkbox/wd-checkbox.vue.d.ts +2 -2
  371. package/types/components/wd-checkbox-group/wd-checkbox-group.vue.d.ts +2 -2
  372. package/types/components/wd-circle/wd-circle.vue.d.ts +3 -3
  373. package/types/components/wd-col-picker/types.d.ts +14 -0
  374. package/types/components/wd-col-picker/wd-col-picker.vue.d.ts +36 -19
  375. package/types/components/wd-collapse/types.d.ts +1 -5
  376. package/types/components/wd-collapse/wd-collapse.vue.d.ts +3 -11
  377. package/types/components/wd-collapse-item/types.d.ts +19 -1
  378. package/types/components/wd-collapse-item/wd-collapse-item.vue.d.ts +20 -1
  379. package/types/components/wd-config-provider/types.d.ts +64 -7
  380. package/types/components/wd-config-provider/wd-config-provider.vue.d.ts +1 -1
  381. package/types/components/wd-count-to/types.d.ts +11 -0
  382. package/types/components/wd-count-to/wd-count-to.vue.d.ts +13 -4
  383. package/types/components/wd-curtain/types.d.ts +56 -0
  384. package/types/components/wd-curtain/wd-curtain.vue.d.ts +152 -77
  385. package/types/components/wd-datetime-picker/types.d.ts +49 -15
  386. package/types/components/wd-datetime-picker/wd-datetime-picker.vue.d.ts +75 -38
  387. package/types/components/wd-datetime-picker-view/types.d.ts +36 -14
  388. package/types/components/wd-datetime-picker-view/util.d.ts +12 -0
  389. package/types/components/wd-datetime-picker-view/wd-datetime-picker-view.vue.d.ts +35 -9
  390. package/types/components/wd-divider/types.d.ts +32 -4
  391. package/types/components/wd-divider/wd-divider.vue.d.ts +30 -7
  392. package/types/components/wd-drop-menu/types.d.ts +3 -3
  393. package/types/components/wd-drop-menu/wd-drop-menu.vue.d.ts +8 -8
  394. package/types/components/wd-drop-menu-item/types.d.ts +27 -15
  395. package/types/components/wd-drop-menu-item/wd-drop-menu-item.vue.d.ts +47 -36
  396. package/types/components/wd-fab/types.d.ts +19 -3
  397. package/types/components/wd-fab/wd-fab.vue.d.ts +13 -1
  398. package/types/components/wd-floating-panel/type.d.ts +54 -0
  399. package/types/components/wd-floating-panel/wd-floating-panel.vue.d.ts +109 -0
  400. package/types/components/wd-form/types.d.ts +1 -1
  401. package/types/components/wd-form/wd-form.vue.d.ts +2 -2
  402. package/types/components/wd-form-item/wd-form-item.vue.d.ts +2 -2
  403. package/types/components/wd-grid/types.d.ts +5 -0
  404. package/types/components/wd-grid/wd-grid.vue.d.ts +2 -0
  405. package/types/components/wd-grid-item/types.d.ts +4 -1
  406. package/types/components/wd-grid-item/wd-grid-item.vue.d.ts +3 -3
  407. package/types/components/wd-icon/types.d.ts +1 -1
  408. package/types/components/wd-icon/wd-icon.vue.d.ts +3 -3
  409. package/types/components/wd-img/types.d.ts +4 -1
  410. package/types/components/wd-img/wd-img.vue.d.ts +11 -4
  411. package/types/components/wd-img-cropper/types.d.ts +7 -0
  412. package/types/components/wd-img-cropper/wd-img-cropper.vue.d.ts +12 -3
  413. package/types/components/wd-index-bar/type.d.ts +2 -1
  414. package/types/components/wd-index-bar/wd-index-bar.vue.d.ts +1 -5
  415. package/types/components/wd-input/types.d.ts +53 -37
  416. package/types/components/wd-input/wd-input.vue.d.ts +50 -52
  417. package/types/components/wd-input-number/types.d.ts +51 -6
  418. package/types/components/wd-input-number/wd-input-number.vue.d.ts +152 -125
  419. package/types/components/wd-keyboard/constants.d.ts +8 -0
  420. package/types/components/wd-keyboard/key/index.vue.d.ts +70 -0
  421. package/types/components/wd-keyboard/key/types.d.ts +23 -0
  422. package/types/components/wd-keyboard/types.d.ts +137 -0
  423. package/types/components/wd-keyboard/wd-keyboard.vue.d.ts +200 -0
  424. package/types/components/wd-loading/wd-loading.vue.d.ts +2 -2
  425. package/types/components/wd-loadmore/types.d.ts +7 -4
  426. package/types/components/wd-loadmore/wd-loadmore.vue.d.ts +5 -9
  427. package/types/components/wd-message-box/index.d.ts +3 -8
  428. package/types/components/wd-message-box/types.d.ts +36 -5
  429. package/types/components/wd-message-box/wd-message-box.vue.d.ts +18 -2
  430. package/types/components/wd-navbar/wd-navbar.vue.d.ts +3 -3
  431. package/types/components/wd-navbar-capsule/types.d.ts +12 -0
  432. package/types/components/wd-navbar-capsule/wd-navbar-capsule.vue.d.ts +27 -4
  433. package/types/components/wd-notice-bar/types.d.ts +9 -1
  434. package/types/components/wd-notice-bar/wd-notice-bar.vue.d.ts +7 -5
  435. package/types/components/wd-notify/types.d.ts +7 -0
  436. package/types/components/wd-notify/wd-notify.vue.d.ts +13 -4
  437. package/types/components/wd-number-keyboard/types.d.ts +7 -0
  438. package/types/components/wd-number-keyboard/wd-number-keyboard.vue.d.ts +18 -9
  439. package/types/components/wd-overlay/wd-overlay.vue.d.ts +2 -2
  440. package/types/components/wd-pagination/wd-pagination.vue.d.ts +1 -1
  441. package/types/components/wd-password-input/wd-password-input.vue.d.ts +2 -2
  442. package/types/components/wd-picker/types.d.ts +28 -2
  443. package/types/components/wd-picker/wd-picker.vue.d.ts +55 -19
  444. package/types/components/wd-picker-view/types.d.ts +10 -0
  445. package/types/components/wd-picker-view/wd-picker-view.vue.d.ts +15 -3
  446. package/types/components/wd-popover/wd-popover.vue.d.ts +4 -4
  447. package/types/components/wd-popup/types.d.ts +44 -5
  448. package/types/components/wd-popup/wd-popup.vue.d.ts +35 -24
  449. package/types/components/wd-progress/types.d.ts +6 -3
  450. package/types/components/wd-progress/wd-progress.vue.d.ts +4 -6
  451. package/types/components/wd-qr-code/uqrcode.vue.d.ts +3 -3
  452. package/types/components/wd-qr-code/wd-qr-code.vue.d.ts +4 -4
  453. package/types/components/wd-radio/types.d.ts +8 -0
  454. package/types/components/wd-radio/wd-radio.vue.d.ts +7 -0
  455. package/types/components/wd-radio-group/types.d.ts +7 -1
  456. package/types/components/wd-radio-group/wd-radio-group.vue.d.ts +11 -2
  457. package/types/components/wd-rate/types.d.ts +9 -0
  458. package/types/components/wd-rate/wd-rate.vue.d.ts +13 -4
  459. package/types/components/wd-root-portal/wd-root-portal.vue.d.ts +26 -0
  460. package/types/components/wd-search/types.d.ts +16 -1
  461. package/types/components/wd-search/wd-search.vue.d.ts +28 -8
  462. package/types/components/wd-segmented/types.d.ts +10 -1
  463. package/types/components/wd-segmented/wd-segmented.vue.d.ts +6 -4
  464. package/types/components/wd-select-picker/types.d.ts +37 -22
  465. package/types/components/wd-select-picker/wd-select-picker.vue.d.ts +59 -30
  466. package/types/components/wd-sidebar/types.d.ts +19 -3
  467. package/types/components/wd-sidebar/wd-sidebar.vue.d.ts +4 -2
  468. package/types/components/wd-signature/types.d.ts +252 -0
  469. package/types/components/wd-signature/wd-signature.vue.d.ts +229 -0
  470. package/types/components/wd-skeleton/types.d.ts +3 -4
  471. package/types/components/wd-skeleton/wd-skeleton.vue.d.ts +10 -10
  472. package/types/components/wd-slider/types.d.ts +39 -15
  473. package/types/components/wd-slider/wd-slider.vue.d.ts +12 -38
  474. package/types/components/wd-sort-button/wd-sort-button.vue.d.ts +3 -3
  475. package/types/components/wd-status-tip/types.d.ts +9 -0
  476. package/types/components/wd-status-tip/wd-status-tip.vue.d.ts +69 -49
  477. package/types/components/wd-steps/wd-steps.vue.d.ts +1 -1
  478. package/types/components/wd-sticky/wd-sticky.vue.d.ts +3 -7
  479. package/types/components/wd-swipe-action/wd-swipe-action.vue.d.ts +3 -3
  480. package/types/components/wd-swiper/wd-swiper.vue.d.ts +4 -4
  481. package/types/components/wd-swiper-nav/types.d.ts +0 -14
  482. package/types/components/wd-swiper-nav/wd-swiper-nav.vue.d.ts +0 -18
  483. package/types/components/wd-switch/types.d.ts +0 -1
  484. package/types/components/wd-switch/wd-switch.vue.d.ts +2 -5
  485. package/types/components/wd-tab/types.d.ts +16 -3
  486. package/types/components/wd-tab/wd-tab.vue.d.ts +12 -4
  487. package/types/components/wd-tabbar/types.d.ts +1 -1
  488. package/types/components/wd-tabbar/wd-tabbar.vue.d.ts +5 -5
  489. package/types/components/wd-tabbar-item/wd-tabbar-item.vue.d.ts +1 -1
  490. package/types/components/wd-table/types.d.ts +12 -8
  491. package/types/components/wd-table/wd-table.vue.d.ts +16 -13
  492. package/types/components/wd-table-col/wd-table-col.vue.d.ts +1 -1
  493. package/types/components/wd-tabs/wd-tabs.vue.d.ts +7 -7
  494. package/types/components/wd-tag/wd-tag.vue.d.ts +4 -4
  495. package/types/components/wd-text/types.d.ts +2 -2
  496. package/types/components/wd-text/wd-text.vue.d.ts +7 -7
  497. package/types/components/wd-textarea/types.d.ts +41 -39
  498. package/types/components/wd-textarea/wd-textarea.vue.d.ts +46 -46
  499. package/types/components/wd-toast/index.d.ts +1 -6
  500. package/types/components/wd-toast/types.d.ts +127 -5
  501. package/types/components/wd-toast/wd-toast.vue.d.ts +101 -0
  502. package/types/components/wd-tooltip/types.d.ts +1 -1
  503. package/types/components/wd-tooltip/wd-tooltip.vue.d.ts +7 -7
  504. package/types/components/wd-tour/types.d.ts +194 -0
  505. package/types/components/wd-tour/wd-tour.vue.d.ts +267 -0
  506. package/types/components/wd-transition/types.d.ts +22 -7
  507. package/types/components/wd-transition/wd-transition.vue.d.ts +33 -20
  508. package/types/components/wd-upload/types.d.ts +39 -10
  509. package/types/components/wd-upload/wd-upload.vue.d.ts +42 -16
  510. package/types/components/wd-watermark/wd-watermark.vue.d.ts +7 -7
  511. package/types/locale/index.d.ts +0 -3
  512. package/types/locale/lang/zh-CN.d.ts +9 -0
  513. package/components/wd-datetime-picker-view/index.scss +0 -0
  514. package/components/wd-form/index.scss +0 -10
  515. package/components/wd-upload/utils.ts +0 -152
  516. package/types/components/common/dayjs.d.ts +0 -26
  517. package/types/components/wd-upload/utils.d.ts +0 -11
  518. package/types/locale/lang/en-US.d.ts +0 -128
@@ -1,43 +1,54 @@
1
1
  <template>
2
- <view :class="rootClass" :style="customStyle" :id="sliderId">
2
+ <view :class="rootClass" :style="customStyle">
3
3
  <!-- #ifdef MP-DINGTALK -->
4
- <view :id="sliderId" style="flex: 1" :class="rootClass">
4
+ <view style="flex: 1" :class="rootClass">
5
5
  <!-- #endif -->
6
- <view :class="`wd-slider__label-min ${customMinClass}`" v-if="!hideMinMax">
7
- {{ minText || minValue }}
6
+ <view :class="`wd-slider__label-min ${customMinClass}`" v-if="!hideMinMax">{{ minProp }}</view>
7
+ <view class="wd-slider__bar-wrapper" :style="wrapperStyle" :id="sliderBarWrapperId">
8
+ <view class="wd-slider__bar" :style="barStyle">
9
+ <template v-if="isRange">
10
+ <!-- 左边滑块 -->
11
+ <view
12
+ class="wd-slider__button-wrapper wd-slider__button-wrapper--left"
13
+ :style="sliderButtonStyle"
14
+ @touchstart="(event) => onSliderTouchStart(event, 0)"
15
+ @touchmove="onSliderTouchMove"
16
+ @touchend="onSliderTouchEnd"
17
+ @touchcancel="onSliderTouchEnd"
18
+ >
19
+ <view class="wd-slider__label" v-if="!hideLabel">{{ firstValue }}</view>
20
+ <view class="wd-slider__button" />
21
+ </view>
22
+ <!-- 右边滑块 -->
23
+ <view
24
+ class="wd-slider__button-wrapper wd-slider__button-wrapper--right"
25
+ :style="sliderButtonStyle"
26
+ @touchstart="(event) => onSliderTouchStart(event, 1)"
27
+ @touchmove="onSliderTouchMove"
28
+ @touchend="onSliderTouchEnd"
29
+ @touchcancel="onSliderTouchEnd"
30
+ >
31
+ <view class="wd-slider__label" v-if="!hideLabel">{{ secondValue }}</view>
32
+ <view class="wd-slider__button" />
33
+ </view>
34
+ </template>
35
+ <view
36
+ v-else
37
+ class="wd-slider__button-wrapper"
38
+ :style="sliderButtonStyle"
39
+ @touchstart="(event) => onSliderTouchStart(event, 0)"
40
+ @touchmove="onSliderTouchMove"
41
+ @touchend="onSliderTouchEnd"
42
+ @touchcancel="onSliderTouchEnd"
43
+ >
44
+ <view class="wd-slider__label" v-if="!hideLabel">{{ firstValue }}</view>
45
+ <view class="wd-slider__button" />
46
+ </view>
47
+ </view>
8
48
  </view>
9
49
  <view :class="`wd-slider__label-max ${customMaxClass}`" v-if="!hideMinMax">
10
- {{ maxText || maxValue }}
50
+ {{ maxProp }}
11
51
  </view>
12
- <view class="wd-slider__bar-wrapper" :style="barWrapperStyle">
13
- <view class="wd-slider__bar" :style="barCustomStyle"></view>
14
- <!-- 左边 -->
15
- <view
16
- class="wd-slider__button-wrapper"
17
- :style="buttonLeftStyle"
18
- @touchstart="onTouchStart"
19
- @touchmove="onTouchMove"
20
- @touchend="onTouchEnd"
21
- @touchcancel="onTouchEnd"
22
- >
23
- <view class="wd-slider__label" v-if="!hideLabel">{{ unit + leftNewValue }}</view>
24
- <view class="wd-slider__button" />
25
- </view>
26
- <!-- 右边 -->
27
- <view
28
- v-if="showRight"
29
- class="wd-slider__button-wrapper"
30
- :style="buttonRightStyle"
31
- @touchstart="onTouchStartRight"
32
- @touchmove="onTouchMoveRight"
33
- @touchend="onTouchEndRight"
34
- @touchcancel="onTouchEndRight"
35
- >
36
- <view class="wd-slider__label" v-if="!hideLabel">{{ unit + rightNewValue }}</view>
37
- <view class="wd-slider__button" />
38
- </view>
39
- </view>
40
-
41
52
  <!-- #ifdef MP-DINGTALK -->
42
53
  </view>
43
54
  <!-- #endif -->
@@ -50,329 +61,296 @@ export default {
50
61
  options: {
51
62
  addGlobalClass: true,
52
63
  virtualHost: true,
53
- styleIsolation: 'shared',
54
- },
64
+ styleIsolation: 'shared'
65
+ }
55
66
  }
56
67
  </script>
57
68
 
58
69
  <script lang="ts" setup>
59
- import { computed, getCurrentInstance, onMounted, ref, watch } from 'vue'
60
- import { getRect, isArray, isDef, isNumber, uuid } from '../common/util'
70
+ import { computed, type CSSProperties, getCurrentInstance, onMounted, ref, watch } from 'vue'
71
+ import { deepClone, getRect, isArray, isDef, isEqual, objToStyle, uuid } from '../common/util'
61
72
  import { useTouch } from '../composables/useTouch'
62
- import { sliderProps, type SliderExpose } from './types'
73
+ import { sliderProps, type SliderExpose, type SliderEmits, type SliderDragEvent, type SliderValue } from './types'
63
74
 
64
75
  const props = defineProps(sliderProps)
65
- const emit = defineEmits(['dragstart', 'dragmove', 'dragend', 'update:modelValue'])
66
-
67
- // 存放右滑轮中的所有属性
68
- const rightSlider = {
69
- startValue: 0,
70
- deltaX: 0,
71
- newValue: 0,
72
- }
73
- const sliderId = ref<string>(`sliderId${uuid()}`)
76
+ const emit = defineEmits<SliderEmits>()
74
77
 
75
- const touchLeft = useTouch()
76
- const touchRight = useTouch()
78
+ // ----------- 基础状态 -----------
79
+ const sliderBarWrapperId = ref<string>(`sliderBarWrapperId${uuid()}`)
80
+ const touch = useTouch()
81
+ const touchIndex = ref<number>(0)
82
+ const { proxy } = getCurrentInstance() as any
77
83
 
78
- const showRight = ref<boolean>(false)
79
- const barStyle = ref<string>('')
80
- const leftNewValue = ref<number>(0)
81
- const rightNewValue = ref<number>(0)
82
- const rightBarPercent = ref<number>(0)
83
- const leftBarPercent = ref<number>(0)
84
+ // ----------- 轨道尺寸状态 -----------
84
85
  const trackWidth = ref<number>(0)
85
86
  const trackLeft = ref<number>(0)
86
- const startValue = ref<number>(0)
87
- const currentValue = ref<number | number[]>(0)
88
- const newValue = ref<number>(0)
89
87
 
90
- const maxValue = ref<number>(100) // 最大值
91
- const minValue = ref<number>(0) // 最小值
92
- const stepValue = ref<number>(1) // 步长
88
+ // ----------- 值相关状态 -----------
89
+ /**
90
+ * 最小值 - 直接使用props,减少状态同步
91
+ */
92
+ const minProp = computed(() => props.min)
93
93
 
94
- watch(
95
- () => props.max,
96
- (newValue) => {
97
- if (newValue <= props.min) {
98
- maxValue.value = props.min // 交换最大值和最小值
99
- minValue.value = newValue
100
- console.warn('[wot design] warning(wd-slider): max value must be greater than min value')
101
- } else {
102
- maxValue.value = newValue // 更新最大值
103
- }
104
- calcBarPercent()
105
- },
106
- { immediate: true },
107
- )
94
+ /**
95
+ * 最大值 - 直接使用props,减少状态同步
96
+ */
97
+ const maxProp = computed(() => props.max)
108
98
 
109
- watch(
110
- () => props.min,
111
- (newValue) => {
112
- if (newValue >= props.max) {
113
- minValue.value = props.max // 交换最小值和最大值
114
- maxValue.value = newValue
115
- console.warn('[wot design] warning(wd-slider): min value must be less than max value')
116
- } else {
117
- minValue.value = newValue // 更新最小值
118
- }
119
- calcBarPercent()
120
- },
121
- { immediate: true },
122
- )
99
+ /**
100
+ * 步长值 - 直接使用props,减少状态同步
101
+ */
102
+ const stepProp = computed(() => {
103
+ if (props.step <= 0) {
104
+ console.warn('[wot ui] warning(wd-slider): step must be greater than 0')
105
+ return 1
106
+ }
107
+ return props.step
108
+ })
123
109
 
124
- watch(
125
- () => props.step,
126
- (newValue) => {
127
- if (newValue < 1) {
128
- stepValue.value = 1
129
- console.warn('[wot design] warning(wd-slider): step must be greater than 0')
130
- } else {
131
- stepValue.value = Math.floor(newValue)
132
- }
133
- },
134
- { immediate: true },
135
- )
110
+ const startValue = ref<SliderValue>(0)
111
+ const modelValue = ref<SliderValue>(getInitValue())
136
112
 
137
- watch(
138
- () => props.modelValue,
139
- (newValue) => {
140
- // 类型校验,支持所有值(除null、undefined。undefined建议统一写成void (0)防止全局undefined被覆盖)
141
- if (newValue === null || newValue === undefined) {
142
- emit('update:modelValue', currentValue.value)
143
- console.warn('[wot design] warning(wd-slider): value can nott be null or undefined')
144
- } else if (isArray(newValue) && newValue.length !== 2) {
145
- console.warn('[wot design] warning(wd-slider): value must be dyadic array')
146
- } else if (!isNumber(newValue) && !isArray(newValue)) {
147
- emit('update:modelValue', currentValue.value)
148
- console.warn('[wot design] warning(wd-slider): value must be dyadic array Or Number')
149
- }
150
- // 动态传值后修改
151
- if (isArray(newValue)) {
152
- if (currentValue.value && isArray(currentValue.value) && equal(newValue, currentValue.value))
153
- return
154
- currentValue.value = newValue
155
- showRight.value = true
156
- if (leftBarPercent.value <= rightBarPercent.value) {
157
- leftBarSlider(newValue[0])
158
- rightBarSlider(newValue[1])
159
- } else {
160
- leftBarSlider(newValue[1])
161
- rightBarSlider(newValue[0])
162
- }
163
- } else {
164
- if (newValue === currentValue.value) return
165
- currentValue.value = newValue
166
- leftBarSlider(newValue)
167
- }
168
- },
169
- { deep: true, immediate: true },
170
- )
113
+ // ----------- 计算属性 -----------
171
114
 
172
- const { proxy } = getCurrentInstance() as any
115
+ /**
116
+ * 是否为双滑块模式
117
+ */
118
+ const isRange = computed(() => isArray(modelValue.value))
119
+
120
+ /**
121
+ * 计算滑块的取值范围大小
122
+ */
123
+ const scope = computed(() => maxProp.value - minProp.value)
124
+
125
+ /**
126
+ * 获取左侧滑块的值
127
+ */
128
+ const firstValue = computed(() => (isRange.value ? (modelValue.value as number[])[0] : (modelValue.value as number)))
129
+
130
+ /**
131
+ * 获取右侧滑块的值(仅双滑块模式有效)
132
+ */
133
+ const secondValue = computed(() => (isRange.value ? (modelValue.value as number[])[1] : 0))
173
134
 
135
+ /**
136
+ * 根类名计算
137
+ */
174
138
  const rootClass = computed(() => {
175
- const rootClass = `wd-slider ${!props.hideLabel ? 'wd-slider__has-label' : ''} ${props.disabled ? 'wd-slider--disabled' : ''} ${props.customClass}`
176
- return rootClass
139
+ return `wd-slider ${!props.hideLabel ? 'wd-slider__has-label' : ''} ${props.disabled ? 'wd-slider--disabled' : ''} ${props.customClass}`
177
140
  })
178
141
 
179
- const barWrapperStyle = computed(() => {
180
- const barWrapperStyle = `${props.inactiveColor ? 'background:' + props.inactiveColor : ''}`
181
- return barWrapperStyle
142
+ /**
143
+ * 滑块按钮样式
144
+ */
145
+ const sliderButtonStyle = computed(() => {
146
+ return objToStyle({
147
+ visibility: !props.disabled ? 'visible' : 'hidden'
148
+ })
182
149
  })
183
150
 
184
- const barCustomStyle = computed(() => {
185
- const barWrapperStyle = `${barStyle.value};${props.activeColor ? 'background:' + props.activeColor : ''}`
186
- return barWrapperStyle
151
+ /**
152
+ * 轨道包装器样式
153
+ */
154
+ const wrapperStyle = computed(() => {
155
+ const style: CSSProperties = {}
156
+ if (props.inactiveColor) {
157
+ style.background = props.inactiveColor
158
+ }
159
+ return objToStyle(style)
187
160
  })
188
161
 
189
- const buttonLeftStyle = computed(() => {
190
- const buttonLeftStyle = `left: ${leftBarPercent.value}%; visibility: ${!props.disabled ? 'show' : 'hidden'};`
191
- return buttonLeftStyle
162
+ /**
163
+ * 进度条样式计算
164
+ */
165
+ const barStyle = computed(() => {
166
+ const style: CSSProperties = {}
167
+
168
+ if (scope.value === 0) return objToStyle(style)
169
+
170
+ if (isRange.value) {
171
+ // 双滑块模式
172
+ const [left, right] = normalizeRangeValues(modelValue.value as number[])
173
+ style.width = `${((right - left) * 100) / scope.value}%`
174
+ style.left = `${((left - minProp.value) * 100) / scope.value}%`
175
+ } else {
176
+ // 单滑块模式
177
+ style.width = `${(((modelValue.value as number) - minProp.value) * 100) / scope.value}%`
178
+ style.left = '0'
179
+ }
180
+
181
+ // 添加自定义颜色
182
+ if (props.activeColor) {
183
+ style.background = props.activeColor
184
+ }
185
+
186
+ return objToStyle(style)
192
187
  })
193
188
 
194
- const buttonRightStyle = computed(() => {
195
- const buttonRightStyle = `left: ${rightBarPercent.value}%; visibility: ${!props.disabled ? 'show' : 'hidden'}`
196
- return buttonRightStyle
189
+ // ----------- 监听器 -----------
190
+ /**
191
+ * 监听 modelValue 属性变化
192
+ */
193
+ watch(
194
+ () => props.modelValue,
195
+ (newValue) => {
196
+ if (!isEqual(newValue, modelValue.value)) {
197
+ modelValue.value = getInitValue()
198
+ }
199
+ },
200
+ { deep: true }
201
+ )
202
+
203
+ /**
204
+ * 向上发射模型值变化
205
+ */
206
+ watch(modelValue, (newVal) => {
207
+ emit('update:modelValue', newVal)
197
208
  })
198
209
 
210
+ // ----------- 生命周期钩子 -----------
199
211
  onMounted(() => {
200
212
  initSlider()
201
213
  })
202
214
 
215
+ // ----------- 工具方法 -----------
216
+ /**
217
+ * 检查组件是否处于禁用状态
218
+ */
219
+ function isDisabled(): boolean {
220
+ return props.disabled
221
+ }
222
+
223
+ /**
224
+ * 限制值在指定范围内
225
+ */
226
+ function clamp(value: number, min: number, max: number): number {
227
+ return Math.min(Math.max(value, min), max)
228
+ }
229
+
230
+ // ----------- 核心方法 -----------
203
231
  /**
204
- * 初始化slider宽度
232
+ * 初始化滑块宽度
205
233
  */
206
234
  function initSlider() {
207
- getRect(`#${sliderId.value}`, false, proxy).then((data) => {
208
- // trackWidth: 轨道全长
235
+ getRect(`#${sliderBarWrapperId.value}`, false, proxy).then((data) => {
209
236
  trackWidth.value = Number(data.width)
210
- // trackLeft: 轨道距离左侧的距离
211
237
  trackLeft.value = Number(data.left)
212
238
  })
213
239
  }
214
240
 
215
- function onTouchStart(event: any) {
216
- const { disabled, modelValue } = props
217
- if (disabled) return
218
- touchLeft.touchStart(event)
219
- startValue.value = !isArray(modelValue)
220
- ? format(modelValue)
221
- : leftBarPercent.value < rightBarPercent.value
222
- ? format(modelValue[0])
223
- : format(modelValue[1])
224
- emit('dragstart', {
225
- value: currentValue.value,
226
- })
227
- }
228
- function onTouchMove(event: any) {
229
- const { disabled } = props
230
- if (disabled) return
231
- touchLeft.touchMove(event)
232
- // 移动间距 deltaX 就是向左(-)向右(+)
233
- const diff = (touchLeft.deltaX.value / trackWidth.value) * (maxValue.value - minValue.value)
234
- newValue.value = startValue.value + diff
235
-
236
- // 左滑轮滑动控制
237
- leftBarSlider(newValue.value)
238
- emit('dragmove', {
239
- value: currentValue.value,
240
- })
241
- }
242
- function onTouchEnd() {
243
- if (props.disabled) return
244
- emit('dragend', {
245
- value: currentValue.value,
246
- })
247
- }
248
- // 右边滑轮滑动状态监听
249
- function onTouchStartRight(event: any) {
250
- if (props.disabled) return
251
- const { modelValue } = props
252
- // 右滑轮移动时数据绑定
253
- touchRight.touchStart(event)
254
- // 记录开始数据值
255
- rightSlider.startValue =
256
- leftBarPercent.value < rightBarPercent.value
257
- ? format((modelValue as number[])[1])
258
- : format((modelValue as number[])[0])
259
- emit('dragstart', {
260
- value: currentValue.value,
261
- })
262
- }
263
- function onTouchMoveRight(event: any) {
264
- if (props.disabled) return
265
- touchRight.touchMove(event)
266
- // 移动间距 deltaX 就是向左向右
267
- const diff = (touchRight.deltaX.value / trackWidth.value) * (maxValue.value - minValue.value)
268
- rightSlider.newValue = format(rightSlider.startValue + diff)
269
- // 右滑轮滑动控制
270
- rightBarSlider(rightSlider.newValue)
271
- emit('dragmove', {
272
- value: currentValue.value,
273
- })
241
+ /**
242
+ * 获取初始值
243
+ */
244
+ function getInitValue(): SliderValue {
245
+ if (isArray(props.modelValue)) {
246
+ return normalizeRangeValues(props.modelValue as number[])
247
+ } else {
248
+ return clamp(props.modelValue as number, minProp.value, maxProp.value)
249
+ }
274
250
  }
275
- function onTouchEndRight() {
276
- if (props.disabled) return
277
- emit('dragend', {
278
- value: currentValue.value,
279
- })
251
+
252
+ /**
253
+ * 处理双滑块模式下的值,确保值有效
254
+ */
255
+ function normalizeRangeValues(value: number[]): [number, number] {
256
+ // 检查输入是否为有效的双滑块数组
257
+ if (!Array.isArray(value) || value.length < 2) {
258
+ console.warn('[wot ui] warning(wd-slider): range value should be an array with at least 2 elements')
259
+ return [minProp.value, maxProp.value]
260
+ }
261
+
262
+ const left = clamp(value[0], minProp.value, maxProp.value)
263
+ const right = clamp(value[1], minProp.value, maxProp.value)
264
+
265
+ return left > right ? [right, left] : [left, right]
280
266
  }
267
+
281
268
  /**
282
- * 控制右侧滑轮滑动, value校验
283
- * @param {Number} value 当前滑轮绑定值
269
+ * 将值对齐到最近的步长倍数
284
270
  */
285
- function rightBarSlider(value: number) {
286
- value = format(value)
287
- rightNewValue.value = value
288
- emit('update:modelValue', [
289
- Math.min(leftNewValue.value, rightNewValue.value),
290
- Math.max(leftNewValue.value, rightNewValue.value),
291
- ])
292
- rightBarPercent.value = formatPercent(value)
293
- styleControl()
271
+ function snapValueToStep(value: number): number {
272
+ // 确保值在范围内
273
+ value = clamp(value, minProp.value, maxProp.value)
274
+
275
+ // 计算最接近的步长倍数
276
+ const steps = Math.round((value - minProp.value) / stepProp.value)
277
+
278
+ // 计算最终值并处理精度问题
279
+ return parseFloat((minProp.value + steps * stepProp.value).toFixed(10))
294
280
  }
281
+
295
282
  /**
296
- * 控制左滑轮滑动,更新渲染数据,对 value 进行校验取整
297
- * @param {Number} value 当前滑轮绑定值
283
+ * 统一更新滑块值的函数
298
284
  */
299
- function leftBarSlider(value: number) {
300
- value = format(value)
301
-
302
- // value 转换成百分比
303
- const percent = formatPercent(value)
304
- if (!showRight.value) {
305
- emit('update:modelValue', value)
306
- leftNewValue.value = value
307
- leftBarPercent.value = percent
308
- barStyle.value = `width: ${percent}%; `
285
+ function updateValue(value: SliderValue) {
286
+ let newValue: SliderValue = deepClone(value)
287
+
288
+ if (isArray(value)) {
289
+ newValue = normalizeRangeValues(value as number[]).map((v) => snapValueToStep(v)) as [number, number]
309
290
  } else {
310
- leftNewValue.value = value
311
- leftBarPercent.value = percent
312
- emit('update:modelValue', [
313
- Math.min(leftNewValue.value, rightNewValue.value),
314
- Math.max(leftNewValue.value, rightNewValue.value),
315
- ])
316
- styleControl()
291
+ newValue = snapValueToStep(value as number)
317
292
  }
318
- }
319
- // 样式控制
320
- function styleControl() {
321
- // 左右滑轮距离左边最短为当前激活条所处位置
322
- const barLeft =
323
- leftBarPercent.value < rightBarPercent.value
324
- ? [leftBarPercent.value, rightBarPercent.value]
325
- : [rightBarPercent.value, leftBarPercent.value]
326
- // 通过左右滑轮的间距控制 激活条宽度 barLeft[1] - barLeft[0]
327
- const barStyleTemp = `width: ${barLeft[1] - barLeft[0]}%; left: ${barLeft[0]}%`
328
- currentValue.value =
329
- leftNewValue.value < rightNewValue.value
330
- ? [leftNewValue.value, rightNewValue.value]
331
- : [rightNewValue.value, leftNewValue.value]
332
- barStyle.value = barStyleTemp
333
- }
334
293
 
335
- function equal(arr1: number[], arr2: number[]) {
336
- if (!isDef(arr1) || !isDef(arr2)) {
337
- return false
294
+ if (!isEqual(newValue, modelValue.value)) {
295
+ modelValue.value = newValue
338
296
  }
339
- let i = 0
340
- arr1.forEach((item, index) => {
341
- item === arr2[index] && i++
342
- })
343
- return i === 2
344
297
  }
345
- function format(value: number) {
346
- const formatValue =
347
- Math.round(Math.max(minValue.value, Math.min(value, maxValue.value)) / stepValue.value) *
348
- stepValue.value
349
- return formatValue
298
+
299
+ // ----------- 事件处理 -----------
300
+ /**
301
+ * 滑块触摸开始事件处理
302
+ */
303
+ function onSliderTouchStart(event: any, index: number) {
304
+ if (isDisabled()) return
305
+
306
+ touchIndex.value = index
307
+ touch.touchStart(event)
308
+
309
+ // 保存触摸开始时的滑块值
310
+ startValue.value = deepClone(modelValue.value)
311
+
312
+ // 触发拖动开始事件
313
+ emit('dragstart', { value: modelValue.value })
350
314
  }
351
315
 
352
- // 计算占比
353
- function formatPercent(value: number) {
354
- const percentage = ((value - minValue.value) / (maxValue.value - minValue.value)) * 100
355
- return percentage
316
+ /**
317
+ * 滑块触摸移动事件处理
318
+ */
319
+ function onSliderTouchMove(event: any) {
320
+ if (isDisabled()) return
321
+
322
+ // 更新触摸状态
323
+ touch.touchMove(event)
324
+
325
+ // 计算滑动距离对应的值变化
326
+ const diff = (touch.deltaX.value / trackWidth.value) * scope.value
327
+ let newValue = deepClone(startValue.value)
328
+
329
+ if (isArray(newValue)) {
330
+ ;(newValue as number[])[touchIndex.value] += diff
331
+ } else {
332
+ newValue = (newValue as number) + diff
333
+ }
334
+
335
+ updateValue(newValue)
336
+
337
+ // 触发拖动事件
338
+ emit('dragmove', { value: modelValue.value })
356
339
  }
357
- // 计算滑块位置和进度长度
358
- function calcBarPercent() {
359
- const { modelValue } = props
360
- let value = !isArray(modelValue)
361
- ? format(modelValue)
362
- : leftBarPercent.value < rightBarPercent.value
363
- ? format(modelValue[0])
364
- : format(modelValue[1])
365
- value = format(value)
366
- // 把 value 转换成百分比
367
- const percent = formatPercent(value)
368
- leftBarPercent.value = percent
369
- barStyle.value = `width: ${percent}%; `
340
+
341
+ /**
342
+ * 滑块触摸结束事件处理
343
+ */
344
+ function onSliderTouchEnd() {
345
+ if (isDisabled()) return
346
+
347
+ emit('dragend', { value: modelValue.value })
370
348
  }
371
349
 
372
350
  defineExpose<SliderExpose>({
373
- initSlider,
351
+ initSlider
374
352
  })
375
353
  </script>
376
354
  <style lang="scss" scoped>
377
- @import './index';
355
+ @import './index.scss';
378
356
  </style>