oxy-uni-ui 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/attributes.json +1 -1
  2. package/components/common/abstracts/variable.scss +396 -321
  3. package/components/common/path.ts +9 -0
  4. package/components/common/util.ts +200 -5
  5. package/components/composables/index.ts +1 -0
  6. package/components/composables/useGlobalLoading.ts +42 -0
  7. package/components/composables/useGlobalMessage.ts +48 -0
  8. package/components/composables/useGlobalToast.ts +84 -0
  9. package/components/composables/usePopover.ts +24 -20
  10. package/components/composables/useVirtualScroll.ts +13 -11
  11. package/components/composables/useWindowResize.ts +35 -0
  12. package/components/oxy-action-sheet/index.scss +24 -11
  13. package/components/oxy-action-sheet/oxy-action-sheet.vue +27 -19
  14. package/components/oxy-action-sheet/types.ts +7 -0
  15. package/components/oxy-backtop/index.scss +3 -3
  16. package/components/oxy-backtop/oxy-backtop.vue +9 -6
  17. package/components/oxy-backtop/types.ts +7 -7
  18. package/components/oxy-badge/index.scss +4 -4
  19. package/components/oxy-badge/oxy-badge.vue +3 -3
  20. package/components/oxy-badge/types.ts +2 -2
  21. package/components/oxy-button/index.scss +5 -5
  22. package/components/oxy-button/oxy-button.vue +5 -1
  23. package/components/oxy-calendar/index.scss +11 -11
  24. package/components/oxy-calendar/oxy-calendar.vue +1 -0
  25. package/components/oxy-calendar/types.ts +5 -0
  26. package/components/oxy-calendar-view/month/index.scss +4 -4
  27. package/components/oxy-calendar-view/month/types.ts +36 -0
  28. package/components/oxy-calendar-view/monthPanel/index.scss +7 -7
  29. package/components/oxy-calendar-view/monthPanel/month-panel.vue +14 -8
  30. package/components/oxy-calendar-view/year/index.scss +4 -4
  31. package/components/oxy-calendar-view/yearPanel/index.scss +4 -4
  32. package/components/oxy-calendar-view/yearPanel/year-panel.vue +21 -5
  33. package/components/oxy-card/index.scss +2 -2
  34. package/components/oxy-cell/index.scss +8 -8
  35. package/components/oxy-cell/oxy-cell.vue +15 -2
  36. package/components/oxy-cell/types.ts +4 -0
  37. package/components/oxy-checkbox/index.scss +8 -8
  38. package/components/oxy-checkbox/oxy-checkbox.vue +2 -2
  39. package/components/oxy-checkbox-group/index.scss +2 -2
  40. package/components/oxy-circle/oxy-circle.vue +10 -7
  41. package/components/oxy-circle/types.ts +5 -5
  42. package/components/oxy-col/oxy-col.vue +2 -2
  43. package/components/oxy-col-picker/index.scss +4 -4
  44. package/components/oxy-col-picker/oxy-col-picker.vue +9 -5
  45. package/components/oxy-col-picker/types.ts +12 -3
  46. package/components/oxy-collapse/index.scss +2 -2
  47. package/components/oxy-collapse-item/oxy-collapse-item.vue +3 -3
  48. package/components/oxy-corner/index.scss +32 -32
  49. package/components/oxy-corner/oxy-corner.vue +15 -3
  50. package/components/oxy-corner/types.ts +15 -1
  51. package/components/oxy-count-to/oxy-count-to.vue +3 -3
  52. package/components/oxy-curtain/index.scss +15 -15
  53. package/components/oxy-curtain/oxy-curtain.vue +4 -2
  54. package/components/oxy-curtain/types.ts +6 -1
  55. package/components/oxy-date-strip/index.scss +10 -0
  56. package/components/oxy-date-strip/oxy-date-strip.vue +198 -0
  57. package/components/oxy-date-strip/types.ts +98 -0
  58. package/components/oxy-date-strip/utils.ts +67 -0
  59. package/components/oxy-date-strip-item/index.scss +94 -0
  60. package/components/oxy-date-strip-item/oxy-date-strip-item.vue +102 -0
  61. package/components/oxy-date-strip-item/types.ts +53 -0
  62. package/components/oxy-datetime-picker/index.scss +11 -11
  63. package/components/oxy-datetime-picker/oxy-datetime-picker.vue +4 -1
  64. package/components/oxy-datetime-picker/types.ts +10 -1
  65. package/components/oxy-drop-menu/index.scss +3 -3
  66. package/components/oxy-drop-menu/oxy-drop-menu.vue +3 -3
  67. package/components/oxy-drop-menu-item/index.scss +1 -1
  68. package/components/oxy-drop-menu-item/oxy-drop-menu-item.vue +4 -3
  69. package/components/oxy-drop-menu-item/types.ts +5 -0
  70. package/components/oxy-echarts/index.scss +17 -0
  71. package/components/oxy-echarts/index.ts +1 -0
  72. package/components/oxy-echarts/oxy-echarts.vue +32 -0
  73. package/components/oxy-echarts/types.ts +18 -0
  74. package/components/oxy-fab/index.scss +8 -8
  75. package/components/oxy-fab/oxy-fab.vue +22 -3
  76. package/components/oxy-file-list/index.scss +42 -15
  77. package/components/oxy-file-list/oxy-file-list.vue +208 -34
  78. package/components/oxy-file-list/types.ts +58 -2
  79. package/components/oxy-floating-panel/oxy-floating-panel.vue +13 -9
  80. package/components/oxy-floating-panel/{type.ts → types.ts} +8 -8
  81. package/components/oxy-footer/index.scss +19 -0
  82. package/components/oxy-footer/oxy-footer.vue +78 -0
  83. package/components/oxy-footer/types.ts +17 -0
  84. package/components/oxy-form-item/types.ts +22 -1
  85. package/components/oxy-gap/oxy-gap.vue +2 -2
  86. package/components/oxy-gap/types.ts +2 -2
  87. package/components/oxy-global-loading/oxy-global-loading.vue +53 -0
  88. package/components/oxy-global-message/oxy-global-message.vue +64 -0
  89. package/components/oxy-global-toast/oxy-global-toast.vue +53 -0
  90. package/components/oxy-grid/oxy-grid.vue +1 -1
  91. package/components/oxy-grid/types.ts +1 -1
  92. package/components/oxy-grid-item/index.scss +1 -1
  93. package/components/oxy-grid-item/oxy-grid-item.vue +7 -5
  94. package/components/oxy-grid-item/types.ts +1 -1
  95. package/components/oxy-guidance/index.scss +75 -0
  96. package/components/oxy-guidance/oxy-guidance.vue +201 -0
  97. package/components/oxy-guidance/types.ts +33 -0
  98. package/components/oxy-icon/oxy-icon.vue +2 -2
  99. package/components/oxy-icon/types.ts +1 -1
  100. package/components/oxy-img/oxy-img.vue +4 -4
  101. package/components/oxy-img/types.ts +3 -3
  102. package/components/oxy-img-cropper/index.scss +12 -12
  103. package/components/oxy-img-cropper/oxy-img-cropper.vue +97 -52
  104. package/components/oxy-img-cropper/types.ts +2 -2
  105. package/components/oxy-img-lazy/index.scss +17 -0
  106. package/components/oxy-img-lazy/oxy-img-lazy.vue +332 -0
  107. package/components/oxy-img-lazy/types.ts +69 -0
  108. package/components/oxy-index-anchor/index.scss +2 -2
  109. package/components/oxy-index-anchor/oxy-index-anchor.vue +2 -2
  110. package/components/oxy-index-anchor/{type.ts → types.ts} +3 -0
  111. package/components/oxy-index-bar/index.scss +3 -3
  112. package/components/oxy-index-bar/oxy-index-bar.vue +3 -3
  113. package/components/oxy-index-bar/{type.ts → types.ts} +2 -2
  114. package/components/oxy-input/index.scss +1 -1
  115. package/components/oxy-input-number/index.scss +5 -5
  116. package/components/oxy-input-number/oxy-input-number.vue +2 -2
  117. package/components/oxy-input-number/types.ts +3 -2
  118. package/components/oxy-keyboard/index.scss +5 -5
  119. package/components/oxy-keyboard/key/index.scss +3 -3
  120. package/components/oxy-keyboard/key/index.vue +2 -2
  121. package/components/oxy-keyboard/key/types.ts +15 -0
  122. package/components/oxy-keyboard/oxy-keyboard.vue +1 -0
  123. package/components/oxy-keyboard/types.ts +5 -0
  124. package/components/oxy-link/index.scss +57 -0
  125. package/components/oxy-link/oxy-link.vue +130 -0
  126. package/components/oxy-link/types.ts +81 -0
  127. package/components/oxy-list/index.scss +7 -1
  128. package/components/oxy-list/oxy-list.vue +4 -3
  129. package/components/oxy-list/types.ts +1 -1
  130. package/components/oxy-loading/oxy-loading.vue +8 -4
  131. package/components/oxy-loading/types.ts +1 -1
  132. package/components/oxy-loadmore/index.scss +3 -3
  133. package/components/oxy-long-press-menu/index.scss +93 -0
  134. package/components/oxy-long-press-menu/oxy-long-press-menu.vue +338 -0
  135. package/components/oxy-long-press-menu/types.ts +34 -0
  136. package/components/oxy-message-box/index.scss +12 -11
  137. package/components/oxy-message-box/oxy-message-box.vue +11 -3
  138. package/components/oxy-message-box/types.ts +14 -0
  139. package/components/oxy-navbar/index.scss +2 -2
  140. package/components/oxy-navbar/oxy-navbar.vue +58 -13
  141. package/components/oxy-navbar/types.ts +8 -1
  142. package/components/oxy-navbar-capsule/types.ts +3 -0
  143. package/components/oxy-notice-bar/index.scss +3 -3
  144. package/components/oxy-notice-bar/oxy-notice-bar.vue +9 -5
  145. package/components/oxy-notice-bar/types.ts +3 -3
  146. package/components/oxy-notify/index.ts +1 -0
  147. package/components/oxy-notify/oxy-notify.vue +3 -2
  148. package/components/oxy-notify/types.ts +7 -0
  149. package/components/oxy-pagination/index.scss +1 -1
  150. package/components/oxy-password-input/oxy-password-input.vue +2 -2
  151. package/components/oxy-password-input/types.ts +1 -1
  152. package/components/oxy-picker/index.scss +45 -2
  153. package/components/oxy-picker/oxy-picker.vue +103 -14
  154. package/components/oxy-picker/types.ts +33 -1
  155. package/components/oxy-picker-view/index.scss +3 -3
  156. package/components/oxy-picker-view/oxy-picker-view.vue +4 -4
  157. package/components/oxy-popover/index.scss +9 -9
  158. package/components/oxy-popup/index.scss +2 -2
  159. package/components/oxy-popup/oxy-popup.vue +35 -2
  160. package/components/oxy-popup/types.ts +8 -1
  161. package/components/oxy-progress/index.scss +3 -3
  162. package/components/oxy-qrcode/draw.ts +398 -0
  163. package/components/oxy-qrcode/index.scss +2 -0
  164. package/components/oxy-qrcode/oxy-qrcode.vue +124 -0
  165. package/components/oxy-qrcode/qrcode.ts +936 -0
  166. package/components/oxy-qrcode/types.ts +42 -0
  167. package/components/oxy-radio/index.scss +13 -13
  168. package/components/oxy-radio/oxy-radio.vue +1 -1
  169. package/components/oxy-radio-group/index.scss +2 -2
  170. package/components/oxy-rate/types.ts +4 -4
  171. package/components/oxy-resize/index.scss +2 -2
  172. package/components/oxy-resize/oxy-resize.vue +4 -4
  173. package/components/oxy-resize/types.ts +3 -0
  174. package/components/oxy-rich-text/icon/emjio.svg +1 -0
  175. package/components/oxy-rich-text/icon/quote.svg +1 -0
  176. package/components/oxy-rich-text/icon/text.svg +1 -0
  177. package/components/oxy-rich-text/icon/title.svg +1 -0
  178. package/components/oxy-rich-text/index.scss +160 -0
  179. package/components/oxy-rich-text/mp-html/card/card.vue +122 -0
  180. package/components/oxy-rich-text/mp-html/card/index.js +7 -0
  181. package/components/oxy-rich-text/mp-html/editable/config.js +15 -0
  182. package/components/oxy-rich-text/mp-html/editable/index.js +553 -0
  183. package/components/oxy-rich-text/mp-html/emoji/index.js +203 -0
  184. package/components/oxy-rich-text/mp-html/highlight/config.js +5 -0
  185. package/components/oxy-rich-text/mp-html/highlight/index.js +96 -0
  186. package/components/oxy-rich-text/mp-html/highlight/prism.css +1 -0
  187. package/components/oxy-rich-text/mp-html/highlight/prism.min.js +7 -0
  188. package/components/oxy-rich-text/mp-html/img-cache/index.js +138 -0
  189. package/components/oxy-rich-text/mp-html/latex/index.js +80 -0
  190. package/components/oxy-rich-text/mp-html/latex/katex.css +1 -0
  191. package/components/oxy-rich-text/mp-html/latex/katex.min.js +1 -0
  192. package/components/oxy-rich-text/mp-html/markdown/index.js +50 -0
  193. package/components/oxy-rich-text/mp-html/markdown/marked.min.js +71 -0
  194. package/components/oxy-rich-text/mp-html/mp-html.d.ts +184 -0
  195. package/components/oxy-rich-text/mp-html/mp-html.vue +684 -0
  196. package/components/oxy-rich-text/mp-html/node/node.vue +1172 -0
  197. package/components/oxy-rich-text/mp-html/parser.js +1428 -0
  198. package/components/oxy-rich-text/mp-html/search/index.js +132 -0
  199. package/components/oxy-rich-text/mp-html/style/index.js +129 -0
  200. package/components/oxy-rich-text/mp-html/style/parser.js +175 -0
  201. package/components/oxy-rich-text/mp-html/template/index.js +67 -0
  202. package/components/oxy-rich-text/mp-html/txv-video/index.js +46 -0
  203. package/components/oxy-rich-text/oxy-rich-text.vue +642 -0
  204. package/components/oxy-rich-text/types.ts +76 -0
  205. package/components/oxy-row/oxy-row.vue +3 -3
  206. package/components/oxy-row/types.ts +1 -1
  207. package/components/oxy-search/index.scss +3 -3
  208. package/components/oxy-segmented/index.scss +16 -16
  209. package/components/oxy-segmented/oxy-segmented.vue +23 -3
  210. package/components/oxy-select/index.scss +331 -0
  211. package/components/oxy-select/oxy-select.vue +456 -0
  212. package/components/oxy-select/types.ts +83 -0
  213. package/components/oxy-select-picker/index.scss +7 -7
  214. package/components/oxy-select-picker/oxy-select-picker.vue +4 -0
  215. package/components/oxy-select-picker/types.ts +7 -1
  216. package/components/oxy-sidebar-item/index.scss +1 -1
  217. package/components/oxy-signature/oxy-signature.vue +18 -10
  218. package/components/oxy-signature/types.ts +106 -13
  219. package/components/oxy-skeleton/oxy-skeleton.vue +6 -6
  220. package/components/oxy-skeleton/types.ts +1 -1
  221. package/components/oxy-slider/index.scss +3 -3
  222. package/components/oxy-sort-button/index.scss +8 -8
  223. package/components/oxy-status-tip/index.scss +4 -4
  224. package/components/oxy-status-tip/oxy-status-tip.vue +5 -5
  225. package/components/oxy-status-tip/types.ts +3 -3
  226. package/components/oxy-step/index.scss +14 -14
  227. package/components/oxy-sticky/oxy-sticky.vue +6 -6
  228. package/components/oxy-stream-render/index.scss +6 -0
  229. package/components/oxy-stream-render/oxy-stream-render.vue +204 -0
  230. package/components/oxy-stream-render/types.ts +8 -0
  231. package/components/oxy-swipe-action/oxy-swipe-action.vue +27 -2
  232. package/components/oxy-swiper/oxy-swiper.vue +6 -6
  233. package/components/oxy-swiper/types.ts +5 -5
  234. package/components/oxy-switch/index.scss +8 -8
  235. package/components/oxy-switch/oxy-switch.vue +2 -2
  236. package/components/oxy-switch/types.ts +1 -1
  237. package/components/oxy-tab/index.scss +11 -1
  238. package/components/oxy-tabbar/index.scss +1 -1
  239. package/components/oxy-tabbar/oxy-tabbar.vue +39 -10
  240. package/components/oxy-table/index.scss +5 -5
  241. package/components/oxy-table/oxy-table.vue +8 -6
  242. package/components/oxy-table/types.ts +2 -2
  243. package/components/oxy-table-col/oxy-table-col.vue +3 -3
  244. package/components/oxy-table-col/types.ts +2 -2
  245. package/components/oxy-tabs/index.scss +43 -15
  246. package/components/oxy-tabs/oxy-tabs.vue +53 -19
  247. package/components/oxy-tabs/types.ts +15 -3
  248. package/components/oxy-tag/index.scss +15 -15
  249. package/components/oxy-text/index.scss +5 -1
  250. package/components/oxy-text/oxy-text.vue +76 -7
  251. package/components/oxy-text/types.ts +12 -0
  252. package/components/oxy-textarea/index.scss +6 -6
  253. package/components/oxy-toast/oxy-toast.vue +24 -8
  254. package/components/oxy-tooltip/index.scss +9 -9
  255. package/components/oxy-tree/index.scss +61 -9
  256. package/components/oxy-tree/oxy-tree.vue +102 -17
  257. package/components/oxy-tree/types.ts +23 -10
  258. package/components/oxy-upload/index.scss +21 -21
  259. package/components/oxy-upload/types.ts +2 -2
  260. package/components/oxy-verification-code/index.scss +6 -0
  261. package/components/oxy-verification-code/oxy-verification-code.vue +187 -0
  262. package/components/oxy-verification-code/types.ts +82 -0
  263. package/components/oxy-video-preview/index.scss +4 -4
  264. package/components/oxy-virtual-scroll/index.scss +4 -4
  265. package/components/oxy-virtual-scroll/oxy-virtual-scroll.vue +11 -7
  266. package/components/oxy-virtual-scroll/types.ts +14 -14
  267. package/components/oxy-voice-player/index.scss +908 -0
  268. package/components/oxy-voice-player/oxy-voice-player.vue +821 -0
  269. package/components/oxy-voice-player/types.ts +567 -0
  270. package/components/oxy-waterfall/index.scss +18 -0
  271. package/components/oxy-waterfall/oxy-waterfall.vue +218 -0
  272. package/components/oxy-waterfall/types.ts +90 -0
  273. package/components/oxy-waterfall-item/index.scss +8 -0
  274. package/components/oxy-waterfall-item/oxy-waterfall-item.vue +89 -0
  275. package/components/oxy-waterfall-item/types.ts +16 -0
  276. package/components/oxy-watermark/oxy-watermark.vue +35 -13
  277. package/components/oxy-watermark/types.ts +14 -14
  278. package/global.d.ts +9 -0
  279. package/index.ts +3 -0
  280. package/locale/lang/ar-SA.ts +3 -0
  281. package/locale/lang/en-US.ts +29 -0
  282. package/locale/lang/zh-CN.ts +29 -0
  283. package/package.json +97 -1
  284. package/tags.json +1 -1
  285. package/uni-echarts/changelog.md +2 -0
  286. package/uni-echarts/components/index.js +1 -0
  287. package/uni-echarts/components/uni-echarts/events.js +95 -0
  288. package/uni-echarts/components/uni-echarts/types.d.ts +183 -0
  289. package/uni-echarts/components/uni-echarts/types.js +1 -0
  290. package/uni-echarts/components/uni-echarts/uni-echarts.vue +530 -0
  291. package/uni-echarts/components/uni-echarts/uni-echarts.vue.d.ts +19 -0
  292. package/uni-echarts/global.d.ts +7 -0
  293. package/uni-echarts/index.d.ts +440 -0
  294. package/uni-echarts/index.js +2 -0
  295. package/uni-echarts/package.json +105 -0
  296. package/uni-echarts/shared-core.d.ts +269 -0
  297. package/uni-echarts/shared-core.js +900 -0
  298. package/web-types.json +1 -1
  299. package/components/oxy-number-keyboard/index.scss +0 -78
  300. package/components/oxy-number-keyboard/key/index.scss +0 -81
  301. package/components/oxy-number-keyboard/key/index.vue +0 -78
  302. package/components/oxy-number-keyboard/key/types.ts +0 -11
  303. package/components/oxy-number-keyboard/oxy-number-keyboard.vue +0 -151
  304. package/components/oxy-number-keyboard/types.ts +0 -83
  305. package/components/oxy-tree/components/tree-node-content.vue +0 -72
  306. package/components/oxy-tree/index.ts +0 -51
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <!-- #ifdef H5 || APP-PLUS -->
3
+ <view class="oxy-stream-render" :change:stream-request="appStreamHandler.handleStreamRequest" :stream-request="streamRequest" />
4
+ <!-- #endif -->
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'oxy-stream-render',
10
+ props: {
11
+ streamRequest: {
12
+ type: Object,
13
+ default: () => ({})
14
+ }
15
+ },
16
+ options: {
17
+ addGlobalClass: true,
18
+ virtualHost: true,
19
+ styleIsolation: 'shared'
20
+ },
21
+ data() {
22
+ return {
23
+ requestTask: null
24
+ }
25
+ },
26
+ watch: {
27
+ streamRequest: {
28
+ handler(newVal) {
29
+ // #ifndef H5 || APP-PLUS
30
+ this.handleStreamRequest(newVal)
31
+ // #endif
32
+ },
33
+ deep: true
34
+ }
35
+ },
36
+ methods: {
37
+ handleAppStreamData({ chunk, finished }) {
38
+ this.$emit('stream-data', { chunk, finished })
39
+ },
40
+ handleAppStreamError({ message, type }) {
41
+ this.$emit('stream-error', { message, type })
42
+ },
43
+ // #ifndef H5 || APP-PLUS
44
+ handleStreamRequest(newVal) {
45
+ if (newVal && newVal.cancel) {
46
+ if (this.requestTask) {
47
+ this.requestTask.abort()
48
+ this.requestTask = null
49
+ }
50
+ this.handleAppStreamData({
51
+ chunk: null,
52
+ finished: true
53
+ })
54
+ return
55
+ }
56
+
57
+ if (!newVal || !newVal.url) {
58
+ return
59
+ }
60
+
61
+ if (this.requestTask) {
62
+ this.requestTask.abort()
63
+ this.requestTask = null
64
+ }
65
+
66
+ const { url, method, headers, body } = newVal
67
+
68
+ this.requestTask = uni.request({
69
+ url,
70
+ method: method || 'GET',
71
+ header: headers || {},
72
+ data: body,
73
+ enableChunked: true,
74
+ success: (res) => {
75
+ this.handleAppStreamData({
76
+ chunk: null,
77
+ finished: true
78
+ })
79
+ this.requestTask = null
80
+ },
81
+ fail: (err) => {
82
+ this.handleAppStreamError({
83
+ message: err.errMsg || 'Request failed',
84
+ type: err.errMsg === 'request:fail abort' ? 'AbortError' : 'Error'
85
+ })
86
+ this.requestTask = null
87
+ }
88
+ })
89
+ // 这里监听消息
90
+ this.requestTask.onChunkReceived((res) => {
91
+ let decoder = new TextDecoder('utf-8')
92
+ let chunk = decoder.decode(new Uint8Array(res.data))
93
+ this.handleAppStreamData({
94
+ chunk,
95
+ finished: false
96
+ })
97
+ })
98
+ }
99
+ // #endif
100
+ }
101
+ }
102
+ </script>
103
+
104
+ <script module="appStreamHandler" lang="renderjs">
105
+ // #ifdef H5 || APP-PLUS
106
+ module.exports = {
107
+ data() {
108
+ return {
109
+ abortController: null,
110
+ }
111
+ },
112
+ methods: {
113
+ handleStreamRequest(newVal, _oldVal, _ownerInstance) {
114
+ if (newVal && newVal.cancel) {
115
+ if (this.abortController) {
116
+ this.abortController.abort()
117
+ this.abortController = null
118
+ }
119
+ this.$ownerInstance.callMethod('handleAppStreamData', {
120
+ chunk: null,
121
+ finished: true,
122
+ })
123
+ return
124
+ }
125
+
126
+ if (!newVal || !newVal.url) {
127
+ return
128
+ }
129
+
130
+ if (this.abortController) {
131
+ this.abortController.abort()
132
+ this.abortController = null
133
+ }
134
+
135
+ this.abortController = new AbortController()
136
+
137
+ const { url, method, headers, body } = newVal
138
+
139
+ fetch(url, {
140
+ method,
141
+ headers,
142
+ body,
143
+ signal: this.abortController.signal,
144
+ })
145
+ .then((response) => {
146
+ if (!response.ok) {
147
+ throw new Error(`HTTP error! status: ${response.status}`)
148
+ }
149
+
150
+ if (!response.body || !response.body.getReader) {
151
+ throw new Error('ReadableStream not supported')
152
+ }
153
+ const reader = response.body.getReader()
154
+ const decoder = new TextDecoder()
155
+
156
+ const readStream = async () => {
157
+ try {
158
+ const { done, value } = await reader.read()
159
+
160
+ if (done) {
161
+ this.abortController = null
162
+ this.$ownerInstance.callMethod('handleAppStreamData', {
163
+ chunk: null,
164
+ finished: true,
165
+ })
166
+ return
167
+ }
168
+
169
+ const chunk = decoder.decode(value, { stream: true })
170
+
171
+ this.$ownerInstance.callMethod('handleAppStreamData', {
172
+ chunk,
173
+ finished: false,
174
+ })
175
+
176
+ return readStream()
177
+ }
178
+ catch (error) {
179
+ this.abortController = null
180
+ this.$ownerInstance.callMethod('handleAppStreamError', {
181
+ message: error.message,
182
+ type:error.name
183
+ })
184
+ }
185
+ }
186
+
187
+ return readStream()
188
+ })
189
+ .catch((error) => {
190
+ this.abortController = null
191
+ this.$ownerInstance.callMethod('handleAppStreamError', {
192
+ message: error.message,
193
+ type:error.name
194
+ })
195
+ })
196
+ },
197
+ },
198
+ }
199
+ // #endif
200
+ </script>
201
+
202
+ <style lang="scss" scoped>
203
+ @import './index.scss';
204
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { ExtractPropTypes } from 'vue'
2
+
3
+ /**
4
+ * 流式渲染组件属性
5
+ */
6
+ export const streamRenderProps = {}
7
+
8
+ export type StreamRenderProps = ExtractPropTypes<typeof streamRenderProps>
@@ -39,7 +39,7 @@ import { getCurrentInstance, inject, onBeforeMount, onBeforeUnmount, onMounted,
39
39
  import { closeOther, pushToQueue, removeFromQueue } from '../common/clickoutside'
40
40
  import { type Queue, queueKey } from '../composables/useQueue'
41
41
  import { useTouch } from '../composables/useTouch'
42
- import { getRect } from '../common/util'
42
+ import { getRect, unitConvert } from '../common/util'
43
43
  import { swipeActionProps, type SwipeActionPosition, type SwipeActionReason, type SwipeActionStatus } from './types'
44
44
 
45
45
  const props = defineProps(swipeActionProps)
@@ -55,6 +55,10 @@ const originOffset = ref<number>(0)
55
55
  const wrapperOffset = ref<number>(0)
56
56
  // 是否处于滑动状态
57
57
  const touching = ref<boolean>(false)
58
+ // 标记本次触摸周期是否发生过横向滑动,用于抑制触摸后的合成 click
59
+ const swiping = ref<boolean>(false)
60
+ // 拖拽计算版本号,避免异步获取宽度结果乱序导致位移回退
61
+ const dragVersion = ref<number>(0)
58
62
 
59
63
  const touch = useTouch()
60
64
 
@@ -139,7 +143,7 @@ function getWidths() {
139
143
  */
140
144
  function swipeMove(offset = 0) {
141
145
  // this.offset = offset
142
- const transform = `translate3d(${offset}px, 0, 0)`
146
+ const transform = `translate3d(${unitConvert(offset, 0, { output: 'px' })}, 0, 0)`
143
147
  // 跟随手指滑动,不需要动画
144
148
  const transition = touching.value ? 'none' : '.6s cubic-bezier(0.18, 0.89, 0.32, 1)'
145
149
  wrapperStyle.value = `
@@ -156,6 +160,11 @@ function swipeMove(offset = 0) {
156
160
  * @param event
157
161
  */
158
162
  function onClick(position?: SwipeActionPosition) {
163
+ if (swiping.value) {
164
+ swiping.value = false
165
+ return
166
+ }
167
+
159
168
  if (props.disabled || wrapperOffset.value === 0) {
160
169
  return
161
170
  }
@@ -172,6 +181,8 @@ function onClick(position?: SwipeActionPosition) {
172
181
  function startDrag(event: TouchEvent) {
173
182
  if (props.disabled) return
174
183
 
184
+ dragVersion.value += 1
185
+ swiping.value = false
175
186
  originOffset.value = wrapperOffset.value
176
187
  touch.touchStart(event)
177
188
  if (queue && queue.closeOther) {
@@ -196,10 +207,17 @@ function onDrag(event: TouchEvent) {
196
207
  }
197
208
 
198
209
  touching.value = true
210
+ swiping.value = true
211
+ const currentDragVersion = ++dragVersion.value
199
212
 
200
213
  // 本次滑动,wrapper应该设置的偏移量
201
214
  const offset = originOffset.value + touch.deltaX.value
202
215
  getWidths().then(([leftWidth, rightWidth]) => {
216
+ // 忽略过期的拖拽帧,避免异步返回顺序打乱造成回弹
217
+ if (!touching.value || currentDragVersion !== dragVersion.value) {
218
+ return
219
+ }
220
+
203
221
  // 如果需要想滑出来的按钮不存在,对应的按钮肯定滑不出来,容器处于初始状态。此时需要模拟一下位于此处的start事件。
204
222
  if ((leftWidth === 0 && offset > 0) || (rightWidth === 0 && offset < 0)) {
205
223
  swipeMove(0)
@@ -224,6 +242,7 @@ function endDrag() {
224
242
  // 滑出"操作按钮"的阈值
225
243
  const THRESHOLD = 0.3
226
244
  touching.value = false
245
+ dragVersion.value += 1
227
246
 
228
247
  getWidths().then(([leftWidth, rightWidth]) => {
229
248
  if (
@@ -261,6 +280,12 @@ function endDrag() {
261
280
  close('swipe')
262
281
  }
263
282
  })
283
+
284
+ if (swiping.value) {
285
+ setTimeout(() => {
286
+ swiping.value = false
287
+ }, 0)
288
+ }
264
289
  }
265
290
  /**
266
291
  * @description 关闭操过按钮,并在合适的时候调用 beforeClose
@@ -14,11 +14,11 @@
14
14
  :circular="loop"
15
15
  :vertical="direction == 'vertical'"
16
16
  :easing-function="easingFunction"
17
- :previous-margin="addUnit(previousMargin)"
18
- :next-margin="addUnit(nextMargin)"
17
+ :previous-margin="withDefaultUnit(previousMargin)"
18
+ :next-margin="withDefaultUnit(nextMargin)"
19
19
  :snap-to-edge="snapToEdge"
20
20
  :display-multiple-items="displayMultipleItems"
21
- :style="{ height: addUnit(height) }"
21
+ :style="{ height: withDefaultUnit(height) }"
22
22
  @change="handleChange"
23
23
  @animationfinish="handleAnimationfinish"
24
24
  >
@@ -27,7 +27,7 @@
27
27
  <video
28
28
  v-if="isVideo(item)"
29
29
  :id="`video-${index}-${uid}`"
30
- :style="{ height: addUnit(height) }"
30
+ :style="{ height: withDefaultUnit(height) }"
31
31
  :src="isObj(item) ? item[valueKey] : item"
32
32
  :poster="isObj(item) ? item.poster : ''"
33
33
  :class="`oxy-swiper__video ${customItemClass} ${getCustomItemClass(currentValue, index, list)}`"
@@ -44,7 +44,7 @@
44
44
  v-else
45
45
  :src="isObj(item) ? item[valueKey] : item"
46
46
  :class="`oxy-swiper__image ${customImageClass} ${customItemClass} ${getCustomItemClass(currentValue, index, list)}`"
47
- :style="{ height: addUnit(height) }"
47
+ :style="{ height: withDefaultUnit(height) }"
48
48
  :mode="imageMode"
49
49
  @click="handleClick(index, item)"
50
50
  />
@@ -89,7 +89,7 @@ export default {
89
89
  <script lang="ts" setup>
90
90
  import OxySwiperNav from '../oxy-swiper-nav/oxy-swiper-nav.vue'
91
91
  import { computed, watch, ref, getCurrentInstance, useSlots } from 'vue'
92
- import { addUnit, isObj, isImageUrl, isVideoUrl, uuid, isDef } from '../common/util'
92
+ import { withDefaultUnit, isObj, isImageUrl, isVideoUrl, uuid, isDef } from '../common/util'
93
93
  import { swiperProps, type SwiperList } from './types'
94
94
  import type { SwiperNavProps } from '../oxy-swiper-nav/types'
95
95
  const slots = useSlots()
@@ -86,10 +86,10 @@ export const swiperProps = {
86
86
 
87
87
  /**
88
88
  * 轮播的高度
89
- * 类型:number 或 string(数字或可转换为数字的字符串)
90
- * 默认值:'192'
89
+ * 类型:number 或 string(数字或纯数字字符串默认按 rpx 处理)
90
+ * 默认值:'384'
91
91
  */
92
- height: makeNumericProp('192'),
92
+ height: makeNumericProp('384'),
93
93
 
94
94
  /**
95
95
  * 轮播间隔时间,单位为毫秒
@@ -131,7 +131,7 @@ export const swiperProps = {
131
131
 
132
132
  /**
133
133
  * 后边距
134
- * 类型:number 或 string(数字或可转换为数字的字符串)
134
+ * 类型:number 或 string(数字或纯数字字符串默认按 rpx 处理)
135
135
  * 默认值:'0'
136
136
  */
137
137
  nextMargin: makeNumericProp('0'),
@@ -144,7 +144,7 @@ export const swiperProps = {
144
144
  indicatorPosition: makeStringProp<IndicatorPositionType>('bottom'),
145
145
  /**
146
146
  * 前边距
147
- * 类型:number 或 string(数字或可转换为数字的字符串)
147
+ * 类型:number 或 string(数字或纯数字字符串默认按 rpx 处理)
148
148
  * 默认值:'0'
149
149
  */
150
150
  previousMargin: makeNumericProp('0'),
@@ -24,22 +24,22 @@
24
24
  display: inline-block;
25
25
  width: $-switch-circle-size;
26
26
  height: $-switch-circle-size;
27
- top: 2px;
28
- left: 2px;
27
+ top: 4rpx;
28
+ left: 4rpx;
29
29
  background: #fff;
30
30
  border-radius: 50%;
31
31
  transition: left .3s ease-out;
32
- box-shadow: 0 2px 4px 0 $-switch-inactive-shadow-color;
32
+ box-shadow: 0 4rpx 8rpx 0 $-switch-inactive-shadow-color;
33
33
 
34
34
  &::after {
35
35
  position: absolute;
36
36
  content: '';
37
- width: calc(200% - 2px);
38
- height: calc(200% - 2px);
37
+ width: calc(200% - 4rpx);
38
+ height: calc(200% - 4rpx);
39
39
  top: 50%;
40
40
  left: 50%;
41
41
  transform: translate(-50%, -50%) scale(0.5);
42
- border: 1px solid $-switch-border-color;
42
+ border: 2rpx solid $-switch-border-color;
43
43
  border-radius: 50%;
44
44
  }
45
45
  }
@@ -48,8 +48,8 @@
48
48
  border-color: $-switch-active-color;
49
49
 
50
50
  .oxy-switch__circle {
51
- left: calc($-switch-width - $-switch-circle-size - 2px);
52
- box-shadow: 0 2px 4px 0 $-switch-active-shadow-color
51
+ left: calc($-switch-width - $-switch-circle-size - 4rpx);
52
+ box-shadow: 0 4rpx 8rpx 0 $-switch-active-shadow-color
53
53
  }
54
54
  }
55
55
  @include when(disabled) {
@@ -16,7 +16,7 @@ export default {
16
16
 
17
17
  <script lang="ts" setup>
18
18
  import { computed, type CSSProperties, onBeforeMount } from 'vue'
19
- import { addUnit, isFunction, objToStyle } from '../common/util'
19
+ import { withDefaultUnit, isFunction, objToStyle } from '../common/util'
20
20
  import { switchProps } from './types'
21
21
 
22
22
  const props = defineProps(switchProps)
@@ -32,7 +32,7 @@ const rootStyle = computed(() => {
32
32
  'border-color': props.modelValue === props.activeValue ? props.activeColor : props.inactiveColor
33
33
  }
34
34
  if (props.size) {
35
- rootStyle['font-size'] = addUnit(props.size)
35
+ rootStyle['font-size'] = withDefaultUnit(props.size)
36
36
  }
37
37
  return `${objToStyle(rootStyle)}${props.customStyle}`
38
38
  })
@@ -45,7 +45,7 @@ export const switchProps = {
45
45
  */
46
46
  inactiveColor: String,
47
47
  /**
48
- * 大小
48
+ * 大小,number 类型按 `rpx` 语义处理
49
49
  */
50
50
  size: {
51
51
  type: numericProp
@@ -13,4 +13,14 @@
13
13
  transition: height 0.3s ease-in-out;
14
14
  }
15
15
  }
16
- }
16
+ }
17
+
18
+ .is-fullscreen {
19
+ .oxy-tab {
20
+ height: 100%;
21
+ overflow: hidden;
22
+ .oxy-tab__body {
23
+ height: 100%;
24
+ }
25
+ }
26
+ }
@@ -24,7 +24,7 @@
24
24
  @include m(round) {
25
25
  margin-left: 32rpx;
26
26
  margin-right: 32rpx;
27
- border-radius: 999px;
27
+ border-radius: 999rpx;
28
28
  box-shadow: $-tabbar-box-shadow;
29
29
 
30
30
  @include when(fixed) {
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <view :class="{ 'oxy-tabbar__placeholder': fixed && placeholder && safeAreaInsetBottom && shape === 'round' }" :style="{ height: addUnit(height) }">
2
+ <view :class="{ 'oxy-tabbar__placeholder': fixed && placeholder && safeAreaInsetBottom && shape === 'round' }" :style="placeholderStyle">
3
3
  <view
4
4
  :class="`oxy-tabbar oxy-tabbar--${shape} ${customClass} ${fixed ? 'is-fixed' : ''} ${safeAreaInsetBottom ? 'is-safe' : ''} ${
5
5
  bordered ? 'is-border' : ''
@@ -23,14 +23,15 @@ export default {
23
23
  <script lang="ts" setup>
24
24
  import { getCurrentInstance, onMounted, ref, watch, nextTick, computed, type CSSProperties } from 'vue'
25
25
  import type { TabbarItem } from '../oxy-tabbar-item/types'
26
- import { addUnit, getRect, isDef, objToStyle } from '../common/util'
26
+ import { getRect, isDef, objToStyle } from '../common/util'
27
27
  import { useChildren } from '../composables/useChildren'
28
+ import { useWindowResize } from '../composables/useWindowResize'
28
29
  import { TABBAR_KEY, tabbarProps } from './types'
29
30
 
30
31
  const props = defineProps(tabbarProps)
31
32
  const emit = defineEmits(['change', 'update:modelValue'])
32
33
 
33
- const height = ref<number | string>('') // 占位高度
34
+ const placeholderHeight = ref<number | string>('') // 占位高度(rpx 语义)
34
35
  const { proxy } = getCurrentInstance() as any
35
36
 
36
37
  const { linkChildren } = useChildren(TABBAR_KEY)
@@ -48,19 +49,26 @@ const rootStyle = computed(() => {
48
49
  return `${objToStyle(style)}${props.customStyle}`
49
50
  })
50
51
 
52
+ const placeholderStyle = computed(() => {
53
+ if (!props.fixed || !props.placeholder) {
54
+ return {}
55
+ }
56
+ return {
57
+ height: `${Number(placeholderHeight.value) || 0}rpx`
58
+ }
59
+ })
60
+
51
61
  watch(
52
- [() => props.fixed, () => props.placeholder],
62
+ [() => props.fixed, () => props.placeholder, () => props.safeAreaInsetBottom, () => props.shape, () => props.customStyle],
53
63
  () => {
54
64
  setPlaceholderHeight()
55
65
  },
56
- { deep: true, immediate: false }
66
+ { immediate: false }
57
67
  )
58
68
 
59
69
  onMounted(() => {
60
70
  if (props.fixed && props.placeholder) {
61
- nextTick(() => {
62
- setPlaceholderHeight()
63
- })
71
+ setPlaceholderHeight()
64
72
  }
65
73
  })
66
74
 
@@ -76,13 +84,34 @@ function setChange(child: TabbarItem) {
76
84
  })
77
85
  }
78
86
 
87
+ function handleWindowResize() {
88
+ if (props.fixed && props.placeholder) {
89
+ setPlaceholderHeight()
90
+ }
91
+ }
92
+
93
+ useWindowResize(handleWindowResize)
94
+
79
95
  function setPlaceholderHeight() {
80
96
  if (!props.fixed || !props.placeholder) {
97
+ placeholderHeight.value = ''
81
98
  return
82
99
  }
83
100
 
84
- getRect('.oxy-tabbar', false, proxy).then((res) => {
85
- height.value = Number(res.height)
101
+ nextTick(() => {
102
+ getRect('.oxy-tabbar', false, proxy)
103
+ .then((res) => {
104
+ const rectHeight = Number(res.height) || 0
105
+ const rectTop = Number(res.top)
106
+ const { windowHeight = 0, windowWidth = 0 } = uni.getSystemInfoSync()
107
+ const occupiedHeight = windowHeight && !Number.isNaN(rectTop) ? Math.max(windowHeight - rectTop, 0) : rectHeight
108
+ const occupiedHeightInRpx = windowWidth ? (occupiedHeight * 750) / windowWidth : occupiedHeight * 2
109
+
110
+ placeholderHeight.value = occupiedHeight ? occupiedHeightInRpx : ''
111
+ })
112
+ .catch(() => {
113
+ placeholderHeight.value = ''
114
+ })
86
115
  })
87
116
  }
88
117
  </script>
@@ -55,7 +55,7 @@
55
55
 
56
56
  @include e(header) {
57
57
  width: 100%;
58
- height: 50px;
58
+ height: 100rpx;
59
59
  position: sticky;
60
60
  top: 0;
61
61
  z-index: 2;
@@ -84,12 +84,12 @@
84
84
  align-items: center;
85
85
  box-sizing: border-box;
86
86
  background: $-table-bg;
87
- width: 100px;
88
- min-height: 50px;
89
- padding: 8px 10px;
87
+ width: 200rpx;
88
+ min-height: 100rpx;
89
+ padding: 16rpx 20rpx;
90
90
  font-size: $-table-font-size;
91
91
  color: $-table-color;
92
- --oxy-sort-button-height: 30px;
92
+ --oxy-sort-button-height: 60rpx;
93
93
 
94
94
  @include when(border) {
95
95
  border-right: 1px solid $-table-border-color;
@@ -122,7 +122,7 @@ export default {
122
122
  import OxyTableCol from '../oxy-table-col/oxy-table-col.vue'
123
123
  import OxySortButton from '../oxy-sort-button/oxy-sort-button.vue'
124
124
  import { type CSSProperties, computed, reactive, ref } from 'vue'
125
- import { addUnit, debounce, isDef, isObj, objToStyle, uuid } from '../common/util'
125
+ import { withDefaultUnit, debounce, isDef, isObj, objToStyle, uuid } from '../common/util'
126
126
  import type { SortDirection, TableColumn, TableColumnInstance, TableColumnProps } from '../oxy-table-col/types'
127
127
  import { TABLE_KEY, tableProps, type TableProvide } from './types'
128
128
  import { useTranslate } from '../composables/useTranslate'
@@ -160,7 +160,7 @@ const scroll = debounce(handleScroll, 100, { leading: false }) // 滚动事件
160
160
  const tableStyle = computed(() => {
161
161
  const style: CSSProperties = {}
162
162
  if (isDef(props.height)) {
163
- style['max-height'] = addUnit(props.height)
163
+ style['max-height'] = withDefaultUnit(props.height)
164
164
  }
165
165
  return `${objToStyle(style)}${props.customStyle}`
166
166
  })
@@ -171,7 +171,7 @@ const realWidthStyle = computed(() => {
171
171
  }
172
172
  let width: string | number = ''
173
173
  children.forEach((child) => {
174
- width = width ? `${width} + ${addUnit(child.width)}` : addUnit(child.width)
174
+ width = width ? `${width} + ${withDefaultUnit(child.width)}` : withDefaultUnit(child.width)
175
175
  })
176
176
  style['width'] = `calc(${width})`
177
177
  return objToStyle(style)
@@ -180,7 +180,9 @@ const realWidthStyle = computed(() => {
180
180
  const bodyStyle = computed(() => {
181
181
  const style: CSSProperties = {}
182
182
  if (isDef(props.height)) {
183
- style['height'] = isDef(props.rowHeight) ? `calc(${props.data.length} * ${addUnit(props.rowHeight)})` : `calc(${props.data.length} * 50px)`
183
+ style['height'] = isDef(props.rowHeight)
184
+ ? `calc(${props.data.length} * ${withDefaultUnit(props.rowHeight)})`
185
+ : `calc(${props.data.length} * 100rpx)`
184
186
  }
185
187
  return `${objToStyle(style)}`
186
188
  })
@@ -208,7 +210,7 @@ function getIsLastFixed(column: { fixed: boolean; prop: string }) {
208
210
  function getCellStyle(columnIndex: number) {
209
211
  let style: CSSProperties = {}
210
212
  if (isDef(children[columnIndex].width)) {
211
- style['width'] = addUnit(children[columnIndex].width)
213
+ style['width'] = withDefaultUnit(children[columnIndex].width)
212
214
  }
213
215
  if (children[columnIndex].fixed) {
214
216
  style = getFixedStyle(columnIndex, style)
@@ -225,7 +227,7 @@ function getFixedStyle(columnIndex: number, style: CSSProperties) {
225
227
  let left: string | number = ''
226
228
  children.forEach((column, index) => {
227
229
  if (index < columnIndex) {
228
- left = left ? `${left} + ${addUnit(column.width)}` : addUnit(column.width)
230
+ left = left ? `${left} + ${withDefaultUnit(column.width)}` : withDefaultUnit(column.width)
229
231
  }
230
232
  })
231
233
  style['left'] = `calc(${left})`
@@ -22,9 +22,9 @@ export const tableProps = {
22
22
  */
23
23
  height: numericProp,
24
24
  /**
25
- * 行高
25
+ * 行高,number 类型按 `rpx` 语义处理
26
26
  */
27
- rowHeight: makeNumericProp(50),
27
+ rowHeight: makeNumericProp(100),
28
28
  /**
29
29
  * 是否显示表头
30
30
  */
@@ -28,7 +28,7 @@ export default {
28
28
  </script>
29
29
  <script lang="ts" setup>
30
30
  import { type CSSProperties, computed, ref } from 'vue'
31
- import { addUnit, isDef, objToStyle, isOdd, isFunction } from '../common/util'
31
+ import { withDefaultUnit, isDef, objToStyle, isOdd, isFunction } from '../common/util'
32
32
  import { tableColumnProps, type SortDirection } from './types'
33
33
  import { useParent } from '../composables/useParent'
34
34
  import { TABLE_KEY } from '../oxy-table/types'
@@ -87,7 +87,7 @@ const isLastFixed = computed(() => {
87
87
  const columnStyle = computed(() => {
88
88
  let style: CSSProperties = {}
89
89
  if (isDef(props.width)) {
90
- style['width'] = addUnit(props.width)
90
+ style['width'] = withDefaultUnit(props.width)
91
91
  }
92
92
  if (props.fixed && isDef(table) && isFunction(table.getFixedStyle)) {
93
93
  style = table.getFixedStyle(columnIndex.value, style)
@@ -102,7 +102,7 @@ const cellStyle = computed(() => {
102
102
  let style: CSSProperties = {}
103
103
  const rowHeight: string | number = isDef(table) && isDef(table.props) ? table.props.rowHeight : 50 // 自定义行高
104
104
  if (isDef(rowHeight)) {
105
- style['height'] = addUnit(rowHeight)
105
+ style['height'] = withDefaultUnit(rowHeight)
106
106
  }
107
107
  if (props.fixed && isDef(table) && isFunction(table.getFixedStyle)) {
108
108
  style = table.getFixedStyle(columnIndex.value, style)