From f6e6ae8c9d22e64dfcf3bb9be3e3e50934f22cd8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=86=E4=BA=9A=E7=8B=AE?= <2696699791@qq.com>
Date: Mon, 7 Apr 2025 09:50:02 +0800
Subject: [PATCH] -
---
.gitignore | 1 -
uni_modules/mp-html/README.md | 193 +++
uni_modules/mp-html/changelog.md | 129 ++
.../mp-html/components/mp-html/mp-html.vue | 498 ++++++
.../mp-html/components/mp-html/node/node.vue | 576 +++++++
.../mp-html/components/mp-html/parser.js | 1335 ++++++++++++++++
uni_modules/mp-html/package.json | 76 +
.../static/app-plus/mp-html/js/handler.js | 1 +
.../app-plus/mp-html/js/uni.webview.min.js | 1 +
.../static/app-plus/mp-html/local.html | 1 +
uni_modules/uni-card/changelog.md | 26 +
.../uni-card/components/uni-card/uni-card.vue | 270 ++++
uni_modules/uni-card/package.json | 90 ++
uni_modules/uni-card/readme.md | 12 +
uni_modules/uview-ui/LICENSE | 21 +
uni_modules/uview-ui/README.md | 106 ++
uni_modules/uview-ui/changelog.md | 357 +++++
.../uview-ui/components/u--form/u--form.vue | 78 +
.../uview-ui/components/u--image/u--image.vue | 47 +
.../uview-ui/components/u--input/u--input.vue | 73 +
.../uview-ui/components/u--text/u--text.vue | 44 +
.../components/u--textarea/u--textarea.vue | 48 +
.../components/u-action-sheet/props.js | 54 +
.../u-action-sheet/u-action-sheet.vue | 190 +++
.../uview-ui/components/u-album/props.js | 59 +
.../uview-ui/components/u-album/u-album.vue | 259 ++++
.../components/u-alert-tips/u-alert-tips.vue | 256 ++++
.../uview-ui/components/u-alert/props.js | 44 +
.../uview-ui/components/u-alert/u-alert.vue | 243 +++
.../u-avatar-cropper/u-avatar-cropper.vue | 290 ++++
.../components/u-avatar-cropper/weCropper.js | 1265 +++++++++++++++
.../components/u-avatar-group/props.js | 52 +
.../u-avatar-group/u-avatar-group.vue | 103 ++
.../uview-ui/components/u-avatar/props.js | 78 +
.../uview-ui/components/u-avatar/u-avatar.vue | 244 +++
.../uview-ui/components/u-back-top/props.js | 54 +
.../components/u-back-top/u-back-top.vue | 153 ++
.../uview-ui/components/u-badge/props.js | 72 +
.../uview-ui/components/u-badge/u-badge.vue | 216 +++
.../uview-ui/components/u-button/nvue.scss | 46 +
.../uview-ui/components/u-button/props.js | 161 ++
.../uview-ui/components/u-button/u-button.vue | 596 ++++++++
.../uview-ui/components/u-button/vue.scss | 80 +
.../uview-ui/components/u-calendar/header.vue | 99 ++
.../uview-ui/components/u-calendar/month.vue | 579 +++++++
.../uview-ui/components/u-calendar/props.js | 144 ++
.../components/u-calendar/u-calendar.vue | 643 ++++++++
.../uview-ui/components/u-calendar/util.js | 85 ++
.../components/u-car-keyboard/props.js | 14 +
.../u-car-keyboard/u-car-keyboard.vue | 257 ++++
.../uview-ui/components/u-card/u-card.vue | 299 ++++
.../uview-ui/components/u-cell-group/props.js | 14 +
.../components/u-cell-group/u-cell-group.vue | 70 +
.../components/u-cell-item/u-cell-item.vue | 316 ++++
.../uview-ui/components/u-cell/props.js | 110 ++
.../uview-ui/components/u-cell/u-cell.vue | 229 +++
.../components/u-checkbox-group/props.js | 82 +
.../u-checkbox-group/u-checkbox-group.vue | 123 ++
.../uview-ui/components/u-checkbox/props.js | 69 +
.../components/u-checkbox/u-checkbox.vue | 284 ++++
.../components/u-circle-progress/props.js | 8 +
.../u-circle-progress/u-circle-progress.vue | 220 +++
.../u-line-progress/u-line-progress.vue | 147 ++
.../uview-ui/components/u-code-input/props.js | 79 +
.../components/u-code-input/u-code-input.vue | 252 +++
.../uview-ui/components/u-code/props.js | 34 +
.../uview-ui/components/u-code/u-code.vue | 129 ++
.../uview-ui/components/u-col/props.js | 29 +
.../uview-ui/components/u-col/u-col.vue | 156 ++
.../components/u-collapse-item/props.js | 59 +
.../u-collapse-item/u-collapse-item.vue | 205 +++
.../uview-ui/components/u-collapse/props.js | 19 +
.../components/u-collapse/u-collapse.vue | 99 ++
.../components/u-column-notice/props.js | 55 +
.../u-column-notice/u-column-notice.vue | 237 +++
.../uview-ui/components/u-count-down/props.js | 24 +
.../components/u-count-down/u-count-down.vue | 318 ++++
.../uview-ui/components/u-count-down/utils.js | 62 +
.../uview-ui/components/u-count-to/props.js | 59 +
.../components/u-count-to/u-count-to.vue | 241 +++
.../components/u-datetime-picker/props.js | 116 ++
.../u-datetime-picker/u-datetime-picker.vue | 360 +++++
.../uview-ui/components/u-divider/props.js | 44 +
.../components/u-divider/u-divider.vue | 153 ++
.../components/u-dropdown-item/props.js | 36 +
.../u-dropdown-item/u-dropdown-item.vue | 132 ++
.../uview-ui/components/u-dropdown/props.js | 65 +
.../components/u-dropdown/u-dropdown.vue | 303 ++++
.../uview-ui/components/u-empty/props.js | 59 +
.../uview-ui/components/u-empty/u-empty.vue | 193 +++
.../uview-ui/components/u-field/u-field.vue | 384 +++++
.../uview-ui/components/u-form-item/props.js | 48 +
.../components/u-form-item/u-form-item.vue | 431 ++++++
.../uview-ui/components/u-form/props.js | 45 +
.../uview-ui/components/u-form/u-form.vue | 134 ++
.../u-full-screen/u-full-screen.vue | 52 +
.../uview-ui/components/u-gap/props.js | 24 +
.../uview-ui/components/u-gap/u-gap.vue | 54 +
.../uview-ui/components/u-grid-item/props.js | 14 +
.../components/u-grid-item/u-grid-item.vue | 126 ++
.../uview-ui/components/u-grid/props.js | 19 +
.../uview-ui/components/u-grid/u-grid.vue | 108 ++
.../uview-ui/components/u-icon/icons.js | 214 +++
.../uview-ui/components/u-icon/props.js | 89 ++
.../uview-ui/components/u-icon/u-icon.vue | 336 ++++
.../uview-ui/components/u-image/props.js | 84 +
.../uview-ui/components/u-image/u-image.vue | 268 ++++
.../components/u-index-anchor/props.js | 29 +
.../u-index-anchor/u-index-anchor.vue | 89 ++
.../uview-ui/components/u-index-item/props.js | 5 +
.../components/u-index-item/u-index-item.vue | 87 ++
.../uview-ui/components/u-index-list/props.js | 29 +
.../components/u-index-list/u-index-list.vue | 315 ++++
.../uview-ui/components/u-input/props.js | 187 +++
.../uview-ui/components/u-input/u-input.vue | 395 +++++
.../uview-ui/components/u-keyboard/props.js | 84 +
.../components/u-keyboard/u-keyboard.vue | 217 +++
.../components/u-lazy-load/u-lazy-load.vue | 244 +++
.../components/u-line-progress/props.js | 28 +
.../u-line-progress/u-line-progress.vue | 147 ++
.../uview-ui/components/u-line/props.js | 33 +
.../uview-ui/components/u-line/u-line.vue | 84 +
.../uview-ui/components/u-link/props.js | 39 +
.../uview-ui/components/u-link/u-link.vue | 89 ++
.../uview-ui/components/u-list-item/props.js | 9 +
.../components/u-list-item/u-list-item.vue | 116 ++
.../uview-ui/components/u-list/props.js | 76 +
.../uview-ui/components/u-list/u-list.vue | 157 ++
.../components/u-loading-icon/props.js | 59 +
.../u-loading-icon/u-loading-icon.vue | 343 +++++
.../components/u-loading-page/props.js | 49 +
.../u-loading-page/u-loading-page.vue | 25 +
.../components/u-loading/u-loading.vue | 103 ++
.../uview-ui/components/u-loadmore/props.js | 94 ++
.../components/u-loadmore/u-loadmore.vue | 203 +++
.../uview-ui/components/u-mask/u-mask.vue | 123 ++
.../u-message-input/u-message-input.vue | 311 ++++
.../uview-ui/components/u-modal/props.js | 84 +
.../uview-ui/components/u-modal/u-modal.vue | 283 ++++
.../uview-ui/components/u-navbar/props.js | 84 +
.../uview-ui/components/u-navbar/u-navbar.vue | 315 ++++
.../uview-ui/components/u-no-network/props.js | 19 +
.../components/u-no-network/u-no-network.vue | 233 +++
.../uview-ui/components/u-notice-bar/props.js | 70 +
.../components/u-notice-bar/u-notice-bar.vue | 272 ++++
.../uview-ui/components/u-notify/props.js | 49 +
.../uview-ui/components/u-notify/u-notify.vue | 211 +++
.../uview-ui/components/u-number-box/props.js | 109 ++
.../components/u-number-box/u-number-box.vue | 363 +++++
.../components/u-number-keyboard/props.js | 19 +
.../u-number-keyboard/u-number-keyboard.vue | 158 ++
.../uview-ui/components/u-overlay/props.js | 24 +
.../components/u-overlay/u-overlay.vue | 68 +
.../components/u-parse/libs/CssHandler.js | 100 ++
.../components/u-parse/libs/MpHtmlParser.js | 580 +++++++
.../components/u-parse/libs/config.js | 80 +
.../components/u-parse/libs/handler.wxs | 22 +
.../components/u-parse/libs/trees.vue | 505 ++++++
.../uview-ui/components/u-parse/node/node.vue | 499 ++++++
.../uview-ui/components/u-parse/parser.js | 1075 +++++++++++++
.../uview-ui/components/u-parse/props.js | 45 +
.../uview-ui/components/u-parse/u-parse.vue | 645 ++++++++
.../components/u-picker-column/props.js | 5 +
.../u-picker-column/u-picker-column.vue | 27 +
.../uview-ui/components/u-picker/props.js | 79 +
.../uview-ui/components/u-picker/u-picker.vue | 676 ++++++++
.../uview-ui/components/u-popup/props.js | 79 +
.../uview-ui/components/u-popup/u-popup.vue | 456 ++++++
.../components/u-radio-group/props.js | 85 ++
.../u-radio-group/u-radio-group.vue | 128 ++
.../uview-ui/components/u-radio/props.js | 64 +
.../uview-ui/components/u-radio/u-radio.vue | 271 ++++
.../uview-ui/components/u-rate/props.js | 69 +
.../uview-ui/components/u-rate/u-rate.vue | 275 ++++
.../uview-ui/components/u-read-more/props.js | 61 +
.../components/u-read-more/u-read-more.vue | 179 +++
.../uview-ui/components/u-row-notice/props.js | 39 +
.../components/u-row-notice/u-row-notice.vue | 269 ++++
.../uview-ui/components/u-row/props.js | 19 +
.../uview-ui/components/u-row/u-row.vue | 84 +
.../components/u-safe-bottom/props.js | 5 +
.../u-safe-bottom/u-safe-bottom.vue | 56 +
.../uview-ui/components/u-scroll-list/nvue.js | 28 +
.../components/u-scroll-list/other.js | 0
.../components/u-scroll-list/props.js | 34 +
.../components/u-scroll-list/scrollWxs.wxs | 50 +
.../u-scroll-list/u-scroll-list.vue | 224 +++
.../uview-ui/components/u-search/props.js | 118 ++
.../uview-ui/components/u-search/u-search.vue | 342 +++++
.../components/u-section/u-section.vue | 154 ++
.../uview-ui/components/u-select/u-select.vue | 420 +++++
.../uview-ui/components/u-skeleton/props.js | 59 +
.../components/u-skeleton/u-skeleton.vue | 199 +++
.../uview-ui/components/u-slider/mpother.js | 113 ++
.../uview-ui/components/u-slider/mpwxs.js | 42 +
.../uview-ui/components/u-slider/mpwxs.wxs | 121 ++
.../components/u-slider/nvue - ╕▒▒╛.js | 180 +++
.../uview-ui/components/u-slider/nvue.js | 193 +++
.../uview-ui/components/u-slider/props.js | 54 +
.../uview-ui/components/u-slider/u-slider.vue | 255 ++++
.../uview-ui/components/u-status-bar/props.js | 8 +
.../components/u-status-bar/u-status-bar.vue | 46 +
.../uview-ui/components/u-steps-item/props.js | 24 +
.../components/u-steps-item/u-steps-item.vue | 316 ++++
.../uview-ui/components/u-steps/props.js | 39 +
.../uview-ui/components/u-steps/u-steps.vue | 200 +++
.../uview-ui/components/u-sticky/props.js | 40 +
.../uview-ui/components/u-sticky/u-sticky.vue | 157 ++
.../uview-ui/components/u-subsection/props.js | 49 +
.../components/u-subsection/u-subsection.vue | 355 +++++
.../u-swipe-action-item/index - backup.wxs | 256 ++++
.../components/u-swipe-action-item/index.wxs | 225 +++
.../u-swipe-action-item/nvue - backup.js | 270 ++++
.../components/u-swipe-action-item/nvue.js | 174 +++
.../components/u-swipe-action-item/props.js | 41 +
.../u-swipe-action-item.vue | 190 +++
.../components/u-swipe-action-item/wxs.js | 15 +
.../components/u-swipe-action/props.js | 9 +
.../u-swipe-action/u-swipe-action.vue | 255 ++++
.../components/u-swiper-indicator/props.js | 29 +
.../u-swiper-indicator/u-swiper-indicator.vue | 110 ++
.../uview-ui/components/u-swiper/props.js | 125 ++
.../uview-ui/components/u-swiper/u-swiper.vue | 340 +++++
.../uview-ui/components/u-switch/props.js | 54 +
.../uview-ui/components/u-switch/u-switch.vue | 163 ++
.../components/u-tabbar-item/props.js | 35 +
.../u-tabbar-item/u-tabbar-item.vue | 142 ++
.../uview-ui/components/u-tabbar/props.js | 44 +
.../uview-ui/components/u-tabbar/u-tabbar.vue | 330 ++++
.../uview-ui/components/u-table/props.js | 5 +
.../uview-ui/components/u-table/u-table.vue | 84 +
.../uview-ui/components/u-tabs-item/props.js | 5 +
.../components/u-tabs-item/u-tabs-item.vue | 29 +
.../u-tabs-swiper/u-tabs-swiper.vue | 488 ++++++
.../uview-ui/components/u-tabs/props.js | 64 +
.../uview-ui/components/u-tabs/u-tabs.vue | 369 +++++
.../uview-ui/components/u-tag/props.js | 84 +
.../uview-ui/components/u-tag/u-tag.vue | 294 ++++
uni_modules/uview-ui/components/u-td/props.js | 5 +
uni_modules/uview-ui/components/u-td/u-td.vue | 66 +
.../uview-ui/components/u-text/props.js | 110 ++
.../uview-ui/components/u-text/u-text.vue | 223 +++
.../uview-ui/components/u-text/value.js | 85 ++
.../uview-ui/components/u-textarea/props.js | 119 ++
.../components/u-textarea/u-textarea.vue | 239 +++
uni_modules/uview-ui/components/u-th/u-th.vue | 62 +
.../u-time-line-item/u-time-line-item.vue | 83 +
.../components/u-time-line/u-time-line.vue | 43 +
.../uview-ui/components/u-toast/u-toast.vue | 220 +++
.../uview-ui/components/u-toolbar/props.js | 34 +
.../components/u-toolbar/u-toolbar.vue | 102 ++
.../components/u-tooltip/clipboard.min.js | 58 +
.../uview-ui/components/u-tooltip/props.js | 59 +
.../components/u-tooltip/u-tooltip.vue | 365 +++++
.../components/u-top-tips/u-top-tips.vue | 121 ++
uni_modules/uview-ui/components/u-tr/props.js | 5 +
uni_modules/uview-ui/components/u-tr/u-tr.vue | 25 +
.../components/u-transition/nvue.ani-map.js | 68 +
.../uview-ui/components/u-transition/props.js | 24 +
.../components/u-transition/transition.js | 157 ++
.../components/u-transition/u-transition.vue | 92 ++
.../u-transition/vue.ani-style.scss | 113 ++
.../uview-ui/components/u-upload/mixin.js | 21 +
.../uview-ui/components/u-upload/props.js | 124 ++
.../uview-ui/components/u-upload/u-upload.vue | 657 ++++++++
.../uview-ui/components/u-upload/utils.js | 151 ++
.../u-verification-code.vue | 164 ++
.../components/u-waterfall/u-waterfall.vue | 176 +++
.../uview-ui/components/uview-ui/uview-ui.vue | 15 +
.../uview-ui/components/uview-v1/uview-v1.vue | 0
uni_modules/uview-ui/iconfont.css | 910 +++++++++++
uni_modules/uview-ui/index.js | 141 ++
uni_modules/uview-ui/index.scss | 23 +
uni_modules/uview-ui/libs/config/color.js | 17 +
uni_modules/uview-ui/libs/config/config.js | 15 +
uni_modules/uview-ui/libs/config/props.js | 190 +++
.../uview-ui/libs/config/props/actionSheet.js | 25 +
.../uview-ui/libs/config/props/album.js | 25 +
.../uview-ui/libs/config/props/alert.js | 22 +
.../uview-ui/libs/config/props/avatar.js | 28 +
.../uview-ui/libs/config/props/avatarGroup.js | 23 +
.../uview-ui/libs/config/props/backtop.js | 27 +
.../uview-ui/libs/config/props/badge.js | 27 +
.../uview-ui/libs/config/props/button.js | 42 +
.../uview-ui/libs/config/props/calendar.js | 42 +
.../uview-ui/libs/config/props/carKeyboard.js | 15 +
.../uview-ui/libs/config/props/cell.js | 35 +
.../uview-ui/libs/config/props/cellGroup.js | 17 +
.../uview-ui/libs/config/props/checkbox.js | 27 +
.../libs/config/props/checkboxGroup.js | 29 +
.../libs/config/props/circleProgress.js | 15 +
.../uview-ui/libs/config/props/code.js | 21 +
.../uview-ui/libs/config/props/codeInput.js | 29 +
uni_modules/uview-ui/libs/config/props/col.js | 19 +
.../uview-ui/libs/config/props/collapse.js | 17 +
.../libs/config/props/collapseItem.js | 25 +
.../libs/config/props/columnNotice.js | 24 +
.../uview-ui/libs/config/props/countDown.js | 18 +
.../uview-ui/libs/config/props/countTo.js | 25 +
.../libs/config/props/datetimePicker.js | 36 +
.../uview-ui/libs/config/props/divider.js | 23 +
.../uview-ui/libs/config/props/empty.js | 26 +
.../uview-ui/libs/config/props/form.js | 22 +
.../uview-ui/libs/config/props/formItem.js | 23 +
uni_modules/uview-ui/libs/config/props/gap.js | 19 +
.../uview-ui/libs/config/props/grid.js | 17 +
.../uview-ui/libs/config/props/gridItem.js | 16 +
.../uview-ui/libs/config/props/icon.js | 36 +
.../uview-ui/libs/config/props/image.js | 30 +
.../uview-ui/libs/config/props/indexAnchor.js | 19 +
.../uview-ui/libs/config/props/indexList.js | 19 +
.../uview-ui/libs/config/props/input.js | 48 +
.../uview-ui/libs/config/props/keyboard.js | 30 +
.../uview-ui/libs/config/props/line.js | 20 +
.../libs/config/props/lineProgress.js | 19 +
.../uview-ui/libs/config/props/link.js | 26 +
.../uview-ui/libs/config/props/list.js | 28 +
.../uview-ui/libs/config/props/listItem.js | 15 +
.../uview-ui/libs/config/props/loadingIcon.js | 30 +
.../uview-ui/libs/config/props/loadingPage.js | 23 +
.../uview-ui/libs/config/props/loadmore.js | 32 +
.../uview-ui/libs/config/props/modal.js | 30 +
.../uview-ui/libs/config/props/navbar.js | 32 +
.../uview-ui/libs/config/props/noNetwork.js | 18 +
.../uview-ui/libs/config/props/noticeBar.js | 27 +
.../uview-ui/libs/config/props/notify.js | 22 +
.../uview-ui/libs/config/props/numberBox.js | 35 +
.../libs/config/props/numberKeyboard.js | 17 +
.../uview-ui/libs/config/props/overlay.js | 18 +
.../uview-ui/libs/config/props/parse.js | 22 +
.../uview-ui/libs/config/props/picker.js | 29 +
.../uview-ui/libs/config/props/popup.js | 29 +
.../uview-ui/libs/config/props/radio.js | 27 +
.../uview-ui/libs/config/props/radioGroup.js | 30 +
.../uview-ui/libs/config/props/rate.js | 26 +
.../uview-ui/libs/config/props/readMore.js | 22 +
uni_modules/uview-ui/libs/config/props/row.js | 17 +
.../uview-ui/libs/config/props/rowNotice.js | 21 +
.../uview-ui/libs/config/props/scrollList.js | 20 +
.../uview-ui/libs/config/props/search.js | 37 +
.../uview-ui/libs/config/props/section.js | 24 +
.../uview-ui/libs/config/props/skeleton.js | 25 +
.../uview-ui/libs/config/props/slider.js | 25 +
.../uview-ui/libs/config/props/statusBar.js | 15 +
.../uview-ui/libs/config/props/steps.js | 21 +
.../uview-ui/libs/config/props/stepsItem.js | 18 +
.../uview-ui/libs/config/props/sticky.js | 20 +
.../uview-ui/libs/config/props/subsection.js | 23 +
.../uview-ui/libs/config/props/swipeAction.js | 15 +
.../libs/config/props/swipeActionItem.js | 21 +
.../uview-ui/libs/config/props/swiper.js | 39 +
.../libs/config/props/swipterIndicator.js | 19 +
.../uview-ui/libs/config/props/switch.js | 24 +
.../uview-ui/libs/config/props/tabbar.js | 22 +
.../uview-ui/libs/config/props/tabbarItem.js | 20 +
.../uview-ui/libs/config/props/tabs.js | 32 +
uni_modules/uview-ui/libs/config/props/tag.js | 29 +
.../uview-ui/libs/config/props/text.js | 38 +
.../uview-ui/libs/config/props/textarea.js | 36 +
.../uview-ui/libs/config/props/toast.js | 30 +
.../uview-ui/libs/config/props/toolbar.js | 21 +
.../uview-ui/libs/config/props/tooltip.js | 25 +
.../uview-ui/libs/config/props/transition.js | 18 +
.../uview-ui/libs/config/props/upload.js | 36 +
uni_modules/uview-ui/libs/config/zIndex.js | 20 +
uni_modules/uview-ui/libs/css/color.scss | 155 ++
uni_modules/uview-ui/libs/css/common.scss | 176 +++
uni_modules/uview-ui/libs/css/components.scss | 15 +
uni_modules/uview-ui/libs/css/flex.scss | 257 ++++
uni_modules/uview-ui/libs/css/h5.scss | 0
uni_modules/uview-ui/libs/css/mixin.scss | 8 +
uni_modules/uview-ui/libs/css/mp.scss | 0
uni_modules/uview-ui/libs/css/nvue.scss | 0
.../uview-ui/libs/css/style.components.scss | 7 +
uni_modules/uview-ui/libs/css/style.h5.scss | 8 +
uni_modules/uview-ui/libs/css/style.mp.scss | 72 +
uni_modules/uview-ui/libs/css/style.nvue.scss | 3 +
uni_modules/uview-ui/libs/css/style.vue.scss | 175 +++
uni_modules/uview-ui/libs/css/vue.scss | 27 +
uni_modules/uview-ui/libs/function/$parent.js | 18 +
uni_modules/uview-ui/libs/function/addUnit.js | 8 +
uni_modules/uview-ui/libs/function/bem.js | 5 +
uni_modules/uview-ui/libs/function/color.js | 37 +
.../uview-ui/libs/function/colorGradient.js | 134 ++
.../uview-ui/libs/function/debounce.js | 29 +
.../uview-ui/libs/function/deepClone.js | 35 +
.../uview-ui/libs/function/deepMerge.js | 29 +
uni_modules/uview-ui/libs/function/digit.js | 167 ++
.../uview-ui/libs/function/getParent.js | 47 +
uni_modules/uview-ui/libs/function/guid.js | 41 +
uni_modules/uview-ui/libs/function/index.js | 705 +++++++++
uni_modules/uview-ui/libs/function/md5.js | 385 +++++
.../uview-ui/libs/function/platform.js | 75 +
.../uview-ui/libs/function/queryParams.js | 58 +
uni_modules/uview-ui/libs/function/random.js | 10 +
.../uview-ui/libs/function/randomArray.js | 7 +
uni_modules/uview-ui/libs/function/route.js | 122 ++
uni_modules/uview-ui/libs/function/sys.js | 9 +
uni_modules/uview-ui/libs/function/test.js | 232 +++
.../uview-ui/libs/function/throttle.js | 32 +
.../uview-ui/libs/function/timeFormat.js | 51 +
.../uview-ui/libs/function/timeFrom.js | 47 +
uni_modules/uview-ui/libs/function/toast.js | 9 +
uni_modules/uview-ui/libs/function/trim.js | 15 +
.../uview-ui/libs/function/type2icon.js | 35 +
.../libs/luch-request/adapters/index.js | 97 ++
.../luch-request/core/InterceptorManager.js | 50 +
.../libs/luch-request/core/Request.js | 198 +++
.../libs/luch-request/core/buildFullPath.js | 20 +
.../libs/luch-request/core/defaults.js | 29 +
.../libs/luch-request/core/dispatchRequest.js | 3 +
.../libs/luch-request/core/mergeConfig.js | 103 ++
.../uview-ui/libs/luch-request/core/settle.js | 16 +
.../libs/luch-request/helpers/buildURL.js | 69 +
.../libs/luch-request/helpers/combineURLs.js | 14 +
.../luch-request/helpers/isAbsoluteURL.js | 14 +
.../uview-ui/libs/luch-request/index.d.ts | 116 ++
.../uview-ui/libs/luch-request/index.js | 3 +
.../uview-ui/libs/luch-request/utils.js | 131 ++
.../uview-ui/libs/luch-request/utils/clone.js | 264 ++++
uni_modules/uview-ui/libs/mixin/button.js | 13 +
uni_modules/uview-ui/libs/mixin/mixin.js | 64 +
uni_modules/uview-ui/libs/mixin/mpMixin.js | 8 +
uni_modules/uview-ui/libs/mixin/mpShare.js | 18 +
uni_modules/uview-ui/libs/mixin/openType.js | 25 +
uni_modules/uview-ui/libs/mixin/style.js | 228 +++
uni_modules/uview-ui/libs/mixin/touch.js | 59 +
uni_modules/uview-ui/libs/request/index.js | 169 ++
uni_modules/uview-ui/libs/store/index.js | 19 +
uni_modules/uview-ui/libs/util/area.js | 1 +
.../uview-ui/libs/util/async-validator.js | 1356 +++++++++++++++++
uni_modules/uview-ui/libs/util/calendar.js | 546 +++++++
uni_modules/uview-ui/libs/util/city.js | 1 +
uni_modules/uview-ui/libs/util/dayjs.js | 308 ++++
uni_modules/uview-ui/libs/util/emitter.js | 51 +
uni_modules/uview-ui/libs/util/province.js | 1 +
uni_modules/uview-ui/libs/util/route.js | 124 ++
uni_modules/uview-ui/package.json | 39 +
uni_modules/uview-ui/theme.scss | 38 +
uni_modules/z-paging/changelog.md | 11 +
.../z-paging-cell/z-paging-cell.vue | 34 +
.../z-paging-empty-view.vue | 162 ++
.../z-paging-swiper-item.vue | 143 ++
.../z-paging-swiper/z-paging-swiper.vue | 170 +++
.../components/z-paging-load-more.vue | 141 ++
.../z-paging/components/z-paging-refresh.vue | 182 +++
.../components/z-paging/config/index.js | 3 +
.../components/z-paging/css/z-paging-main.css | 219 +++
.../z-paging/css/z-paging-static.css | 35 +
.../z-paging/components/z-paging/i18n/en.json | 22 +
.../components/z-paging/i18n/index.js | 8 +
.../components/z-paging/i18n/zh-Hans.json | 22 +
.../components/z-paging/i18n/zh-Hant.json | 22 +
.../z-paging/js/hooks/useZPaging.js | 25 +
.../z-paging/js/hooks/useZPagingComp.js | 25 +
.../z-paging/js/modules/back-to-top.js | 111 ++
.../z-paging/js/modules/common-layout.js | 116 ++
.../z-paging/js/modules/data-handle.js | 746 +++++++++
.../components/z-paging/js/modules/empty.js | 147 ++
.../components/z-paging/js/modules/i18n.js | 101 ++
.../z-paging/js/modules/load-more.js | 315 ++++
.../components/z-paging/js/modules/loading.js | 93 ++
.../components/z-paging/js/modules/nvue.js | 249 +++
.../z-paging/js/modules/refresher.js | 689 +++++++++
.../z-paging/js/modules/scroller.js | 464 ++++++
.../z-paging/js/modules/virtual-list.js | 461 ++++++
.../components/z-paging/js/z-paging-config.js | 21 +
.../z-paging/js/z-paging-constant.js | 12 +
.../components/z-paging/js/z-paging-enum.js | 44 +
.../z-paging/js/z-paging-interceptor.js | 48 +
.../components/z-paging/js/z-paging-main.js | 447 ++++++
.../components/z-paging/js/z-paging-mixin.js | 22 +
.../components/z-paging/js/z-paging-static.js | 13 +
.../components/z-paging/js/z-paging-utils.js | 228 +++
.../z-paging/wxs/z-paging-renderjs.js | 58 +
.../components/z-paging/wxs/z-paging-wxs.wxs | 340 +++++
.../z-paging/components/z-paging/z-paging.vue | 310 ++++
uni_modules/z-paging/package.json | 86 ++
uni_modules/z-paging/readme.md | 53 +
uni_modules/z-tabs/changelog.md | 2 +
.../z-tabs/components/z-tabs/config/index.js | 4 +
.../z-tabs/components/z-tabs/z-tabs.vue | 736 +++++++++
uni_modules/z-tabs/package.json | 82 +
uni_modules/z-tabs/readme.md | 175 +++
484 files changed, 61041 insertions(+), 1 deletion(-)
create mode 100644 uni_modules/mp-html/README.md
create mode 100644 uni_modules/mp-html/changelog.md
create mode 100644 uni_modules/mp-html/components/mp-html/mp-html.vue
create mode 100644 uni_modules/mp-html/components/mp-html/node/node.vue
create mode 100644 uni_modules/mp-html/components/mp-html/parser.js
create mode 100644 uni_modules/mp-html/package.json
create mode 100644 uni_modules/mp-html/static/app-plus/mp-html/js/handler.js
create mode 100644 uni_modules/mp-html/static/app-plus/mp-html/js/uni.webview.min.js
create mode 100644 uni_modules/mp-html/static/app-plus/mp-html/local.html
create mode 100644 uni_modules/uni-card/changelog.md
create mode 100644 uni_modules/uni-card/components/uni-card/uni-card.vue
create mode 100644 uni_modules/uni-card/package.json
create mode 100644 uni_modules/uni-card/readme.md
create mode 100644 uni_modules/uview-ui/LICENSE
create mode 100644 uni_modules/uview-ui/README.md
create mode 100644 uni_modules/uview-ui/changelog.md
create mode 100644 uni_modules/uview-ui/components/u--form/u--form.vue
create mode 100644 uni_modules/uview-ui/components/u--image/u--image.vue
create mode 100644 uni_modules/uview-ui/components/u--input/u--input.vue
create mode 100644 uni_modules/uview-ui/components/u--text/u--text.vue
create mode 100644 uni_modules/uview-ui/components/u--textarea/u--textarea.vue
create mode 100644 uni_modules/uview-ui/components/u-action-sheet/props.js
create mode 100644 uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
create mode 100644 uni_modules/uview-ui/components/u-album/props.js
create mode 100644 uni_modules/uview-ui/components/u-album/u-album.vue
create mode 100644 uni_modules/uview-ui/components/u-alert-tips/u-alert-tips.vue
create mode 100644 uni_modules/uview-ui/components/u-alert/props.js
create mode 100644 uni_modules/uview-ui/components/u-alert/u-alert.vue
create mode 100644 uni_modules/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue
create mode 100644 uni_modules/uview-ui/components/u-avatar-cropper/weCropper.js
create mode 100644 uni_modules/uview-ui/components/u-avatar-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue
create mode 100644 uni_modules/uview-ui/components/u-avatar/props.js
create mode 100644 uni_modules/uview-ui/components/u-avatar/u-avatar.vue
create mode 100644 uni_modules/uview-ui/components/u-back-top/props.js
create mode 100644 uni_modules/uview-ui/components/u-back-top/u-back-top.vue
create mode 100644 uni_modules/uview-ui/components/u-badge/props.js
create mode 100644 uni_modules/uview-ui/components/u-badge/u-badge.vue
create mode 100644 uni_modules/uview-ui/components/u-button/nvue.scss
create mode 100644 uni_modules/uview-ui/components/u-button/props.js
create mode 100644 uni_modules/uview-ui/components/u-button/u-button.vue
create mode 100644 uni_modules/uview-ui/components/u-button/vue.scss
create mode 100644 uni_modules/uview-ui/components/u-calendar/header.vue
create mode 100644 uni_modules/uview-ui/components/u-calendar/month.vue
create mode 100644 uni_modules/uview-ui/components/u-calendar/props.js
create mode 100644 uni_modules/uview-ui/components/u-calendar/u-calendar.vue
create mode 100644 uni_modules/uview-ui/components/u-calendar/util.js
create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/props.js
create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
create mode 100644 uni_modules/uview-ui/components/u-card/u-card.vue
create mode 100644 uni_modules/uview-ui/components/u-cell-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue
create mode 100644 uni_modules/uview-ui/components/u-cell-item/u-cell-item.vue
create mode 100644 uni_modules/uview-ui/components/u-cell/props.js
create mode 100644 uni_modules/uview-ui/components/u-cell/u-cell.vue
create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
create mode 100644 uni_modules/uview-ui/components/u-checkbox/props.js
create mode 100644 uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue
create mode 100644 uni_modules/uview-ui/components/u-circle-progress/props.js
create mode 100644 uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue
create mode 100644 uni_modules/uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue
create mode 100644 uni_modules/uview-ui/components/u-code-input/props.js
create mode 100644 uni_modules/uview-ui/components/u-code-input/u-code-input.vue
create mode 100644 uni_modules/uview-ui/components/u-code/props.js
create mode 100644 uni_modules/uview-ui/components/u-code/u-code.vue
create mode 100644 uni_modules/uview-ui/components/u-col/props.js
create mode 100644 uni_modules/uview-ui/components/u-col/u-col.vue
create mode 100644 uni_modules/uview-ui/components/u-collapse-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue
create mode 100644 uni_modules/uview-ui/components/u-collapse/props.js
create mode 100644 uni_modules/uview-ui/components/u-collapse/u-collapse.vue
create mode 100644 uni_modules/uview-ui/components/u-column-notice/props.js
create mode 100644 uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue
create mode 100644 uni_modules/uview-ui/components/u-count-down/props.js
create mode 100644 uni_modules/uview-ui/components/u-count-down/u-count-down.vue
create mode 100644 uni_modules/uview-ui/components/u-count-down/utils.js
create mode 100644 uni_modules/uview-ui/components/u-count-to/props.js
create mode 100644 uni_modules/uview-ui/components/u-count-to/u-count-to.vue
create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/props.js
create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue
create mode 100644 uni_modules/uview-ui/components/u-divider/props.js
create mode 100644 uni_modules/uview-ui/components/u-divider/u-divider.vue
create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue
create mode 100644 uni_modules/uview-ui/components/u-dropdown/props.js
create mode 100644 uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue
create mode 100644 uni_modules/uview-ui/components/u-empty/props.js
create mode 100644 uni_modules/uview-ui/components/u-empty/u-empty.vue
create mode 100644 uni_modules/uview-ui/components/u-field/u-field.vue
create mode 100644 uni_modules/uview-ui/components/u-form-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-form-item/u-form-item.vue
create mode 100644 uni_modules/uview-ui/components/u-form/props.js
create mode 100644 uni_modules/uview-ui/components/u-form/u-form.vue
create mode 100644 uni_modules/uview-ui/components/u-full-screen/u-full-screen.vue
create mode 100644 uni_modules/uview-ui/components/u-gap/props.js
create mode 100644 uni_modules/uview-ui/components/u-gap/u-gap.vue
create mode 100644 uni_modules/uview-ui/components/u-grid-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue
create mode 100644 uni_modules/uview-ui/components/u-grid/props.js
create mode 100644 uni_modules/uview-ui/components/u-grid/u-grid.vue
create mode 100644 uni_modules/uview-ui/components/u-icon/icons.js
create mode 100644 uni_modules/uview-ui/components/u-icon/props.js
create mode 100644 uni_modules/uview-ui/components/u-icon/u-icon.vue
create mode 100644 uni_modules/uview-ui/components/u-image/props.js
create mode 100644 uni_modules/uview-ui/components/u-image/u-image.vue
create mode 100644 uni_modules/uview-ui/components/u-index-anchor/props.js
create mode 100644 uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue
create mode 100644 uni_modules/uview-ui/components/u-index-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-index-item/u-index-item.vue
create mode 100644 uni_modules/uview-ui/components/u-index-list/props.js
create mode 100644 uni_modules/uview-ui/components/u-index-list/u-index-list.vue
create mode 100644 uni_modules/uview-ui/components/u-input/props.js
create mode 100644 uni_modules/uview-ui/components/u-input/u-input.vue
create mode 100644 uni_modules/uview-ui/components/u-keyboard/props.js
create mode 100644 uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue
create mode 100644 uni_modules/uview-ui/components/u-lazy-load/u-lazy-load.vue
create mode 100644 uni_modules/uview-ui/components/u-line-progress/props.js
create mode 100644 uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue
create mode 100644 uni_modules/uview-ui/components/u-line/props.js
create mode 100644 uni_modules/uview-ui/components/u-line/u-line.vue
create mode 100644 uni_modules/uview-ui/components/u-link/props.js
create mode 100644 uni_modules/uview-ui/components/u-link/u-link.vue
create mode 100644 uni_modules/uview-ui/components/u-list-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-list-item/u-list-item.vue
create mode 100644 uni_modules/uview-ui/components/u-list/props.js
create mode 100644 uni_modules/uview-ui/components/u-list/u-list.vue
create mode 100644 uni_modules/uview-ui/components/u-loading-icon/props.js
create mode 100644 uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue
create mode 100644 uni_modules/uview-ui/components/u-loading-page/props.js
create mode 100644 uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue
create mode 100644 uni_modules/uview-ui/components/u-loading/u-loading.vue
create mode 100644 uni_modules/uview-ui/components/u-loadmore/props.js
create mode 100644 uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue
create mode 100644 uni_modules/uview-ui/components/u-mask/u-mask.vue
create mode 100644 uni_modules/uview-ui/components/u-message-input/u-message-input.vue
create mode 100644 uni_modules/uview-ui/components/u-modal/props.js
create mode 100644 uni_modules/uview-ui/components/u-modal/u-modal.vue
create mode 100644 uni_modules/uview-ui/components/u-navbar/props.js
create mode 100644 uni_modules/uview-ui/components/u-navbar/u-navbar.vue
create mode 100644 uni_modules/uview-ui/components/u-no-network/props.js
create mode 100644 uni_modules/uview-ui/components/u-no-network/u-no-network.vue
create mode 100644 uni_modules/uview-ui/components/u-notice-bar/props.js
create mode 100644 uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue
create mode 100644 uni_modules/uview-ui/components/u-notify/props.js
create mode 100644 uni_modules/uview-ui/components/u-notify/u-notify.vue
create mode 100644 uni_modules/uview-ui/components/u-number-box/props.js
create mode 100644 uni_modules/uview-ui/components/u-number-box/u-number-box.vue
create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/props.js
create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue
create mode 100644 uni_modules/uview-ui/components/u-overlay/props.js
create mode 100644 uni_modules/uview-ui/components/u-overlay/u-overlay.vue
create mode 100644 uni_modules/uview-ui/components/u-parse/libs/CssHandler.js
create mode 100644 uni_modules/uview-ui/components/u-parse/libs/MpHtmlParser.js
create mode 100644 uni_modules/uview-ui/components/u-parse/libs/config.js
create mode 100644 uni_modules/uview-ui/components/u-parse/libs/handler.wxs
create mode 100644 uni_modules/uview-ui/components/u-parse/libs/trees.vue
create mode 100644 uni_modules/uview-ui/components/u-parse/node/node.vue
create mode 100644 uni_modules/uview-ui/components/u-parse/parser.js
create mode 100644 uni_modules/uview-ui/components/u-parse/props.js
create mode 100644 uni_modules/uview-ui/components/u-parse/u-parse.vue
create mode 100644 uni_modules/uview-ui/components/u-picker-column/props.js
create mode 100644 uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue
create mode 100644 uni_modules/uview-ui/components/u-picker/props.js
create mode 100644 uni_modules/uview-ui/components/u-picker/u-picker.vue
create mode 100644 uni_modules/uview-ui/components/u-popup/props.js
create mode 100644 uni_modules/uview-ui/components/u-popup/u-popup.vue
create mode 100644 uni_modules/uview-ui/components/u-radio-group/props.js
create mode 100644 uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue
create mode 100644 uni_modules/uview-ui/components/u-radio/props.js
create mode 100644 uni_modules/uview-ui/components/u-radio/u-radio.vue
create mode 100644 uni_modules/uview-ui/components/u-rate/props.js
create mode 100644 uni_modules/uview-ui/components/u-rate/u-rate.vue
create mode 100644 uni_modules/uview-ui/components/u-read-more/props.js
create mode 100644 uni_modules/uview-ui/components/u-read-more/u-read-more.vue
create mode 100644 uni_modules/uview-ui/components/u-row-notice/props.js
create mode 100644 uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue
create mode 100644 uni_modules/uview-ui/components/u-row/props.js
create mode 100644 uni_modules/uview-ui/components/u-row/u-row.vue
create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/props.js
create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/nvue.js
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/other.js
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/props.js
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs
create mode 100644 uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue
create mode 100644 uni_modules/uview-ui/components/u-search/props.js
create mode 100644 uni_modules/uview-ui/components/u-search/u-search.vue
create mode 100644 uni_modules/uview-ui/components/u-section/u-section.vue
create mode 100644 uni_modules/uview-ui/components/u-select/u-select.vue
create mode 100644 uni_modules/uview-ui/components/u-skeleton/props.js
create mode 100644 uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue
create mode 100644 uni_modules/uview-ui/components/u-slider/mpother.js
create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.js
create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.wxs
create mode 100644 uni_modules/uview-ui/components/u-slider/nvue - ╕▒▒╛.js
create mode 100644 uni_modules/uview-ui/components/u-slider/nvue.js
create mode 100644 uni_modules/uview-ui/components/u-slider/props.js
create mode 100644 uni_modules/uview-ui/components/u-slider/u-slider.vue
create mode 100644 uni_modules/uview-ui/components/u-status-bar/props.js
create mode 100644 uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue
create mode 100644 uni_modules/uview-ui/components/u-steps-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue
create mode 100644 uni_modules/uview-ui/components/u-steps/props.js
create mode 100644 uni_modules/uview-ui/components/u-steps/u-steps.vue
create mode 100644 uni_modules/uview-ui/components/u-sticky/props.js
create mode 100644 uni_modules/uview-ui/components/u-sticky/u-sticky.vue
create mode 100644 uni_modules/uview-ui/components/u-subsection/props.js
create mode 100644 uni_modules/uview-ui/components/u-subsection/u-subsection.vue
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index.wxs
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue
create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/wxs.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action/props.js
create mode 100644 uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue
create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/props.js
create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue
create mode 100644 uni_modules/uview-ui/components/u-swiper/props.js
create mode 100644 uni_modules/uview-ui/components/u-swiper/u-swiper.vue
create mode 100644 uni_modules/uview-ui/components/u-switch/props.js
create mode 100644 uni_modules/uview-ui/components/u-switch/u-switch.vue
create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue
create mode 100644 uni_modules/uview-ui/components/u-tabbar/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue
create mode 100644 uni_modules/uview-ui/components/u-table/props.js
create mode 100644 uni_modules/uview-ui/components/u-table/u-table.vue
create mode 100644 uni_modules/uview-ui/components/u-tabs-item/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue
create mode 100644 uni_modules/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue
create mode 100644 uni_modules/uview-ui/components/u-tabs/props.js
create mode 100644 uni_modules/uview-ui/components/u-tabs/u-tabs.vue
create mode 100644 uni_modules/uview-ui/components/u-tag/props.js
create mode 100644 uni_modules/uview-ui/components/u-tag/u-tag.vue
create mode 100644 uni_modules/uview-ui/components/u-td/props.js
create mode 100644 uni_modules/uview-ui/components/u-td/u-td.vue
create mode 100644 uni_modules/uview-ui/components/u-text/props.js
create mode 100644 uni_modules/uview-ui/components/u-text/u-text.vue
create mode 100644 uni_modules/uview-ui/components/u-text/value.js
create mode 100644 uni_modules/uview-ui/components/u-textarea/props.js
create mode 100644 uni_modules/uview-ui/components/u-textarea/u-textarea.vue
create mode 100644 uni_modules/uview-ui/components/u-th/u-th.vue
create mode 100644 uni_modules/uview-ui/components/u-time-line-item/u-time-line-item.vue
create mode 100644 uni_modules/uview-ui/components/u-time-line/u-time-line.vue
create mode 100644 uni_modules/uview-ui/components/u-toast/u-toast.vue
create mode 100644 uni_modules/uview-ui/components/u-toolbar/props.js
create mode 100644 uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue
create mode 100644 uni_modules/uview-ui/components/u-tooltip/clipboard.min.js
create mode 100644 uni_modules/uview-ui/components/u-tooltip/props.js
create mode 100644 uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue
create mode 100644 uni_modules/uview-ui/components/u-top-tips/u-top-tips.vue
create mode 100644 uni_modules/uview-ui/components/u-tr/props.js
create mode 100644 uni_modules/uview-ui/components/u-tr/u-tr.vue
create mode 100644 uni_modules/uview-ui/components/u-transition/nvue.ani-map.js
create mode 100644 uni_modules/uview-ui/components/u-transition/props.js
create mode 100644 uni_modules/uview-ui/components/u-transition/transition.js
create mode 100644 uni_modules/uview-ui/components/u-transition/u-transition.vue
create mode 100644 uni_modules/uview-ui/components/u-transition/vue.ani-style.scss
create mode 100644 uni_modules/uview-ui/components/u-upload/mixin.js
create mode 100644 uni_modules/uview-ui/components/u-upload/props.js
create mode 100644 uni_modules/uview-ui/components/u-upload/u-upload.vue
create mode 100644 uni_modules/uview-ui/components/u-upload/utils.js
create mode 100644 uni_modules/uview-ui/components/u-verification-code/u-verification-code.vue
create mode 100644 uni_modules/uview-ui/components/u-waterfall/u-waterfall.vue
create mode 100644 uni_modules/uview-ui/components/uview-ui/uview-ui.vue
create mode 100644 uni_modules/uview-ui/components/uview-v1/uview-v1.vue
create mode 100644 uni_modules/uview-ui/iconfont.css
create mode 100644 uni_modules/uview-ui/index.js
create mode 100644 uni_modules/uview-ui/index.scss
create mode 100644 uni_modules/uview-ui/libs/config/color.js
create mode 100644 uni_modules/uview-ui/libs/config/config.js
create mode 100644 uni_modules/uview-ui/libs/config/props.js
create mode 100644 uni_modules/uview-ui/libs/config/props/actionSheet.js
create mode 100644 uni_modules/uview-ui/libs/config/props/album.js
create mode 100644 uni_modules/uview-ui/libs/config/props/alert.js
create mode 100644 uni_modules/uview-ui/libs/config/props/avatar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/avatarGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/backtop.js
create mode 100644 uni_modules/uview-ui/libs/config/props/badge.js
create mode 100644 uni_modules/uview-ui/libs/config/props/button.js
create mode 100644 uni_modules/uview-ui/libs/config/props/calendar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/carKeyboard.js
create mode 100644 uni_modules/uview-ui/libs/config/props/cell.js
create mode 100644 uni_modules/uview-ui/libs/config/props/cellGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/checkbox.js
create mode 100644 uni_modules/uview-ui/libs/config/props/checkboxGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/circleProgress.js
create mode 100644 uni_modules/uview-ui/libs/config/props/code.js
create mode 100644 uni_modules/uview-ui/libs/config/props/codeInput.js
create mode 100644 uni_modules/uview-ui/libs/config/props/col.js
create mode 100644 uni_modules/uview-ui/libs/config/props/collapse.js
create mode 100644 uni_modules/uview-ui/libs/config/props/collapseItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/columnNotice.js
create mode 100644 uni_modules/uview-ui/libs/config/props/countDown.js
create mode 100644 uni_modules/uview-ui/libs/config/props/countTo.js
create mode 100644 uni_modules/uview-ui/libs/config/props/datetimePicker.js
create mode 100644 uni_modules/uview-ui/libs/config/props/divider.js
create mode 100644 uni_modules/uview-ui/libs/config/props/empty.js
create mode 100644 uni_modules/uview-ui/libs/config/props/form.js
create mode 100644 uni_modules/uview-ui/libs/config/props/formItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/gap.js
create mode 100644 uni_modules/uview-ui/libs/config/props/grid.js
create mode 100644 uni_modules/uview-ui/libs/config/props/gridItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/icon.js
create mode 100644 uni_modules/uview-ui/libs/config/props/image.js
create mode 100644 uni_modules/uview-ui/libs/config/props/indexAnchor.js
create mode 100644 uni_modules/uview-ui/libs/config/props/indexList.js
create mode 100644 uni_modules/uview-ui/libs/config/props/input.js
create mode 100644 uni_modules/uview-ui/libs/config/props/keyboard.js
create mode 100644 uni_modules/uview-ui/libs/config/props/line.js
create mode 100644 uni_modules/uview-ui/libs/config/props/lineProgress.js
create mode 100644 uni_modules/uview-ui/libs/config/props/link.js
create mode 100644 uni_modules/uview-ui/libs/config/props/list.js
create mode 100644 uni_modules/uview-ui/libs/config/props/listItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/loadingIcon.js
create mode 100644 uni_modules/uview-ui/libs/config/props/loadingPage.js
create mode 100644 uni_modules/uview-ui/libs/config/props/loadmore.js
create mode 100644 uni_modules/uview-ui/libs/config/props/modal.js
create mode 100644 uni_modules/uview-ui/libs/config/props/navbar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/noNetwork.js
create mode 100644 uni_modules/uview-ui/libs/config/props/noticeBar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/notify.js
create mode 100644 uni_modules/uview-ui/libs/config/props/numberBox.js
create mode 100644 uni_modules/uview-ui/libs/config/props/numberKeyboard.js
create mode 100644 uni_modules/uview-ui/libs/config/props/overlay.js
create mode 100644 uni_modules/uview-ui/libs/config/props/parse.js
create mode 100644 uni_modules/uview-ui/libs/config/props/picker.js
create mode 100644 uni_modules/uview-ui/libs/config/props/popup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/radio.js
create mode 100644 uni_modules/uview-ui/libs/config/props/radioGroup.js
create mode 100644 uni_modules/uview-ui/libs/config/props/rate.js
create mode 100644 uni_modules/uview-ui/libs/config/props/readMore.js
create mode 100644 uni_modules/uview-ui/libs/config/props/row.js
create mode 100644 uni_modules/uview-ui/libs/config/props/rowNotice.js
create mode 100644 uni_modules/uview-ui/libs/config/props/scrollList.js
create mode 100644 uni_modules/uview-ui/libs/config/props/search.js
create mode 100644 uni_modules/uview-ui/libs/config/props/section.js
create mode 100644 uni_modules/uview-ui/libs/config/props/skeleton.js
create mode 100644 uni_modules/uview-ui/libs/config/props/slider.js
create mode 100644 uni_modules/uview-ui/libs/config/props/statusBar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/steps.js
create mode 100644 uni_modules/uview-ui/libs/config/props/stepsItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/sticky.js
create mode 100644 uni_modules/uview-ui/libs/config/props/subsection.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swipeAction.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swipeActionItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swiper.js
create mode 100644 uni_modules/uview-ui/libs/config/props/swipterIndicator.js
create mode 100644 uni_modules/uview-ui/libs/config/props/switch.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tabbar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tabbarItem.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tabs.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tag.js
create mode 100644 uni_modules/uview-ui/libs/config/props/text.js
create mode 100644 uni_modules/uview-ui/libs/config/props/textarea.js
create mode 100644 uni_modules/uview-ui/libs/config/props/toast.js
create mode 100644 uni_modules/uview-ui/libs/config/props/toolbar.js
create mode 100644 uni_modules/uview-ui/libs/config/props/tooltip.js
create mode 100644 uni_modules/uview-ui/libs/config/props/transition.js
create mode 100644 uni_modules/uview-ui/libs/config/props/upload.js
create mode 100644 uni_modules/uview-ui/libs/config/zIndex.js
create mode 100644 uni_modules/uview-ui/libs/css/color.scss
create mode 100644 uni_modules/uview-ui/libs/css/common.scss
create mode 100644 uni_modules/uview-ui/libs/css/components.scss
create mode 100644 uni_modules/uview-ui/libs/css/flex.scss
create mode 100644 uni_modules/uview-ui/libs/css/h5.scss
create mode 100644 uni_modules/uview-ui/libs/css/mixin.scss
create mode 100644 uni_modules/uview-ui/libs/css/mp.scss
create mode 100644 uni_modules/uview-ui/libs/css/nvue.scss
create mode 100644 uni_modules/uview-ui/libs/css/style.components.scss
create mode 100644 uni_modules/uview-ui/libs/css/style.h5.scss
create mode 100644 uni_modules/uview-ui/libs/css/style.mp.scss
create mode 100644 uni_modules/uview-ui/libs/css/style.nvue.scss
create mode 100644 uni_modules/uview-ui/libs/css/style.vue.scss
create mode 100644 uni_modules/uview-ui/libs/css/vue.scss
create mode 100644 uni_modules/uview-ui/libs/function/$parent.js
create mode 100644 uni_modules/uview-ui/libs/function/addUnit.js
create mode 100644 uni_modules/uview-ui/libs/function/bem.js
create mode 100644 uni_modules/uview-ui/libs/function/color.js
create mode 100644 uni_modules/uview-ui/libs/function/colorGradient.js
create mode 100644 uni_modules/uview-ui/libs/function/debounce.js
create mode 100644 uni_modules/uview-ui/libs/function/deepClone.js
create mode 100644 uni_modules/uview-ui/libs/function/deepMerge.js
create mode 100644 uni_modules/uview-ui/libs/function/digit.js
create mode 100644 uni_modules/uview-ui/libs/function/getParent.js
create mode 100644 uni_modules/uview-ui/libs/function/guid.js
create mode 100644 uni_modules/uview-ui/libs/function/index.js
create mode 100644 uni_modules/uview-ui/libs/function/md5.js
create mode 100644 uni_modules/uview-ui/libs/function/platform.js
create mode 100644 uni_modules/uview-ui/libs/function/queryParams.js
create mode 100644 uni_modules/uview-ui/libs/function/random.js
create mode 100644 uni_modules/uview-ui/libs/function/randomArray.js
create mode 100644 uni_modules/uview-ui/libs/function/route.js
create mode 100644 uni_modules/uview-ui/libs/function/sys.js
create mode 100644 uni_modules/uview-ui/libs/function/test.js
create mode 100644 uni_modules/uview-ui/libs/function/throttle.js
create mode 100644 uni_modules/uview-ui/libs/function/timeFormat.js
create mode 100644 uni_modules/uview-ui/libs/function/timeFrom.js
create mode 100644 uni_modules/uview-ui/libs/function/toast.js
create mode 100644 uni_modules/uview-ui/libs/function/trim.js
create mode 100644 uni_modules/uview-ui/libs/function/type2icon.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/adapters/index.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/Request.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/defaults.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/core/settle.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/index.d.ts
create mode 100644 uni_modules/uview-ui/libs/luch-request/index.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/utils.js
create mode 100644 uni_modules/uview-ui/libs/luch-request/utils/clone.js
create mode 100644 uni_modules/uview-ui/libs/mixin/button.js
create mode 100644 uni_modules/uview-ui/libs/mixin/mixin.js
create mode 100644 uni_modules/uview-ui/libs/mixin/mpMixin.js
create mode 100644 uni_modules/uview-ui/libs/mixin/mpShare.js
create mode 100644 uni_modules/uview-ui/libs/mixin/openType.js
create mode 100644 uni_modules/uview-ui/libs/mixin/style.js
create mode 100644 uni_modules/uview-ui/libs/mixin/touch.js
create mode 100644 uni_modules/uview-ui/libs/request/index.js
create mode 100644 uni_modules/uview-ui/libs/store/index.js
create mode 100644 uni_modules/uview-ui/libs/util/area.js
create mode 100644 uni_modules/uview-ui/libs/util/async-validator.js
create mode 100644 uni_modules/uview-ui/libs/util/calendar.js
create mode 100644 uni_modules/uview-ui/libs/util/city.js
create mode 100644 uni_modules/uview-ui/libs/util/dayjs.js
create mode 100644 uni_modules/uview-ui/libs/util/emitter.js
create mode 100644 uni_modules/uview-ui/libs/util/province.js
create mode 100644 uni_modules/uview-ui/libs/util/route.js
create mode 100644 uni_modules/uview-ui/package.json
create mode 100644 uni_modules/uview-ui/theme.scss
create mode 100644 uni_modules/z-paging/changelog.md
create mode 100644 uni_modules/z-paging/components/z-paging-cell/z-paging-cell.vue
create mode 100644 uni_modules/z-paging/components/z-paging-empty-view/z-paging-empty-view.vue
create mode 100644 uni_modules/z-paging/components/z-paging-swiper-item/z-paging-swiper-item.vue
create mode 100644 uni_modules/z-paging/components/z-paging-swiper/z-paging-swiper.vue
create mode 100644 uni_modules/z-paging/components/z-paging/components/z-paging-load-more.vue
create mode 100644 uni_modules/z-paging/components/z-paging/components/z-paging-refresh.vue
create mode 100644 uni_modules/z-paging/components/z-paging/config/index.js
create mode 100644 uni_modules/z-paging/components/z-paging/css/z-paging-main.css
create mode 100644 uni_modules/z-paging/components/z-paging/css/z-paging-static.css
create mode 100644 uni_modules/z-paging/components/z-paging/i18n/en.json
create mode 100644 uni_modules/z-paging/components/z-paging/i18n/index.js
create mode 100644 uni_modules/z-paging/components/z-paging/i18n/zh-Hans.json
create mode 100644 uni_modules/z-paging/components/z-paging/i18n/zh-Hant.json
create mode 100644 uni_modules/z-paging/components/z-paging/js/hooks/useZPaging.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/hooks/useZPagingComp.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/back-to-top.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/common-layout.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/data-handle.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/empty.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/i18n.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/load-more.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/loading.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/nvue.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/refresher.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/scroller.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/modules/virtual-list.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-config.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-constant.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-enum.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-interceptor.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-main.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-mixin.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-static.js
create mode 100644 uni_modules/z-paging/components/z-paging/js/z-paging-utils.js
create mode 100644 uni_modules/z-paging/components/z-paging/wxs/z-paging-renderjs.js
create mode 100644 uni_modules/z-paging/components/z-paging/wxs/z-paging-wxs.wxs
create mode 100644 uni_modules/z-paging/components/z-paging/z-paging.vue
create mode 100644 uni_modules/z-paging/package.json
create mode 100644 uni_modules/z-paging/readme.md
create mode 100644 uni_modules/z-tabs/changelog.md
create mode 100644 uni_modules/z-tabs/components/z-tabs/config/index.js
create mode 100644 uni_modules/z-tabs/components/z-tabs/z-tabs.vue
create mode 100644 uni_modules/z-tabs/package.json
create mode 100644 uni_modules/z-tabs/readme.md
diff --git a/.gitignore b/.gitignore
index 49328b6..895873f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,2 @@
node_modules
-uni_modules
.history
diff --git a/uni_modules/mp-html/README.md b/uni_modules/mp-html/README.md
new file mode 100644
index 0000000..dcfcc2c
--- /dev/null
+++ b/uni_modules/mp-html/README.md
@@ -0,0 +1,193 @@
+## 为减小组件包的大小,默认组件包中不包含编辑、latex 公式等扩展功能,需要使用扩展功能的请参考下方的 插件扩展 栏的说明
+
+## 功能介绍
+- 全端支持(含 `v3、NVUE`)
+- 支持丰富的标签(包括 `table`、`video`、`svg` 等)
+- 支持丰富的事件效果(自动预览图片、链接处理等)
+- 支持设置占位图(加载中、出错时、预览时)
+- 支持锚点跳转、长按复制等丰富功能
+- 支持大部分 *html* 实体
+- 丰富的插件(关键词搜索、内容编辑、`latex` 公式等)
+- 效率高、容错性强且轻量化
+
+查看 [功能介绍](https://jin-yufeng.gitee.io/mp-html/#/overview/feature) 了解更多
+
+## 使用方法
+- `uni_modules` 方式
+ 1. 点击右上角的 `使用 HBuilder X 导入插件` 按钮直接导入项目或点击 `下载插件 ZIP` 按钮下载插件包并解压到项目的 `uni_modules/mp-html` 目录下
+ 2. 在需要使用页面的 `(n)vue` 文件中添加
+ ```html
+
+
+ ```
+ ```javascript
+ export default {
+ data() {
+ return {
+ html: '
Hello World!
'
+ }
+ }
+ }
+ ```
+ 3. 需要更新版本时在 `HBuilder X` 中右键 `uni_modules/mp-html` 目录选择 `从插件市场更新` 即可
+
+- 源码方式
+ 1. 从 [github](https://github.com/jin-yufeng/mp-html/tree/master/dist/uni-app) 或 [gitee](https://gitee.com/jin-yufeng/mp-html/tree/master/dist/uni-app) 下载源码
+ 插件市场的 **非 uni_modules 版本** 无法更新,不建议从插件市场获取
+ 2. 在需要使用页面的 `(n)vue` 文件中添加
+ ```html
+
+ ```
+ ```javascript
+ import mpHtml from '@/components/mp-html/mp-html'
+ export default {
+ // HBuilderX 2.5.5+ 可以通过 easycom 自动引入
+ components: {
+ mpHtml
+ },
+ data() {
+ return {
+ html: 'Hello World!
'
+ }
+ }
+ }
+ ```
+
+- npm 方式
+ 1. 在项目根目录下执行
+ ```bash
+ npm install mp-html
+ ```
+ 2. 在需要使用页面的 `(n)vue` 文件中添加
+ ```html
+
+ ```
+ ```javascript
+ import mpHtml from 'mp-html/dist/uni-app/components/mp-html/mp-html'
+ export default {
+ // 不可省略
+ components: {
+ mpHtml
+ },
+ data() {
+ return {
+ html: 'Hello World!
'
+ }
+ }
+ }
+ ```
+ 3. 需要更新版本时执行以下命令即可
+ ```bash
+ npm update mp-html
+ ```
+
+ 使用 *cli* 方式运行的项目,通过 *npm* 方式引入时,需要在 *vue.config.js* 中配置 *transpileDependencies*,详情可见 [#330](https://github.com/jin-yufeng/mp-html/issues/330#issuecomment-913617687)
+ 如果在 **nvue** 中使用还要将 `dist/uni-app/static` 目录下的内容拷贝到项目的 `static` 目录下,否则无法运行
+
+查看 [快速开始](https://jin-yufeng.gitee.io/mp-html/#/overview/quickstart) 了解更多
+
+## 组件属性
+
+| 属性 | 类型 | 默认值 | 说明 |
+|:---:|:---:|:---:|---|
+| container-style | String | | 容器的样式([2.1.0+](https://jin-yufeng.gitee.io/mp-html/#/changelog/changelog#v210)) |
+| content | String | | 用于渲染的 html 字符串 |
+| copy-link | Boolean | true | 是否允许外部链接被点击时自动复制 |
+| domain | String | | 主域名(用于链接拼接) |
+| error-img | String | | 图片出错时的占位图链接 |
+| lazy-load | Boolean | false | 是否开启图片懒加载 |
+| loading-img | String | | 图片加载过程中的占位图链接 |
+| pause-video | Boolean | true | 是否在播放一个视频时自动暂停其他视频 |
+| preview-img | Boolean | true | 是否允许图片被点击时自动预览 |
+| scroll-table | Boolean | false | 是否给每个表格添加一个滚动层使其能单独横向滚动 |
+| selectable | Boolean | false | 是否开启文本长按复制 |
+| set-title | Boolean | true | 是否将 title 标签的内容设置到页面标题 |
+| show-img-menu | Boolean | true | 是否允许图片被长按时显示菜单 |
+| tag-style | Object | | 设置标签的默认样式 |
+| use-anchor | Boolean | false | 是否使用锚点链接 |
+
+查看 [属性](https://jin-yufeng.gitee.io/mp-html/#/basic/prop) 了解更多
+
+## 组件事件
+
+| 名称 | 触发时机 |
+|:---:|---|
+| load | dom 树加载完毕时 |
+| ready | 图片加载完毕时 |
+| error | 发生渲染错误时 |
+| imgtap | 图片被点击时 |
+| linktap | 链接被点击时 |
+| play | 音视频播放时 |
+
+查看 [事件](https://jin-yufeng.gitee.io/mp-html/#/basic/event) 了解更多
+
+## api
+组件实例上提供了一些 `api` 方法可供调用
+
+| 名称 | 作用 |
+|:---:|---|
+| in | 将锚点跳转的范围限定在一个 scroll-view 内 |
+| navigateTo | 锚点跳转 |
+| getText | 获取文本内容 |
+| getRect | 获取富文本内容的位置和大小 |
+| setContent | 设置富文本内容 |
+| imgList | 获取所有图片的数组 |
+| pauseMedia | 暂停播放音视频([2.2.2+](https://jin-yufeng.gitee.io/mp-html/#/changelog/changelog#v222)) |
+| setPlaybackRate | 设置音视频播放速率([2.4.0+](https://jin-yufeng.gitee.io/mp-html/#/changelog/changelog#v240)) |
+
+查看 [api](https://jin-yufeng.gitee.io/mp-html/#/advanced/api) 了解更多
+
+## 插件扩展
+除基本功能外,本组件还提供了丰富的扩展,可按照需要选用
+
+| 名称 | 作用 |
+|:---:|---|
+| audio | 音乐播放器 |
+| editable | 富文本 **编辑**([示例项目](https://mp-html.oss-cn-hangzhou.aliyuncs.com/editable.zip)) |
+| emoji | 解析 emoji |
+| highlight | 代码块高亮显示 |
+| markdown | 渲染 markdown |
+| search | 关键词搜索 |
+| style | 匹配 style 标签中的样式 |
+| txv-video | 使用腾讯视频 |
+| img-cache | 图片缓存 by [@PentaTea](https://github.com/PentaTea) |
+| latex | 渲染 latex 公式 by [@Zeng-J](https://github.com/Zeng-J) |
+
+从插件市场导入的包中 **不含有** 扩展插件,使用插件需通过微信小程序 `富文本插件` 获取或参考以下方法进行打包:
+1. 获取完整组件包
+ ```bash
+ npm install mp-html
+ ```
+2. 编辑 `tools/config.js` 中的 `plugins` 项,选择需要的插件
+3. 生成新的组件包
+ 在 `node_modules/mp-html` 目录下执行
+ ```bash
+ npm install
+ npm run build:uni-app
+ ```
+4. 拷贝 `dist/uni-app` 中的内容到项目根目录
+
+查看 [插件](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin) 了解更多
+
+## 关于 nvue
+`nvue` 使用原生渲染,不支持部分 `css` 样式,为实现和 `html` 相同的效果,组件内部通过 `web-view` 进行渲染,性能上差于原生,根据 `weex` 官方建议,`web` 标签仅应用在非常规的降级场景。因此,如果通过原生的方式(如 `richtext`)能够满足需要,则不建议使用本组件,如果有较多的富文本内容,则可以直接使用 `vue` 页面
+由于渲染方式与其他端不同,有以下限制:
+1. 不支持 `lazy-load` 属性
+2. 视频不支持全屏播放
+3. 如果在 `flex-direction: row` 的容器中使用,需要给组件设置宽度或设置 `flex: 1` 占满剩余宽度
+
+纯 `nvue` 模式下,[此问题](https://ask.dcloud.net.cn/question/119678) 修复前,不支持通过 `uni_modules` 引入,需要本地引入(将 [dist/uni-app](https://github.com/jin-yufeng/mp-html/tree/master/dist/uni-app) 中的内容拷贝到项目根目录下)
+
+## 立即体验
+
+
+## 问题反馈
+遇到问题时,请先查阅 [常见问题](https://jin-yufeng.gitee.io/mp-html/#/question/faq) 和 [issue](https://github.com/jin-yufeng/mp-html/issues) 中是否已有相同的问题
+可通过 [issue](https://github.com/jin-yufeng/mp-html/issues/new/choose) 、插件问答或发送邮件到 [mp_html@126.com](mailto:mp_html@126.com) 提问,不建议在评论区提问(不方便回复)
+提问请严格按照 [issue 模板](https://github.com/jin-yufeng/mp-html/issues/new/choose) ,描述清楚使用环境、`html` 内容或可复现的 `demo` 项目以及复现方式,对于 **描述不清**、**无法复现** 或重复的问题将不予回复
+
+欢迎加入 `QQ` 交流群:
+群1(已满):`699734691`
+群2:`778239129`
+
+查看 [问题反馈](https://jin-yufeng.gitee.io/mp-html/#/question/feedback) 了解更多
diff --git a/uni_modules/mp-html/changelog.md b/uni_modules/mp-html/changelog.md
new file mode 100644
index 0000000..e313d38
--- /dev/null
+++ b/uni_modules/mp-html/changelog.md
@@ -0,0 +1,129 @@
+## v2.4.2(2023-05-14)
+1. `A` `editable` 插件支持修改文字颜色 [详细](https://github.com/jin-yufeng/mp-html/issues/254)
+2. `F` 修复了 `svg` 中有 `style` 不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/505)
+3. `F` 修复了使用旧版编译器可能报错 `Bad attr nodes` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/472)
+4. `F` 修复了 `app` 端可能出现无法读取 `lazyLoad` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/513)
+5. `F` 修复了 `editable` 插件在点击换图时未拼接 `domain` 的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/497) by [@TwoKe945](https://github.com/TwoKe945)
+6. `F` 修复了 `latex` 插件部分情况下不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/515)
+7. `F` 修复了 `editable` 插件点击音视频时其他标签框不消失的问题
+## v2.4.1(2022-12-25)
+1. `F` 修复了没有图片时 `ready` 事件可能不触发的问题
+2. `F` 修复了加载过程中可能出现 `Root label not found` 错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/470)
+3. `F` 修复了 `audio` 插件退出页面可能会报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/457)
+4. `F` 修复了 `vue3` 运行到 `app` 在 `HBuilder X 3.6.10` 以上报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/480)
+5. `F` 修复了 `nvue` 端链接中包含 `%22` 时可能无法显示的问题
+6. `F` 修复了 `vue3` 使用 `highlight` 插件可能报错的问题
+## v2.4.0(2022-08-27)
+1. `A` 增加了 [setPlaybackRate](https://jin-yufeng.gitee.io/mp-html/#/advanced/api#setPlaybackRate) 的 `api`,可以设置音视频的播放速率 [详细](https://github.com/jin-yufeng/mp-html/issues/452)
+2. `A` 示例小程序代码开源 [详细](https://github.com/jin-yufeng/mp-html-demo)
+3. `U` 优化 `ready` 事件触发时机,未设置懒加载的情况下基本可以准确触发 [详细](https://github.com/jin-yufeng/mp-html/issues/195)
+4. `U` `highlight` 插件在编辑状态下不进行高亮处理,便于编辑
+5. `F` 修复了 `flex` 布局下图片大小可能不正确的问题
+6. `F` 修复了 `selectable` 属性没有设置 `force` 也可能出现渲染异常的问题
+7. `F` 修复了表格中的图片大小可能不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/448)
+8. `F` 修复了含有合并单元格的表格可能无法设置竖直对齐的问题
+9. `F` 修复了 `editable` 插件在 `scroll-view` 中使用时工具条位置可能不正确的问题
+10. `F` 修复了 `vue3` 使用 [search](advanced/plugin#search) 插件可能导致错误换行的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/449)
+## v2.3.2(2022-08-13)
+1. `A` 增加 [latex](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#latex) 插件,可以渲染数学公式 [详细](https://github.com/jin-yufeng/mp-html/pull/447) by [@Zeng-J](https://github.com/Zeng-J)
+2. `U` 优化根节点下有很多标签的长内容渲染速度
+3. `U` `highlight` 插件适配 `lang-xxx` 格式
+4. `F` 修复了 `table` 标签设置 `border` 属性后可能无法修改边框样式的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/439) by [@zouxingjie](https://github.com/zouxingjie)
+5. `F` 修复了 `editable` 插件输入连续空格无效的问题
+6. `F` 修复了 `vue3` 图片设置 `inline` 会报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/438)
+7. `F` 修复了 `vue3` 使用 `table` 可能报错的问题
+## v2.3.1(2022-05-20)
+1. `U` `app` 端支持使用本地图片
+2. `U` 优化了微信小程序 `selectable` 属性在 `ios` 端的处理 [详细](https://jin-yufeng.gitee.io/mp-html/#/basic/prop#selectable)
+3. `F` 修复了 `editable` 插件不在顶部时 `tooltip` 位置可能错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/430)
+4. `F` 修复了 `vue3` 运行到微信小程序可能报错丢失内容的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/414)
+5. `F` 修复了 `vue3` 部分标签可能被错误换行的问题
+6. `F` 修复了 `editable` 插件 `app` 端插入视频无法预览的问题
+## v2.3.0(2022-04-01)
+1. `A` 增加了 `play` 事件,音视频播放时触发,可用于与页面其他音视频进行互斥播放 [详细](basic/event#play)
+2. `U` `show-img-menu` 属性支持控制预览时是否长按弹出菜单
+3. `U` 优化 `wxs` 处理,提高渲染性能 [详细](https://developers.weixin.qq.com/community/develop/article/doc/0006cc2b204740f601bd43fa25a413)
+4. `U` `video` 标签支持 `object-fit` 属性
+5. `U` 增加支持一些常用实体编码 [详细](https://github.com/jin-yufeng/mp-html/issues/418)
+6. `F` 修复了图片仅设置高度可能不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/410)
+7. `F` 修复了 `video` 标签高度设置为 `auto` 不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/411)
+8. `F` 修复了使用 `grid` 布局时可能样式错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/413)
+9. `F` 修复了含有合并单元格的表格部分情况下显示异常的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/417)
+10. `F` 修复了 `editable` 插件连续插入内容时顺序不正确的问题
+11. `F` 修复了 `uni-app` 包 `vue3` 使用 `audio` 插件报错的问题
+12. `F` 修复了 `uni-app` 包 `highlight` 插件使用自定义的 `prism.min.js` 报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/416)
+## v2.2.2(2022-02-26)
+1. `A` 增加了 [pauseMedia](https://jin-yufeng.gitee.io/mp-html/#/advanced/api#pauseMedia) 的 `api`,可用于暂停播放音视频 [详细](https://github.com/jin-yufeng/mp-html/issues/317)
+2. `U` 优化了长内容的加载速度
+3. `U` 适配 `vue3` [#389](https://github.com/jin-yufeng/mp-html/issues/389)、[#398](https://github.com/jin-yufeng/mp-html/pull/398) by [@zhouhuafei](https://github.com/zhouhuafei)、[#400](https://github.com/jin-yufeng/mp-html/issues/400)
+4. `F` 修复了小程序端图片高度设置为百分比时可能不显示的问题
+5. `F` 修复了 `highlight` 插件部分情况下可能显示不完整的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/403)
+## v2.2.1(2021-12-24)
+1. `A` `editable` 插件增加上下移动标签功能
+2. `U` `editable` 插件支持在文本中间光标处插入内容
+3. `F` 修复了 `nvue` 端设置 `margin` 后可能导致高度不正确的问题
+4. `F` 修复了 `highlight` 插件使用压缩版的 `prism.css` 可能导致背景失效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/367)
+5. `F` 修复了编辑状态下使用 `emoji` 插件内容为空时可能报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/371)
+6. `F` 修复了使用 `editable` 插件后将 `selectable` 属性设置为 `force` 不生效的问题
+## v2.2.0(2021-10-12)
+1. `A` 增加 `customElements` 配置项,便于添加自定义功能性标签 [详细](https://github.com/jin-yufeng/mp-html/issues/350)
+2. `A` `editable` 插件增加切换音视频自动播放状态的功能 [详细](https://github.com/jin-yufeng/mp-html/pull/341) by [@leeseett](https://github.com/leeseett)
+3. `A` `editable` 插件删除媒体标签时触发 `remove` 事件,便于删除已上传的文件
+4. `U` `editable` 插件 `insertImg` 方法支持同时插入多张图片 [详细](https://github.com/jin-yufeng/mp-html/issues/342)
+5. `U` `editable` 插入图片和音视频时支持拼接 `domian` 主域名
+6. `F` 修复了内部链接参数中包含 `://` 时被认为是外部链接的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/356)
+7. `F` 修复了部分 `svg` 标签名或属性名大小写不正确时不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/351)
+8. `F` 修复了 `nvue` 页面运行到非 `app` 平台时可能样式错误的问题
+## v2.1.5(2021-08-13)
+1. `A` 增加支持标签的 `dir` 属性
+2. `F` 修复了 `ruby` 标签文字与拼音没有居中对齐的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/325)
+3. `F` 修复了音视频标签内有 `a` 标签时可能无法播放的问题
+4. `F` 修复了 `externStyle` 中的 `class` 名包含下划线或数字时可能失效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/326)
+5. `F` 修复了 `h5` 端引入 `externStyle` 可能不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/326)
+## v2.1.4(2021-07-14)
+1. `F` 修复了 `rt` 标签无法设置样式的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/318)
+2. `F` 修复了表格中有单元格同时合并行和列时可能显示不正确的问题
+3. `F` 修复了 `app` 端无法关闭图片长按菜单的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/322)
+4. `F` 修复了 `editable` 插件只能添加图片链接不能修改的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/312) by [@leeseett](https://github.com/leeseett)
+## v2.1.3(2021-06-12)
+1. `A` `editable` 插件增加 `insertTable` 方法
+2. `U` `editable` 插件支持编辑表格中的空白单元格 [详细](https://github.com/jin-yufeng/mp-html/issues/310)
+3. `F` 修复了 `externStyle` 中使用伪类可能失效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/298)
+4. `F` 修复了多个组件同时使用时 `tag-style` 属性时可能互相影响的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/305) by [@woodguoyu](https://github.com/woodguoyu)
+5. `F` 修复了包含 `linearGradient` 的 `svg` 可能无法显示的问题
+6. `F` 修复了编译到头条小程序时可能报错的问题
+7. `F` 修复了 `nvue` 端不触发 `click` 事件的问题
+8. `F` 修复了 `editable` 插件尾部插入时无法撤销的问题
+9. `F` 修复了 `editable` 插件的 `insertHtml` 方法只能在末尾插入的问题
+10. `F` 修复了 `editable` 插件插入音频不显示的问题
+## v2.1.2(2021-04-24)
+1. `A` 增加了 [img-cache](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#img-cache) 插件,可以在 `app` 端缓存图片 [详细](https://github.com/jin-yufeng/mp-html/issues/292) by [@PentaTea](https://github.com/PentaTea)
+2. `U` 支持通过 `container-style` 属性设置 `white-space` 来保留连续空格和换行符 [详细](https://jin-yufeng.gitee.io/mp-html/#/question/faq#space)
+3. `U` 代码风格符合 [standard](https://standardjs.com) 标准
+4. `U` `editable` 插件编辑状态下支持预览视频 [详细](https://github.com/jin-yufeng/mp-html/issues/286)
+5. `F` 修复了 `svg` 标签内嵌 `svg` 时无法显示的问题
+6. `F` 修复了编译到支付宝和头条小程序时部分区域不可复制的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/291)
+## v2.1.1(2021-04-09)
+1. 修复了对 `p` 标签设置 `tag-style` 可能不生效的问题
+2. 修复了 `svg` 标签中的文本无法显示的问题
+3. 修复了使用 `editable` 插件编辑表格时可能报错的问题
+4. 修复了使用 `highlight` 插件运行到头条小程序时可能没有样式的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/280)
+5. 修复了使用 `editable` 插件 `editable` 属性为 `false` 时会报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/284)
+6. 修复了 `style` 插件连续子选择器失效的问题
+7. 修复了 `editable` 插件无法修改图片和字体大小的问题
+## v2.1.0.2(2021-03-21)
+修复了 `nvue` 端使用可能报错的问题
+## v2.1.0(2021-03-20)
+1. `A` 增加了 [container-style](https://jin-yufeng.gitee.io/mp-html/#/basic/prop#container-style) 属性 [详细](https://gitee.com/jin-yufeng/mp-html/pulls/1)
+2. `A` 增加支持 `strike` 标签
+3. `A` `editable` 插件增加 `placeholder` 属性 [详细](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#editable)
+4. `A` `editable` 插件增加 `insertHtml` 方法 [详细](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#editable)
+5. `U` 外部样式支持标签名选择器 [详细](https://jin-yufeng.gitee.io/mp-html/#/overview/quickstart#setting)
+6. `F` 修复了 `nvue` 端部分情况下可能不显示的问题
+## v2.0.5(2021-03-12)
+1. `U` [linktap](https://jin-yufeng.gitee.io/mp-html/#/basic/event#linktap) 事件增加返回内部文本内容 `innerText` [详细](https://github.com/jin-yufeng/mp-html/issues/271)
+2. `U` [selectable](https://jin-yufeng.gitee.io/mp-html/#/basic/prop#selectable) 属性设置为 `force` 时能够在微信 `iOS` 端生效(文本块会变成 `inline-block`) [详细](https://github.com/jin-yufeng/mp-html/issues/267)
+3. `F` 修复了部分情况下竖向无法滚动的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/182)
+4. `F` 修复了多次修改富文本数据时部分内容可能不显示的问题
+5. `F` 修复了 [腾讯视频](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#txv-video) 插件可能无法播放的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/265)
+6. `F` 修复了 [highlight](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#highlight) 插件没有设置高亮语言时没有应用默认样式的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/276) by [@fuzui](https://github.com/fuzui)
diff --git a/uni_modules/mp-html/components/mp-html/mp-html.vue b/uni_modules/mp-html/components/mp-html/mp-html.vue
new file mode 100644
index 0000000..d4cad07
--- /dev/null
+++ b/uni_modules/mp-html/components/mp-html/mp-html.vue
@@ -0,0 +1,498 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/mp-html/components/mp-html/node/node.vue b/uni_modules/mp-html/components/mp-html/node/node.vue
new file mode 100644
index 0000000..c8fa062
--- /dev/null
+++ b/uni_modules/mp-html/components/mp-html/node/node.vue
@@ -0,0 +1,576 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{n.text}}
+
+
+ {{n.text}}
+
+ \n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/mp-html/components/mp-html/parser.js b/uni_modules/mp-html/components/mp-html/parser.js
new file mode 100644
index 0000000..e2e7a87
--- /dev/null
+++ b/uni_modules/mp-html/components/mp-html/parser.js
@@ -0,0 +1,1335 @@
+/**
+ * @fileoverview html 解析器
+ */
+
+// 配置
+const config = {
+ // 信任的标签(保持标签名不变)
+ trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
+
+ // 块级标签(转为 div,其他的非信任标签转为 span)
+ blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
+
+ // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3
+ // 行内标签
+ inlineTags: makeMap('abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup'),
+ // #endif
+
+ // 要移除的标签
+ ignoreTags: makeMap('area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr'),
+
+ // 自闭合的标签
+ voidTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
+
+ // html 实体
+ entities: {
+ lt: '<',
+ gt: '>',
+ quot: '"',
+ apos: "'",
+ ensp: '\u2002',
+ emsp: '\u2003',
+ nbsp: '\xA0',
+ semi: ';',
+ ndash: '–',
+ mdash: '—',
+ middot: '·',
+ lsquo: '‘',
+ rsquo: '’',
+ ldquo: '“',
+ rdquo: '”',
+ bull: '•',
+ hellip: '…',
+ larr: '←',
+ uarr: '↑',
+ rarr: '→',
+ darr: '↓'
+ },
+
+ // 默认的标签样式
+ tagStyle: {
+ // #ifndef APP-PLUS-NVUE
+ address: 'font-style:italic',
+ big: 'display:inline;font-size:1.2em',
+ caption: 'display:table-caption;text-align:center',
+ center: 'text-align:center',
+ cite: 'font-style:italic',
+ dd: 'margin-left:40px',
+ mark: 'background-color:yellow',
+ pre: 'font-family:monospace;white-space:pre',
+ s: 'text-decoration:line-through',
+ small: 'display:inline;font-size:0.8em',
+ strike: 'text-decoration:line-through',
+ u: 'text-decoration:underline'
+ // #endif
+ },
+
+ // svg 大小写对照表
+ svgDict: {
+ animatetransform: 'animateTransform',
+ lineargradient: 'linearGradient',
+ viewbox: 'viewBox',
+ attributename: 'attributeName',
+ repeatcount: 'repeatCount',
+ repeatdur: 'repeatDur'
+ }
+}
+const tagSelector={}
+const {
+ windowWidth,
+ // #ifdef MP-WEIXIN
+ system
+ // #endif
+} = uni.getSystemInfoSync()
+const blankChar = makeMap(' ,\r,\n,\t,\f')
+let idIndex = 0
+
+// #ifdef H5 || APP-PLUS
+config.ignoreTags.iframe = undefined
+config.trustTags.iframe = true
+config.ignoreTags.embed = undefined
+config.trustTags.embed = true
+// #endif
+// #ifdef APP-PLUS-NVUE
+config.ignoreTags.source = undefined
+config.ignoreTags.style = undefined
+// #endif
+
+/**
+ * @description 创建 map
+ * @param {String} str 逗号分隔
+ */
+function makeMap (str) {
+ const map = Object.create(null)
+ const list = str.split(',')
+ for (let i = list.length; i--;) {
+ map[list[i]] = true
+ }
+ return map
+}
+
+/**
+ * @description 解码 html 实体
+ * @param {String} str 要解码的字符串
+ * @param {Boolean} amp 要不要解码 &
+ * @returns {String} 解码后的字符串
+ */
+function decodeEntity (str, amp) {
+ let i = str.indexOf('&')
+ while (i !== -1) {
+ const j = str.indexOf(';', i + 3)
+ let code
+ if (j === -1) break
+ if (str[i + 1] === '#') {
+ // { 形式的实体
+ code = parseInt((str[i + 2] === 'x' ? '0' : '') + str.substring(i + 2, j))
+ if (!isNaN(code)) {
+ str = str.substr(0, i) + String.fromCharCode(code) + str.substr(j + 1)
+ }
+ } else {
+ // 形式的实体
+ code = str.substring(i + 1, j)
+ if (config.entities[code] || (code === 'amp' && amp)) {
+ str = str.substr(0, i) + (config.entities[code] || '&') + str.substr(j + 1)
+ }
+ }
+ i = str.indexOf('&', i + 1)
+ }
+ return str
+}
+
+/**
+ * @description 合并多个块级标签,加快长内容渲染
+ * @param {Array} nodes 要合并的标签数组
+ */
+function mergeNodes (nodes) {
+ let i = nodes.length - 1
+ for (let j = i; j >= -1; j--) {
+ if (j === -1 || nodes[j].c || !nodes[j].name || (nodes[j].name !== 'div' && nodes[j].name !== 'p' && nodes[j].name[0] !== 'h') || (nodes[j].attrs.style || '').includes('inline')) {
+ if (i - j >= 5) {
+ nodes.splice(j + 1, i - j, {
+ name: 'div',
+ attrs: {},
+ children: nodes.slice(j + 1, i + 1)
+ })
+ }
+ i = j - 1
+ }
+ }
+}
+
+/**
+ * @description html 解析器
+ * @param {Object} vm 组件实例
+ */
+function Parser (vm) {
+ this.options = vm || {}
+ this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle)
+ this.imgList = vm.imgList || []
+ this.imgList._unloadimgs = 0
+ this.plugins = vm.plugins || []
+ this.attrs = Object.create(null)
+ this.stack = []
+ this.nodes = []
+ this.pre = (this.options.containerStyle || '').includes('white-space') && this.options.containerStyle.includes('pre') ? 2 : 0
+}
+
+/**
+ * @description 执行解析
+ * @param {String} content 要解析的文本
+ */
+Parser.prototype.parse = function (content) {
+ // 插件处理
+ for (let i = this.plugins.length; i--;) {
+ if (this.plugins[i].onUpdate) {
+ content = this.plugins[i].onUpdate(content, config) || content
+ }
+ }
+
+ new Lexer(this).parse(content)
+ // 出栈未闭合的标签
+ while (this.stack.length) {
+ this.popNode()
+ }
+ if (this.nodes.length > 50) {
+ mergeNodes(this.nodes)
+ }
+ return this.nodes
+}
+
+/**
+ * @description 将标签暴露出来(不被 rich-text 包含)
+ */
+Parser.prototype.expose = function () {
+ // #ifndef APP-PLUS-NVUE
+ for (let i = this.stack.length; i--;) {
+ const item = this.stack[i]
+ if (item.c || item.name === 'a' || item.name === 'video' || item.name === 'audio') return
+ item.c = 1
+ }
+ // #endif
+}
+
+/**
+ * @description 处理插件
+ * @param {Object} node 要处理的标签
+ * @returns {Boolean} 是否要移除此标签
+ */
+Parser.prototype.hook = function (node) {
+ for (let i = this.plugins.length; i--;) {
+ if (this.plugins[i].onParse && this.plugins[i].onParse(node, this) === false) {
+ return false
+ }
+ }
+ return true
+}
+
+/**
+ * @description 将链接拼接上主域名
+ * @param {String} url 需要拼接的链接
+ * @returns {String} 拼接后的链接
+ */
+Parser.prototype.getUrl = function (url) {
+ const domain = this.options.domain
+ if (url[0] === '/') {
+ if (url[1] === '/') {
+ // // 开头的补充协议名
+ url = (domain ? domain.split('://')[0] : 'http') + ':' + url
+ } else if (domain) {
+ // 否则补充整个域名
+ url = domain + url
+ } /* #ifdef APP-PLUS */ else {
+ url = plus.io.convertLocalFileSystemURL(url)
+ } /* #endif */
+ } else if (!url.includes('data:') && !url.includes('://')) {
+ if (domain) {
+ url = domain + '/' + url
+ } /* #ifdef APP-PLUS */ else {
+ url = plus.io.convertLocalFileSystemURL(url)
+ } /* #endif */
+ }
+ return url
+}
+
+/**
+ * @description 解析样式表
+ * @param {Object} node 标签
+ * @returns {Object}
+ */
+Parser.prototype.parseStyle = function (node) {
+ const attrs = node.attrs
+ const list = (this.tagStyle[node.name] || '').split(';').concat((attrs.style || '').split(';'))
+ const styleObj = {}
+ let tmp = ''
+
+ if (attrs.id && !this.xml) {
+ // 暴露锚点
+ if (this.options.useAnchor) {
+ this.expose()
+ } else if (node.name !== 'img' && node.name !== 'a' && node.name !== 'video' && node.name !== 'audio') {
+ attrs.id = undefined
+ }
+ }
+
+ // 转换 width 和 height 属性
+ if (attrs.width) {
+ styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px')
+ attrs.width = undefined
+ }
+ if (attrs.height) {
+ styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px')
+ attrs.height = undefined
+ }
+
+ for (let i = 0, len = list.length; i < len; i++) {
+ const info = list[i].split(':')
+ if (info.length < 2) continue
+ const key = info.shift().trim().toLowerCase()
+ let value = info.join(':').trim()
+ if ((value[0] === '-' && value.lastIndexOf('-') > 0) || value.includes('safe')) {
+ // 兼容性的 css 不压缩
+ tmp += `;${key}:${value}`
+ } else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) {
+ // 重复的样式进行覆盖
+ if (value.includes('url')) {
+ // 填充链接
+ let j = value.indexOf('(') + 1
+ if (j) {
+ while (value[j] === '"' || value[j] === "'" || blankChar[value[j]]) {
+ j++
+ }
+ value = value.substr(0, j) + this.getUrl(value.substr(j))
+ }
+ } else if (value.includes('rpx')) {
+ // 转换 rpx(rich-text 内部不支持 rpx)
+ value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px')
+ }
+ styleObj[key] = value
+ }
+ }
+
+ node.attrs.style = tmp
+ return styleObj
+}
+
+/**
+ * @description 解析到标签名
+ * @param {String} name 标签名
+ * @private
+ */
+Parser.prototype.onTagName = function (name) {
+ this.tagName = this.xml ? name : name.toLowerCase()
+ if (this.tagName === 'svg') {
+ this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
+ config.ignoreTags.style = undefined // svg 标签内 style 可用
+ }
+}
+
+/**
+ * @description 解析到属性名
+ * @param {String} name 属性名
+ * @private
+ */
+Parser.prototype.onAttrName = function (name) {
+ name = this.xml ? name : name.toLowerCase()
+ if (name.substr(0, 5) === 'data-') {
+ if (name === 'data-src' && !this.attrs.src) {
+ // data-src 自动转为 src
+ this.attrName = 'src'
+ } else if (this.tagName === 'img' || this.tagName === 'a') {
+ // a 和 img 标签保留 data- 的属性,可以在 imgtap 和 linktap 事件中使用
+ this.attrName = name
+ } else {
+ // 剩余的移除以减小大小
+ this.attrName = undefined
+ }
+ } else {
+ this.attrName = name
+ this.attrs[name] = 'T' // boolean 型属性缺省设置
+ }
+}
+
+/**
+ * @description 解析到属性值
+ * @param {String} val 属性值
+ * @private
+ */
+Parser.prototype.onAttrVal = function (val) {
+ const name = this.attrName || ''
+ if (name === 'style' || name === 'href') {
+ // 部分属性进行实体解码
+ this.attrs[name] = decodeEntity(val, true)
+ } else if (name.includes('src')) {
+ // 拼接主域名
+ this.attrs[name] = this.getUrl(decodeEntity(val, true))
+ } else if (name) {
+ this.attrs[name] = val
+ }
+}
+
+/**
+ * @description 解析到标签开始
+ * @param {Boolean} selfClose 是否有自闭合标识 />
+ * @private
+ */
+Parser.prototype.onOpenTag = function (selfClose) {
+ // 拼装 node
+ const node = Object.create(null)
+ node.name = this.tagName
+ node.attrs = this.attrs
+ // 避免因为自动 diff 使得 type 被设置为 null 导致部分内容不显示
+ if (this.options.nodes.length) {
+ node.type = 'node'
+ }
+ this.attrs = Object.create(null)
+
+ const attrs = node.attrs
+ const parent = this.stack[this.stack.length - 1]
+ const siblings = parent ? parent.children : this.nodes
+ const close = this.xml ? selfClose : config.voidTags[node.name]
+
+ // 替换标签名选择器
+ if (tagSelector[node.name]) {
+ attrs.class = tagSelector[node.name] + (attrs.class ? ' ' + attrs.class : '')
+ }
+
+ // 转换 embed 标签
+ if (node.name === 'embed') {
+ // #ifndef H5 || APP-PLUS
+ const src = attrs.src || ''
+ // 按照后缀名和 type 将 embed 转为 video 或 audio
+ if (src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8') || (attrs.type || '').includes('video')) {
+ node.name = 'video'
+ } else if (src.includes('.mp3') || src.includes('.wav') || src.includes('.aac') || src.includes('.m4a') || (attrs.type || '').includes('audio')) {
+ node.name = 'audio'
+ }
+ if (attrs.autostart) {
+ attrs.autoplay = 'T'
+ }
+ attrs.controls = 'T'
+ // #endif
+ // #ifdef H5 || APP-PLUS
+ this.expose()
+ // #endif
+ }
+
+ // #ifndef APP-PLUS-NVUE
+ // 处理音视频
+ if (node.name === 'video' || node.name === 'audio') {
+ // 设置 id 以便获取 context
+ if (node.name === 'video' && !attrs.id) {
+ attrs.id = 'v' + idIndex++
+ }
+ // 没有设置 controls 也没有设置 autoplay 的自动设置 controls
+ if (!attrs.controls && !attrs.autoplay) {
+ attrs.controls = 'T'
+ }
+ // 用数组存储所有可用的 source
+ node.src = []
+ if (attrs.src) {
+ node.src.push(attrs.src)
+ attrs.src = undefined
+ }
+ this.expose()
+ }
+ // #endif
+
+ // 处理自闭合标签
+ if (close) {
+ if (!this.hook(node) || config.ignoreTags[node.name]) {
+ // 通过 base 标签设置主域名
+ if (node.name === 'base' && !this.options.domain) {
+ this.options.domain = attrs.href
+ } /* #ifndef APP-PLUS-NVUE */ else if (node.name === 'source' && parent && (parent.name === 'video' || parent.name === 'audio') && attrs.src) {
+ // 设置 source 标签(仅父节点为 video 或 audio 时有效)
+ parent.src.push(attrs.src)
+ } /* #endif */
+ return
+ }
+
+ // 解析 style
+ const styleObj = this.parseStyle(node)
+
+ // 处理图片
+ if (node.name === 'img') {
+ if (attrs.src) {
+ // 标记 webp
+ if (attrs.src.includes('webp')) {
+ node.webp = 'T'
+ }
+ // data url 图片如果没有设置 original-src 默认为不可预览的小图片
+ if (attrs.src.includes('data:') && !attrs['original-src']) {
+ attrs.ignore = 'T'
+ }
+ if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) {
+ for (let i = this.stack.length; i--;) {
+ const item = this.stack[i]
+ if (item.name === 'a') {
+ node.a = item.attrs
+ }
+ if (item.name === 'table' && !node.webp && !attrs.src.includes('cloud://')) {
+ if (!styleObj.display || styleObj.display.includes('inline')) {
+ node.t = 'inline-block'
+ } else {
+ node.t = styleObj.display
+ }
+ styleObj.display = undefined
+ }
+ // #ifndef H5 || APP-PLUS
+ const style = item.attrs.style || ''
+ if (style.includes('flex:') && !style.includes('flex:0') && !style.includes('flex: 0') && (!styleObj.width || parseInt(styleObj.width) > 100)) {
+ styleObj.width = '100% !important'
+ styleObj.height = ''
+ for (let j = i + 1; j < this.stack.length; j++) {
+ this.stack[j].attrs.style = (this.stack[j].attrs.style || '').replace('inline-', '')
+ }
+ } else if (style.includes('flex') && styleObj.width === '100%') {
+ for (let j = i + 1; j < this.stack.length; j++) {
+ const style = this.stack[j].attrs.style || ''
+ if (!style.includes(';width') && !style.includes(' width') && style.indexOf('width') !== 0) {
+ styleObj.width = ''
+ break
+ }
+ }
+ } else if (style.includes('inline-block')) {
+ if (styleObj.width && styleObj.width[styleObj.width.length - 1] === '%') {
+ item.attrs.style += ';max-width:' + styleObj.width
+ styleObj.width = ''
+ } else {
+ item.attrs.style += ';max-width:100%'
+ }
+ }
+ // #endif
+ item.c = 1
+ }
+ attrs.i = this.imgList.length.toString()
+ let src = attrs['original-src'] || attrs.src
+ // #ifndef H5 || MP-ALIPAY || APP-PLUS || MP-360
+ if (this.imgList.includes(src)) {
+ // 如果有重复的链接则对域名进行随机大小写变换避免预览时错位
+ let i = src.indexOf('://')
+ if (i !== -1) {
+ i += 3
+ let newSrc = src.substr(0, i)
+ for (; i < src.length; i++) {
+ if (src[i] === '/') break
+ newSrc += Math.random() > 0.5 ? src[i].toUpperCase() : src[i]
+ }
+ newSrc += src.substr(i)
+ src = newSrc
+ }
+ }
+ // #endif
+ this.imgList.push(src)
+ if (!node.t) {
+ this.imgList._unloadimgs += 1
+ }
+ // #ifdef H5 || APP-PLUS
+ if (this.options.lazyLoad) {
+ attrs['data-src'] = attrs.src
+ attrs.src = undefined
+ }
+ // #endif
+ }
+ }
+ if (styleObj.display === 'inline') {
+ styleObj.display = ''
+ }
+ // #ifndef APP-PLUS-NVUE
+ if (attrs.ignore) {
+ styleObj['max-width'] = styleObj['max-width'] || '100%'
+ attrs.style += ';-webkit-touch-callout:none'
+ }
+ // #endif
+ // 设置的宽度超出屏幕,为避免变形,高度转为自动
+ if (parseInt(styleObj.width) > windowWidth) {
+ styleObj.height = undefined
+ }
+ // 记录是否设置了宽高
+ if (!isNaN(parseInt(styleObj.width))) {
+ node.w = 'T'
+ }
+ if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) {
+ node.h = 'T'
+ }
+ } else if (node.name === 'svg') {
+ siblings.push(node)
+ this.stack.push(node)
+ this.popNode()
+ return
+ }
+ for (const key in styleObj) {
+ if (styleObj[key]) {
+ attrs.style += `;${key}:${styleObj[key].replace(' !important', '')}`
+ }
+ }
+ attrs.style = attrs.style.substr(1) || undefined
+ // #ifdef (MP-WEIXIN || MP-QQ) && VUE3
+ if (!attrs.style) {
+ delete attrs.style
+ }
+ // #endif
+ } else {
+ if ((node.name === 'pre' || ((attrs.style || '').includes('white-space') && attrs.style.includes('pre'))) && this.pre !== 2) {
+ this.pre = node.pre = 1
+ }
+ node.children = []
+ this.stack.push(node)
+ }
+
+ // 加入节点树
+ siblings.push(node)
+}
+
+/**
+ * @description 解析到标签结束
+ * @param {String} name 标签名
+ * @private
+ */
+Parser.prototype.onCloseTag = function (name) {
+ // 依次出栈到匹配为止
+ name = this.xml ? name : name.toLowerCase()
+ let i
+ for (i = this.stack.length; i--;) {
+ if (this.stack[i].name === name) break
+ }
+ if (i !== -1) {
+ while (this.stack.length > i) {
+ this.popNode()
+ }
+ } else if (name === 'p' || name === 'br') {
+ const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes
+ siblings.push({
+ name,
+ attrs: {
+ class: tagSelector[name] || '',
+ style: this.tagStyle[name] || ''
+ }
+ })
+ }
+}
+
+/**
+ * @description 处理标签出栈
+ * @private
+ */
+Parser.prototype.popNode = function () {
+ const node = this.stack.pop()
+ let attrs = node.attrs
+ const children = node.children
+ const parent = this.stack[this.stack.length - 1]
+ const siblings = parent ? parent.children : this.nodes
+
+ if (!this.hook(node) || config.ignoreTags[node.name]) {
+ // 获取标题
+ if (node.name === 'title' && children.length && children[0].type === 'text' && this.options.setTitle) {
+ uni.setNavigationBarTitle({
+ title: children[0].text
+ })
+ }
+ siblings.pop()
+ return
+ }
+
+ if (node.pre && this.pre !== 2) {
+ // 是否合并空白符标识
+ this.pre = node.pre = undefined
+ for (let i = this.stack.length; i--;) {
+ if (this.stack[i].pre) {
+ this.pre = 1
+ }
+ }
+ }
+
+ const styleObj = {}
+
+ // 转换 svg
+ if (node.name === 'svg') {
+ if (this.xml > 1) {
+ // 多层 svg 嵌套
+ this.xml--
+ return
+ }
+ // #ifdef APP-PLUS-NVUE
+ (function traversal (node) {
+ if (node.name) {
+ // 调整 svg 的大小写
+ node.name = config.svgDict[node.name] || node.name
+ for (const item in node.attrs) {
+ if (config.svgDict[item]) {
+ node.attrs[config.svgDict[item]] = node.attrs[item]
+ node.attrs[item] = undefined
+ }
+ }
+ for (let i = 0; i < (node.children || []).length; i++) {
+ traversal(node.children[i])
+ }
+ }
+ })(node)
+ // #endif
+ // #ifndef APP-PLUS-NVUE
+ let src = ''
+ const style = attrs.style
+ attrs.style = ''
+ attrs.xmlns = 'http://www.w3.org/2000/svg';
+ (function traversal (node) {
+ if (node.type === 'text') {
+ src += node.text
+ return
+ }
+ const name = config.svgDict[node.name] || node.name
+ src += '<' + name
+ for (const item in node.attrs) {
+ const val = node.attrs[item]
+ if (val) {
+ src += ` ${config.svgDict[item] || item}="${val}"`
+ }
+ }
+ if (!node.children) {
+ src += '/>'
+ } else {
+ src += '>'
+ for (let i = 0; i < node.children.length; i++) {
+ traversal(node.children[i])
+ }
+ src += '' + name + '>'
+ }
+ })(node)
+ node.name = 'img'
+ node.attrs = {
+ src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
+ style,
+ ignore: 'T'
+ }
+ node.children = undefined
+ // #endif
+ this.xml = false
+ config.ignoreTags.style = true
+ return
+ }
+
+ // #ifndef APP-PLUS-NVUE
+ // 转换 align 属性
+ if (attrs.align) {
+ if (node.name === 'table') {
+ if (attrs.align === 'center') {
+ styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto'
+ } else {
+ styleObj.float = attrs.align
+ }
+ } else {
+ styleObj['text-align'] = attrs.align
+ }
+ attrs.align = undefined
+ }
+
+ // 转换 dir 属性
+ if (attrs.dir) {
+ styleObj.direction = attrs.dir
+ attrs.dir = undefined
+ }
+
+ // 转换 font 标签的属性
+ if (node.name === 'font') {
+ if (attrs.color) {
+ styleObj.color = attrs.color
+ attrs.color = undefined
+ }
+ if (attrs.face) {
+ styleObj['font-family'] = attrs.face
+ attrs.face = undefined
+ }
+ if (attrs.size) {
+ let size = parseInt(attrs.size)
+ if (!isNaN(size)) {
+ if (size < 1) {
+ size = 1
+ } else if (size > 7) {
+ size = 7
+ }
+ styleObj['font-size'] = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large'][size - 1]
+ }
+ attrs.size = undefined
+ }
+ }
+ // #endif
+
+ // 一些编辑器的自带 class
+ if ((attrs.class || '').includes('align-center')) {
+ styleObj['text-align'] = 'center'
+ }
+
+ Object.assign(styleObj, this.parseStyle(node))
+
+ if (node.name !== 'table' && parseInt(styleObj.width) > windowWidth) {
+ styleObj['max-width'] = '100%'
+ styleObj['box-sizing'] = 'border-box'
+ }
+
+ // #ifndef APP-PLUS-NVUE
+ if (config.blockTags[node.name]) {
+ node.name = 'div'
+ } else if (!config.trustTags[node.name] && !this.xml) {
+ // 未知标签转为 span,避免无法显示
+ node.name = 'span'
+ }
+
+ if (node.name === 'a' || node.name === 'ad'
+ // #ifdef H5 || APP-PLUS
+ || node.name === 'iframe' // eslint-disable-line
+ // #endif
+ ) {
+ this.expose()
+ } else if (node.name === 'video') {
+ if ((styleObj.height || '').includes('auto')) {
+ styleObj.height = undefined
+ }
+ /* #ifdef APP-PLUS */
+ let str = ''
+ node.html = str
+ /* #endif */
+ } else if ((node.name === 'ul' || node.name === 'ol') && node.c) {
+ // 列表处理
+ const types = {
+ a: 'lower-alpha',
+ A: 'upper-alpha',
+ i: 'lower-roman',
+ I: 'upper-roman'
+ }
+ if (types[attrs.type]) {
+ attrs.style += ';list-style-type:' + types[attrs.type]
+ attrs.type = undefined
+ }
+ for (let i = children.length; i--;) {
+ if (children[i].name === 'li') {
+ children[i].c = 1
+ }
+ }
+ } else if (node.name === 'table') {
+ // 表格处理
+ // cellpadding、cellspacing、border 这几个常用表格属性需要通过转换实现
+ let padding = parseFloat(attrs.cellpadding)
+ let spacing = parseFloat(attrs.cellspacing)
+ const border = parseFloat(attrs.border)
+ const bordercolor = styleObj['border-color']
+ const borderstyle = styleObj['border-style']
+ if (node.c) {
+ // padding 和 spacing 默认 2
+ if (isNaN(padding)) {
+ padding = 2
+ }
+ if (isNaN(spacing)) {
+ spacing = 2
+ }
+ }
+ if (border) {
+ attrs.style += `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}`
+ }
+ if (node.flag && node.c) {
+ // 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
+ styleObj.display = 'grid'
+ if (spacing) {
+ styleObj['grid-gap'] = spacing + 'px'
+ styleObj.padding = spacing + 'px'
+ } else if (border) {
+ // 无间隔的情况下避免边框重叠
+ attrs.style += ';border-left:0;border-top:0'
+ }
+
+ const width = [] // 表格的列宽
+ const trList = [] // tr 列表
+ const cells = [] // 保存新的单元格
+ const map = {}; // 被合并单元格占用的格子
+
+ (function traversal (nodes) {
+ for (let i = 0; i < nodes.length; i++) {
+ if (nodes[i].name === 'tr') {
+ trList.push(nodes[i])
+ } else {
+ traversal(nodes[i].children || [])
+ }
+ }
+ })(children)
+
+ for (let row = 1; row <= trList.length; row++) {
+ let col = 1
+ for (let j = 0; j < trList[row - 1].children.length; j++) {
+ const td = trList[row - 1].children[j]
+ if (td.name === 'td' || td.name === 'th') {
+ // 这个格子被上面的单元格占用,则列号++
+ while (map[row + '.' + col]) {
+ col++
+ }
+ let style = td.attrs.style || ''
+ let start = style.indexOf('width') ? style.indexOf(';width') : 0
+ // 提取出 td 的宽度
+ if (start !== -1) {
+ let end = style.indexOf(';', start + 6)
+ if (end === -1) {
+ end = style.length
+ }
+ if (!td.attrs.colspan) {
+ width[col] = style.substring(start ? start + 7 : 6, end)
+ }
+ style = style.substr(0, start) + style.substr(end)
+ }
+ // 设置竖直对齐
+ style += ';display:flex'
+ start = style.indexOf('vertical-align')
+ if (start !== -1) {
+ const val = style.substr(start + 15, 10)
+ if (val.includes('middle')) {
+ style += ';align-items:center'
+ } else if (val.includes('bottom')) {
+ style += ';align-items:flex-end'
+ }
+ } else {
+ style += ';align-items:center'
+ }
+ // 设置水平对齐
+ start = style.indexOf('text-align')
+ if (start !== -1) {
+ const val = style.substr(start + 11, 10)
+ if (val.includes('center')) {
+ style += ';justify-content: center'
+ } else if (val.includes('right')) {
+ style += ';justify-content: right'
+ }
+ }
+ style = (border ? `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}` + (spacing ? '' : ';border-right:0;border-bottom:0') : '') + (padding ? `;padding:${padding}px` : '') + ';' + style
+ // 处理列合并
+ if (td.attrs.colspan) {
+ style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`
+ if (!td.attrs.rowspan) {
+ style += `;grid-row-start:${row};grid-row-end:${row + 1}`
+ }
+ col += parseInt(td.attrs.colspan) - 1
+ }
+ // 处理行合并
+ if (td.attrs.rowspan) {
+ style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`
+ if (!td.attrs.colspan) {
+ style += `;grid-column-start:${col};grid-column-end:${col + 1}`
+ }
+ // 记录下方单元格被占用
+ for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {
+ for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {
+ map[(row + rowspan) + '.' + (col - colspan)] = 1
+ }
+ }
+ }
+ if (style) {
+ td.attrs.style = style
+ }
+ cells.push(td)
+ col++
+ }
+ }
+ if (row === 1) {
+ let temp = ''
+ for (let i = 1; i < col; i++) {
+ temp += (width[i] ? width[i] : 'auto') + ' '
+ }
+ styleObj['grid-template-columns'] = temp
+ }
+ }
+ node.children = cells
+ } else {
+ // 没有使用合并单元格的表格通过 table 布局实现
+ if (node.c) {
+ styleObj.display = 'table'
+ }
+ if (!isNaN(spacing)) {
+ styleObj['border-spacing'] = spacing + 'px'
+ }
+ if (border || padding) {
+ // 遍历
+ (function traversal (nodes) {
+ for (let i = 0; i < nodes.length; i++) {
+ const td = nodes[i]
+ if (td.name === 'th' || td.name === 'td') {
+ if (border) {
+ td.attrs.style = `border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'};${td.attrs.style || ''}`
+ }
+ if (padding) {
+ td.attrs.style = `padding:${padding}px;${td.attrs.style || ''}`
+ }
+ } else if (td.children) {
+ traversal(td.children)
+ }
+ }
+ })(children)
+ }
+ }
+ // 给表格添加一个单独的横向滚动层
+ if (this.options.scrollTable && !(attrs.style || '').includes('inline')) {
+ const table = Object.assign({}, node)
+ node.name = 'div'
+ node.attrs = {
+ style: 'overflow:auto'
+ }
+ node.children = [table]
+ attrs = table.attrs
+ }
+ } else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) {
+ for (let i = this.stack.length; i--;) {
+ if (this.stack[i].name === 'table') {
+ this.stack[i].flag = 1 // 指示含有合并单元格
+ break
+ }
+ }
+ } else if (node.name === 'ruby') {
+ // 转换 ruby
+ node.name = 'span'
+ for (let i = 0; i < children.length - 1; i++) {
+ if (children[i].type === 'text' && children[i + 1].name === 'rt') {
+ children[i] = {
+ name: 'div',
+ attrs: {
+ style: 'display:inline-block;text-align:center'
+ },
+ children: [{
+ name: 'div',
+ attrs: {
+ style: 'font-size:50%;' + (children[i + 1].attrs.style || '')
+ },
+ children: children[i + 1].children
+ }, children[i]]
+ }
+ children.splice(i + 1, 1)
+ }
+ }
+ } else if (node.c) {
+ (function traversal (node) {
+ node.c = 2
+ for (let i = node.children.length; i--;) {
+ const child = node.children[i]
+ // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3
+ if (child.name && (config.inlineTags[child.name] || ((child.attrs.style || '').includes('inline') && child.children)) && !child.c) {
+ traversal(child)
+ }
+ // #endif
+ if (!child.c || child.name === 'table') {
+ node.c = 1
+ }
+ }
+ })(node)
+ }
+
+ if ((styleObj.display || '').includes('flex') && !node.c) {
+ for (let i = children.length; i--;) {
+ const item = children[i]
+ if (item.f) {
+ item.attrs.style = (item.attrs.style || '') + item.f
+ item.f = undefined
+ }
+ }
+ }
+ // flex 布局时部分样式需要提取到 rich-text 外层
+ const flex = parent && ((parent.attrs.style || '').includes('flex') || (parent.attrs.style || '').includes('grid'))
+ // #ifdef MP-WEIXIN
+ // 检查基础库版本 virtualHost 是否可用
+ && !(node.c && wx.getNFCAdapter) // eslint-disable-line
+ // #endif
+ // #ifndef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO
+ && !node.c // eslint-disable-line
+ // #endif
+ if (flex) {
+ node.f = ';max-width:100%'
+ }
+
+ if (children.length >= 50 && node.c && !(styleObj.display || '').includes('flex')) {
+ mergeNodes(children)
+ }
+ // #endif
+
+ for (const key in styleObj) {
+ if (styleObj[key]) {
+ const val = `;${key}:${styleObj[key].replace(' !important', '')}`
+ /* #ifndef APP-PLUS-NVUE */
+ if (flex && ((key.includes('flex') && key !== 'flex-direction') || key === 'align-self' || key.includes('grid') || styleObj[key][0] === '-' || (key.includes('width') && val.includes('%')))) {
+ node.f += val
+ if (key === 'width') {
+ attrs.style += ';width:100%'
+ }
+ } else /* #endif */ {
+ attrs.style += val
+ }
+ }
+ }
+ attrs.style = attrs.style.substr(1) || undefined
+ // #ifdef (MP-WEIXIN || MP-QQ) && VUE3
+ for (const key in attrs) {
+ if (!attrs[key]) {
+ delete attrs[key]
+ }
+ }
+ // #endif
+}
+
+/**
+ * @description 解析到文本
+ * @param {String} text 文本内容
+ */
+Parser.prototype.onText = function (text) {
+ if (!this.pre) {
+ // 合并空白符
+ let trim = ''
+ let flag
+ for (let i = 0, len = text.length; i < len; i++) {
+ if (!blankChar[text[i]]) {
+ trim += text[i]
+ } else {
+ if (trim[trim.length - 1] !== ' ') {
+ trim += ' '
+ }
+ if (text[i] === '\n' && !flag) {
+ flag = true
+ }
+ }
+ }
+ // 去除含有换行符的空串
+ if (trim === ' ') {
+ if (flag) return
+ // #ifdef VUE3
+ else {
+ const parent = this.stack[this.stack.length - 1]
+ if (parent && parent.name[0] === 't') return
+ }
+ // #endif
+ }
+ text = trim
+ }
+ const node = Object.create(null)
+ node.type = 'text'
+ // #ifdef (MP-BAIDU || MP-ALIPAY || MP-TOUTIAO) && VUE3
+ node.attrs = {}
+ // #endif
+ node.text = decodeEntity(text)
+ if (this.hook(node)) {
+ // #ifdef MP-WEIXIN
+ if (this.options.selectable === 'force' && system.includes('iOS') && !uni.canIUse('rich-text.user-select')) {
+ this.expose()
+ }
+ // #endif
+ const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes
+ siblings.push(node)
+ }
+}
+
+/**
+ * @description html 词法分析器
+ * @param {Object} handler 高层处理器
+ */
+function Lexer (handler) {
+ this.handler = handler
+}
+
+/**
+ * @description 执行解析
+ * @param {String} content 要解析的文本
+ */
+Lexer.prototype.parse = function (content) {
+ this.content = content || ''
+ this.i = 0 // 标记解析位置
+ this.start = 0 // 标记一个单词的开始位置
+ this.state = this.text // 当前状态
+ for (let len = this.content.length; this.i !== -1 && this.i < len;) {
+ this.state()
+ }
+}
+
+/**
+ * @description 检查标签是否闭合
+ * @param {String} method 如果闭合要进行的操作
+ * @returns {Boolean} 是否闭合
+ * @private
+ */
+Lexer.prototype.checkClose = function (method) {
+ const selfClose = this.content[this.i] === '/'
+ if (this.content[this.i] === '>' || (selfClose && this.content[this.i + 1] === '>')) {
+ if (method) {
+ this.handler[method](this.content.substring(this.start, this.i))
+ }
+ this.i += selfClose ? 2 : 1
+ this.start = this.i
+ this.handler.onOpenTag(selfClose)
+ if (this.handler.tagName === 'script') {
+ this.i = this.content.indexOf('', this.i)
+ if (this.i !== -1) {
+ this.i += 2
+ this.start = this.i
+ }
+ this.state = this.endTag
+ } else {
+ this.state = this.text
+ }
+ return true
+ }
+ return false
+}
+
+/**
+ * @description 文本状态
+ * @private
+ */
+Lexer.prototype.text = function () {
+ this.i = this.content.indexOf('<', this.i) // 查找最近的标签
+ if (this.i === -1) {
+ // 没有标签了
+ if (this.start < this.content.length) {
+ this.handler.onText(this.content.substring(this.start, this.content.length))
+ }
+ return
+ }
+ const c = this.content[this.i + 1]
+ if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+ // 标签开头
+ if (this.start !== this.i) {
+ this.handler.onText(this.content.substring(this.start, this.i))
+ }
+ this.start = ++this.i
+ this.state = this.tagName
+ } else if (c === '/' || c === '!' || c === '?') {
+ if (this.start !== this.i) {
+ this.handler.onText(this.content.substring(this.start, this.i))
+ }
+ const next = this.content[this.i + 2]
+ if (c === '/' && ((next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z'))) {
+ // 标签结尾
+ this.i += 2
+ this.start = this.i
+ this.state = this.endTag
+ return
+ }
+ // 处理注释
+ let end = '-->'
+ if (c !== '!' || this.content[this.i + 2] !== '-' || this.content[this.i + 3] !== '-') {
+ end = '>'
+ }
+ this.i = this.content.indexOf(end, this.i)
+ if (this.i !== -1) {
+ this.i += end.length
+ this.start = this.i
+ }
+ } else {
+ this.i++
+ }
+}
+
+/**
+ * @description 标签名状态
+ * @private
+ */
+Lexer.prototype.tagName = function () {
+ if (blankChar[this.content[this.i]]) {
+ // 解析到标签名
+ this.handler.onTagName(this.content.substring(this.start, this.i))
+ while (blankChar[this.content[++this.i]]);
+ if (this.i < this.content.length && !this.checkClose()) {
+ this.start = this.i
+ this.state = this.attrName
+ }
+ } else if (!this.checkClose('onTagName')) {
+ this.i++
+ }
+}
+
+/**
+ * @description 属性名状态
+ * @private
+ */
+Lexer.prototype.attrName = function () {
+ let c = this.content[this.i]
+ if (blankChar[c] || c === '=') {
+ // 解析到属性名
+ this.handler.onAttrName(this.content.substring(this.start, this.i))
+ let needVal = c === '='
+ const len = this.content.length
+ while (++this.i < len) {
+ c = this.content[this.i]
+ if (!blankChar[c]) {
+ if (this.checkClose()) return
+ if (needVal) {
+ // 等号后遇到第一个非空字符
+ this.start = this.i
+ this.state = this.attrVal
+ return
+ }
+ if (this.content[this.i] === '=') {
+ needVal = true
+ } else {
+ this.start = this.i
+ this.state = this.attrName
+ return
+ }
+ }
+ }
+ } else if (!this.checkClose('onAttrName')) {
+ this.i++
+ }
+}
+
+/**
+ * @description 属性值状态
+ * @private
+ */
+Lexer.prototype.attrVal = function () {
+ const c = this.content[this.i]
+ const len = this.content.length
+ if (c === '"' || c === "'") {
+ // 有冒号的属性
+ this.start = ++this.i
+ this.i = this.content.indexOf(c, this.i)
+ if (this.i === -1) return
+ this.handler.onAttrVal(this.content.substring(this.start, this.i))
+ } else {
+ // 没有冒号的属性
+ for (; this.i < len; this.i++) {
+ if (blankChar[this.content[this.i]]) {
+ this.handler.onAttrVal(this.content.substring(this.start, this.i))
+ break
+ } else if (this.checkClose('onAttrVal')) return
+ }
+ }
+ while (blankChar[this.content[++this.i]]);
+ if (this.i < len && !this.checkClose()) {
+ this.start = this.i
+ this.state = this.attrName
+ }
+}
+
+/**
+ * @description 结束标签状态
+ * @returns {String} 结束的标签名
+ * @private
+ */
+Lexer.prototype.endTag = function () {
+ const c = this.content[this.i]
+ if (blankChar[c] || c === '>' || c === '/') {
+ this.handler.onCloseTag(this.content.substring(this.start, this.i))
+ if (c !== '>') {
+ this.i = this.content.indexOf('>', this.i)
+ if (this.i === -1) return
+ }
+ this.start = ++this.i
+ this.state = this.text
+ } else {
+ this.i++
+ }
+}
+
+export default Parser
diff --git a/uni_modules/mp-html/package.json b/uni_modules/mp-html/package.json
new file mode 100644
index 0000000..5959db8
--- /dev/null
+++ b/uni_modules/mp-html/package.json
@@ -0,0 +1,76 @@
+{
+ "id": "mp-html",
+ "displayName": "mp-html 富文本组件【全端支持,支持编辑、latex等扩展】",
+ "version": "v2.4.2",
+ "description": "一个强大的富文本组件,高效轻量,功能丰富",
+ "keywords": [
+ "富文本",
+ "编辑器",
+ "html",
+ "rich-text",
+ "editor"
+ ],
+ "repository": "https://github.com/jin-yufeng/mp-html",
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/mp-html",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "u",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/mp-html/static/app-plus/mp-html/js/handler.js b/uni_modules/mp-html/static/app-plus/mp-html/js/handler.js
new file mode 100644
index 0000000..1d986bd
--- /dev/null
+++ b/uni_modules/mp-html/static/app-plus/mp-html/js/handler.js
@@ -0,0 +1 @@
+"use strict";function t(t){for(var e=Object.create(null),n=t.attributes.length;n--;)e[t.attributes[n].name]=t.attributes[n].value;return e}function e(){a[1]&&(this.src=a[1],this.onerror=null),this.onclick=null,this.ontouchstart=null,uni.postMessage({data:{action:"onError",source:"img",attrs:t(this)}})}function n(){window.unloadimgs-=1,0===window.unloadimgs&&uni.postMessage({data:{action:"onReady"}})}function o(r,s,c){for(var d=0;d0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;a("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("redirectTo",{url:encodeURI(n)})},getEnv:function(e){window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a("postMessage",e.data||{})}},r=/uni-app/i.test(navigator.userAgent),d=/Html5Plus/i.test(navigator.userAgent),s=/complete|loaded|interactive/;var w=window.my&&navigator.userAgent.indexOf("AlipayClient")>-1;var u=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var g=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var v=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.qa&&/quickapp/i.test(navigator.userAgent);for(var l,_=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},f=[function(e){if(r||d)return window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&s.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),o},function(e){if(v)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(w){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(u)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(g)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(p){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){return document.addEventListener("DOMContentLoaded",e),o}],m=0;m
\ No newline at end of file
diff --git a/uni_modules/uni-card/changelog.md b/uni_modules/uni-card/changelog.md
new file mode 100644
index 0000000..c3cd8c4
--- /dev/null
+++ b/uni_modules/uni-card/changelog.md
@@ -0,0 +1,26 @@
+## 1.3.1(2021-12-20)
+- 修复 在vue页面下略缩图显示不正常的bug
+## 1.3.0(2021-11-19)
+- 重构插槽的用法 ,header 替换为 title
+- 新增 actions 插槽
+- 新增 cover 封面图属性和插槽
+- 新增 padding 内容默认内边距离
+- 新增 margin 卡片默认外边距离
+- 新增 spacing 卡片默认内边距
+- 新增 shadow 卡片阴影属性
+- 取消 mode 属性,可使用组合插槽代替
+- 取消 note 属性 ,使用actions插槽代替
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-card](https://uniapp.dcloud.io/component/uniui/uni-card)
+## 1.2.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-07-01)
+- 优化 图文卡片无图片加载时,提供占位图标
+- 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持)
+- 修复 thumbnail 不存在仍然占位的 bug
+## 1.1.7(2021-05-12)
+- 新增 组件示例地址
+## 1.1.6(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-card/components/uni-card/uni-card.vue b/uni_modules/uni-card/components/uni-card/uni-card.vue
new file mode 100644
index 0000000..38cf594
--- /dev/null
+++ b/uni_modules/uni-card/components/uni-card/uni-card.vue
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-card/package.json b/uni_modules/uni-card/package.json
new file mode 100644
index 0000000..f16224d
--- /dev/null
+++ b/uni_modules/uni-card/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "uni-card",
+ "displayName": "uni-card 卡片",
+ "version": "1.3.1",
+ "description": "Card 组件,提供常见的卡片样式。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "card",
+ "",
+ "卡片"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-icons",
+ "uni-scss"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-card/readme.md b/uni_modules/uni-card/readme.md
new file mode 100644
index 0000000..7434e71
--- /dev/null
+++ b/uni_modules/uni-card/readme.md
@@ -0,0 +1,12 @@
+
+
+## Card 卡片
+> **组件名:uni-card**
+> 代码块: `uCard`
+
+卡片视图组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uview-ui/LICENSE b/uni_modules/uview-ui/LICENSE
new file mode 100644
index 0000000..4db40ef
--- /dev/null
+++ b/uni_modules/uview-ui/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 www.uviewui.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/uni_modules/uview-ui/README.md b/uni_modules/uview-ui/README.md
new file mode 100644
index 0000000..06d5676
--- /dev/null
+++ b/uni_modules/uview-ui/README.md
@@ -0,0 +1,106 @@
+
+
+
+uView
+多平台快速开发的UI框架
+
+
+## 说明
+
+uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
+
+## 特性
+
+- 兼容安卓,iOS,微信小程序,H5,QQ小程序,百度小程序,支付宝小程序,头条小程序
+- 60+精选组件,功能丰富,多端兼容,让您快速集成,开箱即用
+- 众多贴心的JS利器,让您飞镖在手,召之即来,百步穿杨
+- 众多的常用页面和布局,让您专注逻辑,事半功倍
+- 详尽的文档支持,现代化的演示效果
+- 按需引入,精简打包体积
+
+
+## 安装
+
+```bash
+# npm方式安装
+npm i uview-ui
+```
+
+## 快速上手
+
+1. `main.js`引入uView库
+```js
+// main.js
+import uView from 'uview-ui';
+Vue.use(uView);
+```
+
+2. `App.vue`引入基础样式(注意style标签需声明scss属性支持)
+```css
+/* App.vue */
+
+```
+
+3. `uni.scss`引入全局scss变量文件
+```css
+/* uni.scss */
+@import "uview-ui/theme.scss";
+```
+
+4. `pages.json`配置easycom规则(按需引入)
+
+```js
+// pages.json
+{
+ "easycom": {
+ // npm安装的方式不需要前面的"@/",下载安装的方式需要"@/"
+ // npm安装方式
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+ // 下载安装方式
+ // "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+ },
+ // 此为本身已有的内容
+ "pages": [
+ // ......
+ ]
+}
+```
+
+请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容
+
+## 使用方法
+配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
+
+```html
+
+ 按钮
+
+```
+
+请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容
+
+## 链接
+
+- [官方文档](https://uviewui.com/)
+- [更新日志](https://uviewui.com/components/changelog.html)
+- [升级指南](https://uviewui.com/components/changelog.html)
+- [关于我们](https://uviewui.com/cooperation/about.html)
+
+## 预览
+
+您可以通过**微信**扫码,查看最佳的演示效果。
+
+
+
+
+
+## 版权信息
+uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。
diff --git a/uni_modules/uview-ui/changelog.md b/uni_modules/uview-ui/changelog.md
new file mode 100644
index 0000000..ca50251
--- /dev/null
+++ b/uni_modules/uview-ui/changelog.md
@@ -0,0 +1,357 @@
+## 2.0.34(2022-09-25)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. `u-input`、`u-textarea`增加`ignoreCompositionEvent`属性
+2. 修复`route`方法调用可能报错的问题
+3. 修复`u-no-network`组件`z-index`无效的问题
+4. 修复`textarea`组件在h5上confirmType=""报错的问题
+5. `u-rate`适配`nvue`
+6. 优化验证手机号码的正则表达式(根据工信部发布的《电信网编号计划(2017年版)》进行修改。)
+7. `form-item`添加`labelPosition`属性
+8. `u-calendar`修复`maxDate`设置为当前日期,并且当前时间大于08:00时无法显示日期列表的问题 (#724)
+9. `u-radio`增加一个默认插槽用于自定义修改label内容 (#680)
+10. 修复`timeFormat`函数在safari重的兼容性问题 (#664)
+## 2.0.33(2022-06-17)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复`loadmore`组件`lineColor`类型错误问题
+2. 修复`u-parse`组件`imgtap`、`linktap`不生效问题
+## 2.0.32(2022-06-16)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+1. `u-loadmore`新增自定义颜色、虚/实线
+2. 修复`u-swiper-action`组件部分平台不能上下滑动的问题
+3. 修复`u-list`回弹问题
+4. 修复`notice-bar`组件动画在低端安卓机可能会抖动的问题
+5. `u-loading-page`添加控制图标大小的属性`iconSize`
+6. 修复`u-tooltip`组件`color`参数不生效的问题
+7. 修复`u--input`组件使用`blur`事件输出为`undefined`的bug
+8. `u-code-input`组件新增键盘弹起时,是否自动上推页面参数`adjustPosition`
+9. 修复`image`组件`load`事件无回调对象问题
+10. 修复`button`组件`loadingSize`设置无效问题
+10. 其他修复
+## 2.0.31(2022-04-19)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复`upload`在`vue`页面上传成功后没有成功标志的问题
+2. 解决演示项目中微信小程序模拟上传图片一直出于上传中问题
+3. 修复`u-code-input`组件在`nvue`页面编译到`app`平台上光标异常问题(`app`去除此功能)
+4. 修复`actionSheet`组件标题关闭按钮点击事件名称错误的问题
+5. 其他修复
+## 2.0.30(2022-04-04)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. `u-rate`增加`readonly`属性
+2. `tabs`滑块支持设置背景图片
+3. 修复`u-subsection` `mode`为`subsection`时,滑块样式不正确的问题
+4. `u-code-input`添加光标效果动画
+5. 修复`popup`的`open`事件不触发
+6. 修复`u-flex-column`无效的问题
+7. 修复`u-datetime-picker`索引在特定场合异常问题
+8. 修复`u-datetime-picker`最小时间字符串模板错误问题
+9. `u-swiper`添加`m3u8`验证
+10. `u-swiper`修改判断image和video逻辑
+11. 修复`swiper`无法使用本地图片问题,增加`type`参数
+12. 修复`u-row-notice`格式错误问题
+13. 修复`u-switch`组件当`unit`为`rpx`时,`nodeStyle`消失的问题
+14. 修复`datetime-picker`组件`showToolbar`与`visibleItemCount`属性无效的问题
+15. 修复`upload`组件条件编译位置判断错误,导致`previewImage`属性设置为`false`时,整个组件都会被隐藏的问题
+16. 修复`u-checkbox-group`设置`shape`属性无效的问题
+17. 修复`u-upload`的`capture`传入字符串的时候不生效的问题
+18. 修复`u-action-sheet`组件,关闭事件逻辑错误的问题
+19. 修复`u-list`触顶事件的触发错误的问题
+20. 修复`u-text`只有手机号可拨打的问题
+21. 修复`u-textarea`不能换行的问题
+22. 其他修复
+## 2.0.29(2022-03-13)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复`u--text`组件设置`decoration`属性未生效的问题
+2. 修复`u-datetime-picker`使用`formatter`后返回值不正确
+3. 修复`u-datetime-picker` `intercept` 可能为undefined
+4. 修复已设置单位 uni..config.unit = 'rpx'时,线型指示器 `transform` 的位置翻倍,导致指示器超出宽度
+5. 修复mixin中bem方法生成的类名在支付宝和字节小程序中失效
+6. 修复默认值传值为空的时候,打开`u-datetime-picker`报错,不能选中第一列时间的bug
+7. 修复`u-datetime-picker`使用`formatter`后返回值不正确
+8. 修复`u-image`组件`loading`无效果的问题
+9. 修复`config.unit`属性设为`rpx`时,导航栏占用高度不足导致塌陷的问题
+10. 修复`u-datetime-picker`组件`itemHeight`无效问题
+11. 其他修复
+## 2.0.28(2022-02-22)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. search组件新增searchIconSize属性
+2. 兼容Safari/Webkit中传入时间格式如2022-02-17 12:00:56
+3. 修复text value.js 判断日期出format错误问题
+4. priceFormat格式化金额出现精度错误
+5. priceFormat在部分情况下出现精度损失问题
+6. 优化表单rules提示
+7. 修复avatar组件src为空时,展示状态不对
+8. 其他修复
+## 2.0.27(2022-01-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1.样式修复
+## 2.0.26(2022-01-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1.样式修复
+## 2.0.25(2022-01-27)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复text组件mode=price时,可能会导致精度错误的问题
+2. 添加$u.setConfig()方法,可设置uView内置的config, props, zIndex, color属性,详见:[修改uView内置配置方案](https://uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
+3. 优化form组件在errorType=toast时,如果输入错误页面会有抖动的问题
+4. 修复$u.addUnit()对配置默认单位可能无效的问题
+## 2.0.24(2022-01-25)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复swiper在current指定非0时缩放有误
+2. 修复u-icon添加stop属性的时候报错
+3. 优化遗留的通过正则判断rpx单位的问题
+4. 优化Layout布局 vue使用gutter时,会超出固定区域
+5. 优化search组件高度单位问题(rpx -> px)
+6. 修复u-image slot 加载和错误的图片失去了高度
+7. 修复u-index-list中footer插槽与header插槽存在性判断错误
+8. 修复部分机型下u-popup关闭时会闪烁
+9. 修复u-image在nvue-app下失去宽高
+10. 修复u-popup运行报错
+11. 修复u-tooltip报错
+12. 修复box-sizing在app下的警告
+13. 修复u-navbar在小程序中报运行时错误
+14. 其他修复
+## 2.0.23(2022-01-24)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复image组件在hx3.3.9的nvue下可能会显示异常的问题
+2. 修复col组件gutter参数带rpx单位处理不正确的问题
+3. 修复text组件单行时无法显示省略号的问题
+4. navbar添加titleStyle参数
+5. 升级到hx3.3.9可消除nvue下控制台样式警告的问题
+## 2.0.22(2022-01-19)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. $u.page()方法优化,避免在特殊场景可能报错的问题
+2. picker组件添加immediateChange参数
+3. 新增$u.pages()方法
+## 2.0.21(2022-01-19)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化:form组件在用户设置rules的时候提示用户model必传
+2. 优化遗留的通过正则判断rpx单位的问题
+3. 修复微信小程序环境中tabbar组件开启safeAreaInsetBottom属性后,placeholder高度填充不正确
+4. 修复swiper在current指定非0时缩放有误
+5. 修复u-icon添加stop属性的时候报错
+6. 修复upload组件在accept=all的时候没有作用
+7. 修复在text组件mode为phone时call属性无效的问题
+8. 处理u-form clearValidate方法
+9. 其他修复
+## 2.0.20(2022-01-14)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复calendar默认会选择一个日期,如果直接点确定的话,无法取到值的问题
+2. 修复Slider缺少disabled props 还有注释
+3. 修复u-notice-bar点击事件无法拿到index索引值的问题
+4. 修复u-collapse-item在vue文件下,app端自定义插槽不生效的问题
+5. 优化头像为空时显示默认头像
+6. 修复图片地址赋值后判断加载状态为完成问题
+7. 修复日历滚动到默认日期月份区域
+8. search组件暴露点击左边icon事件
+9. 修复u-form clearValidate方法不生效
+10. upload h5端增加返回文件参数(文件的name参数)
+11. 处理upload选择文件后url为blob类型无法预览的问题
+12. u-code-input 修复输入框没有往左移出一半屏幕
+13. 修复Upload上传 disabled为true时,控制台报hoverClass类型错误
+14. 临时处理ios app下grid点击坍塌问题
+15. 其他修复
+## 2.0.19(2021-12-29)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化微信小程序包体积可在微信中预览,请升级HbuilderX3.3.4,同时在“运行->运行到小程序模拟器”中勾选“运行时是否压缩代码”
+2. 优化微信小程序setData性能,处理某些方法如$u.route()无法在模板中使用的问题
+3. navbar添加autoBack参数
+4. 允许avatar组件的事件冒泡
+5. 修复cell组件报错问题
+6. 其他修复
+## 2.0.18(2021-12-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复app端编译报错问题
+2. 重新处理微信小程序端setData过大的性能问题
+3. 修复边框问题
+4. 修复最大最小月份不大于0则没有数据出现的问题
+5. 修复SwipeAction微信小程序端无法上下滑动问题
+6. 修复input的placeholder在小程序端默认显示为true问题
+7. 修复divider组件click事件无效问题
+8. 修复u-code-input maxlength 属性值为 String 类型时显示异常
+9. 修复当 grid只有 1到2时 在小程序端algin设置无效的问题
+10. 处理form-item的label为top时,取消错误提示的左边距
+11. 其他修复
+## 2.0.17(2021-12-26)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 解决HBuilderX3.3.3.20211225版本导致的样式问题
+2. calendar日历添加monthNum参数
+3. navbar添加center slot
+## 2.0.16(2021-12-25)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 解决微信小程序setData性能问题
+2. 修复count-down组件change事件不触发问题
+## 2.0.15(2021-12-21)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复Cell单元格titleWidth无效
+2. 修复cheakbox组件ischecked不更新
+3. 修复keyboard是否显示"."按键默认值问题
+4. 修复number-keyboard是否显示键盘的"."符号问题
+5. 修复Input输入框 readonly无效
+6. 修复u-avatar 导致打包app、H5时候报错问题
+7. 修复Upload上传deletable无效
+8. 修复upload当设置maxSize时无效的问题
+9. 修复tabs lineWidth传入带单位的字符串的时候偏移量计算错误问题
+10. 修复rate组件在有padding的view内,显示的星星位置和可触摸区域不匹配,无法正常选中星星
+## 2.0.13(2021-12-14)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复配置默认单位为rpx可能会导致自定义导航栏高度异常的问题
+## 2.0.12(2021-12-14)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复tabs组件在vue环境下划线消失的问题
+2. 修复upload组件在安卓小程序无法选择视频的问题
+3. 添加uni.$u.config.unit配置,用于配置参数默认单位,详见:[默认单位配置](https://www.uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
+4. 修复textarea组件在没绑定v-model时,字符统计不生效问题
+5. 修复nvue下控制是否出现滚动条失效问题
+## 2.0.11(2021-12-13)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. text组件align参数无效的问题
+2. subsection组件添加keyName参数
+3. upload组件无法判断[Object file]类型的问题
+4. 处理notify层级过低问题
+5. codeInput组件添加disabledDot参数
+6. 处理actionSheet组件round参数无效的问题
+7. calendar组件添加round参数用于控制圆角值
+8. 处理swipeAction组件在vue环境下默认被打开的问题
+9. button组件的throttleTime节流参数无效的问题
+10. 解决u-notify手动关闭方法close()无效的问题
+11. input组件readonly不生效问题
+12. tag组件type参数为info不生效问题
+## 2.0.10(2021-12-08)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复button sendMessagePath属性不生效
+2. 修复DatetimePicker选择器title无效
+3. 修复u-toast设置loading=true不生效
+4. 修复u-text金额模式传0报错
+5. 修复u-toast组件的icon属性配置不生效
+6. button的icon在特殊场景下的颜色优化
+7. IndexList优化,增加#
+## 2.0.9(2021-12-01)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化swiper的height支持100%值(仅vue有效),修复嵌入视频时click事件无法触发的问题
+2. 优化tabs组件对list值为空的判断,或者动态变化list时重新计算相关尺寸的问题
+3. 优化datetime-picker组件逻辑,让其后续打开的默认值为上一次的选中值,需要通过v-model绑定值才有效
+4. 修复upload内嵌在其他组件中,选择图片可能不会换行的问题
+## 2.0.8(2021-12-01)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复toast的position参数无效问题
+2. 处理input在ios nvue上无法获得焦点的问题
+3. avatar-group组件添加extraValue参数,让剩余展示数量可手动控制
+4. tabs组件添加keyName参数用于配置从对象中读取的键名
+5. 处理text组件名字脱敏默认配置无效的问题
+6. 处理picker组件item文本太长换行问题
+## 2.0.7(2021-11-30)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复radio和checkbox动态改变v-model无效的问题。
+2. 优化form规则validator在微信小程序用法
+3. 修复backtop组件mode参数在微信小程序无效的问题
+4. 处理Album的previewFullImage属性无效的问题
+5. 处理u-datetime-picker组件mode='time'在选择改变时间时,控制台报错的问题
+## 2.0.6(2021-11-27)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 处理tag组件在vue下边框无效的问题。
+2. 处理popup组件圆角参数可能无效的问题。
+3. 处理tabs组件lineColor参数可能无效的问题。
+4. propgress组件在值很小时,显示异常的问题。
+## 2.0.5(2021-11-25)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. calendar在vue下显示异常问题。
+2. form组件labelPosition和errorType参数无效的问题
+3. input组件inputAlign无效的问题
+4. 其他一些修复
+## 2.0.4(2021-11-23)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+0. input组件缺失@confirm事件,以及subfix和prefix无效问题
+1. component.scss文件样式在vue下干扰全局布局问题
+2. 修复subsection在vue环境下表现异常的问题
+3. tag组件的bgColor等参数无效的问题
+4. upload组件不换行的问题
+5. 其他的一些修复处理
+## 2.0.3(2021-11-16)
+## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. uView2.0已实现全面兼容nvue
+2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
+3. 目前uView2.0为公测阶段,相关细节可能会有变动
+4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
+5. 处理modal的confirm回调事件拼写错误问题
+6. 处理input组件@input事件参数错误问题
+7. 其他一些修复
+## 2.0.2(2021-11-16)
+## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. uView2.0已实现全面兼容nvue
+2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
+3. 目前uView2.0为公测阶段,相关细节可能会有变动
+4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
+5. 修复input组件formatter参数缺失问题
+6. 优化loading-icon组件的scss写法问题,防止不兼容新版本scss
+## 2.0.0(2020-11-15)
+## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. uView2.0已实现全面兼容nvue
+2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
+3. 目前uView2.0为公测阶段,相关细节可能会有变动
+4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
+5. 修复input组件formatter参数缺失问题
+
+
diff --git a/uni_modules/uview-ui/components/u--form/u--form.vue b/uni_modules/uview-ui/components/u--form/u--form.vue
new file mode 100644
index 0000000..fdfc212
--- /dev/null
+++ b/uni_modules/uview-ui/components/u--form/u--form.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uview-ui/components/u--image/u--image.vue b/uni_modules/uview-ui/components/u--image/u--image.vue
new file mode 100644
index 0000000..21b7ab1
--- /dev/null
+++ b/uni_modules/uview-ui/components/u--image/u--image.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uview-ui/components/u--input/u--input.vue b/uni_modules/uview-ui/components/u--input/u--input.vue
new file mode 100644
index 0000000..1e58b01
--- /dev/null
+++ b/uni_modules/uview-ui/components/u--input/u--input.vue
@@ -0,0 +1,73 @@
+
+ $emit('blur', e)"
+ @keyboardheightchange="$emit('keyboardheightchange')"
+ @change="e => $emit('change', e)"
+ @input="e => $emit('input', e)"
+ @confirm="e => $emit('confirm', e)"
+ @clear="$emit('clear')"
+ @click="$emit('click')"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uview-ui/components/u--text/u--text.vue b/uni_modules/uview-ui/components/u--text/u--text.vue
new file mode 100644
index 0000000..44ee52a
--- /dev/null
+++ b/uni_modules/uview-ui/components/u--text/u--text.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/uni_modules/uview-ui/components/u--textarea/u--textarea.vue b/uni_modules/uview-ui/components/u--textarea/u--textarea.vue
new file mode 100644
index 0000000..f4df0b9
--- /dev/null
+++ b/uni_modules/uview-ui/components/u--textarea/u--textarea.vue
@@ -0,0 +1,48 @@
+
+ $emit('focus')"
+ @blur="e => $emit('blur')"
+ @linechange="e => $emit('linechange', e)"
+ @confirm="e => $emit('confirm')"
+ @input="e => $emit('input', e)"
+ @keyboardheightchange="e => $emit('keyboardheightchange')"
+ >
+
+
+
diff --git a/uni_modules/uview-ui/components/u-action-sheet/props.js b/uni_modules/uview-ui/components/u-action-sheet/props.js
new file mode 100644
index 0000000..e96e04f
--- /dev/null
+++ b/uni_modules/uview-ui/components/u-action-sheet/props.js
@@ -0,0 +1,54 @@
+export default {
+ props: {
+ // 操作菜单是否展示 (默认false)
+ show: {
+ type: Boolean,
+ default: uni.$u.props.actionSheet.show
+ },
+ // 标题
+ title: {
+ type: String,
+ default: uni.$u.props.actionSheet.title
+ },
+ // 选项上方的描述信息
+ description: {
+ type: String,
+ default: uni.$u.props.actionSheet.description
+ },
+ // 数据
+ actions: {
+ type: Array,
+ default: uni.$u.props.actionSheet.actions
+ },
+ // 取消按钮的文字,不为空时显示按钮
+ cancelText: {
+ type: String,
+ default: uni.$u.props.actionSheet.cancelText
+ },
+ // 点击某个菜单项时是否关闭弹窗
+ closeOnClickAction: {
+ type: Boolean,
+ default: uni.$u.props.actionSheet.closeOnClickAction
+ },
+ // 处理底部安全区(默认true)
+ safeAreaInsetBottom: {
+ type: Boolean,
+ default: uni.$u.props.actionSheet.safeAreaInsetBottom
+ },
+ // 小程序的打开方式
+ openType: {
+ type: String,
+ default: uni.$u.props.actionSheet.openType
+ },
+ // 点击遮罩是否允许关闭 (默认true)
+ closeOnClickOverlay: {
+ type: Boolean,
+ default: uni.$u.props.actionSheet.closeOnClickOverlay
+ },
+ // 圆角值
+ round: {
+ type: [Boolean, String, Number],
+ default: uni.$u.props.actionSheet.round
+ }
+ }
+}
diff --git a/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue b/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
new file mode 100644
index 0000000..722b668
--- /dev/null
+++ b/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
@@ -0,0 +1,190 @@
+
+
+
+ {{tips.text}}
+
+
+
+ {{item.text}}
+ {{item.subText}}
+
+
+
+
+ {{cancelText}}
+
+
+
+
+
+
diff --git a/uni_modules/uview-ui/components/u-album/props.js b/uni_modules/uview-ui/components/u-album/props.js
new file mode 100644
index 0000000..75cdb37
--- /dev/null
+++ b/uni_modules/uview-ui/components/u-album/props.js
@@ -0,0 +1,59 @@
+export default {
+ props: {
+ // 图片地址,Array|Array