oxy-uni-ui 1.0.1

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 (355) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/attributes.json +1 -0
  4. package/components/common/AbortablePromise.ts +28 -0
  5. package/components/common/abstracts/_config.scss +7 -0
  6. package/components/common/abstracts/_function.scss +89 -0
  7. package/components/common/abstracts/_mixin.scss +385 -0
  8. package/components/common/abstracts/variable.scss +974 -0
  9. package/components/common/base64.ts +29 -0
  10. package/components/common/canvasHelper.ts +49 -0
  11. package/components/common/clickoutside.ts +25 -0
  12. package/components/common/event.ts +8 -0
  13. package/components/common/interceptor.ts +43 -0
  14. package/components/common/props.ts +51 -0
  15. package/components/common/util.ts +778 -0
  16. package/components/composables/index.ts +11 -0
  17. package/components/composables/useCell.ts +13 -0
  18. package/components/composables/useChildren.ts +113 -0
  19. package/components/composables/useCountDown.ts +138 -0
  20. package/components/composables/useLockScroll.ts +37 -0
  21. package/components/composables/useParent.ts +41 -0
  22. package/components/composables/usePopover.ts +176 -0
  23. package/components/composables/useQueue.ts +52 -0
  24. package/components/composables/useRaf.ts +37 -0
  25. package/components/composables/useTouch.ts +43 -0
  26. package/components/composables/useTranslate.ts +12 -0
  27. package/components/composables/useUpload.ts +364 -0
  28. package/components/oxy-action-sheet/index.scss +204 -0
  29. package/components/oxy-action-sheet/oxy-action-sheet.vue +155 -0
  30. package/components/oxy-action-sheet/types.ts +118 -0
  31. package/components/oxy-backtop/index.scss +25 -0
  32. package/components/oxy-backtop/oxy-backtop.vue +45 -0
  33. package/components/oxy-backtop/types.ts +37 -0
  34. package/components/oxy-badge/index.scss +63 -0
  35. package/components/oxy-badge/oxy-badge.vue +61 -0
  36. package/components/oxy-badge/types.ts +41 -0
  37. package/components/oxy-button/index.scss +336 -0
  38. package/components/oxy-button/oxy-button.vue +195 -0
  39. package/components/oxy-button/types.ts +133 -0
  40. package/components/oxy-calendar/index.scss +158 -0
  41. package/components/oxy-calendar/oxy-calendar.vue +451 -0
  42. package/components/oxy-calendar/types.ts +217 -0
  43. package/components/oxy-calendar-view/index.scss +0 -0
  44. package/components/oxy-calendar-view/month/index.scss +162 -0
  45. package/components/oxy-calendar-view/month/month.vue +389 -0
  46. package/components/oxy-calendar-view/month/types.ts +20 -0
  47. package/components/oxy-calendar-view/monthPanel/index.scss +89 -0
  48. package/components/oxy-calendar-view/monthPanel/month-panel.vue +374 -0
  49. package/components/oxy-calendar-view/monthPanel/types.ts +48 -0
  50. package/components/oxy-calendar-view/oxy-calendar-view.vue +111 -0
  51. package/components/oxy-calendar-view/types.ts +109 -0
  52. package/components/oxy-calendar-view/utils.ts +429 -0
  53. package/components/oxy-calendar-view/year/index.scss +153 -0
  54. package/components/oxy-calendar-view/year/types.ts +20 -0
  55. package/components/oxy-calendar-view/year/year.vue +202 -0
  56. package/components/oxy-calendar-view/yearPanel/index.scss +24 -0
  57. package/components/oxy-calendar-view/yearPanel/types.ts +38 -0
  58. package/components/oxy-calendar-view/yearPanel/year-panel.vue +135 -0
  59. package/components/oxy-card/index.scss +71 -0
  60. package/components/oxy-card/oxy-card.vue +37 -0
  61. package/components/oxy-card/types.ts +30 -0
  62. package/components/oxy-cell/index.scss +206 -0
  63. package/components/oxy-cell/oxy-cell.vue +140 -0
  64. package/components/oxy-cell/types.ts +111 -0
  65. package/components/oxy-cell-group/index.scss +56 -0
  66. package/components/oxy-cell-group/oxy-cell-group.vue +45 -0
  67. package/components/oxy-cell-group/types.ts +32 -0
  68. package/components/oxy-checkbox/index.scss +285 -0
  69. package/components/oxy-checkbox/oxy-checkbox.vue +177 -0
  70. package/components/oxy-checkbox/types.ts +68 -0
  71. package/components/oxy-checkbox-group/index.scss +20 -0
  72. package/components/oxy-checkbox-group/oxy-checkbox-group.vue +100 -0
  73. package/components/oxy-checkbox-group/types.ts +59 -0
  74. package/components/oxy-circle/index.scss +18 -0
  75. package/components/oxy-circle/oxy-circle.vue +296 -0
  76. package/components/oxy-circle/types.ts +54 -0
  77. package/components/oxy-col/index.scss +19 -0
  78. package/components/oxy-col/oxy-col.vue +49 -0
  79. package/components/oxy-col/types.ts +15 -0
  80. package/components/oxy-col-picker/index.scss +168 -0
  81. package/components/oxy-col-picker/oxy-col-picker.vue +498 -0
  82. package/components/oxy-col-picker/types.ts +166 -0
  83. package/components/oxy-collapse/index.scss +55 -0
  84. package/components/oxy-collapse/oxy-collapse.vue +151 -0
  85. package/components/oxy-collapse/types.ts +58 -0
  86. package/components/oxy-collapse-item/index.scss +90 -0
  87. package/components/oxy-collapse-item/oxy-collapse-item.vue +171 -0
  88. package/components/oxy-collapse-item/types.ts +48 -0
  89. package/components/oxy-config-provider/oxy-config-provider.vue +73 -0
  90. package/components/oxy-config-provider/types.ts +1052 -0
  91. package/components/oxy-count-down/index.scss +15 -0
  92. package/components/oxy-count-down/oxy-count-down.vue +60 -0
  93. package/components/oxy-count-down/types.ts +41 -0
  94. package/components/oxy-count-down/utils.ts +52 -0
  95. package/components/oxy-count-to/index.scss +7 -0
  96. package/components/oxy-count-to/oxy-count-to.vue +125 -0
  97. package/components/oxy-count-to/types.ts +117 -0
  98. package/components/oxy-curtain/index.scss +85 -0
  99. package/components/oxy-curtain/oxy-curtain.vue +172 -0
  100. package/components/oxy-curtain/types.ts +73 -0
  101. package/components/oxy-datetime-picker/index.scss +164 -0
  102. package/components/oxy-datetime-picker/oxy-datetime-picker.vue +801 -0
  103. package/components/oxy-datetime-picker/types.ts +231 -0
  104. package/components/oxy-datetime-picker-view/oxy-datetime-picker-view.vue +499 -0
  105. package/components/oxy-datetime-picker-view/types.ts +120 -0
  106. package/components/oxy-datetime-picker-view/util.ts +30 -0
  107. package/components/oxy-design-uni/oxy-design-uni.vue +5 -0
  108. package/components/oxy-divider/index.scss +100 -0
  109. package/components/oxy-divider/oxy-divider.vue +52 -0
  110. package/components/oxy-divider/types.ts +35 -0
  111. package/components/oxy-drop-menu/index.scss +86 -0
  112. package/components/oxy-drop-menu/oxy-drop-menu.vue +166 -0
  113. package/components/oxy-drop-menu/types.ts +38 -0
  114. package/components/oxy-drop-menu-item/index.scss +66 -0
  115. package/components/oxy-drop-menu-item/oxy-drop-menu-item.vue +221 -0
  116. package/components/oxy-drop-menu-item/types.ts +94 -0
  117. package/components/oxy-fab/index.scss +116 -0
  118. package/components/oxy-fab/oxy-fab.vue +276 -0
  119. package/components/oxy-fab/types.ts +66 -0
  120. package/components/oxy-floating-panel/index.scss +64 -0
  121. package/components/oxy-floating-panel/oxy-floating-panel.vue +140 -0
  122. package/components/oxy-floating-panel/type.ts +32 -0
  123. package/components/oxy-form/oxy-form.vue +207 -0
  124. package/components/oxy-form/types.ts +76 -0
  125. package/components/oxy-form-item/index.scss +18 -0
  126. package/components/oxy-form-item/oxy-form-item.vue +56 -0
  127. package/components/oxy-form-item/types.ts +16 -0
  128. package/components/oxy-gap/index.scss +9 -0
  129. package/components/oxy-gap/oxy-gap.vue +36 -0
  130. package/components/oxy-gap/types.ts +17 -0
  131. package/components/oxy-grid/index.scss +9 -0
  132. package/components/oxy-grid/oxy-grid.vue +106 -0
  133. package/components/oxy-grid/types.ts +50 -0
  134. package/components/oxy-grid-item/index.scss +148 -0
  135. package/components/oxy-grid-item/oxy-grid-item.vue +176 -0
  136. package/components/oxy-grid-item/types.ts +77 -0
  137. package/components/oxy-icon/index.scss +1230 -0
  138. package/components/oxy-icon/oxy-icon.vue +53 -0
  139. package/components/oxy-icon/oxy-icons.ttf +0 -0
  140. package/components/oxy-icon/types.ts +21 -0
  141. package/components/oxy-img/index.scss +19 -0
  142. package/components/oxy-img/oxy-img.vue +81 -0
  143. package/components/oxy-img/types.ts +61 -0
  144. package/components/oxy-img-cropper/index.scss +231 -0
  145. package/components/oxy-img-cropper/oxy-img-cropper.vue +664 -0
  146. package/components/oxy-img-cropper/types.ts +76 -0
  147. package/components/oxy-index-anchor/index.scss +35 -0
  148. package/components/oxy-index-anchor/oxy-index-anchor.vue +55 -0
  149. package/components/oxy-index-anchor/type.ts +9 -0
  150. package/components/oxy-index-bar/index.scss +39 -0
  151. package/components/oxy-index-bar/oxy-index-bar.vue +156 -0
  152. package/components/oxy-index-bar/type.ts +23 -0
  153. package/components/oxy-input/index.scss +323 -0
  154. package/components/oxy-input/oxy-input.vue +300 -0
  155. package/components/oxy-input/placeholder.scss +21 -0
  156. package/components/oxy-input/types.ts +189 -0
  157. package/components/oxy-input-number/index.scss +132 -0
  158. package/components/oxy-input-number/oxy-input-number.vue +464 -0
  159. package/components/oxy-input-number/types.ts +101 -0
  160. package/components/oxy-keyboard/constants.ts +81 -0
  161. package/components/oxy-keyboard/index.scss +102 -0
  162. package/components/oxy-keyboard/key/index.scss +79 -0
  163. package/components/oxy-keyboard/key/index.vue +76 -0
  164. package/components/oxy-keyboard/key/types.ts +11 -0
  165. package/components/oxy-keyboard/oxy-keyboard.vue +206 -0
  166. package/components/oxy-keyboard/types.ts +92 -0
  167. package/components/oxy-loading/index.scss +37 -0
  168. package/components/oxy-loading/oxy-loading.vue +90 -0
  169. package/components/oxy-loading/types.ts +22 -0
  170. package/components/oxy-loadmore/index.scss +39 -0
  171. package/components/oxy-loadmore/oxy-loadmore.vue +59 -0
  172. package/components/oxy-loadmore/types.ts +30 -0
  173. package/components/oxy-message-box/index.scss +108 -0
  174. package/components/oxy-message-box/index.ts +87 -0
  175. package/components/oxy-message-box/oxy-message-box.vue +291 -0
  176. package/components/oxy-message-box/types.ts +132 -0
  177. package/components/oxy-navbar/index.scss +93 -0
  178. package/components/oxy-navbar/oxy-navbar.vue +111 -0
  179. package/components/oxy-navbar/types.ts +52 -0
  180. package/components/oxy-navbar-capsule/index.scss +66 -0
  181. package/components/oxy-navbar-capsule/oxy-navbar-capsule.vue +35 -0
  182. package/components/oxy-navbar-capsule/types.ts +8 -0
  183. package/components/oxy-notice-bar/index.scss +68 -0
  184. package/components/oxy-notice-bar/oxy-notice-bar.vue +266 -0
  185. package/components/oxy-notice-bar/types.ts +67 -0
  186. package/components/oxy-notify/index.scss +34 -0
  187. package/components/oxy-notify/index.ts +61 -0
  188. package/components/oxy-notify/oxy-notify.vue +85 -0
  189. package/components/oxy-notify/types.ts +66 -0
  190. package/components/oxy-number-keyboard/index.scss +78 -0
  191. package/components/oxy-number-keyboard/key/index.scss +81 -0
  192. package/components/oxy-number-keyboard/key/index.vue +78 -0
  193. package/components/oxy-number-keyboard/key/types.ts +11 -0
  194. package/components/oxy-number-keyboard/oxy-number-keyboard.vue +151 -0
  195. package/components/oxy-number-keyboard/types.ts +83 -0
  196. package/components/oxy-overlay/index.scss +17 -0
  197. package/components/oxy-overlay/oxy-overlay.vue +47 -0
  198. package/components/oxy-overlay/types.ts +25 -0
  199. package/components/oxy-pagination/index.scss +57 -0
  200. package/components/oxy-pagination/oxy-pagination.vue +110 -0
  201. package/components/oxy-pagination/types.ts +41 -0
  202. package/components/oxy-password-input/index.scss +124 -0
  203. package/components/oxy-password-input/oxy-password-input.vue +49 -0
  204. package/components/oxy-password-input/types.ts +33 -0
  205. package/components/oxy-picker/index.scss +110 -0
  206. package/components/oxy-picker/oxy-picker.vue +412 -0
  207. package/components/oxy-picker/types.ts +189 -0
  208. package/components/oxy-picker-view/index.scss +92 -0
  209. package/components/oxy-picker-view/oxy-picker-view.vue +369 -0
  210. package/components/oxy-picker-view/types.ts +152 -0
  211. package/components/oxy-popover/index.scss +116 -0
  212. package/components/oxy-popover/oxy-popover.vue +180 -0
  213. package/components/oxy-popover/types.ts +69 -0
  214. package/components/oxy-popup/index.scss +84 -0
  215. package/components/oxy-popup/oxy-popup.vue +169 -0
  216. package/components/oxy-popup/types.ts +95 -0
  217. package/components/oxy-progress/index.scss +68 -0
  218. package/components/oxy-progress/oxy-progress.vue +197 -0
  219. package/components/oxy-progress/types.ts +35 -0
  220. package/components/oxy-radio/index.scss +301 -0
  221. package/components/oxy-radio/oxy-radio.vue +118 -0
  222. package/components/oxy-radio/types.ts +42 -0
  223. package/components/oxy-radio-group/index.scss +23 -0
  224. package/components/oxy-radio-group/oxy-radio-group.vue +51 -0
  225. package/components/oxy-radio-group/types.ts +39 -0
  226. package/components/oxy-rate/index.scss +25 -0
  227. package/components/oxy-rate/oxy-rate.vue +178 -0
  228. package/components/oxy-rate/types.ts +103 -0
  229. package/components/oxy-resize/index.scss +27 -0
  230. package/components/oxy-resize/oxy-resize.vue +144 -0
  231. package/components/oxy-resize/types.ts +6 -0
  232. package/components/oxy-root-portal/oxy-root-portal.vue +50 -0
  233. package/components/oxy-row/index.scss +10 -0
  234. package/components/oxy-row/oxy-row.vue +42 -0
  235. package/components/oxy-row/types.ts +16 -0
  236. package/components/oxy-search/index.scss +148 -0
  237. package/components/oxy-search/oxy-search.vue +187 -0
  238. package/components/oxy-search/types.ts +93 -0
  239. package/components/oxy-segmented/index.scss +101 -0
  240. package/components/oxy-segmented/oxy-segmented.vue +143 -0
  241. package/components/oxy-segmented/types.ts +71 -0
  242. package/components/oxy-select-picker/index.scss +102 -0
  243. package/components/oxy-select-picker/oxy-select-picker.vue +432 -0
  244. package/components/oxy-select-picker/types.ts +123 -0
  245. package/components/oxy-sidebar/index.scss +25 -0
  246. package/components/oxy-sidebar/oxy-sidebar.vue +63 -0
  247. package/components/oxy-sidebar/types.ts +38 -0
  248. package/components/oxy-sidebar-item/index.scss +97 -0
  249. package/components/oxy-sidebar-item/oxy-sidebar-item.vue +116 -0
  250. package/components/oxy-sidebar-item/types.ts +31 -0
  251. package/components/oxy-signature/index.scss +31 -0
  252. package/components/oxy-signature/oxy-signature.vue +630 -0
  253. package/components/oxy-signature/types.ts +108 -0
  254. package/components/oxy-skeleton/index.scss +96 -0
  255. package/components/oxy-skeleton/index.ts +1 -0
  256. package/components/oxy-skeleton/oxy-skeleton.vue +110 -0
  257. package/components/oxy-skeleton/types.ts +69 -0
  258. package/components/oxy-slider/index.scss +98 -0
  259. package/components/oxy-slider/oxy-slider.vue +356 -0
  260. package/components/oxy-slider/types.ts +138 -0
  261. package/components/oxy-sort-button/index.scss +89 -0
  262. package/components/oxy-sort-button/oxy-sort-button.vue +69 -0
  263. package/components/oxy-sort-button/types.ts +43 -0
  264. package/components/oxy-status-tip/images/collect.png +0 -0
  265. package/components/oxy-status-tip/images/content.png +0 -0
  266. package/components/oxy-status-tip/images/network.png +0 -0
  267. package/components/oxy-status-tip/images/search.png +0 -0
  268. package/components/oxy-status-tip/index.scss +37 -0
  269. package/components/oxy-status-tip/oxy-status-tip.vue +71 -0
  270. package/components/oxy-status-tip/types.ts +50 -0
  271. package/components/oxy-step/index.scss +235 -0
  272. package/components/oxy-step/oxy-step.vue +150 -0
  273. package/components/oxy-step/types.ts +33 -0
  274. package/components/oxy-steps/index.scss +10 -0
  275. package/components/oxy-steps/oxy-steps.vue +28 -0
  276. package/components/oxy-steps/types.ts +50 -0
  277. package/components/oxy-sticky/index.scss +9 -0
  278. package/components/oxy-sticky/oxy-sticky.vue +190 -0
  279. package/components/oxy-sticky/types.ts +13 -0
  280. package/components/oxy-sticky-box/index.scss +6 -0
  281. package/components/oxy-sticky-box/oxy-sticky-box.vue +155 -0
  282. package/components/oxy-sticky-box/types.ts +11 -0
  283. package/components/oxy-swipe-action/index.scss +22 -0
  284. package/components/oxy-swipe-action/oxy-swipe-action.vue +294 -0
  285. package/components/oxy-swipe-action/types.ts +40 -0
  286. package/components/oxy-swiper/index.scss +53 -0
  287. package/components/oxy-swiper/oxy-swiper.vue +318 -0
  288. package/components/oxy-swiper/types.ts +264 -0
  289. package/components/oxy-swiper-nav/index.scss +159 -0
  290. package/components/oxy-swiper-nav/oxy-swiper-nav.vue +37 -0
  291. package/components/oxy-swiper-nav/types.ts +42 -0
  292. package/components/oxy-switch/index.scss +58 -0
  293. package/components/oxy-switch/oxy-switch.vue +83 -0
  294. package/components/oxy-switch/types.ts +58 -0
  295. package/components/oxy-tab/index.scss +16 -0
  296. package/components/oxy-tab/oxy-tab.vue +88 -0
  297. package/components/oxy-tab/types.ts +30 -0
  298. package/components/oxy-tabbar/index.scss +62 -0
  299. package/components/oxy-tabbar/oxy-tabbar.vue +91 -0
  300. package/components/oxy-tabbar/types.ts +73 -0
  301. package/components/oxy-tabbar-item/index.scss +55 -0
  302. package/components/oxy-tabbar-item/oxy-tabbar-item.vue +99 -0
  303. package/components/oxy-tabbar-item/types.ts +51 -0
  304. package/components/oxy-table/index.scss +163 -0
  305. package/components/oxy-table/oxy-table.vue +283 -0
  306. package/components/oxy-table/types.ts +58 -0
  307. package/components/oxy-table-col/index.scss +46 -0
  308. package/components/oxy-table-col/oxy-table-col.vue +149 -0
  309. package/components/oxy-table-col/types.ts +54 -0
  310. package/components/oxy-tabs/index.scss +299 -0
  311. package/components/oxy-tabs/oxy-tabs.vue +443 -0
  312. package/components/oxy-tabs/types.ts +107 -0
  313. package/components/oxy-tag/index.scss +115 -0
  314. package/components/oxy-tag/oxy-tag.vue +148 -0
  315. package/components/oxy-tag/types.ts +81 -0
  316. package/components/oxy-text/index.scss +37 -0
  317. package/components/oxy-text/oxy-text.vue +139 -0
  318. package/components/oxy-text/types.ts +98 -0
  319. package/components/oxy-textarea/index.scss +340 -0
  320. package/components/oxy-textarea/oxy-textarea.vue +296 -0
  321. package/components/oxy-textarea/placeholder.scss +20 -0
  322. package/components/oxy-textarea/types.ts +288 -0
  323. package/components/oxy-toast/index.scss +75 -0
  324. package/components/oxy-toast/index.ts +92 -0
  325. package/components/oxy-toast/oxy-toast.vue +198 -0
  326. package/components/oxy-toast/types.ts +181 -0
  327. package/components/oxy-tooltip/index.scss +66 -0
  328. package/components/oxy-tooltip/oxy-tooltip.vue +141 -0
  329. package/components/oxy-tooltip/types.ts +107 -0
  330. package/components/oxy-transition/index.scss +95 -0
  331. package/components/oxy-transition/oxy-transition.vue +232 -0
  332. package/components/oxy-transition/types.ts +98 -0
  333. package/components/oxy-upload/index.scss +175 -0
  334. package/components/oxy-upload/oxy-upload.vue +673 -0
  335. package/components/oxy-upload/types.ts +391 -0
  336. package/components/oxy-video-preview/index.scss +34 -0
  337. package/components/oxy-video-preview/oxy-video-preview.vue +72 -0
  338. package/components/oxy-video-preview/types.ts +23 -0
  339. package/components/oxy-watermark/index.scss +18 -0
  340. package/components/oxy-watermark/oxy-watermark.vue +486 -0
  341. package/components/oxy-watermark/types.ts +76 -0
  342. package/dayjs/constant.js +26 -0
  343. package/dayjs/index.d.ts +430 -0
  344. package/dayjs/index.js +542 -0
  345. package/dayjs/locale/en.js +13 -0
  346. package/dayjs/utils.js +59 -0
  347. package/global.d.ts +101 -0
  348. package/index.ts +12 -0
  349. package/locale/index.ts +32 -0
  350. package/locale/lang/ar-SA.ts +133 -0
  351. package/locale/lang/en-US.ts +133 -0
  352. package/locale/lang/zh-CN.ts +137 -0
  353. package/package.json +1 -0
  354. package/tags.json +1 -0
  355. package/web-types.json +1 -0
@@ -0,0 +1,288 @@
1
+ import type { ExtractPropTypes, PropType } from 'vue'
2
+ import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props'
3
+ import type { FormItemRule } from '../oxy-form/types'
4
+ import type { InputClearTrigger, InputMode } from '../oxy-input/types'
5
+
6
+ export type ConfirmType = 'send' | 'search' | 'next' | 'go' | 'done'
7
+
8
+ export const textareaProps = {
9
+ ...baseProps,
10
+ /**
11
+ * * 自定义文本域容器class名称。
12
+ * 类型:string
13
+ */
14
+ customTextareaContainerClass: makeStringProp(''),
15
+
16
+ /**
17
+ * * 自定义文本域class名称。
18
+ * 类型:string
19
+ */
20
+ customTextareaClass: makeStringProp(''),
21
+
22
+ /**
23
+ * * 自定义标签class名称。
24
+ * 类型:string
25
+ */
26
+ customLabelClass: makeStringProp(''),
27
+ // 原生属性
28
+ /**
29
+ * * 绑定值。
30
+ * 类型:string | number
31
+ */
32
+ modelValue: makeNumericProp(''),
33
+
34
+ /**
35
+ * * 占位文本。
36
+ * 类型:string
37
+ * 默认值:'请输入...'
38
+ */
39
+ placeholder: String,
40
+
41
+ /**
42
+ * 指定placeholder的样式。
43
+ * 类型:string
44
+ */
45
+ placeholderStyle: String,
46
+
47
+ /**
48
+ * * 指定placeholder的样式类。
49
+ * 类型:string
50
+ * 默认值:空字符串
51
+ */
52
+ placeholderClass: makeStringProp(''),
53
+
54
+ /**
55
+ * * 禁用输入框。
56
+ * 类型:boolean
57
+ * 默认值:false
58
+ */
59
+ disabled: makeBooleanProp(false),
60
+
61
+ /**
62
+ * * 最大输入长度,设置为-1表示不限制最大长度。
63
+ * 类型:number
64
+ * 默认值:-1
65
+ */
66
+ maxlength: makeNumberProp(-1),
67
+
68
+ /**
69
+ * * 自动聚焦并拉起键盘。
70
+ * 类型:boolean
71
+ * 默认值:false
72
+ */
73
+ autoFocus: makeBooleanProp(false),
74
+
75
+ /**
76
+ * * 获取焦点。
77
+ * 类型:boolean
78
+ * 默认值:false
79
+ */
80
+ focus: makeBooleanProp(false),
81
+
82
+ /**
83
+ * * 是否自动增高输入框高度,style.height属性在auto-height生效时不生效。
84
+ * 类型:boolean
85
+ * 默认值:false
86
+ */
87
+ autoHeight: makeBooleanProp(false),
88
+
89
+ /**
90
+ * * 如果textarea处于position:fixed区域,需要设置此属性为true。
91
+ * 类型:boolean
92
+ * 默认值:false
93
+ */
94
+ fixed: makeBooleanProp(false),
95
+
96
+ /**
97
+ * * 指定光标与键盘的距离,取textarea距离底部的距离和cursor-spacing指定的距离的最小值作为实际距离。
98
+ * 类型:number
99
+ * 默认值:0
100
+ */
101
+ cursorSpacing: makeNumberProp(0),
102
+
103
+ /**
104
+ * * 指定focus时的光标位置。
105
+ * 类型:number
106
+ * 默认值:-1
107
+ */
108
+ cursor: makeNumberProp(-1),
109
+
110
+ /**
111
+ * * 设置键盘右下角按钮的文字。
112
+ * 类型:string
113
+ * 默认值:'done'
114
+ * 可选值有'done', 'go', 'next', 'search', 'send'
115
+ */
116
+ confirmType: String as PropType<ConfirmType>,
117
+
118
+ /**
119
+ * * 点击键盘右下角按钮时是否保持键盘不收起。
120
+ * 类型:boolean
121
+ * 默认值:false
122
+ */
123
+ confirmHold: makeBooleanProp(false),
124
+
125
+ /**
126
+ * * 是否显示键盘上方带有“完成”按钮那一栏。
127
+ * 类型:boolean
128
+ * 默认值:true
129
+ */
130
+ showConfirmBar: makeBooleanProp(true),
131
+
132
+ /**
133
+ * * 光标起始位置,自动聚集时有效,需与selection-end搭配使用。
134
+ * 类型:number
135
+ * 默认值:-1
136
+ */
137
+ selectionStart: makeNumberProp(-1),
138
+
139
+ /**
140
+ * * 光标结束位置,自动聚集时有效,需与selection-start搭配使用。
141
+ * 类型:number
142
+ * 默认值:-1
143
+ */
144
+ selectionEnd: makeNumberProp(-1),
145
+
146
+ /**
147
+ * * 键盘弹起时是否自动上推页面。
148
+ * 类型:boolean
149
+ * 默认值:true
150
+ */
151
+ adjustPosition: makeBooleanProp(true),
152
+
153
+ /**
154
+ * * 是否去掉iOS下的默认内边距。
155
+ * 类型:boolean
156
+ * 默认值:false
157
+ */
158
+ disableDefaultPadding: makeBooleanProp(false),
159
+
160
+ /**
161
+ * * focus状态下点击页面时是否不收起键盘。
162
+ * 类型:boolean
163
+ * 默认值:false
164
+ */
165
+ holdKeyboard: makeBooleanProp(false),
166
+
167
+ // 非原生属性
168
+ /**
169
+ * * 显示为密码框。
170
+ * 类型:boolean
171
+ * 默认值:false
172
+ */
173
+ showPassword: makeBooleanProp(false),
174
+
175
+ /**
176
+ * * 是否显示清空按钮。
177
+ * 类型:boolean
178
+ * 默认值:false
179
+ */
180
+ clearable: makeBooleanProp(false),
181
+
182
+ /**
183
+ * * 输入框只读状态。
184
+ * 类型:boolean
185
+ * 默认值:false
186
+ */
187
+ readonly: makeBooleanProp(false),
188
+
189
+ /**
190
+ * * 前置图标,icon组件中的图标类名。
191
+ * 类型:string
192
+ */
193
+ prefixIcon: String,
194
+ /**
195
+ * * 是否显示字数限制,需要同时设置maxlength。
196
+ * 类型:boolean
197
+ * 默认值:false
198
+ */
199
+ showWordLimit: makeBooleanProp(false),
200
+ /**
201
+ * 设置左侧标题。
202
+ * 类型:string
203
+ */
204
+ label: String,
205
+
206
+ /**
207
+ * 设置左侧标题宽度。
208
+ * 类型:string
209
+ */
210
+ labelWidth: makeStringProp(''),
211
+ /**
212
+ * * 设置输入框大小。
213
+ * 类型:string
214
+ */
215
+ size: String,
216
+
217
+ /**
218
+ * * 设置输入框错误状态(红色)。
219
+ * 类型:boolean
220
+ * 默认值:false
221
+ */
222
+ error: makeBooleanProp(false),
223
+
224
+ /**
225
+ * * 当存在label属性时,设置标题和输入框垂直居中,默认为顶部居中。
226
+ * 类型:boolean
227
+ * 默认值:false
228
+ */
229
+ center: makeBooleanProp(false),
230
+
231
+ /**
232
+ * * 非cell类型下是否隐藏下划线。
233
+ * 类型:boolean
234
+ * 默认值:false
235
+ */
236
+ noBorder: makeBooleanProp(false),
237
+
238
+ /**
239
+ * * cell类型下必填样式。
240
+ * 类型:boolean
241
+ * 默认值:false
242
+ */
243
+ required: makeBooleanProp(false),
244
+
245
+ /**
246
+ * * 表单域model字段名,在使用表单校验功能的情况下,该属性是必填的。
247
+ * 类型:string
248
+ */
249
+ prop: makeStringProp(''),
250
+
251
+ /**
252
+ * * 表单验证规则。
253
+ * 类型:FormItemRule[]
254
+ * 默认值:[]
255
+ */
256
+ rules: makeArrayProp<FormItemRule>(),
257
+ /**
258
+ * 显示清除图标的时机,always 表示输入框不为空时展示,focus 表示输入框聚焦且不为空时展示
259
+ * 类型: "focus" | "always"
260
+ * 默认值: "always"
261
+ */
262
+ clearTrigger: makeStringProp<InputClearTrigger>('always'),
263
+ /**
264
+ * 是否在点击清除按钮时聚焦输入框
265
+ * 类型: boolean
266
+ * 默认值: true
267
+ */
268
+ focusWhenClear: makeBooleanProp(true),
269
+ /**
270
+ * 是否忽略组件内对文本合成系统事件的处理。为 false 时将触发 compositionstart、compositionend、compositionupdate 事件,且在文本合成期间会触发 input 事件
271
+ * 类型: boolean
272
+ * 默认值: true
273
+ */
274
+ ignoreCompositionEvent: makeBooleanProp(true),
275
+ /**
276
+ * 它提供了用户在编辑元素或其内容时可能输入的数据类型的提示。在符合条件的高版本webview里,uni-app的web和app-vue平台中可使用本属性。
277
+ * 类型: InputMode
278
+ * 可选值: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | "password"
279
+ * 默认值: "text"
280
+ */
281
+ inputmode: makeStringProp<InputMode>('text'),
282
+ /**
283
+ * 必填标记位置,可选值:before(标签前)、after(标签后)
284
+ */
285
+ markerSide: makeStringProp<'before' | 'after'>('before')
286
+ }
287
+
288
+ export type TextareaProps = ExtractPropTypes<typeof textareaProps>
@@ -0,0 +1,75 @@
1
+ @import "./../common/abstracts/_mixin.scss";
2
+ @import "./../common/abstracts/variable.scss";
3
+
4
+ @include b(toast) {
5
+ display: inline-block;
6
+ max-width: $-toast-max-width;
7
+ padding: $-toast-padding;
8
+ background-color: $-toast-bg;
9
+ border-radius: $-toast-radius;
10
+ color: $-toast-color;
11
+ transition: all 0.2s;
12
+ font-size: $-toast-fs;
13
+ box-sizing: border-box;
14
+ box-shadow: $-toast-box-shadow;
15
+
16
+ @include when(vertical) {
17
+ flex-direction: column;
18
+ }
19
+
20
+ @include e(msg) {
21
+ font-size: $-toast-fs;
22
+ word-break: break-all;
23
+ line-height: $-toast-line-height;
24
+ text-align: left;
25
+ font-family: "San Francisco", Rotobo, arial, "PingFang SC", "Noto SansCJK", "Microsoft Yahei", sans-serif;
26
+ }
27
+ @include edeep(icon) {
28
+ display: inline-block;
29
+ margin-right: $-toast-icon-margin-right;
30
+ font-size: $-toast-icon-size;
31
+
32
+ @include when(vertical) {
33
+ margin-right: 0;
34
+ margin-bottom: $-toast-icon-margin-bottom;
35
+ }
36
+ }
37
+ @include e(iconWrap){
38
+ font-size: 0;
39
+ line-height: 0;
40
+ vertical-align: middle;
41
+ }
42
+ @include e(iconBox){
43
+ display: block;
44
+ width: 100%;
45
+ height: 100%;
46
+ }
47
+ @include e(iconSvg){
48
+ width: $-toast-icon-size;
49
+ height: $-toast-icon-size;
50
+ background-size: cover;
51
+ background-repeat: no-repeat;
52
+ }
53
+ @include e(loading) {
54
+ margin-bottom: $-toast-loading-margin-bottom;
55
+ display: inline-block;
56
+ }
57
+ @include m(top) {
58
+ transform: translate3d(0, -40vh, 0);
59
+ }
60
+ @include m(middle-top){
61
+ transform: translate3d(0%,-18.8vh,0);
62
+ }
63
+ @include m(bottom) {
64
+ transform: translate3d(0, 40vh, 0);
65
+ }
66
+ @include m(with-icon) {
67
+ min-width: $-toast-with-icon-min-width;
68
+ display: inline-flex;
69
+ align-items: center;
70
+ }
71
+ @include m(loading) {
72
+ min-width: auto;
73
+ padding: $-toast-loading-padding;
74
+ }
75
+ }
@@ -0,0 +1,92 @@
1
+ import { inject, provide, ref } from 'vue'
2
+ import type { Toast, ToastOptions } from './types'
3
+ import { deepMerge } from '../common/util'
4
+
5
+ /**
6
+ * useToast 用到的key
7
+ */
8
+ const toastDefaultOptionKey = '__TOAST_OPTION__'
9
+
10
+ // 默认模板
11
+ export const defaultOptions: ToastOptions = {
12
+ duration: 2000,
13
+ show: false
14
+ }
15
+
16
+ const None = Symbol('None')
17
+
18
+ export function useToast(selector: string = ''): Toast {
19
+ const toastOptionKey = getToastOptionKey(selector)
20
+ const toastOption = inject(toastOptionKey, ref<ToastOptions | typeof None>(None)) // toast选项
21
+ if (toastOption.value === None) {
22
+ toastOption.value = defaultOptions
23
+ provide(toastOptionKey, toastOption)
24
+ }
25
+ let timer: ReturnType<typeof setTimeout> | null = null
26
+
27
+ const createMethod = (toastOptions: ToastOptions) => {
28
+ return (options: ToastOptions | string) => {
29
+ return show(deepMerge(toastOptions, typeof options === 'string' ? { msg: options } : options) as ToastOptions)
30
+ }
31
+ }
32
+
33
+ const show = (option: ToastOptions | string) => {
34
+ const options = deepMerge(defaultOptions, typeof option === 'string' ? { msg: option } : option) as ToastOptions
35
+ toastOption.value = deepMerge(options, {
36
+ show: true
37
+ }) as ToastOptions
38
+ // 开始渲染,并在 duration ms之后执行清除
39
+ timer && clearTimeout(timer)
40
+ if (toastOption.value.duration && toastOption.value.duration > 0) {
41
+ timer = setTimeout(() => {
42
+ timer && clearTimeout(timer)
43
+ close()
44
+ }, options.duration)
45
+ }
46
+ }
47
+
48
+ const loading = createMethod({
49
+ iconName: 'loading',
50
+ duration: 0,
51
+ cover: true
52
+ })
53
+ const success = createMethod({
54
+ iconName: 'success',
55
+ duration: 1500
56
+ })
57
+ const error = createMethod({ iconName: 'error' })
58
+ const warning = createMethod({ iconName: 'warning' })
59
+ const info = createMethod({ iconName: 'info' })
60
+
61
+ const close = () => {
62
+ toastOption.value = { show: false }
63
+ }
64
+ return {
65
+ show,
66
+ loading,
67
+ success,
68
+ error,
69
+ warning,
70
+ info,
71
+ close
72
+ }
73
+ }
74
+
75
+ export const getToastOptionKey = (selector: string) => {
76
+ return selector ? `${toastDefaultOptionKey}${selector}` : toastDefaultOptionKey
77
+ }
78
+
79
+ export const toastIcon = {
80
+ success() {
81
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="2 2 44 44" width="48" height="48"><circle cx="24" cy="26" r="22" fill="#000" opacity=".1"/><circle cx="24" cy="24" r="20" fill="#34D19D" opacity=".4"/><circle cx="24" cy="24" r="16" fill="#34D19D"/><path d="M19 24l4 4 8-8" stroke="#FFF" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>'
82
+ },
83
+ warning() {
84
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="2 2 44 44" width="48" height="48"><circle cx="24" cy="26" r="22" fill="#000" opacity=".1"/><circle cx="24" cy="24" r="20" fill="#F0883A" opacity=".4"/><circle cx="24" cy="24" r="16" fill="#F0883A"/><rect x="22.5" y="14" width="3" height="12" fill="#FFF" rx="1.5"/><circle cx="24" cy="30" r="2" fill="#FFF"/></svg>'
85
+ },
86
+ info() {
87
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="2 2 44 44" width="48" height="48"><circle cx="24" cy="26" r="22" fill="#000" opacity=".1"/><circle cx="24" cy="24" r="20" fill="#909CB7" opacity=".4"/><circle cx="24" cy="24" r="16" fill="#909CB7"/><circle cx="24" cy="18" r="2" fill="#FFF"/><rect x="22.5" y="22" width="3" height="12" fill="#FFF" rx="1.5"/></svg>'
88
+ },
89
+ error() {
90
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="2 2 44 44" width="48" height="48"><circle cx="24" cy="26" r="22" fill="#000" opacity=".1"/><circle cx="24" cy="24" r="20" fill="#fa4350" opacity=".4"/><circle cx="24" cy="24" r="16" fill="#fa4350"/><path d="M18 18l12 12M30 18L18 30" stroke="#FFF" stroke-width="2.5" stroke-linecap="round"/></svg>'
91
+ }
92
+ }
@@ -0,0 +1,198 @@
1
+ <template>
2
+ <oxy-overlay
3
+ v-if="cover"
4
+ :z-index="zIndex"
5
+ lock-scroll
6
+ :show="show"
7
+ custom-style="background-color: transparent;pointer-events: auto;"
8
+ ></oxy-overlay>
9
+ <oxy-transition name="fade" :show="show" :custom-style="transitionStyle" @after-enter="handleAfterEnter" @after-leave="handleAfterLeave">
10
+ <view :class="rootClass">
11
+ <!--iconName优先级更高-->
12
+ <oxy-loading
13
+ v-if="iconName === 'loading'"
14
+ :type="loadingType"
15
+ :color="loadingColor"
16
+ :size="loadingSize"
17
+ :custom-class="`oxy-toast__icon ${direction === 'vertical' ? 'is-vertical' : ''}`"
18
+ />
19
+ <view
20
+ :class="`oxy-toast__iconWrap oxy-toast__icon ${direction === 'vertical' ? 'is-vertical' : ''}`"
21
+ v-else-if="iconName === 'success' || iconName === 'warning' || iconName === 'info' || iconName === 'error'"
22
+ >
23
+ <view class="oxy-toast__iconBox">
24
+ <view class="oxy-toast__iconSvg" :style="svgStyle"></view>
25
+ </view>
26
+ </view>
27
+ <oxy-icon
28
+ v-else-if="iconClass"
29
+ :custom-class="`oxy-toast__icon ${direction === 'vertical' ? 'is-vertical' : ''}`"
30
+ :size="iconSize"
31
+ :class-prefix="classPrefix"
32
+ :name="iconClass"
33
+ ></oxy-icon>
34
+ <!--文本-->
35
+ <view v-if="msg" class="oxy-toast__msg">{{ msg }}</view>
36
+ </view>
37
+ </oxy-transition>
38
+ </template>
39
+
40
+ <script lang="ts">
41
+ export default {
42
+ name: 'oxy-toast',
43
+ options: {
44
+ addGlobalClass: true,
45
+ virtualHost: true,
46
+ styleIsolation: 'shared'
47
+ }
48
+ }
49
+ </script>
50
+
51
+ <script lang="ts" setup>
52
+ import OxyIcon from '../oxy-icon/oxy-icon.vue'
53
+ import OxyLoading from '../oxy-loading/oxy-loading.vue'
54
+ import OxyOverlay from '../oxy-overlay/oxy-overlay.vue'
55
+ import OxyTransition from '../oxy-transition/oxy-transition.vue'
56
+
57
+ import { computed, inject, onBeforeMount, ref, watch, type CSSProperties } from 'vue'
58
+ import base64 from '../common/base64'
59
+ import { defaultOptions, getToastOptionKey, toastIcon } from '.'
60
+ import { toastProps, type ToastDirection, type ToastLoadingType, type ToastOptions, type ToastProps } from './types'
61
+ import { addUnit, isDef, isFunction, objToStyle } from '../common/util'
62
+
63
+ const props = defineProps(toastProps)
64
+ const iconName = ref<string>('') // 图标类型
65
+ const msg = ref<string>('') // 消息内容
66
+ const position = ref<string>('middle')
67
+ const show = ref<boolean>(false)
68
+ const zIndex = ref<number>(100)
69
+ const loadingType = ref<ToastLoadingType>('outline')
70
+ const loadingColor = ref<string>('#4D80F0')
71
+ const iconSize = ref<string>() // 图标大小
72
+ const loadingSize = ref<string>() // loading大小
73
+ const svgStr = ref<string>('') // 图标
74
+ const cover = ref<boolean>(false) // 是否存在遮罩层
75
+ const classPrefix = ref<string>('oxy-icon') // 图标前缀
76
+ const iconClass = ref<string>('') // 图标类名
77
+ const direction = ref<ToastDirection>('horizontal') // toast布局方向
78
+
79
+ let opened: (() => void) | null = null
80
+
81
+ let closed: (() => void) | null = null
82
+
83
+ const toastOptionKey = getToastOptionKey(props.selector)
84
+ const toastOption = inject(toastOptionKey, ref<ToastOptions>(defaultOptions)) // toast选项
85
+
86
+ // 监听options变化展示
87
+ watch(
88
+ () => toastOption.value,
89
+ (newVal: ToastOptions) => {
90
+ reset(newVal)
91
+ },
92
+ {
93
+ deep: true,
94
+ immediate: true
95
+ }
96
+ )
97
+
98
+ // 监听options变化展示
99
+ watch(
100
+ () => iconName.value,
101
+ () => {
102
+ buildSvg()
103
+ },
104
+ {
105
+ deep: true,
106
+ immediate: true
107
+ }
108
+ )
109
+
110
+ /**
111
+ * 动画自定义样式
112
+ */
113
+ const transitionStyle = computed(() => {
114
+ const style: CSSProperties = {
115
+ 'z-index': zIndex.value,
116
+ position: 'fixed',
117
+ top: '50%',
118
+ left: 0,
119
+ width: '100%',
120
+ transform: 'translate(0, -50%)',
121
+ 'text-align': 'center',
122
+ 'pointer-events': 'none'
123
+ }
124
+ return objToStyle(style)
125
+ })
126
+
127
+ const rootClass = computed(() => {
128
+ return `oxy-toast ${props.customClass} oxy-toast--${position.value} ${
129
+ (iconName.value !== 'loading' || msg.value) && (iconName.value || iconClass.value) ? 'oxy-toast--with-icon' : ''
130
+ } ${iconName.value === 'loading' && !msg.value ? 'oxy-toast--loading' : ''} ${direction.value === 'vertical' ? 'is-vertical' : ''}`
131
+ })
132
+
133
+ const svgStyle = computed(() => {
134
+ const style: CSSProperties = {
135
+ backgroundImage: `url(${svgStr.value})`
136
+ }
137
+ if (isDef(iconSize.value)) {
138
+ style.width = iconSize.value
139
+ style.height = iconSize.value
140
+ }
141
+ return objToStyle(style)
142
+ })
143
+
144
+ onBeforeMount(() => {
145
+ buildSvg()
146
+ })
147
+
148
+ function handleAfterEnter() {
149
+ if (isFunction(opened)) {
150
+ opened()
151
+ }
152
+ }
153
+
154
+ function handleAfterLeave() {
155
+ if (isFunction(closed)) {
156
+ closed()
157
+ }
158
+ }
159
+
160
+ function buildSvg() {
161
+ if (iconName.value !== 'success' && iconName.value !== 'warning' && iconName.value !== 'info' && iconName.value !== 'error') return
162
+ const iconSvg = toastIcon[iconName.value]()
163
+ const iconSvgStr = `"data:image/svg+xml;base64,${base64(iconSvg)}"`
164
+ svgStr.value = iconSvgStr
165
+ }
166
+
167
+ /**
168
+ * 重置toast选项值
169
+ * @param option toast选项值
170
+ */
171
+ function reset(option: ToastOptions) {
172
+ show.value = isDef(option.show) ? option.show : false
173
+
174
+ if (show.value) {
175
+ mergeOptionsWithProps(option, props)
176
+ }
177
+ }
178
+
179
+ function mergeOptionsWithProps(option: ToastOptions, props: ToastProps) {
180
+ iconName.value = isDef(option.iconName!) ? option.iconName! : props.iconName
181
+ iconClass.value = isDef(option.iconClass!) ? option.iconClass! : props.iconClass
182
+ msg.value = isDef(option.msg!) ? option.msg! : props.msg
183
+ position.value = isDef(option.position!) ? option.position! : props.position
184
+ zIndex.value = isDef(option.zIndex!) ? option.zIndex! : props.zIndex
185
+ loadingType.value = isDef(option.loadingType!) ? option.loadingType! : props.loadingType
186
+ loadingColor.value = isDef(option.loadingColor!) ? option.loadingColor! : props.loadingColor
187
+ iconSize.value = isDef(option.iconSize) ? addUnit(option.iconSize) : isDef(props.iconSize) ? addUnit(props.iconSize) : undefined
188
+ loadingSize.value = isDef(option.loadingSize) ? addUnit(option.loadingSize) : isDef(props.loadingSize) ? addUnit(props.loadingSize) : undefined
189
+ cover.value = isDef(option.cover!) ? option.cover! : props.cover
190
+ classPrefix.value = isDef(option.classPrefix) ? option.classPrefix : props.classPrefix
191
+ direction.value = isDef(option.direction) ? option.direction : props.direction
192
+ closed = isFunction(option.closed) ? option.closed : isFunction(props.closed) ? props.closed : null
193
+ opened = isFunction(option.opened) ? option.opened : isFunction(props.opened) ? props.opened : null
194
+ }
195
+ </script>
196
+ <style lang="scss" scoped>
197
+ @import './index.scss';
198
+ </style>