From 29d76579f7d654d1322ea8e0d3aa6242c0f7f287 Mon Sep 17 00:00:00 2001 From: longjieli <1060695654@qq.com> Date: Thu, 29 Aug 2024 15:01:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9vue=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 14 + App.vue | 15 + README.en.md | 36 + README.md | 39 + api/api.js | 59 + api/http.js | 135 ++ components/base/changeLanguage.vue | 77 ++ components/base/navbar.vue | 164 +++ components/base/super-drawer.vue | 71 ++ components/base/tabbar.vue | 104 ++ components/config/configPopup.vue | 97 ++ components/config/showPrivacyAgreement.vue | 118 ++ config.js | 56 + doc/1.png | Bin 0 -> 54790 bytes doc/2.png | Bin 0 -> 78746 bytes doc/3.png | Bin 0 -> 231735 bytes doc/4.png | Bin 0 -> 64697 bytes doc/5.png | Bin 0 -> 34454 bytes index.html | 20 + locale/en.json | 23 + locale/index.js | 25 + locale/zh-Hans.json | 26 + main.js | 43 + manifest.json | 105 ++ package.json | 20 + pages.json | 24 + pages/finish/finish.vue | 192 +++ pages/index/index.vue | 75 ++ pages/login/login.vue | 196 +++ pages/map/map.vue | 95 ++ pages/reject/reject.vue | 70 + pages/repair/repair.vue | 271 ++++ pages/repairList/repairList.vue | 175 +++ pages/wxUserInfo/wxUserInfo.vue | 140 ++ static/bar/1.png | Bin 0 -> 2848 bytes static/bar/2.png | Bin 0 -> 2863 bytes static/bar/3.png | Bin 0 -> 906 bytes static/bar/4.png | Bin 0 -> 930 bytes static/login/logo.png | Bin 0 -> 157279 bytes static/logo.png | Bin 0 -> 4023 bytes store/store.js | 27 + uni.promisify.adaptor.js | 10 + uni.scss | 75 ++ uni_modules/uni-icons/changelog.md | 42 + .../uni-icons/components/uni-icons/uni-icons.uvue | 91 ++ .../uni-icons/components/uni-icons/uni-icons.vue | 110 ++ .../uni-icons/components/uni-icons/uniicons.css | 664 ++++++++++ .../uni-icons/components/uni-icons/uniicons.ttf | Bin 0 -> 35824 bytes .../components/uni-icons/uniicons_file.ts | 664 ++++++++++ .../components/uni-icons/uniicons_file_vue.js | 649 ++++++++++ uni_modules/uni-icons/package.json | 89 ++ uni_modules/uni-icons/readme.md | 8 + uni_modules/uni-scss/changelog.md | 8 + uni_modules/uni-scss/index.scss | 1 + uni_modules/uni-scss/package.json | 82 ++ uni_modules/uni-scss/readme.md | 4 + uni_modules/uni-scss/styles/index.scss | 7 + uni_modules/uni-scss/styles/setting/_border.scss | 3 + uni_modules/uni-scss/styles/setting/_color.scss | 66 + uni_modules/uni-scss/styles/setting/_radius.scss | 55 + uni_modules/uni-scss/styles/setting/_space.scss | 56 + uni_modules/uni-scss/styles/setting/_styles.scss | 167 +++ uni_modules/uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 +++ uni_modules/uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uv-action-sheet/changelog.md | 7 + .../components/uv-action-sheet/props.js | 50 + .../components/uv-action-sheet/uv-action-sheet.vue | 280 ++++ uni_modules/uv-action-sheet/package.json | 92 ++ uni_modules/uv-action-sheet/readme.md | 13 + uni_modules/uv-album/changelog.md | 10 + .../uv-album/components/uv-album/uv-album.vue | 312 +++++ uni_modules/uv-album/package.json | 88 ++ uni_modules/uv-album/readme.md | 21 + uni_modules/uv-alert/changelog.md | 7 + uni_modules/uv-alert/components/uv-alert/props.js | 45 + .../uv-alert/components/uv-alert/uv-alert.vue | 246 ++++ uni_modules/uv-alert/package.json | 88 ++ uni_modules/uv-alert/readme.md | 15 + uni_modules/uv-avatar/changelog.md | 13 + .../uv-avatar/components/uv-avatar-group/props.js | 53 + .../components/uv-avatar-group/uv-avatar-group.vue | 106 ++ .../uv-avatar/components/uv-avatar/props.js | 80 ++ .../uv-avatar/components/uv-avatar/uv-avatar.vue | 175 +++ uni_modules/uv-avatar/package.json | 89 ++ uni_modules/uv-avatar/readme.md | 11 + uni_modules/uv-back-top/changelog.md | 8 + .../uv-back-top/components/uv-back-top/props.js | 58 + .../components/uv-back-top/uv-back-top.vue | 116 ++ uni_modules/uv-back-top/package.json | 89 ++ uni_modules/uv-back-top/readme.md | 11 + uni_modules/uv-badge/changelog.md | 7 + uni_modules/uv-badge/components/uv-badge/props.js | 73 ++ .../uv-badge/components/uv-badge/uv-badge.vue | 176 +++ uni_modules/uv-badge/package.json | 87 ++ uni_modules/uv-badge/readme.md | 11 + uni_modules/uv-button/changelog.md | 33 + .../uv-button/components/uv-button/nvue.scss | 46 + .../uv-button/components/uv-button/props.js | 163 +++ .../uv-button/components/uv-button/uv-button.vue | 528 ++++++++ .../uv-button/components/uv-button/vue.scss | 93 ++ uni_modules/uv-button/package.json | 89 ++ uni_modules/uv-button/readme.md | 19 + uni_modules/uv-calendar/changelog.md | 16 + .../uv-calendar/components/uv-calendar/calendar.js | 546 ++++++++ .../uv-calendar/components/uv-calendar/header.vue | 104 ++ .../uv-calendar/components/uv-calendar/month.vue | 616 +++++++++ .../uv-calendar/components/uv-calendar/props.js | 145 +++ .../components/uv-calendar/uv-calendar.vue | 390 ++++++ uni_modules/uv-calendar/package.json | 89 ++ uni_modules/uv-calendar/readme.md | 21 + uni_modules/uv-calendars/changelog.md | 40 + .../components/uv-calendars/calendar-body.vue | 376 ++++++ .../components/uv-calendars/calendar-item.vue | 248 ++++ .../components/uv-calendars/calendar.js | 546 ++++++++ .../components/uv-calendars/i18n/en.json | 12 + .../components/uv-calendars/i18n/index.js | 8 + .../components/uv-calendars/i18n/zh-Hans.json | 12 + .../components/uv-calendars/i18n/zh-Hant.json | 12 + .../uv-calendars/components/uv-calendars/util.js | 435 +++++++ .../components/uv-calendars/uv-calendars.vue | 452 +++++++ uni_modules/uv-calendars/package.json | 89 ++ uni_modules/uv-calendars/readme.md | 23 + uni_modules/uv-cell/changelog.md | 13 + .../uv-cell/components/uv-cell-group/props.js | 15 + .../components/uv-cell-group/uv-cell-group.vue | 63 + uni_modules/uv-cell/components/uv-cell/props.js | 116 ++ uni_modules/uv-cell/components/uv-cell/uv-cell.vue | 209 +++ uni_modules/uv-cell/package.json | 89 ++ uni_modules/uv-cell/readme.md | 11 + uni_modules/uv-checkbox/changelog.md | 34 + .../components/uv-checkbox-group/props.js | 84 ++ .../uv-checkbox-group/uv-checkbox-group.vue | 119 ++ .../uv-checkbox/components/uv-checkbox/props.js | 70 + .../components/uv-checkbox/uv-checkbox.vue | 370 ++++++ uni_modules/uv-checkbox/package.json | 88 ++ uni_modules/uv-checkbox/readme.md | 19 + uni_modules/uv-code-input/changelog.md | 13 + .../components/uv-code-input/props.js | 83 ++ .../components/uv-code-input/uv-code-input.vue | 272 ++++ uni_modules/uv-code-input/package.json | 87 ++ uni_modules/uv-code-input/readme.md | 19 + uni_modules/uv-code/changelog.md | 9 + uni_modules/uv-code/components/uv-code/props.js | 35 + uni_modules/uv-code/components/uv-code/uv-code.vue | 136 ++ uni_modules/uv-code/package.json | 87 ++ uni_modules/uv-code/readme.md | 11 + uni_modules/uv-collapse/changelog.md | 5 + .../components/uv-collapse-item/props.js | 60 + .../uv-collapse-item/uv-collapse-item.vue | 229 ++++ .../uv-collapse/components/uv-collapse/props.js | 20 + .../components/uv-collapse/uv-collapse.vue | 86 ++ uni_modules/uv-collapse/package.json | 89 ++ uni_modules/uv-collapse/readme.md | 11 + uni_modules/uv-count-down/changelog.md | 9 + .../components/uv-count-down/props.js | 25 + .../components/uv-count-down/utils.js | 62 + .../components/uv-count-down/uv-count-down.vue | 169 +++ uni_modules/uv-count-down/package.json | 87 ++ uni_modules/uv-count-down/readme.md | 11 + uni_modules/uv-count-to/changelog.md | 13 + .../uv-count-to/components/uv-count-to/props.js | 60 + .../components/uv-count-to/uv-count-to.vue | 187 +++ uni_modules/uv-count-to/package.json | 87 ++ uni_modules/uv-count-to/readme.md | 11 + uni_modules/uv-datetime-picker/changelog.md | 34 + .../components/uv-datetime-picker/props.js | 130 ++ .../uv-datetime-picker/uv-datetime-picker.vue | 360 ++++++ uni_modules/uv-datetime-picker/package.json | 89 ++ uni_modules/uv-datetime-picker/readme.md | 19 + uni_modules/uv-divider/changelog.md | 11 + .../uv-divider/components/uv-divider/props.js | 45 + .../components/uv-divider/uv-divider.vue | 113 ++ uni_modules/uv-divider/package.json | 88 ++ uni_modules/uv-divider/readme.md | 11 + uni_modules/uv-drop-down/changelog.md | 13 + .../uv-drop-down-item/uv-drop-down-item.vue | 169 +++ .../uv-drop-down-popup/uv-drop-down-popup.vue | 242 ++++ .../components/uv-drop-down/uv-drop-down.vue | 135 ++ uni_modules/uv-drop-down/package.json | 91 ++ uni_modules/uv-drop-down/readme.md | 23 + uni_modules/uv-empty/changelog.md | 13 + uni_modules/uv-empty/components/uv-empty/props.js | 60 + .../uv-empty/components/uv-empty/uv-empty.vue | 126 ++ uni_modules/uv-empty/package.json | 88 ++ uni_modules/uv-empty/readme.md | 19 + uni_modules/uv-form/changelog.md | 23 + .../uv-form/components/uv-form-item/props.js | 49 + .../components/uv-form-item/uv-form-item.vue | 226 ++++ uni_modules/uv-form/components/uv-form/props.js | 46 + uni_modules/uv-form/components/uv-form/uv-form.vue | 209 +++ uni_modules/uv-form/components/uv-form/valid.js | 1343 ++++++++++++++++++++ uni_modules/uv-form/package.json | 93 ++ uni_modules/uv-form/readme.md | 19 + uni_modules/uv-gap/changelog.md | 5 + uni_modules/uv-gap/components/uv-gap/props.js | 25 + uni_modules/uv-gap/components/uv-gap/uv-gap.vue | 36 + uni_modules/uv-gap/package.json | 87 ++ uni_modules/uv-gap/readme.md | 12 + uni_modules/uv-grid/changelog.md | 21 + .../uv-grid/components/uv-grid-item/props.js | 15 + .../components/uv-grid-item/uv-grid-item.vue | 226 ++++ uni_modules/uv-grid/components/uv-grid/props.js | 20 + uni_modules/uv-grid/components/uv-grid/uv-grid.vue | 100 ++ uni_modules/uv-grid/package.json | 88 ++ uni_modules/uv-grid/readme.md | 17 + uni_modules/uv-icon/changelog.md | 31 + uni_modules/uv-icon/components/uv-icon/icons.js | 160 +++ uni_modules/uv-icon/components/uv-icon/props.js | 90 ++ uni_modules/uv-icon/components/uv-icon/uv-icon.vue | 226 ++++ uni_modules/uv-icon/components/uv-icon/uvicons.ttf | Bin 0 -> 39632 bytes uni_modules/uv-icon/package.json | 83 ++ uni_modules/uv-icon/readme.md | 15 + uni_modules/uv-image/changelog.md | 36 + uni_modules/uv-image/components/uv-image/props.js | 95 ++ .../uv-image/components/uv-image/uv-image.vue | 287 +++++ uni_modules/uv-image/package.json | 89 ++ uni_modules/uv-image/readme.md | 15 + uni_modules/uv-index-list/changelog.md | 18 + .../components/uv-index-anchor/props.js | 30 + .../components/uv-index-anchor/uv-index-anchor.vue | 98 ++ .../components/uv-index-item/uv-index-item.vue | 87 ++ .../components/uv-index-list/props.js | 30 + .../components/uv-index-list/uv-index-list.vue | 461 +++++++ uni_modules/uv-index-list/package.json | 88 ++ uni_modules/uv-index-list/readme.md | 19 + uni_modules/uv-input/changelog.md | 29 + uni_modules/uv-input/components/uv-input/props.js | 175 +++ .../uv-input/components/uv-input/uv-input.vue | 348 +++++ uni_modules/uv-input/package.json | 88 ++ uni_modules/uv-input/readme.md | 19 + uni_modules/uv-keyboard/changelog.md | 17 + .../components/uv-keyboard-car/props.js | 24 + .../components/uv-keyboard-car/uv-keyboard-car.vue | 347 +++++ .../components/uv-keyboard-number/props.js | 19 + .../uv-keyboard-number/uv-keyboard-number.vue | 201 +++ .../uv-keyboard/components/uv-keyboard/props.js | 95 ++ .../components/uv-keyboard/uv-keyboard.vue | 180 +++ uni_modules/uv-keyboard/package.json | 89 ++ uni_modules/uv-keyboard/readme.md | 19 + uni_modules/uv-line-progress/changelog.md | 7 + .../components/uv-line-progress/props.js | 29 + .../uv-line-progress/uv-line-progress.vue | 146 +++ uni_modules/uv-line-progress/package.json | 87 ++ uni_modules/uv-line-progress/readme.md | 11 + uni_modules/uv-line/changelog.md | 5 + uni_modules/uv-line/components/uv-line/props.js | 34 + uni_modules/uv-line/components/uv-line/uv-line.vue | 60 + uni_modules/uv-line/package.json | 87 ++ uni_modules/uv-line/readme.md | 11 + uni_modules/uv-link/changelog.md | 7 + uni_modules/uv-link/components/uv-link/props.js | 40 + uni_modules/uv-link/components/uv-link/uv-link.vue | 83 ++ uni_modules/uv-link/package.json | 87 ++ uni_modules/uv-link/readme.md | 11 + uni_modules/uv-list/changelog.md | 25 + .../components/uv-list-item/uv-list-item.vue | 535 ++++++++ uni_modules/uv-list/components/uv-list/uv-list.vue | 147 +++ uni_modules/uv-list/package.json | 87 ++ uni_modules/uv-list/readme.md | 27 + uni_modules/uv-load-more/changelog.md | 7 + .../uv-load-more/components/uv-load-more/props.js | 95 ++ .../components/uv-load-more/uv-load-more.vue | 152 +++ uni_modules/uv-load-more/package.json | 89 ++ uni_modules/uv-load-more/readme.md | 11 + uni_modules/uv-loading-icon/changelog.md | 9 + .../components/uv-loading-icon/props.js | 67 + .../components/uv-loading-icon/uv-loading-icon.vue | 347 +++++ uni_modules/uv-loading-icon/package.json | 87 ++ uni_modules/uv-loading-icon/readme.md | 19 + uni_modules/uv-loading-page/changelog.md | 11 + .../components/uv-loading-page/props.js | 55 + .../components/uv-loading-page/uv-loading-page.vue | 96 ++ uni_modules/uv-loading-page/package.json | 89 ++ uni_modules/uv-loading-page/readme.md | 11 + uni_modules/uv-modal/changelog.md | 28 + uni_modules/uv-modal/components/uv-modal/props.js | 90 ++ .../uv-modal/components/uv-modal/uv-modal.vue | 245 ++++ uni_modules/uv-modal/package.json | 90 ++ uni_modules/uv-modal/readme.md | 23 + uni_modules/uv-navbar/changelog.md | 17 + .../uv-navbar/components/uv-navbar/props.js | 89 ++ .../uv-navbar/components/uv-navbar/uv-navbar.vue | 245 ++++ uni_modules/uv-navbar/package.json | 89 ++ uni_modules/uv-navbar/readme.md | 19 + uni_modules/uv-no-network/changelog.md | 5 + .../components/uv-no-network/props.js | 20 + .../components/uv-no-network/uv-no-network.vue | 222 ++++ uni_modules/uv-no-network/package.json | 90 ++ uni_modules/uv-no-network/readme.md | 11 + uni_modules/uv-notice-bar/changelog.md | 19 + .../components/uv-column-notice/props.js | 61 + .../uv-column-notice/uv-column-notice.vue | 176 +++ .../components/uv-notice-bar/props.js | 76 ++ .../components/uv-notice-bar/uv-notice-bar.vue | 110 ++ .../components/uv-row-notice/props.js | 40 + .../components/uv-row-notice/uv-row-notice.vue | 341 +++++ uni_modules/uv-notice-bar/package.json | 88 ++ uni_modules/uv-notice-bar/readme.md | 19 + uni_modules/uv-notify/changelog.md | 9 + .../uv-notify/components/uv-notify/props.js | 45 + .../uv-notify/components/uv-notify/uv-notify.vue | 220 ++++ uni_modules/uv-notify/package.json | 90 ++ uni_modules/uv-notify/readme.md | 11 + uni_modules/uv-number-box/changelog.md | 7 + .../components/uv-number-box/props.js | 113 ++ .../components/uv-number-box/uv-number-box.vue | 395 ++++++ uni_modules/uv-number-box/package.json | 88 ++ uni_modules/uv-number-box/readme.md | 11 + uni_modules/uv-overlay/changelog.md | 9 + .../uv-overlay/components/uv-overlay/props.js | 25 + .../components/uv-overlay/uv-overlay.vue | 85 ++ uni_modules/uv-overlay/package.json | 88 ++ uni_modules/uv-overlay/readme.md | 11 + uni_modules/uv-parse/changelog.md | 13 + .../uv-parse/components/uv-parse/node/node.vue | 576 +++++++++ uni_modules/uv-parse/components/uv-parse/parser.js | 1335 +++++++++++++++++++ .../uv-parse/components/uv-parse/uv-parse.vue | 498 ++++++++ uni_modules/uv-parse/package.json | 87 ++ uni_modules/uv-parse/readme.md | 21 + .../static/app-plus/uv-parse/js/handler.js | 224 ++++ .../static/app-plus/uv-parse/js/uni.webview.min.js | 19 + .../uv-parse/static/app-plus/uv-parse/local.html | 1 + uni_modules/uv-pick-color/changelog.md | 18 + .../components/uv-pick-color/colors.js | 217 ++++ .../components/uv-pick-color/props.js | 47 + .../components/uv-pick-color/uv-pick-color.vue | 551 ++++++++ uni_modules/uv-pick-color/package.json | 89 ++ uni_modules/uv-pick-color/readme.md | 19 + uni_modules/uv-picker/changelog.md | 33 + .../uv-picker/components/uv-picker/props.js | 95 ++ .../uv-picker/components/uv-picker/uv-picker.vue | 330 +++++ uni_modules/uv-picker/package.json | 90 ++ uni_modules/uv-picker/readme.md | 21 + uni_modules/uv-popup/changelog.md | 18 + .../uv-popup/components/uv-popup/keypress.js | 45 + .../uv-popup/components/uv-popup/uv-popup.vue | 539 ++++++++ uni_modules/uv-popup/package.json | 92 ++ uni_modules/uv-popup/readme.md | 21 + uni_modules/uv-qrcode/changelog.md | 13 + .../uv-qrcode/components/uv-qrcode/cache.js | 1 + .../uv-qrcode/gcanvas/bridge/bridge-weex.js | 241 ++++ .../gcanvas/context-2d/FillStyleLinearGradient.js | 18 + .../gcanvas/context-2d/FillStylePattern.js | 8 + .../gcanvas/context-2d/FillStyleRadialGradient.js | 17 + .../gcanvas/context-2d/RenderingContext.js | 666 ++++++++++ .../uv-qrcode/gcanvas/context-webgl/ActiveInfo.js | 11 + .../uv-qrcode/gcanvas/context-webgl/Buffer.js | 21 + .../uv-qrcode/gcanvas/context-webgl/Framebuffer.js | 21 + .../uv-qrcode/gcanvas/context-webgl/GLenum.js | 298 +++++ .../uv-qrcode/gcanvas/context-webgl/GLmethod.js | 142 +++ .../uv-qrcode/gcanvas/context-webgl/GLtype.js | 23 + .../uv-qrcode/gcanvas/context-webgl/Program.js | 21 + .../gcanvas/context-webgl/Renderbuffer.js | 21 + .../gcanvas/context-webgl/RenderingContext.js | 1191 +++++++++++++++++ .../uv-qrcode/gcanvas/context-webgl/Shader.js | 22 + .../gcanvas/context-webgl/ShaderPrecisionFormat.js | 11 + .../uv-qrcode/gcanvas/context-webgl/Texture.js | 22 + .../gcanvas/context-webgl/UniformLocation.js | 22 + .../uv-qrcode/gcanvas/context-webgl/classUtils.js | 3 + .../components/uv-qrcode/gcanvas/env/canvas.js | 74 ++ .../components/uv-qrcode/gcanvas/env/image.js | 96 ++ .../components/uv-qrcode/gcanvas/env/tool.js | 24 + .../components/uv-qrcode/gcanvas/index.js | 39 + .../uv-qrcode/components/uv-qrcode/props.js | 85 ++ .../uv-qrcode/components/uv-qrcode/qrcode.js | 34 + .../uv-qrcode/components/uv-qrcode/queue.js | 41 + .../uv-qrcode/components/uv-qrcode/uv-qrcode.vue | 1038 +++++++++++++++ uni_modules/uv-qrcode/package.json | 87 ++ uni_modules/uv-qrcode/readme.md | 21 + uni_modules/uv-radio/changelog.md | 31 + .../uv-radio/components/uv-radio-group/props.js | 89 ++ .../components/uv-radio-group/uv-radio-group.vue | 115 ++ uni_modules/uv-radio/components/uv-radio/props.js | 65 + .../uv-radio/components/uv-radio/uv-radio.vue | 348 +++++ uni_modules/uv-radio/package.json | 88 ++ uni_modules/uv-radio/readme.md | 19 + uni_modules/uv-rate/changelog.md | 17 + uni_modules/uv-rate/components/uv-rate/props.js | 73 ++ uni_modules/uv-rate/components/uv-rate/uv-rate.vue | 274 ++++ uni_modules/uv-rate/package.json | 88 ++ uni_modules/uv-rate/readme.md | 19 + uni_modules/uv-read-more/changelog.md | 7 + .../uv-read-more/components/uv-read-more/props.js | 62 + .../components/uv-read-more/uv-read-more.vue | 162 +++ uni_modules/uv-read-more/package.json | 89 ++ uni_modules/uv-read-more/readme.md | 11 + uni_modules/uv-row/changelog.md | 5 + uni_modules/uv-row/components/uv-col/props.js | 30 + uni_modules/uv-row/components/uv-col/uv-col.vue | 165 +++ uni_modules/uv-row/components/uv-row/props.js | 20 + uni_modules/uv-row/components/uv-row/uv-row.vue | 95 ++ uni_modules/uv-row/package.json | 87 ++ uni_modules/uv-row/readme.md | 11 + uni_modules/uv-safe-bottom/changelog.md | 11 + .../components/uv-safe-bottom/uv-safe-bottom.vue | 67 + uni_modules/uv-safe-bottom/package.json | 87 ++ uni_modules/uv-safe-bottom/readme.md | 11 + uni_modules/uv-scroll-list/changelog.md | 12 + .../components/uv-scroll-list/nvue.js | 29 + .../components/uv-scroll-list/props.js | 35 + .../components/uv-scroll-list/scrollWxs.wxs | 51 + .../components/uv-scroll-list/uv-scroll-list.vue | 218 ++++ uni_modules/uv-scroll-list/package.json | 87 ++ uni_modules/uv-scroll-list/readme.md | 19 + uni_modules/uv-search/changelog.md | 25 + .../uv-search/components/uv-search/props.js | 127 ++ .../uv-search/components/uv-search/uv-search.vue | 311 +++++ uni_modules/uv-search/package.json | 89 ++ uni_modules/uv-search/readme.md | 19 + uni_modules/uv-skeleton/changelog.md | 9 + .../uv-skeleton/components/uv-skeleton/props.js | 65 + .../components/uv-skeleton/uv-skeleton.vue | 250 ++++ uni_modules/uv-skeleton/package.json | 87 ++ uni_modules/uv-skeleton/readme.md | 11 + uni_modules/uv-skeletons/changelog.md | 4 + .../components/uv-skeletons/uv-skeletons.vue | 247 ++++ uni_modules/uv-skeletons/package.json | 88 ++ uni_modules/uv-skeletons/readme.md | 23 + uni_modules/uv-slider/changelog.md | 9 + .../uv-slider/components/uv-slider/props.js | 58 + .../uv-slider/components/uv-slider/uv-slider.vue | 58 + uni_modules/uv-slider/package.json | 87 ++ uni_modules/uv-slider/readme.md | 15 + uni_modules/uv-status-bar/changelog.md | 7 + .../components/uv-status-bar/props.js | 8 + .../components/uv-status-bar/uv-status-bar.vue | 54 + uni_modules/uv-status-bar/package.json | 87 ++ uni_modules/uv-status-bar/readme.md | 10 + uni_modules/uv-steps/changelog.md | 10 + .../uv-steps/components/uv-steps-item/props.js | 25 + .../components/uv-steps-item/uv-steps-item.vue | 347 +++++ uni_modules/uv-steps/components/uv-steps/props.js | 40 + .../uv-steps/components/uv-steps/uv-steps.vue | 83 ++ uni_modules/uv-steps/package.json | 89 ++ uni_modules/uv-steps/readme.md | 11 + uni_modules/uv-sticky/changelog.md | 11 + .../uv-sticky/components/uv-sticky/props.js | 41 + .../uv-sticky/components/uv-sticky/uv-sticky.vue | 223 ++++ uni_modules/uv-sticky/package.json | 87 ++ uni_modules/uv-sticky/readme.md | 11 + uni_modules/uv-subsection/changelog.md | 10 + .../components/uv-subsection/props.js | 54 + .../components/uv-subsection/uv-subsection.vue | 269 ++++ uni_modules/uv-subsection/package.json | 87 ++ uni_modules/uv-subsection/readme.md | 11 + uni_modules/uv-swipe-action/changelog.md | 11 + .../uv-swipe-action-item/index - backup.wxs | 256 ++++ .../components/uv-swipe-action-item/index.wxs | 225 ++++ .../uv-swipe-action-item/nvue - backup.js | 264 ++++ .../components/uv-swipe-action-item/nvue.js | 182 +++ .../components/uv-swipe-action-item/props.js | 40 + .../uv-swipe-action-item/uv-swipe-action-item.vue | 200 +++ .../components/uv-swipe-action-item/wxs.js | 15 + .../components/uv-swipe-action/props.js | 10 + .../components/uv-swipe-action/uv-swipe-action.vue | 65 + uni_modules/uv-swipe-action/package.json | 88 ++ uni_modules/uv-swipe-action/readme.md | 11 + uni_modules/uv-swiper/changelog.md | 16 + .../components/uv-swiper-indicator/props.js | 30 + .../uv-swiper-indicator/uv-swiper-indicator.vue | 112 ++ .../uv-swiper/components/uv-swiper/props.js | 136 ++ .../uv-swiper/components/uv-swiper/uv-swiper.vue | 263 ++++ uni_modules/uv-swiper/package.json | 88 ++ uni_modules/uv-swiper/readme.md | 19 + uni_modules/uv-switch/changelog.md | 14 + .../uv-switch/components/uv-switch/props.js | 58 + .../uv-switch/components/uv-switch/uv-switch.vue | 192 +++ uni_modules/uv-switch/package.json | 88 ++ uni_modules/uv-switch/readme.md | 19 + uni_modules/uv-tabbar/changelog.md | 14 + .../uv-tabbar/components/uv-tabbar-item/props.js | 40 + .../components/uv-tabbar-item/uv-tabbar-item.vue | 146 +++ .../uv-tabbar/components/uv-tabbar/props.js | 50 + .../uv-tabbar/components/uv-tabbar/uv-tabbar.vue | 146 +++ uni_modules/uv-tabbar/package.json | 90 ++ uni_modules/uv-tabbar/readme.md | 21 + uni_modules/uv-tabs/changelog.md | 22 + uni_modules/uv-tabs/components/uv-tabs/props.js | 71 ++ uni_modules/uv-tabs/components/uv-tabs/uv-tabs.vue | 390 ++++++ uni_modules/uv-tabs/package.json | 90 ++ uni_modules/uv-tabs/readme.md | 19 + uni_modules/uv-tags/changelog.md | 10 + uni_modules/uv-tags/components/uv-tags/props.js | 95 ++ uni_modules/uv-tags/components/uv-tags/uv-tags.vue | 379 ++++++ uni_modules/uv-tags/package.json | 89 ++ uni_modules/uv-tags/readme.md | 11 + uni_modules/uv-text/changelog.md | 11 + uni_modules/uv-text/components/uv-text/props.js | 113 ++ uni_modules/uv-text/components/uv-text/uv-text.vue | 218 ++++ uni_modules/uv-text/components/uv-text/value.js | 87 ++ uni_modules/uv-text/package.json | 89 ++ uni_modules/uv-text/readme.md | 17 + uni_modules/uv-textarea/changelog.md | 28 + .../uv-textarea/components/uv-textarea/props.js | 138 ++ .../components/uv-textarea/uv-textarea.vue | 238 ++++ uni_modules/uv-textarea/package.json | 87 ++ uni_modules/uv-textarea/readme.md | 19 + uni_modules/uv-toast/changelog.md | 10 + .../uv-toast/components/uv-toast/uv-toast.vue | 333 +++++ uni_modules/uv-toast/package.json | 90 ++ uni_modules/uv-toast/readme.md | 11 + uni_modules/uv-toolbar/changelog.md | 2 + .../uv-toolbar/components/uv-toolbar/props.js | 40 + .../components/uv-toolbar/uv-toolbar.vue | 109 ++ uni_modules/uv-toolbar/package.json | 87 ++ uni_modules/uv-toolbar/readme.md | 31 + uni_modules/uv-tooltip/changelog.md | 13 + .../uv-tooltip/components/uv-tooltip/props.js | 60 + .../components/uv-tooltip/uv-tooltip.vue | 372 ++++++ uni_modules/uv-tooltip/package.json | 90 ++ uni_modules/uv-tooltip/readme.md | 11 + uni_modules/uv-transition/changelog.md | 19 + .../components/uv-transition/createAnimation.js | 131 ++ .../components/uv-transition/props.js | 31 + .../components/uv-transition/uv-transition.vue | 320 +++++ uni_modules/uv-transition/package.json | 87 ++ uni_modules/uv-transition/readme.md | 15 + uni_modules/uv-ui-tools/changelog.md | 76 ++ .../components/uv-ui-tools/uv-ui-tools.vue | 6 + uni_modules/uv-ui-tools/index.js | 79 ++ uni_modules/uv-ui-tools/index.scss | 7 + uni_modules/uv-ui-tools/libs/config/config.js | 34 + uni_modules/uv-ui-tools/libs/css/color.scss | 32 + uni_modules/uv-ui-tools/libs/css/common.scss | 100 ++ uni_modules/uv-ui-tools/libs/css/components.scss | 23 + uni_modules/uv-ui-tools/libs/css/variable.scss | 111 ++ uni_modules/uv-ui-tools/libs/css/vue.scss | 40 + .../uv-ui-tools/libs/function/colorGradient.js | 134 ++ uni_modules/uv-ui-tools/libs/function/debounce.js | 29 + uni_modules/uv-ui-tools/libs/function/digit.js | 167 +++ uni_modules/uv-ui-tools/libs/function/index.js | 734 +++++++++++ uni_modules/uv-ui-tools/libs/function/platform.js | 75 ++ uni_modules/uv-ui-tools/libs/function/test.js | 287 +++++ uni_modules/uv-ui-tools/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 132 ++ .../libs/luch-request/core/InterceptorManager.js | 51 + .../uv-ui-tools/libs/luch-request/core/Request.js | 201 +++ .../libs/luch-request/core/buildFullPath.js | 20 + .../uv-ui-tools/libs/luch-request/core/defaults.js | 33 + .../libs/luch-request/core/dispatchRequest.js | 6 + .../libs/luch-request/core/mergeConfig.js | 126 ++ .../uv-ui-tools/libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 64 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../libs/luch-request/helpers/isAbsoluteURL.js | 14 + .../uv-ui-tools/libs/luch-request/index.d.ts | 197 +++ uni_modules/uv-ui-tools/libs/luch-request/index.js | 2 + uni_modules/uv-ui-tools/libs/luch-request/utils.js | 135 ++ .../uv-ui-tools/libs/luch-request/utils/clone.js | 264 ++++ uni_modules/uv-ui-tools/libs/mixin/button.js | 13 + uni_modules/uv-ui-tools/libs/mixin/mixin.js | 172 +++ uni_modules/uv-ui-tools/libs/mixin/mpMixin.js | 8 + uni_modules/uv-ui-tools/libs/mixin/mpShare.js | 13 + uni_modules/uv-ui-tools/libs/mixin/openType.js | 47 + uni_modules/uv-ui-tools/libs/mixin/touch.js | 59 + uni_modules/uv-ui-tools/libs/util/dayjs.js | 216 ++++ uni_modules/uv-ui-tools/libs/util/route.js | 126 ++ uni_modules/uv-ui-tools/package.json | 81 ++ uni_modules/uv-ui-tools/readme.md | 23 + uni_modules/uv-ui-tools/theme.scss | 43 + uni_modules/uv-ui/changelog.md | 353 +++++ uni_modules/uv-ui/components/uv-ui/uv-ui.vue | 7 + uni_modules/uv-ui/package.json | 162 +++ uni_modules/uv-ui/readme.md | 164 +++ uni_modules/uv-upload/changelog.md | 17 + .../uv-preview-video/uv-preview-video.vue | 52 + .../uv-upload/components/uv-upload/mixin.js | 22 + .../uv-upload/components/uv-upload/props.js | 130 ++ .../uv-upload/components/uv-upload/utils.js | 151 +++ .../uv-upload/components/uv-upload/uv-upload.vue | 488 +++++++ uni_modules/uv-upload/package.json | 90 ++ uni_modules/uv-upload/readme.md | 11 + uni_modules/uv-vtabs/changelog.md | 20 + .../components/uv-vtabs-item/uv-vtabs-item.vue | 68 + uni_modules/uv-vtabs/components/uv-vtabs/props.js | 79 ++ .../uv-vtabs/components/uv-vtabs/uv-vtabs.vue | 438 +++++++ uni_modules/uv-vtabs/package.json | 87 ++ uni_modules/uv-vtabs/readme.md | 19 + uni_modules/uv-waterfall/changelog.md | 24 + .../uv-waterfall/components/uv-waterfall/props.js | 69 + .../components/uv-waterfall/uv-waterfall.vue | 265 ++++ uni_modules/uv-waterfall/package.json | 89 ++ uni_modules/uv-waterfall/readme.md | 19 + utils/Share.js | 75 ++ utils/index.js | 30 + utils/lib/jweixin-module.js | 733 +++++++++++ utils/lib/md5.js | 876 +++++++++++++ utils/oss-upload/common/crypto/base64.js | 95 ++ utils/oss-upload/common/crypto/crypto.js.js | 117 ++ utils/oss-upload/common/crypto/hmac.js | 29 + utils/oss-upload/common/crypto/sha1.js | 59 + utils/oss-upload/oss/OSSConfig.js | 36 + utils/oss-upload/oss/index.js | 139 ++ utils/oss-upload/oss/web.js | 63 + utils/pay.js | 39 + utils/position.js | 177 +++ utils/timeUtils.js | 37 + utils/tree.js | 43 + utils/utils.js | 146 +++ 602 files changed, 62379 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 README.en.md create mode 100644 README.md create mode 100644 api/api.js create mode 100644 api/http.js create mode 100644 components/base/changeLanguage.vue create mode 100644 components/base/navbar.vue create mode 100644 components/base/super-drawer.vue create mode 100644 components/base/tabbar.vue create mode 100644 components/config/configPopup.vue create mode 100644 components/config/showPrivacyAgreement.vue create mode 100644 config.js create mode 100644 doc/1.png create mode 100644 doc/2.png create mode 100644 doc/3.png create mode 100644 doc/4.png create mode 100644 doc/5.png create mode 100644 index.html create mode 100644 locale/en.json create mode 100644 locale/index.js create mode 100644 locale/zh-Hans.json create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/finish/finish.vue create mode 100644 pages/index/index.vue create mode 100644 pages/login/login.vue create mode 100644 pages/map/map.vue create mode 100644 pages/reject/reject.vue create mode 100644 pages/repair/repair.vue create mode 100644 pages/repairList/repairList.vue create mode 100644 pages/wxUserInfo/wxUserInfo.vue create mode 100644 static/bar/1.png create mode 100644 static/bar/2.png create mode 100644 static/bar/3.png create mode 100644 static/bar/4.png create mode 100644 static/login/logo.png create mode 100644 static/logo.png create mode 100644 store/store.js create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.uvue create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file.ts create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js create mode 100644 uni_modules/uni-icons/package.json create mode 100644 uni_modules/uni-icons/readme.md create mode 100644 uni_modules/uni-scss/changelog.md create mode 100644 uni_modules/uni-scss/index.scss create mode 100644 uni_modules/uni-scss/package.json create mode 100644 uni_modules/uni-scss/readme.md create mode 100644 uni_modules/uni-scss/styles/index.scss create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 uni_modules/uni-scss/theme.scss create mode 100644 uni_modules/uni-scss/variables.scss create mode 100644 uni_modules/uv-action-sheet/changelog.md create mode 100644 uni_modules/uv-action-sheet/components/uv-action-sheet/props.js create mode 100644 uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue create mode 100644 uni_modules/uv-action-sheet/package.json create mode 100644 uni_modules/uv-action-sheet/readme.md create mode 100644 uni_modules/uv-album/changelog.md create mode 100644 uni_modules/uv-album/components/uv-album/uv-album.vue create mode 100644 uni_modules/uv-album/package.json create mode 100644 uni_modules/uv-album/readme.md create mode 100644 uni_modules/uv-alert/changelog.md create mode 100644 uni_modules/uv-alert/components/uv-alert/props.js create mode 100644 uni_modules/uv-alert/components/uv-alert/uv-alert.vue create mode 100644 uni_modules/uv-alert/package.json create mode 100644 uni_modules/uv-alert/readme.md create mode 100644 uni_modules/uv-avatar/changelog.md create mode 100644 uni_modules/uv-avatar/components/uv-avatar-group/props.js create mode 100644 uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue create mode 100644 uni_modules/uv-avatar/components/uv-avatar/props.js create mode 100644 uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue create mode 100644 uni_modules/uv-avatar/package.json create mode 100644 uni_modules/uv-avatar/readme.md create mode 100644 uni_modules/uv-back-top/changelog.md create mode 100644 uni_modules/uv-back-top/components/uv-back-top/props.js create mode 100644 uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue create mode 100644 uni_modules/uv-back-top/package.json create mode 100644 uni_modules/uv-back-top/readme.md create mode 100644 uni_modules/uv-badge/changelog.md create mode 100644 uni_modules/uv-badge/components/uv-badge/props.js create mode 100644 uni_modules/uv-badge/components/uv-badge/uv-badge.vue create mode 100644 uni_modules/uv-badge/package.json create mode 100644 uni_modules/uv-badge/readme.md create mode 100644 uni_modules/uv-button/changelog.md create mode 100644 uni_modules/uv-button/components/uv-button/nvue.scss create mode 100644 uni_modules/uv-button/components/uv-button/props.js create mode 100644 uni_modules/uv-button/components/uv-button/uv-button.vue create mode 100644 uni_modules/uv-button/components/uv-button/vue.scss create mode 100644 uni_modules/uv-button/package.json create mode 100644 uni_modules/uv-button/readme.md create mode 100644 uni_modules/uv-calendar/changelog.md create mode 100644 uni_modules/uv-calendar/components/uv-calendar/calendar.js create mode 100644 uni_modules/uv-calendar/components/uv-calendar/header.vue create mode 100644 uni_modules/uv-calendar/components/uv-calendar/month.vue create mode 100644 uni_modules/uv-calendar/components/uv-calendar/props.js create mode 100644 uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue create mode 100644 uni_modules/uv-calendar/package.json create mode 100644 uni_modules/uv-calendar/readme.md create mode 100644 uni_modules/uv-calendars/changelog.md create mode 100644 uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue create mode 100644 uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue create mode 100644 uni_modules/uv-calendars/components/uv-calendars/calendar.js create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/en.json create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/index.js create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json create mode 100644 uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json create mode 100644 uni_modules/uv-calendars/components/uv-calendars/util.js create mode 100644 uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue create mode 100644 uni_modules/uv-calendars/package.json create mode 100644 uni_modules/uv-calendars/readme.md create mode 100644 uni_modules/uv-cell/changelog.md create mode 100644 uni_modules/uv-cell/components/uv-cell-group/props.js create mode 100644 uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue create mode 100644 uni_modules/uv-cell/components/uv-cell/props.js create mode 100644 uni_modules/uv-cell/components/uv-cell/uv-cell.vue create mode 100644 uni_modules/uv-cell/package.json create mode 100644 uni_modules/uv-cell/readme.md create mode 100644 uni_modules/uv-checkbox/changelog.md create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox-group/props.js create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox/props.js create mode 100644 uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue create mode 100644 uni_modules/uv-checkbox/package.json create mode 100644 uni_modules/uv-checkbox/readme.md create mode 100644 uni_modules/uv-code-input/changelog.md create mode 100644 uni_modules/uv-code-input/components/uv-code-input/props.js create mode 100644 uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue create mode 100644 uni_modules/uv-code-input/package.json create mode 100644 uni_modules/uv-code-input/readme.md create mode 100644 uni_modules/uv-code/changelog.md create mode 100644 uni_modules/uv-code/components/uv-code/props.js create mode 100644 uni_modules/uv-code/components/uv-code/uv-code.vue create mode 100644 uni_modules/uv-code/package.json create mode 100644 uni_modules/uv-code/readme.md create mode 100644 uni_modules/uv-collapse/changelog.md create mode 100644 uni_modules/uv-collapse/components/uv-collapse-item/props.js create mode 100644 uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue create mode 100644 uni_modules/uv-collapse/components/uv-collapse/props.js create mode 100644 uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue create mode 100644 uni_modules/uv-collapse/package.json create mode 100644 uni_modules/uv-collapse/readme.md create mode 100644 uni_modules/uv-count-down/changelog.md create mode 100644 uni_modules/uv-count-down/components/uv-count-down/props.js create mode 100644 uni_modules/uv-count-down/components/uv-count-down/utils.js create mode 100644 uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue create mode 100644 uni_modules/uv-count-down/package.json create mode 100644 uni_modules/uv-count-down/readme.md create mode 100644 uni_modules/uv-count-to/changelog.md create mode 100644 uni_modules/uv-count-to/components/uv-count-to/props.js create mode 100644 uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue create mode 100644 uni_modules/uv-count-to/package.json create mode 100644 uni_modules/uv-count-to/readme.md create mode 100644 uni_modules/uv-datetime-picker/changelog.md create mode 100644 uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js create mode 100644 uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue create mode 100644 uni_modules/uv-datetime-picker/package.json create mode 100644 uni_modules/uv-datetime-picker/readme.md create mode 100644 uni_modules/uv-divider/changelog.md create mode 100644 uni_modules/uv-divider/components/uv-divider/props.js create mode 100644 uni_modules/uv-divider/components/uv-divider/uv-divider.vue create mode 100644 uni_modules/uv-divider/package.json create mode 100644 uni_modules/uv-divider/readme.md create mode 100644 uni_modules/uv-drop-down/changelog.md create mode 100644 uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue create mode 100644 uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue create mode 100644 uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue create mode 100644 uni_modules/uv-drop-down/package.json create mode 100644 uni_modules/uv-drop-down/readme.md create mode 100644 uni_modules/uv-empty/changelog.md create mode 100644 uni_modules/uv-empty/components/uv-empty/props.js create mode 100644 uni_modules/uv-empty/components/uv-empty/uv-empty.vue create mode 100644 uni_modules/uv-empty/package.json create mode 100644 uni_modules/uv-empty/readme.md create mode 100644 uni_modules/uv-form/changelog.md create mode 100644 uni_modules/uv-form/components/uv-form-item/props.js create mode 100644 uni_modules/uv-form/components/uv-form-item/uv-form-item.vue create mode 100644 uni_modules/uv-form/components/uv-form/props.js create mode 100644 uni_modules/uv-form/components/uv-form/uv-form.vue create mode 100644 uni_modules/uv-form/components/uv-form/valid.js create mode 100644 uni_modules/uv-form/package.json create mode 100644 uni_modules/uv-form/readme.md create mode 100644 uni_modules/uv-gap/changelog.md create mode 100644 uni_modules/uv-gap/components/uv-gap/props.js create mode 100644 uni_modules/uv-gap/components/uv-gap/uv-gap.vue create mode 100644 uni_modules/uv-gap/package.json create mode 100644 uni_modules/uv-gap/readme.md create mode 100644 uni_modules/uv-grid/changelog.md create mode 100644 uni_modules/uv-grid/components/uv-grid-item/props.js create mode 100644 uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue create mode 100644 uni_modules/uv-grid/components/uv-grid/props.js create mode 100644 uni_modules/uv-grid/components/uv-grid/uv-grid.vue create mode 100644 uni_modules/uv-grid/package.json create mode 100644 uni_modules/uv-grid/readme.md create mode 100644 uni_modules/uv-icon/changelog.md create mode 100644 uni_modules/uv-icon/components/uv-icon/icons.js create mode 100644 uni_modules/uv-icon/components/uv-icon/props.js create mode 100644 uni_modules/uv-icon/components/uv-icon/uv-icon.vue create mode 100644 uni_modules/uv-icon/components/uv-icon/uvicons.ttf create mode 100644 uni_modules/uv-icon/package.json create mode 100644 uni_modules/uv-icon/readme.md create mode 100644 uni_modules/uv-image/changelog.md create mode 100644 uni_modules/uv-image/components/uv-image/props.js create mode 100644 uni_modules/uv-image/components/uv-image/uv-image.vue create mode 100644 uni_modules/uv-image/package.json create mode 100644 uni_modules/uv-image/readme.md create mode 100644 uni_modules/uv-index-list/changelog.md create mode 100644 uni_modules/uv-index-list/components/uv-index-anchor/props.js create mode 100644 uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue create mode 100644 uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue create mode 100644 uni_modules/uv-index-list/components/uv-index-list/props.js create mode 100644 uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue create mode 100644 uni_modules/uv-index-list/package.json create mode 100644 uni_modules/uv-index-list/readme.md create mode 100644 uni_modules/uv-input/changelog.md create mode 100644 uni_modules/uv-input/components/uv-input/props.js create mode 100644 uni_modules/uv-input/components/uv-input/uv-input.vue create mode 100644 uni_modules/uv-input/package.json create mode 100644 uni_modules/uv-input/readme.md create mode 100644 uni_modules/uv-keyboard/changelog.md create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-car/props.js create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-number/props.js create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard/props.js create mode 100644 uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue create mode 100644 uni_modules/uv-keyboard/package.json create mode 100644 uni_modules/uv-keyboard/readme.md create mode 100644 uni_modules/uv-line-progress/changelog.md create mode 100644 uni_modules/uv-line-progress/components/uv-line-progress/props.js create mode 100644 uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue create mode 100644 uni_modules/uv-line-progress/package.json create mode 100644 uni_modules/uv-line-progress/readme.md create mode 100644 uni_modules/uv-line/changelog.md create mode 100644 uni_modules/uv-line/components/uv-line/props.js create mode 100644 uni_modules/uv-line/components/uv-line/uv-line.vue create mode 100644 uni_modules/uv-line/package.json create mode 100644 uni_modules/uv-line/readme.md create mode 100644 uni_modules/uv-link/changelog.md create mode 100644 uni_modules/uv-link/components/uv-link/props.js create mode 100644 uni_modules/uv-link/components/uv-link/uv-link.vue create mode 100644 uni_modules/uv-link/package.json create mode 100644 uni_modules/uv-link/readme.md create mode 100644 uni_modules/uv-list/changelog.md create mode 100644 uni_modules/uv-list/components/uv-list-item/uv-list-item.vue create mode 100644 uni_modules/uv-list/components/uv-list/uv-list.vue create mode 100644 uni_modules/uv-list/package.json create mode 100644 uni_modules/uv-list/readme.md create mode 100644 uni_modules/uv-load-more/changelog.md create mode 100644 uni_modules/uv-load-more/components/uv-load-more/props.js create mode 100644 uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue create mode 100644 uni_modules/uv-load-more/package.json create mode 100644 uni_modules/uv-load-more/readme.md create mode 100644 uni_modules/uv-loading-icon/changelog.md create mode 100644 uni_modules/uv-loading-icon/components/uv-loading-icon/props.js create mode 100644 uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue create mode 100644 uni_modules/uv-loading-icon/package.json create mode 100644 uni_modules/uv-loading-icon/readme.md create mode 100644 uni_modules/uv-loading-page/changelog.md create mode 100644 uni_modules/uv-loading-page/components/uv-loading-page/props.js create mode 100644 uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue create mode 100644 uni_modules/uv-loading-page/package.json create mode 100644 uni_modules/uv-loading-page/readme.md create mode 100644 uni_modules/uv-modal/changelog.md create mode 100644 uni_modules/uv-modal/components/uv-modal/props.js create mode 100644 uni_modules/uv-modal/components/uv-modal/uv-modal.vue create mode 100644 uni_modules/uv-modal/package.json create mode 100644 uni_modules/uv-modal/readme.md create mode 100644 uni_modules/uv-navbar/changelog.md create mode 100644 uni_modules/uv-navbar/components/uv-navbar/props.js create mode 100644 uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue create mode 100644 uni_modules/uv-navbar/package.json create mode 100644 uni_modules/uv-navbar/readme.md create mode 100644 uni_modules/uv-no-network/changelog.md create mode 100644 uni_modules/uv-no-network/components/uv-no-network/props.js create mode 100644 uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue create mode 100644 uni_modules/uv-no-network/package.json create mode 100644 uni_modules/uv-no-network/readme.md create mode 100644 uni_modules/uv-notice-bar/changelog.md create mode 100644 uni_modules/uv-notice-bar/components/uv-column-notice/props.js create mode 100644 uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue create mode 100644 uni_modules/uv-notice-bar/components/uv-notice-bar/props.js create mode 100644 uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue create mode 100644 uni_modules/uv-notice-bar/components/uv-row-notice/props.js create mode 100644 uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue create mode 100644 uni_modules/uv-notice-bar/package.json create mode 100644 uni_modules/uv-notice-bar/readme.md create mode 100644 uni_modules/uv-notify/changelog.md create mode 100644 uni_modules/uv-notify/components/uv-notify/props.js create mode 100644 uni_modules/uv-notify/components/uv-notify/uv-notify.vue create mode 100644 uni_modules/uv-notify/package.json create mode 100644 uni_modules/uv-notify/readme.md create mode 100644 uni_modules/uv-number-box/changelog.md create mode 100644 uni_modules/uv-number-box/components/uv-number-box/props.js create mode 100644 uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue create mode 100644 uni_modules/uv-number-box/package.json create mode 100644 uni_modules/uv-number-box/readme.md create mode 100644 uni_modules/uv-overlay/changelog.md create mode 100644 uni_modules/uv-overlay/components/uv-overlay/props.js create mode 100644 uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue create mode 100644 uni_modules/uv-overlay/package.json create mode 100644 uni_modules/uv-overlay/readme.md create mode 100644 uni_modules/uv-parse/changelog.md create mode 100644 uni_modules/uv-parse/components/uv-parse/node/node.vue create mode 100644 uni_modules/uv-parse/components/uv-parse/parser.js create mode 100644 uni_modules/uv-parse/components/uv-parse/uv-parse.vue create mode 100644 uni_modules/uv-parse/package.json create mode 100644 uni_modules/uv-parse/readme.md create mode 100644 uni_modules/uv-parse/static/app-plus/uv-parse/js/handler.js create mode 100644 uni_modules/uv-parse/static/app-plus/uv-parse/js/uni.webview.min.js create mode 100644 uni_modules/uv-parse/static/app-plus/uv-parse/local.html create mode 100644 uni_modules/uv-pick-color/changelog.md create mode 100644 uni_modules/uv-pick-color/components/uv-pick-color/colors.js create mode 100644 uni_modules/uv-pick-color/components/uv-pick-color/props.js create mode 100644 uni_modules/uv-pick-color/components/uv-pick-color/uv-pick-color.vue create mode 100644 uni_modules/uv-pick-color/package.json create mode 100644 uni_modules/uv-pick-color/readme.md create mode 100644 uni_modules/uv-picker/changelog.md create mode 100644 uni_modules/uv-picker/components/uv-picker/props.js create mode 100644 uni_modules/uv-picker/components/uv-picker/uv-picker.vue create mode 100644 uni_modules/uv-picker/package.json create mode 100644 uni_modules/uv-picker/readme.md create mode 100644 uni_modules/uv-popup/changelog.md create mode 100644 uni_modules/uv-popup/components/uv-popup/keypress.js create mode 100644 uni_modules/uv-popup/components/uv-popup/uv-popup.vue create mode 100644 uni_modules/uv-popup/package.json create mode 100644 uni_modules/uv-popup/readme.md create mode 100644 uni_modules/uv-qrcode/changelog.md create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/cache.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/bridge/bridge-weex.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStyleLinearGradient.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStylePattern.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStyleRadialGradient.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/RenderingContext.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/ActiveInfo.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Buffer.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Framebuffer.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLenum.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLmethod.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLtype.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Program.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Renderbuffer.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/RenderingContext.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Shader.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/ShaderPrecisionFormat.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Texture.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/UniformLocation.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/classUtils.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/canvas.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/image.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/tool.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/index.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/props.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/qrcode.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/queue.js create mode 100644 uni_modules/uv-qrcode/components/uv-qrcode/uv-qrcode.vue create mode 100644 uni_modules/uv-qrcode/package.json create mode 100644 uni_modules/uv-qrcode/readme.md create mode 100644 uni_modules/uv-radio/changelog.md create mode 100644 uni_modules/uv-radio/components/uv-radio-group/props.js create mode 100644 uni_modules/uv-radio/components/uv-radio-group/uv-radio-group.vue create mode 100644 uni_modules/uv-radio/components/uv-radio/props.js create mode 100644 uni_modules/uv-radio/components/uv-radio/uv-radio.vue create mode 100644 uni_modules/uv-radio/package.json create mode 100644 uni_modules/uv-radio/readme.md create mode 100644 uni_modules/uv-rate/changelog.md create mode 100644 uni_modules/uv-rate/components/uv-rate/props.js create mode 100644 uni_modules/uv-rate/components/uv-rate/uv-rate.vue create mode 100644 uni_modules/uv-rate/package.json create mode 100644 uni_modules/uv-rate/readme.md create mode 100644 uni_modules/uv-read-more/changelog.md create mode 100644 uni_modules/uv-read-more/components/uv-read-more/props.js create mode 100644 uni_modules/uv-read-more/components/uv-read-more/uv-read-more.vue create mode 100644 uni_modules/uv-read-more/package.json create mode 100644 uni_modules/uv-read-more/readme.md create mode 100644 uni_modules/uv-row/changelog.md create mode 100644 uni_modules/uv-row/components/uv-col/props.js create mode 100644 uni_modules/uv-row/components/uv-col/uv-col.vue create mode 100644 uni_modules/uv-row/components/uv-row/props.js create mode 100644 uni_modules/uv-row/components/uv-row/uv-row.vue create mode 100644 uni_modules/uv-row/package.json create mode 100644 uni_modules/uv-row/readme.md create mode 100644 uni_modules/uv-safe-bottom/changelog.md create mode 100644 uni_modules/uv-safe-bottom/components/uv-safe-bottom/uv-safe-bottom.vue create mode 100644 uni_modules/uv-safe-bottom/package.json create mode 100644 uni_modules/uv-safe-bottom/readme.md create mode 100644 uni_modules/uv-scroll-list/changelog.md create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/nvue.js create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/props.js create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/scrollWxs.wxs create mode 100644 uni_modules/uv-scroll-list/components/uv-scroll-list/uv-scroll-list.vue create mode 100644 uni_modules/uv-scroll-list/package.json create mode 100644 uni_modules/uv-scroll-list/readme.md create mode 100644 uni_modules/uv-search/changelog.md create mode 100644 uni_modules/uv-search/components/uv-search/props.js create mode 100644 uni_modules/uv-search/components/uv-search/uv-search.vue create mode 100644 uni_modules/uv-search/package.json create mode 100644 uni_modules/uv-search/readme.md create mode 100644 uni_modules/uv-skeleton/changelog.md create mode 100644 uni_modules/uv-skeleton/components/uv-skeleton/props.js create mode 100644 uni_modules/uv-skeleton/components/uv-skeleton/uv-skeleton.vue create mode 100644 uni_modules/uv-skeleton/package.json create mode 100644 uni_modules/uv-skeleton/readme.md create mode 100644 uni_modules/uv-skeletons/changelog.md create mode 100644 uni_modules/uv-skeletons/components/uv-skeletons/uv-skeletons.vue create mode 100644 uni_modules/uv-skeletons/package.json create mode 100644 uni_modules/uv-skeletons/readme.md create mode 100644 uni_modules/uv-slider/changelog.md create mode 100644 uni_modules/uv-slider/components/uv-slider/props.js create mode 100644 uni_modules/uv-slider/components/uv-slider/uv-slider.vue create mode 100644 uni_modules/uv-slider/package.json create mode 100644 uni_modules/uv-slider/readme.md create mode 100644 uni_modules/uv-status-bar/changelog.md create mode 100644 uni_modules/uv-status-bar/components/uv-status-bar/props.js create mode 100644 uni_modules/uv-status-bar/components/uv-status-bar/uv-status-bar.vue create mode 100644 uni_modules/uv-status-bar/package.json create mode 100644 uni_modules/uv-status-bar/readme.md create mode 100644 uni_modules/uv-steps/changelog.md create mode 100644 uni_modules/uv-steps/components/uv-steps-item/props.js create mode 100644 uni_modules/uv-steps/components/uv-steps-item/uv-steps-item.vue create mode 100644 uni_modules/uv-steps/components/uv-steps/props.js create mode 100644 uni_modules/uv-steps/components/uv-steps/uv-steps.vue create mode 100644 uni_modules/uv-steps/package.json create mode 100644 uni_modules/uv-steps/readme.md create mode 100644 uni_modules/uv-sticky/changelog.md create mode 100644 uni_modules/uv-sticky/components/uv-sticky/props.js create mode 100644 uni_modules/uv-sticky/components/uv-sticky/uv-sticky.vue create mode 100644 uni_modules/uv-sticky/package.json create mode 100644 uni_modules/uv-sticky/readme.md create mode 100644 uni_modules/uv-subsection/changelog.md create mode 100644 uni_modules/uv-subsection/components/uv-subsection/props.js create mode 100644 uni_modules/uv-subsection/components/uv-subsection/uv-subsection.vue create mode 100644 uni_modules/uv-subsection/package.json create mode 100644 uni_modules/uv-subsection/readme.md create mode 100644 uni_modules/uv-swipe-action/changelog.md create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/index - backup.wxs create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/index.wxs create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/nvue - backup.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/nvue.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/props.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/uv-swipe-action-item.vue create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action-item/wxs.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action/props.js create mode 100644 uni_modules/uv-swipe-action/components/uv-swipe-action/uv-swipe-action.vue create mode 100644 uni_modules/uv-swipe-action/package.json create mode 100644 uni_modules/uv-swipe-action/readme.md create mode 100644 uni_modules/uv-swiper/changelog.md create mode 100644 uni_modules/uv-swiper/components/uv-swiper-indicator/props.js create mode 100644 uni_modules/uv-swiper/components/uv-swiper-indicator/uv-swiper-indicator.vue create mode 100644 uni_modules/uv-swiper/components/uv-swiper/props.js create mode 100644 uni_modules/uv-swiper/components/uv-swiper/uv-swiper.vue create mode 100644 uni_modules/uv-swiper/package.json create mode 100644 uni_modules/uv-swiper/readme.md create mode 100644 uni_modules/uv-switch/changelog.md create mode 100644 uni_modules/uv-switch/components/uv-switch/props.js create mode 100644 uni_modules/uv-switch/components/uv-switch/uv-switch.vue create mode 100644 uni_modules/uv-switch/package.json create mode 100644 uni_modules/uv-switch/readme.md create mode 100644 uni_modules/uv-tabbar/changelog.md create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar-item/props.js create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar-item/uv-tabbar-item.vue create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar/props.js create mode 100644 uni_modules/uv-tabbar/components/uv-tabbar/uv-tabbar.vue create mode 100644 uni_modules/uv-tabbar/package.json create mode 100644 uni_modules/uv-tabbar/readme.md create mode 100644 uni_modules/uv-tabs/changelog.md create mode 100644 uni_modules/uv-tabs/components/uv-tabs/props.js create mode 100644 uni_modules/uv-tabs/components/uv-tabs/uv-tabs.vue create mode 100644 uni_modules/uv-tabs/package.json create mode 100644 uni_modules/uv-tabs/readme.md create mode 100644 uni_modules/uv-tags/changelog.md create mode 100644 uni_modules/uv-tags/components/uv-tags/props.js create mode 100644 uni_modules/uv-tags/components/uv-tags/uv-tags.vue create mode 100644 uni_modules/uv-tags/package.json create mode 100644 uni_modules/uv-tags/readme.md create mode 100644 uni_modules/uv-text/changelog.md create mode 100644 uni_modules/uv-text/components/uv-text/props.js create mode 100644 uni_modules/uv-text/components/uv-text/uv-text.vue create mode 100644 uni_modules/uv-text/components/uv-text/value.js create mode 100644 uni_modules/uv-text/package.json create mode 100644 uni_modules/uv-text/readme.md create mode 100644 uni_modules/uv-textarea/changelog.md create mode 100644 uni_modules/uv-textarea/components/uv-textarea/props.js create mode 100644 uni_modules/uv-textarea/components/uv-textarea/uv-textarea.vue create mode 100644 uni_modules/uv-textarea/package.json create mode 100644 uni_modules/uv-textarea/readme.md create mode 100644 uni_modules/uv-toast/changelog.md create mode 100644 uni_modules/uv-toast/components/uv-toast/uv-toast.vue create mode 100644 uni_modules/uv-toast/package.json create mode 100644 uni_modules/uv-toast/readme.md create mode 100644 uni_modules/uv-toolbar/changelog.md create mode 100644 uni_modules/uv-toolbar/components/uv-toolbar/props.js create mode 100644 uni_modules/uv-toolbar/components/uv-toolbar/uv-toolbar.vue create mode 100644 uni_modules/uv-toolbar/package.json create mode 100644 uni_modules/uv-toolbar/readme.md create mode 100644 uni_modules/uv-tooltip/changelog.md create mode 100644 uni_modules/uv-tooltip/components/uv-tooltip/props.js create mode 100644 uni_modules/uv-tooltip/components/uv-tooltip/uv-tooltip.vue create mode 100644 uni_modules/uv-tooltip/package.json create mode 100644 uni_modules/uv-tooltip/readme.md create mode 100644 uni_modules/uv-transition/changelog.md create mode 100644 uni_modules/uv-transition/components/uv-transition/createAnimation.js create mode 100644 uni_modules/uv-transition/components/uv-transition/props.js create mode 100644 uni_modules/uv-transition/components/uv-transition/uv-transition.vue create mode 100644 uni_modules/uv-transition/package.json create mode 100644 uni_modules/uv-transition/readme.md create mode 100644 uni_modules/uv-ui-tools/changelog.md create mode 100644 uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue create mode 100644 uni_modules/uv-ui-tools/index.js create mode 100644 uni_modules/uv-ui-tools/index.scss create mode 100644 uni_modules/uv-ui-tools/libs/config/config.js create mode 100644 uni_modules/uv-ui-tools/libs/css/color.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/common.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/components.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/variable.scss create mode 100644 uni_modules/uv-ui-tools/libs/css/vue.scss create mode 100644 uni_modules/uv-ui-tools/libs/function/colorGradient.js create mode 100644 uni_modules/uv-ui-tools/libs/function/debounce.js create mode 100644 uni_modules/uv-ui-tools/libs/function/digit.js create mode 100644 uni_modules/uv-ui-tools/libs/function/index.js create mode 100644 uni_modules/uv-ui-tools/libs/function/platform.js create mode 100644 uni_modules/uv-ui-tools/libs/function/test.js create mode 100644 uni_modules/uv-ui-tools/libs/function/throttle.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/Request.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/core/settle.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/index.d.ts create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/index.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/utils.js create mode 100644 uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/button.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/mixin.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/mpMixin.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/mpShare.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/openType.js create mode 100644 uni_modules/uv-ui-tools/libs/mixin/touch.js create mode 100644 uni_modules/uv-ui-tools/libs/util/dayjs.js create mode 100644 uni_modules/uv-ui-tools/libs/util/route.js create mode 100644 uni_modules/uv-ui-tools/package.json create mode 100644 uni_modules/uv-ui-tools/readme.md create mode 100644 uni_modules/uv-ui-tools/theme.scss create mode 100644 uni_modules/uv-ui/changelog.md create mode 100644 uni_modules/uv-ui/components/uv-ui/uv-ui.vue create mode 100644 uni_modules/uv-ui/package.json create mode 100644 uni_modules/uv-ui/readme.md create mode 100644 uni_modules/uv-upload/changelog.md create mode 100644 uni_modules/uv-upload/components/uv-preview-video/uv-preview-video.vue create mode 100644 uni_modules/uv-upload/components/uv-upload/mixin.js create mode 100644 uni_modules/uv-upload/components/uv-upload/props.js create mode 100644 uni_modules/uv-upload/components/uv-upload/utils.js create mode 100644 uni_modules/uv-upload/components/uv-upload/uv-upload.vue create mode 100644 uni_modules/uv-upload/package.json create mode 100644 uni_modules/uv-upload/readme.md create mode 100644 uni_modules/uv-vtabs/changelog.md create mode 100644 uni_modules/uv-vtabs/components/uv-vtabs-item/uv-vtabs-item.vue create mode 100644 uni_modules/uv-vtabs/components/uv-vtabs/props.js create mode 100644 uni_modules/uv-vtabs/components/uv-vtabs/uv-vtabs.vue create mode 100644 uni_modules/uv-vtabs/package.json create mode 100644 uni_modules/uv-vtabs/readme.md create mode 100644 uni_modules/uv-waterfall/changelog.md create mode 100644 uni_modules/uv-waterfall/components/uv-waterfall/props.js create mode 100644 uni_modules/uv-waterfall/components/uv-waterfall/uv-waterfall.vue create mode 100644 uni_modules/uv-waterfall/package.json create mode 100644 uni_modules/uv-waterfall/readme.md create mode 100644 utils/Share.js create mode 100644 utils/index.js create mode 100644 utils/lib/jweixin-module.js create mode 100644 utils/lib/md5.js create mode 100644 utils/oss-upload/common/crypto/base64.js create mode 100644 utils/oss-upload/common/crypto/crypto.js.js create mode 100644 utils/oss-upload/common/crypto/hmac.js create mode 100644 utils/oss-upload/common/crypto/sha1.js create mode 100644 utils/oss-upload/oss/OSSConfig.js create mode 100644 utils/oss-upload/oss/index.js create mode 100644 utils/oss-upload/oss/web.js create mode 100644 utils/pay.js create mode 100644 utils/position.js create mode 100644 utils/timeUtils.js create mode 100644 utils/tree.js create mode 100644 utils/utils.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e23bc12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +.idea +package-lock.json +node_modules/ +unpackage/ +.hbuilderx +.vite \ No newline at end of file diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..9b7d993 --- /dev/null +++ b/App.vue @@ -0,0 +1,15 @@ + + + diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..fff4890 --- /dev/null +++ b/README.en.md @@ -0,0 +1,36 @@ +# uniapp项目开发模板 + +#### Description +{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} + +#### Software Architecture +Software architecture description + +#### Installation + +1. xxxx +2. xxxx +3. xxxx + +#### Instructions + +1. xxxx +2. xxxx +3. xxxx + +#### Contribution + +1. Fork the repository +2. Create Feat_xxx branch +3. Commit your code +4. Create Pull Request + + +#### Gitee Feature + +1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md +2. Gitee blog [blog.gitee.com](https://blog.gitee.com) +3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) +4. The most valuable open source project [GVP](https://gitee.com/gvp) +5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) +6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md new file mode 100644 index 0000000..7d9d230 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# uniapp项目开发模板 + +#### 介绍 +{**以下是 Gitee 平台说明,您可以替换此简介** +Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 +无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} + +#### 软件架构 +软件架构说明 + + +#### 安装教程 + +1. xxxx +2. xxxx +3. xxxx + +#### 使用说明 + +1. xxxx +2. xxxx +3. xxxx + +#### 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 +4. 新建 Pull Request + + +#### 特技 + +1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md +2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) +3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 +4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 +5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) +6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/api/api.js b/api/api.js new file mode 100644 index 0000000..a91ebb0 --- /dev/null +++ b/api/api.js @@ -0,0 +1,59 @@ +import http from './http.js' + +const config = { + // 示例 + // wxLogin : {url : '/api/wxLogin', method : 'POST', + // auth : false, showLoading : true, loadingTitle : '加载中...', + // limit : 1000 + // }, + + getConfig : {url : '/api/getConfig', method : 'GET', limit : 500}, +} + + + +export function api(key, data, callback, loadingTitle){ + let req = config[key] + + if (!req) { + console.error('无效key' + key); + return + } + + if(typeof callback == 'string'){ + loadingTitle = callback + } + + if(typeof data == 'function'){ + callback = data + data = {} + } + + // 接口限流 + if(req.limit){ + let storageKey = 'limit:' + req.url + let storage = uni.getStorageSync(storageKey) + if(storage && new Date().getTime() - parseInt(storage) < req.limit){ + return + } + uni.setStorageSync(storageKey, new Date().getTime()) + } + + //必须登录 + if (req.auth) { + if (!uni.getStorageSync('token')) { + uni.navigateTo({ + url: '/pages/login/mobile' + }) + console.error('需要登录') + return + } + } + + http.http(req.url, data, callback, req.method, + loadingTitle || req.showLoading, loadingTitle || req.loadingTitle) +} + + + +export default api \ No newline at end of file diff --git a/api/http.js b/api/http.js new file mode 100644 index 0000000..26dc0af --- /dev/null +++ b/api/http.js @@ -0,0 +1,135 @@ + +import Vue from 'vue' + + +function http(uri, data, callback, method = 'GET', showLoading, title) { + + if(showLoading){ + uni.showLoading({ + title: title || '正在提交...' + }); + } + + uni.request({ + url: Vue.prototype.$config.baseUrl + uri, + data: enhanceData(data), + method: method, + header: { + 'X-Access-Token': uni.getStorageSync('token'), + 'Content-Type' : method == 'POST' ? 'application/x-www-form-urlencoded' : 'application/json' + }, + success: (res) => { + + if(showLoading){ + uni.hideLoading(); + } + + if(res.statusCode == 401 || + res.data.message == '操作失败,token非法无效!'){ + uni.removeStorageSync('token') + console.error('登录过期'); + uni.navigateTo({ + url: '/pages/auth/login' + }) + } + + if(res.statusCode == 200 && res.data.code != 200){ + uni.showToast({ + mask: true, + duration: 1000, + title: res.data.message, + icon:'none' + }); + } + + callback(res.data) + }, + + fail: () => { + uni.showLoading({}) + setTimeout(()=>{ + uni.hideLoading() + uni.showToast({icon:"none", title:"网络异常"}) + }, 3000) + + if(showLoading){ + uni.hideLoading(); + } + } + }); +} + +function deleted(uri, data, callback) { + http(uri, data, callback, 'DELETE') +} + +function post(uri, data, callback) { + http(uri, data, callback, 'POST') +} + +function get(uri, data, callback) { + http(uri, data, callback, 'GET') +} + +function enhanceData(data) { + const userid = uni.getStorageSync("userid") + if (!data) { + data = {} + } + if (userid) { + data.userid = userid + } + return data +} + + + + + +function sync(method, uri, data) { + return new Promise((resolve, reject) => { + uni.request({ + url: uri, + data: data, + method: method, + header: { + 'auth': '1AS9F1HPC4FBC9EN00J7KX2L5RJ99XHZ' + }, + success: (res) => { + resolve(res.data) + }, + fail: (err) => { + reject(err); + } + }) + }) +} + + +let cache = null + +function async (method, uri, data) { + const promise = sync(method, uri, data).then(res => { + cache = res + }).catch(err => { + + }) +} + + +function syncHttp(uri, data, method = 'GET') { + async (method, uri, data) +} + + + + + + +export default { + http: http, + delete: deleted, + post: post, + get: get, + syncHttp: syncHttp +} \ No newline at end of file diff --git a/components/base/changeLanguage.vue b/components/base/changeLanguage.vue new file mode 100644 index 0000000..82c5b79 --- /dev/null +++ b/components/base/changeLanguage.vue @@ -0,0 +1,77 @@ + + + + + \ No newline at end of file diff --git a/components/base/navbar.vue b/components/base/navbar.vue new file mode 100644 index 0000000..57c8792 --- /dev/null +++ b/components/base/navbar.vue @@ -0,0 +1,164 @@ + + + + + + \ No newline at end of file diff --git a/components/base/super-drawer.vue b/components/base/super-drawer.vue new file mode 100644 index 0000000..d09d04f --- /dev/null +++ b/components/base/super-drawer.vue @@ -0,0 +1,71 @@ + + + + diff --git a/components/base/tabbar.vue b/components/base/tabbar.vue new file mode 100644 index 0000000..8b196ce --- /dev/null +++ b/components/base/tabbar.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/components/config/configPopup.vue b/components/config/configPopup.vue new file mode 100644 index 0000000..7cff85f --- /dev/null +++ b/components/config/configPopup.vue @@ -0,0 +1,97 @@ + + + + + \ No newline at end of file diff --git a/components/config/showPrivacyAgreement.vue b/components/config/showPrivacyAgreement.vue new file mode 100644 index 0000000..99b6bb4 --- /dev/null +++ b/components/config/showPrivacyAgreement.vue @@ -0,0 +1,118 @@ + + + + + + + diff --git a/config.js b/config.js new file mode 100644 index 0000000..bc0bb92 --- /dev/null +++ b/config.js @@ -0,0 +1,56 @@ + +import Vue from 'vue' +import api from '@/api/api.js' +import utils from './utils/utils.js' + +import uvUI from '@/uni_modules/uv-ui-tools' +Vue.use(uvUI); + +// 当前环境 +const type = 'dev' + + +// 环境配置 +const config = { + dev : { + baseUrl : 'http://www.gcosc.fun:82', + }, + prod : { + baseUrl : 'http://xxx.xxx.xxx/xxx', + } +} + + +// 默认配置 +const defaultConfig = { + mapKey : 'XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU', + aliOss : { + url : 'https://tennis-oss.xzaiyp.top/', + config : { + //桶的地址 + region: 'oss-cn-guangzhou', + //id + accessKeyId:'LTAI5tNycA46YTwm383dRvMV', + //密钥 + accessKeySecret:'tAdbYQCmdur6jbZ8hjvgB7T1Z52mIG', + //桶的名字 + bucket: 'zhuoqiu-image', + endpoint:'oss-cn-guangzhou.aliyuncs.com', + } + }, +} + + +uni.$uv.setConfig({ + // 修改$uv.config对象的属性 + config: { + // 修改默认单位为rpx,相当于执行 uni.$uv.config.unit = 'rpx' + unit: 'rpx' + }, +}) + +Vue.prototype.$config = utils.deepMergeObject(defaultConfig, config[type]) + +Vue.prototype.$api = api + +export default Vue.prototype.$config \ No newline at end of file diff --git a/doc/1.png b/doc/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2e046c24159121fc26d522f1feb04cef1f34df GIT binary patch literal 54790 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

XFKM%%7(LC|pF(S&i5HQZSns~hdPZW(ir!MXP4 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 literal 0 HcmV?d00001 diff --git a/doc/2.png b/doc/2.png new file mode 100644 index 0000000000000000000000000000000000000000..90a93f372e7baf1c52060d93dda109e1c35dc8a3 GIT binary patch literal 78746 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

YG#ou~}>oeF6ygfx*Sy*@Jt)Dv&poe|@|rog8o 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

50!mQWKjDbfw(nwkxr@Jr!sp0@=~eW_Sx1- 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

8X3ge(qr>)4 z9-}adWes*eoY0 z2F!kPv>4_(a8s?S37)n$X3p02-567`qvvA|UZQ9A4SuXh#O7IwqpKs*lB47a(;5OQ zB5lOILFl8O*od2$n1ENul2|{X9+M+A^u*&$7R{z~Wn*3_V@6~=#f+;2dalgvX({SP z$HHR<;tX_j^6A`|C}Iu_WYYK;U$Rn=+kVzif=u_yhIGelfI7V(SH z;TYmtvzbQV|3O1;GiuW2K4@Sy3=e$Hsvb>EXfj}mMMTH{?ZfNE6Kcpo-UZP~F6DAs z=<^5Of^N0;0}E=>5KB;fk`Cj~1uld)@rymFWB?@>lc(8(PGn^4Ena$rX)%u+VL~cI zn2p}T@-XJOB>zq6#Z^-0Ozc=BaT`WPB4vf7tuLR1r|CoJN${d%XQM}CscdEON*D8x z@OG&$=^Qxzg@FKXob#54>%`l;dt?2^(}7FPUz205B@aQ(C);gh$rO#t6&Al`IJ@5B z)O{CGY%a%D3|a5Pb)IrP+18EvZBc_WmTe=&WGVq#%r;AiD8334WUAId4SX1@X+X~= zN3k$spx^(I;b2#`?&;{9{%Uk6A$G+b&VJ`HWHvs|JTBfG`>}UNKop-aj76ir{2h-9 zS^z}5<;1kl*t+x+md5+dX>#znioZFYDXBuyIgcAi{iMh(qQnpxl;L4Kynlkz0miVq zXp0Ne5ohFPgwHiRQZ75iU^OsAXsndZVEK{7aISjzsd=S8?#_88=k9?Y$7d4BbJ>De z<*8mq!4g8(MISign%yy3#_Yi^+8a{As;6UiH=P{**}s83UZm*<9O^{X)v3-~t){+6 zjM7Q^9^Co{3Vx(c9o;?~{74Atj_pPS_Ipyh4zg>LecjPEs$tYsRDZ7CaXx*nu5r~a zN&0mBqr%|YQDI2+W-Dfb0IOw+ndqBGikOcWUZ-g52cK1bgRH>;racBbC<+7af*cPE|OGq6DuGfg(+C>nhhL!;pko@wPP0fzHdxD7UxU z3h6gA%S2Ar1D!PALL5$%Cw1PXBLODGlEZDJel+`Y0({Y8#zzrUZ=^@Uzg;3i_b}5l z4UoE7JfX27uk^oZ<&(qv=&joO>qGHtheBT}@RRz$zE?|axR!DanZ}A(#1NRhK z&+C>UK|HbL6A3*M=X#|LZPPNw5TA(oD;W!M_i@_7U*D%J=>nG3=No%DNx&=(D=fpc zd$o$^at3=6w)K5`=JIK$7{YzO2dTzW*E%KCaclA|oHRa;+r%{&_pjOc(D$i$I>&Vq zIHc%IQo4wveen%&<6&T$3``5 zBMsY2#uT}8VVV@~+$GZ+`Q-Y#B5=!!AfoRZ4>l5s$VhZ)rU$%>4CUWd9v*P>5YXyJAe-KWP{MZxr+YnvEhH(D*uAEbv?J|z1dJqE)Jl7wBfk}VgGu|kQzbe zV%nS(+fY4MLLD>Huh(8>+Q89ot0_8&y=mi>wu}2t$rm?%wq=?&V{|qs!H^yKa;+#K z-59h`qiC>kvewE-f@{h!Zry}Gpg+P`&pVjJY_L&aUneovThBCy>JX=h#XUX6g*kTN z@E3w01b>V-`jz{mLa8D&Y#+T|l?8DKIN?7`^=BxT&FJ`Iet5o0v6#LW$HaT5#^Mc$ zy;TAk0t2GGy*)k&{EPjH|Gm>j=iI2%SrsYAn5NEhGk-dBQtmA{**I#C*Z0hq-q-h6 z2iy#*!vJ0`HJoWx=_nri*DNuH^K0z2z+>MK&iq41R<$JFq)Zk^qOv!|4Q237s+QF9 z8}V9)ha$KqrE()(gw`ufni@G(W=rATt7%JQ*|)!?PAue8vQS&9QwJ(xObVT94We*L zoV3`wR+dVZbf$HA^^Yj8>}6IQVsjr#oc&0~E0Ih12$1!~6Bqj9YV zm}U%lsQ6-}Jt1ghQC(1RcE*C_0ug^xx1VRGB>gL;ou^L$CB9ebbSyQdKTUBq82!Et z7zKrZ&22Da63hQ&8L=+gNE@j!F5#yZbtET}c)v~|$&!$f!!n7e?lh$f8L{6Qo1LN9 zStlISJO>nWD|Wl^@wbb6k6gyvi|?c7;~`QZ7(g3|HZ{ujjLXq6JvptI&s)FsNZ^wt1PUR##Phd=Z5xh z7_nt9PV0--K8LHZVVbq;>`)k1y9vy~GYF{vRNldsqh*PYGBU?3RMh>??#a?HN*wp` zyX|Kmo_B~Fba5h(Z@POXetgD`uBmcXKweydS;Yc*995Q&c~c;+42hTn&iKoZ4Q~c75h}~WERJ}FZzAJ zG?4*0_S(kFj%DYZH;{PDBw;saqg8K@j*w4tbTMT)E*sT-iqXYc`=`GBl}Y_j$N(~i z2t7$_GgB3wG7vANLg@QsNv-K2uKXt^R!o^08ZT<}uXvj2{c>?w6nXF959N73tZWdcB-^$O`zJa3n#vX@)0&Ue zU^-aBh+$rQj&}mq{9eSoItil(ro75>)(RY;c2+}yj<}n;ey`3*+J9$6@H3zhjSxAV z^pNDw!JQ}EVaOmVjZD5>xVwmuLo>irZXJ-yb0~ZuzMHtX!`n z&b|z7nc|h>p#o#UI)#%u#U!W3c4|7k91<4T4OmyAG7B3F9NDMI`OXKa>XVdF;0A?^ zQ`4K?-+fZNc|=D)*jET5bH>ju*xLqaWf~r=A%)rxe$_e#{@K{+B zg4+lE?QclLxb_GL2uM_(6X)qvIDPLOhC$ub%D_zZ?%N@I_v@9_JTX>&K9dR%Eh)&L z#7Fd|D7(CEvBH`~u{_L2k?aHV&xIkXuMOvCl$AAka@=vnE7%4Gz7EZS)I<%2Fq1#I zxihW>(`Gx3W{aFMj3t%{s{8z%$Zwum41bkAo+jA1KN{UO+_e9r$2Z;C-$f(3CKsUx zLSLCAqk`gvf>)A)i6p_+YZpgSeIG`qdB}<||}l9hEf^Cv1tMS(#}%rUcyzcX^Mgv!|Ns52R6Sx1123oj?l3Ip?@) zau;GDt1)!WT&^}98nmE*=?|!A_8UxC!{~k7_OI>JBFWb?JougCW=Ql75=6dmctOZJ z4yiN?4ePbAVw(icp|fwPZifcm3QFFH3{kW_q4}u6UHhKPUx}ba$tzJ6xnnD&+jvt} z&4+A!q1><3>a=TiuB8#Q)=><5xIFc3%rHrgqlJk*C=)SFvUYE+$(?#?dr&+?jeS4WlEG){(smoe=Iv z(jn#JJ0$zH3ZpX!cxd^`r{}nQ{j_jxkv$_oYa%1ye`lODuYc)P5(Hgj?wgq&kE9e{ zH(+~lZ9aJjzJh*79b2I98FLq4j&a6rbW&)tq#>mAZs-6 zkb(HQZgv}z3z)QAa0ino~D>9Z}Uv&AwUC8};eHZ)H7Bnlr5?0_qQQ&UN zhY$B;B|CuxbGB`5Moy&>{ql1FOuMd0o@XrC(^U~?xs$<5ixserK$|KjB9+=e|BgXvWJb1Ivr^2BQ7Or5?h%5EfpMb^Y8g zE_f9h%a~S5q^%hB4MpNADJmd#ByF&*@2id49HkdmE-uac7!u|oTh@J6iR?BbYbaf} zEQpu`gRIlD9~gSOvh?9Qny$@Nx@vbvznkH)sn%dXNsM4X)+IBe0+Xrsptz>&=~JU3 z<3{x<93&7i+58t!E5oJoD7EBERbQH=5x??gY9!LHxckOYvDE?p;g8Q$#o}?H`?ln` z9>-^6pKC4O`j`!7(+p@eR!mB}msqHgN3X8MPNB5V*vlkFsmCSkPDja%4%?=dIIs~B zApX!rrpK706!$N$qhB3b4lhA8K7$}K1X#~PKF5;bqS&jki12)9fMh{l!~MHbuD+Be zkEVZFcsN$Jjm1YJ-8E<$;sToW_`Ha*JJSVUq)TGESakn|uzptncWs353`(YwKWIeH zJypq=bfE%1m5D7 zJ1_5QF@`47l;}@OX?zNLJc&Zt0&Uwn4GA(L07B?KEYD+sKT?H##Wn<=8>BPN6er5| z-p@r35n=v#mOKeVddee?CQVxWl{P#3K&}&CltE@cVV-u#OZEfNahJ<8YUV7pm&bv- zNT)GD<=!OYU3Im09_1(Q2IZNJm`TTVvTWMbT$|YC`20T2^bV(IPEhOuwRRr6KvbQ) zGoM(P2#4d;oW79DGL35TQp0OL*yN)FB)=T83WQHi-FH;;!Ju?#WB1E^cUr_j7_g6XCp?u z`lOJfvMh_211)UR>aV#39#oKtG^-tawZ6;|F{r+W?}2KH?E9Q%bj!Ik)x~EZca`Skh@8}aSV@| znj^b*#dqk}IBfLCbZe31?Om&!O)rsvms8R3J|slA{{9~9pyt_X^2yruWi6t+Fhr($ z$23J(uT|VXZl5cAw<_H$J_bJCj1;r?mXei^zO)chA2opM_ceu*+T~OudFKck@Wdr% zwiGhmQZ9Eh*H3SW(qblIhbAc%+_lPu3742&-5p-(3apCjQ=5^My8Z>KWJVusB)r>?3vN@{vf3eKkQC0XK_ zWQU4}_29ED5KlngdF{6vD7?&t|b!0kNtvsB6 zN=gGZ;`k8dQ4L$yc_=!=eHF_aN4gk^LZ}j=QRrODyFpf%Y_A05F7@Q!|{dY9LAuzfzu|D@_;j z^~M^E`9{E^6@xL=m<~U+Daam!DHP#b9L?JydGRgbk??$@aOmOw)q8u>t_H!HIWStw z2QRM%GkaKSW6YgOQ^}b{?CMHW1ek0|486Z^_HdA#k?03ZeRHGh3zy=c zESJM%uAXC=2R|lTWxwSP{MbI%pM13#BEKGJU50U{J~DBal=A480P=dXO%-k=_Ay4s z2+Vs0-IMHjCxD!66Siu@TFgJNES@J>gPzEjIbuMO?r|mWzW+-jnU3NPs!2*I&pvK@ zqGXar#?J47DTm`XVu|q=!a%oN!U9DE$B^V%Yz=^&RJGT*E`Sxu%#OulM?q4JIlagI zFrjTZd9X7@^N%`3StU1=L1t(jZLSgg<>!e{;q-lSHIaV9)j zVVArYQ#W*|#0eI}I>W$t?WE2rf|g0sRiPT*5m~{0T+ue07D$wkELZgT%?Orv5|>`Z zl>AR4MZ9bR((W3w0#*mVcsjDVQnK(pk38A)>{S@0ob(QV=r~mt^v1PCo}CXiipEYz z9htoibG>NF092Xa+LPpV)>YA;`x}=e%GU@awb$@w7gh2MT6vJL5J!@}KNz)5K#Tc8 z2m^L`+ca3a8u~`ww2JY)rR-Y$2NKvnhFAJm{GAu}2kAc+$;<7D(p~azJlf0LY2A;? zpzWo^3eof+!2P5SB3DTyo+9DmqIfCnuAS?S?$-!GGuOOX7t>KF_+bpV?r&nrMm!Ti z!qbvwC3^qz1o)5mGyl=`g({c<-A!LO0m&fEz(GWqr1=7G5Q~c+zSR`sQTkSE9ns}>?v$IqlC*XJZ3q^jH(_>3w>i;p=P;?fTB>9F+9WIa|( zT!DOeFrD}Icp?mk$9q7I&HQ=)Zcezg@zcn3d^e%6cYRx%8eu2Cj5Q|877Vd1nuu?h z(N>d;&>B^L2oue{%&n=V{!ftSraYt5sVK))=zC1!|?g6r@Re!bK5s$*?t%v$)vS zpu7A6X3H12U(4eX=F2SjxNYwp?7MFm-y~y$y}&gOFPLHhMn)e2@IA#C+staV8tk07 zoMt`y!5qA>R&XRRfKh}X?vq+CJ2B0_eEMaSq4jZS;Yv$(>iKpr3VnoQBPQ*mtY+`? z>%S0gYYCr=cmFV+(tiJ&061VfsWqJIY z6?0W3NQ6=`-52g~uY3@=r_USR2zDvu-yNq-Q@{B0{EU7+T=25J$dGq8NqAKMozWJ zE1Ck6JSWIwMvm?1Ge10bl{fW`&TlqZKjIt^TsiD?av6zCVsFUd#vz2xfjT|8jswxP#*^%W#LLf=Qw;2h`?PkH! zG*C#vzC4z93gum*0_$)6Hge&MDG8msTlI@ml;kSSlZ<0P^+V2@$o*srhk4fHelmelpp;}kuO@T9PB>7d5cnaz zE`M%WLpK%{K2Nr~VrJfApI!0=j81okY0cxF-gO~%C1>3Qd5anNz8LAuY*4d9*G13H ze{ay#T2Rghja$I1pABTAWhL>#!1i4|F%gw5;m3WSvQb+S)>nk`ttShQ!@k80w=X@H z@wy*f?-z!tQvN)EJiyI<+xg@Lm%Iq|X`PutZAMuuSet-enXJ|P zA$`%VbUXVY+P0fvF}cYeH2wSbRI~W0+TdkC5}sgtlGtcOJ6iIeeq*BjFXFEbcY!y| zI>83a4X-19^at#orlVgvf)jr?x0?Rsek#)YvG!Gxq~+uTD%`T%Dd*953Qpx+=^S*+ zdZBrap3hHU{k_@t$n^Os+pOq`(`E4i3!VhEAawI9F}$YZhs?))iqe;jD|q(8 zjq8Q!!Np;9amnWfG$x+LXfDD$u5U@%9dMcJ--qYDoWZDU zlIDdfMT9FnWPHKqZO;*t1bfu z&d!19)uwU%rihA#;vz4H(JL(K0FFZ6dYTj>*=hh;m(rI60fYrcC5mYh#57c*3Q)`s z1f=d6V^jd0Q7)2{94Dd{{&48f&9MUbyZIn z$1RDJsqo&r`RshDYCaO!Lk_zeUq*-e)kd4M;*MC8`yd&QoJkY?Q@wr-mHyUiM{H@% z#-uwOiSXIwj%9PH_?nm@J%{&B`snxvobCImqhqEdOg;zM6PIe@!)N^@pP3G_nYau z{vUA21Qz!+b^mKxj~m73t}tOJ*wP)*=I)Z`xmL*!9{j=Zr_T*4b*%Q}Mw6*=75S|4 zF@Dc80bluL-Jn;l*6TjLEC>J=)BwYr`iqEkx~cT_rDbP3|$ zbP{8@OQpI|tw2MsGdJ&2AO2OzPs;%LpGl`GW88pDr2exwBV4{Kc*yncDz;{DCb@9`!G`RnMGZ5+?+y6&sPRi=( z7fr;2!>Ls6Vf!$~f4}X&H{}2Q36YwBIkZ+N^5thGciPLnr$F-$d03+a|DfGcm1Oyv`SOQ2ypBxLCU8gh=l^_q0yx{w zo8UoxFN9J9T33mW_qhLTIBD~?pIf-wwNCCEE&m7g5;Knx9Oy4=o<3UY`OMwB8}#&)cMk=jJ$SP)kFHcqs*f^5D(vO!?Tir^$`l|atkO-F*GGx?=mc2{T6 zBk>15u`D-MJqFLoU_xH6hO&QL^T^ouNMBB$&nWNXOQ0s@#I;*s@nsX;J#5 z(o(|#InCVBOth&Wx*cxJhRb4#dFASP2r_e`UekHsq9*4MligK?OCnjI z3RR9)-@R`gpiHaxv1mPp_~6zpx_~cD1S2gi-yfTHJUdr@FbXMDlc${b(VROcNoC`<5J-Svx}YrXG)1qt zw@LG%!fy6X?eRU8$&?l3truBZse2EUBZCc>=k=kYSLIc8uFFmXK`MkA%RVTIc zu~;}?px}%q$#tODL0>a-stplvs3}p*J~$fdQj}uV@J$jd59MfeW=C>`@MGU+nq)5( zR7-n^(J!h4m;&d?!fsJ;-pCgZhYS1asuS?GPeS&oX6N#!*f&*{gJtPhE_7lJ?DK3j zS@|NIv&;^SA=|zOhmIT6U%qGa_OQk03tMcMyWTsnUo{;` z?))Ov6eo2x>rj}s;)>l$2OiOOJn0)}JIJzJxoVTv*CiMR1^zO&x@Ud#Q*6~&5rx28 zTjyhm^`pi)!cy;TW$ZQ=R$_yYzE%G&z&n5mj%PYuhLF*zwz+N-8L0Gb`Nw4%!=9v# zN9w~lNfV9rV%q$$;`)cyG>IM6W-%6$p(rydX zeB?F6TQx%JjtX*$<7jf0S1SUVc=s`ykYPuU!TgL_tg&QBWxG5LSbx6kGDC#A*K-i7 z1r@*zUv~TY^_{3;YU6rUCeR||r4-(*^T~t7G(<8Ib(6&p0Zz@|$X>CIR@+6{RA$BZ z&*yAI-alZ?EOvis?wDy6BmiP9R+cJuH~_PFmKL0|)QBVNTRzJRz(iOBXkI}Sj@!Tt z*3}prltgO!of<`>uU+YTHih?tUG~^L%*%k$X$Kv5G;GnMGfg@A#zGNm7jOvT$Q zaS@E|S>ryH_tcUhRQ<#Q#fQHu8Z8q5m19)&%9lPo1{kg3@_mfSdMl`gtO-mx-Hjci zUxI?26UoZCPF9RF#9@WrUdnOvoMRg~x>e#S8BBK}Wg@C!IaG}-((F5t5<=g*Xpnb3dxWu# z|Iprm&Z4KflJ#oBeyguuLS{$78gdJ_=y}1uT-SCF$lwn&L(bJ{@_>|6ed16_^}(~( zZfdBf!3b4BuRWi=e%m>sVS72uFTl)bhC~4@4o>z7;RLG+UFzxPlFkQQ6eNSF?QONu z3S7L(^sAPivt2%0p&8X|uP7cm4hUKS%xO^E(>N#Vbfb}V2=H0KAP3o+SIza9lR7u* z083|(?8AZ3$XKj0c4FO~OXa5c=qV1{z&d8EJO;l%;Tbtzea%0dOG-)#+F?cG>EAii*J%yQ&I;yxh!TV682Hr@z%@_98{rp zQ{?J@g!s|wRGZWczLI4YkL#t}1!Otf=2-mcn8?sOk+)m21=y4}Pc)%$n3YT&wHua2 z7{=hGF3YCLA?qAEk522T_#=5?j}gW7eZtNpU`O6feVq0A2pS+fwU0dYF5+!<`ykW+ z!OI(NEWssYN1G_BSzMoDYwv%`T7rdMj7|w^U;qP>$N3uu5t96*P}1A&aZV6DyaAsF zncTcma$Rb(8<3M{agy1sC?CV}ZMlWS&_+X*pgZ1cAS)JQRx&X*rQ!4yv+k8%?}*c_ zco<%x$!dmh8<9dV6x<`4a=LzEAVB=$tw*x%y&#^h-=xpxxhlK9YI+tp<}_?BUyM5$ ziG}Fn7RT{{SF;%=EHum5gu^l_juuz2u%DyoJgmx0?Z4Xh5Oz+pFmOP+FQIu$y%U0Ei}KoP1KvN$J3AtKb|@}JDy$4x+A4yZ_At@nzr_~2ipY`J(*Hd6 z?Fi&nYdR;HJQl2df4^|%^(9xhAyi{+acEG}`c2;G`T>b$Q6pm3J6Wr@7p3;gs{CUF zTuEF;zxTsHYg&88DP;~|=uihIMa(@$}{8S6}{D}_DL zdwE-dLSqYpq9N$?+0}FdSh*ChAyS+cdp60TBeky+v=y^fsbz8>vRAxs&NWZGP}%1q z)J$k=|ENqKvpG3eP!DxSV+BItkR~QIrzt-NN0ba_E|;_XRQ!ruzdR-ZOT%Y@q3b*O z-2~zPXD{f{FUEg~B zto4-Pb2|DBDdYQNwPkM%r>dM$@Az9#YiCefH8Tf#Y1?f_Q+Q)0{6mZ`!d+R`GYaJ^ zHpS~BF0y6m3F%xGCi9lepwdOwiYF%Mg(ooFJif11#*| ziA4QWb|O*91+BJb7>j?7!eZahrS}I~OS9D!m{lxPSYbAwY6j=`vWosY)WkVG@Xf_p z@Hm%O?R&**<;70s7%H?9_JbwchVJUV^x{vt4Iycx=1{nGkw7xO!j2s~R&iEW5s+Kq z$UK_wsI|5(y*ZJ;m3c+OQb5_+^p*TQTc&C%kMR|Nm&)RuZ9?K(HQX`5Kl=p4Q&kaZ zK-*%(U6xM{VFoF~z`-so_pvc&^H+r(Dqym{YU0@{7mhR+r)+f&6c#=88My_zlqwtM zwh6s7h?Bq=FCLLj@f}$_s?ndH0V^$MeaGmUr?r!#H+IKmD%Igl%7*eqX{kWy3Y6ZE z-Cqf%vS5?tNug>gBRO(PzcyK&Mn|BPl09RDm`U9c#gKiNEfEwDXhI2;%rx=jDtT^bXrqc_j!?R zfQEvGB7~3p?}rV^itvBoaGYPtPrCe?dQU#jsi*JsCq3ic`Rr5?@k{?H$C{m;Uc%u) z)%*HV4Pf~f4SV}S$Lm94noqKnt8ab->=LGcI`7d$Ym`SJ@j zZuBjLd+*zSr>P>FIs78b3XvI4u9E~NukDUN%1E|;>JK|P15%u7)_h^x39GR8cjAqH zQJls$h`**Z?kOUZvv^g=902l0s!0Tk#&4Lq%6J$V$QhFdlR0z#x0`?-nv^Hz^|*gC zm5X&7E{5N6ZW;bvAD-rEd~=_$mZ8O`j0*U1$QR2qL@}{cr$Xm4K|(DV>>9gl0F*VW zAT#9n+zZ_!u!qm?w?R2Y0gR5)juBf8&cjqCdhLM1<{JjRKWkaW-h(8g{FcQx?}EOh zn~9X!y0}<)G%+fGA& zRO)Tc&In8Z<`2TpAE&j9iR?RTcmJT>j?OF*o%zq^-x2KO6>twXYq3H3ky{Isho3gCs0>_OO;*8t3k&bBF}bfO7cOZk`5O?-%gdjHo0OS2nM9kGitibD1)z5U%e}#RjqNgXVGO@&%Q`- zp&Nf22;Nj2R~e?XVN9xGEpINJ1hC;#qvc2wM?>oUma-(kht(QZiV*RDbUXFWO{wzw zq4T=>T$BLn(h(uVS^>d|qnuXlUF?gcKo|W}F^a|3x*{tQ>C-X?3e6}bOQ6hAGWm{n z#yzLg{4XYL>v1z%Owz9{cF(~9kmIS$p%%K}=Kds?uAS5Hqw(1)$m(I0eS) zShdxR%`}o|VO+0uJXxF#GEM0;ny$lYf0f`zQmgOQGLPjp_Tax|qMPVTpu=3?hcx0nk zb4RVMzwE)he?{EH5t|=X0INvMH)|lp8Rw@`qbqtMS+Lyuhzq9O5;Xz+B0&DdL}q zX;{GN?(s2OqTV)bO^wuI=OUOkRMGynE1+xeO@Gd$r}Rrsg`gNK(mNZ0^$&%HcGPwy zl7rS@?8bV4dpLFdVuwh5b8y#5aHXt}|3O^^%a|y;p7OreJ|?n5Pc`XClev>Bc<=v4D3shPR<>$cAA z(Lmw4w^sAa@;;@(puOnmvQLBPt#2gpD>IkN+*6EWLs9~^HMC}<;#S51{j7Eq+vobg zxuWyH@`-U4YhS3E_i+WtF(*bV;5}GF4YEvv+7=kXLhby$-?huamc%RIEp_M+aRXyz zK{5bPK3WTCE=xRXrmjd>$k1n5(1`@mI{azrg0-D$4!>DRdhbe@+o;cvxu74!Htbr{jb`ub7K7GJsO)r)kC#8F7pS~N<>Z-n zOh$+unrq?@6SH@&R3Q@_WB1U%Zo)MrlJR$iC;NCmkE<C< zkqHykaFT|BiWO7N?`V<<1g z&F_r*(`R@pc7%UpB02Bq*3%xD+8V)Mo{GvWaX8}NH8?r(=-@C`HEb_4r(eSypvN`i zk~1V;USEpy zm(T=!%5G$kwIHt69-IcS@Bk#*cq{#dKP9E^@2Y13neesV?{z|yH&%12fKhe&L)kRO zNG%le-#6bD;DG1?qV*fvz8TvHQ1zJQv%4?ix7c!(m8Npb*)7gBy(bc2siKASFzD0( zUc8RoGVLEYgb7T18X7R~j=wSyARR#GWDx&3hRq+wsu_jLgO>ivpA zYk1sc<_mhGdux%ue)-W^?7&F3eGBRlD;Xj{&NNEk~nFpQ0?VG||YB>QS zWm@s~jr1`@ke%N|&nOLoCc5aUt+9jo9COTxV$Cdf`CL&yFaq%n1&6$nsuGtwG^dwb zbE&xj`kWt;8Y%6)1v04PPgWi6!hwdgD%8p1*4=Z|A@8#r`*$bn-n@UG^u}e3^l-Zq z0M{0Tg`ys){(;nzlO#{jioWp@WJ+fFcERK)+-Zx%Q`!R9=So2P1n>%DX~1rZ)+BT1 zQ$tgTvs6To7>wQ1fi^p)GVv>YDq*C6_5yTD2$Ir0tU0VT8_0{h^Ck+XrA`Aymb5Jjbj!^kZ4wtf;C0{{+RIYBUp-q% ziso-0ESas38N>dpj{`7bv!1<2^4xV(g@@rxwDs@V0&H2DRihTT3TAP>uAUdJ9@b^Q z!twA8nu!W<>4wFx64oHSf10XpI(_Gm#JRL(*GtZEpxRvwy2#=@bt4O(BINz^Ro?iIEe&F z1%U!a(C5);GRd|DQ)4+MKK}v9_7DX?i_=gU7QGckl+tpE;Hw*wExv}@oDqt(*-q6( zKK^u5Q=N=`(3Gny2L>cAwHMQf{=i=>U&mbbIIud$bN)>?-TPX>idW{Zv$~HUt%(IP z4BjHEc8VP)qvr=RTI$?9pb2U8=k`6s5rl#=hyyKH} zcU6?gv)~EZ|S3+HIw!ov#-5o zPy|aWPc}K0U#idzF~k_MkIzm|Oi*tfv(QqfPnI)GzVETmo&_Zo?VzDP^-5>souS(qLXTM$mps=aPirP%sZtVuzvhY%VgZRnNO?k0S=@$2@*Oq z*V@~HE3)}CX+f)bMGe-s=82+>lnkoo28&@zyB?MWS1Ol+0!lq~tYMhoJycY{PqlBa z(Nlg$_HO_76BqvNC*~Iq%ei0mIl~)^7d2*q^|ehZ1rVZp_PV~QCFYv&*wpxJ zu+!*d$2_T_in_eeJ_BVixhZTp$=lo6q9IMNaS~9qVqL{}L2f3myuQo2A^(S{Qq7B# zwLDIU<;qRXSEsfURBnGbsNQ$1YkLFWpOICGRqiHmeEz7oc$(H3AF^x;L18iIr^{hV z!Kd|oQ!gYYAc)ueI*nyoSa9TA!)s|W*4f^6Srm}domCV&?Ul%HmKFw>cDC}=%bz3` zhP}xFeq{n#lyLE6UPr0Y$&6m?sq-j2z2$|On%Xefc(SvDNg{m0SSeObOlFy-mlu~m zi#Xy53B6G^R?()DPc2MgRL(3+Db>`rO*X7;S4n&u|YS(4@Btu|CHu4k?xdCNJ?r##8$?oci!Xiu&RL zEz60C&M>%a`+xoAU&j?~v`THU}W!=PxC6oQP*H%cId!24!P z_LK^qMZG(_8)o)liQ4`_$vNyms&!PK%!;$0Z58?G5VDYreHE14YfgUXCx7I>ZFG8i?!NtnvD9 z#W*Qyt49erJ?P>!hppyt3GYlWLZbIfB zhbhT}Y9qaa=hi7ume5xtMRSWx4cYz&ac|)iNA$33LXhCW9fG^NCb$ef_}~mWgS!M0 zG`J5A!3G#$@WBEEcXtT{cS6tvBERLkwY9glzTK)@b*px(y891kId%G+_kErqb5;JO z^H8YEWg^DDe~*1lW54T~empW9)sr;3!%kp87|O0~QO;=0n#XAxCHJ9Aem~kQp{Sy? z6--tbKz{Gh)BgE0?kO-a(blslE{xkY9j=^V!A^(nu-@#X_K7K}G$tZ%3xn8%&@j%T zai7q8%71Y(k`h+W?&uVZQuc0`Q z!O8|2)hgnrGoGV)WPxRGWSR@ex`k`*$DoUR%x5_QwwEpiaL1$in0@q@I7z|d) z01$6_7UEdcnct4|HjWKb*anmx6^K>|5bAn4I7&xiq`PBpoGbXB$&>f6mBFB(yk8ELbk*TWHWf(*8BNv@E=ZZR>_|KY#+cVQ;-E8J zZn<5`gl{>K#EL5=ETpZ?l0-RmBXxZ}{=V_$_t+l^tp6=~^xrF-B3bVY!i4{x@Zwtw zy&L&CR5kxU!wcFL;qsin^g3zA{Qe(gV7|2BG{M8?{vnKLkL72MJkLB%0OG%LWBmZ+f>VIjE`p3cP0ifLT)LuX*=>|nmAFWnYT%Z^1>=rIga@Z;* z)5>nW0-x@rz2?+!LMPH7GAV4q;Rku=MJa#xCE0Fzp2eB~%9h;wGNN0Ha8z)R^}X#* z?Ic4>X$Q%`mL=1ME0PBU33PMZWQB#in`y#R{&s<=|1^=v)tLXys?Gqa$iMPuwi{fM zCHk98tmT=kZwuTZ5Zu83GXH_k0l{~co!!MM5C2YKKl)?)A)0Ghnm4Y-pN#dC9RV;c z+~qmm|{$twf*~K?tP)y*c^win`IZP?p!uTf=_gW0bX?0 z=m6CYb}*}kc12Uw5l2;k$#$_{%r-tNgs%eg+3_L0~3Kqi!-;c_qkYt=c0dhH5k%UM0 zm%6TO;dtiV)o_$1n(tUv-NUySDkz35$%?y7!`x55k2_AY$OSkp2dmt7aFV)it6~-2 z`k*f2p8Pl4^fo3UlXl1Jh^tXQl_{~*RA+r#c41}(GH7InawOe{oDUay&lp}6k-0g! z6uEm#Mh)QMvzgR)?fi0a%t+BMy@y*wq^x;EZn0Dxadb$%-NKXIuvg7Y8Mo$sJB0Vh zYTXYg0-2mLpxqo}QEJgRObV(Ln4;2iIaynJ? z$o0@uxWVbj%m%0}=9S)W`8hIB?5T4_#SAA=s5YneP_Nqes<7M^lUToc24wNM`e{H2?j6aAcOC&cN{&oE!$J8%YGR*@$Mv1L7ZtoQLbLdm=*8)z#rGzVezfAM*IQ;TB z-G?vTut(Q_mg7mWJs2>@wPbI|C^dd0K4oWL5IPapi3(8K2ED5gB`O~;#|@-wA-|Qs z)EhhhcpiIDMr)bXBF*2zWnny!-JCmV?+>^-$iGnQiwEu3Z6vCQV66OkE{|Ff^xgHJWGpePCEn&|P-brkxT|z?%(Kt>4V0eUJ$U<^)wrfC zv#8*|N8k_{GFbjX98X8(yeA&(VuP%0^#**k`o7xX0~s-As`6Jiy_Aum;*mQ!AP6YR zRju3-RJj*+O#LJ#B69K@n{!I#fZ`>b7c06EMOt#3u-@aasrvb)`jlHR1GlrmgDR-k zm=wjsD<3~zq)hOSax>s+g?f38F1)uJtRVU?g7z9vG43z-PJ!JceWH*jF_V(GkUBzwZ+b^_b zGV4CO{+kED=+LqV2I4e^ab~5$nxm?=dCS1g9XPP?27fPII zj~dIU@=0V4_E$Jsr3>=m=BWz$N9d&$qrsp#Vb6`CYh?gQ{L844z|Jap3SU^Bp2bUA zo8R61joxT7HO^+Dzm`7V4WD=6$2AwFys-!0W&#Mlx@O??ePji)U`5@4vv)jI{ynVm z=z;uYtqw0YF4-d$4<-D2P?<7^bXk=))}wV4O70QE_w|E*lcGM-=o%k_DmsmV`pAB$ z$Ek5}7V}Ul*1)cGdnj`j{~CJOx3z*70;>3JQ~af1b?&ZKY|XV2vUs0)O=*z=(|qnp zy06?PZOxL%W71n&77!lXJYamnZl$I!@Uzr-LEf+(l@Pjp& zo(Ec@BhFqnQix!)*}F`LXhVG*{46Or90NZ+Hb-V;tJ;dA5|=2uKU%B^d^0kl-=Ysr zM$NP!TICle8ZUDWcRFlG03Ls&#+&UuKzdXQxL*9O`#wiU+|;sm zOxx|V60Y{!;j$IKj7>5M7*9h6Ye>5?bLtn3EM%zC^JwDo+ro~>?k%fW!g%5t*ghH! z=gH6?C}fAG#ENBfwxeR(lw_+srr6Gm<|DVyGV_A|CC#kuKJ{gaLtLQ#gSaqV$XJiR z;q&WUUs0PAs^sc$5d%eIk#K;#P33zq#N#np>vBvL)TtH%=OweLeJBO8=-j<8=6PA* zR9;6^@=(@W6S6Knt6N;E6Wi+AHa6O%!xulVYDPNOW!{?6t!GYScp-gloL-%pmpgN_ zbIhV}7w-n^&aOnAQgm{ucNUB{W>|eZ%Rm$9yGIW6`+~4CF>T!jw z32KTWq!k^T$@j?qtHPg*jpTmVf^PrP%6POckjRm3^&7dV=W!Sj*%a5Tz^z zB^DeI#)A34BDBxEPbRc7)#^$T25Y$GSgYDr3hKy?xN*Rt{W7_msDEE|4v-DHs{#|f zQVljdm2O_GLo9A-qeoIa8k3G<+s`{PW9209ld%bPl>y}e{-%}hB~PWOQ+M{P%h($` z@_On~mp`OXUO>7Gy>>e3Dy5@te0`7`t}Y3m(l)|`idb`OoUJkGcA_61^uy7(v-wo} z{CR2LV`z1Z(H`*Q7#YfqTdZibYG|f%*)+S>*pu}n8{(o zTPe6T4^fn4f?iBo>9tdx(1>3~wx&@pVVO%LPStw)rx#>u-}va@`JX?zF9%Sq5%Y!| ztyj)yhD@$kgb%W`MO#*O_Mh6_Uq-sdad=epVjvd`o(MM8fBK3!aghwo3RnJ7nVCP4GN! zNidlo{1AwXpM>b4YSLJD>Orxn9igV+YK$)g$H~rq*FggDp(hr~wkSXrQoQekjiFM{ z%|-~Y9VpjMPuvjDOb23JG?$eLq_$*`PI6mMLuGjoW>McP1T})6rQEWMgS9j5YZQ(n zr>HOme{RhAa`ylTH#(1d5VXf-&!3L2rO3kdP{$o-+digeWN9!#1&ld1q>IPy{>Z=f zb2W-+qW=uZ-}-uI?;Oi(P-T|i-L~Zda^X?e7MARBp80iQym0+rj%DRg))bpw*6+`e zqd9pISG-2#oLJoR!TRL@+srhxmTGx%$@irc!9XiyD9aT>Ws*^n6UyFLGL0Gnj*=MO zK<##C>V=U3JkGP~BU6d_S#AW@UO9Z1kNlkF`a$nLXmk~F28f5KYJHWQ*79GG#YZn^ zS)eigP-T4)aH%Mr|hd`{~|sKTI^o@VAGcdH(X;+2_k5X}CWgs$EEO9N>&^I8{6 zT(H|h7lyEeTi2j~qY#)Nl4k?KNJFdlBKo2tyCTs?{9Db@lG@J9G#&qeNYFT6YUo1OB>I06pa@m(AMD8W32KEiyc-F!M*EyZ9>{z*Nl-+Mm+z)JZ=Le^3e3 zo=ivOr>y-A&z=|QI8X{hU(c1(#gG6Tawo%ho%PeR`EB(Ek6yMEEB-ScHiRS{?A-tj zH7SXXWj?O1))f4OpYn_UBLi4LG>xQLZK#O$_zl3lmiPx_L>|Gy2AlPi4{K09Rgu=A ztP}1D=)ti6!NIaKe z(?It`)@Bn4X$?)7Yd;T)-sUJ87+rwHP%~FR^tA6k3aJ&TpuV6I7EZI$-@dIIgshrW zXYE1>vo*ZJP~e*Gm9g;(v)HhvV4z0YM;@gg$r4YR17B>_uA^FPtbD{FtP2hh>|)z4 zo&!zS#|px(x7uQD;;bGgZ+nmeW0}1CXRhSmLPB~ztwFz1Q6KdxLZ{BdOXq%Ws;QL@ z-SZ>_7x9Lftxy0+M3PahQ)MI7CnmkB7d4dfQpI*R<;^aG6&w z@-WzB)Q#6<|1u^4EXv|Gh=AwAS9d)RN$+18M4By zm$nk|<2OiCCb7w6sJV-}uyQoYSs*3e{t(rXkL1>{#6BTUm;x5!P7A41MVQRw_){St z=8MhW1IFd1*;znWJIy0f8OpuRngUZR8>$w@OC~S>n(F5V-cd5w zX;|CDcX_5H@u0wG;>&|m?qfq&Om5nsJ8^W`P(7Vj0D8*QzJx(VK0gR2?5{c{ob~eT zIu~i$?33o+NpLhf0L-$Ey1b^~Y;UZHGZ4w5ikmD<*(JgdA4?D{-9lO5Y0a~RUzjj* z&I)grFMK_BWyEORCsuc{TV{#k3|2RT`cp(A@G3RU^bt?Ecl8xte@gdc{>t-6yTlqT zM!&WJb@B{-Z|SyK)RvmS+Kf9jprrx5oz9GvZuvulF3k`gyJHDU(MjkElO7Orf3E$}AJqI1g9lpoYxs z>R$O^CKT9dj`F4RW|6`GOOLvw1Nx6AXN5Nf){+JGr(q$@+q_#2Un@aafyPuPi7cbo zNQytyB29-_0VCz~mqn@m?RAT&Jo$B+x{v0PPgY8Q$Vdk7Tl2ptT;)|8HY!n*G@0`r zk(w=0&yjE&xMZ@sn3G!W_4t_*NCO%*DY(Qt89eT0o7!$tP8WmINf(wVv9{a9JMp=H zho?r?q)jvhx4SJp;MyB!!Zq?lknMBdzfX&7^oy{6P-IFPE!v#XE<9q@;qb=T#$`mA zZwa4{1?m+)gW!;YCfn(q#$MMNDs)a%7cf5-F>vd6hJf*1sN21vT=g*`DQ`e`C&E|a z^}tRl-ZHm78j1BT-9CRa*YCZt67iSLt7d*vdZe+Sb{FnVb%TF+RcNqUBlVJIEj;WK z-`YO9P2&S8kCe_TjQC5Pvnj0{CPovjW%+MaZJ+e^WK-r2vgy!$Vr9lT$7~AY$M3;Q zDln!dmJE0#H?@XWbZ2`fvzO38^@z7?qG@zRgr?*E(lSH6RqM3jOYx_swx?bP)&3?l z+P2F3#`mkvA*G|Hdw4rXGH*6S95)A~j-;pQgw1@Pli|<$Imdd18UUymd-Uk?q3;FU3Z_{?jmJ*=260P3zG0%ombO+E@RZK{3O2{VLDs_7 zYd0msP^i5a{Not<3kS@M+>A*2oM%S*!?T}!Pswi?%kd0D;Iw<*P5^RB1NJObd|L9+ zUaJ#|B`gbxM>ZC=!q{5dm53!)TSC$4SU<0+ z#KFpIrXl=&z8TyY?)TgmzNl1zJif%Z*?+@Mq$<^GGm7F2j#$jrD2RGV@f~l){$1+x%E_cB=Sk+miv@;>v{d=73a0w z9&H9BqUUN#vho}miJGm5<_x;z_DAc1YJP}ZD`3aAbtrtP)54>F01n*>HlN+zw$4RU z;$sSZ=Rxn1sRuOu6)BL6cjmQk1r?~@4&|(sWRn=#3=U_3#dZO4$Dd=z*q-pM{PhMcIcA$(| znmfXVkje|UfER=O!a@&o45gT(HOvZ+QNnIWJwf-(k?NMg4HIWk4kN_u)s` zuQy{s3KEPDBa;EGTub!1?71OEM>wi4tgpLP?e}lhk4?YmC0gf~)FxoVQ4OlgUrye;w(hMQ5h?jSzHK_i3nishAzOqd`B@|X z@~RBwh}!tp~eEM#=`U7DxKm*gh;cIlDtHZ(&?BDtw3 zd)*`}1X|PL65aBe&UoIReC-1*Xu%qU<6Fx!yKrS%W9eDRcfu9u@Y_YlwKoGHfjl9> zpRb`S#ft%sCb+cmNYJ7ec{4*(^8iDxCBwG|;jQm7Bl_RCAMxx&P$nOx^I4u_5=JrH z&XVrC((yDjd_+VsTm3ez&bx|1`KZ#&tccjEXV3k>2xRiZV6ZFe_s(PI#B|a(d_< z=$N#e#Pajo;6b(=T!fzg9qaJBvHZ+X`OA99+)T3}u~vFjdPCw)mE#oQ2T`njrfrhe z-?NLnR?K4mzP3T+D2-AWsInS*chh5U1@N8_*UCr6tzAsTv#!1nMNZ%3EQg3`8&*nKDiB~vHKTmqkpFxwNF*eWiA06YrGroorEp{D^Jpu5?_DiSM1&t}I{^?Ssqd_%utwqwt$Yf#W z@_zN5H`-runsB67tcyb48V<4&>&!IL9~R(um?E7?a;GIEuB;PGWu3G{QcK<&VAUBC zZ+~N`sU2zR$cC*H z=-@R{DZdO=$VE5ybkRlA&Nftpa<;J(UnQOJg4C1meR? zWWV}%vPsc$#|gZPNO>@=EDEY3GJ#2x1=3fJimo|3n#iB_p}NVu}^MR zmI8SsE-U*RI-C7OV6}$JG`FUsOLC_AaRrrL^7JO&Hn8&NmMD|D`9trdbzD-0CNi(Z zXJu(zzpK66TY>AZ#{>w4TZa1TKaX#SCznk+t6#@zCb!;_|BADxm`U~%;$b%*(aZOP z@`bPyN-ScbwX1y4O?%JEriqwuXJ}EwxhO9qZ~KS&O`Mk+7QdRn3$d{ms;JPae^9fx zftNN>&GqWyul{Vx|NBn=B^PYjF9_7B%{n6>8TGA&%piLWHvqH_Nfh+`ZW9DYG4Nj7 zh%(R&GML(AF5e_ANgke3;}vK*7XwnFU&%OzB_}^_>i-9Ay5-yV-O0yT@d5tS|Bss< zxNeR=308Ql{exx;4(qRTS?zd@n)|^-nYg}Z_vZ_(B0{5Uw7AlMQT2BC<)y}rSEgiI zshzV_y-LzcZb6CLbFs2iY%Qs>89`~ZX7du<4`Yec+I;3X*J;O0Ld?{nn;mMzi3~AG z&g3;Y^qgyu63|Abs-$aQ$|s!y+|Mf}qt?3Zzf3b}^Ukq8yS=&K_V3YiSIs*VyInfe zid+G-ttC&fd##@I+lQHKFCAr$@l2=t_ti<~wtLI{Lw8}l zSD9ygrTt?>ZD3K_WJ}CVk$8Ok{7yr66~Fn)cThlM+Ba6_eJ%@vGxv!v5#2%zyJ7{#;X@LK>DD%>5i{h349=88EUPxkj4!fM<^p^?#|9 z8Jdzpnv%d9Bf>XLDI~t-3M$pIzK#O2%1(#Zgb}OBq${~5z0x)XsV}Sc39H@K{ql5> zwq-E!`j~-p9N!pC5{WM{8kPz6E+!GXprem1TE2i*s00T5W-Ijl#&)Gon1Qj*XMHFi zp^s}~FZ8+*?$0wiQez;T5uLt#f22-ggd$xYia+LeqGnk}j20zMrpmQ_iC{3iFfqiM zc1EM;@H+T)E%uRyD3yjXM^+Pd_%3-u=e2N$j$rMl>|AwJzD@x zP~Xbu&fw;EJZ4_et`STnfqnQm-om?-U)jRJ!@(Gs(M$DTwnhM!k;2ekUSa~d^ zc@i%zcK$v62XLm6(}=Gp~ebLAv*@? zx1(#0ZYfO&Wmc68sXq~hh6iDPQFMc>lc0rYrIl5aDpI2oZ-u&uB$&nuv5!9%foi^4 zAKyozr@g{z#1IjoF@>q6vAf5_htB!7j;Il)6Z-6I({z4tq|~4V$Uh;GlbQ>UoYJm@ zmrV7mZNy#A z56Mz-U+;R%a$Bo@>M`qciqzOIs#P*8L-bdYk&|aJ76^~ckuA3z!#3=yd0PG#rnuoX zvB`6&O)}rk$x;-*JW+5;clJP@-89Y`Np+-MiJ%)ayCvIY!yCpm8eW-YKAfvL{9!={ zZ9=SEfec@)1tTq~1&z;v^;uaEZA&Ra@>2R)&gCq1#2GV3F7Gz>NK=oHNx`7c9P1a( z7~S>nmf#y_&LM9Sjqu4Csg!WQVW@CyP)YWBO;x3TgcVQ5jaNsnsEke-t91WX$N!@e zB%=*f4__~P+SOcMupsjIO`alJ%*V-|1 z-DMjK)D6H5{a$&Ivb1Ipx*!s?wLI)^$r(M?!V+;I6ro5+> z!y?z1jGp*skb2xzvDktyMUo-6@$)dej&C7u@Cl31vuT~op0iRid)V;+uJau!pu(-N z6QgNA?hH3kte_=0;6O8*^$5RiFA+w|pHfM4kJ8|{ZYLCGQ4o8<$sHZ1F+@;Bs>nH` zLF$&1;iKzgqPR2rG1}N*(W#`)(>is774%go=rZv|;4(7A%Qpd_PkAtfatMx;WO9;M zGL*#xEBx4qcQu=N$4c@>V<)$85Fl#m@9As{>ThB&y5(u`Tn~|ct*^)e(NQ>u4Tr^7 z5Ny;U|4xP}>JGAxsxA<~*(uk+ojAa{an6h+Cqm&5gg*v%=V>4KUq>m}H;u`0a4f_} z^1k}m)TU-XpUp9V218}PeeDQ{hv&h2gdM9?zJ5&?5sOB{BGz<_W*$9AR$%fPm5y3^ zLq?JyXXb-8>HK}ZdQ+6FaLt6D5$4~^cgg?@C_$_EMptW zQl0I-@&^m{==y(i-1Kj#rdg&4t^P~`oUl<}T=mwpPVlr{C+|+++t4D(+Ob-xvRo#5 zFSkmLAXJKTMN?`Smj>F>) z3c(~ncPRciVAE>->zL8@L4<)43BaIE*T;8~Qo+@p=oyFR^QFT|Y1@5^x{ezz|5hex z36Z09ciL!5IIPmovQ$Idv`Jy!?_(nX={WGHXp=vr#I@JAblImYMB(T@r^KiydZydD zLqdiMnT_kOKwYDxCR(+GU(gdS+`8~-0njDx^Pzt66wcy$g$QVp|HT(tW3K3sXh2j1 zPUF7ROu*v^J9!{jk2)Ypy>MUi#aGOxV@i|dI@b>~cG#^kvVg3S5;lIPN^P*0mM%Su zur!8FWVAsrLAW!}*hKh%r?HmjDG1J^SfX9#OppS2rTbwK+chpu`WodO!zQ#yAmo}z ztVt6^Jw)&A)Qfg3HN$Vmdc-JzmtcY(NQQDu_9H@?UZ>RE`ED;J`J8+-U z#EFEJ0-h)QN^Pb7wcqM4?EoulR%Zw}Bk%pUP`b9H3p=0p3b3YkkZw6j{3qvOA^=%? z@`%WQPj@NMi}FE@gjy$Za5wGgL2RDj!!WCUQ0NOwX8Q!?wfud9N)<)oSaNp)ZG?e% z8ysgucvnWO0v17_)F+!LJ(Uw}bok?Mm(lxk{AXJ1o${98zp50IcCGsQC*1n1!%Ol` z{`f!A|C~Qt_Px!n}I{aD*> z#L#6#cI;AsO$**HHqN^7K#yW1tfI2+CFw0aHb5Y{R?Kf~*Eb9&GH;4Pa{ z+pq^Qt6a2^^{}}Zu$=SN*gVMi^v2o6;v(WuX4O*`>S1^sZjNV{r8=WY_rA1)snGck zTTiB-6j!%H_nXrZA%Y$B?*w2O)xrm&Fte+|EyamUc%Dw0UcwB8A}4NtDU2;UlU2ims&bmI#IJMDQb>~?1MaZ8cD+>Td6+f zBuwTJA>#f2F==djo;WTiff?)m>qzHvc=6IwLcp*uDVHu4qR5&I}S_HH$jd}KCbYUXMEB0hwZw#7s*%u>T#J6J>@+Z9J z%gqlUL&Wkf2{0no<(@1_xhvHJN+(sR>mbt;qsgb!W-n1rC9k=R+dni&wxjF8OU`X6 zstfdvI?EPBi&8QHd}W^dHD&znyGA8g!kiK8?rbcOT?a_V>lDkn!_CZp_y;G&2^GyHY z1YuDT0YLEbh2KAy((1;#m zotrG2{Sgs4X)!Zs0W}rl95a0#Tg-5$OGbn~nH2NbP{rr0Sf$MTz)Jo}6pzOQL>aRBxWoHJOf`J>}ozYJuj{ z(qS$3MSNtn<4JbGSBRbr&5R8QZP6^L|B++`uzP4Y<#c`Bd>`pz&U(q8q>YT9)YzDt ziQolWgeWP0$jZaRR3%Pl@rg>pY}Vjv?xP2z6A7OkCoN+{HEABSm`J%9=R1nBBjg6m zmKj|=GbYCD@Jd9;*upf@awG@x`Z`@``;HL$`skoE_I^dFDVzjkYk6g@k)RHL{-kGy zcrNpRf@?f+@dl^bzG`Nl2e|0X zy^SsFU3z{@FU8Jr+O%R%`Bg|}aL3f{4T}I|0s8>DCG*Jg%=Bu=Zkni#2*wV?KCQ(! zAVO1EfHS8sy190DhD)i=a1?1v7^GI#UWgi&LKy3L-@lWLZGkqeM9`!qpu?`*>RS$0 zEiYOu4FrH&1h#5>HE-6w0wd(6u>0mJT;nbFUpG+~oYRl`ciBT@UZUnN5jFr|s5e9N zVLI<2f0L60X>)hHdX^?<##lGW*b6Hnnt#Wu zf;FfISm*M_QjJUWQI)V}(ma1r7+Fk~;h@i&pE5h)9@F=Y438@og$RJg-h#21KwcISNMkwnK#RwiP$HecjDW}7 zP6UX{FjOgiPctEEl{={lpeQXV^;Mp|hUS%ylRRndlnC2zps2`H^|?MP2{89)co60U z9QWW2;4?Ghta@xOtjpvkDW{DlI?r?-F?T?tyd1?r3|nuni5I6CPg(qIM44)b&E+)N zi@D7Vy{o8ebB@QvorcS$1moKeZS9dUyB3H&isw1|1ZiB;iYV~$xoek_y3wik0NRkv zu4Qy@DR~>(Ixogk{i8CN^qWAU7W+QD3d)w-a%!}%?K6g(C6=9k$sOR)k`}iNJxKQ9YWF6B>f;x;z{}0&%klA@tlodnu-f0>l6nq% zCFXGOcP2{pt*u$V9Z+8?+gMhmwXkGKm03lkAT%^MDh?P&4z!Z`?7aAeWXpgQ(TOv1 zxy`|0LwvsOKX1KwiV{w**jIYYiX^`u-gcs3iO73qBlBw*f5vISJFaL6$9UF2_Hi-N z-WVmaE;1$<J`nH5Cm4YDT^)k=uW+gZUIzJ<*Mz)-VCq$CXBtZo z@+_|~rwx=F5A^KSXM!LVyaz2EMemvFd7=Es5oHoB0fn){ZRRJb!!VmrY!dwM~_p$%bCH>A*I0UzQ|c{6TR;+k()E|~8r+&j(%TrLBjeurh($Fi}-4MSrD-^d*0~Rsb1g4j(K# z9g&WSQU-m@-L0J;%^4}hdreFGt_CySINv_H^o_;*D{0wEwKk~_Es^op^64xtatpew z_-o%T;|E)K%e)w0Op&Tf47-}LNiq=;>IOT#WQa*I?D;4#rQayHR^al=J8}Ca_aH~1R`dEK-@Hn zFrZ)vkhs0QR6`#J5RbPbvpl;@CT6S~MH^e_FL&0qd zyJRU+|Kp^1E?oWxO{M9OGgpYAbdz`C#9Dj0wkNk7{k9vJtUFV6noGnFz~m+J0*hkI@*gQYBvc zc_d`YLXcMRJ>RQ5X*;gy15)c3<|-NbXy&RPn9i0+MS3kWD{|wUZQjU(j1yKAx?fuP~ z`}NI={6$#3L;QcEu*3gPQRTq@ySPQohk^K!*5hvr(;u#P2gB|A3-6qohqBM(USC5;|*4JdE9SawN2MtCQ1<5g_koUb5_vUOv*B40XNy#cfTR*eth9cA^~dqdEEDm{1*tQFJ zAx$mIDAt~W6QjMFFSTn9WkXr&m7m|cw4k?GvWX_~JE=mRjBt$G6p|f{WZ$w;F=`yl z?0`h4S-$jrTd;DS=Z?8-U1767E}m=sQ`y&j@N_UW0`)EXwGYj_jTgVOd%R9>=j8O{ ztEd}0NV!n$%+2NOppWL!x$)P|e>~GY0vL~BEQ@Jcj_IP%lo3U*U$BxkaN!voU{!A_ zATC^AlCunWc?Bpj{kq(8(pKkhDxzippw(k5!*-r35sSNKk@CiawRQE;X z+D($lWgx2pO&Z=r;uq|B82%k=-qX@=EaDS}1tRgGBQ(9yr5x|i(Y#Z*mO;``<9723kR+m^NAmG9LJYC zW_Udp#}a1l^yQu$QqNsfqTRg9-NU3o% zuOGWSuW@xO)>d6uTHoJd)lNG8;`m{Yjy$Wlr>wxrS-2V{ zY{M5E?#K1W*^)KkR5Rbx+kyJb#lfR^TCkecaSNR1*-+coQa4K(J#E*0SQ%nqM&Nd> zD?g{v9oAFm5pLh6Jv1f^&Jr+>FATGB^f|LLE8H#}4>4@DP=#{UBOl!*itX|}8qeHc zt@bc7Y$ZrUt_rll#1rBM?!HGvK< ze3Xhc`Pd`of!uge8+yuVNkLNZ>HbOox4;i${++7r&XDg5t)S(|4~JXOn@IAMG#T4`_G9ziy#D3AxJ`?D`f^eG{N3Yon+^;h1e6|X%J zC9Vn5ueGQ{?2+Zf;{sl#e-;xtUoMa%rFtP0FY+@77eZ+W%h>tQ`jMa3*pX#eoYMe$ zv|nxR0UE998TVF!ujs7PBy<>OkMxRX)ewU8V9I5b7!#pwV^vFV!rVOCW2b~3;Dsf;?TzbaOMoDJ_CMDGIJ$E;5TDi?TGDcU;m@PTX#$c*qXDZPHbsDN%*PyMiW_dT7>~p({x$uxy_Yh<#U$xrCXpmAz{oHAWfm)9SRV$c+0e|FzeHg@u23 z1(v*M;@Jk?{TcOsOC~DmRz2O!)%n5SCqfJEi$=!lt43$k#TYZ8aRI!GPh#hOTybAm z*Xb&75qHIE?DDn{+w!O}tsGmnO8xw*CSwHqj*CCP!aXH+utZ|=KH61pgg7?~G2cjw z>V_r=_f-t1l{lJ-bp9X2y;W0OT?4I4a1ZVftZ{b_?k4%S9NaA&AHsWYW{##wQAa!V~l6ZUzI&E49I~~iHt?ErLjanHXfbh7E4;OD?ss&0&yDAFh}ob}=bEZ5~>TabC=tiPovSFLoF zzgBPUym;_TH})LmjO!t#FQN#1W%}NnWZyHP$RNn$KH@S! ziLIX|AMH$dVlJ?tZh_dXI$Cx-G+06n5;o+jFc_A&HdMf#&dV+`P$R$si4?lZu+$9Z zB;GBug5CMu`1eE0;uK{DaEZ>l_=@Vgz)1cbrY5|O)?O0&8e6q|bKoZm(!0fp7mswq^BS#+MvG@-`39s0DvMc4V`c|d zoB?ks0cAej0bRge=Z$t*SGA&6A`=e3WWyG6a%XPEaz*}_qYOG%V+t5lxEz@)@3E$H z9852eS%;2?pZYBFDM`e3O( z-zi5ol&r8O)E6x?Nyv;j^#zU8>b|H$&g`b3pbMm@_Q@F|;59|j25&;5{ZNLqIY>^1 z6&-1XJ?nEAkBX6=d4kVBk--%b?G0KV)d6-nPWPeQsBLGNhC(()hi2>t_mg<2pt>_~ zx80Y`%c8+5*J240BU6)kN__R#kx3VJH*@m$(O{J$1QCzL+R7(^C|hb#4n38kRN9*; z&S1b(B!4@v$jJFYRLeg(h-t-B{TflI=W&H+w#JsQhbmx@N#%gM{k>`gfdo7K<2=Pmg(A$F40yPDEmkT1Qt!2%_&Yv=?wvuh3F2;V;pvifvl~d3)si`!e(O z&$Y?Eq)*qHDVA+l?yXpdiXu(c0PbLbWyg|0GU^^?nfJX(Q5C?#V zm#3gBdF+V}{{433N1iXWtQL`x?v%NMJi3ee_>`tZQ*VClc$A)9F_UP$5R5EHuZ84= zUoDHDy3W8)h$GJG$MaCZv8zFM^_nAJUZ7%6?>8W)802Hm2SqC?4ZNo#2F1d8vcuG}Ei{_B2`UN% zVixjCaE{~t!Ie~*C1n>yQD%`cebsTgq zdOv#;XqZ!6l`-vgy-M=695Ycv!>BDRX)jpK>apUBo7IX1RP;t_BSC?s*G!TA0~`k` zsRlcPX=-XkKR*sW4CzdQf^POY#elHyhQBT_|HS7#(S&j!O8El?eD$Xy9%Cy(g z;i(cu>!4PxYzDDBgbb1YQh{i1>(CB2ldYabV6wBMk!>o(nYlTF$!m+KpR{Y%jaoOH zOpmv^FMk#|2mT`c*XM$NMA7_7lf)sz@?FVq=B?9p77O3N8-d;+cp+R3D5pV$95&;z zHN<)ad2;Lh$Ynnd`~u&!$u)}{er=t_!fTVi5UVGFjr8Q3+ZQGR#ELOr$g}w{FmNil zlu6CWGn3%(JPYa1D72#Vwd@UA{E8byx=nFKvIKyfLEJEWW;TKv(JmqKo@{=nc?Uy) zds-L=heYpVc+<`axz6PSLxYp#`Dqbt89r1O!OOCqw(Ku0JTb1pk8BvM1T}gAP@}%7ogekoPivj8M$Y zxQxa2Xk|IU7OU}6GL`y@JguwNRZD_~xD?raUF2pdQlbf9?$67tEO0$1F@BOOhzy>H z1N{YI@R`72vp~iBtFI={5`<4yx2n=qsj{VrWd{}w-Q?HzLDyR58G_zmsF>Hom!zRi zBL_?91BW%5T&kIBWt)X~xiM8YYKn6Te-GC*xdfi_8C8zi*jWB1n!RBw#=uAyeeW_m zR;i0&qzLh55T9Qa_|vZw*&@P!rEDFdP=1Lg){+gDDs}Ny4!kJTvWSkNuv9>_N^)@8 zX-{<&*jILmGs^Jw8|e*-8mJ)K(;!x^Tz8;*%<`Q3*vzJ){`mcea#@n2U1ipx9HqNc zEW59J2(tyf8*4VBGCaNwJ!`BHWNp*K_mk;Qu`TWsw&i>x@gK|O8gn){opr6d!oqx^;gvOg1sUISgJhBSQIHd;^O>rF>noOcpBYpV-H zSA2D^aZWlmzF=S@CaOTpdh8U2{6CcpLXdM^Yl=;dD+I~caIZ^C3O4yt@pq3 z?Pe4N#H-|?k1HL!yCSIXi$#Uo{3`e<-ZVZOBs~`S$2QwObr#-Y=wPg#rhJ^u)v@A7 zZmoQY+fQQZ)J<~uQOfidUjcK84n|(^p})R4_Y~wNp#@9x380kN|H*|m4^1eVid&?! zVH7t}V-5Xp`4fU+SHvT4N+Sos(~zP17%eVo5SZXu%??92TE&HQW;`4KKmv(29uLW( zwcfT9mPirsPhg1IRCg!DMV+K?{U*YSxWG`0au{<9X9BVmx2|dYyaw4BTUP zN&o&24mnvVyVH%f{FK+>T8xI~<_6F1ekF6;W5N|3cn8($^<}OL$|MUB)F|lAq^m@H#fDF|v~_>!6KISYTOdVWzTVk)QVEn&#ov zP35|)&HR%?wv8X;PRS4L{x)`e$12+{d!VfDvcM`w7v5>ONOGf!XX3EZVF}T6dok~f z4M|D63jo|Kl;LF2Z3mt>3-lQ|wfntut})9pviXKt^KK#XsD*~)hS+`&L4Ig8x(NW# z>5yGKwwa8{LC=^?U745c?VoLJk~?Z`M?w$T*Cw(YU{{H1?S}Z_qxVWWsH3eq+8?{y z#oC967dvdk_>&cGtP){{8JG0of%E&1K!;vRjxeekju9Xu4t<874GsLd%Y^Av7ufZ> z>F`K)<0d<=T*h6iqQaVMoVZ}uDj+IanT%}MwQ#~?!G*NI%)zpSb4+ish^;NH%EZUaV%O*J2?(pvRG?Yl(5cfqUUa%+Z8L)7UUkveVkyxU96~Apy8NZ2Wg|$%bPmOs@SCQtfTsMzt${V<`mU z8dmMR+O>&dqmb_`q?&GYy}CZf)0j_)Gr^lKHlpS!BM_qMd3S;wHoQ-wGK;^OT&}6O zc@=d2z3#$}B{aU{sn1(+{FCXXo*oRj*RfmH3htD8e=Q=LCnDr}`4^9~^!(~A?D0@i zjO`abw!2cCThDhl*je>kld7IJmamDb+4F3brr!>+?!TCGJSHPwt@Z4YjkH`+Z&A5! zY~RR?hXXc87Bo22pwz)-;(g_kX##Q5rQhB&GKd$?aF7+?6$Q)se{lNMQF3lWoF>^# zx-qyGL8P?Zwi{_oE9J@g>lLkl*`aoRILz%tHU8k`jZy2M|!{8oW zio(timF_HbBCk`r92E=6@NvX^S=wksq!U^ra5r&9Hx%h-ZftZY61g-bUpBtCWe!fS zj=rlk%t z=-Ni@DYUMv21SjPn@~Wq#}BkM^_Pei+6WZ!>+S1l)KMC6PiqwwmG2dBt(B{4KzD&_ zO^J487oKe`39C*?&q7h1fToJ;8uQHwlbUX9v`w(6zzD6h5=84$#JIn`n{ikyJU8RiAm1vo{FYJI$a3OCX}Lh+)2&oVgqba|l&2a7 zC<)A`*{YUSBI_r^S0zsfC_uAA?2kmnxc@@a|Ej)HB){uxB->oK?P?z}G6W+}Pm`f& zP`3TGreibS=C`225zPKbwJn1NfJo6XPaNdMsh)nLa5l(FlbL!sR}CTi50Q0Kk&^G5F4gW2+t)i&!{wE6Igh)qY7SdVRu%=Uh8%7`Wv_qBeXPDGAcB46 z2=Xyo%{N&+-K^&ugx1SC(aW_Ir#ZXd%x_u+I?j_rb&QA$cZDtL_b_@oU6<;P^kkF> zdSD%c+q(79V3QxVtTF8(FO8Z|C(SoHF4r+uwVV%uA(*{*DF*ntV=7Y_R@YZY9xg8& zjjnCWx@p&KZftEyU%ri!`Bl6Ik*R%iY?lX9b9J=P0*?~?^og}WJ*gt7namg_j?uV| ze`;%sk5l}a&+zAsyOKTjz_T6z|o)D*H~j&TFSW<)^)x7YX2}8 zte>c+zGy%B2NF2;t_SU8Ig*)~z0icAmYA%O|gUCT!sr8EAUvZ&w1meYLU; zjN(P^_sldu9LTDR&3&>0-dX2p4hEBQ zB;&e1J5e7bJku2}#RBGW0?_7K9sXGUj2!uf6YM{Fd{GW~<2}!6nE&hSslMf=;f(y- z*kv-njl`ss`vsJHIwahbS;F30Le3jKRA_F?zOcvb20uaPi8a8^)r`17`+8Yl{@9~F zw<#Xi=jzPV`=w}?BNMx3)I!hnDtI)r)mg{N0M>2E=m2I7#^8>|tJPbToCVBU$i{CF z7=DN+WY)@JUbIMkTv`}-M1i+(3GEUI3EBMeY71wgYZoKp zk_DgAcG72;#N#GQ5%CnHa})@GotGLa)Z%H=yG14Bnb^~IoGwYS#`ih$Hni>7p)l&l zZ8cIGxN<7HmbKO!_UQDuBrKW4@JVSU8zMWErP7Pu%>gSqKW1i@=b{virtb+qvw)sC zl=-u(OJc_MWes@Vuu8!p;cc`n+J zX&HPO0w;#uX7S1=uX}Gye>N>cETRRby!|!$)9|HrYngx6HSomD*koHEfL2zZp>OW$ z!(aKfrdtIkm-|bkAyeOIN?Qz3qju&K$Y*gG>dp~sv9juk>THpL6^Sw}e1HkeMJtPb zo;`|Q{`y|%GQ9v=QD3sW_!mCy5j}-IG;8IK%uU60+$!m$LQT+J0&f*+G7AUoypVBZ z_cpky_09|(fF3`+)0ce|xtO^kq9X$}*xphaTl-dB&NSaXRX(kc@E@M6v71KFrG8>s zwROWeWZj_5tg)Gtjz-!%cC5peGfF!mn{-sZy-8ybLW&;g6FVR2Xt3fFi>`jp5gB0Il~ zmd=+xdYlOTpwM3GD65CKerocWfKummeHHPm7E`tYWi58lZFb|#6SA+zdKFj_P5eY! z4croci*i7czoAd6wGKkdD_116rKbA{KfIa>uX@Z|dM3MP^m$-oyBl2>G|{Ee%qM^3 z$~xse7((ykhV`e-)naTb8$4he*a=!-RJ^B7r?wbOP&dHBnL!<;Wy`}{$1djzUL1e` z3L>l8N~c8z42{nBTwj^pnpd?%dA9TNb=5yo2Z4TfPT!GiFAa!(GGQNomuEn|?`Kt&y5gYG25xCJnI{JRJ;PVijl4I)F#}y^zqx}k5 zaRFAQ4G<{Mt6t^-hjTNOtnfM@kvba@wrdOKYo#?dn8_)C?dx4lW z{E)HoFAyfV6QXi};-Bd|p(q9L9r-swAt}@()_$>AQX=8A=}0H1P60-kDNr6Z1rL~vBP%d zzYN8r`bmMN0b4;sDF$D;*9%qN@%6{-#x-()DoF>HC(n@TPQ-VaBt~uPt%J*Hc}6*< zWa^lqVN4ROFBqu@M5S)uUZ56#_h4VJCp#&YKmT%he(Ui1X9@CB==ypJi+ujF@>`VU z*!%x(ObqUZVw4xD#N~MdtmU$ci(svs3m`NlM-OVeK}$reupKQbpuI!AJY8F}4jEZ~ z#Q3?`De?e{sx!)+CMy)0{c@BE$zjfspDio~Xg8h-Hb?5Ux?bLAN`UQq=aW)gC2*z*O9^b zQRIu$G(MoO(c(Z3+U!3HV1)-%Rv8zye6VZY-m}53$vZ|YGw2hV4$u;)9ZZk-F7Dtt z$dbQMkO2C&Zp=_$yvTmE{5&N%EV@uN;q~VmAv&VP zw9SHlu45EFc+rL-RefSfZd-iaoV)OCSPKg19pLI=eAbiS6HIM3*~09d*d=*vyYVE4 zgK>`<ph2$X1rkC{}Kt z%6&i z+yH;9yH~;#$J7g-7@#v}J({>mhKGLuo)`O5!WJyi5eIvS~>Bb&Vnays2TU zrEvsn@HwP8y*l-rIPaECV5LCG*j+WOSzKM<@W9GY(}*%@+WdKfrbi1jBFyulZwTmY z`=~96AHXS;QHEit{cP4kvs}~|q}ZNGN2HHO5jLl zEJ{b<>#Rf(e>A9aqw)^dun?UzuOdCpaB8s*b>q{HA*5ENj<3?`XI22%ln5!a)}sxL zaRG}40Kz3sS>IP%{~KojGfIlgxE?{O9PFtimcebzWGE+uU%LuFGE?0p+%dHJhE7burWH zVMVP(8bS>Q?}xQx&SI=k#bj$0BGdL+w2LeM1so8wlAHQJax_2WH$t!7a_e9q?T}h6 z=>vE9XL(%r&+W~Pn}i7uoEB9_EBJiT78J^olG}J6ex@lbR%@W@={823-saJ5Wd@S)!+;)? zelqO~Dsj5nR5|rJLmgUR#lgwz+_egWsnDTFz|jP{{Ibq?SxX&HVI@WGToe72s9bs_ z2Yc;*-JhN`FMFUQRn1Q=SyY@v(KX7 zM@D?>3$i&98V&97fBr2uQE&?tT@^$!CAtLF0KbfD`KZ^(`99^YLp5S{o-p{5es8C$ zAAdIDm+yvB768TD<^CiEUdL>kVC^F~HU@Cx4FF zh+NhAU}yRQ5=)~XgFFUhIghcfJy*-}L)m+-+`~~;B>U^@!&7D?fe8f!pLD6X87 zadib%)Y4~4FuWif>rH-G5r~)Jt36$8p$5Ia|M~;MYvtp6$+1=#Tdxvs8EuWO6DG;O z&~ru68axCNiETjq{?7T{n7wcWWibnyGEdQBNG@sqkd)P-9^RxwaZB65 zC%Biz?9UTJGf4*S5RnOPptof|;*NwnI?ALK*SN;~x+`~=+{W+UjV8l^=mwog$>(O4 zYQr=e0jwX<;E=I(OAPu`H0=;Q%SL%DMhg88h_BBQ{(~b=p4|Gm#AIQc&L8a@oN8>o zIo~4~Jpy*bR#W*28jfcE32PeRvAwx$G|!QR38QC_7@iPWgw_km83h$;V(t8^LBtrv zn{I^VmImUhQul`i-OggZ(8ZD3knX4izAT?KVA)K(2zv`r=TO>77zUc_@8*tB|+LF+|-ow=6)FStFPs)Ao!kt-e zz6WC+MwNx}V!oT@hP){9xx#2j^N_`8CL%_;XpU)qryd*5xdb(BQM~+2DB){-`)m-z zb49BULErnfsaa&!kW0Lv2^8qry!=F!%HV`xL2~?qdsuN9cCwy>vRGJ{R=B*G7kG(& zUxTSJ*-#D3sqt}8D z$eO1d9iK(~`phC+e3>Q!&^OYi3Z1(3`l-3apB$Y$jbf*yD`v`3k^QiArszlC35RIa@!HU0_)&k`jGPVw1G?9okK z`c&(VScW{wpMd32`goIlBg;z_{<8QRRu76QU!h>obaI`PZYk7i1B2VzOR)CK`mAT+ z5#`-pTX4|b-qy{xti3kTKfBxSzymq;{PyNoDVeqB*1=B}?t`zdA4pZ~jGF&;Mm}N{ z1QVpdD9=lZaP?X=vljIviGUy7QJi97$Fz z8Ufc+gobSkc)vGQIVqTl$A4#>^rpw@0+~Axo}0UAvIOtDn20+5jOmw>{)KvfFHoT@#=@PsqVd zp|x^Ks(OD$iI?>|tUHWH6$b?4#;YEBG5FMC(WrPG-~lG<@*$TnNSm#amkEdK7KTQP z^Prs`agx>Ps&f~OXg%gvO#>3#y(%~8h&eVLw}J33#K>7Dm6 z**m?(Zk8l&3HLMn_mrfaBf}sY3^c@znmD+}Y*Kkh%_^ zUN%Tb?N zsom1916jr@Y@B4lz7co_#&M|DJvuh=MVe375a?$wq9rcc`zL+JJKtakHWIWaOdI~K z-fDBjku2%>ByOK@i&ZNo(T7~WQKT?f^m6=k0G#oBzHHu;V5#;y%(XNH``jzC$9 zV1>pKnTtOfI@w5}U$FO4f({N7HSGQCF-ZHvxZbx*-kW`?S>B|h&z$f7e~?3)4n(AW z*kB_;j?pcWPqExf8^@RZudeWcxB^Rn9$kf;_m5Si!KPYD^O@ZA$4r-@a=BsUdlhQ6 z^y+@K!NDJI2C#oSwY4t^N1lC83cMS%f7F&Hna_aoC(op1v63=z-TDkw=_&jY?OR~}<{odTDBLl^i zADv@rxzR`OVrHF5hm(U#$9 zMPF^bwKEh|HblT^=kmMGC%k#!NA3|#ZALSU7BF(YdeHkF`r!v23b8^~tqFn8<6K>H z0=)#h3R_7)6z2yEG|Rh>!Z;%b*xV^N(S>n_H`|7@-i2qv2Sinu*u|?sD&}ge${?44 zK^o>(27!ECd{WWnnTtG=4)zxb3Dstk^B*i<_$qUkbWe|OHW^EoAag=mnarZe+< z_J}0%w>l}?F9X`To&S7uV7plHN$@dDXMM7#?)I+~ zV%k=!JM;$B#e0RrEIR|gs&CGOXG9?H6Dr^+<*9%TpRS2z1f5oD^9!M!KIu>I*-f*e zy&BtAc-DDl%R00JFQAi)+QJF9;&HR&xRrdHuG$T_maUW^7I3_uOBMEZ^xf_EkFD=+ z|N3^2?lQlQI3ZNP+pTXI%q3>)?K zSf6nf@#?OtU^D<^lV9&{ZWM)Y!Na2SH7hkOlR1}yvcCn@P(r7qZgsnvS5E$^k%YCf zOvqd6#E6xmMAl&*y(b9SEDYw}XFKWW7xMv!Y8`5o9_(jW6vUNBh2@|oGBH1U7OUDkyqSmZPzR+fKMWWtN z8v$?R%Bo(KTyvIy7F939+Jegjli~DI1%_Y`ZwK#WUbZM$e`beRokQTHf`QGdvQhRB zu!gH_+(bKk_cLYF-gkF%*xt$0*q8S=r}Dn9DPpu|=2hxh3Qt%dtQGt9U&Q0$G@YjM zYrqF4B_|DY-W`>8i5vB;5Ka=E6Ws(`JR7lNu3;W{ll&tNd$NCb}Ql zTq7Lh`eHrgoO3-H|5SQ%ZP-Kn$orc&h;iNi+m~2#sbJjuy}P;mSA@mlocD9qg**R$ za1q`W?~_^1_}fxVa@mRm1Yg`;-=kObMxa(>QN&qRH%Y0~OQjtbB~x9%hXrwTIC!5O zgPzt^{$C7#dYX7Af!BO1MQ1?BE|N#Vii#y)C$LTE;jYqoRLR#IKCz*Z(A~+uef*aW zN>dI%1Krt{Y=T0&bPbJEA+j80vLHpdaef@qmS;PcFZ@G{MPxWpBsd z$^0F{?c)nC<%tG39S6}fo~8_NaBMX13yKA{C?Xs-JkHVSdr+1;=}Q~;+;f}g^G)*K zZvUIBo13Q}@1yXn9km*wwN&|*!7FU6V2o7&7H)Eg-3dw7FA(KcfD(ea>;3Ni)~4V& zk<*>k`=(D8(TvlsQ%_A4PoT^&sqA7bX z45&jL+ecax$>XO$TjI)6)pgC zaE4SaZn4KqaR82%>pPX`$B7i7@$jRuYBP$XkrZI?QIsBNY0ZeE*F?{Dgr4jfLSSkr z_C?<+H#uzmZS&Gs$BI?9zu(fzrVaM5T8aV`AD&u@!R|#&7fP$hLsS>I3ASw675e`X zyu7`r%BS&k!KGm-+JRJFOHd{9;szP64YX%Zek1EaJQB1m$AIwHm+JOj}XfIvI0f($Qr z{C_qm@uBqwm5|YR=4MM-HlNO94Y$fMX;ZU_H)1#mw~{`F!_QAUtA_R&e_T4X{3Bnh zVrKO?94CX~ugl}NWNnB^hrX%lYv{rgaFWILvXr=;zib6G$>>3rJe#=Jf?-wLRe@Zu zMV&O@;=kT*>oXmtU^`OA%&1x8qIRRWWk`WD)<^xl0jzJNp6es15o!#%RqKkBzEPa< zKl~<}DOY#$Zo6sVY~Y;5BGq0)@qDileD7PbM%yNa>#?3Vu?mNiPnZ`OHkob25=vjv zyBx54-S%%Q(k#ncw8+ASfZOg4QX~}dOZf)xgMFyTN?(EZU$|(~>D^FgM?Ea0IpqOC zJ&vIh^{-lXdeM!})1#dYPVAQJip?i;Andjt9>!C5m|ojL%y3`7c?HuZ;+40b>Pi{JU{)*b>3Un`V;xr%X&TGOQVEw`!$U8(Q3ohl=d5t-wjCbL~%O=8~ z6;qp3)Jp@<-%A>n^iQLXg#F^>+wy&n@-tWGURUGKKv5hWzT^WzUZ+UE)-%ZegG-rr z$1_OKJN@1)AQpg>Ju<6^&tRHl%?#ot{TMWG;Zr1)lcJ9@kTO{wd@0QS3qh6}^*VDx zMQ0i%+X3ay7BO0_3Qv-En^YZd*xbUNWF%R^_cATsq-7@>1k@5RZl1TWNSwQ_U@v9R zVzx*;60&yjF+LoZm!=35vymgvf;8q45#^SnYVAj`O-yTqDBI5mDR1ZLd6u2}*#O(~ z#+`r1L)BBFCr(xGo{{d_@JVx51$(-}H@2hVWVe@l$s?verQ<@Ve_?P5Tj$EyxCivL zXg%?tak+gBvTZ0o?K=ES=wS55klxKC7PJ0f8D7&9jSdu3`jp+)EQo;gLJcv|NZvv=FvL|C9eern>@zRYE2yPYPbtZmM_Jk z2%IrI%&#n3**FjHHtAS94Krslvzk2aISG^-mdvhfqd?An3xDK}WrhE0384Mj{LDA< z9??i-^2iY#%caP^{Zx(6f?9VsYLgsaERFLWOD4U|PD$kltn#fgAMgAdgnd>aXnq65FpWZlj&ldhkWAXxQf9;1L z?TrP3G*L_B;}r&6w>6E>zl}E?U)EFwZhv0TT0Bw>Qu$siO8i1qVhGm# z%UNKo^Rr#JSqRG9`cs%4WJA&~i-?{eE;8iv)ivl~dG#Ia8n${9k$CynR6_db`dhW> z>f{?~d;zZXu`>Z!qEK#cBhJugEER~7717Z7y(vWcngwVMO zSh+2fu8Sovx2R#{mh#Dd>?w_ zSTvKMZ8I7us23HGy@;p4a2l`DpOFXW0jd*Sus+u@7D>9S+?20!BdB{=X}Ro-4<0Fy zQztdOa$arI+$yi7J>bNay_8;5=%?uK_W_`Q7-4K(BYi}@_ zMHU`l9iUn(sswJD7UwQ@JSOO7 zYo1C=klhF;E8IU39g+!Z+^3>R#X+Sd%JRwIR6C1tdq$>KHhv?2bef$fQ&m}Q$)Y&(4lJ+l)H(GYH^@g{K0M9 zoUz#IB`+uFgSx$S6P)Rt$kSNWJzKF-P5b7zw%gs>_ekizG0jUsw3}M{rgpYROieAx zTs%Av`uhhbD^1CVRsLwc7>F6JNCvonI4lXP_S?IQ!ONGJ3Qh#OJ zat}Y!Tk>VZ^Z(7Y&DRPW53{s`lOjR>U_*!PL477P%RBe+|H~eZGQSWJUWQv#5)`+6 z;w0rNo1W#a6;aqCCE;Q_qP*bv+f?}4Npr#IvqOwrrpRDS>cH80>WP)G$+GOH8}k`8 zrYg_%zZ}6D-kp9i`vBhZ@>>y`d6fV z%GyMWi?=StpcQP75dhw!C^k~jj)$7u+z(kA%rl$}p`+1;j}d0hg(dwwu@93&A#f@V zS1$}QIn!=9dx@qI?54bac^s6};8JucV-l_3OEqe~eB_&k^HKd;)TXFAR8h}1W`T?Y z9cO24G*1_^F>+V-HS4em7KaHsQOaE^HFuT$yP>M%SKM(ZKjMX`tqL13hd6vQRx-6C z;ty(kA-Hz}oM%uh%an6B0f}r8YX`F!;e-^x_S*hk**V`y@gEK@-JOwTdV-_H$X8?< zvaZ4LVH;V)PxmfFvQ3k>DTNVVu}L@V@|$t8tQd02J}QDXrcundSx6suEcrO z9t1KOAuPvo1FWfyKVph_c#E)-?Af^=tI14`WkslIMqn(y|6DGW+)BvOf>b3!vq)!r z9_qF@N>lUA{*{dCGGt)gpW1n0uBX$gLydDOdv)5y}j0N0zM0tY=i?;>bmzM+IYcIn=g}uqYXf zmVm2eYP{l@D`+}CDvQrAiAnS9x}(Yorc`O1&1iFK9X4EU4G5lEigufQV`tVR7u#2p zlHT-W;2fX^(q_cjAtsP(8gI6LHN4kRQ>!hc1&PYqVYZ#wv5RGjF%kDgrHT&!@I-l| zQku0Y3N$yR0c!4Wm?;VbqzBh;h)w+he1TS#@y05f zUbJqELI8Dy4K$$$j&C(;iV2>-3}()BP@ zUpHhTgg^ji;+8n9mi)I zBjs?ne;z(=8mZYPDPA{O%m%{-pjKK~!V@1=Ev;AqXH@TIA}P3jYUFakXd{(xH7P2g zE>41TKs~%Ici(GSF!9NxQ89u&>S#h3eR|0M%bu}Kgc(=hwAQ7#tt@;<=ewu@@oNxTZv@Z^zK7GU6{OQly+AYF8S10xHHFQupOBe$uI)Hzs z7_^eMF@&+)z?}7aG0eUR%(_D*lHzOPVft?2N7w~(A=Rl&n;<%CFWL)n;)T4>W<+Hm zAHx5!iJ}!7ly?|PvY}XdXF>{p*vx3Vth%6FsW19AVQiXeoQ6L78QSEO{ixeXodKI* zPuO9YO%VIb1){K=G6E=OzgzdMqTQ$A7FLpLNOGnvK17g`{`JAv~-za`<#Nxfav5^(i|=Vc6Ge{hTorCmy&sOUK?H*Utg${bF2l&G+YJeP3WCZS`+OAXe&TQdSG9yjOt|Bi`w3QB%_vGTWa*H zwC6v6kXW+gPo4o!lB+y8pqIyxH*C z^=$kt@uGBWStBqS|8C8RP{DZ&B#3Z`SxF5~_)4LB&CiNC^@3_z334R!rUiIcO3u&o z!_%j;t4DEO68%zs#BZq*S9RU+wgW2*ltJuc042Ugh@_>2Hlv>o zV-F4SnZxv0WvC z#i68PKB4{aG&LaJ`u<42g!K#dnc|t{14NJp>*+8`Qtm+B3OXBvHxDT_qVHpD4{C`a){Ugh= zG%SQVnnidnRFit}NRIQC71?TIJ{jo43gw>X*{1#`)Mmg7i|ZB*nv|BtHIC|nNe9hJ z1u$qgZYW#ojbhSwh6k}H+!6lbcD3o5!lfwIkzBW3q{tv?Q;B?TqLB23($GIozv%|XsD*03qWrT9#m!CadwUC{_J7T-~H;6 zTWh$E7j!sV=ar%GtL>o3T76 zwS6$x2dmHXj6NYl_ef|wa2WoBi?&)%b1@rsUTxnI9Md!y?U9_T*D1UrwqHYgjI|V; z#5wtZwn?Icfwrmc}nD0g|}MR^fBBpAv2y^?3e1Mh{Y!gLqWF-z?z(H z3@>SF?;yY{w_V4Z)F2CDrA;kD@*mtQ^Uq)%_+}6ND&lr_waC1XKKU=oqrCCE@pG*; zZ}L_CJxi5smy^fB%jcQ*8_8Q*?CtHoDHg@qBJz|tL$C?tSyTNGE3fEVFCE^b(1E7j zfnn~74KLt16i2?ukmz|aSToY-iaFZU)ohwuJfr!_arO9`YG{r!-$l)1nHjpkr#=T< z!)F)~z@$Fls`3yU50RiF^|IuVM&-R~DNmG+wd_W3b}#xF6tG1}mlg~Cq}CZgnN&YlaXTMP4Fm|)KDkOSpj+w|^P*|4z?+3HsCc)6 zuTM`t)~+7iVkZ9rt#nly_YMT|(sy=+FHURaA3j@1;cYlAQqNup2DCd~F^ooz>$L1V zLNaKtc!|^5ohS9riSuf_LvkxLcLPw{oQ^sZ4#YS?oN-XuSE-hl>%%Y^16eQPqp>5Up^s&(k+%KOV*9xa3V=^EJ7N z6+@D35|A8?jQ)}}0@k9B>$8stK!hCDj+;zCt4jWXvg87r6OZ{swHsqj8GNH>uD_lfrV`1K*ohtSNM^Vum*YwBBXA}UyJP?plY@f% zi;RzMkQFRX=4Iq!8{OmzgP&$uk9v58y-BNQp#__*E6eWgq@P@WD-$!2X9`*NCRfEjL*mKk3Fw)Gfa=?}94u^zL6t z_he}%7=Fy*q75}Wj0DHY`^ye%EH0kis%xD`-DTQwi!}DduSY{jG|-NX!2*!wtVIFV z-SbDr>XS#`NTa5qV*C}Z0QKrwhdgkq6T{OTXE*CiQM)#6E^|jI_g(idekIo4S zN~KY}l)SS}`9A*JD_CueKl7Nl&f_;W z(ODhOjqnik>m&x=uuvdNHwR%ZyIPi%uYS`ZLl2dAE+ToBONvQ3#ha zTB0r{#o?*Lh?duz#P%Ndf@p21FPlz>Op0$ImORh7HlYFN+2fdBUGeW9mA4D%EQGa73r_za zSAKr&{u(v#jwAVhnER`)w*Eg16UIt$hvLN@iaRX?4{pIJ?ykjJpg05w5-d0b2?2t; zySqbihqhRSw!h)Oo@eG@PG_xIbFkk)_E*;aklE>jMnqHmKu!h zf%z6S{485Z7p-;;o>R81ka1R`KrK#;s4*-4Blb|a7u^#hssRfp$5OusU75&z81M`aHE3x~WE&;#e7FlVrrli69xin$nG%*%BaxO= z&7r5P^Y8{mRQexNd%vvw{k=3s@mv6zvFee#YkJq>X6M;rwPCI$F8*G+-UB^Xz0^yG zv#FRTEvIm>i4t~8j^foz-&ua+o;T`&Sy){Pj5B z5L&0eKhn$6o(6Py=2~3jHPzt4=3A%@3poj_t%DtE!R+c$X;PEXA(?MG|Nh&au>5TJ z(kzg?mcPYVY@^O&i~McoeNH8tPnm`NGQ>8BvDd=1P&sek2R$KvJuB9!EF%fRK^+UB=6SMx;`OXpmbw>pJD{ylI@ma( zeWi&&x~+hxjswD5*O+eTclHO#$}1Xi^20>4J=&LJ?kDmWNXLKEEWK98TFK)gU`-XA6vO$*}SKi9KjqLF=bMU<9`Nn`)t&Q+AOpsmiLw zV=NM*lsU>isK04Zvd@g0Is)-dn8N_AqHf=?I(nu_DQz?4?3n8TO_P-Tx_!)+IpNyB zR}B&!kSFb8wAQa!`F+LIv5TVyON54x9Fo4Ao*I8It=~KipSEDBsBts#Kt@HDG*$m= ze(DpA>W~_zN$Z2xJ(yONZ6C}f9eSO6gP)AeU=iY{ts`dyG*uCLa8A;MQ6CJxg`>mH zuxmXfn5T5Fmw>OS3Qe*jP32Bg8YauA$d>uj)@J$B208X+BX&g!9=99@N}0T50e3N;fJX0kWorI`(OfYsN*nt}Wh z#jMgnY#l6AF-?{XqOkF(?QfsS?hc{KNxTr$MA4z?Ag6y!J9P_yyfAt?GI!<}A4-RT zF*WJy{wi8qmGQ0An@6<2^Sf%l=s)~C>RZSBq4+_W^#5hU4ud%qeMQSorqN*Fl*)Ae zLsxeW3GGTX@6~TpXl5+$6rWbE?c*Q=<0@7+G=a#N%r--YLWNLPIo(nDxiyi+?=sqY z6*zijW>qfpK>ge&v9}INcDX70El-Rq2E}9>MY|I%bCbB0a6*!cuiYxwZP&464e0IYevzAKLz`wYzqe8tH#%gGSb+Z{I{4?JUkl_qcSLt>j%TJ0#+UxSx!e zbumlU*?k?aaN)H*omzm1A=Y_h*tiGdn_F!KaK`C69nc0k#FyipBf3`0XojGLK z)JQzZa9_G#Oeq{cT6)r>`F;UxS^FXO36z< znENvC`jzbH8r%sY`J!Y4wX7w;W5$57*~7Ch-o-lZjeNFjYe{fz>mMl$W&*?V(uJA! z7C*xdqpgbGHUYW5;gn7C9mMR9CyAm9VvH+C#<8G1yO0K%q7}ZT>Y^g;){>nHG0R6; zMxW@CdVqFdG8agSgA!|9Dj58=vCLHOxAI>57NA9`{Vnz4m;ca+{4i|;0P?B-$Ph0` zzlTA-CFOM;#CPoa%OJ3%IQmSRCMZ+;Ztl3`Y&Fr(6-T;WiifJylASea;Dcr z?e&Ya!x;5jHyI7RD?3$H85Li9nO#Z2PjJnZB_-Y2$*aA)xxO6_sW$5w@NL2cg2|MQ zb4v6pIG_Mu4H|e3MnALN;OE)BM}PIiaC6O4C%M4QR*A~B0IRH@t}&R&6iB2i@! zHBhjFUWztoHu{iAp2|#x;pj{M$bxvAkOkYVTvDe81uH!lu*RRUHxOdlsOTBN@hPOA~))M zFHQxgGNEUeLl^L>u<^0h*z-gsB#Q+*_j*Bt8hQLThLiTWbSiO?z(;xtdywe%bp_q) zP9f8ama4+i-@l9pJ!(}`?1VZNI+S*WM6;Fkp_?dej8MRV;Azx${-;rjoO!sU`M@)) z`BKR|u(ff8FtHW5;(%<^T5Dc&_-b(}*W@(Di;GT*Ph_=9MPcx(iB~Lr1}7Mk%t6OB zALx?Ct+mJ8aG+uMQ3=#{v-Jt&F}5~#!MYzbpEXy>9?)I1VLXJb@aFD)&EcGu{W=%68!?u;i^0(tL@ZjzG}txZNrd zduZQg_k_f@^&1EaF~a3Fa>tJfp+Y1ZQ%VqpBQ8qF^DplEmpa_$KeQ9Oh))=(KjA~q7K{2SR(!n<^F9ICG^kU*?Ai8+8ufrO1! z0Tm>zv50;oS&WNeCEItHLNRgQ;4_HiYPN)qxXQfCa(71tcMa9)x&u$|c-yndRkt|7 zC)ETC2=!Idu%~)yI`Vo+62YxvC{d*oXHlD&Jmo$g?NYVC@2iJ2DV%gYjlq++mcm(ltOAkXDe8%gXqDL!Q!n*Kp+ z-|gagu9K>B#(Z5ml>dDdL;20GjJz&}>8WV+Ye zT?nc2pEz#*Yg8x5)f&)me^=?B!X>(t%@Nzt$MBEele`DI-ksSiZ|u4+^SOEQFipZV zQ?Joa2ylN+8Y`)0Mml-S4{2P?XYol7AN4|BW zhKJj;?-oM}D;}2Ki-!6HCJJ!<0fX3R?+8;&lEU+;I#{0P^F%xQLr0i87ywXd7tan-I`9eZeT2Dml02I~n8w?3o_<|UFc z>qonp6lO9zrl+qyVjb%52JiY7Nm9#NAE)>d?K`f{ywUkyX^uy%6MN#dMnH)xdg4Lq4uX zFI<(cG9*|L7c48b`bgf@37d#9=pE0B1mm6U70w+(MDy_GDr$wbm(or&Eb z&c847=+U48fd-A=z<#?uz3F56Rt8kAzvQYAmMxJ9tho@&z_k|qBDzE5?fCg6p6(Bc zAi!g;-|vyxDxEuMCNF&_2G?RLSJSv)Q-Wjzt@;Q72ZhTs(3Ed*8rv5gD(HmqKi`(Z zEEfIgGtl|bJ1I|2qd4$gIryoaz(-DS{rV>2OOu*11bY*N4~T_W65D6tyE|tO-56__ z1)BpYI^j8G{^@Z2%%&Wp5Pw@Qph=>n{D!p4$1&7<^O6;E8!_x}kuBLuE6W9(2-Hiw z-$(1`1dJUYGoR~UnLgCA6H01rzwBeRGh5H{q(b7F=2d+KF0pLU7=mTJ6B8{REX_J& zDusDTYX4Dkp!$MzSemY~p)&X%IP@HpvrloXDG@}5gH@HBqVO6Ii%XHv0O;uKgg~t_ zthg4ED<#JiQ_Ba|f16`YZs(c>AK%X3p!e(#OWUP=Xt+7Yc^+YQexZb+R^*p7EATLj zG|j{stA;D6jCc$Il!t@<$2*@`A*RVHfwLBgq}(Z*WhV%4d4nsX?~Q<2*ORQu*3MG? znG*eBMbPF!7Vst3{yR=qGuVBNyy;PniCVLGTyq=7V?`@=^QNUfC1H>ft1u2wH9qq^ z)2$0$yap_+-Fjc>;9V35*GtG`cwul8(sa4sFs2tUv$a%vkKI$`uYPhS9g^PDbw9cn{IM=r9v4d7)nOsRb!c)2DR7zC2U2+-E7aB$_hUG&t= zMQ!xdD9xXQ`5*tpOCPOmhQq~gN`-$GL{i)2E3kb(uN5|21>XwsC&-D99}0^bV*pAp zyU6dPv%sD+Nov$YYCRYgxQ3ZbIqGHDKCq|CLV!Mze)&NLTw5=$N;f!yEeeN?MsO)b zbUL~*k*guzky;1~4b7L?34PRWP~gL{8QEnSG3i!%Q@rPz0pUQ4fNH{Y*sp+HXw51Y z!`|bhpo~Q;(#Nu6O-u=!LwtA?YvlrQiSB!sRt7H7&E0Tgy1Q+Z{&W@a9=rY#F2CI6 z^TYXitnAU;eqnXe4q|6vEw<$km5$9{D;Jkd6rGMD2eqirNDEK?WpRDaWfbQWgc)&h zL^g5eU8W(~IQuNNQZGiYpw%6;afDiXGf|s7Z)Iz0zeqHjSpd`Xe)dZ~lzncsW!Yq} zZV2>xS+2lbZY~BMb_tR5v?o0))BJS~5;09qwT<)z$9~Qaq=cPcnCy8{8s4~iF#lHM zc7{~Dl2>z2;u*rz9WBq}(DS8q&0nx~ajR!(W;g_9*m`7&KFrR}C;G;=G+L=^u5Q_= zkVy53x4sGT(5&Rm#XjmnS1U#rwd3160_D%46VwTu{P{)ckuE5ye#qX&z?Q=N!4vfN zHTzz2jkDPI0_hBTT8#i8DYvIki2uHYimZlw@w-ce91D_UWCvsUQMOAe~rNS!cqdq<#I-Sg1_ux2B6A|NKRFKLx zjM5W6%rgBi;CuojN<%*9Xyt5UK9I6g$4$UZ)#%(R?|b{@yEuz8X(*w-iAagsj78Qk zh+~J^-D9>hpB6>k<>FdB>V2-6g4G_d(Mf)6y^?WaoVwv1L zKVOsMp7UPGhfV3@>@KC|D4se5dx2Ak7Zl!B&_2qm(~|Ls z4J7N}0EOI4ES4(B?jy)D+eOok!dQwo0f@W{2bwOFq^hPGgL<1FIQ)YmO=}BwpPgr= z_$4t;5vhV!eM}6lgQfwNPIbdq?&_oJZ9^r^3DQDu6t6M)9#=++!B)Ub`W*Ianf=zJ?>55_F3 z4H2w9Z;?&-h02(b6Fr)qbWM|zW^%r}f17C%BXm9=e4!&FSTDsn#=QSZ5G0=d1@{~| zBk8~0LoUZ(xw&5^on>q9|JlvHNN!^m80G+_m1rX;onps>h_SleKI<1!sJj-O zNfFGZ%ASk^ZV!Jc`kd7lrH&sQMZ_eor(0wnTPiQvvtJ0LD5^AaDX&;00N(-ggDkug6CQw#n@^To{#Wq^1qoG+mn{6XMlpVV+aY~a z32H^JFVqfi__`RnOc@=t3HdcsE7fN-XBC?o?K$4&^gLIUSd`e{b}pdk&aR?Am!c9I#k6cwx2tmL2~o5gFVh@n7IQO%EtT=rFLG4e z#+U>Kc}o)2De&cPEr0eGCktwRHTl>33y>^_3IRCZgk~gJWKnuGlFI~-j`)T_Hgw~k zEJt{2_Owxf%3Ay`j!T^0veff#oz~5KN(yH>z1ot>6Fzy6MngI?jX~A=z(Q2Bc9Gcu zh_BBiLtDD)ApqJU&2Df`4mW=-Ff`@BNnn-5w9s2qY6rr-nldKC9wF>CsbqP~P!;89 zZA;lP!d#iEGMR`CAH0zOtvoD1B2MBQhb@QqLKH<6Fn~&i%d+9~?=)F=8P;CW2IDknb+r+btukAT>LuDIJy`%uq6AK#@ z38*X1n7LeY{mfDuCcCU6vT&;wW>jnGH$Mo!H&T`7EcaUb&$c+-N@gsIu!5k>nddj~ zNq~b0%4+~H*UViPz@XKF1Og^f? z|>y4-M`mdCR5)7ziy4v z$Nm2rcprDZe>u4u(&JBL%a9mcQ7@Z-3tYRsr!945%vaBlYHWo8gI>ixl2gPixS5B< zaF3hq<#Jb(!GhTtee6WhDLzMA+_)~)8-dZI)E>eSa56bW^VgggNM!ky zhEMY8anM|&`{UT<LzPzd$1BcQ)*Ztm@!7* z7*d+3$ufmrD%p*i=59c=lJ-`o6(Kamlv1uq!7c~?@T_=(r1vJ_39rJcm-s{ zu=<&-)N;!Rzrd&BVk_^*5%ko2!Be5wBUwAMtu)bz1OI*vT2mvx+4a!#TAM0ZK9@8$ zvARhljl|cm^x=sx*1N=@-C`aTth73OnscyY3#*4~3R&y+^LnPGhs-|UGV-!1Ns;Ai^eQ9Y;ct}{+; z@6avxTfEMcDSHLsa%1aQP#qmC??l=c^*5{1xY0hV@55rhZaxsZ4bHqzkI^W%6=D~H zMQi>0P%RJJodQ&Fp6O51WC)LW4|;-S=T_ zDX5Iy(5|jc|HZF?bBA4S4UO|QEh#xMV{W05lwc0$*OhBF1?J`lco)53#biH6Z#RQz zy9ocOY)jG^Qlf!=X#xH3yfI^XHu@pIFKZH)oHd{)+Pi}NCB<1rf9Yrw)et$CO^|XE z0e<03%_XfmYC(T-*8kXqC$QE8I8Xr!_uD8z@x-6>hqJDw%_8eT8fneUycYS z8Edy;BorjEobR2b*coQ9)kn`x)?jU>R+h>5p>Egs_GA7Kp(d>LTAXIdC}uzXu}R8V zkgKYHCHW;l!)Rgor6d330l|WA&p_a*<&r+MOG(Pva?^wsG5X@UfGZ}8;e0WFq9M;< zARsibf_n^ogwXoo^ORvW|F)q*1ZYbJ9_cNx>w6aaw`7Q~-ER$Pxr?dS@dq@O@BB9B zuD$YOq|ji=tUVq;^=dCpi3j7U4Wwg_FH)(MMOE-`cbU1mR4?6$@9HhJxjaB;H}Rd= zHbm4*x3uc*%vg!4Ow*NZf^$@hSIPYopa^Sb^aScdWPPoNM-8;2N-;xI4q&H-Q1zSa zYvU;4uv}K(yg8p(y08%hD`ptnZ+QRmxady6=su2}+{N8IQEz6ct{iTMKb}etz~#79 zHV?j~QQ7t7ms1(oRoA*4D?&QYm-?!`^k+u8S>qw9@?%DuA+2k*nLyigs$8Vem(Z4r zym1Qt+yW*vmSPgrWNjOneoRXZV-a?w3kk2wy1DQZS547l=g}ppqwv1ByL4SA?mx4J4E84rY>vMYX`UR_U<;B>{Sd})*Eg?hwd!@?90V?_S|SPbc> z>iOX97S%{bU#m{OEM9tU8QejRyl$wQdhd}MmgrURWHGv+Ac1es%hkmuEgOmf4Ft7k zl1{>{F7{ zJ2X!#S~E1@i^jjAQU9QBJ|8nCt?2E^UbSIb?h3k|230!nY{Q^55pmeuCgq1?&oElX zP`jMEpe2=6Wt?0-k(&R|3QW3m;JrEm>U z2<>5`nf9Z^&Vv3WSd#pQrl*6VGJ% z(YVcHvZe!{W`h7JE^7uG7}GAIF@Hu&$ec9+yG#z~M;_1VBw3l1Un%SNzGh-)!Q&zG z;ule!+lQ@8xGA&$=I`R@akDKo(lXqS#+FlqF;fJ$&iT4fzACG|5@EJ}no}scIeg%X zPzw=&wffl2Za>5;{kLf`U1Eu(y_4RAK(ai3fyvbw*s`#&FyV7PFCkH^7Lw&gL7|JD zjL$+SI?VlahX_w1U1w;GRCo3)%0e`nj&_}QkHeT7TB&r`Woy8eGHPRy)aFVy?Ka%A z_&NyEU+4$iD?d2{nI4YJHkLjqi^q97E7LIq1V~?0n2#W(KHuH+%9oi7;juVRDaWW7 z0AR=;60YIDFrKirGi&?!lm=%gqcPDRZA}7)r>@AXk%Sn`Uq9d4+Gf{9fvD@=y091P5<<;JGEP`$FtUH@|i9;5)os^ z8jq!|SJeG2AYZOGpkk&Z^cP^RWia>^N4J5!rD*zI=cUyYNHMzvbUSCFxt+@Uw%iL|cqa){TYyV8LhvyLgbm()O3CbCRa|rmj3ycfiwSj{JY8x>U#>jWQ^ahq zpe*ILbvIWuiNaotOG9qpdi3sjqT3fu+>J&XN8i-lD5|)aUs``g`*uiuy~P-()E;dm zRtY`Ae%rr1gJ-=<_%&Wwc}p)H0)Y#xG=eaB-7v6k0a)i|Y0YUGzJ?BHZ0TvG<9y6$ zKFP*rGs)e}-0YPLrKsc{wN{qJ{BGv+9+5jgN+r60(QE(kzz^xuJBeJ;djFx#S4K|h zQ_mw6c)rl(+wQxIsmtuico5sQ}5898LHyV9sBUtTjy;~hY(ds1H|w-n9fTb?*hqC~|DcDx_hNgpdk z>k?`oXxo-tl(6Z%487wG2yAYoTt;#$QRh=-J|kV76Kvmq`Kq?AIlasU8BKucAov9A z6DmaLg@)z3r|NWm zc6)oPjXUY|m>R*xfoaBoo6NyEy%KrzhP12Bq3&29Ko@569Iz=6wm6EtT})o`^~u9t zDwbioSlv9KN{Lf?G15c(hvaQ`Ix_)`Ptz=!g4xa;GZLqpW{;$SI&;SLE@{6ru64EJkY89>mkuY!fzAZQ8XDxgpd!0 zs2G+Jrv`e&3-NJ!wOh_tupEd}z|~^~d%GOZ*h@5N9+R%oE6ddl zcSK1bzO{+{cde3*_~~H0mHMR(CGHh?Z_?I`*q1!2_|X`)3N0#T)FI7ai`E#S%esW? zqq!a7`L9oBt)t^Ca~ZW;1yc4Q3*@QFTNaGvRN~{pJT)gq>|r?$kOTCLpjXDr0|5b2 z81`t~W+OE~H1If1>yWA#rdP?mfxXXg{79$J|A9V! zx*i00VK8!_H8`neKp{Kyl3MfwGY^(>v`WF#N3!PE|9sxo7d=LqzFP^~xPkpXxUOy1 zHMy2(t(<{%+Nbk_H;hFu((_Q0OU?8uJ;&03!8bC(`~+O(-Z&G7{Y(3;qPlnztfV=| z5#C8@e_#lkUJ)vyCC=vVbWO(?ZtS zM0DHg%l<_E4sv0kdSDy$Z;9DyV}V3-r+46}r3~(}_yg#sbTZ7=1=72rUp~1aAtaPx zxL9+e-YAyBhb&RzB&kVPD?O)&Wp>Nt#N^<~Zc*Qr)Ueqvg%&nsCM1B`s#Ct%xR%Cq zwLEKOc76H9DH+kMSE#j3qD`qq6>sH9qTWYK%}NDEkpM_>0Q~@ZdjLt({{;3jM}XN- zyJv^}GwNr~-EOUr)X3shjr@_s$ZLi5yw}gm{8xjp6r0scfez-(be#9)rD>ch#U%pN~m2M*Gh2ocJ;#klIi-o?##O}Jh`w|m;O$Yx_$*eX36 z2yW^qv9Wr!s%nhUp17ydt$9Q);h;nE7<)oSu^)O!HXY5KLG@wjt9DCY+=rme$*q$N zLd&|40!FCoY-=~xoyv^urcNF5qE&d+o{uAe>@m=QhPr0_a9)EnjQ+1!Gslnr| z(dKF?O+9Vb3J?h|`yp3U`Re0lc`I*#p5rh2!r=Nhbg!IJG=G>!>icObdm9EzxewwU zWiwg$qL0(yiZWY~C9|A;HRAxCjJp}YD*eSCUui-do&-e=VUgP%kyYF;i{8Xy2R=EST2h!G8*)!(*PGTV z%^34*Ph7K@dfY4ppDnRRVSSX{9vymw$f{*J^u!LWWT86Hg#nGw0slb7snPG83m-Sy z0y+V(Tkj!m|DJ*3;gA4>dDyXV%R*aI4!v2?dO?0R$B;WD;#h4JE}P}ysf3e3#5JjD z4$ptN?9uqE406T)QvJfS%A>XyR`bwL8@SI4#+EY`Y62&)6-<&gE|=06Ix7RQUI>n@ z4?eQTNw6DUy;Q`KwN5f1)-zk%LZ?hzHvh8x98a>I|DNT4yx%GaPSHM8U2TghGc`wW z8Hgead4LpRVU!g;3#H>QLDkp$dQ$jTrX{zkjNCk^*Pdo~xCRL6{f@`N?^i~UCh1D+ zX(&c5mxuf36)vJSOq;c^J}rjY6y^-80>uDgPi!7T$=b!AVrd}0YaWZ zA%bN40kU@^)ZYdT`@6xp)>~6R<~lTWtXZ%k*J|g2vY?TDydy1&xk^JOU+)leyh@|q zcH@>s_7Q}vfEsgc^7vZ10=1dxAfF-)Rkr!&9r`m{#%3W4dwmyrQ{?{kH&Osc6Zn)h zhN3UA5Q8743mY_CmKLXt)aDWfPOzu42RPs#ZA`eixTFcA*;l%b6D#bhFIWTmaip%OwPJ=sjThPi6yfWX; z+NEQsL4g#wX0OCW({>@$228xFZqCOU@+wSO4<*G6s$VLoT1U2xcEX-O0rt>&U6<~W z#{fqYLXYIkBRAh-MEaCtt|!K?L4WW{~LV0TD@c* zX}sI%goCn4uc`l3Z{GMtN$KK^xytq9aLwN3oH#h2FG6SI;g;OE?J1tUZrCI~esnz8hhWtWc~}qn4U)Wf#2NnW zIvVYT!=~!6p;(rberf$bRUzaev%F&5{V$Q&u!Qo0Je{&}CPdqp!n`lNy8DQ$crhTfw`h9{UQh^vEKr;KcK^ZtKQ$B&=JKF_U z-4cD;@Vq{1gsWp4lCyj_P`j;(&%P1f{`t4WRNWA=$$W$IXMSEem6?y?tdF5Lc*QVn`4B~1-`81ykA$54#dB0IKF1|PT=;hn`4=o@)-oxG zbrH%RJ1k`4EL3^%v+|hV?=DHlf#4`pvOQyxwYHziy)rhagn>$ImG?U=DT_*cISLGX z8G@@J6*&nNgE6-4$7@gTOg-*BT2C9+w=tafR7=zJeK?X7*Q6ws7rF&8D^FPQUkMf7 zoS6H4Pwq$~iLsf9^uPB6qzTJ}Pv*leTPvIVZ)2J+MFUc6rE}=TP7Kf<4J^5vSczNn zH77@GJ~yxPX_TkEq!A7xquIjG008+i0iMp9+tZQQgmdvXMDW@zWw%Spw(bxcJ*go# z6?1qCY~nuM#L(diRdh@lO$#%3{z^F`FR{gOie(bKMTHQw_z;@zYtX9Qdi;Svif=2#-p~b6=^E!x!9yCh%J@s>s#=JwP>x!Usb!y5o$l0eap0E*5rMUf z>e*UkAiHwiV}WZUSIiIpiddF^yZs+Q5*mgrCW|JA!01!x6mKRZb24*@#ger_T+#2S zCRdupMOM3Yc}#`XA>>56AM`L>YWKF8Sqd@=dqXD`mD#lJE{?sv)c_MQA6_U;DTW5K zYu|Q!q)W$-Hf@}!Yvn39T{$^6+h3XC{oUzjN91fBa>0$bfhN_k)m+S}^GD64d+@X$ zX-jV$lf~LjerIvAWT$PFZD9()HydE?w#p&MXB#42FAt?;+`!2VUgs3ypUXd|{OzGpfb zyBWfD5%~~q_^Z_u74D9-_`%Xs4(HFJs#;E6q11b?oO?(l;4utaW6PhleC_Ckcbr6& z{yZX&9vWohUdV_(j($OE`5zj+&mdPoL@Q1T1JjF~b2^vLQmxf?kZNdWu|q0s^QUfJ zs{G#GQ3Wj^$p@pm6i1~Pl_xT&XL=h&B&C;`t@A2ZrGszHuC4W!_dP-b_3*>!G|#6& z7_W8J8lK`LC*r{FzJU^Yqb2DSA>G|6p}I9b{)h0HG^#yC?4x4l51Mma2`E@12&xmn z`~Awrc_2d*{vUQTSd7cJYUXx!b#_K83>#}Ish)+6 zlzI6UX>~*%xgv*0rp}MhDkYb^#}96HuB$zo^#`F6!nQ+Q2r|lO$#+1S%@t;rhMHU& zatYZ4Mitvznw%Z-h$K9&wKLJOn$I8O6+%!Catf4)>L8bj+mffMk)m9g9t3Zoy&K{} zO(Y?%%#-;qxoyjBuA*0-v`m$@pI?aKFtynsUaQn&5@oG)Om`yd)|>87mcw@|Ps)*^ zLC%5VHVw{sl&mp8LN#~N++QRF4xs^3j-&!&U6b@@YGfQViW69m3s~V?52B%4j4KF6 zzM4h+*(eP@7vvI?US^O#^taD?px8~&tvO-a_&95z38NCzVhCnNEtDi)*H?4pfw@v?kx$8pQf!qp^t6l zf2oa!&BTkqE7{g{cUx>L_t{xWYIf6BMHeRX$eGsu$_q?>LYUgSl&1cNwzv48oTXD_ zzLC4GKVgqMUgymnn0)9tp30)2y8{FLc&j zIJYI24k$cHTU-n`DG5j?GwA*_B1VNY7dCd=!5laT(Rz3pNRk{Vel9i8%+N@aAPH7o zqZihyha%*30@Wp6RUWy9Q3t>AX?}cTB~X53)}rR*K6AkaQKUq4rv@f;CD)S7@q2if z!0=KPPLdivkVh~#?WiWX*Nwa8v%*Wwky&LPGaeR{;2)^V!2i&ke#rie@zb6=`UcwI zDCSt-h)EvjCd|v~(HnQHq2HiA9H~*e@()z1rn9MvZ@O}|({{PZ^6L3i{fKw~H*6ws zQG7`Ums!F*SyGdMo~pR-CH&H-D?E{S#lBMUhHxdjWC!C~WK3+hn`e&m zUOhCgx9-Vz;MU!2X-EvX_{YjL>C58)425TPUHUHr+F|Wv(iiNG_RG7uS)9=oH)n!X zEHY^P&x66eiN~&g^+uaw%XZ2wAO;TlPsS~vap}dz1g5sCyeD5jLWr!I-4ZW@TiWia z#1;foM*>B~1w070D$vQ!R?>(qXrfhjwDe!u{nA71-_l}gK8?D8gdnKWWLECRYyTos zG zyJkoZ52llw+#8xSz=6P5<~-=?jMaEhR>iM^UHhYh)#?G839O1=&rTwCF5G_l*S&er z%Z4tgR~K|OTZ#=yM_-p84q{^+dRs>M`0esAc)3bycnyeA!kg?Mvi7hN%$TSSJc;H- zW4l41z7Z#xO>R_TEq`Ck*98xQ&iH)hciC^$zrSWb{zHS+8~;?s_z9f<^lSKc z@25>%`~T34ZV`dLakZsT)|6To$J2+{?VY7@!GZuU+zWmi4n);nl?XSAXT!~juoS$; zH{1H_-GH$ZovK|@XR%VMs)YImYv1c2zg=GO>I_HipLM^=4gW@ zX~n2UP>ZRMLz$^m2uc2=VKHUz6Zxf(x~pmsN~~M*uPJ+blx%Lj_7G6dtUaGDHIm8I zf?o^z88wNvyn4SjCr&=KT%oB|Nf>N;nu6&uRW|s8Q?RjR-#8z8>cipxXWBL7R{CAG z#2^iJ(EydG$7VDA3UO}3jt#;97H;1%3o=f_v`gIcMBp03oywh&WDH=`A*PB8ZUy{`q4ac!tbW%bV(n`&$elL|MdM3rv_E zP_4^?o|Mhx!AzQK5Y3B?UuS#Dl0cul>L@w18 zA)b0w!z}*OM;vGJI_9}#D(jIG`DBd95ZzLYGNs}vujfgG)WdJomzCtxxAnQnL9>3p z*GK(|vZhV7cUqorO=9tI9nJhoQnuS*cOio&A0k}A6eFy(c4hWyUOgFBFCV3Y5hgc_ z?b;Z%iCGnGVpdLe$qB~@5N?_l$!U&s>NR2<38KO* z;Z{5NIXPMBY7lkjZ8`(=@kM+hipUQ#@o7}Df=_ia%5{81#*+M&@QVUJF8LIy&sJ9m zVzY&oP)`s&79iGI2syFN-q zh2oqXR{otzuQG>BjZY;%jRb~W==}{1pP4ItT67=~-J1HA)*>i-KM4alYc%~?4e0n7ALTkKBE$_DP zVJmGD*>;Eo)nA{0{+gtgLUdy0LCE?~D%-5+=i~r+Dp3?md#hVCQn_iwT?N)Ak@;1^ z#Vqfc3*QtPr4slM(@m1VZW)I@mDJ{;zwHMH zy*H+9Pir{>>Cxmk#F@S~17KcDu#fC8%!AkR3d@sFWURvvZ&dsJ?;siVG2qzgD z4o`$a&Nsg^|85?*c?x%Zogc^j8ruOS8_IV6ow%RW$|5PLx2G#aT`0PDb`D$0JpOS6S#tEES{R&1++@hjx|)i4d^d^-qO~L*6UWwk!@@X(GFKq7w9YN z$0}VIFzPm9s>y!NMqAY8`!G(x*NMSQEgMS$1fJs! z>+f|$ktdSJW-qXU6WnGtBQv92|5WD3*hG-JL^~2uE0H+StbfcF)yk?Zc>ACq)oz+T zR=Zh;RHV#pVhM8ls1~`;nqM+Xk-MLzzuJbO1dP(+yLSa+0~|5lpqJ2CZ+(dZJKZZq z{fE{v{d$!?TcW+KiE~y zz&CzTzc6E}m|HbV@`>g|CfYp919~ZCSMM(AzH))eD8fUTv66ALRZ7aX2)*Ezmf;3O zs$ZDwM8FPa?<6qdC6$v{(3B%mhv=#w8S}a>$MS8PVJx9_hl`<9jK6q%J;UPLTHY-$ zX180$=6Z8z`8>ERs+2><%6Y5^v|=5iOXxD}qE^cckfKR%1mt68xT|20a&M)e&r@s` zuq+p?TNSi}?i#;-8?t%%BwVOAGF+!%4O1u1a{cPtm#tgZGU+9i}D$9qtrD#sYyTuAC@EXXF zQs>|aPW*{N^$OxaK^)0H?o=xQ+zqD>N+0zT76%df%Emf}+~bxpKG9A7Jg`!@fW9kW zYm_sSD~nrOUpY~muTlAwJ)JL(hGpI=P5Q6bB}cZnQBbnvI^WNvJ_m=#uS-!!X}{s-Q5JS%yO|{yGyNhY_m;j>t%`)U~f(0@kDWhW!|2;-SYiiVXIh}U-Z{3mvP>3&*S zh;@j`a-k`i9FbN35{K)VsltR?utr_KnRwPr*HU(C!e#H@oXacFkEr$U-{Qv?Ym`>Y zRAOuEOE0k5t^=CnQ*5o)BFe(a<0s_(!cjcyJz;t zRV#HB>LWxykBee*9cZCx^7Y4K;waG{zE(ZUTzgmc!2R!msc&tY1-Uu;dNr2Q(8|#M zW_V?a%zku@(tZ^=shjY

;ha{1bZ(@X1R*-h69j*g(wjU8yCycZxRmwVI0_yMzMw>XD{%zx9wCC{VqKA&XfMEAH;@u7%*iCAe!zaCeHk1PJaBJh)qN2v*#sc(Jxns8IP1bN8Dymvb|J z!d~yY&e>=0=XpM#&T6`J7SrQqt@qMxJ`USY)~F;iy*6yngl8$K(Fi57S$#!ZedBba z=E{zWeZPA5Cp(8UO^Rhtf)Hhr=!_b5JbaA;Hr+6d8eQ@>`>YdP4x1C-oB^%)hCk}4 z4>QNsB3Z-D`USGQL#w>U57ffkleVt5^B!pisaa(kkK2L(2Aw^l)!E4^J^U1yub_r8 zw5NQBPK6>)6Q3AgPQ4@QFKN&BC1K_>i!T;Aac6(nyPd3}e>L7a>Fwz^FJ8xHUaV4! znC%tpMMCHHjVpsXX1>K&jk`+HzyueHGo0E_tfU+!mrhQ2OkV63br^U79n)7K-C>4j zm+i$^ksX_s%DNia!~XxFv|ROu$Y%6kU$)ixuFq^~8?~r11ozjN!NGgsk=)E`II?a8*D)91illCi^ToC{nW{;5e=f08 zn{M#OCes;xD){qJuXFcg%NyQrFt~J`@%HBG*W~lW#g1JBNiMa<5X<;u9nssig5&KY z=I{8=j36cF@76KTdBPa)rVrUyuSk};#d-MxqESD4epb&;ir3P6rJ|W3ySP$o*!(9E zy;j%fl&_umZKhT!utyxtvfLqPA%&22kUwnvY#X96w?_D?bqD@~Z_ElYE={7KSV%iJ zouFT4Xt>d;p;Sj3>rIqaLE$s#+@3ov!I0bLX5`NOWRWuEAR}=j+H958xoEkQPi1C9 z+&L)d<%<_oYv~QIbeMD|Is>vdqVM;Uyl1Nz$|r`kEmgJmcbU6o2p9U18t2J<1XE&8 zP66$wcx(0nj!pz6yZhOJI1Y)fXp~`g>iJPVY zAnN#*)MK=zDRnM%ar3l(FCDtsVw)2YkWmLCpkZp`&O%&gsn9CkV4j@U?16L^NiQwF zIlZx{(!ygI9d16o%0C?<(bkS5?>ie7-m*}parprsI@OX4?UNFFS$E(dM9!13#mx-Q zZu5_+RQM0|D`fz$jq4wbIJ95vGKLk)BueOHbT7UJsWJ496h2g<1tAA)l$W*Nl5pB( z*8BhC%4S*9pvVQ$*bD6PXKdh3+nmb`S|-6pZc;IdsGOC#$~)72FR}WJb&imu$2q?~ zty2_k0!~PZ3FKJ-DB&R_TQH!1_DFnyW@*pP%5{{9_znCl^jlkv1b?^lPBHeEzOABU zu@w?@5=~fymC{N@gQIUeb}=zY`tT-FhGW48#Vk)DG`hq_kRZ>1Iy+>heTS6vM^VTd znMdBiu)5+9FUIU|nZo)}(1#K251i+63U5&U$p2xvBWY~GJ^Y;Br*(}4nuq%|I!m?g z)043J0}S2Ly?6rRbhan8Iw+o43>aa;1D!ll9hhn7TVCI{+8Jq)o$12TCbtE}0AUXwf*^=N`2R-YbzI!D>@cxn%?7~Da} z-F6^r?=V%vr6m8QBYGAip`?68i0vqhy2d;A3! zAECI#O{eH<<9@KRZ{=i7jP6-LowQYVs(d$PRVn*jJ%3@djOLruvW-535y>w$%ntoA5!G3P&}I+6j~QGmh;l&Goc-jd;o=8|*Ds&?9CF@dUS)vC+E& zKy?9EU1HH{^7hkj%Qo2!xt=C+TnUbO*oNpdaOJ(cS=qxL#ZUXt7T}R{=hM-T?o9VC9k}xD&Tw`&CSx(ojl_Mi@H5? z+5!WE;WX=$+{%iUF^tXoF+OjK(-+E62*eyCE4As{9~KF%(FwRlMGwC=c?uP4n|=Cq z{KcBBXrd_~47X?C*#{?Upd({1p_814%SXi>{MySbI#M^Q5u#hDG)*$Ja#{T^Dux1u z7~lF2^J~?z?Ipi$sV`;Q)1oDpJ@U!Ie9~?Yu&vZM&{eejQR~8IAHXeh0bG{93lM-F$KB&dYY}4;z6UeQdL3Z zSzwo_za)tfONU+8Q-qB4Duyj0!+0^ER2@%b0wys774Xsfd4J&0qriRz~$%7M_E%@GvDdh{ z#@k%8kys>dg>QDh|5R1%kx08s2UV4da}(IanC7u>H2)CSblXnY?LlGAdVI($7+Tr& zw=4=kioJFB#iB?Y^PIheEuli(JVAa{_%2(@P zz3gx@$eSuQ%D*jk|JsfzO0Q)(^=Xh*UZ}ez5Q0+jR>vgbm2ZC|-Lp4Vi`fz$uQiyf zfe6J0dc| zTLZd1?=||g>#;i7F1dT5CFl40i;ggti@-VM< zi#WTlt4l$TXaRnxSVA$XP%TDDvSx-FH=pJfV%tel$LZAP%`!JT2JS)H7*+F3lFwo* zHyJr5bg;jzYt}%z$&(p+%$-Sqm&M0kx)?g0GhQHoTs{uPZRhDcx3{q2DpJ;tHGW&-RDz8iys*i3hy&w&#`Vc9 z*vhu3aA}D|re6}S*o4NcI49E1bqBg8T^qyej%e2H%DXoB#?AV-N~m8oHKwP78t!64Xz z^RK)<83v6sD=nhcEDb~(BAmnJ!S5Zk&IkphJcCVn($zop0Y@dLsS@CKtZ(y*wBfTj zRL1phRVpouBHq`0dCqh=T}`%@2>jP$y5b2>s)OV$`>sERjnc_2&~kX zWHpC97WyNdF2mh@gd2vy7D(kCRJRtEHZpYlLET>#bL|EiUdi5BV)=1(BgkDkc6$xK z^kPes#W2+^kwNfgHYrgnGr`AzTqId#fG>09&{T33s%E`8QNIiqCa7801dxs!i*_#O zfQg4a&A9N}f4x0K#|taRZ28me-0@@nXb<1>pTjk#a)Q#nI#+Kayfu8&chK8}uEdW!oINAoA*YMaA70R)Pj1N+n42)^F^{+px3x#NW zs(hZz6Y#NmeBulN4sGbBh}h-)YEWV4wfgQ=*ByA&Qp~2?3DTG!xLtHlS+39OXmUv7 z%A@8txT zvn&$9)5?DOQ0JlECX8i0IT$F>;aqc3Y}uiSxR{G>9Cz-5jh&EW!*HUE@+)w8mMEcL$}Fw&H1 zIL9-C;ri^KRHUFH;!X4vf;slV#<&eX2Tv$OFAjw4p};aWOV5bMEP=cL@5#YGuhGcf zTYkUo>4VLjNBVZviCq`d?Aj2^wf*X`1XUTva#O~c+2o!OP>|BSN&J6$EA+@O2Ik!T zgO5ACUXd}FKs=L^WwznL(HTFF zDJJh1+$^oh?iQdcd@qBi5~q>>U%Xt4QM+69PEi(uiL$T9ev$%EjTcvt&HtgO4h&Drjk^q zawIf(=tF-H0!^^l>}ldSOA1t7C&AGr=vVW?N^lAu5HQ|u*IZMh;0GoxX?$hD+*7)^ z*ouvr)*bzMZf%EVR5eqcN{cyr3}_Gc3s>%d2Dz+!W9kfq4GE&X^dQh!mFLFJ zkZ+MPTy@-CuZ+u=6mQj46?y#klJozoxehClHM}#mV|BSN3&Rt#^dAaMcgRm+!|JGM z2Dg}}Z}JdFSTbayCxgE>H>BO#+ctC!I^z)N@V=jar&^-J#KL#--cqliNor)$P_m@- zWE`r-bY*`_RV=Hef@INz-IudN^HPYZzEPKOPtT+@w3Jt9U(Buz%@+@-1%TwEVcPNz zo4>&7b$kJwi zGOM|Sh9#7*x?uml;exe!#B zplVl+%9dOIIPF(v$*39AZ1yB}vW^L!wWv5|%(MtSurqz)M*{is96p4W%r&2|iQnC~ z50bl9KZecjF_>FfTUCFe+hd!0CU}+bfQuv>W+?zSrgwLIA3XlFpPm=Hmimni+f#;N z-kz)aC6B%F!<3(SpGD}C9cyA0Q#7Y%aA<4MG42H_z+y+qb58vnpem3)-3W9;CH_>* z_)`n!=fCRoa8?L|qDN8{ncB_gN@+4~5*=pMepJvp18Vt&`iWui1p5;6Qq&{+nAT9c z|9SN7!s@Iw1N#&1cXKMG*B_cA3_bU+L_+?Jt!=U~uu6hNWV~#&Sm!I#)QbK?NpMCW zz|i;X0q)F#@MNKicTnT=kcgXJed{1sLW9UQTEz@4>i*jxsxDpB7MQlZw$f{EQ8+4THn-T*p!2{+6`-t-&K zx$%k6x~6k+-eyFHJY6u40(H2j8Bo0GV)itJ29-CP2?Bl_9!vw{f~GP{TU7CpzS%0B zSl)f5G)R7ANb8^@xQ!QN$=5V4$hIY~tDiC*)>X3+A9xGc!32wEtEp|)$G)T9rl|s& z?V0D)2rkdkE=iqYl`>gObrBG%v(E4> z;y;vES%XURo&03Jm$kM+5QzR00~jK02zQ&)28Lq{$mj?m#8^7IN`j8U5H4rg2jVs| zDQl%G88DuYvU}p1s*?O~Q(uVM#vB(`O*jivbp1JgpNl2H(OrQHZgv=Rgm=5MpEq- zK3#4qrT>pY_X*Dpud<%o*NedK5goAxtuCW3q%;pTtqcaFPGbyCU#@hN3@4cHz^QZN ztGNcLa~8pPz!y4>js9|~k^dVdv2qs|d8J$W*o`8Evl7m0&h|8P;4Sd`8_q~>C~AB4 zia08Ak^0&@o_n603J}GZ!v`jq^-0T=|M5nPyzFY7v`J(oq{patCv=7$C8sbt6H8K` zzcB#=QRQc3CE-| zd3KY{SVxu+6$#^THG9dLXP^yxx2l7J&u8`&XFu(8Gb3JHw+4Io@Q*N^?xrb8{`C*iE7Bw}LtWces+GmPc|1;SXc3mf)2a#$CuTaO3@@w*UksTgs*I% z0|GU{MDL1X-R11D+|v}SgtIkS~DNVO&VqLma7Vel*?j2gMbEC^t5WQ2`v~)Imiy?{t)ub2GmWSMl z?r6sVU_Ke#9jjs%^h3Wx{M}CY=f{p6_6UY#=D3Y7n|R$DGCsNTF@ez0pE1cYTk4d- zC+E{@OHS0yO|(m{_v}kYRjD<5dpz?8Mdg+QTb1dz_Rv;IQ$%rc(=HM-M9)OBp(SU) zL6YGR_)qt%IHo8!F|bYtH9&)|zye^%_6Gf%-V>mtKd{`?ozI-8Wk{0vfmhNM3^O#- zGkC7i7dbT;bO=LnOOglhN8F_6vjipzOR}fvr1+;xP1bzz@J#IO({!BA84zR{)}aaC zP7x3c8@!#WUlUyif3B$GiwNp8S`APbo>?(Xx!EcVzi$`A?bHt;P?UpUbo+Ux<)g8@40!dBeKW1qQ8mfo(%OO#9a564?Lynt|ZO2 zDt2fqT501y6FM)oC*dZ2uB_3gWM>gLeCv3H__u*0FtPx_YZ*#f$wRlaxt+UM34GV1 zU2;@UtXQ7u1Z}Bv?Ga;t=48W_=y_3(r;wYmPXHM%1hLeKZ!8`9kaW; zEA>5W@N$)pEgr37*UCs}S1enuh~C0so+Fv1s+zTQa9bR;90x0#YoIEtp`?3;-*DhN z8M9VJ;YofpeH)o9P_l|h=zXKQbp9N<4!H_(bDxu(jH>coek2k3j6Fpw;gXdMD_$tl zRw+_xb7$4eQ^lx}$4Lez`~Ua}DoAn99CNHy8CbD>77oPQ4qdnA;2(4smifKI;^mMf zy43~w{mXkpI4)8w(G;TN>67dftkzySH1@Ii3!|3$zZ!m;tiwBiK~a!YLo;5Tvjx*Q9 z5HwSL8Xabp$fw)gLi@G!x`C5MOIKGdk`&#gQDu%g;CxU@Z_`&YB$G{;Y;^-Q@x0?A zha>t~ifj!AC}bBeyr3M8I{)S(z8PgZMvJ{oOc`)~#!m?xZ5FeFu0Ez}G4j z7tR}_?+77q7yCtQZU`IYXxcd7E&P;jJtW)Q(|twRA-K3)0r{q4$gl!$hmb5+u}w{s zmB2@{FLZcAvPMfUu0dV1KrzCLK8>6#<&;0~RERUY7!dBTN<{39eYkZ1L>9g~*1aJ@ za*a!U4RRCGXx>rlHZb5>VkFO%AGh;@5F^V9&t?%zDW}(O)NJExU&!A?thtFukqqRAAdcCx^ z)P+i|bNdQu%;X=IU7e5$h9EzW=c0b|LD2iJ6rq`KPxQgNXa=6D_gX5)P)Q4t_WXKB z9=z8D>~;`CqrJ71c$F%kqLy*!yHqp=6}yg$oDuTILE#M%V#izOU-FgR{W-QAh|EFh z2(uuEpQNP2AeI814OXbxmk+qb&_;bVFHJnURkkUtq^( zTqR2qFoY?9n_bvm6D)@${C<*C-wf<)IItgX^i~Ogu%J56kyzbQ9_$3JyFN)FpSc%A)!hQx9Us`DRZn$U>PArxw*ur^8S^FXn;nSCc51qG}ZV>|F)a+N7@G znyYdg@+`g6)ef)6-u{Orz5Yx5oY`A`RK5Q<+vFA{I#8&PMI^_*d^yB{WbK38jGW-O z@0?ane-^m1T5>%V4BFZKp>%{@8u;F|s>!NlsWZ&9(Nou_XV64tGehLGm5A%~jG#(p zJE^T#lCEGaHH!&_vRT()20!bOyhdKhaf{yCS+$4lVmA@|L_NG%>;>U;6e;<6b&rl& z*0Pt%@ip1#Nly-}e%rzGZ@1*(D=gSzox<=WmFv2&uDjNmyHuwLf~3@f&|liY_GOXA zod*Z9pYcXMW-U{sXSc8NeSUfiY)+9b$tT5+bcd*;2Rge1Wu_~V1n(E;6g;x+_p= zsYp(Twx8H9wd?1=0iDLTWizRyD>k^=*5|u}T`VS1z$PtoA)?iRG`8 zXYo=^YL?(kzTy6Tyy6lw@JWeHO2$F(|$KgZP&6PNMZ${7Pot~*-$c06#b zS-ggxG_9{j&ZKb1gmCH4el(@F^LI(6`f2b4s0k-J#~Q%aC_Flqb_hNO8HEmt7P z_}9bn4)5hkrBQu1#hJURP#AR!V|Cs~ul3S~ysa?WUc>&2fgKT^EpmLd!?3bZ`xT2A zJgf}MjI6;>TaGr4TZL2{;p-JgWi;*-C%q3Iv&&q33TJw1G}VKeHQj1!62iL@COd2N zO70%x`u*I%J@&O58)?%NC3>Bl7#H6$G}n127UrzWf3J>c0qu-XDKiS}7UvwRMg&t+ zv*`i;8cnaL8+P>#83>g92}D*jZJ6wBKmsWln;M#Z7Nsh(I`ynsi~^Xln;R}ok28!OhkkiKvDB0bl#KA8249t_f^y16+|-$nF2Ssgil6A;h!kG~gQR5jnE=mnW#nrU|Lx-ap~F z;31y&tSqkXU@88tA}6wfkVLAgThL${a7^J4l4hZ@{d3P|;sWCIjq0R5FIt$r@l_Ty z@)*ot0OEejZn+xkbV&<{QHHQ?-lQn^_&4FH0EtC{h4f*aYSV{sFHR1a@@Zp=S2!f4 zS~$f$+@nH3%P@Xr%FuG+svR4{nK~r#)SyQw)*4i>!etRueOdA!O3cm( zTPV#;#C#yt%@12%_r#So*ODPI`^J|%(~-XOl|k%f`b*>xV(w8M3{EpFwuXlW z|B10D_%)T{K)kbb&;kkBgaGH@B{gi--2D0a{X$~fKG8Ma!1p|?P3OcrjyRk=uk4vX ziCo_bF)NL0TA8EMI9?^P4E*+3`hj`ARgiCN1NS5^8!#dMu{UsLhghFT=+PH}^aJJp^Cs zZOANkK>*g^aadSqOA5^4E+U2=H&J>))Jy`S5W-nk_kh+;B@bCE_GVeZLVMUP49!CC zIV4fVNgg5I*xzD=LvD}ob$ z&XAUPFOX7k$z8J2U(F8xKqy7x2c@csQ&3rE7-(|GSM|yasXsy`*Rh6Ms5%pe$`L? zZR^2w?M%>iFyiDt6vz3vmuYs1#W%D4JZqPQjkAvAu@p8x$^1loDwcOHMg@vknM9)F zd>&x#x<(c9+!NVK+p4)Q*ZmmDtb^Cs`%6QKTN28M2&39|1~$Wb`BUDv@Ff#Jizz25 z8Qw8p&fGg4jXa(JYNqLcyA-_ow5`MbRaxSHgzTgUWRFW2QwviddY#B7f%6@6YITRtIlNNw{K=YX9XI+^Jc$TTAegvtWwufk)^ zLz_Hb|A(S!;0`KiQAgduBf2UH#GmGO=|l3^GN^eF8iiD^+)OKTHv(?24sh2}NWJBP z4GqXE^a*kk@~wyMeQa(NjaR>lhc2C6Dc!{Dk&Ef#6N~9E`SR$AUpG@-nT8-|kf9M`cAnNPP?4Ac@_S}l$9x_lhQLch5 z;-X^fW;6ULJKHobOx{@MJ=-MHE3h8yh<+I3JDj)y7vNL2$#Q3r!anl=uiKan z5QEG^TuouiL@MD|klup#=k>R>{EDH}>&Ds}wMS0`isxLx#$y;sU{t&d3A%zGb!$be zU19Yg4VUa6Io_2kvzjCXW6z48A_+{QN?Ogll3WPm4C<%9dl^xDxX~THHA&b2`Pod5 z=vf*p@ZQY|d<;tw+iG)_j@>UEC!@h7zSNFuWX@Lbjn;rV!B@##D99N!##KS|!p|+r z0o9gXG%S0`b522%5LeGOur)m%822|Pm^Ckc?2Q36OP>eO7HXC!FYT4DezEEt!{0-* zx~p6R)l{Zd1i2MSeXI`biCMeW=*EGs;jh%myR7_&qM$935!IA63-s^x5_>0Cwa82` zDDl=El1_u~glGSCb7PDu)dv4zfGgdzhyJlK?vP&Rt?pf~Ok&90O)MRsy{>^JD)1#( zW%?%%M_1_f|61!gJ6l4?VB8swf$cut8G!o-KMf5 zCt>=iEFJLJhL3B$VVR@2qjdv%o`}{#xxHqJ?&`6f`u=H3X*%lEFV)F7&kV8Kn* zVjyL;3yw=bU+@zKZpk=%>IS`LFuTK^2)t^W3t%^YMw?y0kvGgy3IJn#)TOP}KJpQ6}dt%|BuA*{4v3<{mGKQ;=(`2YJUaFLP zeD(m}=*LxyUi5~z14jM*f=Wqg8F4yI=aS9qvv-p>dMvBD4TE^=S6eEr!BgpP6CCjaHNP_Y+Nd;9iRXFF*9{1v}o$rU| zp9gclX?R5DJgQ7^(aSP5Za}Xf8rOG`k&DXRnW^B52_5ywE0q zL80PH3MGtAzvoBrxlVC>-@yD@6=CkGOUmw8+~?P4{J=M|9x+=Rq7`h$kElP#2_Cr5 z@;nNZ(Xu6+D}@$j%#8b~irJ_P3g(`F{mWyhdVj61^`?;TAF)$W&-FFB6UB~yPnQT5 zS=P(^HK5L}`}4W51)-!^KQST!+JtV9j zBIyfqj$8kcbU8E5|5R_+@7|O6)fm?^8*kTUgddc$vF()k?(7mxa0rKqJC>7$FiuUgNQ3ObMV^`}b$5MF#{`L{QRGxXJDrL4J;>Szpzjmr_nduODGy$^R;D@Pg2$Xf}kes_v*;M&0`Gp zjwv*^A69xB^r3nr8jAk84f-e9$y`p&fDpWC3TL#RfUl;xGc^Emb4jWLGndagKUnpj zbH&Xq_P;cnyzUXUT(3F7yaxmBCjRDPrVD_ZRW&PcqN%CfXyN=SnFLD$XGz}(FhTE5 z2z717w7oa-(LR(b5JuH=L!0*w{qkyOZJ_t64yDm zebiNx9%?d#_)P{VPNMeKE_(#)0*k_0Cu?FcMb3W9chld$`=O2IXmLr9N<%gitb88H zUp?^dazxW8NApVw7JX7vOI_lHP#Tdqc9@rtT|zf{&{7E=ut4Av$y7B3q`M z3!i1_V8cTqaQriZ(E!>UhgWNFoOxK|454`?<|CMQ)z}i94Z@bZYk-M;&Cy;@CyC!I zoNLxcUVFP{qPANFI+PMKN*3BUV8e71as-*9fGPnMC90=kEMA)^YZfAQ)iNPq`GFDv zNNVl5863gB@-C#Tbr#B}sLiE;f@jL|G+bVLbDdf?>bcrne<`M`QP)>(kwNRu*-! z$WUg3ZD~*>TG&-6Vo%0c(@%&s=q+~e=+{~%JU^n zxk9(h;tnMygi;i0ze)D3m%`C*@CNj_%n!jA%NKxLyqsT#DU!1dOsjt??HCg$>0C(| zq=60gMW54>OibwaoYnK*mpp~fo{)rqvDo=tM8pvBO6HJ@+!d#K3nE^{cbg_;V2bRE z;g2hQ=}HZ`>>4akQrj1eA`SRv!089x#n_#gc}D3%*e?{@Y2&Q`(@oZSHCTseQQv5yDVyC?&(dK+;{ z13I;6a$NF9dOF;lDSaUag?8I>AA2KwxSO4>i!f}(W{b?75q08H{c8C+w&^6U9VGRV z3%Wt>VeWkUAHg)ar&NRzk{QH?z@-Ej>7bQ^EazcMLuYUr==t@(3>^6b$zM~EL)X8a zs+8%xf?|LUy6xhNI9nY|(?riq6*X)X=k*?QIKWEz<+A;@^MApX-x`hoLE`?UFy#p| zJ@kpPe*3}&FI288b&?*F#;O^bN5150$2?%*-J5o+f&@_=_6 zS_V2kB@M9DpD@szxG(2%{jq10pvLutqzI{-t*}B=+G(p>Fme{H9=cqx#_DZxBZjm6 zymWYme_fNRRu3RFoss-8#+wo&-D5c~Q%xej-CARj2-iFX4xlGVEn9X8+iTZ%x##Fp zYN^yzh@1>!5XNK!`XcmoTEMM@n zPf48lU5Q_Sc$fuKQ6b{Vv(;2!b*mmjoj`z)HmF$8)u({pjcdadLwPTj6yF1;m7&tL z?{r4|ef^LqKaFkLn=jM;MSFw0iHJx5PjO;b-dsw{P6E(NcSL1#kuRyVPz?sgQZ^pn zvvz2n+_v|;#cfTM2&|OhRW3TpXwh43xdl$Nm1&EZM3C~TEJoY|fcNY^o!H~oM|l2ft;v_A8^+*a|J|qlQ>P) zEh(~M-8Xl;rQ}x~y&b4s>N@5+bo%Zz%%7Atw{ty_F}$0TjQ;oMcRlBT=9pI^#fMI* zIl|e$QNwUuRV4Drp9EE2mz8k_+{C7cxy1Z~%DaQ#a=J?g*3 z6XndQw_H0b9D^7QqQA}Wco_0O8%(X&Tw3V39Hk*=jXv{oA*dRp+agP1aj!O}Z6!$U4?nX){@>&HB|ao8KHQ_TyVd@NV1qbKYGRoxaR+s04!Puwt53LO@1iTwe3XQ8M33lLntBzWG?h&KUV}@j ztUFIe{0Ze%?Ht$+VV0q*_Y#Tz!fIU68mB9buiT884U;_XAHn#RqTg-V#;f(%>K=;T zrMGjqZqUD~e%$m6T580aPeyt?hLdZzk8Jli=QGfxweD<*be+86ZQsyvhvp(=qc2)n z45V|iG%MNi06TkgxD1|O=vdaCT~(h}v-87=3yvq}+|N3-#+?~EIk8VauNCBfiYvkm za!@@b^hnc=@k%NCmX*Down{Etm@?qaQ)v$*bSbvwB zzMIw&2+L}~*uzgZ2~01wfTs#u7(Vxi{c-#RQJ0RLbWp3%zbxVLa|u(NNRyQ`LdAdJNhj1jy+t?i1I_w0OhY5Y$!fJ! z)-caaSu2uu8XRy3nTjD`bq+qJXmPKtF$t3e&AVNR#$}_Dwp|c&r)Ni)sc^?XOc@Xd zXUbBn3Hn7Q03%qopH<8Y6BO%Xh-cT;4JkGc|Lwj?5-POx>@?KgO8q=7Hcle3XP876 z+MA<6#P6q(qE3}8gLBA7jqf8fe%jhzfCQ%RUZoRGd$@|_*mb4(1BRWIJ@=!`; zb|kWw-{Vr3)+xgt{&v3FR}#Nlo_VZ58sB+@MAubS1(q3OdSo4GMry{ zi%aFmo;xBpAOOZ$YTyG=U?p+$vRXFQnd;dFj%TZdr{m^{d*N=e2*@RA*Y+rMacYZ# zoPAxH(kh_keaB=1LJh1FO^#t&u_`XilwL~IYS26ZR#&8{=96?p8|sYlkz`7*0W{#l_X=-FGeI=&5vu9qz`YE_#E@GanYk{a;39`h-{EAwrdE~Uty!6GcIAOjsI@2#DjGb z&W1?!KWHT>l5pwK-^&?aoiUZ2U?B!~kP<+cEhZa|5is@kZtji3M71q6JZ(4H{qv^E z{2S}|=APlZAS-thV-j`i_uJo~Mu<(Q!7ouj9w=7j)M{;+%RZw4+CY>oEvr!uEM^Sp|p6ZPYHfYjF_h&`1%o>q)ZM zj2fB(d`xAG`*^%<+nb*?hSaTLf_L-_meLVpz|NA&vGiJxmnZX1&?ET(v1*R@XV8K@KJ(#dR(GHFeh#AUyrpD_$YXNMc5Vlb zO0HAMz8UF@I=zUIi&R(v0kIM_Y{=sQqW^~?3KJ5M*LHeYs^gha&NDE$8g3QVMEf<| zzugDON7Fq%4|30fGsNNA`RG}%M6)ODzB6VJgYRVml-fRg(aPvaV6OY3lbpnsXm0A^ zo?JRGYE{@*hax`AGV#qgh0Pd-vxH{B82|-c$RgA>{p0H1bu+yR@$9;pifHtYk5U5t z3Rj@F5i8hFUNt+IZc@_hSwR_} zaZWimTEm%X$^@5RcqHOgA7g#9uz zxx0RI1s2uY`*D7ib$Xuqt`S}l=T95UT#T)Q4u{X0Q27=gnP{ zgJO^Uufg>0pPuX)&7(&cF18$5;#-|rucwq%sr~i z=@km*cR6&%t->PqIfE~~IJKN2To+QlQ8jS;=^-c^)5ywCF^G0bym$$r}&buWnum#qp@ zCQ%1;`e&DTXNv1G-@lA)oyVzSyOub28b;#Z z2iHLdj3AMOH#VSqwSsVirnwNmWXM}>5|q#lX>9a%q)(rCSkdu24t{S#xc)?RX^A8E z%O3!N2e^z>A*@UK95P8M&26@}SBgcZIe;JM8cHiq*ir3U%!`?mb{!WQY0c&xGU56m zdRk5biT(9v6}sEnY@gQL>t4>_+0&UB_J5;{1GGp+)=Wma{NE^%pS-ZELoBcHuS zW-lZOyEDTWA%!ge7wm*veTs68@i3;X`xI-zD;yX>^oz#xZzt0quJE&|-qY2nxZlu{ zL=^?K;`i>eZ*UogmLDsexeC`E=a<;@npS=!EK;a7Y>|2i!O4^8;pduqgBw~5 z+#*TuuOx|&B-I{8uTVi_ePG8LK^IP?dP1in>U?Nl@@a`||H0dN10|;^QQk=rS|#Fs zR8jrH`HqzW&-6G;oi2?qm(V_hImwK$X+(a=RUn|Fhr#lks3@HmIw`>y*RDgTVit!& z6WY(WQ!;^-b;-boU+WN^btygbvpIA);@5{(dF4-aD}yR$U8?jEEkf(v{C7$p6a*4< z`*vpxW}+X|oDF@r_&!LZ5|gzTs3|N<9w3jmXoB18!C+n)SKXubBt+_Y#(9x%uEgyw z6DhOXX<#;2m4l1@D-zBK4=ISi$Nuqz1>IB zOOc)-Uw=Yq?;k_{X*Fbi{sOz4;h^<)j9pkbV#%QSE^#nGsWtc?%G43%;QJ3&oTvYx zSpV6*KI)O1`88!{_CdX>8Edh@{Je|j(9(0C@9l0{Ns^=d{2e{ zheBRA^L_AF_r`nokj!r>6ACobemRRP=3US?NK@qYH^xiygmCfnpU-mtp|G#d{0N$vFgwbu{_tR}9TgPbsvz|X z-#hGQ{c-EAK>i<-a>m^+7h5KO+b`ZM@#6o_`Z5#R-!rP0pA8iJ`~1r$+~;}#{W_2!_d#uGvTo>C)Ek>-wxQ`TZBhJ-WOY2 zexE7$4@IhZRdl1te-HF=hrTJ9#>#cX@B-CXGH50|bf^)V#Ynz2Kl)VR=*E>&zIs?= z`@6WAy{JQyLorGD9EE)?JD)%wRvd#d3b2$$}E;dPfLd0@AC}A#|ij1d*b2Fw%SPiS#ZVq&Mm9+t0b* zd(ZQ}=e_5zGseB&7lMcTWl zv1;Rr#gQk9!nvMcC+E!bl2zoyTY_&>;ea8xQD#gaxp+c-jGu8i(qnfnDYw?|CDGUA zma#i&dVvk{mXRX`S~l9~4~BrSc$>c5pfzke3L0{{Psl@0m3sQz7sfhl!$ zTL#T_DBblReA~466w zP8&Kr%(#3yjB@5fy;@t>%vWRF3 z>K=t9`~5wkyuO2XyPIUl+C3IBU*EDQnl8~7CQmysSBat!V^8AE7w?wYMK%Zb$BMGZ zI|98-pP0RNJji%%(J2P6mf1cAN~f=e!mh($gk?PNN;wpqrmG6MB(a})4(Z3w{=MH4 ztrSxpn-XTAMtLZU2${jhr4DK^>S-t%)bD&%%%M*MAwR6aJ&qtEx-a?cK?iR@WYvSu zqxyZ(wC}AJT%XUmOLX% zI*PovyBtZA05qy^TOr}^S&}HvxE>b{$bL|?3oYb{7a45PvmyAn0z9MnG&w6lkFO7XtTNJr*YJFMyP+_7 zT8yVnV&kIXjol~>LCPX!Qd|GM*QXJ>{3g<MO3p(@&(7Gd3B9s#oSmC$GwDa*x*rP!K}6wRAO73T3Fh@r+l=r3$UgIbhBW?@ zmOA8Wu5H{lWd4z-$#(iNm*=28SJL8DAAbtRtuACKCze#!++WV7r)E^$GcHN@{W^J?WCCLDga?VkFIi_{TlLa|MP3nCf06cASBU3u|9%V zhMWnbY4H-kq4Je{{{1q;bq>6}?dt5+`9|Zye6?n>ceI!|zDEm__cPU?y@mX{_Ip(Oq=5%VeEB#tJSLsAjCX7&b@OFB&Dq{HqH z^ae#Cx>!DLTjm`vi^RGW#A~eO+R&6O_mg)fg4U(5}j|xOFG#F7A$VGmhgD;v#)#!d3Q> zmUCE1UYG2~0XuZvF+_OZX?J<=gP;5j=uGGa)F*Y-B+ zZu)unt+DCaB)6uI>}kg2?jIh-CLau7xk+iytc1ls${OF5iewn~uehYnqjp|u+S!S@ zF8OmZmlnJfzHo?G9R%_pAM5JQXwoZY{Y_v@$1L0@f=uVVD`%oK z5vu!}{nm28wfSD-uhHkf{q+WPycvLvx&e8gdjMwm+5Le3>!LiC=#sL_8>fWr6-!ru z>yEebxz-QoR^6dx@TNk^(y_J0wHb91y};m(i+0v_{wq?<*5>Ng;>CS2srbpsD^g%_ zKQ{gQx{k_<34&p7K#sblzaQOzkhFQTwU__}f6Vy}XyqW~o@26B&YSRTUxnn^a4(sF$tX7#}gw4XZQopG)smVdgc&4>cwaO74Kms zgA=r6A$u)LP5nm7@d4gpk>-WhT+|BHQ3*!WBjIVyJ9qLB4zM%w351WC(RGsYeHJ6j+pp`zj-UTbBP=p8xUs zx9+3MvGHB8F=|(VQg20rwP*;|Wt;p&=U%%$3Y+R`h^^?4XT0Ln-Oan$im`OQ&^swV zu1U&Xj9QP~mC-ZU4_Xy%WRnc{jTZHvjPs|Ibg`J;Uzck2>&D3ayY{51!+U)ge#63_ zdjtavFSvAR5xuX}lIg3Z3K|=)b_J!@*(Xa0`0MF@3xTn= zm%Uo|E0+?PFio-J^Y+0{+;-E&n@njUMbr(f?yHZ~HqQKZN z*fy5OEi_jmSym;P#rpbe+2;#L4XQFaNo^;;MIKA?Jxnx{!`JMByGA*e0wq)skJ3T0N(G|5co^ZGg zhuwgFA4u%&e#y%l|46N|sfsefS{A_(uUuqQb-T%5eKfQ5tjiNmOan=72?;xB_G9L; z6SblFOOh-acIuUx>2gcF3ehzpvSoK)McTBS>D6ZE_hK~W2t=uNowjOE(%){57!uVy zpV|aRF?WO@8T~9(*_494I(^xxSagx7aAu6_+!Qt-t@pt!{YNyNt73uueeEyL2ynhW z{Cwz~NgPkbwA4((3^1$+Z!yi|^n_Y23eHK^dtXYJZ#;7!y;sSa2ve)?W%%%!*N*y? z^}~C8P!rM>a@3bguYF>={rDyNlB@k`@r~yd0#_kl+r1*BmuQoP2rbpWl`QnMss)L| z_`5RoImqbg7k6hQ>pfOtlwe){k=}(w``CO(dx^Wrm4Y@X1SV&656Rz=JDSD-l!lW`)?;BY^oYo2z0 zetZQh2l#Yl{gB~u5&g6}{oMDm$jPS9Awa#jRRseMpgqA~gYRpl&lNF6>950YP1unt znEBd^X^HEQ@bO)*5!1B|LsZ!T%iE_{Yx{ENyJJo7|FrJVdR)y8&W--cxHuF*edkLW z^t^0yW>HVD&MD z_Tn=>cL3j(zl)lRMk%YHl#T1?K7IOBw^i%uo>OrY!ib_@h#Py0BXFC@KJAx95_>vo z{(F0tc57sFKL!#=z_L#a-J*qyM=jpXw}yjS?Y?<2w9iB1o~$ur{Pa2n!%WUFenpn_ zjo0G>r7wo@HNUE8aO&fPsIcTw3EY5^a01ojaV(Eoc`TtD{MDK(r&Z%jZ{E)&oTkburD{`56JL3%4UgnB3bSj75zC%J8 zU6KZS1%6gMRJemf#goMOu)q5jivamUK~8NZ%SsR^jP4M*#sCq|RXuS&rmA#Ro$s(x z5zuy;=*8j1v5nzxgd`xlmAfx*HT%LkA#+s~DA#YsxHCVd<#2Do-^+irZq>V2vji5F z)=f}p#=c67p~5r!&SXi?m=d^_uKDBVEaSOwo2mXn^*bMcDxBEyU;;v zUPHr1`1!+R_U6WYa>HFh!OwdOu{_>dgO#r`(WBw0+d@uIES~c!N*OWaG7*? zV~yIvde3-voY9pq=+8a*O{xTDLEO5h=y+~cGXbW9cH&m?Bo>f~I)76kZZiUT0O_0C zq?1)z#FC8lJ?3E+*_PqmfilJghH$?mY>R$w`>CCYR@@Q{6pmY>ALk6p2zE{n7lCGd z-ZSVddS>)p0BT%3XLokzLdl6K;4Qw!3`0||I(Dj;f76lwN$f}s4@uWpg+BOm%53tF z#$UMZCq!-5{9oYiTW^h5ZaR;?0d>;9aGLcmxXQTN8-MmE zk!_{tEe#O3GQCo~0WFbnRXH`i^2hq0+J8M)NjP9}-n}aEmi2RVz5!i-9Ja5vD@_U@ zZY;EmZ9RKcDvs!4>s{EazGEHqmHMSy;u+&GA&gB=r9D+BhI4#%v7d9OBMz(|cs~yhC(yH75eKN?T#kZ+ zF_4(o1yYy&qf#3?bf=O*D9f!M-xUYlCpgpTshCx1SbE+u1_|8TgV3ccTXYK1o_A!L z`1$Uq1o;YK_nY+X>(w?dk26k#EYuJvcfJ{-R*dQ&{`+AbGNW#egw-zPka96G(t-NZ z@!C3?wtlMg+9^w#q|;o&Rttn~V78~-=#wXWtBIcmmi--%-4XEFlda7VE2eMgdoCZ; zwaWrn{dv5YXNC(1>n=4BNDf!bUlG8>X_{Tsc|)W9tG=N+gQ6!QA+pQ^Zo~NTu9pdUvAp?pBfxX@g%5%#hC72YlfG>U5DeT3+Pu#cay8A)bYv zPt8CzRI+U>pE1fAh*=qAwF~uagTxBJixs%>F5&4e==+sBg`y6^*Uh8(ItI(EME19a z2|~l(hlPN}%Ls6(UPi;1G?mNW5zy0;N!G71aF2g8+V=6V)mvGYYf7l0A~OjoOo_Voq{H{JfBKg;;} zWs)(C=b%0EsgM_1E7&{pnO-czM^3rI&~ZJ|S0#Z?SNfWajyyhF5G4-2*2TUUgpagb z7Gz&3mPK4rn;9LuNt~hVMQdQUYA6bkm*>O3%E1#mMwhk$7P(4^`ak5P@{v}+EB~_V zQ#-?Rm1x)666eBiO$AMQ0lp%hyyFjVR&3nwu7exYsp#*&69>FR~X-pBi*En%apIKOUN=FJDmslS*A| zeWWG0zMk36RJaFY9HKWP$(^p1 z5p+Z%KG3N0~bmRTK)Wq|Xbmvd@NBtX+#jdFMeE%({X+Z|D z%Kpuf>{@7Z>Xh@6Lt~-A4&yzq@FDYim5Xifzq6Fbrv;Kg$*O?pGQtBhrJc9Mqs`d5ni)^c!L@EyEb@p|H0o$E!Vum*CaC)q`v>@MzI z%yq=3#VAG7v}wlG!-q#Jc1)uV*SjI_W>b+?_sb~oc;H~l_!s7cmL9Q)2#o%dZH{eY zHHpG%lb4JILG3}Gz+h4#2;Ja>O5HYSI14mIucN)?cN}ubi z9YjRQwLM)$lli~&?yy?XW=X(n4oDz*4TZ{ex+0IM9Zrs1Wox)jX>zKwvk_B46zvVq z_Qw{yvuw9gjE1V5k6u&+PGl2+naSzL^hF~ciDsk6$~}H0Gc0mH@S5g& zQMi0nK0y6aqdZA|2DOEKMC@hwmklzTB5M51;pCi(#k65fD|)r_Tyend^^h6p?nPa8Q(=R|$*MWbhK?~nC&%!FTJ-u2%ZGqI>2=)m3g)@$nx;c9 z+AVR9Gj)XACWF@X-A^|4Pp$x$a<_y>cMegwv=MZkkSkRSz5(5Up1DS2+?7TNj@VQK z-U8|T*BNV%P_YuYjjv$XlFdxdL1QJL&dV^}(LJ(84oy=f1w5ykwBE5`=pX2FepZXq zl53BI$Zo{8r;n%4Wj*`|y?v0xG+MOiyBPnS>yewccF|BTKcO}_8{G1~+4plj@S}_p z`>3d?D}T2S!yY=+_95ybLnX^9tesRlML~_Mjw`h3Js(qN2$?8k34`9fra5ldT1r<^ z=XDKibxsuhYTcx*{ww?OAI>F3>Ez*90}hF>U?L1t@a@?gL2DO(o!L37(0R>IJH?y+T1|S3 z#aT)O(t=uo?FM?B`Js{UqqE-H*S%Eq+Anibvt*W9UMD^B)|Uyn}LSl#~JIR?pSk)1tkc4kM>m7zcq z1>8+~xC~1f`@E~P0K_r@6>?DfvTRF%E<)8{J1I(fDopDW~Dp8gn0qKpuTB96$Hrv+0)KmOi^3baBp z13|D8jD-I7_LQZr#(={6*GZ)vB79OHe8I4T=Tx?-+jF|g7gECU>?iC#xsgfXr?L`U!#tKfrIaL6YkHjrM&aRiA|!lWDsq-^K-YWF>x(*ROB>hKPqQq zE+a(TUpNOjF>Nc${&0KzQ5Q{=iiL_Hs%n|am_f@o8Y(#=Ftq+AMtx>98*MRKd5ao; zoa3b3q{Cy)w?K|t9d!Zs8&?-HNinDpchHvOQurRC3<>0qWtC+i+K1D$gb>Psef4fY zgBU;42N_rU88fTsH(ZKz0d=PKHq(hgg)i*zSAvUNiI{YlN{Cv)x8DoCzhpe{Z1(ZK zfJ>Zh>s-{8SJb7c#p@l2zU?@ZI?W&KKO`rE_x>}K6+#q9H#+bw;n!tPj?^t8*Mv}KP!6kpW&LwaMi3=|QWE{7NisVKK+iV95 z4!da9Rc+ngA4eI?3EWyInpbk_JaXI}bH{acPge|1bbixm1(kTx2|WyucrbB(t=#e6 z;0-O(fq=+OOc)ijCEZmyTL(d#`$Lx!J|H@NcKtsFZu!(cV=oJCKpUbrAh4H4o!fcg zvCm1HvDA=yO8ld+fNj^I`BeoZe6vrDj|^Y>Q}-5o0a}hvm&|xq>jt!H zoe$KQa^7wEL%W!6CxxvDxybUkb~nY0+1!8*Aun%0h1DMO=cEXY3Wl|*)~lZYzeS9H zElq;pTHn{;T-`L(#m?ky_|>{i?9*rUHpSknZ^l_m)c9ziXA zwo>S8L~NHO0gi>NQDSP66SF8THxnm*Sa~&BIKDR;xkS_HR|K!$T*Op1+xQXXyVTT& zJne`248AHB&l)$bl5mZzurYJlWaF|Hpf;zrrgq^lhr7`VYi9J=@v8jQ_f>p)uE@0y zOs#7|xQd%>%Qo2z#zCd^oOoDU!~N3UqMGoi^)jd#Kx!n6GFmGTBtb_g&%7r#s#5H< zZi()~`@%Jt`w=JP=?5z`O{>(ir)T1?p=71l5zjhH2H>{O9UYcS{GPD!BU5W&cQuU@ zud7V`_46IH?+{)7eh<|TDvG*=xrMXDytgC~ggkFB-tR=@na`fKA?DEO)%~5fH>j-& zUHDC_rX`|}F8mwiN#A`8V0%VZ>h`Mk*nY{?LvYU$BhC08+kU;1JW_V(*@-O1Ga8t{ zbc)qg!QZZPBz={*5(#;)ms=J4exx$kI8xc?YmF?qL_PJB;8^&!`{c2qX~9!ROGnx$ z!ijqkBz~N2>jWWsG(@c=VfdDK8O-fE@{DGBq(VF%RD!YND@WtAY$Der%^@!r2GzbV zsuJX=zhwgrn(b2gvvPRg15iMd)Ad|wldmOob-?B&Q%3cuo>p{m1fh#aw85H)`~#rz z5Q0X0==*0+Y42N_99K{z}= zBeZ1q30O#7cnGQ-%$SeSnWlp7N8{jgxqZ2pHVruWi$7~$s7#gLO@E#qT}b}2^5vbu z?pv+{Z24X>V2fqKwh#TECP$YazLD9hQZhfn&uh!b8L(c6R5p(bFppHpdc;c@LEec= zco5O;i?M3rc0@N!`tnCh#DBfRo*e#56C`B%!I6n3Qf#fs9A4hK#pBWCbb54(*gjs- za0CCmQ)TeEx;%?4_UmJly{VL+8xe{xEL>0zz%r>EcqgKldaBLu<|OK6u>racF6cCO zle5?YF2h$}1r*KURPN4dS%EESpgn%V3xY8U_r0j22BSWmoy{rgkmq+W{b^`nVlb!=EoC=DtW3=|dYdSm|yqUfv}`|!S@ZG9TT08=;=o%pVT>d9!t zN6W7GC~TQAk$hLd;Cb2df&PCN^MAuB|Kl!ZwfiWstiFp;gFY__=`&B|xQv~MVOkqP z#&W7m=s{L@c`OHNiN48x>IfdEIO{wd9$*#8bc8jFYQK+qH0X|x$aG-dv#j*T?#Kuz$+K=dsZt~{-7OnL>f^AGLgI-R(U~ckCSK1sN(yal z{Z*`@__R$+7fHSK%>4Z4zA3_|0VqFcuPd9qer!f+sAj6(q<5k045?wLWnP#pt(bJL z6Eph7v#5)jQ`FLdN6hC_$!5+bDZg!lME)Uk@`nib$#3J2_nWw1ag=i=W4X#(m1;a@ zXJ;p`Mkm_QRw5oIi-lCejcq^UP}z8fv~U09a6V_WYy{~u+()i8IRK&6ag1A4*tfSS z)^g!U&uqN~&ZNiq%AG>8Da;3wExmK>f>h3Oab{NTN0uGP3(pnDn(n!bI&b}1pIC=A z=wSsr-88JrVQmoztofS`U`wahfNI;VPLV)eXBxASNwq4G(ELz%M#&5AX*w9Kk@tj| z2cOq5$COt%(iBcV26s{@t{(m-V#VAxTxxndBtf#o?rl9cP8~ICf`fSZ&TM&SE9-1X zof8J*vj)Rf0hjXUGbP@jC_xIg!q+AFhSb%Za>G0sw$@tN_-%nz);L;=@PKVdRu=269hpc%OR>RWtN{+x`J=f6ueAB!2ydLE>XVE)YZST z_R=t*^bu`8rOn*LL6)^DPCUGVXoN?=8e~c?ya0;A$j!B7oE>@YAG#u?d2|eO0u(}H zAH}ydmMvB@wax&_uvP%@T*~>=exNn#`kbX-g z$SiU$wa~|dDda{fZ8$<4T03amVtA&XY({jbykvfEr|>%ZX#znUtxD=%s@^^l&O{}t zgFr5gVzWQ#@A7Lt-sz5N#1^i;w>%ijQKOZQC`uUmtf%dQ(eoEdgPHe)g|jBBz{u+? zX|^+UD|$E4+Q*`7(R>lnit~XB96G7ibH3CqOIOD$EcnGuUo+FRI@sL^}Zv>%|*7kzKOGhq$bi2b%ZCzIVQT zBa0c-1G!tkskdXaW^1xNJSNZ5-FLla5M5#qe~$kv5_OoropA$_ZMQ$E-{3zy;>GBB zQPk4;AD(7id2E`tc$<5Wie2yg-rd-J=69B=X+WUNFq%(w)iH1bO7C7VJ^1-l`np)T zYKQO5&*w9n7GMgoH12K;xM0?x%YqaK{h*cWU*r6c*&L8_TLi

G07rH|z9|B@)Yr~3rBmYTPv%7QDxpFMN~5q_^?Ce+}EQVH+`OY9@hFDy~9 z)<-qBk-<8z`(>yAY>>YYFb1L90KZQZfCya&N@8h=$9y#gQw|>nMCbxlO3vyi**nL4 zitek5Y;?PO6pPDY%q&QEW_}IUxqE1LMH(qK+uoHih+3Nx9=@E~NYBXLZdJY~^m{uZ^wz9|LmvmugdTdh%H5=V6IMILs_9@Apw_U@F|0$sGp!royU# z@fF)01|7m_W{!!wPspE^8iZIPhUizmDe7pDs`mU&x+hM8AJ$Hh!~>9(J=VmWs3=!} z#HXa~+C_dA^)ppzMoS5uJvxF4L`%gJvJNIfc1kFHfWkOe?b1|K`tN&KFhZaV@?|K-2M#_1k_Mcxe~{^NLbYnoX}Ru0M>wH8b4wrUg6Yu$ z`tnJjl)w{mX%n%f%Xr_CiPaDGG3Ukx2f}x^b{0KiI9|N_II#s8OEw5d*47SnBId6Y z3=E^IGn3e#9`8FCr!PnvEiv>FpOiM&zCS>OU*P^cjRg^eH9L(2i7T4HsPLprufyJ? zY+ygeww1(v0t@NWekGedati-AXngEV?W(e3HKq z0JeMiHGg`M{Ywl^D7R3$vw|kw~$vF25Ldr(GMSG)~cReAt zN+hU+MU+Y>6G*nxg*<8;1qXs9N9EmNVty4Bjlq+r7AVwEXMKtgrd3~#`E85giaL>3 zPe}2BKIB$2WCL4;q{&RjsGr~((7SycaS7*QlR<`>ag% zz@n9cNcecHj@RQ;nju4+j*I*27pdz%#=hqg4Omi`eOg4*vN8!LEyustv_Yoj6muR8 zqIWLPVpZTpQ6eF4D$WCEgIL~o<&0eqey61_a?$(}L@9K;KY=eNF%)t**3nJ-X#y@P zdkT{=$$ta%E!P4?@p?7)gIU55=@en)d4pk4cm$t z5#3&?khxbCN(;UP;~9W&z2bcI>xkjn+Aj0RgY=R?X22(4)cB>pr?Z<+O#9eV9-YrC zVFk*_;b509Di)%=Tk!-QkgiShZc_s|$Jokl#_VX|;mY&OOr z_jfDHj;#gn7e;1!xcl)Az#^ll2<1>(-xh@Pew`nom=3pyuwm$a+VV$X0kQK zP4T2t!Wg{-k+?D`9Y6C8;&X9!6?;re#cAO0;~}E*Mc8W_=;KNT!?GnaWbr)t{(&Ds z9G*67tWzH?Tz!(z++mhBc}8yt(O}g|p7}buwIh+S3%}nqbWhptnW@^kkrSz{Qk|?|@;lp}%P!c*Y;uPg(mamP% z?W27jc(A>~%r^w#a1rug1}My0yKIRKDNS&W_;R+wu~o0Na+V!9ljH@!`YR9CPXms0 zs|iz$^c@zPpIUmU##(8du~pG5Xyq7ClDn{VEV#$`K#DAGJAU4jTfF^I;?OF@qfvY! z?)GQPl0p1g(J2_hmLzbdZVBFwrS_k|__*vJRTaSl6uL^rkVq3Xyy%5*U+%@>Se7|k z1OYrvj93&6pq~j9wq3E&e$A5n&S>M+)ASaece90w<<>_t!cKHkICd5lc1a&tr)WbY zYfxXT5lN4d3|*WirSd#evfPr>yMA9YjoBT(h`ckpn@;VT*ouqy1i#tI4Zd+ff-+*L zxaj>OMg4$?ZIHl>iB-|lL{;9|P!n`J@Ju!aQWZ{v^)=Jqo@2rmew@Yp{&IX9 z2R*nbJ5$Rg%H@LVtMS!bEHX(U6<6GoT+u`p7epK0@99_iyv_w#8~^ses_3JR;i&2Z zlPD2{jJq|fBy)U(e(R2f_8rh2w#RRmm*u)jD*;*-?Ya@;x;=d!cI2n8>hPiMU1N*q zxp-@|6~BSXl>11C?)Mg67#sTpu}fgoR214_Q+wQqLR?YEQ7z{?Vod&WgV6 zPQ{S`V|F11kzB+btF}%jI$?SvtCwOlUNI!M+3|0bjxo&LRSQrNEb(}SdEiEUq`OJB z8=BjclR7R|u$FAPe(UPg`C`+a>-71{zTX`eLHXB(BNsgYfoLr=QuFKoW)S^@N%Vie z{%3k0t8a|BuZ!sx&P7%|b9nc^qN%SV{tKHhmx0n$J;3`;>o}4@uwkF;kKD3t-En`= zUe;kE)m*H~_5B@17rK9!|JRurYJ%{dH3D_4(|rnFIRoid+VR9I9Wl&EUFZ2^TDDeH7$V*{9Xz)!q$Cz8VCE$xWS~+1%o0V zuzVlig(uV>K(BXiIT8|gW>8}2v4YPr32*=%)7@&`dL%%r-&^s#17FJYhzbWYiq(%) zI`&Lf1t6+kwT$^3$>&{R6`MXHS43UrYddO1>rK~nD!JM0WCXg@h?a?&`B`|2`bnS| z1oDK`Pyfgz(`(clhSSx;M~4?EZJzf#;$2ikgs=mKm9>9y>naA*zjbw#yRR2~8d4BW zsI10q-X1a$GTB!?IqmKq!2K5&bh|L)EBl7M?G*GoV8_?x3yP92+n9zbJHJzwwN|B4 zh2VChku=C4iMH6tE+<*o@U8|CFEMmn@o}%oI)!(9uBOE+#F}tUk+UKTMvRFNl*{y) z(~BrWVENWAz(+d1aE;yn8c}tsmAk(2(c9fmMbG7^z{*aC=KTD0-2#3%Xehl+AH8_wYBE#DKLF2F-WbD> zHCaiWv-KRJb{zqyyFGW}Ntk*(IeH10x}3vdR1*FrN`1yKs8#@l9scln0YlDR`chh3WkU4k ziNcl#MIhz#R?-I>-45)Cnu8#G%!#k>sHai1qePxy%9q~BHb=ILz3N^%8y&l1>bFE< zw4s*={meVe>SBq>Tfad2 zi$%{YDp&d|fKsaD%KnsJoo}HlV0M=7%6NUZ2}1PGm}TL$eyob9;&F5@lGjy7oAq<( z0Eh*Hku|}8a^MVFgLb;k=pR{*V!FDdVNlWbd8BgxAH^@^AZiw7-?v+>%se~tyA%EW zJG&Eo@(V45_OtZz>da5WsFvlon0dyQW@qQDt>3uK9_z0B3*Na!kndahjHi2)hU}>0Y*_L%;;$dK4y#p-Ai<43M$v5a;A->s);<6{+HE zDU2w0WJ#)1?C)&F_HSXZXfZK#!Je3O`Yui9V zy2H!}3?$Zm#WG&((J(qx$uQ-)?Y4eI51wx&mz-+x@76ZbA=v{JyR`6fCozRY5$u!))zixwz)m5(i@kwCr5S$)^gymI)ekHvMeYFhb$Nh#Q*4v%r&c46~8}i&I!b@E_fPn zn4h+xh(KxOtI$0&DA@I#XM-0NV!F!dSEGJ==gDX>OGqd*Z6KoTk3!liBB%4K@}Fgo zL{5K_%wTEGrD#I&Z^737oHF3UO$@BheRdl!#fGPg#=cpV=|_$BF z1-&ScS;+Ppeii{JsXBEBG2Ph!lq4=y-W!74XG(*KAi`NFYYp?66*me|hu7-Q0C|2$47)IIp4$2S4Y6ZK^dAx|%w zkA!%cMVzxI6i(M)_q%BSlf2;*cxs z(@!WMm!wK#5ZOOMLDK-DVbR=xFc62 zycTGfqT+HRmD`W|Uw=BIZP%-W!?)(jfj~0fQ`rHM+Gh&F+FdLWD*c1q>`M&~)o1$o zc4mvNuIjMM1{Ynlu0ux@!<@0NG2hOg3!1;QwOrKhOuCbe1Wqn zfb3R+`&&?WP)ydDdRRNASDb8Zzf$B;ytRv_2nSMxX4B@X(B+x_qg#E2JwFH!?)6(b zAy)3F9pq3hK3Ap5U4~NOli*o)A{NM9w=eX&29`xXebOo4wwm0?gHEw9zkuwG#of`V zWLM|VMzWTjwykwB_snB%Bj=67_KnN8m%z)U3PW(M*IloViqLpp02d;pQd5|58+Ee1 zz{OAj@JA}T<>c~?lREX$5##4-+GY?+2dqK2*0(Wc$pTrNRBn^xPpOKEj#DsFr4zl` zOzU_mZ*l7qg}bv5RQn32ekfNKH>6%se4bS+X|%On2>ND9n)%ln-)4p%C{2%KnvC>K z1gvJc0!E`ct@_+w`!3-K3zvSj`h97=@7jo1Fcl&b^jE)W38Rg1CuH;kX}vE=xGZw1 zht=9kxP*`}K@q-I91pMp@>s0O*Rs;b1MpQ-6L5;3rsryGuyF~f5ve48=)5r-I<04q)l1kB??h%#%j3$b9uSey z-+9Q=viyumuqTGxMJtdBpK*=(%xK{}vICQZvK^wq(61X+a%Po*of3%7t~3i zy!eKKLT~`mLF@ZvT2KrkK?BI*k%}B!*;Led;ZfL0oA%t0y8Wk7*AQcct5@f37YqN$ zL0U;Umu~W>l{}y7^{0FwbS~&WzY$PyBzf=`4QXvL@&Awv#(&CHT66ongRapV&?_Ks2%mB};=3vDYmHU)p@{pkQefnvVpo+gQT^vDOGr1X zww8(D+8EQRxa^r1mZjdcLXG4JZea#E@9snm8XnM2i4*k>eqv9GJl2psF}|{gCuEh)_;A5`_$pm;*ut%pM1IjXS$n zTmUv&af&*cdQH~Pe&#M(Wo?N@!PzTdJZ~Vdu0opbAzEehG<~UwU#YHm3`{;=Nr2L& z^IoS$xe_DMJJGn{w2tX>{g>=!>eBLfvqiF+tk@Me9RB9?>BL0I#GKZx%S5a9m!Boo z6#)KwObLd0FC2#NLwG_0fMn~^7Ds&tLDPc@A(V;*{H@W{%aPAnv5U5rAX#8D<~_S5XAfiH9J9v*L4 zisFHpN{_~J$35P{3=mI$TC(;_n@-7enoak|BK*E)cqgh$sC0f4AM}id9^%{P5m&vT z2&IW9vDijhR)?UDyQ;8-F|aZ;+Q4K-|Bi&Sz8Nvd}lR`ZCg#6 z0z~{shg0?&BfS_2&hwj;{eZ8l|_4ZQ>6lw!#MUZZXxHctr>B=KfjcZRU&8lbArj=ViU<`5H>#Vi4vZ4p>YuK2DoD_0 zbLV;uBTBdSB8i@?M=tMN_$~uNe)N(>q5*O4TwPR_YsSuDrWX%OWq(} z&fD&L98cx{xI91gD>9eVoi75&v+m6ZAd+-YBN;F~eXXoaXe#B!31Vek;-sacAY%mi zLc2rNLLu?TN6Y$0Ym)URK&F}g>1vauimko7;&!oENXCTc6SmF~n37-B#4nBjL}t_6 zw!X5fS1Qxvy%qirBF6!8LzK+%u8)pH9d+dqTU-xWZyN4q8xZnSKPbVd87Wc#0oq_S zGN{Zpat*uti{@6qQ?291&Ie34phM)5H1prkyLyGP=k4v)# zgpqBm-@94nBf90=CI%+jcK`vJ%~%qR|7+Ic1Hdzd8u)9XO{ZGFw;`Jqk$$K23&YJX zx5}p_F1%PHdk6sTv->sxfcLGs%2n6l{~EG{LDsZ#Avn!Q3H$io{rOG=GDLa&OnR-- zbq4^qW7rJGaRw|^GH%F#O=1FWwN(SVoHfnd| zREFZV76O5I-#>_sIu>(aAE^Ab+Q*{G+xPf2leL0q5;TeL^xliP*#VVI>Z)16J`L{G z^LmK}FW?`+mVn$Ct*@~mg@gGfDBNG6KLlGI1^hu9- z1JbH%x&i&Q6TWTaHm~@XfZLtgf7x97`2W1~zl8c7RU}<@pjE%jVzXKYvlkzh=n2bMwo)BQjAey9iFBC5RA(2G$+h@AfQw(lg zxK&_VKSN@7JxzDV91RA*dp5u6tWYq!+9X2Y{n}vX!5S|YFQvCF<(WT~i>=|5^{_e0aa+q#>V<6oulC+LDy}z6 z8!ZSB2<}$6g-`^S3hwUi4#6$K2?W=|-GT-U6i#q=cXtUc0fOeM-}KD%uY0=tes`^J z-8*;P`J)z`vre6J>Xp6syWeL&&)7D|c$e0(CV{sZx6=W9AU`LhVa`R1w_6iFBF#-c z0#N1h<_}=+H3@Z(>9l&`W#Z2si(^23WFyCktIvIa+nZc~C@ z#>|D({tcCVGg@JRcPrV_)xekFj?eLuz-_@b=fi#WEkAtD95l{7DVCgJ%?itRQ}sgR z?4ONVo$}xAhqPL{$2RZ~g27&motaT-Y4-O*l9tyYniW6`;=-Wamvz=1A$2y#rc;BU zu@UsD(=NU%VmDO2GPnhs3%#$hMc%rL<}j)T$dlAUFZqctA=c%Vd?8@OeyX z7})_kUy49g$-=B?+f;ohmlk0}CktSJx7!KCWw*JNlL6oRpQv4kW7xy zC04D%Ax=@AiVUL5HAG$&Wa&cR7{SlC6!a zCTp62dW%UhNw6rx)VFuFFS~L7+s~eT3T@Mu>d$t?x#l!1)E&)MFzmp^72o!+yB*i5 z#zM&ZE^T?bsNOJIcvE=76Du5hm_uwi&QtjeheZ@i)Yd~gM*DVcyXN@#H(&}@+{C2* z^}l4^9};4168uG|F48T1C^3D^+CEwN+&4Af&*o|Fb;wN6$*&$X4q(vsYmKDJY)WV9 zbU-tUI;xBxzdF7wTRK}$zbTyca+fv(?QzlTCNof|;->4IjIf}2`!=vICn9DnW0O{e)g&}?Fxek`#8mFb zZl&$>H=)-{uR%Z-9uQ>_g^a*u!&%L+VCai%ovhcpLhjD87m8NTLW{#sG7t{&k2mI4I+2)kYID?R6b->Xk5l%&!e9>{0~b z(9EFf5#=u5DKt`ZJrd|7wG+sAYol4r%m(P(#ouCG z*#`8nTRO)WMUt;q&JW8izTzF4(jQo^kSrJ7XO2{pLSPH4-;tsXq6CdDot~|o78DbbA=K0JSR&`b$BVkVS(;#5!Qx@dV~dPhQSv;UI(6$HfLV{jQaSBcbHG3qj;@s* z6B<@c%%zxr0xXI+iSlWAEWg0@u@1nx{LW|%r z5Xsteh}se0#ER{HvMl&b&x+sjhifm05SKSxZQEhmsQX8z^Oi{)X)VFAjLBXDo&93w z1~G9E-3c*qQ|Qw1nIJD&zRNo)+3^cq^1arSdLHv~gK7~h@yRasnnB^;+voo{{_j*e2+QnJ|G)Wh;k~#R^s9P#8geQ1SMs5**HQl^o{*0Hl*n{D z?Rz7|*63UAz3`wvq;etgv;X!>IkQLS73n%o&Of5=q?*KxD>_?d$LtCnlh^ws!0=0{ ziFm~Nm&HC|#q5E{i@lhV#4-r)?wf*tMq=_W&*$hAC5lLrdj`kL&_zu{I88u#5g;&e z2(0$eA5isz7^@GoL50CiWkuBIIs|hQ#21}|c9w-YAw}Z(Y;V$>WRO?MMgT4J=o!O7 z67}`_RROXs@eKG>=dWpd;C=%L1kHNMnGa5}H_e6*%Ut;zFr=Nez2Ja%cC{DCiTSE1 zbRldZNUYwP#|r4WPv*j^Em!j)2J_J}k${Y5LWdxeoIMs^8#aJh}fRMXLEy{!OffM4j* zyEo6)&s5_Yq-$3cCAVr4dsT&9Bjk}y>3(+E;Q7J1AKbs4!(ugmrF83lPtum%YqYz+ z(*6VIU>o8Z(@#ELxtDW#_LEB>qJ4P0$#05ovLCol0TIYC8WmbyKd|w}_e;rffpNFU zZNlmx5NXXB2qai<4N9J zZ@kI~Vf&)3(=`i+?VRoq!%8a+m4BSY#LtK%ZblD%$V@AOifM|(*AY1^C#oM? zAFHe3a-Vj&e}R=ujOg6jdK=)M1R<%{Rd^HV^k}q$#F}=(B9rH1wDz;_w0QEXuS{HL$twne%;9m4n3lddD3FyV)Ub{lO5s@2TT-&|S|aa3q&xe8 zg#t^5=50ieXR1e~McanD3d)PjH5iInlN`2bI@oX0sRl7SD-P!xvOZ(AUUvi+N2qQ;2p%D85B1@m^-&%V$(gDR@$3^kX!ROQBw8_0w0v0?TiZ#~Pnu9Afu}NR*?Ee; zkrM$Y@?YH-8y#TY({lC!R&&%@TYYK^aq0q~P5M`N z(4eu3z*+c%VGHnmH~;`^n;I(!W`mHOGb6z;sMS9I!yL8tO2LdG3SO?Zq*!1)h;pV> zW}pKXE>M~uz}XT8^*8D0j0%HsHmp$hx!xVah=(xatF9WGSbfZSIKrCQa54KsPC+}M zv-**pk+bG%Z+5w)@g2Lz^5eHgWM@M?$ERIq7Zo*pRS7kY%`j-2=e*0KYY6)g=Wz@o zo=Fo3nr?{-2#v)vIZ8M z$}o5=By4~Qfhc7pF>(MU%(hbQ*E@l%U^{!6e?)>-^W!l>z5%4SjU~63_r}>H?R(p& z-9HWf(t9z+p;!Ol{LU7kh0BTG6w0Di{Tr@8^f% zGrb}O({#3m?!}F7JENewI&rrmxb?d20DVN(*tCWP*%A4(#gWyUll;G~%M(uuTIEwl z*3;h@M5wQ*4MR(osWnX)r|XJbTzRPIn8bUjh!|U`=U-IgU&)0jeLc>RzUy;P*O?UDq}B$*SO4srz9*=>SU`_a?)tF!~C zsZ0~U6B=2!QJYBd6rChagkST#(S{3oemBm9JJ)Iek&Id~hyc^X>t2QIB21y;*8cBM zBG}CMsQ9uy9WW>VAA#(^;@1DG-?f?Q9CeXlPh3o3OByh` zGj_2ld<&bwElS%L`QS=4OOeFPUJJ{XSnkeNYc#EC$b)5E6r26*82^oyGof#2W_ViW z;3_QL&iwW-LHe3k$vczoQhW!lUEZGoM(;+jCcg{MmL#MmF{E&reNWk@H4!f~?oy6G zLYTk;=pa|)I%!7`M7ea7B&o7fB~5W9Mu+`Kzgu0?U8G_*)n0xD<;yHoB*cWN-{1zQ zpOo^$y`r=9v@@2(4@8U?#WsB`uhDIe(# zLYtJDpR<_)+TlneTqL-hf@DD2uPjjedM`vR<6>y!NDNd=E^|>3ZXG5tM$*j0?@O{x za9sfOdsg@P6TB^JT2|r)Z#YL|k?zc6t(o2QlZet-KUIN#*%!uRwNE-h@#By-$|oWhx{N`7`Ke|d>Ki{%@rRj+e@Sf3`Ha= zpCrJH9MaEpx$FBW&!Z(e|>Qw4?!SVdeSyjJnx$>a@!AB~eXGK>g_OgQrqIO1M{_o`*Q`QDbrB>{cb(bkswZ~4WD#dJ1UY!C6B*!EcOiv(2k@O0sm z-vXu8<113XabB}?pN*E#PIG@-EJ^F@m7POx`iA3ExU!ZJ!k^UOU0=JW`7NoATUFjo z3Rzpmk-MzMOa8Mq@#ecT;LnXR0w9O-TtuJXPBP`7pkW$;E&R|o3O$vXM<*i&9#?F1KyYm$t=`nU~7w1J)4h+_jFm0lm987*_wc)P6C8}C65Kx8OxsSCl z&_51I*4ufQ zygv1bsZNw>*8xAcEDhE|eH>RO8>1Z3`lqHz-W(Wu5i5|UH6ps=E=4#q8{ovFR=X#%t2PFcJ!=C{x!<9)}GkrXd)y@mHAqnwm@+1_0ExYED?WC<9IiCxpcJ4+7_ETLuzhL!m5*%4( zfJLO54S%doBK(j04i>>uU_<>rv0?DA%aIwkJ4ghD<(tK2@M9?-D>0mxXO|Poz9bvbkvGg~V}U8K zU1cGLJ>Jb-#2^PFGR3s2_Bs^WvZS`RCp80Xs01fOmwgzC>Wtax(`lkucELVBl!I<8 zV@pD5)tq$jeQ74ATw%aP4r{V^`YEM+}HUouoAH^}}Bn9zvr z)*;#;G0@S4HX;=1RaNWB(r`l9`CH}>4zFi*2TOU>0m?`p9hou;x{amJR&iF|i0Xw? zE0*U~dqje+T>1`^3cD7)wYW`Jzr5`nD!wfm4yf07DHf2wpzl7pVDnD+RBT~z*fG_@ zK_eb+(@kR|%0duj%nDylBVS7c1s`fp@Qrg0*$Rhu#KD#)pvZG1>tQ&J(p@=1vNgI> z_Z;1&ADBOs~ol z{v2|j>CUEolp8WFRM@QMYe9pMt3h_1)j;4heMW^?SizFw7|r&lU^znj$r-3wAmZ0* zXE80Zuo2WA{uPOUXX7qZ$j7VCx`a?wQrtRtThR-%EYV=$lJqv>YJanZW_$z4uCegC z?a&k|c9k|T&wgw;7LmU*uA@Lsl}CMXsqYqA%9%*nq**YeR^+u37olqcecW1{}m9XlAo<{(CLOUa(fO3_5-Qr!775&LIy zSxFHEQRS`LUUVvX&n=P!G|rFEVWkzu7DKa&505qsyp84ayaii^r;k_8oYEZp(sPYT zM2g-I5fe-@$(PYQD7rPFRLHdeN_g7x7i~7(@fiULJ3A9qB1xyv6pGaGZALM-mRW|1 zklf@tEfjs*g$h-VqwdIvVh!uEJ_~&_2CH>vb41$lM0ox3ZZ7SuyOxWq;YKh@5{ zVVg;3Sn;Y;Ak{ouKPVYvT!TM=BQBE9z8aR&JCaNLBf(G4k!jV&vCMnD&3khJt75AB zP_*OReBIWX*v>@qLyld-sYJG0A`nCSgizg-9f+59I2cK$gEV&7Xo}2{RF>%05$GS~ zlk1wFofyrOQ5QFBT7|~AUSX|PV<-{zOEM^#H-R`1#*YY-!(a;I$ncxTO3! z)w5l3UPF;og$IJ{zaeguH$adIZla)Byt>)N?}k(C?(b~D=z_z zvXlJEHxM4aS{&RW4A-A{N+qKc0CWd=^!w~OutDy|*pBWz|CXR_7<4gU)JffZ>y7#w zU;|4Wl)GWS%d&g+JNAiW-^s~Ueixg!tsD`gT(Q5IU+ zDGc=m&o$sqJVB}(JSfF~4`Pt6pPD((!B4Hcbg)n`V>?j>l6Wm!@OcL*(c1KSLxey; z=MO-CM+X%^gurq7&%N#n<5YTX)93Bl_pFu4mREtJ;!n#{qhNj?!O{>XX|NmBk}Vfub>v)zmU+ zqKYCIj!a|8wapR>V_#+d+FNcuOfxSb(yk=2?xjb}fjhl)sxHCuzOUvi?s!&4%yc^i zg2>r&G!b(gvy~2XJnvbRbI#zjZoISo#wWWW_`AI3n`0j!?9SAm4|KyjsSz zeL{gD7^~%qtEF1KedNTWL<1z<1k`q8qfEL1FlL3Syz~~Az?&PWf3w@^Dx}UEVvqUf zo5xI4U;Q-B6K1vTuJ&ImW4Nx{`)NMu>crNcE#LQmgMHY8zi(%sCP z+T{*y$crq8cjh3{)pS_cfhV`j8n8bEBNVP}TG@MME;MW>4;k(AG;0U_QR|%O?=iun7MD1;5+lztR)??iaj@MQ4H-0ZzJ|-I4F5W){2J-C@l%8iyGk-?R>GPs zcZVH@SdQ-f6SWe6Yog>hcu5G^)*P%aJe)7W5y-e&X>>{C$~BAE zV<&B_;fOK@;BQ|6Df^~haWy6+kZjJ?01ovN;f6t%+LVVj5{6ZQGHlHN(HAG-gPB93 zEY(9f>Zgf8HrR$>yh@o zLIk%1UvtF%5nLbwUhcq`ofBY=-cmN{+M86J}DlyS7xEV0ckA10hr_0cVsrVz$J=5 zH#@zGy-H+iK|cL_on0IeVpL`_=y7GEP*_mMg2hdssvuxYz=PMm3<_BT#^n%(@zlQK zyy&O0c>_JaW!5jGCrp1_IK+n`5BI=!y3Kf|l*}? zJH}4Pw7=4jMbD*6fL{Pr2iMU06R z9fRO4uP26FXB*m10WB);P+cG`EN%~BHCz_cCEzaV)9ivztIKL7)$@X}CC7`>q72I> z#y%M4g}tsa+xz7idNeVq;Yvk;Rvq2()GQ)ELG@Z2N7U~ zDW<|>%OF$cTzF*r{K;8+X-uwvRz9~v-Cuy%GNx!L$(ZYv-MZx9) zFaU*}F7GCjYie^Bw$|r#5@**49A{Eyol+5Iek8ggpuOjc?r6Bxj`f*7(ZDvbIng$R zNPLIn0<}h33iRz6e_o?{wN8GoEEbctK|Xcd{#8dZuH?dwN-&GL`|I3CnXeoz1;TqO zrep9X;qY))L5;p3XW@o;)K^jWi`8D@&hrUP35FI(EJ{Aq6R2j4c;&fRJ%D$|z&I zEN!$7P%l3m9`UP{O}1Xc+S$>a^6QGuQ@(SZUpcbbYUl!9>1CJ*Nk;--ok|k>GlMy{ zk4Gr25MoDMMkPO~hM8ygs6`^2m^RS*xGd0TF(=U(x_6vezQ65*5>YYSy#Hyg;Yo)o z(512#*wgzi@Kv7=yfRuL${l7>m-#P>I0TAKlcgLfd#&F9&r6}>mjbWKrdR^pDIq;R zBHfZWk+_J(mw5YRi#f@%HznQt=F7*&&J7L^4qr~P5iT6cr$p$(h6Yp;BD2g2ZEzMJ zF2;3Nss>ort#Ch$JrC9W+D-HU@u?l0z=-S41f`z*xBvEOZv|rY37^?M+&=z*smN4@ z4v0lkur`g~DZ|LHGsNHFuBTC&b1AYU@vsu0)`*~S;5dCy%H{{g);`BOu` zsg{~~JPS4Tl27U*`p0FgZav>B?uZKXZtfXe3x#n0U9v3#tdPsrqk<{vb)T z7p4_H_K*lf!2G-3q(H@(x#zQKe;9{l^^C#e>jIODB`ba1eWce=caFepeshu#$^L$G z_PQ%L!*|uD1!0Hi=}@FOByT!gzCrW-CAZZK^nS&ove=a1+H!LnQwlUNN|kf#A|=Rf zp*mZRZ6`n0F3B5*;GCZo4Kjk?MX_LnoY3a&AtHgLu*(Q1o(vy>gdw~uWd3`68)?q`sJ4qsXkSImm?uI^Ixo@X1evG)-X_o?PeDymj4jA813<45kw zJI{RG5~uJ6U0cf8a{`qp=8WQ(w%gaqWsTo}HJ_LVxcyV zyD#5#N}+@Y@PCdboiR*SHbSLY?oTjclF-TK@lLWHowG;%ynSH&PIen6c)|PRZtmi- z-`BJV6qm|WcL=DVbmVkVAuLKv?#Je!MC z8M)}rZo>m~zD&`&fZ>b-Amr$034>0pplq#{F5d<32R?~f!PmMJ;k&ote{S5l}K@|(_wXPoShRq5=D$qY@ zHGdP*Y`qbw$dfk(_NJVU%nA}F`1i6mF`w!u~QWly4O_fXxbWioJw zF11`316C;l?!7-zJlv~hE4Keu;0)LL4o60nIAiC#;3lKrB^WtCH7QqB1X-`^y_2;) zGh=Lh&_u9E_?XtVD*x7ziLksf93gLL6fZ6Bmc=Pnh^Jt1A zCc1Ye7)=tXHT@kAB7d?CdLPm09=jB2#~q&&+yH)Fz>8$GkDpvpsiBtMNK-mCvkZjr zyr4(cLU+cr?AB3@w2*f(vCHy-L7}Y%Q-B#mc(hhd6x4mZZ8LhJw@lL{5Rg*qXb~)C`UvN2a#zegfR0Ph% ze~}-K+xmC-^Xk8YlLjX&C9Ph6f3c!VN|=opkK^w$gMv?j6G-n#B#RQ7XxybOY25E` z#*6WXaPTQ;pMBgk&e2t#LT9<1em`3OF)SChjK^W=lKP|wjut{|*}DGTiV5(Uyk&O;?}Na2DQ@T7B{+aa>&cIWkBjeCt9Lx) zz0_-ase&~PpA?1`a=k)?=%K6EUwuk%T2&WA8Xs1M=tAzOu1KVezo^t-trXzgzjZT3 zkkiki`GH-bM^~PWjbzueq=VX}_r>KvP0(rD_o|4;_q%a@xk)`WYHq~@qiE_=w?UIu zWlU0Q^}_jusvesQUa?{D<@cJ5{CF;>+Yd(_8wDX;p^dfNSh-d6@XQVW{kx$5|IrTr z|HRYg6#N&()yslp3CROwDk5FFU!=u)Z868I0yokUtH=)ze%=(+A+T}eD>Pa-Zr)S0$=Z%lAifm4(aT;QnvG;3LPa z+q0H0uHUV$-=LVR->%KsZ@|8f@ZI`gOwRdg!@A=?wgX>hvp1wyLDIc?KFSFs@M^~4 zo*%ou@+7Jr^i;@+I==g0OS(mHlUc`)qdkCQZYEg;lN_7dA<|d>3exn_Y<8CvSsK^2j%|iZswzbN6Ho+o3>={D0ugdrJPl#Ykg*ql- zng$$|@$2t`)0&c>ljdB_WL;Jk%tyI*?naA*uQ{#ck8jqN!~%T`df%eTtI%qOJIs<; z&6?@YvPNhSG%<0|A~6OoU!y^r%&wg+B*nGk<(W{?Q<(hw*`nU?R*!Kp!nU4X+bqy3 zoZ7!yS&AtoBh%sf@wt(M%zZ6f%*MlFQ0Z{2;fLZlO$f{E_M+$(Q22Pe(HgD-b^)*`%C%;6n%h#Z+!;r$w{Z-nxhP;L4=S54=v5dO!`XB=*SK^0@v1#^&L2t?zn|PY#Zp zH@815DK` zn{n8uFEL*wAZ#%;ZKqa8S0qh;sFP8tOdSA8%m&*cSI#L}SfPujzb~aAv5(1N^y8nN zC9!S3sMvNjq|tc8^F}>wSA&tG$1_do|28!2KOtoA_1B-MYh%tltJ-r$_wHRqVWe?C z@C*FBM}r@q9pAzDKhN&V?!V8s|JMXCYc};36%j?Gz4* zB`Wa8Gs(Z~WN;qXC^oJdO&xZM|Dp_e*J|If#WtoYkP^XLVDsT@p?dX0JZd8X-7Fh! z&TBZV!x;`9SFl#^HgA^sskGa>?_YC~u#r9�z_CmUJ83SHWA-BzpA|81GRN`06gC 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 literal 0 HcmV?d00001 diff --git a/doc/4.png b/doc/4.png new file mode 100644 index 0000000000000000000000000000000000000000..314b49751ded69d4412f5380dd092c35cde45e90 GIT binary patch literal 64697 zcmeFZcT`i~mp2TG2qG%Iqjc%L7nRM{*AhEPR$hFEUH9AIHY| z1!P^_<8U9oDr#DU<<=|d*m#tbcOCrE#r4OCe=_CowoqKTbeWR;Di!q~u_4_bQ^+q- zUA;j;`A;U3UHbC_#T7bAdIlczfb_47(y}grA4adT^2$800Av

c^H3SZsoxQSoJE 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 E2UWP2YXATM literal 0 HcmV?d00001 diff --git a/doc/5.png b/doc/5.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf2dac5eac90024e4f0fd0435582d25b5563d6f GIT binary patch literal 34454 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 H*3dryqQu`} literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +

+ + + diff --git a/locale/en.json b/locale/en.json new file mode 100644 index 0000000..c4c96eb --- /dev/null +++ b/locale/en.json @@ -0,0 +1,23 @@ +{ + "tabbar.title.1" : "消息", + "tabbar.title.2" : "通讯录", + "tabbar.title.3" : "发现", + "tabbar.title.4" : "我", + "navbar.relation.newFriend" : "新的朋友", + "navbar.mine.service" : "服务", + "navbar.relation.searchFriend" : "添加朋友", + "pages" : { + "index" : { + "index" : { + "agreement" : "Agreement content" + } + } + }, + "components" : { + "config" : { + "configPopup" : { + + } + } + } +} \ No newline at end of file diff --git a/locale/index.js b/locale/index.js new file mode 100644 index 0000000..36973ea --- /dev/null +++ b/locale/index.js @@ -0,0 +1,25 @@ +import Vue from 'vue' +import VueI18n from 'vue-i18n' + +import zhHans from './zh-Hans.json' // 中文简体 + +Vue.use(VueI18n) + +// 所需要用的语言包 +let messages = { + 'zh-Hans' : zhHans +} + +if(!uni.getStorageSync('language') || !messages[uni.getStorageSync('language')]){ + uni.setStorageSync('language', 'zh-Hans') +} + +const lang = uni.getStorageSync('language');//获取缓存中的语言 +// const lang = 'en'; +// VueI18n构造函数所需要的配置 +const i18nConfig = { + locale: lang,//当前语言 + messages +} +const i18n = new VueI18n(i18nConfig) +export default i18n \ No newline at end of file diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json new file mode 100644 index 0000000..285f1f2 --- /dev/null +++ b/locale/zh-Hans.json @@ -0,0 +1,26 @@ +{ + "tabbar.title.1" : "消息", + "tabbar.title.2" : "通讯录", + "tabbar.title.3" : "发现", + "tabbar.title.4" : "我", + "navbar.relation.newFriend" : "新的朋友", + "navbar.mine.service" : "服务", + "navbar.relation.searchFriend" : "添加朋友", + "responseMessage" : { + + }, + "pages" : { + "index" : { + "index" : { + "agreement" : "协议内容" + } + } + }, + "components" : { + "config" : { + "configPopup" : { + "noData" : "内容未找到:404" + } + } + } +} \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..f5cd3ba --- /dev/null +++ b/main.js @@ -0,0 +1,43 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' + +import './uni.promisify.adaptor' + +Vue.config.productionTip = false + +App.mpType = 'app' + +import store from '@/store/store' +import i18n from './locale/index.js' + +import './config' +import './utils/index.js' + +//组件注册 +import configPopup from '@/components/config/configPopup.vue' +import changeLanguage from '@/components/base/changeLanguage.vue' + +Vue.component('configPopup',configPopup) +Vue.component('changeLanguage',changeLanguage) + +const app = new Vue({ + ...App, + store, + i18n +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { + createSSRApp +} from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ea42a21 --- /dev/null +++ b/manifest.json @@ -0,0 +1,105 @@ +{ + "name" : "unapp模板", + "appid" : "__UNI__197A38F", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : { + "maps" : {} + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wxe7ae8cbe1673834c", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "你的位置信息将用于小程序位置接口的效果展示" + }, + "scope.userFuzzyLocation" : { + "desc" : "你的位置信息将用于小程序位置接口的效果展示" + } + }, + "requiredPrivateInfos" : [ "chooseLocation", "getLocation" ] + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "2", + "h5" : { + "sdkConfigs" : { + "maps" : { + "qqmap" : { + "key" : "XMBBZ-BCPCV-SXPPQ-5Y7MY-PHZXK-YFFVU" + } + } + }, + "devServer" : { + "https" : false, + "proxy" : { + "/ws/geocoder/v1/" : { + "target" : "https://apis.map.qq.com", + "changeOrigin" : true + }, + "/ws/location/v1/" : { + "target" : "https://apis.map.qq.com", + "changeOrigin" : true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..136edbc --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "uniapp-project-templates", + "version": "1.0.0", + "description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/huliyong/uniapp-project-templates.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "ali-oss": "^6.21.0", + "dayjs": "^1.11.12" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..7d3bc07 --- /dev/null +++ b/pages.json @@ -0,0 +1,24 @@ +{ + "pages": [ + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "unapp模板" + } + }, + { + "path" : "pages/map/map", + "style" : + { + "navigationBarTitleText" : "" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "unapp模板", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {} +} diff --git a/pages/finish/finish.vue b/pages/finish/finish.vue new file mode 100644 index 0000000..4100844 --- /dev/null +++ b/pages/finish/finish.vue @@ -0,0 +1,192 @@ + + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..d92e23f --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/pages/login/login.vue b/pages/login/login.vue new file mode 100644 index 0000000..4b5cbbf --- /dev/null +++ b/pages/login/login.vue @@ -0,0 +1,196 @@ + + + + + \ No newline at end of file diff --git a/pages/map/map.vue b/pages/map/map.vue new file mode 100644 index 0000000..d4e911f --- /dev/null +++ b/pages/map/map.vue @@ -0,0 +1,95 @@ + + + \ No newline at end of file diff --git a/pages/reject/reject.vue b/pages/reject/reject.vue new file mode 100644 index 0000000..8496e04 --- /dev/null +++ b/pages/reject/reject.vue @@ -0,0 +1,70 @@ + + + + + + \ No newline at end of file diff --git a/pages/repair/repair.vue b/pages/repair/repair.vue new file mode 100644 index 0000000..04fbd5b --- /dev/null +++ b/pages/repair/repair.vue @@ -0,0 +1,271 @@ + + + + + + \ No newline at end of file diff --git a/pages/repairList/repairList.vue b/pages/repairList/repairList.vue new file mode 100644 index 0000000..8b1b273 --- /dev/null +++ b/pages/repairList/repairList.vue @@ -0,0 +1,175 @@ + + + + + \ No newline at end of file diff --git a/pages/wxUserInfo/wxUserInfo.vue b/pages/wxUserInfo/wxUserInfo.vue new file mode 100644 index 0000000..3100506 --- /dev/null +++ b/pages/wxUserInfo/wxUserInfo.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/static/bar/1.png b/static/bar/1.png new file mode 100644 index 0000000000000000000000000000000000000000..fffe4bc55527e5f0d9611b6966e2a671d69e3d56 GIT binary patch literal 2848 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 N002ovPDHLkV1lY2CP@GQ literal 0 HcmV?d00001 diff --git a/static/bar/3.png b/static/bar/3.png new file mode 100644 index 0000000000000000000000000000000000000000..75601a6a066917e5008889703ed7e336531f1bb0 GIT binary patch literal 906 zcmV;519kj~P)Px&L`g(JRCr$PTTN>eK@hECa@dRFMbspEaS_((kVU)*3P!=BLL{KzA)x5V-=O&o zp8N=UPzZtna}hmgK-7!KhE!)o771#i-b62Z$Wm_OtPJC3W_o6~cO=!?WI!bP}cdqoY!nN-!&SIpII=iD?llA9RQ91z^N<_`#9$r z0K6e06JP3)ngFHLBqH8m=Hb-n129Cyb!NUwMDuCfry@WpbsPX*qya3D%>)rGCdHFT z!1(z1NUPQQ5(Q%BRYY7(a^UFqQ2;1MeR-ZYy0o;k78gSz0ZOSy05BN>dC$x+(ch)i{CI$|rJ z3*a0Pop+pK8U!SCmGwh?Sq+HTI(wVe+6s< z@3;LxDxlv<+29KSq60(-i4qhkEWLm=LM%I9%^AJ%lFE6XCc+LsvWj7dn+P2ghU955E3CILP&&A?}X4U0QeT#k{%F| zxeZd-;rssG_AU15P=LFM==){?r@1Zu2>|wX0GQd=TCWt5f#722696a$@qH$ueQ~iS z65#v(V?;b124Uu-TI*LuBEk3la{w@dhzCLsYe8#$CNBX8%|T@skdFXhs-p@~07*qoM6N<$g11?YZ~y=R literal 0 HcmV?d00001 diff --git a/static/bar/4.png b/static/bar/4.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7c8c09404509e05f7e1250c7d68442c3f4547b GIT binary patch literal 930 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

JXl9Ee%^~4 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 Buaf`( literal 0 HcmV?d00001 diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a GIT binary patch literal 4023 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 SYs}WS&%*SCNx89m_ { + if(res.code == 200){ + state.configList = res.result + } + }) + }, + }, + actions: {}, +}) + +export default store \ No newline at end of file diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js new file mode 100644 index 0000000..47fbce1 --- /dev/null +++ b/uni.promisify.adaptor.js @@ -0,0 +1,10 @@ +uni.addInterceptor({ + returnValue (res) { + if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) { + return res; + } + return new Promise((resolve, reject) => { + res.then((res) => res[0] ? reject(res[0]) : resolve(res[1])); + }); + }, +}); \ No newline at end of file diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..ad2fa7c --- /dev/null +++ b/uni.scss @@ -0,0 +1,75 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16px; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..0261131 --- /dev/null +++ b/uni_modules/uni-icons/changelog.md @@ -0,0 +1,42 @@ +## 2.0.10(2024-06-07) +- 优化 uni-app x 中,size 属性的类型 +## 2.0.9(2024-01-12) +fix: 修复图标大小默认值错误的问题 +## 2.0.8(2023-12-14) +- 修复 项目未使用 ts 情况下,打包报错的bug +## 2.0.7(2023-12-14) +- 修复 size 属性为 string 时,不加单位导致尺寸异常的bug +## 2.0.6(2023-12-11) +- 优化 兼容老版本icon类型,如 top ,bottom 等 +## 2.0.5(2023-12-11) +- 优化 兼容老版本icon类型,如 top ,bottom 等 +## 2.0.4(2023-12-06) +- 优化 uni-app x 下示例项目图标排序 +## 2.0.3(2023-12-06) +- 修复 nvue下引入组件报错的bug +## 2.0.2(2023-12-05) +-优化 size 属性支持单位 +## 2.0.1(2023-12-05) +- 新增 uni-app x 支持定义图标 +## 1.3.5(2022-01-24) +- 优化 size 属性可以传入不带单位的字符串数值 +## 1.3.4(2022-01-24) +- 优化 size 支持其他单位 +## 1.3.3(2022-01-17) +- 修复 nvue 有些图标不显示的bug,兼容老版本图标 +## 1.3.2(2021-12-01) +- 优化 示例可复制图标名称 +## 1.3.1(2021-11-23) +- 优化 兼容旧组件 type 值 +## 1.3.0(2021-11-19) +- 新增 更多图标 +- 优化 自定义图标使用方式 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7(2021-11-08) +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.5(2021-05-12) +- 新增 组件示例地址 +## 1.1.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue new file mode 100644 index 0000000..8740559 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue @@ -0,0 +1,91 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..7da5356 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..0a6b6fe --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,664 @@ + +.uniui-cart-filled:before { + content: "\e6d0"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-arrowthinleft:before { + content: "\e6d2"; +} + +.uniui-arrowthinup:before { + content: "\e6d3"; +} + +.uniui-arrowthindown:before { + content: "\e6d4"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthinright:before { + content: "\e6d1"; +} + +.uniui-down:before { + content: "\e6b8"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowright:before { + content: "\e6d5"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-up:before { + content: "\e6b6"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowup:before { + content: "\e6d6"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..14696d038d828073edac09ea4e5ba1dec2f58115 GIT binary patch literal 35824 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 F{2S@rCxHL} literal 0 HcmV?d00001 diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts b/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts new file mode 100644 index 0000000..98e93aa --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts @@ -0,0 +1,664 @@ + +export type IconsData = { + id : string + name : string + font_family : string + css_prefix_text : string + description : string + glyphs : Array +} + +export type IconsDataItem = { + font_class : string + unicode : string +} + + +export const fontData = [ + { + "font_class": "arrow-down", + "unicode": "\ue6be" + }, + { + "font_class": "arrow-left", + "unicode": "\ue6bc" + }, + { + "font_class": "arrow-right", + "unicode": "\ue6bb" + }, + { + "font_class": "arrow-up", + "unicode": "\ue6bd" + }, + { + "font_class": "auth", + "unicode": "\ue6ab" + }, + { + "font_class": "auth-filled", + "unicode": "\ue6cc" + }, + { + "font_class": "back", + "unicode": "\ue6b9" + }, + { + "font_class": "bars", + "unicode": "\ue627" + }, + { + "font_class": "calendar", + "unicode": "\ue6a0" + }, + { + "font_class": "calendar-filled", + "unicode": "\ue6c0" + }, + { + "font_class": "camera", + "unicode": "\ue65a" + }, + { + "font_class": "camera-filled", + "unicode": "\ue658" + }, + { + "font_class": "cart", + "unicode": "\ue631" + }, + { + "font_class": "cart-filled", + "unicode": "\ue6d0" + }, + { + "font_class": "chat", + "unicode": "\ue65d" + }, + { + "font_class": "chat-filled", + "unicode": "\ue659" + }, + { + "font_class": "chatboxes", + "unicode": "\ue696" + }, + { + "font_class": "chatboxes-filled", + "unicode": "\ue692" + }, + { + "font_class": "chatbubble", + "unicode": "\ue697" + }, + { + "font_class": "chatbubble-filled", + "unicode": "\ue694" + }, + { + "font_class": "checkbox", + "unicode": "\ue62b" + }, + { + "font_class": "checkbox-filled", + "unicode": "\ue62c" + }, + { + "font_class": "checkmarkempty", + "unicode": "\ue65c" + }, + { + "font_class": "circle", + "unicode": "\ue65b" + }, + { + "font_class": "circle-filled", + "unicode": "\ue65e" + }, + { + "font_class": "clear", + "unicode": "\ue66d" + }, + { + "font_class": "close", + "unicode": "\ue673" + }, + { + "font_class": "closeempty", + "unicode": "\ue66c" + }, + { + "font_class": "cloud-download", + "unicode": "\ue647" + }, + { + "font_class": "cloud-download-filled", + "unicode": "\ue646" + }, + { + "font_class": "cloud-upload", + "unicode": "\ue645" + }, + { + "font_class": "cloud-upload-filled", + "unicode": "\ue648" + }, + { + "font_class": "color", + "unicode": "\ue6cf" + }, + { + "font_class": "color-filled", + "unicode": "\ue6c9" + }, + { + "font_class": "compose", + "unicode": "\ue67f" + }, + { + "font_class": "contact", + "unicode": "\ue693" + }, + { + "font_class": "contact-filled", + "unicode": "\ue695" + }, + { + "font_class": "down", + "unicode": "\ue6b8" + }, + { + "font_class": "bottom", + "unicode": "\ue6b8" + }, + { + "font_class": "download", + "unicode": "\ue68d" + }, + { + "font_class": "download-filled", + "unicode": "\ue681" + }, + { + "font_class": "email", + "unicode": "\ue69e" + }, + { + "font_class": "email-filled", + "unicode": "\ue69a" + }, + { + "font_class": "eye", + "unicode": "\ue651" + }, + { + "font_class": "eye-filled", + "unicode": "\ue66a" + }, + { + "font_class": "eye-slash", + "unicode": "\ue6b3" + }, + { + "font_class": "eye-slash-filled", + "unicode": "\ue6b4" + }, + { + "font_class": "fire", + "unicode": "\ue6a1" + }, + { + "font_class": "fire-filled", + "unicode": "\ue6c5" + }, + { + "font_class": "flag", + "unicode": "\ue65f" + }, + { + "font_class": "flag-filled", + "unicode": "\ue660" + }, + { + "font_class": "folder-add", + "unicode": "\ue6a9" + }, + { + "font_class": "folder-add-filled", + "unicode": "\ue6c8" + }, + { + "font_class": "font", + "unicode": "\ue6a3" + }, + { + "font_class": "forward", + "unicode": "\ue6ba" + }, + { + "font_class": "gear", + "unicode": "\ue664" + }, + { + "font_class": "gear-filled", + "unicode": "\ue661" + }, + { + "font_class": "gift", + "unicode": "\ue6a4" + }, + { + "font_class": "gift-filled", + "unicode": "\ue6c4" + }, + { + "font_class": "hand-down", + "unicode": "\ue63d" + }, + { + "font_class": "hand-down-filled", + "unicode": "\ue63c" + }, + { + "font_class": "hand-up", + "unicode": "\ue63f" + }, + { + "font_class": "hand-up-filled", + "unicode": "\ue63e" + }, + { + "font_class": "headphones", + "unicode": "\ue630" + }, + { + "font_class": "heart", + "unicode": "\ue639" + }, + { + "font_class": "heart-filled", + "unicode": "\ue641" + }, + { + "font_class": "help", + "unicode": "\ue679" + }, + { + "font_class": "help-filled", + "unicode": "\ue674" + }, + { + "font_class": "home", + "unicode": "\ue662" + }, + { + "font_class": "home-filled", + "unicode": "\ue663" + }, + { + "font_class": "image", + "unicode": "\ue670" + }, + { + "font_class": "image-filled", + "unicode": "\ue678" + }, + { + "font_class": "images", + "unicode": "\ue650" + }, + { + "font_class": "images-filled", + "unicode": "\ue64b" + }, + { + "font_class": "info", + "unicode": "\ue669" + }, + { + "font_class": "info-filled", + "unicode": "\ue649" + }, + { + "font_class": "left", + "unicode": "\ue6b7" + }, + { + "font_class": "link", + "unicode": "\ue6a5" + }, + { + "font_class": "list", + "unicode": "\ue644" + }, + { + "font_class": "location", + "unicode": "\ue6ae" + }, + { + "font_class": "location-filled", + "unicode": "\ue6af" + }, + { + "font_class": "locked", + "unicode": "\ue66b" + }, + { + "font_class": "locked-filled", + "unicode": "\ue668" + }, + { + "font_class": "loop", + "unicode": "\ue633" + }, + { + "font_class": "mail-open", + "unicode": "\ue643" + }, + { + "font_class": "mail-open-filled", + "unicode": "\ue63a" + }, + { + "font_class": "map", + "unicode": "\ue667" + }, + { + "font_class": "map-filled", + "unicode": "\ue666" + }, + { + "font_class": "map-pin", + "unicode": "\ue6ad" + }, + { + "font_class": "map-pin-ellipse", + "unicode": "\ue6ac" + }, + { + "font_class": "medal", + "unicode": "\ue6a2" + }, + { + "font_class": "medal-filled", + "unicode": "\ue6c3" + }, + { + "font_class": "mic", + "unicode": "\ue671" + }, + { + "font_class": "mic-filled", + "unicode": "\ue677" + }, + { + "font_class": "micoff", + "unicode": "\ue67e" + }, + { + "font_class": "micoff-filled", + "unicode": "\ue6b0" + }, + { + "font_class": "minus", + "unicode": "\ue66f" + }, + { + "font_class": "minus-filled", + "unicode": "\ue67d" + }, + { + "font_class": "more", + "unicode": "\ue64d" + }, + { + "font_class": "more-filled", + "unicode": "\ue64e" + }, + { + "font_class": "navigate", + "unicode": "\ue66e" + }, + { + "font_class": "navigate-filled", + "unicode": "\ue67a" + }, + { + "font_class": "notification", + "unicode": "\ue6a6" + }, + { + "font_class": "notification-filled", + "unicode": "\ue6c1" + }, + { + "font_class": "paperclip", + "unicode": "\ue652" + }, + { + "font_class": "paperplane", + "unicode": "\ue672" + }, + { + "font_class": "paperplane-filled", + "unicode": "\ue675" + }, + { + "font_class": "person", + "unicode": "\ue699" + }, + { + "font_class": "person-filled", + "unicode": "\ue69d" + }, + { + "font_class": "personadd", + "unicode": "\ue69f" + }, + { + "font_class": "personadd-filled", + "unicode": "\ue698" + }, + { + "font_class": "personadd-filled-copy", + "unicode": "\ue6d1" + }, + { + "font_class": "phone", + "unicode": "\ue69c" + }, + { + "font_class": "phone-filled", + "unicode": "\ue69b" + }, + { + "font_class": "plus", + "unicode": "\ue676" + }, + { + "font_class": "plus-filled", + "unicode": "\ue6c7" + }, + { + "font_class": "plusempty", + "unicode": "\ue67b" + }, + { + "font_class": "pulldown", + "unicode": "\ue632" + }, + { + "font_class": "pyq", + "unicode": "\ue682" + }, + { + "font_class": "qq", + "unicode": "\ue680" + }, + { + "font_class": "redo", + "unicode": "\ue64a" + }, + { + "font_class": "redo-filled", + "unicode": "\ue655" + }, + { + "font_class": "refresh", + "unicode": "\ue657" + }, + { + "font_class": "refresh-filled", + "unicode": "\ue656" + }, + { + "font_class": "refreshempty", + "unicode": "\ue6bf" + }, + { + "font_class": "reload", + "unicode": "\ue6b2" + }, + { + "font_class": "right", + "unicode": "\ue6b5" + }, + { + "font_class": "scan", + "unicode": "\ue62a" + }, + { + "font_class": "search", + "unicode": "\ue654" + }, + { + "font_class": "settings", + "unicode": "\ue653" + }, + { + "font_class": "settings-filled", + "unicode": "\ue6ce" + }, + { + "font_class": "shop", + "unicode": "\ue62f" + }, + { + "font_class": "shop-filled", + "unicode": "\ue6cd" + }, + { + "font_class": "smallcircle", + "unicode": "\ue67c" + }, + { + "font_class": "smallcircle-filled", + "unicode": "\ue665" + }, + { + "font_class": "sound", + "unicode": "\ue684" + }, + { + "font_class": "sound-filled", + "unicode": "\ue686" + }, + { + "font_class": "spinner-cycle", + "unicode": "\ue68a" + }, + { + "font_class": "staff", + "unicode": "\ue6a7" + }, + { + "font_class": "staff-filled", + "unicode": "\ue6cb" + }, + { + "font_class": "star", + "unicode": "\ue688" + }, + { + "font_class": "star-filled", + "unicode": "\ue68f" + }, + { + "font_class": "starhalf", + "unicode": "\ue683" + }, + { + "font_class": "trash", + "unicode": "\ue687" + }, + { + "font_class": "trash-filled", + "unicode": "\ue685" + }, + { + "font_class": "tune", + "unicode": "\ue6aa" + }, + { + "font_class": "tune-filled", + "unicode": "\ue6ca" + }, + { + "font_class": "undo", + "unicode": "\ue64f" + }, + { + "font_class": "undo-filled", + "unicode": "\ue64c" + }, + { + "font_class": "up", + "unicode": "\ue6b6" + }, + { + "font_class": "top", + "unicode": "\ue6b6" + }, + { + "font_class": "upload", + "unicode": "\ue690" + }, + { + "font_class": "upload-filled", + "unicode": "\ue68e" + }, + { + "font_class": "videocam", + "unicode": "\ue68c" + }, + { + "font_class": "videocam-filled", + "unicode": "\ue689" + }, + { + "font_class": "vip", + "unicode": "\ue6a8" + }, + { + "font_class": "vip-filled", + "unicode": "\ue6c6" + }, + { + "font_class": "wallet", + "unicode": "\ue6b1" + }, + { + "font_class": "wallet-filled", + "unicode": "\ue6c2" + }, + { + "font_class": "weibo", + "unicode": "\ue68b" + }, + { + "font_class": "weixin", + "unicode": "\ue691" + } +] as IconsDataItem[] + +// export const fontData = JSON.parse(fontDataJson) diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js b/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js new file mode 100644 index 0000000..1cd11e1 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js @@ -0,0 +1,649 @@ + +export const fontData = [ + { + "font_class": "arrow-down", + "unicode": "\ue6be" + }, + { + "font_class": "arrow-left", + "unicode": "\ue6bc" + }, + { + "font_class": "arrow-right", + "unicode": "\ue6bb" + }, + { + "font_class": "arrow-up", + "unicode": "\ue6bd" + }, + { + "font_class": "auth", + "unicode": "\ue6ab" + }, + { + "font_class": "auth-filled", + "unicode": "\ue6cc" + }, + { + "font_class": "back", + "unicode": "\ue6b9" + }, + { + "font_class": "bars", + "unicode": "\ue627" + }, + { + "font_class": "calendar", + "unicode": "\ue6a0" + }, + { + "font_class": "calendar-filled", + "unicode": "\ue6c0" + }, + { + "font_class": "camera", + "unicode": "\ue65a" + }, + { + "font_class": "camera-filled", + "unicode": "\ue658" + }, + { + "font_class": "cart", + "unicode": "\ue631" + }, + { + "font_class": "cart-filled", + "unicode": "\ue6d0" + }, + { + "font_class": "chat", + "unicode": "\ue65d" + }, + { + "font_class": "chat-filled", + "unicode": "\ue659" + }, + { + "font_class": "chatboxes", + "unicode": "\ue696" + }, + { + "font_class": "chatboxes-filled", + "unicode": "\ue692" + }, + { + "font_class": "chatbubble", + "unicode": "\ue697" + }, + { + "font_class": "chatbubble-filled", + "unicode": "\ue694" + }, + { + "font_class": "checkbox", + "unicode": "\ue62b" + }, + { + "font_class": "checkbox-filled", + "unicode": "\ue62c" + }, + { + "font_class": "checkmarkempty", + "unicode": "\ue65c" + }, + { + "font_class": "circle", + "unicode": "\ue65b" + }, + { + "font_class": "circle-filled", + "unicode": "\ue65e" + }, + { + "font_class": "clear", + "unicode": "\ue66d" + }, + { + "font_class": "close", + "unicode": "\ue673" + }, + { + "font_class": "closeempty", + "unicode": "\ue66c" + }, + { + "font_class": "cloud-download", + "unicode": "\ue647" + }, + { + "font_class": "cloud-download-filled", + "unicode": "\ue646" + }, + { + "font_class": "cloud-upload", + "unicode": "\ue645" + }, + { + "font_class": "cloud-upload-filled", + "unicode": "\ue648" + }, + { + "font_class": "color", + "unicode": "\ue6cf" + }, + { + "font_class": "color-filled", + "unicode": "\ue6c9" + }, + { + "font_class": "compose", + "unicode": "\ue67f" + }, + { + "font_class": "contact", + "unicode": "\ue693" + }, + { + "font_class": "contact-filled", + "unicode": "\ue695" + }, + { + "font_class": "down", + "unicode": "\ue6b8" + }, + { + "font_class": "bottom", + "unicode": "\ue6b8" + }, + { + "font_class": "download", + "unicode": "\ue68d" + }, + { + "font_class": "download-filled", + "unicode": "\ue681" + }, + { + "font_class": "email", + "unicode": "\ue69e" + }, + { + "font_class": "email-filled", + "unicode": "\ue69a" + }, + { + "font_class": "eye", + "unicode": "\ue651" + }, + { + "font_class": "eye-filled", + "unicode": "\ue66a" + }, + { + "font_class": "eye-slash", + "unicode": "\ue6b3" + }, + { + "font_class": "eye-slash-filled", + "unicode": "\ue6b4" + }, + { + "font_class": "fire", + "unicode": "\ue6a1" + }, + { + "font_class": "fire-filled", + "unicode": "\ue6c5" + }, + { + "font_class": "flag", + "unicode": "\ue65f" + }, + { + "font_class": "flag-filled", + "unicode": "\ue660" + }, + { + "font_class": "folder-add", + "unicode": "\ue6a9" + }, + { + "font_class": "folder-add-filled", + "unicode": "\ue6c8" + }, + { + "font_class": "font", + "unicode": "\ue6a3" + }, + { + "font_class": "forward", + "unicode": "\ue6ba" + }, + { + "font_class": "gear", + "unicode": "\ue664" + }, + { + "font_class": "gear-filled", + "unicode": "\ue661" + }, + { + "font_class": "gift", + "unicode": "\ue6a4" + }, + { + "font_class": "gift-filled", + "unicode": "\ue6c4" + }, + { + "font_class": "hand-down", + "unicode": "\ue63d" + }, + { + "font_class": "hand-down-filled", + "unicode": "\ue63c" + }, + { + "font_class": "hand-up", + "unicode": "\ue63f" + }, + { + "font_class": "hand-up-filled", + "unicode": "\ue63e" + }, + { + "font_class": "headphones", + "unicode": "\ue630" + }, + { + "font_class": "heart", + "unicode": "\ue639" + }, + { + "font_class": "heart-filled", + "unicode": "\ue641" + }, + { + "font_class": "help", + "unicode": "\ue679" + }, + { + "font_class": "help-filled", + "unicode": "\ue674" + }, + { + "font_class": "home", + "unicode": "\ue662" + }, + { + "font_class": "home-filled", + "unicode": "\ue663" + }, + { + "font_class": "image", + "unicode": "\ue670" + }, + { + "font_class": "image-filled", + "unicode": "\ue678" + }, + { + "font_class": "images", + "unicode": "\ue650" + }, + { + "font_class": "images-filled", + "unicode": "\ue64b" + }, + { + "font_class": "info", + "unicode": "\ue669" + }, + { + "font_class": "info-filled", + "unicode": "\ue649" + }, + { + "font_class": "left", + "unicode": "\ue6b7" + }, + { + "font_class": "link", + "unicode": "\ue6a5" + }, + { + "font_class": "list", + "unicode": "\ue644" + }, + { + "font_class": "location", + "unicode": "\ue6ae" + }, + { + "font_class": "location-filled", + "unicode": "\ue6af" + }, + { + "font_class": "locked", + "unicode": "\ue66b" + }, + { + "font_class": "locked-filled", + "unicode": "\ue668" + }, + { + "font_class": "loop", + "unicode": "\ue633" + }, + { + "font_class": "mail-open", + "unicode": "\ue643" + }, + { + "font_class": "mail-open-filled", + "unicode": "\ue63a" + }, + { + "font_class": "map", + "unicode": "\ue667" + }, + { + "font_class": "map-filled", + "unicode": "\ue666" + }, + { + "font_class": "map-pin", + "unicode": "\ue6ad" + }, + { + "font_class": "map-pin-ellipse", + "unicode": "\ue6ac" + }, + { + "font_class": "medal", + "unicode": "\ue6a2" + }, + { + "font_class": "medal-filled", + "unicode": "\ue6c3" + }, + { + "font_class": "mic", + "unicode": "\ue671" + }, + { + "font_class": "mic-filled", + "unicode": "\ue677" + }, + { + "font_class": "micoff", + "unicode": "\ue67e" + }, + { + "font_class": "micoff-filled", + "unicode": "\ue6b0" + }, + { + "font_class": "minus", + "unicode": "\ue66f" + }, + { + "font_class": "minus-filled", + "unicode": "\ue67d" + }, + { + "font_class": "more", + "unicode": "\ue64d" + }, + { + "font_class": "more-filled", + "unicode": "\ue64e" + }, + { + "font_class": "navigate", + "unicode": "\ue66e" + }, + { + "font_class": "navigate-filled", + "unicode": "\ue67a" + }, + { + "font_class": "notification", + "unicode": "\ue6a6" + }, + { + "font_class": "notification-filled", + "unicode": "\ue6c1" + }, + { + "font_class": "paperclip", + "unicode": "\ue652" + }, + { + "font_class": "paperplane", + "unicode": "\ue672" + }, + { + "font_class": "paperplane-filled", + "unicode": "\ue675" + }, + { + "font_class": "person", + "unicode": "\ue699" + }, + { + "font_class": "person-filled", + "unicode": "\ue69d" + }, + { + "font_class": "personadd", + "unicode": "\ue69f" + }, + { + "font_class": "personadd-filled", + "unicode": "\ue698" + }, + { + "font_class": "personadd-filled-copy", + "unicode": "\ue6d1" + }, + { + "font_class": "phone", + "unicode": "\ue69c" + }, + { + "font_class": "phone-filled", + "unicode": "\ue69b" + }, + { + "font_class": "plus", + "unicode": "\ue676" + }, + { + "font_class": "plus-filled", + "unicode": "\ue6c7" + }, + { + "font_class": "plusempty", + "unicode": "\ue67b" + }, + { + "font_class": "pulldown", + "unicode": "\ue632" + }, + { + "font_class": "pyq", + "unicode": "\ue682" + }, + { + "font_class": "qq", + "unicode": "\ue680" + }, + { + "font_class": "redo", + "unicode": "\ue64a" + }, + { + "font_class": "redo-filled", + "unicode": "\ue655" + }, + { + "font_class": "refresh", + "unicode": "\ue657" + }, + { + "font_class": "refresh-filled", + "unicode": "\ue656" + }, + { + "font_class": "refreshempty", + "unicode": "\ue6bf" + }, + { + "font_class": "reload", + "unicode": "\ue6b2" + }, + { + "font_class": "right", + "unicode": "\ue6b5" + }, + { + "font_class": "scan", + "unicode": "\ue62a" + }, + { + "font_class": "search", + "unicode": "\ue654" + }, + { + "font_class": "settings", + "unicode": "\ue653" + }, + { + "font_class": "settings-filled", + "unicode": "\ue6ce" + }, + { + "font_class": "shop", + "unicode": "\ue62f" + }, + { + "font_class": "shop-filled", + "unicode": "\ue6cd" + }, + { + "font_class": "smallcircle", + "unicode": "\ue67c" + }, + { + "font_class": "smallcircle-filled", + "unicode": "\ue665" + }, + { + "font_class": "sound", + "unicode": "\ue684" + }, + { + "font_class": "sound-filled", + "unicode": "\ue686" + }, + { + "font_class": "spinner-cycle", + "unicode": "\ue68a" + }, + { + "font_class": "staff", + "unicode": "\ue6a7" + }, + { + "font_class": "staff-filled", + "unicode": "\ue6cb" + }, + { + "font_class": "star", + "unicode": "\ue688" + }, + { + "font_class": "star-filled", + "unicode": "\ue68f" + }, + { + "font_class": "starhalf", + "unicode": "\ue683" + }, + { + "font_class": "trash", + "unicode": "\ue687" + }, + { + "font_class": "trash-filled", + "unicode": "\ue685" + }, + { + "font_class": "tune", + "unicode": "\ue6aa" + }, + { + "font_class": "tune-filled", + "unicode": "\ue6ca" + }, + { + "font_class": "undo", + "unicode": "\ue64f" + }, + { + "font_class": "undo-filled", + "unicode": "\ue64c" + }, + { + "font_class": "up", + "unicode": "\ue6b6" + }, + { + "font_class": "top", + "unicode": "\ue6b6" + }, + { + "font_class": "upload", + "unicode": "\ue690" + }, + { + "font_class": "upload-filled", + "unicode": "\ue68e" + }, + { + "font_class": "videocam", + "unicode": "\ue68c" + }, + { + "font_class": "videocam-filled", + "unicode": "\ue689" + }, + { + "font_class": "vip", + "unicode": "\ue6a8" + }, + { + "font_class": "vip-filled", + "unicode": "\ue6c6" + }, + { + "font_class": "wallet", + "unicode": "\ue6b1" + }, + { + "font_class": "wallet-filled", + "unicode": "\ue6c2" + }, + { + "font_class": "weibo", + "unicode": "\ue68b" + }, + { + "font_class": "weixin", + "unicode": "\ue691" + } +] + +// export const fontData = JSON.parse(fontDataJson) diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..6b681b4 --- /dev/null +++ b/uni_modules/uni-icons/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "2.0.10", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y", + "app-uvue": "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", + "钉钉": "y", + "快手": "y", + "飞书": "y", + "京东": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 图标 +> **组件名:uni-icons** +> 代码块: `uIcons` + +用于展示 icons 图标 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2022-01-21) +- 优化 组件示例 +## 1.0.2(2021-11-22) +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 +## 1.0.1(2021-11-22) +- 修复 vue3中scss语法兼容问题 +## 1.0.0(2021-11-18) +- init diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "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": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "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" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/uni_modules/uv-action-sheet/changelog.md b/uni_modules/uv-action-sheet/changelog.md new file mode 100644 index 0000000..ab3545e --- /dev/null +++ b/uni_modules/uv-action-sheet/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-07-02) +uv-action-sheet 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/actionSheet.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-action-sheet 底部操作菜单 diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js new file mode 100644 index 0000000..8adffee --- /dev/null +++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js @@ -0,0 +1,50 @@ +export default { + props: { + // 标题,有值则显示,同时会显示关闭按钮 + title: { + type: String, + default: '' + }, + // 选项上方的描述信息 + description: { + type: String, + default: '' + }, + // 数据 + actions: { + type: Array, + default: () => [] + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: '' + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: true + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: true + }, + // 小程序的打开方式 + openType: { + type: String, + default: '' + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: 0 + }, + ...uni.$uv?.props?.actionSheet + } +} \ No newline at end of file diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue new file mode 100644 index 0000000..edca089 --- /dev/null +++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue @@ -0,0 +1,280 @@ + + + + + + diff --git a/uni_modules/uv-action-sheet/package.json b/uni_modules/uv-action-sheet/package.json new file mode 100644 index 0000000..e7b6173 --- /dev/null +++ b/uni_modules/uv-action-sheet/package.json @@ -0,0 +1,92 @@ +{ + "id": "uv-action-sheet", + "displayName": "uv-action-sheet 底部操作菜单 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "该组件用于从底部弹出一个操作菜单,供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。", + "keywords": [ + "action-sheet", + "uvui", + "uv-ui", + "操作菜单", + "菜单选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-icon", + "uv-line", + "uv-loading-icon", + "uv-gap" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-action-sheet/readme.md b/uni_modules/uv-action-sheet/readme.md new file mode 100644 index 0000000..9ea5487 --- /dev/null +++ b/uni_modules/uv-action-sheet/readme.md @@ -0,0 +1,13 @@ +## ActionSheet 操作菜单 + +> **组件名:uv-action-sheet** + +本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。 + +本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-album/changelog.md b/uni_modules/uv-album/changelog.md new file mode 100644 index 0000000..42ab5e2 --- /dev/null +++ b/uni_modules/uv-album/changelog.md @@ -0,0 +1,10 @@ +## 1.0.4(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.3(2023-10-23) +1. 修复报错的BUG +## 1.0.2(2023-10-23) +1. 修复设置singleSize、multipleSize、space等值带单位,存在不显示的BUG +## 1.0.1(2023-09-13) +1. 添加依赖 +## 1.0.0(2023-08-30) +1. 新增uv-album相册组件 diff --git a/uni_modules/uv-album/components/uv-album/uv-album.vue b/uni_modules/uv-album/components/uv-album/uv-album.vue new file mode 100644 index 0000000..835d792 --- /dev/null +++ b/uni_modules/uv-album/components/uv-album/uv-album.vue @@ -0,0 +1,312 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-album/package.json b/uni_modules/uv-album/package.json new file mode 100644 index 0000000..700602f --- /dev/null +++ b/uni_modules/uv-album/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-album", + "displayName": "uv-album 相册 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.4", + "description": "本组件提供一个类似相册的功能,让开发者开发起来更加得心应手,功能齐全,灵活配置可以,开箱即用。减少重复的模板代码", + "keywords": [ + "album", + "uv-ui", + "uvui", + "相册", + "图片" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-text" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-album/readme.md b/uni_modules/uv-album/readme.md new file mode 100644 index 0000000..edd2f0b --- /dev/null +++ b/uni_modules/uv-album/readme.md @@ -0,0 +1,21 @@ +# Album 相册 + +> **组件名:uv-album** + +本组件提供一个类似相册的功能,让开发者开发起来更加得心应手。 + +功能齐全,灵活配置可以,开箱即用。减少重复的模板代码。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-alert/changelog.md b/uni_modules/uv-alert/changelog.md new file mode 100644 index 0000000..71cca03 --- /dev/null +++ b/uni_modules/uv-alert/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-01) +1. 修复点击触发两次实践的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-alert 警告提示组件 diff --git a/uni_modules/uv-alert/components/uv-alert/props.js b/uni_modules/uv-alert/components/uv-alert/props.js new file mode 100644 index 0000000..cc8edc1 --- /dev/null +++ b/uni_modules/uv-alert/components/uv-alert/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 显示文字 + title: { + type: String, + default: '' + }, + // 主题,success/warning/info/error + type: { + type: String, + default: 'warning' + }, + // 辅助性文字 + description: { + type: String, + default: '' + }, + // 是否可关闭 + closable: { + type: Boolean, + default: false + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: false + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: 'light' + }, + // 文字是否居中 + center: { + type: Boolean, + default: false + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + ...uni.$uv?.props?.alert + } +} \ No newline at end of file diff --git a/uni_modules/uv-alert/components/uv-alert/uv-alert.vue b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue new file mode 100644 index 0000000..ba3965e --- /dev/null +++ b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/uni_modules/uv-alert/package.json b/uni_modules/uv-alert/package.json new file mode 100644 index 0000000..34bec20 --- /dev/null +++ b/uni_modules/uv-alert/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-alert", + "displayName": "uv-alert 警告提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-alert 警告提示,展现需要关注的信息。灵活配置,功能齐全,兼容全端", + "keywords": [ + "alert", + "uvui", + "uv-ui", + "警告提示" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-alert/readme.md b/uni_modules/uv-alert/readme.md new file mode 100644 index 0000000..63dda76 --- /dev/null +++ b/uni_modules/uv-alert/readme.md @@ -0,0 +1,15 @@ +## Alert 警告提示 + +> **组件名:uv-alert** + +警告提示,展现需要关注的信息。 + +当某个页面需要向用户显示警告的信息时。 + +非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-avatar/changelog.md b/uni_modules/uv-avatar/changelog.md new file mode 100644 index 0000000..8631c86 --- /dev/null +++ b/uni_modules/uv-avatar/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-06) +1. 优化 +## 1.0.4(2023-12-06) +1. 优化 +## 1.0.3(2023-12-06) +1. 阻止事件冒泡处理,单个头像模式 +## 1.0.2(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-avatar 头像组件 diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/props.js b/uni_modules/uv-avatar/components/uv-avatar-group/props.js new file mode 100644 index 0000000..a610ab4 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar-group/props.js @@ -0,0 +1,53 @@ +export default { + props: { + // 头像图片组 + urls: { + type: Array, + default: () => [] + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: 5 + }, + // 头像形状 + shape: { + type: String, + default: 'circle' + }, + // 图片裁剪模式 + mode: { + type: String, + default: 'scaleToFill' + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: true + }, + // 头像大小 + size: { + type: [String, Number], + default: 40 + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: '' + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: 0.5 + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: 0 + }, + ...uni.$uv?.props?.avatarGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue new file mode 100644 index 0000000..59481f6 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/uni_modules/uv-avatar/components/uv-avatar/props.js b/uni_modules/uv-avatar/components/uv-avatar/props.js new file mode 100644 index 0000000..6c8d725 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar/props.js @@ -0,0 +1,80 @@ +import { range } from '@/uni_modules/uv-ui-tools/libs/function/test.js' +export default { + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: '' + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'circle' + }, + // 头像尺寸 + size: { + type: [String, Number], + default: 40 + }, + // 裁剪模式 + mode: { + type: String, + default: 'scaleToFill' + }, + // 显示的文字 + text: { + type: String, + default: '' + }, + // 背景色 + bgColor: { + type: String, + default: '#c0c4cc' + }, + // 文字颜色 + color: { + type: String, + default: '#fff' + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: 18 + }, + // 显示的图标 + icon: { + type: String, + default: '' + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: false + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: false + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: '' + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return range(n, [0, 19]) || n === '' + }, + default: '' + }, + // 组件标识符 + name: { + type: String, + default: '' + }, + ...uni.$uv?.props?.avatar + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue new file mode 100644 index 0000000..0959d6a --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/uni_modules/uv-avatar/package.json b/uni_modules/uv-avatar/package.json new file mode 100644 index 0000000..e77ab68 --- /dev/null +++ b/uni_modules/uv-avatar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-avatar", + "displayName": "uv-avatar 头像 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.5", + "description": "uv-avatar 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。", + "keywords": [ + "uv-avatar", + "uvui", + "uv-ui", + "avatar", + "头像" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-text" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/readme.md b/uni_modules/uv-avatar/readme.md new file mode 100644 index 0000000..1f068eb --- /dev/null +++ b/uni_modules/uv-avatar/readme.md @@ -0,0 +1,11 @@ +## Avatar 头像 + +> **组件名:uv-avatar** + +本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-back-top/changelog.md b/uni_modules/uv-back-top/changelog.md new file mode 100644 index 0000000..9772262 --- /dev/null +++ b/uni_modules/uv-back-top/changelog.md @@ -0,0 +1,8 @@ +## 1.0.2(2023-07-03) +1. 优化插槽自定义内容部分 +2. 增加backToTop方法说明 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-back-top 返回顶部 diff --git a/uni_modules/uv-back-top/components/uv-back-top/props.js b/uni_modules/uv-back-top/components/uv-back-top/props.js new file mode 100644 index 0000000..74daff4 --- /dev/null +++ b/uni_modules/uv-back-top/components/uv-back-top/props.js @@ -0,0 +1,58 @@ +export default { + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: 'circle' + }, + // 自定义图标 + icon: { + type: String, + default: 'arrow-upward' + }, + // 提示文字 + text: { + type: String, + default: '' + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: 100 + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: 0 + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: 400 + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: 100 + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: 20 + }, + // 层级 + zIndex: { + type: [String, Number], + default: 9 + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: () => ({ + color: '#909399', + fontSize: '19px' + }) + }, + ...uni.$uv?.props?.backtop + } +} \ No newline at end of file diff --git a/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue new file mode 100644 index 0000000..fad73d4 --- /dev/null +++ b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-back-top/package.json b/uni_modules/uv-back-top/package.json new file mode 100644 index 0000000..a2035a5 --- /dev/null +++ b/uni_modules/uv-back-top/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-back-top", + "displayName": "uv-back-top 返回顶部 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "返回顶部 组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。", + "keywords": [ + "uv-back-top", + "uvui", + "uv-ui", + "avatar", + "返回顶部" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-back-top/readme.md b/uni_modules/uv-back-top/readme.md new file mode 100644 index 0000000..d6a2aec --- /dev/null +++ b/uni_modules/uv-back-top/readme.md @@ -0,0 +1,11 @@ +## BackTop 返回顶部 + +> **组件名:uv-back-top** + +该组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-badge/changelog.md b/uni_modules/uv-badge/changelog.md new file mode 100644 index 0000000..b0ba104 --- /dev/null +++ b/uni_modules/uv-badge/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-04) +1. 修复type等属性为null的时候不显示徽标的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-badge 徽标数,数字角标 diff --git a/uni_modules/uv-badge/components/uv-badge/props.js b/uni_modules/uv-badge/components/uv-badge/props.js new file mode 100644 index 0000000..c6369c3 --- /dev/null +++ b/uni_modules/uv-badge/components/uv-badge/props.js @@ -0,0 +1,73 @@ +export default { + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: false + }, + // 显示的内容 + value: { + type: [Number, String], + default: '' + }, + // 是否显示 + show: { + type: Boolean, + default: true + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: 999 + }, + // 主题类型,error|warning|success|primary + type: { + type: [String,undefined,null], + default: 'error' + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: false + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: null + }, + // 字体颜色 + color: { + type: [String, null], + default: null + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: [String,undefined,null], + default: 'circle' + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: [String,undefined,null], + default: 'overflow' + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: () => [] + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: false + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.badge + } +} \ No newline at end of file diff --git a/uni_modules/uv-badge/components/uv-badge/uv-badge.vue b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue new file mode 100644 index 0000000..f7d3911 --- /dev/null +++ b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/uni_modules/uv-badge/package.json b/uni_modules/uv-badge/package.json new file mode 100644 index 0000000..5a81386 --- /dev/null +++ b/uni_modules/uv-badge/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-badge", + "displayName": "uv-badge 徽标数,数字角标 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "徽标数一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。", + "keywords": [ + "uv-badge", + "uvui", + "uv-ui", + "徽标数", + "数字角标" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-badge/readme.md b/uni_modules/uv-badge/readme.md new file mode 100644 index 0000000..cf597eb --- /dev/null +++ b/uni_modules/uv-badge/readme.md @@ -0,0 +1,11 @@ +## Badge 徽标数 + +> **组件名:uv-badge** + +该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-button/changelog.md b/uni_modules/uv-button/changelog.md new file mode 100644 index 0000000..11e954e --- /dev/null +++ b/uni_modules/uv-button/changelog.md @@ -0,0 +1,33 @@ +## 1.0.15(2023-12-20) +1. 优化 +## 1.0.14(2023-12-06) +1. 优化 +## 1.0.13(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.12(2023-10-19) +1. 增加后置插槽 +## 1.0.11(2023-09-21) +1. 修复通过customStyle修改按钮宽度,组件中最外层节点不改变的问题 +## 1.0.10(2023-09-15) +1. 按钮支持open-type="agreePrivacyAuthorization" +## 1.0.9(2023-09-11) +1. 增加参数iconSize,用于控制图标的大小 +## 1.0.8(2023-09-10) +1. 修复多个按钮在一行宽度不正常的BUG +## 1.0.7(2023-09-07) +1. 修复warning颜色对应错误的BUG +## 1.0.6(2023-07-25) +1. 增加customTextStyle属性,方便自定义文字样式 +## 1.0.5(2023-07-20) +1. 解决微信小程序动态设置hover-class点击态不消失的BUG +## 1.0.4(2023-06-29) +1. 修改上次更新出现nvue报错异常 +## 1.0.3(2023-06-28) + 修复:设置open-type="chooseAvatar"等值不生效的BUG +## 1.0.2(2023-06-01) +1. 修复按钮点击触发两次的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-button 按钮 diff --git a/uni_modules/uv-button/components/uv-button/nvue.scss b/uni_modules/uv-button/components/uv-button/nvue.scss new file mode 100644 index 0000000..be6c16e --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/nvue.scss @@ -0,0 +1,46 @@ +$uv-button-active-opacity:0.75 !default; +$uv-button-loading-text-margin-left:4px !default; +$uv-button-text-color: #FFFFFF !default; +$uv-button-text-plain-error-color:$uv-error !default; +$uv-button-text-plain-warning-color:$uv-warning !default; +$uv-button-text-plain-success-color:$uv-success !default; +$uv-button-text-plain-info-color:$uv-info !default; +$uv-button-text-plain-primary-color:$uv-primary !default; +.uv-button { + &--active { + opacity: $uv-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$uv-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$uv-button-text-color; + } + + &__text--plain--error { + color:$uv-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$uv-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$uv-button-text-plain-success-color; + } + + &__text--plain--info { + color:$uv-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$uv-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/uni_modules/uv-button/components/uv-button/props.js b/uni_modules/uv-button/components/uv-button/props.js new file mode 100644 index 0000000..6275ad5 --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/props.js @@ -0,0 +1,163 @@ +export default { + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: true + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: 'info' + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: 'normal' + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: 'square' + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: false + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: false + }, + // 是否加载中 + loading: { + type: Boolean, + default: false + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: '' + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: 'spinner' + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: 14 + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: '' + }, + // 用于
组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: '' + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: '' + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: true + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: 'en' + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: '' + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: '' + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: '' + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: '' + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: true + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: '' + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: 0 + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: 0 + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: 200 + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: '' + }, + // 按钮图标 + icon: { + type: String, + default: '' + }, + // 按钮图标大小 + iconSize: { + type: [String, Number], + default: '' + }, + // 按钮图标颜色 + iconColor: { + type: String, + default: '#000000' + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: '' + }, + // 自定义按钮文本样式 + customTextStyle: { + type: [Object,String], + default: '' + }, + ...uni.$uv?.props?.button + } +} diff --git a/uni_modules/uv-button/components/uv-button/uv-button.vue b/uni_modules/uv-button/components/uv-button/uv-button.vue new file mode 100644 index 0000000..3a2470a --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/uv-button.vue @@ -0,0 +1,528 @@ + + + + + diff --git a/uni_modules/uv-button/components/uv-button/vue.scss b/uni_modules/uv-button/components/uv-button/vue.scss new file mode 100644 index 0000000..7a089be --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/vue.scss @@ -0,0 +1,93 @@ +@import '@/uni_modules/uv-ui-tools/libs/css/color.scss'; +// nvue下hover-class无效 +$uv-button-before-top:50% !default; +$uv-button-before-left:50% !default; +$uv-button-before-width:100% !default; +$uv-button-before-height:100% !default; +$uv-button-before-transform:translate(-50%, -50%) !default; +$uv-button-before-opacity:0 !default; +$uv-button-before-background-color:#000 !default; +$uv-button-before-border-color:#000 !default; +$uv-button-active-before-opacity:.15 !default; +$uv-button-icon-margin-left:4px !default; +$uv-button-plain-uv-button-info-color:$uv-info; +$uv-button-plain-uv-button-success-color:$uv-success; +$uv-button-plain-uv-button-error-color:$uv-error; +$uv-button-plain-uv-button-warning-color:$uv-warning; + +.uv-button-wrapper { + position: relative; + &--dis { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: 9; + } +} + +.uv-button { + width: 100%; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$uv-button-before-top; + left:$uv-button-before-left; + width:$uv-button-before-width; + height:$uv-button-before-height; + border: inherit; + border-radius: inherit; + transform:$uv-button-before-transform; + opacity:$uv-button-before-opacity; + content: " "; + background-color:$uv-button-before-background-color; + border-color:$uv-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$uv-button-icon-margin-left; + } + + &--plain { + &.uv-button--primary { + color: $uv-primary; + } + } + + &--plain { + &.uv-button--info { + color:$uv-button-plain-uv-button-info-color; + } + } + + &--plain { + &.uv-button--success { + color:$uv-button-plain-uv-button-success-color; + } + } + + &--plain { + &.uv-button--error { + color:$uv-button-plain-uv-button-error-color; + } + } + + &--plain { + &.uv-button--warning { + color:$uv-button-plain-uv-button-warning-color; + } + } +} diff --git a/uni_modules/uv-button/package.json b/uni_modules/uv-button/package.json new file mode 100644 index 0000000..c2a4a17 --- /dev/null +++ b/uni_modules/uv-button/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-button", + "displayName": "uv-button 按钮 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "按钮组件内部实现以uni-app的button组件为基础,进行二次封装,灵活配置,功能齐全,兼容全端。", + "keywords": [ + "uv-button", + "uvui", + "uv-ui", + "button", + "按钮" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-loading-icon", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-button/readme.md b/uni_modules/uv-button/readme.md new file mode 100644 index 0000000..124a7f4 --- /dev/null +++ b/uni_modules/uv-button/readme.md @@ -0,0 +1,19 @@ +## Button 按钮 + +> **组件名:uv-button** + +该组件内部实现以`uni-app`的`button`组件为基础,进行二次封装,灵活配置,功能齐全,兼容全端。灵活配置,内置状态设置,开箱即用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-calendar/changelog.md b/uni_modules/uv-calendar/changelog.md new file mode 100644 index 0000000..581562a --- /dev/null +++ b/uni_modules/uv-calendar/changelog.md @@ -0,0 +1,16 @@ +## 1.0.6(2023-11-03) +1. **该版本不再维护**,推荐使用新版本[https://ext.dcloud.net.cn/plugin?name=uv-calendars](https://ext.dcloud.net.cn/plugin?name=uv-calendars) +## 1.0.5(2023-07-02) +uv-calendar 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/calendar.html +## 1.0.4(2023-06-15) +1. formatter格式化中增加topInfo参数 +## 1.0.3(2023-06-08) +1. 增加点击日期change回调 +2. 优化 +## 1.0.2(2023-06-05) +1. 修改多个时间选择的时候存在反选的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-calendar 日历 diff --git a/uni_modules/uv-calendar/components/uv-calendar/calendar.js b/uni_modules/uv-calendar/components/uv-calendar/calendar.js new file mode 100644 index 0000000..e006dea --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default: + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uv-calendar/components/uv-calendar/header.vue b/uni_modules/uv-calendar/components/uv-calendar/header.vue new file mode 100644 index 0000000..d7daa7b --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/header.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/uni_modules/uv-calendar/components/uv-calendar/month.vue b/uni_modules/uv-calendar/components/uv-calendar/month.vue new file mode 100644 index 0000000..1a649bc --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/month.vue @@ -0,0 +1,616 @@ + + + + + diff --git a/uni_modules/uv-calendar/components/uv-calendar/props.js b/uni_modules/uv-calendar/components/uv-calendar/props.js new file mode 100644 index 0000000..c359293 --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/props.js @@ -0,0 +1,145 @@ +export default { + props: { + // 日历顶部标题 + title: { + type: String, + default: '日期选择' + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: true + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: true + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: 'single' + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: '开始' + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: '结束' + }, + // 自定义列表 + customList: { + type: Array, + default: () => [] + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: '#3c9cff' + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: 0 + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: 0 + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: null + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: Number.MAX_SAFE_INTEGER + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: 56 + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: null + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: false + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: true + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: '确定' + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: '确定' + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: false + }, + // 是否允许点击确认按钮关闭日历 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: false + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: true + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 Infinity + maxRange: { + type: [Number, String], + default: Number.MAX_SAFE_INTEGER + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: '' + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: true + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: false + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: 0 + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + }, + ...uni.$uv?.props?.calendar + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue b/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue new file mode 100644 index 0000000..626e833 --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue @@ -0,0 +1,390 @@ + + + + + diff --git a/uni_modules/uv-calendar/package.json b/uni_modules/uv-calendar/package.json new file mode 100644 index 0000000..03d8812 --- /dev/null +++ b/uni_modules/uv-calendar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-calendar", + "displayName": "uv-calendar 日历 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.6", + "description": "日历组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中,灵活配置,功能齐全,兼容全端。强烈推荐使用最新版日历组件,在下方跳入。", + "keywords": [ + "uv-calendar", + "uvui", + "uv-ui", + "calendar", + "日历" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-button", + "uv-popup" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendar/readme.md b/uni_modules/uv-calendar/readme.md new file mode 100644 index 0000000..3c2de54 --- /dev/null +++ b/uni_modules/uv-calendar/readme.md @@ -0,0 +1,21 @@ +## Calendar 日历 + +> **组件名:uv-calendar** + +此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。灵活配置,功能齐全,兼容全端。 + +## 温馨提示:该组件不再更新,强烈推荐使用最新版日历组件:[https://www.uvui.cn/components/calendars.html](https://www.uvui.cn/components/calendars.html)。基于 `uv-ui` 插件市场首款多功能日历组件,不仅可以查看、选择日期,还可以选择任意范围内的日期、打点操作、自定义主题颜色、自定义文案、农历显示等。追求的就是完美。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-calendars/changelog.md b/uni_modules/uv-calendars/changelog.md new file mode 100644 index 0000000..b3b2e38 --- /dev/null +++ b/uni_modules/uv-calendars/changelog.md @@ -0,0 +1,40 @@ +## 1.0.15(2023-11-08) +1. 增加readonly属性,是否为只读状态,只读状态下禁止选择日期 +## 1.0.14(2023-10-12) +1. 修复selected没有设置了info或者info设置为空字符串后,文本则无法恢复BUG +## 1.0.13(2023-09-19) +1. 修复range模式下,selected设置了info后选中后,导致文本不恢复的问题 +2. 修复multiple模式下,selected自定义信息的颜色没变,依然是白色 +## 1.0.12(2023-09-14) +1. 优化 +## 1.0.11(2023-09-14) +1. 增加allowSameDay参数,是否允许日期范围的起止时间为同一天,mode = range时有效 +2. 修复在vue2+小程序渲染时闪烁的问题 +## 1.0.10(2023-09-07) +1. 修复国际化失效的BUG +## 1.0.9(2023-09-01) +1. 修复在pages.json中设置easycom会报错的BUG +## 1.0.8(2023-08-29) +1. 修复mainjs中设置setConfig修改属性不生效的问题,出自评论区:https://ext.dcloud.net.cn/plugin?id=12287 +## 1.0.7(2023-08-26) +1. 去除range参数,由mode="range"替换 +2. 新增mode参数,不传 / multiple / range,分别为单日期, 多个日期,选择日期范围 +3. 与uv-calendar选择日期的功能保持一致 +## 1.0.6(2023-08-25) +1. 修复点击返回今天按钮时,monthSwitch方法回调参数返回月份不是当天对应月份:https://github.com/climblee/uv-ui/issues/7 +## 1.0.5(2023-08-13) +1. 修复选择月份弹窗层级的问题 +## 1.0.4(2023-08-06) +1. 优化 +## 1.0.3(2023-08-06) +1. 修复高度不对的BUG +2. 修复文案在小屏幕的BUG +## 1.0.2(2023-08-05) +1. 增加startText参数 +2. 增加endText参数 +3. 增加selected中的参数 +4. 优化日历范围选择 +## 1.0.1(2023-08-04) +1. 修复 自定义主题时 颜色错误的BUG +## 1.0.0(2023-08-03) +1. 新增 uv-calendars 新版日历发布 diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue b/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue new file mode 100644 index 0000000..b675fbd --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue @@ -0,0 +1,376 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue b/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue new file mode 100644 index 0000000..862d068 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue @@ -0,0 +1,248 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar.js b/uni_modules/uv-calendars/components/uv-calendars/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json new file mode 100644 index 0000000..c83e8b2 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "ok", + "uv-calender.cancel": "cancel", + "uv-calender.today": "today", + "uv-calender.MON": "MON", + "uv-calender.TUE": "TUE", + "uv-calender.WED": "WED", + "uv-calender.THU": "THU", + "uv-calender.FRI": "FRI", + "uv-calender.SAT": "SAT", + "uv-calender.SUN": "SUN" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js b/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json new file mode 100644 index 0000000..03c5486 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "确定", + "uv-calender.cancel": "取消", + "uv-calender.today": "今日", + "uv-calender.SUN": "日", + "uv-calender.MON": "一", + "uv-calender.TUE": "二", + "uv-calender.WED": "三", + "uv-calender.THU": "四", + "uv-calender.FRI": "五", + "uv-calender.SAT": "六" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json new file mode 100644 index 0000000..95cf29e --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "確定", + "uv-calender.cancel": "取消", + "uv-calender.today": "今日", + "uv-calender.SUN": "日", + "uv-calender.MON": "一", + "uv-calender.TUE": "二", + "uv-calender.WED": "三", + "uv-calender.THU": "四", + "uv-calender.FRI": "五", + "uv-calender.SAT": "六" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/util.js b/uni_modules/uv-calendars/components/uv-calendars/util.js new file mode 100644 index 0000000..ae1c6d6 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/util.js @@ -0,0 +1,435 @@ +import CALENDAR from './calendar.js' +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + multiple, + allowSameDay + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + this.multiple = multiple + this.allowSameDay = allowSameDay + // 多选状态 + this.cleanRangeStatus() + // 范围状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date, status) { + if (this.range && status == 'init') { + this.cleanRangeStatus(); + if (Array.isArray(date)) { + this.rangeStatus.before = date[0]; + this.rangeStatus.after = date.length > 1 ? date[date.length - 1] : ''; + if (this.rangeStatus.after && this.dateCompare(this.rangeStatus.before, this.rangeStatus.after)) { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.before, this.rangeStatus.after) + } + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this.rangeStatus.before = this.selectDate.fullDate; + this._getWeek(this.selectDate.fullDate) + } + } else if (this.multiple && status == 'init') { + this.cleanMultipleStatus(); + if (Array.isArray(date)) { + this.multipleStatus.data = date; + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this.multipleStatus.data = [this.selectDate.fullDate]; + this._getWeek(this.selectDate.fullDate) + } + } else { + if (Array.isArray(date)) { + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + } + } + /** + * 清理多选状态 + */ + cleanRangeStatus() { + this.rangeStatus = { + before: '', + after: '', + data: [] + } + } + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + data: [] + } + } + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + } + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount > 0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if (AddDayCount < 0 && preMonth !== 0 && nextMonth - preMonth > AddDayCount) { + dd.setMonth(nextMonth + (nextMonth - preMonth + AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if (AddDayCount > 0 && nextMonth - preMonth > AddDayCount) { + dd.setMonth(nextMonth - (nextMonth - preMonth - AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let nowDate = full.year + '-' + (full.month < 10 ? full.month : full.month) + '-' + (i < 10 ? '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let ranges = this.rangeStatus.data + let checked = false + let rangesStatus = -1 + if (this.range) { + if (ranges) { + rangesStatus = ranges.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (rangesStatus !== -1) { + checked = true + } + } + let multiples = this.multipleStatus.data + let checked_multiple = false + let multiplesStatus = -1 + if (this.multiple) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked_multiple = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + range: this.range ? checked : false, + multiple: this.multiple ? checked_multiple : false, + beforeRange: this.dateEqual(this.rangeStatus.before, nowDate), + afterRange: this.dateEqual(this.rangeStatus.after, nowDate), + dateEqual: this.range && checked && this.dateEqual(this.rangeStatus.before, this.rangeStatus.after), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } else if (Array.isArray(date)) { + date = date[0] + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + /** + * 比较after时间是否大于before时间 + */ + dateAfterLgBefore(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (after.getTime() - before.getTime() > 0) { + return true + } else { + return false + } + } + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + if (!this.multiple) return + let multiples = this.multipleStatus.data; + const findIndex = multiples.findIndex(item => this.dateEqual(fullDate, item)); + if (findIndex < 0) { + this.multipleStatus.data = this.multipleStatus.data.concat([fullDate]); + } else { + this.multipleStatus.data.splice(findIndex, 1); + } + this._getWeek(fullDate) + } + /** + * 获取范围状态 + */ + setRange(fullDate) { + let { + before, + after + } = this.rangeStatus + if (!this.range) return + if (before && after) { + this.cleanRangeStatus(); + this.rangeStatus.before = fullDate + } else { + if (!before) { + this.rangeStatus.before = fullDate + } else { + if (this.allowSameDay && this.dateEqual(before, fullDate)) { + this.rangeStatus.after = fullDate + } else if (!this.dateAfterLgBefore(this.rangeStatus.before, fullDate)) { + this.cleanRangeStatus(); + this.rangeStatus.before = fullDate + this._getWeek(fullDate) + return; + } + this.rangeStatus.after = fullDate + if (this.dateCompare(this.rangeStatus.before, this.rangeStatus.after)) { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.before, this.rangeStatus.after); + } else { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.after, this.rangeStatus.before); + } + } + } + this._getWeek(fullDate) + } + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + year, + month + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} +export default Calendar \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue b/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue new file mode 100644 index 0000000..8d5b377 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue @@ -0,0 +1,452 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/package.json b/uni_modules/uv-calendars/package.json new file mode 100644 index 0000000..7153510 --- /dev/null +++ b/uni_modules/uv-calendars/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-calendars", + "displayName": "uv-calendars 最新日历 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "新版本uv-calendars,不仅拥有老版本的所有功能,还增加了更加适用的插入页面等强大功能,且更加简洁。查看日期、选择单个或多个或任意范围日期,打点操作,自定义文案,自定义主题等强大功能。", + "keywords": [ + "uv-ui", + "uvui", + "日历", + "打卡", + "日历选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration":{ + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-toolbar" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendars/readme.md b/uni_modules/uv-calendars/readme.md new file mode 100644 index 0000000..d986eb9 --- /dev/null +++ b/uni_modules/uv-calendars/readme.md @@ -0,0 +1,23 @@ +## Calendars 全新日历 + +> **组件名:uv-calendars** + +为了解决老版本`uv-calendar`性能问题,特别是对日期选择范围有很大限制,体验不友好等缺点。于是有了新版日历组件。 + +新版本`uv-calendars`,不仅拥有老版本的所有功能,还增加了更加适用的插入页面等强大功能,且更加简洁。查看日期、选择单个或多个或任意范围日期,打点操作,自定义文案,自定义主题等强大功能。 + +常用场景:酒店日期预订、火车机票选择购买日期、上下班打卡等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-cell/changelog.md b/uni_modules/uv-cell/changelog.md new file mode 100644 index 0000000..c342b0c --- /dev/null +++ b/uni_modules/uv-cell/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-06) +1. 修复uv-cell right-icon插槽编译到APP端不显示的BUG,问题来源:https://gitee.com/climblee/uv-ui/issues/I8LXZI +## 1.0.4(2023-09-19) +1. 增加cellStyle参数,方便自定义单元格的样式 +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-06-21) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-cell 单元格 diff --git a/uni_modules/uv-cell/components/uv-cell-group/props.js b/uni_modules/uv-cell/components/uv-cell-group/props.js new file mode 100644 index 0000000..57deb4c --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell-group/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 分组标题 + title: { + type: String, + default: '' + }, + // 是否显示外边框 + border: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.cellGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue b/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue new file mode 100644 index 0000000..0f17865 --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/uni_modules/uv-cell/components/uv-cell/props.js b/uni_modules/uv-cell/components/uv-cell/props.js new file mode 100644 index 0000000..6579636 --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell/props.js @@ -0,0 +1,116 @@ +export default { + props: { + // 标题 + title: { + type: [String, Number], + default: '' + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: '' + }, + // 右侧的内容 + value: { + type: [String, Number], + default: '' + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: '' + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: false + }, + // 是否显示下边框 + border: { + type: Boolean, + default: true + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: true + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: '' + }, + // 链接跳转的方式,内部使用的是uvui封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: 'navigateTo' + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: false + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: false + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: false + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: 'arrow-right' + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: '' + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: '' + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: true + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: '' + }, + // 单元格自定义样式 + cellStyle: { + type: [Object, String], + default: () => {} + }, + ...uni.$uv?.props?.cell + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/components/uv-cell/uv-cell.vue b/uni_modules/uv-cell/components/uv-cell/uv-cell.vue new file mode 100644 index 0000000..bdd268e --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell/uv-cell.vue @@ -0,0 +1,209 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-cell/package.json b/uni_modules/uv-cell/package.json new file mode 100644 index 0000000..8ff5cf6 --- /dev/null +++ b/uni_modules/uv-cell/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-cell", + "displayName": "uv-cell 单元格 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.5", + "description": "cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。", + "keywords": [ + "uv-cell", + "uvui", + "uv-ui", + "单元格", + "设置页" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-line" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/readme.md b/uni_modules/uv-cell/readme.md new file mode 100644 index 0000000..3ea9937 --- /dev/null +++ b/uni_modules/uv-cell/readme.md @@ -0,0 +1,11 @@ +## Cell 单元格 + +> **组件名:uv-cell** + +cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-checkbox/changelog.md b/uni_modules/uv-checkbox/changelog.md new file mode 100644 index 0000000..2a142ce --- /dev/null +++ b/uni_modules/uv-checkbox/changelog.md @@ -0,0 +1,34 @@ +## 1.0.14(2023-11-04) +1. 修复label文字较多不分行的问题 +## 1.0.13(2023-10-11) +1. 优化同类问题:https://gitee.com/climblee/uv-ui/issues/I872VD +## 1.0.12(2023-09-22) +1. 修复change回调中v-model值不更新的BUG +## 1.0.11(2023-09-01) +1. 修复点击空隙处无效的问题 +2. label支持插槽下可点击 +## 1.0.10(2023-08-27) +1. 修复label设置布尔值不生效的BUG +## 1.0.9(2023-08-16) +1. 解决数据多不换行的BUG +## 1.0.8(2023-07-13) +1. 修复 uv-checkbox设置value属性不生效的BUG +## 1.0.7(2023-07-05) +修复vue3模式下,动态修改v-model绑定的值无效的BUG +## 1.0.6(2023-06-29) +1. 增加label插槽,与radio保持一致 +2. 优化文档 +## 1.0.5(2023-06-12) +1. 修复1.0.4改出的问题 +## 1.0.4(2023-06-08) +1. 复选框修复全局设置不生效的BUG +## 1.0.3(2023-06-06) +1. uv-checkbox-group 兼容自定义样式customStyle,方便通过样式调整整体位置等; +2. .uv-checkbox-group--row增加flex-wrap: wrap;允许换行 +## 1.0.2(2023-05-30) +1. 修复error报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-checkbox 复选框 diff --git a/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js b/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js new file mode 100644 index 0000000..47bf005 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 绑定的值 + value: { + type: Array, + default: () => [] + }, + modelValue: { + type: Array, + default: () => [] + }, + // 标识符 + name: { + type: String, + default: '' + }, + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: false + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: '#2979ff' + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: '#c8c9cc' + }, + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: 18 + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: 'row' + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: 14 + }, + // label的字体颜色 + labelColor: { + type: [String], + default: '#303133' + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: false + }, + // 图标颜色 + iconColor: { + type: String, + default: '#fff' + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: 12 + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: 'left' + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.checkboxGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue b/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue new file mode 100644 index 0000000..d5ea81f --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/uni_modules/uv-checkbox/components/uv-checkbox/props.js b/uni_modules/uv-checkbox/components/uv-checkbox/props.js new file mode 100644 index 0000000..58ec890 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox/props.js @@ -0,0 +1,70 @@ +export default { + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: '' + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: '' + }, + // 整体的大小 + size: { + type: [String, Number], + default: '' + }, + // 是否默认选中 + checked: { + type: Boolean, + default: false + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: '' + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: '' + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: '' + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: '' + }, + // 图标颜色 + iconColor: { + type: String, + default: '' + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number, Boolean], + default: '' + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: '' + }, + // label的颜色 + labelColor: { + type: String, + default: '' + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: '' + }, + ...uni.$uv?.props?.checkbox + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue b/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue new file mode 100644 index 0000000..dfd1912 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/uni_modules/uv-checkbox/package.json b/uni_modules/uv-checkbox/package.json new file mode 100644 index 0000000..44944d9 --- /dev/null +++ b/uni_modules/uv-checkbox/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-checkbox", + "displayName": "uv-checkbox 复选框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.14", + "description": "复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便。", + "keywords": [ + "uv-checkbox", + "uvui", + "uv-ui", + "checkbox", + "复选框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/readme.md b/uni_modules/uv-checkbox/readme.md new file mode 100644 index 0000000..43b6f2e --- /dev/null +++ b/uni_modules/uv-checkbox/readme.md @@ -0,0 +1,19 @@ +## Checkbox 复选框 + +> **组件名:uv-checkbox** + +复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便。可配合 `uv-form` 组件进行表单验证等场景使用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-code-input/changelog.md b/uni_modules/uv-code-input/changelog.md new file mode 100644 index 0000000..1fefc03 --- /dev/null +++ b/uni_modules/uv-code-input/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-08-05) +在vue2模式下,v-model设置为0时不生效的BUG +## 1.0.4(2023-07-13) +1. 修复value/v-model更改不生效的BUG +## 1.0.3(2023-06-28) +修复:使用:disabledKeyboard="true"属性,事件全部失效的BUG +## 1.0.2(2023-06-23) +优化下边框 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-code-input 验证码输入 diff --git a/uni_modules/uv-code-input/components/uv-code-input/props.js b/uni_modules/uv-code-input/components/uv-code-input/props.js new file mode 100644 index 0000000..4a5e460 --- /dev/null +++ b/uni_modules/uv-code-input/components/uv-code-input/props.js @@ -0,0 +1,83 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: true + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: 6 + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: false + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: 'box' + }, + // 是否细边框 + hairline: { + type: Boolean, + default: false + }, + // 字符间的距离 + space: { + type: [String, Number], + default: 10 + }, + // 是否自动获取焦点 + focus: { + type: Boolean, + default: false + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: false + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 18 + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: 35 + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: false + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: '#c9cacc' + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.codeInput + } +} \ No newline at end of file diff --git a/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue b/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue new file mode 100644 index 0000000..14ad8a2 --- /dev/null +++ b/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue @@ -0,0 +1,272 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-code-input/package.json b/uni_modules/uv-code-input/package.json new file mode 100644 index 0000000..ab8762c --- /dev/null +++ b/uni_modules/uv-code-input/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-code-input", + "displayName": "uv-code-input 验证码输入 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "验证码输入组件一般用于验证用户短信验证码的场景,输入框或横线多种模式可选。", + "keywords": [ + "uv-code-input", + "uvui", + "uv-ui", + "code", + "验证码输入" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-code-input/readme.md b/uni_modules/uv-code-input/readme.md new file mode 100644 index 0000000..aa5b0a1 --- /dev/null +++ b/uni_modules/uv-code-input/readme.md @@ -0,0 +1,19 @@ +## CodeInput 验证码输入框 + +> **组件名:uv-code-input** + +该组件一般用于验证用户短信验证码的场景,输入框或横线多种模式可选。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-code/changelog.md b/uni_modules/uv-code/changelog.md new file mode 100644 index 0000000..7054a25 --- /dev/null +++ b/uni_modules/uv-code/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. 优化 +## 1.0.2(2023-10-13) +1. unmounted兼容vue3 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-code 验证码倒计时 diff --git a/uni_modules/uv-code/components/uv-code/props.js b/uni_modules/uv-code/components/uv-code/props.js new file mode 100644 index 0000000..afc9d3c --- /dev/null +++ b/uni_modules/uv-code/components/uv-code/props.js @@ -0,0 +1,35 @@ +export default { + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: 60 + }, + // 尚未开始时提示 + startText: { + type: String, + default: '获取验证码' + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: 'X秒重新获取' + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: '重新获取' + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: false + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: '' + }, + ...uni.$uv?.props?.code + } +} \ No newline at end of file diff --git a/uni_modules/uv-code/components/uv-code/uv-code.vue b/uni_modules/uv-code/components/uv-code/uv-code.vue new file mode 100644 index 0000000..de02c83 --- /dev/null +++ b/uni_modules/uv-code/components/uv-code/uv-code.vue @@ -0,0 +1,136 @@ + + \ No newline at end of file diff --git a/uni_modules/uv-code/package.json b/uni_modules/uv-code/package.json new file mode 100644 index 0000000..d4392c0 --- /dev/null +++ b/uni_modules/uv-code/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-code", + "displayName": "uv-code 验证码倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件不提供界面显示,只提供倒计时文本,由用户将文本嵌入到具体的场景。", + "keywords": [ + "uv-code", + "uvui", + "uv-ui", + "code", + "验证码倒计时" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-code/readme.md b/uni_modules/uv-code/readme.md new file mode 100644 index 0000000..cf2eb51 --- /dev/null +++ b/uni_modules/uv-code/readme.md @@ -0,0 +1,11 @@ +## Code 验证码输入框 + +> **组件名:uv-code** + +考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件不提供界面显示,只提供倒计时文本,由用户将文本嵌入到具体的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-collapse/changelog.md b/uni_modules/uv-collapse/changelog.md new file mode 100644 index 0000000..0219560 --- /dev/null +++ b/uni_modules/uv-collapse/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-collapse 折叠面板 diff --git a/uni_modules/uv-collapse/components/uv-collapse-item/props.js b/uni_modules/uv-collapse/components/uv-collapse-item/props.js new file mode 100644 index 0000000..18983c1 --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse-item/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 标题 + title: { + type: String, + default: '' + }, + // 标题右侧内容 + value: { + type: String, + default: '' + }, + // 标题下方的描述信息 + label: { + type: String, + default: '' + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: false + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: true + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: true + }, + // 是否显示内边框 + border: { + type: Boolean, + default: true + }, + // 标题的对齐方式 + align: { + type: String, + default: 'left' + }, + // 唯一标识符 + name: { + type: [String, Number], + default: '' + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: '' + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: 300 + }, + ...uni.$uv?.props?.collapseItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue b/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue new file mode 100644 index 0000000..840f28d --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/uni_modules/uv-collapse/components/uv-collapse/props.js b/uni_modules/uv-collapse/components/uv-collapse/props.js new file mode 100644 index 0000000..70fa04c --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: null + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: false + }, + // 是否显示外边框 + border: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.collapse + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue b/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue new file mode 100644 index 0000000..5e5c96d --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue @@ -0,0 +1,86 @@ + + + diff --git a/uni_modules/uv-collapse/package.json b/uni_modules/uv-collapse/package.json new file mode 100644 index 0000000..cf9565f --- /dev/null +++ b/uni_modules/uv-collapse/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-collapse", + "displayName": "uv-collapse 折叠面板 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "折叠面板组件,通过折叠面板收纳内容区域,点击可展开收起,多功能参数可配置。", + "keywords": [ + "uv-collapse", + "uvui", + "uv-ui", + "collapse", + "折叠面板" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line", + "uv-cell" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/readme.md b/uni_modules/uv-collapse/readme.md new file mode 100644 index 0000000..cb340ba --- /dev/null +++ b/uni_modules/uv-collapse/readme.md @@ -0,0 +1,11 @@ +## Collapse 折叠面板 + +> **组件名:uv-collapse** + +通过折叠面板收纳内容区域,点击可展开收起,多功能参数可配置。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-count-down/changelog.md b/uni_modules/uv-count-down/changelog.md new file mode 100644 index 0000000..44392c2 --- /dev/null +++ b/uni_modules/uv-count-down/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-06-20) +1. 增加外部样式customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-down 倒计时 diff --git a/uni_modules/uv-count-down/components/uv-count-down/props.js b/uni_modules/uv-count-down/components/uv-count-down/props.js new file mode 100644 index 0000000..c5b5461 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: 0 + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: 'HH:mm:ss' + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: true + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.countDown + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-down/components/uv-count-down/utils.js b/uni_modules/uv-count-down/components/uv-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue b/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue new file mode 100644 index 0000000..a758d31 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-count-down/package.json b/uni_modules/uv-count-down/package.json new file mode 100644 index 0000000..da501f1 --- /dev/null +++ b/uni_modules/uv-count-down/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-down", + "displayName": "uv-count-down 倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "该倒计时组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。", + "keywords": [ + "uv-count-down", + "uvui", + "uv-ui", + "countDown", + "倒计时" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-down/readme.md b/uni_modules/uv-count-down/readme.md new file mode 100644 index 0000000..0f326a8 --- /dev/null +++ b/uni_modules/uv-count-down/readme.md @@ -0,0 +1,11 @@ +## CountDown 倒计时 + +> **组件名:uv-count-down** + +该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-count-to/changelog.md b/uni_modules/uv-count-to/changelog.md new file mode 100644 index 0000000..cf323f9 --- /dev/null +++ b/uni_modules/uv-count-to/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-06-20) +1. 优化 +## 1.0.3(2023-06-20) +1. 修复继续滚动的函数 +2. 修复其他 +## 1.0.2(2023-06-20) +1. 适配px和rpx的单位 +2. 适配customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-to 数字滚动 diff --git a/uni_modules/uv-count-to/components/uv-count-to/props.js b/uni_modules/uv-count-to/components/uv-count-to/props.js new file mode 100644 index 0000000..498371a --- /dev/null +++ b/uni_modules/uv-count-to/components/uv-count-to/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: 0 + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: 0 + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: 2000 + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: true + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: 0 + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: true + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: '.' + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 22 + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: false + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: '' + }, + ...uni.$uv?.props?.countTo + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue b/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue new file mode 100644 index 0000000..5f34167 --- /dev/null +++ b/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/uni_modules/uv-count-to/package.json b/uni_modules/uv-count-to/package.json new file mode 100644 index 0000000..1ed07dc --- /dev/null +++ b/uni_modules/uv-count-to/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-to", + "displayName": "uv-count-to 数字滚动 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "该数字滚动组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值,一种数字上升的视觉冲击效果。", + "keywords": [ + "countTo", + "uvui", + "uv-ui", + "数字滚动", + "数字变化" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-to/readme.md b/uni_modules/uv-count-to/readme.md new file mode 100644 index 0000000..5d5f996 --- /dev/null +++ b/uni_modules/uv-count-to/readme.md @@ -0,0 +1,11 @@ +## CountTo 数字滚动 + +> **组件名:uv-count-to** + +该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-datetime-picker/changelog.md b/uni_modules/uv-datetime-picker/changelog.md new file mode 100644 index 0000000..c56eabd --- /dev/null +++ b/uni_modules/uv-datetime-picker/changelog.md @@ -0,0 +1,34 @@ +## 1.0.15(2024-06-14) +1. 修复上次更改引出的BUG +## 1.0.14(2024-05-31) +1. 修复设置maxDate后存在选择不准确的BUG +## 1.0.13(2024-03-22) +1. 修复VUE3中出现的BUG +## 1.0.12(2023-11-27) +1. 增加round圆角属性 +## 1.0.11(2023-10-11) +1. 修复设置minDate出现选择错乱的BUG +## 1.0.10(2023-09-01) +1. 增加clearDate参数,是否清除上次选择,默认false +## 1.0.9(2023-08-31) +1. 增加mode="year",方便只选择年 +## 1.0.8(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.7(2023-07-13) +1. 修复 uv-datetime-picker 设置value属性不生效的BUG +## 1.0.6(2023-07-05) +修复vue3模式下,动态修改v-model绑定的值无效的BUG +## 1.0.5(2023-07-02) +uv-datetime-picker 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/datetimePicker.html +## 1.0.4(2023-06-29) +1. 修复抖音小程序报错的BUG +## 1.0.3(2023-06-07) +1. 取消defaultIndex参数,传该值没实际意义,后续更新文档 +## 1.0.2(2023-06-02) +1. 修复v-model重新赋值不更新的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-datetime-picker 时间选择器 diff --git a/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js new file mode 100644 index 0000000..6031d84 --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js @@ -0,0 +1,130 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 是否打开组件 + show: { + type: Boolean, + default: false + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: true + }, + // 顶部标题 + title: { + type: String, + default: '' + }, + // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择 + mode: { + type: String, + default: 'datetime' + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: new Date(new Date().getFullYear() + 10, 0, 1).getTime() + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: new Date(new Date().getFullYear() - 10, 0, 1).getTime() + }, + // 可选的最小小时,仅mode=time有效 + minHour: { + type: Number, + default: 0 + }, + // 可选的最大小时,仅mode=time有效 + maxHour: { + type: Number, + default: 23 + }, + // 可选的最小分钟,仅mode=time有效 + minMinute: { + type: Number, + default: 0 + }, + // 可选的最大分钟,仅mode=time有效 + maxMinute: { + type: Number, + default: 59 + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: null + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: null + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: false + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: 44 + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: '取消' + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: '确认' + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: '#909193' + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: '#3c9cff' + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: 5 + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 是否允许点击确认关闭选择器 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否清空上次选择内容 + clearDate: { + type: Boolean, + default: false + }, + // 圆角 + round: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.datetimePicker + } +} \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue new file mode 100644 index 0000000..d45c822 --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue @@ -0,0 +1,360 @@ + + \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/package.json b/uni_modules/uv-datetime-picker/package.json new file mode 100644 index 0000000..a2415b1 --- /dev/null +++ b/uni_modules/uv-datetime-picker/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-datetime-picker", + "displayName": "uv-datetime-picker 时间选择器 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "时间选择器组件用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。", + "keywords": [ + "datetime-picker", + "uvui", + "uv-ui", + "datetime", + "时间选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-picker" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/readme.md b/uni_modules/uv-datetime-picker/readme.md new file mode 100644 index 0000000..0db9d9c --- /dev/null +++ b/uni_modules/uv-datetime-picker/readme.md @@ -0,0 +1,19 @@ +## DatetimePicker 时间选择器 + +> **组件名:uv-datetime-picker** + +此选择器用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-divider/changelog.md b/uni_modules/uv-divider/changelog.md new file mode 100644 index 0000000..9ff8c52 --- /dev/null +++ b/uni_modules/uv-divider/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2023-12-06) +1. 优化 +## 1.0.3(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.2(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-divider 分割线 diff --git a/uni_modules/uv-divider/components/uv-divider/props.js b/uni_modules/uv-divider/components/uv-divider/props.js new file mode 100644 index 0000000..7b97c2c --- /dev/null +++ b/uni_modules/uv-divider/components/uv-divider/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: false + }, + // 是否细线 + hairline: { + type: Boolean, + default: true + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: false + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: 'center' + }, + // 文本内容 + text: { + type: [String, Number], + default: '' + }, + // 文本大小 + textSize: { + type: [String, Number], + default: 14 + }, + // 文本颜色 + textColor: { + type: String, + default: '#909399' + }, + // 线条颜色 + lineColor: { + type: String, + default: '#dcdfe6' + }, + ...uni.$uv?.props?.divider + } +} \ No newline at end of file diff --git a/uni_modules/uv-divider/components/uv-divider/uv-divider.vue b/uni_modules/uv-divider/components/uv-divider/uv-divider.vue new file mode 100644 index 0000000..ba0dfa7 --- /dev/null +++ b/uni_modules/uv-divider/components/uv-divider/uv-divider.vue @@ -0,0 +1,113 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-divider/package.json b/uni_modules/uv-divider/package.json new file mode 100644 index 0000000..a54b458 --- /dev/null +++ b/uni_modules/uv-divider/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-divider", + "displayName": "uv-divider 分割线 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "区隔内容的分割线,一般用于页面底部没有更多的提示。", + "keywords": [ + "divider", + "uvui", + "uv-ui", + "分割线", + "没有更多" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-divider/readme.md b/uni_modules/uv-divider/readme.md new file mode 100644 index 0000000..2384cba --- /dev/null +++ b/uni_modules/uv-divider/readme.md @@ -0,0 +1,11 @@ +## Divider 分割线 + +> **组件名:uv-divider** + +区隔内容的分割线,一般用于页面底部"没有更多"的提示。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-drop-down/changelog.md b/uni_modules/uv-drop-down/changelog.md new file mode 100644 index 0000000..637c605 --- /dev/null +++ b/uni_modules/uv-drop-down/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2024-01-02) +1. 修复parentData不变的BUG +## 1.0.4(2023-09-28) +1. 增加uv-sticky依赖 +## 1.0.3(2023-08-29) +1. 修复自定义内容,点击自定义内容时会自动关闭弹窗的问题 +## 1.0.2(2023-08-22) +1. 优化 +## 1.0.1(2023-08-22) +1. 增加@change回调,返回弹窗关闭状态 +2. 增加init方法,方便位置改变进行调整 +## 1.0.0(2023-07-30) +新增uv-drop-down 下拉筛选组件 diff --git a/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue new file mode 100644 index 0000000..9438a57 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue b/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue new file mode 100644 index 0000000..6a1efc8 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue @@ -0,0 +1,242 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue b/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue new file mode 100644 index 0000000..9978b40 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue @@ -0,0 +1,135 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/package.json b/uni_modules/uv-drop-down/package.json new file mode 100644 index 0000000..f4ad683 --- /dev/null +++ b/uni_modules/uv-drop-down/package.json @@ -0,0 +1,91 @@ +{ + "id": "uv-drop-down", + "displayName": "uv-drop-down 下拉筛选 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "该组件主要提供筛选下拉筛选框,内置基础筛选功能,可以根据自己的需求自定义筛选项", + "keywords": [ + "uv-drop-down", + "uvui", + "uv-ui", + "下拉筛选", + "筛选" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-text", + "uv-transition", + "uv-sticky" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-drop-down/readme.md b/uni_modules/uv-drop-down/readme.md new file mode 100644 index 0000000..31cbd24 --- /dev/null +++ b/uni_modules/uv-drop-down/readme.md @@ -0,0 +1,23 @@ +## DropDown 下拉筛选 + +> **组件名:uv-drop-down** + +该组件主要提供筛选下拉筛选框,内置基础筛选功能,可以根据自己的需求自定义筛选项。 + +为了兼容app-nvue,需要内置三个组件进行配合使用,uv-drop-down属于菜单项(其实还包括子组件uv-drop-down-item),uv-drop-down-popup属于筛选框。 + +只需要做简单的约定式配置,即可使用该功能,兼容性良好,已经在多端进行了多次测试。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-empty/changelog.md b/uni_modules/uv-empty/changelog.md new file mode 100644 index 0000000..a1cc2ad --- /dev/null +++ b/uni_modules/uv-empty/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-20) +1. 优化 +## 1.0.4(2023-08-04) +1. icon支持base64图片 +## 1.0.3(2023-07-17) +1. 修复 uv-empty 恢复设置mode属性的内置图标 +## 1.0.2(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-empty 内容为空 diff --git a/uni_modules/uv-empty/components/uv-empty/props.js b/uni_modules/uv-empty/components/uv-empty/props.js new file mode 100644 index 0000000..26c282d --- /dev/null +++ b/uni_modules/uv-empty/components/uv-empty/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: '' + }, + // 提示文字 + text: { + type: String, + default: '' + }, + // 文字颜色 + textColor: { + type: String, + default: '#c0c4cc' + }, + // 文字大小 + textSize: { + type: [String, Number], + default: 14 + }, + // 图标的颜色 + iconColor: { + type: String, + default: '#c0c4cc' + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: 90 + }, + // 选择预置的图标类型 + mode: { + type: String, + default: 'data' + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: 160 + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: 160 + }, + // 是否显示组件 + show: { + type: Boolean, + default: true + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.empty + } +} \ No newline at end of file diff --git a/uni_modules/uv-empty/components/uv-empty/uv-empty.vue b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue new file mode 100644 index 0000000..22a9264 --- /dev/null +++ b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue @@ -0,0 +1,126 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-empty/package.json b/uni_modules/uv-empty/package.json new file mode 100644 index 0000000..e10f451 --- /dev/null +++ b/uni_modules/uv-empty/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-empty", + "displayName": "uv-empty 内容为空 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个 没有内容 的场景, 我们精心挑选了十几个场景的图标,方便您使用。", + "keywords": [ + "empty", + "uvui", + "uv-ui", + "空数据", + "暂无数据" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-empty/readme.md b/uni_modules/uv-empty/readme.md new file mode 100644 index 0000000..ecef14d --- /dev/null +++ b/uni_modules/uv-empty/readme.md @@ -0,0 +1,19 @@ +## Empty 内容为空 + +> **组件名:uv-empty** + +该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-form/changelog.md b/uni_modules/uv-form/changelog.md new file mode 100644 index 0000000..b229bca --- /dev/null +++ b/uni_modules/uv-form/changelog.md @@ -0,0 +1,23 @@ +## 1.0.9(2023-08-14) +1. 修复设置labelWidth属性时,节点渲染有闪动的BUG +## 1.0.8(2023-08-13) +1. 修复未设置rules的情况下报错的BUG +2. 优化错误提示 +## 1.0.7(2023-08-10) +1. 修复在vue3+setup语法糖中错误文字动画错乱 +## 1.0.6(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.5(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.4(2023-07-02) +uv-form 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.3(2023-06-18) +1. 修改某些情况下的BUG +## 1.0.2(2023-06-15) +1. 修复支付宝报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-form 表单 diff --git a/uni_modules/uv-form/components/uv-form-item/props.js b/uni_modules/uv-form/components/uv-form-item/props.js new file mode 100644 index 0000000..00a26bc --- /dev/null +++ b/uni_modules/uv-form/components/uv-form-item/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // input的label提示语 + label: { + type: String, + default: '' + }, + // 绑定的值 + prop: { + type: String, + default: '' + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [Boolean], + default: false + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: '' + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: '' + }, + // 右侧图标 + rightIcon: { + type: String, + default: '' + }, + // 左侧图标 + leftIcon: { + type: String, + default: '' + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: false + }, + leftIconStyle: { + type: [String, Object], + default: '' + }, + ...uni.$uv?.props?.formItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue b/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue new file mode 100644 index 0000000..25d93ea --- /dev/null +++ b/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue @@ -0,0 +1,226 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/props.js b/uni_modules/uv-form/components/uv-form/props.js new file mode 100644 index 0000000..6cffb95 --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/props.js @@ -0,0 +1,46 @@ +export default { + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: () => ({}) + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: () => ({}) + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: 'message' + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: true + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: 'left' + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: 45 + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: 'left' + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: () => ({}) + }, + ...uni.$uv?.props?.form + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/uv-form.vue b/uni_modules/uv-form/components/uv-form/uv-form.vue new file mode 100644 index 0000000..bc0876f --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/uv-form.vue @@ -0,0 +1,209 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/valid.js b/uni_modules/uv-form/components/uv-form/valid.js new file mode 100644 index 0000000..9e114df --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/valid.js @@ -0,0 +1,1343 @@ +function _extends() { + _extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i] + + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target + } + + return _extends.apply(this, arguments) +} + +/* eslint no-console:0 */ +const formatRegExp = /%[sdj%]/g +let warning = function warning() {} // don't print warning message when in production env or node runtime + +if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window + !== 'undefined' && typeof document !== 'undefined') { + warning = function warning(type, errors) { + if (typeof console !== 'undefined' && console.warn) { + if (errors.every((e) => typeof e === 'string')) { + console.warn(type, errors) + } + } + } +} + +function convertFieldsError(errors) { + if (!errors || !errors.length) return null + const fields = {} + errors.forEach((error) => { + const { field } = error + fields[field] = fields[field] || [] + fields[field].push(error) + }) + return fields +} + +function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key] + } + + let i = 1 + const f = args[0] + const len = args.length + + if (typeof f === 'function') { + return f.apply(null, args.slice(1)) + } + + if (typeof f === 'string') { + let str = String(f).replace(formatRegExp, (x) => { + if (x === '%%') { + return '%' + } + + if (i >= len) { + return x + } + + switch (x) { + case '%s': + return String(args[i++]) + + case '%d': + return Number(args[i++]) + + case '%j': + try { + return JSON.stringify(args[i++]) + } catch (_) { + return '[Circular]' + } + + break + + default: + return x + } + }) + + for (let arg = args[i]; i < len; arg = args[++i]) { + str += ` ${arg}` + } + + return str + } + + return f +} + +function isNativeStringType(type) { + return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern' +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true + } + + if (type === 'array' && Array.isArray(value) && !value.length) { + return true + } + + if (isNativeStringType(type) && typeof value === 'string' && !value) { + return true + } + + return false +} + +function asyncParallelArray(arr, func, callback) { + const results = [] + let total = 0 + const arrLength = arr.length + + function count(errors) { + results.push.apply(results, errors) + total++ + + if (total === arrLength) { + callback(results) + } + } + + arr.forEach((a) => { + func(a, count) + }) +} + +function asyncSerialArray(arr, func, callback) { + let index = 0 + const arrLength = arr.length + + function next(errors) { + if (errors && errors.length) { + callback(errors) + return + } + + const original = index + index += 1 + + if (original < arrLength) { + func(arr[original], next) + } else { + callback([]) + } + } + + next([]) +} + +function flattenObjArr(objArr) { + const ret = [] + Object.keys(objArr).forEach((k) => { + ret.push.apply(ret, objArr[k]) + }) + return ret +} + +function asyncMap(objArr, option, func, callback) { + if (option.first) { + const _pending = new Promise((resolve, reject) => { + const next = function next(errors) { + callback(errors) + return errors.length ? reject({ + errors, + fields: convertFieldsError(errors) + }) : resolve() + } + + const flattenArr = flattenObjArr(objArr) + asyncSerialArray(flattenArr, func, next) + }) + + _pending.catch((e) => e) + + return _pending + } + + let firstFields = option.firstFields || [] + + if (firstFields === true) { + firstFields = Object.keys(objArr) + } + + const objArrKeys = Object.keys(objArr) + const objArrLength = objArrKeys.length + let total = 0 + const results = [] + const pending = new Promise((resolve, reject) => { + const next = function next(errors) { + results.push.apply(results, errors) + total++ + + if (total === objArrLength) { + callback(results) + return results.length ? reject({ + errors: results, + fields: convertFieldsError(results) + }) : resolve() + } + } + + if (!objArrKeys.length) { + callback(results) + resolve() + } + + objArrKeys.forEach((key) => { + const arr = objArr[key] + + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next) + } else { + asyncParallelArray(arr, func, next) + } + }) + }) + pending.catch((e) => e) + return pending +} + +function complementError(rule) { + return function (oe) { + if (oe && oe.message) { + oe.field = oe.field || rule.fullField + return oe + } + + return { + message: typeof oe === 'function' ? oe() : oe, + field: oe.field || rule.fullField + } + } +} + +function deepMerge(target, source) { + if (source) { + for (const s in source) { + if (source.hasOwnProperty(s)) { + const value = source[s] + + if (typeof value === 'object' && typeof target[s] === 'object') { + target[s] = { ...target[s], ...value } + } else { + target[s] = value + } + } + } + } + + return target +} + +/** + * Rule for validating required fields. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function required(rule, value, source, errors, options, type) { + if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) { + errors.push(format(options.messages.required, rule.fullField)) + } +} + +/** + * Rule for validating whitespace. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function whitespace(rule, value, source, errors, options) { + if (/^\s+$/.test(value) || value === '') { + errors.push(format(options.messages.whitespace, rule.fullField)) + } +} + +/* eslint max-len:0 */ + +const pattern = { + // http://emailregex.com/ + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + url: new RegExp( + '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', + 'i' + ), + hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i +} +var types = { + integer: function integer(value) { + return /^(-)?\d+$/.test(value); + }, + float: function float(value) { + return /^(-)?\d+(\.\d+)?$/.test(value); + }, + array: function array(value) { + return Array.isArray(value) + }, + regexp: function regexp(value) { + if (value instanceof RegExp) { + return true + } + + try { + return !!new RegExp(value) + } catch (e) { + return false + } + }, + date: function date(value) { + return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear + === 'function' + }, + number: function number(value) { + if (isNaN(value)) { + return false + } + + // 修改源码,将字符串数值先转为数值 + return typeof +value === 'number' + }, + object: function object(value) { + return typeof value === 'object' && !types.array(value) + }, + method: function method(value) { + return typeof value === 'function' + }, + email: function email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255 + }, + url: function url(value) { + return typeof value === 'string' && !!value.match(pattern.url) + }, + hex: function hex(value) { + return typeof value === 'string' && !!value.match(pattern.hex) + } +} +/** + * Rule for validating the type of a value. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function type(rule, value, source, errors, options) { + if (rule.required && value === undefined) { + required(rule, value, source, errors, options) + return + } + + const custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'] + const ruleType = rule.type + + if (custom.indexOf(ruleType) > -1) { + if (!types[ruleType](value)) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)) + } // straight typeof check + } else if (ruleType && typeof value !== rule.type) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)) + } +} + +/** + * Rule for validating minimum and maximum allowed values. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function range(rule, value, source, errors, options) { + const len = typeof rule.len === 'number' + const min = typeof rule.min === 'number' + const max = typeof rule.max === 'number' // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane) + + const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g + let val = value + let key = null + const num = typeof value === 'number' + const str = typeof value === 'string' + const arr = Array.isArray(value) + + if (num) { + key = 'number' + } else if (str) { + key = 'string' + } else if (arr) { + key = 'array' + } // if the value is not of a supported type for range validation + // the validation rule rule should use the + // type property to also test for a particular type + + if (!key) { + return false + } + + if (arr) { + val = value.length + } + + if (str) { + // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3 + val = value.replace(spRegexp, '_').length + } + + if (len) { + if (val !== rule.len) { + errors.push(format(options.messages[key].len, rule.fullField, rule.len)) + } + } else if (min && !max && val < rule.min) { + errors.push(format(options.messages[key].min, rule.fullField, rule.min)) + } else if (max && !min && val > rule.max) { + errors.push(format(options.messages[key].max, rule.fullField, rule.max)) + } else if (min && max && (val < rule.min || val > rule.max)) { + errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)) + } +} + +const ENUM = 'enum' +/** + * Rule for validating a value exists in an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable(rule, value, source, errors, options) { + rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [] + + if (rule[ENUM].indexOf(value) === -1) { + errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', '))) + } +} + +/** + * Rule for validating a regular expression pattern. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$1(rule, value, source, errors, options) { + if (rule.pattern) { + if (rule.pattern instanceof RegExp) { + // if a RegExp instance is passed, reset `lastIndex` in case its `global` + // flag is accidentally set to `true`, which in a validation scenario + // is not necessary and the result might be misleading + rule.pattern.lastIndex = 0 + + if (!rule.pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } else if (typeof rule.pattern === 'string') { + const _pattern = new RegExp(rule.pattern) + + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } + } +} + +const rules = { + required, + whitespace, + type, + range, + enum: enumerable, + pattern: pattern$1 +} + +/** + * Performs validation for string types. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function string(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'string') + + if (!isEmptyValue(value, 'string')) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + rules.pattern(rule, value, source, errors, options) + + if (rule.whitespace === true) { + rules.whitespace(rule, value, source, errors, options) + } + } + } + + callback(errors) +} + +/** + * Validates a function. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function method(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function number(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (value === '') { + value = undefined + } + + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a boolean. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function _boolean(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates the regular expression type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function regexp(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value)) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number is an integer. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function integer(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number is a floating point number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function floatFn(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates an array. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function array(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'array') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'array') + + if (!isEmptyValue(value, 'array')) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates an object. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function object(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +const ENUM$1 = 'enum' +/** + * Validates an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable$1(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules[ENUM$1](rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a regular expression pattern. + * + * Performs validation when a rule only contains + * a pattern property but is not declared as a string type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$2(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value, 'string')) { + rules.pattern(rule, value, source, errors, options) + } + } + + callback(errors) +} + +function date(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value)) { + let dateObject + + if (typeof value === 'number') { + dateObject = new Date(value) + } else { + dateObject = value + } + + rules.type(rule, dateObject, source, errors, options) + + if (dateObject) { + rules.range(rule, dateObject.getTime(), source, errors, options) + } + } + } + + callback(errors) +} + +function required$1(rule, value, callback, source, options) { + const errors = [] + const type = Array.isArray(value) ? 'array' : typeof value + rules.required(rule, value, source, errors, options, type) + callback(errors) +} + +function type$1(rule, value, callback, source, options) { + const ruleType = rule.type + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, ruleType) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, ruleType) + + if (!isEmptyValue(value, ruleType)) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Performs validation for any type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function any(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + } + + callback(errors) +} + +const validators = { + string, + method, + number, + boolean: _boolean, + regexp, + integer, + float: floatFn, + array, + object, + enum: enumerable$1, + pattern: pattern$2, + date, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + any +} + +function newMessages() { + return { + default: 'Validation error on field %s', + required: '%s is required', + enum: '%s must be one of %s', + whitespace: '%s cannot be empty', + date: { + format: '%s date %s is invalid for format %s', + parse: '%s date could not be parsed, %s is invalid ', + invalid: '%s date %s is invalid' + }, + types: { + string: '%s is not a %s', + method: '%s is not a %s (function)', + array: '%s is not an %s', + object: '%s is not an %s', + number: '%s is not a %s', + date: '%s is not a %s', + boolean: '%s is not a %s', + integer: '%s is not an %s', + float: '%s is not a %s', + regexp: '%s is not a valid %s', + email: '%s is not a valid %s', + url: '%s is not a valid %s', + hex: '%s is not a valid %s' + }, + string: { + len: '%s must be exactly %s characters', + min: '%s must be at least %s characters', + max: '%s cannot be longer than %s characters', + range: '%s must be between %s and %s characters' + }, + number: { + len: '%s must equal %s', + min: '%s cannot be less than %s', + max: '%s cannot be greater than %s', + range: '%s must be between %s and %s' + }, + array: { + len: '%s must be exactly %s in length', + min: '%s cannot be less than %s in length', + max: '%s cannot be greater than %s in length', + range: '%s must be between %s and %s in length' + }, + pattern: { + mismatch: '%s value %s does not match pattern %s' + }, + clone: function clone() { + const cloned = JSON.parse(JSON.stringify(this)) + cloned.clone = this.clone + return cloned + } + } +} +const messages = newMessages() + +/** + * Encapsulates a validation schema. + * + * @param descriptor An object declaring validation rules + * for this schema. + */ + +function Schema(descriptor) { + this.rules = null + this._messages = messages + this.define(descriptor) +} + +Schema.prototype = { + messages: function messages(_messages) { + if (_messages) { + this._messages = deepMerge(newMessages(), _messages) + } + + return this._messages + }, + define: function define(rules) { + if (!rules) { + throw new Error('Cannot configure a schema with no rules') + } + + if (typeof rules !== 'object' || Array.isArray(rules)) { + throw new Error('Rules must be an object') + } + + this.rules = {} + let z + let item + + for (z in rules) { + if (rules.hasOwnProperty(z)) { + item = rules[z] + this.rules[z] = Array.isArray(item) ? item : [item] + } + } + }, + validate: function validate(source_, o, oc) { + const _this = this + + if (o === void 0) { + o = {} + } + + if (oc === void 0) { + oc = function oc() {} + } + + let source = source_ + let options = o + let callback = oc + + if (typeof options === 'function') { + callback = options + options = {} + } + + if (!this.rules || Object.keys(this.rules).length === 0) { + if (callback) { + callback() + } + + return Promise.resolve() + } + + function complete(results) { + let i + let errors = [] + let fields = {} + + function add(e) { + if (Array.isArray(e)) { + let _errors + + errors = (_errors = errors).concat.apply(_errors, e) + } else { + errors.push(e) + } + } + + for (i = 0; i < results.length; i++) { + add(results[i]) + } + + if (!errors.length) { + errors = null + fields = null + } else { + fields = convertFieldsError(errors) + } + + callback(errors, fields) + } + + if (options.messages) { + let messages$1 = this.messages() + + if (messages$1 === messages) { + messages$1 = newMessages() + } + + deepMerge(messages$1, options.messages) + options.messages = messages$1 + } else { + options.messages = this.messages() + } + + let arr + let value + const series = {} + const keys = options.keys || Object.keys(this.rules) + keys.forEach((z) => { + arr = _this.rules[z] + value = source[z] + arr.forEach((r) => { + let rule = r + + if (typeof rule.transform === 'function') { + if (source === source_) { + source = { ...source } + } + + value = source[z] = rule.transform(value) + } + + if (typeof rule === 'function') { + rule = { + validator: rule + } + } else { + rule = { ...rule } + } + + rule.validator = _this.getValidationMethod(rule) + rule.field = z + rule.fullField = rule.fullField || z + rule.type = _this.getType(rule) + + if (!rule.validator) { + return + } + + series[z] = series[z] || [] + series[z].push({ + rule, + value, + source, + field: z + }) + }) + }) + const errorFields = {} + return asyncMap(series, options, (data, doIt) => { + const { rule } = data + let deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField + === 'object') + deep = deep && (rule.required || !rule.required && data.value) + rule.field = data.field + + function addFullfield(key, schema) { + return { ...schema, fullField: `${rule.fullField}.${key}` } + } + + function cb(e) { + if (e === void 0) { + e = [] + } + + let errors = e + + if (!Array.isArray(errors)) { + errors = [errors] + } + + if (!options.suppressWarning && errors.length) { + Schema.warning('async-validator:', errors) + } + + if (errors.length && rule.message) { + errors = [].concat(rule.message) + } + + errors = errors.map(complementError(rule)) + + if (options.first && errors.length) { + errorFields[rule.field] = 1 + return doIt(errors) + } + + if (!deep) { + doIt(errors) + } else { + // if rule is required but the target object + // does not exist fail at the rule level and don't + // go deeper + if (rule.required && !data.value) { + if (rule.message) { + errors = [].concat(rule.message).map(complementError(rule)) + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))] + } else { + errors = [] + } + + return doIt(errors) + } + + let fieldsSchema = {} + + if (rule.defaultField) { + for (const k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField + } + } + } + + fieldsSchema = { ...fieldsSchema, ...data.rule.fields } + + for (const f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + const fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]] + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)) + } + } + + const schema = new Schema(fieldsSchema) + schema.messages(options.messages) + + if (data.rule.options) { + data.rule.options.messages = options.messages + data.rule.options.error = options.error + } + + schema.validate(data.value, data.rule.options || options, (errs) => { + const finalErrors = [] + + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors) + } + + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs) + } + + doIt(finalErrors.length ? finalErrors : null) + }) + } + } + + let res + + if (rule.asyncValidator) { + res = rule.asyncValidator(rule, data.value, cb, data.source, options) + } else if (rule.validator) { + res = rule.validator(rule, data.value, cb, data.source, options) + + if (res === true) { + cb() + } else if (res === false) { + cb(rule.message || `${rule.field} fails`) + } else if (res instanceof Array) { + cb(res) + } else if (res instanceof Error) { + cb(res.message) + } + } + + if (res && res.then) { + res.then(() => cb(), (e) => cb(e)) + } + }, (results) => { + complete(results) + }) + }, + getType: function getType(rule) { + if (rule.type === undefined && rule.pattern instanceof RegExp) { + rule.type = 'pattern' + } + + if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) { + throw new Error(format('Unknown rule type %s', rule.type)) + } + + return rule.type || 'string' + }, + getValidationMethod: function getValidationMethod(rule) { + if (typeof rule.validator === 'function') { + return rule.validator + } + + const keys = Object.keys(rule) + const messageIndex = keys.indexOf('message') + + if (messageIndex !== -1) { + keys.splice(messageIndex, 1) + } + + if (keys.length === 1 && keys[0] === 'required') { + return validators.required + } + + return validators[this.getType(rule)] || false + } +} + +Schema.register = function register(type, validator) { + if (typeof validator !== 'function') { + throw new Error('Cannot register a validator by type, validator is not a function') + } + + validators[type] = validator +} + +Schema.warning = warning +Schema.messages = messages + +export default Schema +// # sourceMappingURL=index.js.map diff --git a/uni_modules/uv-form/package.json b/uni_modules/uv-form/package.json new file mode 100644 index 0000000..5e612c2 --- /dev/null +++ b/uni_modules/uv-form/package.json @@ -0,0 +1,93 @@ +{ + "id": "uv-form", + "displayName": "uv-form 表单 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "此组件一般用于表单场景,可以配置Input输入框,Textarea文本域,Checkbox复选框,Radio单选框,开关选择器等,进行表单验证等。", + "keywords": [ + "form", + "uvui", + "uv-ui", + "表单", + "表单验证" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-line", + "uv-transition", + "uv-action-sheet", + "uv-input", + "uv-button" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/readme.md b/uni_modules/uv-form/readme.md new file mode 100644 index 0000000..0458a6a --- /dev/null +++ b/uni_modules/uv-form/readme.md @@ -0,0 +1,19 @@ +## Form 表单 + +> **组件名:uv-form** + +此组件一般用于表单场景,可以配置`Input`输入框,`Textarea`文本域,`Checkbox`复选框,`Radio`单选框,开关选择器等,进行表单验证等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-gap/changelog.md b/uni_modules/uv-gap/changelog.md new file mode 100644 index 0000000..7d603b4 --- /dev/null +++ b/uni_modules/uv-gap/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增间隔槽组件 diff --git a/uni_modules/uv-gap/components/uv-gap/props.js b/uni_modules/uv-gap/components/uv-gap/props.js new file mode 100644 index 0000000..0ad787c --- /dev/null +++ b/uni_modules/uv-gap/components/uv-gap/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: 'transparent' + }, + // 分割槽高度,单位px(默认20) + height: { + type: [String, Number], + default: 20 + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: 0 + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.gap + } +} \ No newline at end of file diff --git a/uni_modules/uv-gap/components/uv-gap/uv-gap.vue b/uni_modules/uv-gap/components/uv-gap/uv-gap.vue new file mode 100644 index 0000000..55720a1 --- /dev/null +++ b/uni_modules/uv-gap/components/uv-gap/uv-gap.vue @@ -0,0 +1,36 @@ + + + diff --git a/uni_modules/uv-gap/package.json b/uni_modules/uv-gap/package.json new file mode 100644 index 0000000..3a17ec3 --- /dev/null +++ b/uni_modules/uv-gap/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-gap", + "displayName": "uv-gap 间隔槽 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量。", + "keywords": [ + "gap", + "uvui", + "uv-ui", + "间隔槽", + "内容块" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-gap/readme.md b/uni_modules/uv-gap/readme.md new file mode 100644 index 0000000..dedd565 --- /dev/null +++ b/uni_modules/uv-gap/readme.md @@ -0,0 +1,12 @@ +## Gap 间隔槽 + +> **组件名:uv-gap** + +该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 + diff --git a/uni_modules/uv-grid/changelog.md b/uni_modules/uv-grid/changelog.md new file mode 100644 index 0000000..8c61261 --- /dev/null +++ b/uni_modules/uv-grid/changelog.md @@ -0,0 +1,21 @@ +## 1.0.9(2023-12-06) +1. 优化 +## 1.0.8(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-14) +1. 修复初始的时候闪动的BUG +## 1.0.5(2023-06-22) +1. 优化修改 +## 1.0.4(2023-06-21) +1. 修复BUG +## 1.0.3(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-grid 宫格布局 diff --git a/uni_modules/uv-grid/components/uv-grid-item/props.js b/uni_modules/uv-grid/components/uv-grid-item/props.js new file mode 100644 index 0000000..6b86298 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid-item/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: null + }, + // 背景颜色 + bgColor: { + type: String, + default: 'transparent' + }, + ...uni.$uv?.props?.gridItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue b/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue new file mode 100644 index 0000000..9412852 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/uni_modules/uv-grid/components/uv-grid/props.js b/uni_modules/uv-grid/components/uv-grid/props.js new file mode 100644 index 0000000..d5f8474 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 分成几列 + col: { + type: [String, Number], + default: 3 + }, + // 是否显示边框 + border: { + type: Boolean, + default: false + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: 'left' + }, + ...uni.$uv?.props?.grid + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/components/uv-grid/uv-grid.vue b/uni_modules/uv-grid/components/uv-grid/uv-grid.vue new file mode 100644 index 0000000..0314b18 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid/uv-grid.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/uni_modules/uv-grid/package.json b/uni_modules/uv-grid/package.json new file mode 100644 index 0000000..0c93379 --- /dev/null +++ b/uni_modules/uv-grid/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-grid", + "displayName": "uv-grid 宫格布局 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-grid 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。", + "keywords": [ + "uv-grid", + "uvui", + "uv-ui", + "宫格布局", + "grid" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/readme.md b/uni_modules/uv-grid/readme.md new file mode 100644 index 0000000..cd13cef --- /dev/null +++ b/uni_modules/uv-grid/readme.md @@ -0,0 +1,17 @@ +## Grid 宫格布局 + +> **组件名:uv-grid** + +宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。 + +# 查看文档 + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-icon/changelog.md b/uni_modules/uv-icon/changelog.md new file mode 100644 index 0000000..c610827 --- /dev/null +++ b/uni_modules/uv-icon/changelog.md @@ -0,0 +1,31 @@ +## 1.0.13(2023-12-06) +1. 优化 +## 1.0.12(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.11(2023-10-29) +1. imgMode默认值改成aspectFit +## 1.0.10(2023-08-13) +1. 优化nvue,方便自定义图标 +## 1.0.9(2023-07-28) +1. 修改几个对应错误图标的BUG +## 1.0.8(2023-07-24) +1. 优化 支持base64图片 +## 1.0.7(2023-07-17) +1. 修复 uv-icon 恢复uv-empty相关的图标 +## 1.0.6(2023-07-13) +1. 修复icon设置name属性对应图标错误的BUG +## 1.0.5(2023-07-04) +1. 更新图标,删除一些不常用的图标 +2. 删除base64,修改成ttf文件引入读取图标 +3. 自定义图标文档说明:https://www.uvui.cn/guide/customIcon.html +## 1.0.4(2023-07-03) +1. 修复主题颜色在APP不生效的BUG +## 1.0.3(2023-05-24) +1. 将线上ttf字体包替换成base64,避免加载时或者网络差时候显示白色方块 +## 1.0.2(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.1(2023-05-10) +1. 修复小程序中异常显示 +## 1.0.0(2023-05-04) +新发版 diff --git a/uni_modules/uv-icon/components/uv-icon/icons.js b/uni_modules/uv-icon/components/uv-icon/icons.js new file mode 100644 index 0000000..8469a2d --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/icons.js @@ -0,0 +1,160 @@ +export default { + 'uvicon-level': 'e68f', + 'uvicon-checkbox-mark': 'e659', + 'uvicon-folder': 'e694', + 'uvicon-movie': 'e67c', + 'uvicon-star-fill': 'e61e', + 'uvicon-star': 'e618', + 'uvicon-phone-fill': 'e6ac', + 'uvicon-phone': 'e6ba', + 'uvicon-apple-fill': 'e635', + 'uvicon-backspace': 'e64d', + 'uvicon-attach': 'e640', + 'uvicon-empty-data': 'e671', + 'uvicon-empty-address': 'e68a', + 'uvicon-empty-favor': 'e662', + 'uvicon-empty-car': 'e657', + 'uvicon-empty-order': 'e66b', + 'uvicon-empty-list': 'e672', + 'uvicon-empty-search': 'e677', + 'uvicon-empty-permission': 'e67d', + 'uvicon-empty-news': 'e67e', + 'uvicon-empty-history': 'e685', + 'uvicon-empty-coupon': 'e69b', + 'uvicon-empty-page': 'e60e', + 'uvicon-empty-wifi-off': 'e6cc', + 'uvicon-reload': 'e627', + 'uvicon-order': 'e695', + 'uvicon-server-man': 'e601', + 'uvicon-search': 'e632', + 'uvicon-more-dot-fill': 'e66f', + 'uvicon-scan': 'e631', + 'uvicon-map': 'e665', + 'uvicon-map-fill': 'e6a8', + 'uvicon-tags': 'e621', + 'uvicon-tags-fill': 'e613', + 'uvicon-eye': 'e664', + 'uvicon-eye-fill': 'e697', + 'uvicon-eye-off': 'e69c', + 'uvicon-eye-off-outline': 'e688', + 'uvicon-mic': 'e66d', + 'uvicon-mic-off': 'e691', + 'uvicon-calendar': 'e65c', + 'uvicon-trash': 'e623', + 'uvicon-trash-fill': 'e6ce', + 'uvicon-play-left': 'e6bf', + 'uvicon-play-right': 'e6b3', + 'uvicon-minus': 'e614', + 'uvicon-plus': 'e625', + 'uvicon-info-circle': 'e69f', + 'uvicon-info-circle-fill': 'e6a7', + 'uvicon-question-circle': 'e622', + 'uvicon-question-circle-fill': 'e6bc', + 'uvicon-close': 'e65a', + 'uvicon-checkmark': 'e64a', + 'uvicon-checkmark-circle': 'e643', + 'uvicon-checkmark-circle-fill': 'e668', + 'uvicon-setting': 'e602', + 'uvicon-setting-fill': 'e6d0', + 'uvicon-heart': 'e6a2', + 'uvicon-heart-fill': 'e68b', + 'uvicon-camera': 'e642', + 'uvicon-camera-fill': 'e650', + 'uvicon-more-circle': 'e69e', + 'uvicon-more-circle-fill': 'e684', + 'uvicon-chat': 'e656', + 'uvicon-chat-fill': 'e63f', + 'uvicon-bag': 'e647', + 'uvicon-error-circle': 'e66e', + 'uvicon-error-circle-fill': 'e655', + 'uvicon-close-circle': 'e64e', + 'uvicon-close-circle-fill': 'e666', + 'uvicon-share': 'e629', + 'uvicon-share-fill': 'e6bb', + 'uvicon-share-square': 'e6c4', + 'uvicon-shopping-cart': 'e6cb', + 'uvicon-shopping-cart-fill': 'e630', + 'uvicon-bell': 'e651', + 'uvicon-bell-fill': 'e604', + 'uvicon-list': 'e690', + 'uvicon-list-dot': 'e6a9', + 'uvicon-zhifubao-circle-fill': 'e617', + 'uvicon-weixin-circle-fill': 'e6cd', + 'uvicon-weixin-fill': 'e620', + 'uvicon-qq-fill': 'e608', + 'uvicon-qq-circle-fill': 'e6b9', + 'uvicon-moments-circel-fill': 'e6c2', + 'uvicon-moments': 'e6a0', + 'uvicon-car': 'e64f', + 'uvicon-car-fill': 'e648', + 'uvicon-warning-fill': 'e6c7', + 'uvicon-warning': 'e6c1', + 'uvicon-clock-fill': 'e64b', + 'uvicon-clock': 'e66c', + 'uvicon-edit-pen': 'e65d', + 'uvicon-edit-pen-fill': 'e679', + 'uvicon-email': 'e673', + 'uvicon-email-fill': 'e683', + 'uvicon-minus-circle': 'e6a5', + 'uvicon-plus-circle': 'e603', + 'uvicon-plus-circle-fill': 'e611', + 'uvicon-file-text': 'e687', + 'uvicon-file-text-fill': 'e67f', + 'uvicon-pushpin': 'e6d1', + 'uvicon-pushpin-fill': 'e6b6', + 'uvicon-grid': 'e68c', + 'uvicon-grid-fill': 'e698', + 'uvicon-play-circle': 'e6af', + 'uvicon-play-circle-fill': 'e62a', + 'uvicon-pause-circle-fill': 'e60c', + 'uvicon-pause': 'e61c', + 'uvicon-pause-circle': 'e696', + 'uvicon-gift-fill': 'e6b0', + 'uvicon-gift': 'e680', + 'uvicon-kefu-ermai': 'e660', + 'uvicon-server-fill': 'e610', + 'uvicon-coupon-fill': 'e64c', + 'uvicon-coupon': 'e65f', + 'uvicon-integral': 'e693', + 'uvicon-integral-fill': 'e6b1', + 'uvicon-home-fill': 'e68e', + 'uvicon-home': 'e67b', + 'uvicon-account': 'e63a', + 'uvicon-account-fill': 'e653', + 'uvicon-thumb-down-fill': 'e628', + 'uvicon-thumb-down': 'e60a', + 'uvicon-thumb-up': 'e612', + 'uvicon-thumb-up-fill': 'e62c', + 'uvicon-lock-fill': 'e6a6', + 'uvicon-lock-open': 'e68d', + 'uvicon-lock-opened-fill': 'e6a1', + 'uvicon-lock': 'e69d', + 'uvicon-red-packet': 'e6c3', + 'uvicon-photo-fill': 'e6b4', + 'uvicon-photo': 'e60d', + 'uvicon-volume-off-fill': 'e6c8', + 'uvicon-volume-off': 'e6bd', + 'uvicon-volume-fill': 'e624', + 'uvicon-volume': 'e605', + 'uvicon-download': 'e670', + 'uvicon-arrow-up-fill': 'e636', + 'uvicon-arrow-down-fill': 'e638', + 'uvicon-play-left-fill': 'e6ae', + 'uvicon-play-right-fill': 'e6ad', + 'uvicon-arrow-downward': 'e634', + 'uvicon-arrow-leftward': 'e63b', + 'uvicon-arrow-rightward': 'e644', + 'uvicon-arrow-upward': 'e641', + 'uvicon-arrow-down': 'e63e', + 'uvicon-arrow-right': 'e63c', + 'uvicon-arrow-left': 'e646', + 'uvicon-arrow-up': 'e633', + 'uvicon-skip-back-left': 'e6c5', + 'uvicon-skip-forward-right': 'e61f', + 'uvicon-arrow-left-double': 'e637', + 'uvicon-man': 'e675', + 'uvicon-woman': 'e626', + 'uvicon-en': 'e6b8', + 'uvicon-twitte': 'e607', + 'uvicon-twitter-circle-fill': 'e6cf' +} \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/props.js b/uni_modules/uv-icon/components/uv-icon/props.js new file mode 100644 index 0000000..7668cf9 --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/props.js @@ -0,0 +1,90 @@ +export default { + props: { + // 图标类名 + name: { + type: String, + default: '' + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: '#606266' + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: '16px' + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: false + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: null + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: '' + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: 'uvicon' + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: '' + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: 'right' + }, + // label的大小 + labelSize: { + type: [String, Number], + default: '15px' + }, + // label的颜色 + labelColor: { + type: String, + default: '#606266' + }, + // label与图标的距离 + space: { + type: [String, Number], + default: '3px' + }, + // 图片的mode + imgMode: { + type: String, + default: 'aspectFit' + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: '' + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: '' + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: 0 + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.icon + } +} \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/uv-icon.vue b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue new file mode 100644 index 0000000..d61c9e5 --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/uvicons.ttf b/uni_modules/uv-icon/components/uv-icon/uvicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9aedef864f7e685fbe1dac7e0f36fda281d35a7c GIT binary patch literal 39632 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 literal 0 HcmV?d00001 diff --git a/uni_modules/uv-icon/package.json b/uni_modules/uv-icon/package.json new file mode 100644 index 0000000..0a838d5 --- /dev/null +++ b/uni_modules/uv-icon/package.json @@ -0,0 +1,83 @@ +{ + "id": "uv-icon", + "displayName": "uv-icon 图标 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.13", + "description": "基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。可自定义颜色、大小。", + "keywords": [ + "uv-ui,uvui,uv-icon,icon,图标,字体图标" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-icon/readme.md b/uni_modules/uv-icon/readme.md new file mode 100644 index 0000000..d526e1a --- /dev/null +++ b/uni_modules/uv-icon/readme.md @@ -0,0 +1,15 @@ +## uv-icon 图标库 + +> **组件名:uv-icon** + +基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 diff --git a/uni_modules/uv-image/changelog.md b/uni_modules/uv-image/changelog.md new file mode 100644 index 0000000..e5a633d --- /dev/null +++ b/uni_modules/uv-image/changelog.md @@ -0,0 +1,36 @@ +## 1.0.16(2023-12-21) +1. 修复设置show-menu-by-longpress不生效的BUG +## 1.0.15(2023-12-06) +1. 优化 +## 1.0.14(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.13(2023-11-15) +1. 修复webp之前未使用的BUG +## 1.0.12(2023-10-11) +1. 修复懒加载报错:https://gitee.com/climblee/uv-ui/issues/I869JS +## 1.0.11(2023-08-31) +1. 修复设置widthFix时出现显示不全的BUG +2. 修复抖音等平台在width和height属性改变时出现不显示的BUG +## 1.0.10(2023-08-29) +1. 修复异步修改宽高不生效的问题,问题来源:https://gitee.com/climblee/uv-ui/issues/I7WUQ3 +## 1.0.9(2023-08-21) +1. 修复设置宽高为百分比不生效的BUG +## 1.0.8(2023-07-24) +1. 优化 nvue模式下增加cellChild参数,是否在list中cell节点下,nvue中cell下建议设置成true +## 1.0.7(2023-07-02) +修复VUE3模式下可能不显示的BUG +## 1.0.6(2023-07-02) +优化修改 +## 1.0.5(2023-06-28) +修复duration属性不生效的BUG +## 1.0.4(2023-05-27) +1. 修复可能报错的问题 +## 1.0.3(2023-05-24) +1. 去掉template中存在的this.导致头条小程序编译警告 +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-image 图片 diff --git a/uni_modules/uv-image/components/uv-image/props.js b/uni_modules/uv-image/components/uv-image/props.js new file mode 100644 index 0000000..6ef04a5 --- /dev/null +++ b/uni_modules/uv-image/components/uv-image/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 图片地址 + src: { + type: String, + default: '' + }, + // 裁剪模式 + mode: { + type: String, + default: 'aspectFill' + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: '300' + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: '225' + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: 0 + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: true + }, + // 是否开启observer懒加载,nvue不生效 + observeLazyLoad: { + type: Boolean, + default: false + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: true + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: 'photo' + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: 'error-circle' + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: true + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: true + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: true + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: false + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: 500 + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: '#f3f4f6' + }, + // nvue模式下 是否直接显示,在uv-list等cell下面使用就需要设置 + cellChild: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.image + } +} \ No newline at end of file diff --git a/uni_modules/uv-image/components/uv-image/uv-image.vue b/uni_modules/uv-image/components/uv-image/uv-image.vue new file mode 100644 index 0000000..2ab4a78 --- /dev/null +++ b/uni_modules/uv-image/components/uv-image/uv-image.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/uni_modules/uv-image/package.json b/uni_modules/uv-image/package.json new file mode 100644 index 0000000..796089e --- /dev/null +++ b/uni_modules/uv-image/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-image", + "displayName": "uv-image 图片 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.16", + "description": "uv-image 此组件为uni-app的image组件的加强版,在继承了原有功能外,增加observer懒加载功能,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。", + "keywords": [ + "uv-image", + "uvui", + "uv-ui", + "image", + "图片" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-image/readme.md b/uni_modules/uv-image/readme.md new file mode 100644 index 0000000..0ecc120 --- /dev/null +++ b/uni_modules/uv-image/readme.md @@ -0,0 +1,15 @@ +## Image 图片 + +> **组件名:uv-image** + +此组件为`uni-app`的`image`组件的加强版,在继承了原有功能外,增加`observer`懒加载功能,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 diff --git a/uni_modules/uv-index-list/changelog.md b/uni_modules/uv-index-list/changelog.md new file mode 100644 index 0000000..deda715 --- /dev/null +++ b/uni_modules/uv-index-list/changelog.md @@ -0,0 +1,18 @@ +## 1.0.7(2023-11-07) +1. 修复sticky属性不生效的BUG +## 1.0.6(2023-09-01) +1. 修复设置customNavHeight导致定位不准确的BUG +## 1.0.5(2023-08-23) +1. 修复ios端快速滑动+点击右侧导航会出现白屏的BUG +## 1.0.4(2023-07-25) +1. 修复全局设置成rpx存在的高度BUG +2. 修复其他BUG +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-05-27) +1. select事件修复 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-index-list 索引列表 diff --git a/uni_modules/uv-index-list/components/uv-index-anchor/props.js b/uni_modules/uv-index-list/components/uv-index-anchor/props.js new file mode 100644 index 0000000..9ec949e --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-anchor/props.js @@ -0,0 +1,30 @@ +export default { + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: '' + }, + // 列表锚点文字颜色 + color: { + type: String, + default: '#606266' + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: 14 + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: '#dedede' + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: 32 + }, + ...uni.$uv?.props?.indexAnchor + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue b/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue new file mode 100644 index 0000000..e566aa7 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue b/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue new file mode 100644 index 0000000..f6e8901 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/uni_modules/uv-index-list/components/uv-index-list/props.js b/uni_modules/uv-index-list/components/uv-index-list/props.js new file mode 100644 index 0000000..0cf6356 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-list/props.js @@ -0,0 +1,30 @@ +export default { + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: '#606266' + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: '#5677fc' + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: () => [] + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: true + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.indexList + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue b/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue new file mode 100644 index 0000000..e610323 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/uni_modules/uv-index-list/package.json b/uni_modules/uv-index-list/package.json new file mode 100644 index 0000000..133736b --- /dev/null +++ b/uni_modules/uv-index-list/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-index-list", + "displayName": "uv-index-list 索引列表 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "该组件用于展示索引列表,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景。类似于微信通讯录页面", + "keywords": [ + "uv-index-list", + "uvui", + "uv-ui", + "index-list", + "索引列表" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/readme.md b/uni_modules/uv-index-list/readme.md new file mode 100644 index 0000000..605741c --- /dev/null +++ b/uni_modules/uv-index-list/readme.md @@ -0,0 +1,19 @@ +## IndexList 索引列表 + +> **组件名:uv-index-list** + +用于展示索引列表,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景,类似于微信通讯录页面。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-input/changelog.md b/uni_modules/uv-input/changelog.md new file mode 100644 index 0000000..2b354d0 --- /dev/null +++ b/uni_modules/uv-input/changelog.md @@ -0,0 +1,29 @@ +## 1.0.13(2023-12-06) +1. 优化 +## 1.0.12(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.11(2023-11-10) +1. 调整清除按钮样式的marginLeft,避免微信上多数情况触发不了的BUG +## 1.0.10(2023-10-07) +1. 修复搜狗输入法下存在不可清空的情况 +## 1.0.9(2023-09-14) +1. 修复H5等情况设置禁用或可读情况下,点击事件无效的问题 +## 1.0.8(2023-08-22) +1. 修复无法@keyboardheightchange无法获取键盘高度的BUG +## 1.0.7(2023-08-18) +1. 修复ios端不能输入的BUG +## 1.0.6(2023-08-05) +1. 修复在vue2模式下,v-model设置为0时不生效的BUG +## 1.0.5(2023-07-18) +1. 修复在微信小程序端清除内容存在不能清除的BUG +## 1.0.4(2023-07-13) +1. 修复value/v-model更改不生效的BUG +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.1(2023-05-12) +1. 修复vue3双向绑定的BUG +## 1.0.0(2023-05-10) +uv-input 输入框 diff --git a/uni_modules/uv-input/components/uv-input/props.js b/uni_modules/uv-input/components/uv-input/props.js new file mode 100644 index 0000000..e969493 --- /dev/null +++ b/uni_modules/uv-input/components/uv-input/props.js @@ -0,0 +1,175 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 输入框类型 + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: 'text' + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: false + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: '#f5f7fa' + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: false + }, + // 是否密码类型 + password: { + type: Boolean, + default: false + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: -1 + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: null + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: 'input-placeholder' + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: 'color: #c0c4cc' + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: 'done' + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: false + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: false + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: false + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: false + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: -1 + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: 30 + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: -1 + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: -1 + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: true + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: 'left' + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: '14px' + }, + // 输入框字体颜色 + color: { + type: String, + default: '#303133' + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: '' + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: '' + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: '' + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: '' + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: 'surround' + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: false + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: null + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.input + } +} \ No newline at end of file diff --git a/uni_modules/uv-input/components/uv-input/uv-input.vue b/uni_modules/uv-input/components/uv-input/uv-input.vue new file mode 100644 index 0000000..20c1801 --- /dev/null +++ b/uni_modules/uv-input/components/uv-input/uv-input.vue @@ -0,0 +1,348 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-input/package.json b/uni_modules/uv-input/package.json new file mode 100644 index 0000000..6981fa9 --- /dev/null +++ b/uni_modules/uv-input/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-input", + "displayName": "uv-input 输入框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.13", + "description": "uv-input 该组件为一个输入框,默认没有边框和样式,是专门为配合表单组件uv-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。", + "keywords": [ + "uv-input", + "uvui", + "uv-ui", + "input", + "输入框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-input/readme.md b/uni_modules/uv-input/readme.md new file mode 100644 index 0000000..00f47e4 --- /dev/null +++ b/uni_modules/uv-input/readme.md @@ -0,0 +1,19 @@ +## Input 输入框 + +> **组件名:uv-input** + +此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件uv-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-keyboard/changelog.md b/uni_modules/uv-keyboard/changelog.md new file mode 100644 index 0000000..1d1be01 --- /dev/null +++ b/uni_modules/uv-keyboard/changelog.md @@ -0,0 +1,17 @@ +## 1.0.5(2023-10-12) +1. 增加disKeys参数,mode = "car"下,被禁用的键,如:['I','O'] +2. 增加customabc参数,mode = "car"下,是否启用自定义中英文切换内容模式,为了兼容支付宝等小程序不兼容嵌套插槽,导致同时显示自定义内容和原始内容 +3. 增加ref方法changeCarMode,mode = "car"下, 调用此方法可以切换中英文模式 +4. 增加@changeCarInputMode,mode = "car"下,调用此方法可以进行切换中英文 +5. 增加插槽abc,mode = "car"下,自定义中英文切换内容,具体参考[车牌键盘自定义中英文切换及禁用键等设置](https://www.uvui.cn/components/keyboard.html#车牌键盘自定义中英文切换及禁用键等设置) +## 1.0.4(2023-09-04) +1. 优化,修改文件名称 +## 1.0.3(2023-09-04) +1. 修复键盘change回调事件产生冲突的BUG +## 1.0.2(2023-07-02) +uv-keyboard 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/keyboard.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-keyboard 键盘 diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js b/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js new file mode 100644 index 0000000..3dd93cc --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + }, + // 被禁用的键 + disKeys: { + type: Array, + default: ()=>[] + }, + // 是否自定义abc + customabc: { + type: Boolean, + default: false + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue b/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue new file mode 100644 index 0000000..e99e910 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js b/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js new file mode 100644 index 0000000..60d63d4 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: 'number' + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: false + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue new file mode 100644 index 0000000..b7c0b8b --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/uni_modules/uv-keyboard/components/uv-keyboard/props.js b/uni_modules/uv-keyboard/components/uv-keyboard/props.js new file mode 100644 index 0000000..05dd76a --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: 'number' + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: false + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: true + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: true + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: '' + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: true + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: true + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: true + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 是否允许点击确认按钮关闭组件 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: true + }, + // z-index值 + zIndex: { + type: [String, Number], + default: 10075 + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: '取消' + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: '确定' + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + }, + // 被禁用的键 + disKeys: { + type: Array, + default: ()=>[] + }, + // 是否自定义abc + customabc: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.keyboard + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue b/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue new file mode 100644 index 0000000..60b15bf --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/uni_modules/uv-keyboard/package.json b/uni_modules/uv-keyboard/package.json new file mode 100644 index 0000000..69844c6 --- /dev/null +++ b/uni_modules/uv-keyboard/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-keyboard", + "displayName": "uv-keyboard 键盘 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "uv-keyboard 该组件为自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。", + "keywords": [ + "uv-keyboard", + "uvui", + "uv-ui", + "keyboard", + "键盘" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/readme.md b/uni_modules/uv-keyboard/readme.md new file mode 100644 index 0000000..9cbef6c --- /dev/null +++ b/uni_modules/uv-keyboard/readme.md @@ -0,0 +1,19 @@ +## Keyboard 键盘 + +> **组件名:uv-keyboard** + +该组件为自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-line-progress/changelog.md b/uni_modules/uv-line-progress/changelog.md new file mode 100644 index 0000000..975acce --- /dev/null +++ b/uni_modules/uv-line-progress/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-20) +1. 适配height参数携带单位 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-line-progress 线形进度条 diff --git a/uni_modules/uv-line-progress/components/uv-line-progress/props.js b/uni_modules/uv-line-progress/components/uv-line-progress/props.js new file mode 100644 index 0000000..23138c7 --- /dev/null +++ b/uni_modules/uv-line-progress/components/uv-line-progress/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: '#19be6b' + }, + inactiveColor: { + type: String, + default: '#ececec' + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: 0 + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: true + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: 12 + }, + ...uni.$uv?.props?.lineProgress + } +} \ No newline at end of file diff --git a/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue b/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue new file mode 100644 index 0000000..229c2aa --- /dev/null +++ b/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/uni_modules/uv-line-progress/package.json b/uni_modules/uv-line-progress/package.json new file mode 100644 index 0000000..01e550e --- /dev/null +++ b/uni_modules/uv-line-progress/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line-progress", + "displayName": "uv-line-progress 线形进度条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-line-progress 该组件展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。", + "keywords": [ + "uv-line-progress", + "uvui", + "uv-ui", + "progress", + "进度条" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-line-progress/readme.md b/uni_modules/uv-line-progress/readme.md new file mode 100644 index 0000000..98e5d49 --- /dev/null +++ b/uni_modules/uv-line-progress/readme.md @@ -0,0 +1,11 @@ +## LineProgress 线形进度条 + +> **组件名:uv-line-progress** + +展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-line/changelog.md b/uni_modules/uv-line/changelog.md new file mode 100644 index 0000000..5eb7ba8 --- /dev/null +++ b/uni_modules/uv-line/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增线条组件 diff --git a/uni_modules/uv-line/components/uv-line/props.js b/uni_modules/uv-line/components/uv-line/props.js new file mode 100644 index 0000000..75b1007 --- /dev/null +++ b/uni_modules/uv-line/components/uv-line/props.js @@ -0,0 +1,34 @@ +export default { + props: { + color: { + type: String, + default: '#d6d7d9' + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: '100%' + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: 'row' + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: true + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: 0 + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.line + } +} \ No newline at end of file diff --git a/uni_modules/uv-line/components/uv-line/uv-line.vue b/uni_modules/uv-line/components/uv-line/uv-line.vue new file mode 100644 index 0000000..866c507 --- /dev/null +++ b/uni_modules/uv-line/components/uv-line/uv-line.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/uni_modules/uv-line/package.json b/uni_modules/uv-line/package.json new file mode 100644 index 0000000..036446a --- /dev/null +++ b/uni_modules/uv-line/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line", + "displayName": "uv-line 线条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "uv-line 此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。", + "keywords": [ + "uv-line", + "uvui", + "uv-ui", + "line", + "线条" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-line/readme.md b/uni_modules/uv-line/readme.md new file mode 100644 index 0000000..e47533c --- /dev/null +++ b/uni_modules/uv-line/readme.md @@ -0,0 +1,11 @@ +## Line 线条 + +> **组件名:uv-line** + +此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-link/changelog.md b/uni_modules/uv-link/changelog.md new file mode 100644 index 0000000..ce52f84 --- /dev/null +++ b/uni_modules/uv-link/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-08-13) +1. 修复报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-link 超链接组件 diff --git a/uni_modules/uv-link/components/uv-link/props.js b/uni_modules/uv-link/components/uv-link/props.js new file mode 100644 index 0000000..b3f56a1 --- /dev/null +++ b/uni_modules/uv-link/components/uv-link/props.js @@ -0,0 +1,40 @@ +export default { + props: { + // 文字颜色 + color: { + type: String, + default: '' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: false + }, + // 要跳转的链接 + href: { + type: String, + default: '' + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: '链接已复制,请在浏览器打开' + }, + // 下划线颜色 + lineColor: { + type: String, + default: '' + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: '' + }, + ...uni.$uv?.props?.link + } +} \ No newline at end of file diff --git a/uni_modules/uv-link/components/uv-link/uv-link.vue b/uni_modules/uv-link/components/uv-link/uv-link.vue new file mode 100644 index 0000000..4c9258e --- /dev/null +++ b/uni_modules/uv-link/components/uv-link/uv-link.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/uni_modules/uv-link/package.json b/uni_modules/uv-link/package.json new file mode 100644 index 0000000..1b115f4 --- /dev/null +++ b/uni_modules/uv-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-link", + "displayName": "uv-link 超链接 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-link 该组件为超链接组件", + "keywords": [ + "uv-link", + "uvui", + "uv-ui", + "link", + "超链接" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-link/readme.md b/uni_modules/uv-link/readme.md new file mode 100644 index 0000000..6e8ce92 --- /dev/null +++ b/uni_modules/uv-link/readme.md @@ -0,0 +1,11 @@ +## Link 超链接 + +> **组件名:uv-link** + +该组件为超链接组件,在不同平台有不同表现形式。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-list/changelog.md b/uni_modules/uv-list/changelog.md new file mode 100644 index 0000000..6c130f0 --- /dev/null +++ b/uni_modules/uv-list/changelog.md @@ -0,0 +1,25 @@ +## 1.0.9(2023-11-10) +1. 修复设置ellipsis不生效的BUG +## 1.0.8(2023-09-20) +1. listItem优化可使用customStyle变量进行样式控制 +## 1.0.7(2023-08-29) +1. 修复边框的BUG +## 1.0.6(2023-08-16) +1. 修复switch开关返回undefined的问题 +2. 优化初始化可能导致的闪动 +## 1.0.5(2023-08-07) +1. 修复分包页面在ios端,nvue编译不能滚动的BUG +## 1.0.4(2023-08-04) +1. nvue修复 触底不触发事件的BUG +2. 更新文档说明事件触发 +## 1.0.3(2023-07-28) +1. 修改可能造成样式污染的BUG +## 1.0.2(2023-07-26) +1. 全面重构,用法与之前保持一致,参数全部变化 +2. 新增多个功能参数,方便一键构建列表 +3. List列表组件,包含基本列表样式、默认插槽机制、可扩展插槽机制、长列表性能优化、多端兼容。 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-list 列表 diff --git a/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue b/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue new file mode 100644 index 0000000..193b48d --- /dev/null +++ b/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue @@ -0,0 +1,535 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-list/components/uv-list/uv-list.vue b/uni_modules/uv-list/components/uv-list/uv-list.vue new file mode 100644 index 0000000..3f3e5c2 --- /dev/null +++ b/uni_modules/uv-list/components/uv-list/uv-list.vue @@ -0,0 +1,147 @@ + + + + diff --git a/uni_modules/uv-list/package.json b/uni_modules/uv-list/package.json new file mode 100644 index 0000000..1b1156c --- /dev/null +++ b/uni_modules/uv-list/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-list", + "displayName": "uv-list 列表 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-list 多功能高性能列表组件", + "keywords": [ + "uv-list", + "uvui", + "uv-ui", + "list", + "列表" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-list/readme.md b/uni_modules/uv-list/readme.md new file mode 100644 index 0000000..930cbd4 --- /dev/null +++ b/uni_modules/uv-list/readme.md @@ -0,0 +1,27 @@ +## List 列表 + +> **组件名:uv-list** + +List列表组件,包含基本列表样式、默认插槽机制、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动,这样做的目的是性能更加友好。在app-nvue页面里,它默认使用原生list组件滚动,这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uv-list组件是父容器,里面的核心是uv-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uv-list-item有很多风格,uv-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容,插槽包括:默认插槽(完全自定义内容)、具名插槽(header | body | footer),根据需求进行扩展。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表等,其他不能满足的场景使用插槽进行扩展。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-load-more/changelog.md b/uni_modules/uv-load-more/changelog.md new file mode 100644 index 0000000..a2e0fed --- /dev/null +++ b/uni_modules/uv-load-more/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-21) +1. 优化customStyle属性 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-load-more 加载更多 diff --git a/uni_modules/uv-load-more/components/uv-load-more/props.js b/uni_modules/uv-load-more/components/uv-load-more/props.js new file mode 100644 index 0000000..c6bc287 --- /dev/null +++ b/uni_modules/uv-load-more/components/uv-load-more/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: 'loadmore' + }, + // 组件背景色 + bgColor: { + type: String, + default: 'transparent' + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: true + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 16 + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: 'spinner' + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: '加载更多' + }, + // 加载中提示语 + loadingText: { + type: String, + default: '正在加载...' + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: '没有更多了' + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: false + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: '#b7b7b7' + }, + // 上边距 + marginTop: { + type: [String, Number], + default: 10 + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: 10 + }, + // 高度,单位px + height: { + type: [String, Number], + default: 'auto' + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: false + }, + // 线条颜色 + lineColor: { + type: String, + default: '#E6E8EB' + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.loadmore + } +} \ No newline at end of file diff --git a/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue b/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue new file mode 100644 index 0000000..2b5057c --- /dev/null +++ b/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/uni_modules/uv-load-more/package.json b/uni_modules/uv-load-more/package.json new file mode 100644 index 0000000..bc502e3 --- /dev/null +++ b/uni_modules/uv-load-more/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-load-more", + "displayName": "uv-load-more 加载更多 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-load-more 此组件一般用于标识页面底部加载数据时的状态,共有三种状态:加载前、加载中、加载后。", + "keywords": [ + "uv-load-more", + "uvui", + "uv-ui", + "more", + "加载更多" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-load-more/readme.md b/uni_modules/uv-load-more/readme.md new file mode 100644 index 0000000..2e9334e --- /dev/null +++ b/uni_modules/uv-load-more/readme.md @@ -0,0 +1,11 @@ +## LoadMore 加载更多 + +> **组件名:uv-load-more** + +此组件一般用于标识页面底部加载数据时的状态,共有三种状态:加载前、加载中、加载后。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-loading-icon/changelog.md b/uni_modules/uv-loading-icon/changelog.md new file mode 100644 index 0000000..f17e074 --- /dev/null +++ b/uni_modules/uv-loading-icon/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-08-14) +1. 新增参数textStyle,自定义文本样式 +## 1.0.2(2023-06-27) +优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增uv-loading-icon组件 diff --git a/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js b/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js new file mode 100644 index 0000000..4ef0e94 --- /dev/null +++ b/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js @@ -0,0 +1,67 @@ +export default { + props: { + // 是否显示组件 + show: { + type: Boolean, + default: true + }, + // 颜色 + color: { + type: String, + default: '#909193' + }, + // 提示文字颜色 + textColor: { + type: String, + default: '#909193' + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: false + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: 'spinner' + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: 24 + }, + // 文字大小 + textSize: { + type: [String, Number], + default: 15 + }, + // 文字样式 + textStyle: { + type: Object, + default () { + return {} + } + }, + // 文字内容 + text: { + type: [String, Number], + default: '' + }, + // 动画模式 https://www.runoob.com/cssref/css3-pr-animation-timing-function.html + timingFunction: { + type: String, + default: 'linear' + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: 1200 + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: '' + }, + ...uni.$uv?.props?.loadingIcon + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue b/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue new file mode 100644 index 0000000..5650470 --- /dev/null +++ b/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/uni_modules/uv-loading-icon/package.json b/uni_modules/uv-loading-icon/package.json new file mode 100644 index 0000000..1485897 --- /dev/null +++ b/uni_modules/uv-loading-icon/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-loading-icon", + "displayName": "uv-loading-icon 加载动画 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.3", + "description": "此组件为一个小动画,目前用在uv-ui的uv-load-more加载更多等组件,还可以运用在项目中正在加载状态场景。", + "keywords": [ + "uv-loading-icon", + "uvui", + "uv-ui", + "loading", + "加载动画" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-icon/readme.md b/uni_modules/uv-loading-icon/readme.md new file mode 100644 index 0000000..7b0cf0f --- /dev/null +++ b/uni_modules/uv-loading-icon/readme.md @@ -0,0 +1,19 @@ +## LoadingIcon 加载动画 + +> **组件名:uv-loading-icon** + +此组件为一个小动画,目前用在 `uv-ui` 的 `uv-load-more` 加载更多等组件,还可以运用在项目中正在加载状态场景。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-loading-page/changelog.md b/uni_modules/uv-loading-page/changelog.md new file mode 100644 index 0000000..4b7ef61 --- /dev/null +++ b/uni_modules/uv-loading-page/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2024-01-20) +1. 修改上版本带出的问题 +## 1.0.3(2024-01-15) +1. 重构,避免初始加载的时候先显示页面的问题 +## 1.0.2(2023-07-02) +uv-loading-page 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-loading-page 加载页 diff --git a/uni_modules/uv-loading-page/components/uv-loading-page/props.js b/uni_modules/uv-loading-page/components/uv-loading-page/props.js new file mode 100644 index 0000000..f1a8a06 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/props.js @@ -0,0 +1,55 @@ +export default { + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: '' + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: '' + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: 'circle' + }, + // 是否加载中 + loading: { + type: Boolean, + default: false + }, + // 背景色 + bgColor: { + type: String, + default: '#fff' + }, + // 文字颜色 + color: { + type: String, + default: '#C8C8C8' + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: 16 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 26 + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: '#C8C8C8' + }, + // 过渡时间 + duration: { + type: [String, Number], + default: 300 + }, + ...uni.$uv?.props?.loadingPage + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue new file mode 100644 index 0000000..8fb26d1 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue @@ -0,0 +1,96 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-loading-page/package.json b/uni_modules/uv-loading-page/package.json new file mode 100644 index 0000000..cc9b171 --- /dev/null +++ b/uni_modules/uv-loading-page/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-loading-page", + "displayName": "uv-loading-page 加载页 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "uv-loading-page 该组件是一个页面级的加载效果,可以在页面初始化数据等场景使用,与骨架屏有相似之处。", + "keywords": [ + "uv-loading-page", + "uvui", + "uv-ui", + "page", + "loading" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-page/readme.md b/uni_modules/uv-loading-page/readme.md new file mode 100644 index 0000000..3a5dd96 --- /dev/null +++ b/uni_modules/uv-loading-page/readme.md @@ -0,0 +1,11 @@ +## LoadingPage 加载页 + +> **组件名:uv-loading-page** + +该组件是一个页面级的加载效果,可以在页面初始化数据等场景使用,与骨架屏有相似之处。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-modal/changelog.md b/uni_modules/uv-modal/changelog.md new file mode 100644 index 0000000..d532286 --- /dev/null +++ b/uni_modules/uv-modal/changelog.md @@ -0,0 +1,28 @@ +## 1.0.11(2023-12-20) +1. 优化 +## 1.0.10(2023-12-19) +1. 修复confirm中快速使用closeLoading关闭加载状态失效的BUG +## 1.0.9(2023-11-28) +1. 修复上版本引出的确认和取消按钮均不显示,还有高度的BUG +## 1.0.8(2023-09-08) +1. 修复两个按钮之间竖线不显示的问题 +2. uv-ui项目自定义按钮示例修改 +## 1.0.7(2023-08-30) +1. 增加align参数,设置文本对齐方式,left center right +2. 增加textStyle参数,设置文本样式 +## 1.0.6(2023-08-23) +1. 修复异步loading时,确认回调还会一直触发 +## 1.0.5(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.4(2023-07-02) +uv-modal 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/modal.html +## 1.0.3(2023-06-29) +1. 增加closeLoading方法,方便异步加载手动取消 +2. 更新文档 +## 1.0.2(2023-06-11) +1. 新增zIndex参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-modal 模态框 diff --git a/uni_modules/uv-modal/components/uv-modal/props.js b/uni_modules/uv-modal/components/uv-modal/props.js new file mode 100644 index 0000000..6cb1f41 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/props.js @@ -0,0 +1,90 @@ +export default { + props: { + // 标题 + title: { + type: [String], + default: '' + }, + // 弹窗内容 + content: { + type: String, + default: '' + }, + // 确认文案 + confirmText: { + type: String, + default: '确认' + }, + // 取消文案 + cancelText: { + type: String, + default: '取消' + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: true + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: false + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: '#2979ff' + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: '#606266' + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: false + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: true + }, + // 层级 + zIndex: { + type: [String, Number], + default: 10075 + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: false + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: 0 + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: '650rpx' + }, + // 文本对齐方式,默认left + align: { + type: String, + default: 'left' + }, + // 文本自定义样式 + textStyle: { + type: [Object, String], + default: '' + }, + ...uni.$uv?.props?.modal + } +} \ No newline at end of file diff --git a/uni_modules/uv-modal/components/uv-modal/uv-modal.vue b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue new file mode 100644 index 0000000..4577b99 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/uni_modules/uv-modal/package.json b/uni_modules/uv-modal/package.json new file mode 100644 index 0000000..2a815c0 --- /dev/null +++ b/uni_modules/uv-modal/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-modal", + "displayName": "uv-modal 模态框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.11", + "description": "支持自定义内容,与uniapp提供的API uni.showModal类似,但是功能更强大,更加灵活", + "keywords": [ + "uv-modal", + "uvui", + "uv-ui", + "modal", + "模态框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-line", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-modal/readme.md b/uni_modules/uv-modal/readme.md new file mode 100644 index 0000000..e1aec02 --- /dev/null +++ b/uni_modules/uv-modal/readme.md @@ -0,0 +1,23 @@ +## Modal 模态框 + +> **组件名:uv-modal** + +弹出模态框,常用于消息提示、消息确认、在当前页面内完成特定的交互操作。 + +特性:支持自定义内容,与uniapp提供的API `uni.showModal` 类似,但是功能更强大,更加灵活。 + +运用场景:弹窗验证码输入等场景 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-navbar/changelog.md b/uni_modules/uv-navbar/changelog.md new file mode 100644 index 0000000..01cc4fd --- /dev/null +++ b/uni_modules/uv-navbar/changelog.md @@ -0,0 +1,17 @@ +## 1.0.7(2023-08-16) +1. 修复ios可能存在点击返回按钮点不到的情况 +## 1.0.6(2023-08-07) +1. 修复nvue在ios端可能存在背景图样式错乱的BUG +## 1.0.5(2023-08-04) +1. bgColor设置背景图片,增加imgMode属性 +## 1.0.4(2023-08-01) +1. bgColor属性支持背景图片,在线图片或base64图片都可以 +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-06-05) +1. 兼容渐变背景色 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-navbar 自定义导航栏 diff --git a/uni_modules/uv-navbar/components/uv-navbar/props.js b/uni_modules/uv-navbar/components/uv-navbar/props.js new file mode 100644 index 0000000..47fe150 --- /dev/null +++ b/uni_modules/uv-navbar/components/uv-navbar/props.js @@ -0,0 +1,89 @@ +export default { + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: true + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: false + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: true + }, + // 是否显示下边框 + border: { + type: Boolean, + default: false + }, + // 左边的图标 + leftIcon: { + type: String, + default: 'arrow-left' + }, + // 左边的提示文字 + leftText: { + type: String, + default: '' + }, + // 左右的提示文字 + rightText: { + type: String, + default: '' + }, + // 右边的图标 + rightIcon: { + type: String, + default: '' + }, + // 标题 + title: { + type: [String, Number], + default: '' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#ffffff' + }, + imgMode: { + type: String, + default: 'aspectFill' + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: '400rpx' + }, + // 导航栏高度 + height: { + type: [String, Number], + default: '44px' + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: 20 + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: '#303133' + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: false + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: '' + }, + ...uni.$uv?.props?.navbar + } +} \ No newline at end of file diff --git a/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue b/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue new file mode 100644 index 0000000..a46ad7a --- /dev/null +++ b/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/uni_modules/uv-navbar/package.json b/uni_modules/uv-navbar/package.json new file mode 100644 index 0000000..8d429de --- /dev/null +++ b/uni_modules/uv-navbar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-navbar", + "displayName": "uv-navbar 自定义导航栏 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "uv-navbar 此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用自带的原生导航栏。", + "keywords": [ + "uv-navbar", + "uvui", + "uv-ui", + "navbar", + "自定义导航栏" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-status-bar" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-navbar/readme.md b/uni_modules/uv-navbar/readme.md new file mode 100644 index 0000000..412ea7b --- /dev/null +++ b/uni_modules/uv-navbar/readme.md @@ -0,0 +1,19 @@ +## Navbar 自定义导航栏 + +> **组件名:uv-navbar** + +此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用自带的原生导航栏,支持渐变色、透明色、图片背景。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-no-network/changelog.md b/uni_modules/uv-no-network/changelog.md new file mode 100644 index 0000000..b6fc0ed --- /dev/null +++ b/uni_modules/uv-no-network/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-no-network 无网络提示 diff --git a/uni_modules/uv-no-network/components/uv-no-network/props.js b/uni_modules/uv-no-network/components/uv-no-network/props.js new file mode 100644 index 0000000..595b1fc --- /dev/null +++ b/uni_modules/uv-no-network/components/uv-no-network/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 页面文字提示 + tips: { + type: String, + default: '哎呀,网络信号丢失' + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: '' + }, + // image 没有网络的图片提示 + image: { + type: String, + default: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABLKADAAQAAAABAAABLAAAAADYYILnAABAAElEQVR4Ae29CZhkV3kefNeq6m2W7tn3nl0aCbHIAgmQPGB+sLCNzSID9g9PYrAf57d/+4+DiW0cy8QBJ06c2In/PLFDHJ78+MGCGNsYgyxwIwktwEijAc1ohtmnZ+2Z7p5eq6vu9r/vuXWrq25VdVV1V3dXVX9Hmj73nv285963vvOd75yraeIEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaD8E9PbrkvRopSMwMBBYRs+5O/yJS68cPnzYXel4tFP/jXbqjPRFEAiCQNe6Bw/6gdFn9Oy9Q90LLG2DgBBW2wyldIQIPPPCte2a5q3jtR+4ff/4wuBuXotrDwSEsNpjHKUXQODppy+udYJMEUEZgbd94DvnNwlA7YGAEFZ7jOOK78Xp06eTTkq7sxwQhmXuf/754VXl4iSstRAQwmqt8ZLWlkHg0UcD49qYfUjXfLtMtOZ7npExJu4iqZWLl7DWQUAIq3XGSlpaAYHD77q8xwuCOSUoXw8Sl0eMux977DGzQjES3AIICGG1wCBJEysj8PXnz230XXdr5RQFMYbRvWnv6w8UhMhliyGwYghr4Pjg3oEXL34ey9zyC9tiD2ml5h47dr1LN7S6CMjz/A3PvHh1Z6UyJby5EVgRhKUe7Kz/JU0LfvrJo5f+Y3MPibSuFgQGBgasYSd9l6GDsup0WS/T/9RTp9fXmU2SNwECdQ92E7S57iaMeJnPQLK6ixkDLfjlb7546RfrLkQyNBcC3dsP6oHWMd9G+V3JgwPHh7rnm1/yLQ8CbU9Y33zp0j+nZFUMb/DHmB7+SHGY3LUKAk8cObtD00xlHDrfNge+Z2ozU3c9dvx4Yr5lSL6lR6CtCWvg6OAPw9z538ZhhZRl6XrwhW8du1KX/iNejtwvPQIDR8+vSRqJ/obU7GupjdNdh2gW0ZDypJBFR6BtB2rg2OVtuub9JcmpHIpBoK1xfffLzx4f7C0XL2HNiYDp6bs9z23Ypn1fC1Y/9PCFDc3ZW2lVHIG2JKzTp4Ok7nv/G6Q054MIvda+bNb74pEgKGtwGAdL7pcfAa8vOKEZ2kyjWuLr7uDh+/qvN6o8KWdxEWhLwroyeek/g4zuqwU6kNrhyZcu/UktaSXN8iNwuL9/RuvVXtJ9PbPQ1vhmcP6t9+47u9ByJP/SIdB2hDVw9MJHQFYfrQdCph84evFX68kjaZcPAZJWwjMXRFpJ2zr91tfuvrh8vZCa54NA2xGWrunvmg8QWCJ/N4ir7fCYDxatkOeBB7an501agXbygVdvv9IK/ZQ2FiPQdi9osGbH+zRNf7y4m9Xu9Me7N9nv0HXdr5ZS4psHgXpJC9P/wDRTx0Vn1TxjWG9LGrbaUm/Fi5meSvcrkxf/Cg/ow9XqAUk91v3qHT97r6471dJKfHMi8Oyzgx1Z03t1YAQVT2MwgsC3u+yXHzi0faQ5eyGtqgWBtpOw2Ol9+/TM+sTOn8L08MtzgQCy+tOHXr3jA0JWc6HU/HF5Scssr4jXcYqfP6V/T8iq+ceyWgvbUsKKOn38eJAYyl56TAuCEr2WYei//9Crd/5GlFb81kdASVopSFrerKRlaoZj9HR+700H10+0fg+lB21NWBxe2lhNHsUpDZr27mi4dV379R9+za4/iO7Fbx8ECknLCPTsTDJ17O33bJpqnx6u7J60PWFxeAcCbMV56dJfQKf1bkMLfuGh1+76zMoe9vbuPUnLsb2DtmOe5HSxvXsrvWtLBEhaTx29+Ma27Jx0ShAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaEsEVoQdVluO3BJ06ptHL34b1XRjp4Ch6Rq24+kmjG4Nwwg+9uA9u/73EjRBqhAEihAoe3xwUQq5WTYEzp0b3ZnV/Ncf6O/9AvY9wlh/6dy3X7ncN512Zw9BVLXjuAP4np44vnQtkZoEgVkEhLBmsWiKqwsXpjbPBOn3gRfenwnc+7GBe+zsjclvonFDS9nA9Iy/u3x9+vAP3735VPk4CRUEFhcBIazFxbfm0k9fHD7k+v4nQFaPQIrx8Gmyx/GJ0J/t7ez7mw0b9MmaC2pQQgh0/ZSm4g5TwueWWtqLt0HuVy4CQljLPPYnB0depTn+b3t+8B4t0AdBUv93h2H9xc6da0aXs2m+r1WQsLRnl7NdUvfKRkAIa5nG//r1oGtsZvjTgev/kqYHF/TA+AXoqv4npJemOEiQU1Eo2l+G0movBK1UBBPU7s9E1+ILAkuNgKwSLjXiqO/khVtvARH8dxDBRkMzPrF/V+9/BlG5y9CUqlXinHv9mRPXtvuus88L9H3JPv2zD2yXExCqAicJBIFWRwAvv3Xqwq0/Pnn+lv/K+ZvfPH3p9p5W75O0fxaBp793ce3AwIDMWmYhafiVgNtwSMsXeHp4eNXJC8Nf0PAdRCiuf/XgrnWUqsqotcvnl9DmRkCdweX4b9N7+m/ih+mbMraLM14yJVwcXItKpT1VRve+ArC3Qqn+3gM7132jKEGZm6tXg86J7OhDfuA/iHwPUpfUZSfu2L59tXxEoQxeyxkEgjKeOnLxHb4RqC+NY5H3+2953d4XlrNN7Vq3ENYij+yZwbG9jpt9GkBPQ5H9zgP9607OVeWp87cOQtn9zwJf+xDMNFfj+jryPqXpxj8c2Nn7P+SXey70lidu4IXzb0DNB4tr9751+HV7zxSHyd1CERDCWiiCc+QPjUCnsaqmZ62O5IN7N/VUNP48ee7mAZDTf4Tt049iUG4Guv4ZfNLos9UIbo7qJWoJEHjy+bP7fNsoOcnW0A0/aacef8PdG28sQTNWTBVCWIs01OfPj66BpfqTmq732UnjgT1bei+Vq4pTv7HM8Ceg2/o1qLQug7T+FaaM3IqTLZdewpoHgYEjV9fphvOj+OShWa5V+CxvZtpzv/LwG/aNl4uXsPoRwI+4uEYjAJ2GmdG8L0FK2mYa+tsrkdXZy+P7x2ZuHdW14P+BLdank9q6Qwd3rf+ckFWjR6Tx5Q2cP58K9Jm3VCIr1ogt48lO237r3//96YofeG18y9q7RFklXITxPXV+5DchKb3ZDMy37Nu5tuxG4R9cHH6b42QfAzlds+3EPXu2rfrBIjRFilwkBIIR7SHoJDurFU89ZOd680Gke6JaWomvjoBIWNUxqivFD87fej0e0n8Fwvr0/t1rnyqX+QfnRz7g+8FX8Rv8vL3auF/IqhxKzR2WCPxXqKeq3krDTdj2ierpJEUtCIgOqxaUakwzNBR0D09yiqePHOjveyOkpxLr9VMXb73V97S/h3nDXx7Y2fdPkAYbncW1IgIDxy5vM7LZt/hgrnLtxyaBrJNxv/72N+6tuNhSLp+EVUZACKsyNnXHvHL+1qcgNf2KbSXu2bt9dcmS9qlzo/fARgcmCtpzB3b1/Vg5QiuslLowENyDWDn8cSjl98PgdBviu03N+rl9/WufLEwr18uDwLdevLTF1YK3xnVZ2HI1bUxrT7z5zTuXdRP78qCyeLUKYTUI25OXbm4JPO00TBj+6I7+db8ZL3ZwMOiYdG4dA1lN9HWte2iuI2NAVPapC8O/CGPR34Ip/AZIbIMo7yX8G9QMbcS09P+2b1vf5XgdrXaPfiYns9oeLLEd8D1/B7Dp0E1jGP042pXQj7RKf546cmGzp+tv1TRf6YQD35/QO3seP3xow5IfC9QqmM23naJ0ny9ysXwgq98BWc0kVhv/Nhalbqe8kd/Fr8MOSEr3zEVWrwyO3I29hl+E9LUHGf+nAXI6sGPdd8uV2YphIKnE5IyL6bLxk7cn3bdkHHefrpvJAExMZ1uBZmqeNzXtfzUzk/m/ens7LjV7Px+8d9e1579/44l0duZtge+Np5zEEw8c2pBu9na3YvtEwmrAqNE8IZvNHsep5//yjl3r/0O8yFOXbv0QCO05gP0JGIL+fjw+uj91YeRh/Dp/PtCDM7Zpfmjvjt6Xo7hW9ycmJjaYduf7Hdf/8HTGfa3rG9rYxLSWnsloPg7fijZV8oFM2Ja2a9t6EJd7bCztvHP7us4rrdD/r3/7ct9I99jEI4cOiQ3dIg2YEFYDgOUJDFj1e8TqX7cT4kImXuQr5279A4DeBEX8ayvprU4N3rovcALot/TH13T0fXDTJn0qXk4r3k9OTm4y7a6PzjjORzOOvn1kbEqbnEprPhRzwAKzwFLHk05hv6Yd6N+o3R6beG50aPSdr3qV6IJKkVp5ITIlXOCYn4Yexr0w/DO6YXymHFlR0e5r7tsM3fxgJbI6fW1ivTeT+SsYmr54cFff+5Cu5X+hb94Merp6/J/PusGvTE6724eGJ7RpSFOkKPCUZvBPBccoHBet3Rwe13rX9tw/PjXzZ5hKvr8SfhWKkeA2REAIa4GD6p0feRdWBnvxjv2PckVhVfBf4A29uG/X2i+Ui2eYn8n8NryuDr3jPfWSFV5k44UT137eshIP2K7/64cObbheqZ6lCp+Ydt8TBO7vTM5od1+/NR4SFVhoLpKKt410lnE8LTMzo3V2dLznxLkhYgQ9obiVjEDln7mVjEodfYcpw+MAsftg/7qSDbAnb97sCSb0Yei2fqOcbovVqKNnNO8HmAE9Cv3Wp+uoWjt27HpXNqH9WTKR+kBHKqEFbvo5y3N/avfu4g23R45f3WGa1k9ZicTd0zPTf/f6O7f8dT311Jp2fHzmgJlI/N70jPPe4bEZ6Kg4qw0lqlrLiNKBiLWerpTW25PUbkPXZViW62ecHz+4d8PXojTirzwEyhq8rTwYFtRjvpX/rlwJ+iSXugPbMuyKBOHo3geRJtuT7PujcmVUCuPJlhnL/9NUqvMD2eyM5sxMaIlE4n7XML907tyNjcxHQjty4sZv66Z1xEok/xNW5n4uZSf+8sT5m++vVO58wkEu5sR09pd9w/rWyET2vReujiqygrSopn/zKZN5qMeirotKeTyolm7p/+X06Wvr51ue5Gt9BISwFjiGsLl6N6SrvylXDNTK70D4mX071pwtF88w6Jd/DG/1E1u26NOV0pQL71y3/8PJVOcHMzPTWkcCH2YGOaTTaS2RTN6f1fQvvvDK1bdnbO2JZCr1SeRfn05Pa1PTU0gXJBKW+ecnzlxvCGndhFQ1NRP8bcY1/vjS9bF1V26MwHwsVKiXa3etYVw1TNhYJ3TDjQCO42jJVMcez7J+t9YyJF37ISCEtahjGjxkGDr2DJZ31D8h5vUQJL5RPkXlUMM07u3qSGidICvkzzuSlmlZb0olrK9hD9v9JCrPC196JoPMAolFg6CV+PPj54YeyWecx8Vk2v1Q0rSfhFT18LnBmzBRyNalp5qrSuq7kiAsh4SFa7oZ9M0wzI+cPHOjZPo9V1kS1z4ICGEt4lhiCvZrSa2jol7qzPXJPk6nIGbVbWfUvcr7hO9MP97ZVXpggOu6ajplYStj7l1XvbRMXbPAbp6HzSSBlkraNknrvfVCcPt2sHYi7f3pTDb47KUbYxuvKqkKpYBXKBnV869c3WgbDEixAck0FGFFfEzJzbIsO9C1TyrcymWWsLZGIHoW2rqTzdo5dXyykz0NC8l779i5vu4zwM+eHVntGP5jqVTq/6AkVc5NZ3wNH2lVxNWZNIukMSjiNd9z0+CHp5DXAdX4SAg203w8GB5IATtODHzdK8C15kEjhXvNS9rWA11dnfcMDY9prscss48RySakrOLWqODCoIKAgkuVgsS0urtD60haeV1YYVbbtjUn6/74HXvW/11huFy3PwKzT1r797Upe3jq4sib9u9Y+wxe+vh7W1N7jx49v6ZzbffnQD4/Cj1Pfjx54XiBls6GVuTUc9mQsOIO9mPQFdkIRlz4fy5JLm2ZMOqTcJaXIqpcqnixVe+rdbZ3dbc2OT0D0wZIibHSksmklslknvx+//q3PiKnXcTQae/b+LPQ3r1t0969cOL6G7o6E09qgZegdMJBpVQ1DbKCpyUt6oPKz/4NEJalCAuZFIuEVBJd+jgLh4rvAiFqUVGkhJZMWFp3Z0obGSu/d5gSnWmavuO6h+/cvYHSobgVgoAYjrb4QPMUiGtj1/79jBMkLBwiTlMASlYzTkhWCJyTrGAyMOFkst/BoYMmuIIyGJYcMXMMdNwHPhYN1qWS1t6ZLGaKZL8yzFXTr15BooLLMugHMBRNKgW+It8y9TEcJGt4rvcRFCCEVQbFdg0Swmrxkb0+cf2XOzq73kgdFieEXF2jdEUJKQH6SVWQrNjtZDKlpTPp38U58iUbthk/Ph7sN6zg/xudSGvD4xkq6otcnnjyF0XRRTflkyC0IIJE1JG0QbqGNpMNp5xFhRTcZDNoj66988SFm5vv3LX+WkGUXLYxAuXnCW3c4XbqGs9hwjv+a9lsuN+ahOJSCoLjNDAFvVUll0p1aNPp6adTweSflEszPO48oFn+4yOTmR+6enOshKyYhzWpf/jDuuf6x2aV/qNRaPG/1d0gUXWCA0uu7GhMmkqmerEc8KOVU0lMuyFQ+Ylut562YX9Sncmf7Ojo3BDZWbGLtMkiUVXSWTFNuMqWuYG530f7+/tnGFboxsfdd9mm8XdDo9O7rg6NFq0CFqZr5DWlK9qV0fZqGvZchSuPlevB2VmG/hOV4yWm3RAQwmrhEcW64qu4ykfJho52Vp3J8quBYQooqWDKADftBd6HD+5efyoKj/zR8ew/hWXY56/cnFh7a3RCTTGjuMX0SVB9qzu1qfQM+jO3dBW1g6uVSHv/qVNX10Vh4rc3AkJYLTy+WA/8ou9kJjo7bOh+DLVFZ64TEbCyBktxI5PJZj56R//Gx+NdH5vM4vuI+p8NXh9LjU1iw3EZhXc8TyPuuV9wDaaCfBjTM06N0hVWQmHBDzvSDZ5tvqYR7ZAymh8BIazmH6OKLbzv0KZvJEz3ZzEFnEolaEtV2XEaCLKadrIz//TQnk1/EU85NuH8th8Yf4j9gMZUOrNkZEVZCnsbtTU9KW18GqcKFyjh420sd2+j33pg3F8uTsLaDwEhrBYf04O7N/2t7/o/C2FoGnsIy/YGlvAwSfCvZzLOe+8oR1ZT3u/5uvHJC9dGtJlMrfqjslXVHwjpat2aLi2rjFFLjUSrFUjlO0juddXSSXx7ICCE1QbjiHO0/hofbPgwpnDTOR2V6hWNQqGUx34890noet5yaO+Gko3Y45PO7/uB/lvnrwxrWdha1absbgxo1FWtwplXqYSJY5Nn5lU3bLHQmGA/yko0plVSSjMjIITVzKNTR9sO7dv8RSeb/T9BWmMkKv4D+YzBXuljV7yxd+zfte6VeHGKrHTz4+cv38JWmyUmKzSGG5z7VndoE7kz3uPtq+Welvhwm39weVjOyaoFsBZPI4TV4gNY2Pw79mz8KyebeRIH+VEZTaX0sf27+v794TKmCxNTzr/2NOPj5wZBVjjdYSklq6jN69dyKuhqmWztivYob+RTSkPbe/xMdlMUJn77IiCE1W5jq+s4dYEO6mzsYAmvi/+CrH7LDYxPcBq4HGTFVcG1ULLT5orS1ULIkoSFI2cMHKG8obiXcteOCAhhtdmo6gaOh4EWWlkyYU9gvHswXfgV19d/7+LVkSWfBrItJJhObL/p7elQR8fUZnEV70XxPc01sM+xrzhU7toRgZIHuh07uZL6xA3LBaYB+Ar8rBsfz34YX1j+D5eu317QNGy2xPquSE4mDuXb2IujY2AgytNE67RiKFshzuwCR5s9ZSMlsK0QEMJqq+GkBKOF5yFzRoidK5BoFCeMjM/8mG+a//Xy0Li55KYLBRiTrGjwOQ1br4VMBQuKVJeQKVPxMLlvPwSEsNpsTEECmBLSgbHUpwD1YGwse59l2p+9fmuig4fiNZIowrqq/6Xeqm9Vh9JbjcOKvqFtACX7gV8kTVZvkaRoRQSEsFpx1OZoM2iKxxuHLtDcsZlgLzYZfv7m7XSv+r7fIm234XSP/8o5ktWqzqSyZr89PoXPYDTYkZvziw0NLluKayoEyq4iNVULpTF1IaDjHHZmoAW4aep9geN8fiLt998cGYdtVp7K6iqzXGJFUCAi7jdkuapsBJKcPBwgyP8YRyV7B04Q3dDbpY3jg6gupoMNla5U41BbUN9n0sr1ScKaHwEhrOYfo7paCAW0WiWknihhW/0Tabf/6tDtxpIVSIhGnz1dSXUkDL8fSHKi4/lWPId9Kp3Vxqegp8J/m9f14D6DQ/nmb281FwgkZ1Dj7bnSSFx7ICCE1R7jmO8FJJr8jCvjeNrIxFjDJBpKVaSlXhwDw384MyucBoLAGEfHI5ptO6n1YAq4FjorH9IWjUOnFlF3pj62aui3whbI33ZGQAir/UY3XCVEvzgdw/8NcSyGUhSlpVWQrFg2p39xp0JYLyIohaXxdZ2FGofG6yi85/QS32F0Asu8URgu1+2JgCjd22xcsVElPC85169Gaa1YTkRWJKpSqooBiQQzONvq9sRULKKxtzzAEJw1api2EFZjoW3K0oSwmnJY5tcoSD09HanEDztubnfO/IopyUWC6sUmZUpW5aSqkgwgK04DxxaZrFivacCaIdAuH9zaM1rSDgloOwSEsNpoSMenvU93dXb+EE5taFivKElRqd67qrNmsqIF+yjMF/i56MV2JqadYKxXMDXM6+4Wu04pf/kQEMJaPuwbWvPticwj4Il/NnTrdl7JrqaDC5wTUle1GmdWWVCw1+JotjA6PgnThsIdQrXknF8arkJi/+R355dbcrUaArU9ha3WqxXW3tHR9C5dN//T9eEJ3aGdUwP7T0V7F86Mr0VW4mF6o2NTS/ilaB2HDmb8wA2+08AuS1FNjIAQVhMPTi1NgwRkGKbxRxMz3uaJSRzVUkumOtLwo6Zc7aOkVdEhynN9NQ1cyuNqeEqD67mX9TXGyxXbJhFthYAQVosP58S0909czfqJqzdGODVqaG/IUbCWr2p0yukfp4FUtDfeir1yl8IPUGjPHFy/fqJyKolpJwSEsFp4NEfT6Z3YBvOp8MvMc0hAi9hHNQ1cBrJil5TUZxhfXsTuSdFNhoAQVpMNSD3NMTzzU1PZYAM/ProYkg3UV5rHT8lXmA7SwnwEq4FLLVkRI04HM+n0LdvzvlEPZpK2tREQwmrR8ZucCd7hePr7rw2N5PfxLUZXON1zHKz4kb0KnIttP6Njk8tyaimbwXPrsW/yq3v3bhoqaJZctjkCQlgtOMCYCnU4GedTI+NpQ32XbxH7QOmKG5nzdIWZJz8HNkKygqI9TmSL2JSiovGVn0A39c8WBcpN2yMghNWCQ4zPc0HRbr6GEs6chJFnmfl3knZO4/hmII1B6fiFG9br0s6qAeXPp2WUrhzHeXH/jr6n5pNf8rQuAkJYLTZ2kK7Wul7w6zeGx9DyUsZovOodOizosTg1TM9k1Wogpa7lIisOF+w48E/7E5B1Y/cgtdizsBKbK6c1tNioT6X9n3MDcyePOo7OoJqrC6S0+ZIYV+GSOHxvc18PJCxXG4ed13I727axqTp9yk9rX1jutkj9S4+ASFhLj/m8axwdDdbgELxfGsLpoZyqVXPVU1QugVJUV0dC27p+FaaBWWxknq6ceAljTNMiAf/BoUMbJpewWqmqSRAQCatJBqKWZpgJ731Zx9pJM4aK0hXe5vlKVFEbKFlxs3PvqpSSqpbzKztRm+gnEkktnU6/2GFMfa4wXK5XDgJCWC0y1iAR6/Z49iOjY7C5qkG6mk+3SFQGlEP8FFdnygrNFqBsn1OxP5+K5pGHbcBhqhT8fqu/v39mHkVIljZAQAirRQYx7Wj3Zj3tddQjVVJ4l50CMjHe8mqOTJCCvmoTyIrENXx7Uinbm4Gs2PZUqkObnp76i0N7N36tWl8kvn0RaGnCGhgILKPn3B3+xKVXDh8+nPseX3sOlpt13+P4uonv71WeDqLr1ampFB8S1JrulNaHc9rTMxltcpofOeWns0rTLkeIZUHRnpm5YibMf7kc9UudzYNAyyrd8ZLpWvfgQT8w+oyevXeo++bBtaEtQd9s1/ffRsV3I6eDJCp+nourgH04UZQnhIYfWm1o8xdUGCU8/E/bil89sH3dlQUVJplbHoGWJaxnXri2HTvd1nEEcCBS3z++MLi75UejQgcmJjL92ax/gNJPo6QekhVXAbdvXI3D+XQ1Bcxiu02zTAEjKFIdHTQS/S8Hd2/4YhQm/spFoCUJ6+mnL651gkwRQRmBt33gO+c3teNQYin/oG6aKX5rcKEukqqoWN+Ij5vy81v8UATDG0WGC21jlJ96K6wKPpWd8H8jChN/ZSPQcoR1+vTppJPS7iw3bIZl7n/++eFV5eJaOczX9Z2YvM1LPxWpocBHKv8qHHdMqSphGUqqahaThfj40ITBcbLnsDj6oXvu2bS4n96JVy73TYtASxHWo48GxrUx+5Cu+XY5RH3PMzLGxF0ktXLxrRoGNVPPfNtOolIrgElLGYH2wbZqcipdIFVFlDbfGhqfj9bskCaHHS/7gTt3r73Y+BqkxFZFoKUI6/C7Lu/Bl1jmlKB8PUhcHjHufuyxx/g5lbZw+BL7bX4EoiZqyS0T0uM0j1+82QSl+ua+bhxj7GjD2LicwWkLzaarigbKsmDJ7gcTmezMBw/t3ixntUfAiK8QaBmzhq8/f26j77pbaxo3w+jetPf1B5D2RE3pmzyR4/nH+Mti4Wx1dUrCHO0lSVGqskFUnakkpn6mhu086jgYHkWTW3Wbo4Tli6L5gqYHE47vfeDufVv+YflaIjU3KwItIWEdO3a9Szc0ElDNDqcLbHjmxas7a87QxAnX9ljfxcr+Mzs29ykpi1O8iJjoR/cm5o7dnUl89LRLW93dyWmVIip+Kp7pmlWqIvQ8Mga9Gslm3Efu3LX+K008HNK0ZUSgplnGMrZPGxgYsIKeXa/TA61jPu0w0+7xBx/cd3M+eZspD0wbDgWm+RXP13cODY/jWGKuGAb48jG+agNpilbqlKZoWDqDY2AyjtNUlupzYZlKpXgaxIVMNv0zd+/d+uxcaSVuZSPQ/IT13TN34QRvZW81n6HSDdMLUqmjh9tgd//Fi8OHEl3JL3Z2dh3MzGA7XU664llVWRz/QhLjNYmsmaWp/DjCjqIDdlaZTOZZ1/A+fGj7hjP5OLkQBMog0NSE9cSRszuswNhdpt31BRnazM3U9IuPHDrUuG+419eChqU+cvzqjp7u5P9KJpMPpqc51Zv9QntLkFQBEqZluVCw/7nhaP9i376+8YIouRQEyiLQtIQ1cPT8GjOw7vE8tyFtxBrb2MBXdh579FF99g0vC0nzB548ebNHT2l/aFmJj1BPBYyav9EFLaQ+jdPAVNL8/pZ13a8qiJLLOhAAjvrTRy/d0enbF+69d0tzHFhWR/vnk7Rple6mp+9uFFkRGF8LVj/08IUN8wGp2fIcPLh+4sCu9R+F3ucj0MLf4vaVVnChqYWmdaQS2jpY2vd0djh86Vqh7c3Yxm8dudTPxaW0lrn7yJEjZW0Tm7HdC2lT0xKW1xecgHE3FDWNcb7uDh6+r/96Y0prjlIO7ur7TOD5b3ayzt9ylY0Gl83qKFXZsCXrXdOlrV3djf2LBr556JOshLDmMWhPPXV6vav5O5jVxYLUhNl3iIbV8yiqpbI0bQcP85C2Xu0l3dczC0XUN4Pzb71339mFltOM+Q/0rzu5f2fvu1zH+QDOt3uZ0pbVRMRFouJK5qqeTkhVqyBdtdUmhGV5JI4cudrpd5kHiyp3tTU/8s6r+4rC2vCmaQmLWJO0Ep65INJK2tbpt75298U2HLuiLh3oX/95L+0/kHUyvwTieiUJHVEimVzy1UKeWMqv2pCoKEVFRNXT1aHawnBx80eAZj7TwcxdAc5Gi5fiaNnNT37nCk4xaV/X1IRF2B94YHt63qQVaCcfePX2K+07fMU9U7qtHev+xE/7r3cc70O+6w1gxuV0dHZiusgvJS/O7IskRXLs6KCxqj+B26t9a3uUREWi4plbQlTFYzXvu+7tB3EIUGel/L6e3TNw5NS8zYAqldss4YvzBC9C7559drAja3qvDoyg6pwCP+KBZaVOPPjazS1vMLpQKE9fuPnawDB+EqehPwzWuAuSl8LPg90WVxhJJPWQCUmPBAWTBEz1TFUGpqO3wYYvIPgr2az35a2b1/50V6f1e1NTlVcvEzB0xRekj67usu5FmS2/crvQcaol/zeeObfTSOj91dIq28PxiaOHDx9quy8LtQxhcZBqIS0Dhkl2l/3yA4e2j1Qb2JUUD1Iyz1waOQib0vsxKXsAFvH3wMB0JySwtZC+DBPTN5BOCEnhrI1BuKe9l6tIzsVCiD6E0DOabrwI2elZ09aP7N3aNxjheXvK+a1OENa0EFYEyYL9rz072Ju03ZpNQKj7Xd899cKhNrA9LASvZTY/s9GcHoK0XsrakLS8UklLxyl+/rj+/Qfu2367sJNyTS7SuZfneO7ffweBGScu3NwAqWgrTvTc5jjBZmw87tMCfRXYKQWOgula4OiBOQUZ7DZuhrAGdQXxV0zPuCaGnkv3VPGHOpPw7+QPR62OM5HhdNddGOeX2kmCbSnC4mDlSStVTFr4eLljdHV+702vWz9R66Cu5HS5h5hmHvz3QiOxwJTRo2BGgY06dm7OVhewYGAY6s75oD+ZDs4JPY9JyqSCQ7ABqftd5VFM3/j2Ja4mtsWpJQSq6ZXu5UZTKeJnsHpohiYPRqBn04nkS2+CQWW59BK2dAjwS0Y4IHDz2ERWG8Gnwm7iK9W3sFmbvrqGPzw6gW8eTmvTM07XmTPX28KYd7EQ3rjnvv1QFHbPt3zT9DcMPHd+13zzN1s+/hC2rKOo7NjeQdsxT5LEWrYjbdLw05eHtwWe9jl0542u62HZHZIVpalY/yIlP5X3MHYddLLZfy4fmYiBhNuB509vw+rG3tKY+kOwGHLi7W/cS91jS7v4s9TSnZHGLx8CICH9lXNDX+zpWfXuycnaBV2e3e567nAm4973qv0bzy1fD5qr5oEB7KXt0u7B3Loh7yhWVfypbOalh9+wr6U3mbfklLC5Hi1pDRE4ef7Wj+EEiZ+amqpvJT2bzWjJRLIPR3n9riA5i4DZg720DSIrlsrvHXSZ9p7ZGlrzSgirNcetqVp9/vz5FJTqj6JRejTdq6eBMzNpHP9s//QrF4bvrydfO6f1JrCX1mvcXlo98Kembjotr3wXwmrnp36J+pYNeh5JdqRem83O77gxkpxtW3bgOZ/g1HKJmt3U1Rw+3D+zrc89aunagnWzpq6PdxujLz388L4F78tdbtCEsJZ7BFq8/sHBoMPX/I9hyrGgnuDUUZzrnnz7yQu3HlxQQW2Ued++fZmJ1e5LoPB5k5ZpWCPXz+08du+99zrtAI0QVjuM4jL2YcIZeh+2+9wF49MFtYJSlgmHE0g/JlLWLJQPg7RmhtyXsJ18eja0tivsXhj6xy9ve/mRR5TRcG2ZmjyViN9NPkDN3Dz1FW5z9XM4i+s1ME1YcFNpUIrVLHzJzHnwjl0bn1twgW1UwPHjxxPXpztejR0HFTc+F3YXRwxdfdM9W08D0zrs4wtLaM5rkbCac1xaolWOvurhZIPIih0OdVm2haNTfqUlAFjCRnJP4HBn+iUqz6tVa2nGpTe/etsP2o2s2G8hrGqjL/FlEQC5GHghfplSUSMdvwaEA/9+4vjpa3c2stx2KIsfUek2dr+EuXNF2xEjSJx98w/tbFt7NiGsdniSl6EPp84O3W/Z1oPzXRms1GRKWdCJdeCIlJ+vlGYlh997r+70+EPH8NHJEtLCauCph+7bmj81ox1xEsJqx1Fdij4Zxi9AT2KSYBrtslgxhOD2gWOyz7AstFzx6zFHj1mGobYUYAgC9cHge3ddK5uhjQKFsNpoMJeqK6+8cm0X6noXiWUxHA8WxAdWNyQM45HFKL8dyiRpueM7jllmMGpnjO+1w9fNaxmXxiogaqlR0jQdAkeOBPjczrnOiQ6jw88ESSOA6KT7iQzOHEvavu1pZsLQg4QPP/DdZG9Xx/vWrOr+mfR03SvtNffdxleAQIgvTzjBT0w409Mpu2faufZy+vDhw5WPMa25dEnYqggIYbXqyNXY7i/jCyvdfmaVb5hdVsLp9LJGp43j1/1A7/RdvdMwPRzEboRnLVHe9vEvL3eXBOB4ZMta22H+TiqV2LJQ26u5u6Bju44Z3J7O/Lvp6cwPmBanOwQ4uNHRTWMK21bSvh1Mm642nTWCtKkH07rnTE72aOO0XZq7bIltVQSEsFp15HLthg5J/+aJE12m3tVjOPYq1/dW4cTjHnwMYhXOce8xDd3y/PJW6OpMdsTRVy4iK/rKMR/jwvz825VIHFzT3fkx13UW/dnhRy3GJyeeHEs7n1XNibUPFvY6vtGDw5vV9w0Vofn81qGhZfDhi3HX8SfQ/3HPMse9CWcCX0gel2OIFJIt+2fRH7qWRaYJG85NxldGzV4tGayFSLQ24+q9ULyu9gJfMU5ELTn6wUISTl03NHz1KzyiJLqmX657OLLdSJgoXTO7cBxyN172blier4YCvBsFdSNXV2dC35tKJrbzfPfFdjwvC/qs9MSMxxNRsSqmT6LhUDQHE+jUBE7UnATXTuLsrRn01K2l/x6+qItiR3TNG8V59KNB0DGSfNXGUXwJY2Gm+osNhpSvEBDCasIHgVLTt75/aQ0MnXpBNb2QgNYEntfr4wu/nBYpKQLtxtdwAh0SBX3VDe7nM/Ha5vf1Fb/CURS2bCTAWWuxR229qRsbQQQbUed61LfW14JVKKsTJ5sk8WUcHbtlNANyTOhgcmAGKH7p3m1FWpqtuZCu+LByVdKHVMjpKEQrBwIW9tnpXOIH+QTDSH/D9f0bmCLewDn1I4HmwtAypPDZ/oe9oXKf/aMPsWxSs/RR13FHrURiZE1gDR86tKHEdCDMKX+XCwEhrOVCvqBeHNaW6ui11/mWDtLQ1kEiWodXE4rwYgepAPssTPCMOjIdAk94TZ8pMZjch8HjDorGFUTUAwlkh64be0A9/ZCatiDZWtOyE7ClQmIdJICJFYhA+TRV4Fo5/QIHiUvrTEbkVRCxiJfsSBbfYk87OTExXxdazY5yUgiRKfpHQ1YSkONmAZY+gV4NIeVFfCXoLNA5h/Plb5LzWAyzF+IVXdNnvO/6GcsyhjC1vmWZ7s2pO3fdOqzriy9asnJxZREoerDLppDAhiIAEtCfO3F5rW0a6z1PX4/nf53nG5RqqrpieSnULEVh8cx4E7ugH78H8tG9eP/24oVezY+pkpA8b/abhPF8le75BqdsXUtaFeaTlTI2IByEoU1l8oq1mkokcZHElIRoWmpejMMCMyCvQXyy7JjjuUcgOl4tLCzCMpTHgFpcgkViX/dH/ax2Szf8m2Yqc/MN+1r7BM/C/rfCtRDWEozSkbMjq7NTY5t13dqE6dhG3wsSqlp+C9DDi0ifLrqmT1f6BgUaPjiHN0lJAGAfvpWcI4XjiHIMF6ocO/EjmMa9HeelQ1LT1PRpoce/sJwOTCQtc+kfGQp6Uxl+9JWtmL+jNEaJ0gKBgbsygR58B4sHfwV5aliVWg3vCHv6ymHcdG868IzrVsK6pnd71+/dsmXxbD3m3/W2ybn0T1/bQFe5I8euX+9ybuqbXMPbDA7ZCKV4uMOecyz+9OfmWvj9x9zEw6JW+JuOX298WhE6qtwLEV3TL1tb/AWj7sqwfqaro/sdmcyM+vBp2XzzDEzaBiQsNH+e+eeTjQ+ohwqnG0BYhfVzNYKrkOmpyauYYH8KvD8G6RPBszrC6Jq+ystl0ghzXEZjR5+O4+iZwTh+eG7Yqa5rq/3hGzzTSkXKn4YgIITVABjBP+ZzP7i8ydasrZCetuCHvIvFRs92SEdlpnCYE2LOQi12OA7RNf1yjrphHIyE9yOXPnfNMDg70DpdTf8DWDKs5rRvMVwChAWrUgh21HzllD0NrigqlxKVC7bKQuOOWeGiuI7OTkhb6T8C/Xw3xkel9cXxj6eIxiY3Hhx3X9dHsWJwDaa3l1+zd9Mt/F4tUk/ijWnP+/DBb8++LWqvnh0c7NDGta0pO7kl6zpb8AJzEUr91kYEFdeBRCt69Nm4+AsSl6jwjVGckY6VwPwUpLhLURx9xliWvxFHi/w+zB0SWCnLsVpxnoXesSI2ngp4zmRJXPgf/0IleGH51R6uwjeX5MR76qtITh7+8N9Cp4GF7Sm8Zl1s35pVXVomm/5c1vG+Wm284njHJeJq44/FjixUAld8w7uijW6+xo3MhW2S6+oIVHumqpewglJ87+LFtcFUcqur+1vxwPcZJqYPMOyhXw6GKI4+4/GwQpjCBhe+6XDIpFb06PM+np5hhS5eXzw9bLJ2pBLGv4Fe36BU4kA6IQGw8MUY6MJywVeqDs54Z69zrWdY7jI3G1ZtUiSV6zzDI3IqLLew/wu9jspl+yywrA1pEed5QceXPT3jBb/DLrA5ua5UHZ/4eMTbFx+fwvE3DJO8fANrjlctL7giJhRx9MrfR89R+VgJ1Y6currONuwd0FNsxwtV02mPlWGLy1TxlPHf6Hh8PH9xesvw9yRM+5PIRT2ZIgVKKZxWUY/PT8aTFPji0i3m4Ed1hDWV/7uY9bNGtiGqAyorJRWSqCgdkrQiR5KddrwPlsq8xfhG6efvx8dvtiQczDdmmPaldDBxSVYeZ3GJXxUMWzxq5d4fPz7Ym7X1HTAL2A7NqtJHEQ3qtCPjw3LoxB/v+OMZ5VVzR5aHWRuErYA+y4uu6fM+Xl9J/lh7bFvbY+vmv0bWos9tsXAWSLIiaSnyApHxJz6SbFSFuXTw8i86r5vVRW1m+6IHmUREAuI0lcREP5q2ztWPrO9/YK54xsXHI56+cePvj3qBfimZNS+J5FWMcrjptThsRd4dPX9+DcwEd5iQphwozfkCwJKaLv9ewHYKeicfSudwShcnJDBBOD3MTwGRO0cqLIj73jQTaejDBYaPHTBgJ/i5+HyYijd95sFhRzkzB7yL2IrCtGwezj9nOQVTUlfPwiicifnu5J0qHHd8mXHIG6ZD7JQqIk9kJK6QwAokMWRUhMaSeJ0vcfaiXNhs7PyuwpYV51Vh+EM/Pu2M9GckpyiOuZm2Wvtom+Y4me8xPbvIIujzPu6Wbvyt1ejL3U7Sv/v754ZHsORwaX3KGdwiJhO5pzY+Mivk/urVq52jTnIXlEc78LKu8qAMx/G8kHhyOicosz0ovM3IrIDKb15HSvDoOoqv+hMLYCOWI8ash0vmufryZVcqLz4u8fym3ov1xT/EVp4UDUTn4/iS0xW+sZTMojASmLqGp64iH4FRXJQ2TKj+lv7JVRTVxwQkm9APyaboGnGMzSVR6VR87ipsVT645ovOzi5tamb6zzB1/nqzjz+s9YetwLioZW5C8jq08K9+1IxS8yQsfF6ap1WL2BK8VOaJc6NbPcPrx7wJ++hmHQUPvOaQgMJ3ETtVlERDP0wVsQ19uPgcLQyt/Dc+p4jlL6k/1xa2qVyh5ApEzEoErm/DsPOTXV3de6anq36roFyRdYWVbVSshHJEMt98saIXfIu9koplYZL6m/hUz7kS/Jt0/PE8+Jj6X/Y6k+fv2tA1BKIvB/OC8WnGAmp5dpqx3XW36fjgYK/upXbhFd+BrRlqn16MfkrspkoC4hnirYjbUVWzs4rHx8uL3cerjwt0TA4RcBcsuX8Rn97q54okVsCKJJ9YkSvy1gJR4aOtnAr6OJP+L13d+BKBKMEzHhAfgDh6yzD+vqHjTDDvYpAxLqwEfVdbE9bpIEi6V27tdLP+LnzPrWS/XrRTnz5d4e79+LNY7r4kP+Z7Jv7z1LyPL0B4Tb+ci9cXLy+eJ54e8Rw//rqqcUR+HOrgYVprJbBl5E2w63oI64J7k8mUDZLGhmAXs19ucVkxP8gKQu4ptCxbMy2TW3KAGI4u1P207ztH3CDx/7bL+Cdse8h1Zy5ev7Dp8uHD7blJuy0J69TV8XW6l92Dl3cbLG6g98idbhDgdANcY1ZY9o2N4mpNr96GRf1Da3Wui0RW69F1bWslvp81LD2xDTOGu9DhQzBc7AcYfYlkAqo6A6ozqHNBYJTESGitTGShsp0qQSxT4AcoPJQw0LBlEPhBFakHDjoLvY+XgVIyg7WK77tG8n9pvpHXBbXL+OMBd7FN6KLu+uf27esbX9RHdIkLbxvCGhgYsDb3v2a7obt7YHakpKmYiqgE2ioqJbzIOszXcSov/DAzRRNehyJKvPx4+igv/ZLKEaCkoZxUFMYXE1I8f7Xyq/UHp9CkAlfbCF3NdlhS7IQguA0N2wiJYy1ktC5IISb1Okr5jSYruy2SGlYkIkKLSC3yy/WrUWGzSnjaTUX/QEhYQuNewLCdwBFKRkpOuAfr4sBnwwfDg6B0MHagORhBHNqHw5WxTwYav6lAt/42MBLfrYZXHO9w3Ftr/B0Hp0pY+tkD29ddAz5ln8NGjddSlNPyhHV8aKjbzAS7Dd3egRcvgRHJWyrHASw9Pyp+vlSxEluH0jWAGQF9VVZMpxHVRZ/xSKQU4PR5Xy0+/sLQZCFS9DN/XKtSeh5WrL2x+sMyZv+W67+vwz5eC7oDx12rm9pakNg639B68XL3Qh+2Bm94DySxHhg0daBHSQhiCbyyyMS9SDi8RhEHyYP1qD9qak0S4VGn5VYrSTRKEkKHWYYiHuQmCYb/YKYLqS+3H5LYckxJmz6qhSYJ5yNgzgtuclESpncBfN8Fj3lgJdCSGpHcGECoxrouMoHjzO+4evLLMB1VKxJV8Wyj8Q80Ix043jnTu32hlTdkh08Yn7UWcnio9Qs3pzZm0lN7LCOxIdIZxbuQ1+lAVFFxJB7aMeUIiPkiPRPjo2v6dPF4FVjHnxi/oQK0Az/bymf5uI7ayGLj6eM63nrbF5VNXzV7nv3HViQL3JAEaSV1z0iBNJIgJBCYkSKJYbdjEiSHw7a0BI5s6QBBbINUswMUsQ6E11UojZGccA9dcZDBdQY+TgyFTgkiEKYyIBvstAQzIRk8cBJ+A2j4gZFDFWAqjAp3V5IhQYYwwUJ57ByS0QINzMYK8FyrRxt3KNbXb2qG/UVNT5wDyCt6/A0boGbdqzPA4tD21SPquWihPy1FWHjQzYs3xnZkM95ePIZd8RccBx1xez/UPowp46I4+uVcLD9/8Plq0Gfy6Jp+uez5uqPyY+UtNN5DuVQc06drpv4bIDXsjtsMpdkOSC79QK4Xog3PzwF4IBNCBiIhpBSpoE8jioqWaM2KCRuOqwLXgIQItKIe0lCYD/lZjoqgGIo0+J++SsmMKA8eqQ21qHuUh2PfzQHN6vgG6vVK8GfmQhcbr3Yff+AEi3rtdCtNF8u/eIWD2ATXx4Mg0XH1Vr/hm7sDQw8PvyvTrriKWocEE0C6oM/kJRJHrAykgj6WGlq+JUifu6YfS6pu4/UVa6AgQcXKi78ApekhcWFBwMstEkTX9MvVHw+Lt2ex+4+Pg62CxgsHEwZbAdgWIJfA+ICkfDRYtyAwWWB7Ay8F8VT/KB0bOJ4Gx/CQfUKSwZGrJJs8iZHYgB0zMB+zk8hopQ8hEcEog2ERASIBAOL5fIrVIKLxXKtzKPZLgZUckvGf+/nH5HsK0+Uz3316zeAjj3D23Lwu90w0ZwNpiZ72UnvwfO/AXIFnXfLBxLOsHn6yiLqmr3oQ04LHX9hq6TFHI6txrlYWkHj98UT1lh8vryR/rIKq6aO204drdP8hRWF3itmLUw42QnW1CSTSA2IAIXkWOBYKLWw8wjVqNkEaFqjFwLQNJhWI4ZiFoiq6QX0SbsEo6HMoWVFCYprwjw6FP65BXCSoXJwiOwpnFK9A6yiWkQhRDwA9XAfpwLS/AqnqSKP7jwapquiznXFXMn6x8Yg/X/HySvLHKqiaPlZfvf0H6BloAM/v3tpzHkJwUx59Uxb4GE5Lfnt2ZGS16SX3+F5mq4llfegtwnaSR6J5EC8hPUV6IDaS6aDnoZ5DpYe6AtdgOr4pyhXLNPH0KKCo/DDP7N+S+mI6qHzbQr7AbdgW+iylWn0l5cf6E29ftfSN6L9lGl04x30tOtMHklmLhxpClW9BL4S1T+i2uNPRp+0FflD0AN9A9LHnmHGBBfJCE3QL9ALiguoJqiu+64gDzWGIIAlhzhaSDsMV/yjJi3BxyY9khP9BXBSzEMY/AFORGMmM1yyKZfmm+ZKuJf4uMHV1THEj+o+S864E7zYd/8Dliqp2MamvPbt9uw4dY/M4DnXTuMuXx/scK9iHLcbryzfKwvOJBSGNPl10Tb8WV0xYyMFymDdXXv46Kq+ueChJQI4WlSUqf8StOf5CNdXqr9afxe8/Gm6AoLAqGKyCGLSG350ACFzKM2FvaeOseEhFOsjItdQ2S6wYYmkOdl2+CfLBvmpIV55vYY2Qn6uAxAWC40zbhxSmWArcQj0TSIiSU37mx0kgVesgLereOSz8E5EWJa6Qzyh1hZEcO7xY4Ct9WLfNvwa+5xA2h6uGP6vMPxMsZ8WNf0Gf+cOCw9usq51a5+kNG9Sn1IjJsjoO0LI7EpVra/vxhPdFs7JyjYriohlbTAKGxO1C6oJEljseOLqmTxfPX66OucJK66OUNzuDjK7p05UIbGwX25I/vrj4BYrnD0uZ/Rtvfzz9fPsPIkgkbL0DZNMFRVEHFEY2ZCBTcwMLdfCsCCVN4SwpE9YG+ARNgD24IDHYSYB1yNCYDkLRFoC8oOUG40AKQx5IYyAmlQ6SF7dDoSof0hbJiApzqLs43aPc5UG+AvVQ/4T7nGQFQiJ5kdbAkmgH2Sz0FaWB4gLrad22v4nmuvPt/yzCc1+V4t0e4z93r8PYwDCvNANxLSthkai0jmCf5+jq6y6Y4SkjTfoKprgWufj9Dg3AozBmiK7pl3H8WDH3u0YfLY6u6c/HVS2vSvsxoygyTF2q/qNenEyjJ5NJPYGPRidME1M1/JYqwyoNq32Ihu4J0z5M+WA2DoqwEI9wfmEaEhQJzPNsKNOh0jJwrfRVJqbnNOrC6IGwQFzgHiKrpCuq2kE+FizrMXWE7IWCEKemg7hSiimOQchNIC3EchqpHlBO95TshQThkwF5TL9k+Mm/MZLGzVo3AlQdLzagDle1vCYd/wU9/5Z5ZcyZPnNow/J8ZHZZCGtsbKw3rdn7nIzTx42o0WfP1cPKuYJ6XPFs5q7p8zmKx5v8cdcxDeMPOR1fj+gh4X10TV/dukiC+nJPeLy8eH1hrtm/UVvpKxcrP2oL/dlcs1eQ9PCeo73wGcp+R2Xyvlp74vH19B9EkoA2CYKUlcQqJCQj6vkoyBjh/IurcJiy4Zxy2FMptRBO7sK3kClR0UYUZAX+wMqfC1ICiYHMYBsKSQsSFKaAUEqZLoiK00ASFsgpN0UEUWE6yOkiiArE6NmUb91OWwAAEuNJREFUszCNxA0c/uBoF04W86YOarWQAYjGmHBBEIkUiXEqib025hNmInWknv6zKo77Sh3/RvcfSx5Xl4O4yr5Y7NxiuEEQFT4uvs8yrF5VvosX28LLS185vsiRHkc9YPiJtrCbJIzHyx3gJdfpl80flZWPR6qIxJghus7xjSqj4E9UNn2VvN76Csqq6XIR+48OYEeGlcAaXhLfQwxNQcgQEI9IErOOxBUuCuDLz9Arm5iyOTaYy7Jty8hAb2VCm43ZmwnwQTbgFpAWyA4SGEKhaMdgYNpngKAcpeMCAfFjYGE4yAqco3RZ0LorUqOkxVkf6AgzvFBPFbISSsOUD+WRrWijpcwbmI4Gomj4yxAIv4bPVU+q9sfxk/EP36UlfP49N3vNWr/m9CZdX/zzjDDofAoW3XHVr9NPHdB8p2+uORl/mjFLUktMbBTtkSJbpLCRxYyD5OpJps/4+DJuvq5IIgoLqfi3pLzcRuloM7QSzKImsBSWG80LVKkxkSvOkFHaCjL5QvrPN9rwvaSVtEg2ICmQCNRQkGjwnlOpNktMxdds+GxcRFrIyCmhTQMEUJjl4qwtzPbAOVC8o0DUZroGiMmBpEUfRBZ4DvRUJC4/1GOpij1ML9XU0PJdFxIZGsOpJkkOQ0YdFh5CPodKl0WfRqQkVUhTIEf1iN4GkdJU4Rx/xsJfHkpfMv4cd+IAUJb1+YdkfSU7NXp6+/bti7qquKiEdfVq0Gl2TO2DonYzAcUTCv0slCB8FuGia/q8j7iAPl30aNIPHVKq55w+00MvjFLo05WmV8H5P9XLzydVF/H0xbGl9UGfjm226B98po2u6fO+0f3H9M7SbT1h+FoS00ybSmm+5/RZHxzbwWvVHtSvNuLRR4BKl0vPtHRhWh1SESUsNBkH0qjvNiAx4MA1JDBc4yBmTPmwJArJCFM+dA1SE5XsmFIqRTzKUrZYkMio78IUkauFoW6Mcbin1GWrOR8nqOEUEUQFmuK3ZdEw6NFg92s9j3XLp0CIsAuS8VdPkcKhCZ9/KAc81x/c3NdzFjy6KHZc0YPNh7VhDg9jYnh4co9n2dvx1nLalys7Rimx2xLGigfEJBQ0Xr149FkBVb04BQiTlPAFbTiDxRGKM1pJf5AgarPKG0sQu413N07hkCANO5m0fSebtCwziW5DqMISHTRMJCDF23inYbmsauNCHq+Vn1ta5dErzKN8psP/RiIXVpAegKJQ30Y06AQSEXdAIpdL0wbTNsLpoSIeCwRJHZYBpTusIFAIlPC0iqL5AxoCcmLPQkkLdITRCc0dSFqQD1A51g4pLOXmhZCwDMO2BpH9q6ZtDoU4oKQIy5yEynFnv+mzw+0+/q3Sf5yT4aYs89zq1alLIK7wYeQANcCpgW5AOaqIARzxcudrXrMTz+cuFAxBI1Rw06eLKz3xsnDikt+Mmr9mWBlXrbySeJAlTt8MXJImXHRNv0zx2GpWZ3r0KKqzXHlRHH26+fQf+mkbg56ADjppUuihMJl7BEhGtmnj+4Phj1lEUAzjaQcgJkzcqPPmlI/yjdJV8Trf/+hbeYyP0uMS0zSVF8SEaSELxkhR6a7IC1IVHkNMBWEkCljxYQ7YXgWKrDCHw2ohJDDKSkr5Tst3TANBp7DdgkTFKSOpxYMtV2i3hXQoJjwbBo3L4oibAajdXmSbCl01PEvi6x3PetMvwfi3cv+xHpPRk8GZvo6Oq5y5FvZlvtfqQZ5v5igfH7iRdHqrn/H24McyEb6ejCUxkCwqEATi8JDNKtWRIxI6wrLj+aOyQgIqLT/KTZ+OLYnCFGHE60PdSgzIgVmcfrbt5evjYkB97VeNyv8plx/UYoChElhYgB7KtD3PAUWRpejIVNzNAjNzyDuYRqnrMF5dIx4CkTrlAJQRps2FhZIX5lqYwfFLOygTBeSmkUhDEgNvIC7MR5ML6JhozoCpn+858G1utbH4j7BRT0Z9VlZzbTyOKJCKeCjkqYbkFBJh+DXCPVcKuXKIFURlm8WBoZSFOBCYmk6i33ioT+Kw1CegEMspcFfe+M8+rRySNum/YUwm9I7TPT04NWOBDg/nwtz16xMbEp3mPswIOuI6G7wBSlynz1pQWZEIP0smIcEEWN3QsfJDn+nj9FFSPh73wilgdE2f+eOumo4pPqWI2kI/LKu4RVXLq7H/kJopRUFhnkj4joNT9KC/BlZgAIVD1I+cwASVUBgCIsF1KEQxJLpGPKHGP5LYrAs5ikREnmJ61KF4K5cG1+REVS6HC1JauGroYYcOrLWUEp6MSF0UpoZgK5hV2dgEzeNLYbMBnRQZEUPnOwGMT6GOp57Kg/0WTCMYjnsQHpDmlJFTR5IcNt/alvV1PdF5NsKcLSpGG03L6QcjnWDpeIXqgFYb//A9wGi1+fMPDeqY7nae6uvT530KKp+JebkhHJyX6Fqz33X83tCgRr1d6gXBH+XnFtEwDmEVMBfAtbK7UvHxVTb1gGLQokbFVBZMDtUJHmT+dsPxmqSRU2nkrxkWxhfbOfEVwLov4sIaonSRr1qZy6vy8xliPbn+qPjYHxSm6mJwdB357DfaVtJ/BMLeW0/ayVQSR6TA5AB7h8kwmFeRrFBUSFYkJk7GsM+F5SuiCQmFBEriCskHYcxfEM9ozBjBS/yaKD//rBzndjD3BHswAcmqwFdhOWGugCw5owwpEt9sxMlVGWQEK4GlcAOi1XAcL6eLICfdcMFmNDnH7xdO/YTCHTkxM2B6EiSPbuXmHrZO5eJy4Iu6lfo2Gu8orFfA+PM9UMjnHpBIx9v+/Q9Wm8nMfcMTE1d7u7vP4Ec6fzy1wqOGP3xI63JHjgT2/rsy/boTbMP0pe78dVUWS5wjK0VUjIqNN3kA62ZYeIcfxofXDFNFUZBTT4W6m71mWBlXrb4yWSoEYWh0jVIUdJEmzA6o18mRDN7dCplCEkK8IiP4WRAU9OO8j5wimZB3SAhKYlJEphLkJCaSEP7PEdxsfVG5UWFxP6qPPngTlvBED6IWLN8dTPmg8ocFPPRXWBdlFWqqCEmLlhAgLRtKdLaAkpQNfRUM6DUQGOUiTimNEaT7FvRVw/F6K91XG4/mHf9KPaovvJ36jzfSS1mpc6mUdhnvhZL4a0GjZsKBKK+n0+kt0AHvztCAsIzjeeAeUKVPF1l101cBWCICxcGmcPalUeHRnyguIsJYej79fFnpKxdjrKhu+spVK69Ke+OW6SXlh7Xk/8b7D5umJKY6nUiQAEmp5ZKoD5Ay8kTFzcAsJIrL+ZREYCWAaU4ubXRNP8wfpuSuGubHMwCJhSuGPCiYJIMw5GV6xkfY0Wd+WoPiBAlEhvnzNluw3SKZYTkQHIQ5J1RQDg7Lw/QQGUIdFp4wcC9KgQ/7KkxjucEHROVmc3ZaCFfEjMxUvlPvBZ0WhT1Q1zG06hQKyGPA9qEh4bPRJuO/0p//WvoPyXpa77BPr9L1mn64QiJRT0vlP3jg1oyn0/th1dnN6VOkQyh8wVRuPpLUH9GHi+sckD4vLaj43NSHLwfv8cKjbGxdgc97JUpFpIRbpovKYHTUltkpHYkyEqNYf1gWfZU+Vn+JiMZERS4qKyTAMv1hmwoItLT/aL6OL9cn8A4mknhDkR5CUuh43ExhAXjnIQVxRQ9UwnU1JM73meHISINzlY/1Ir3jwNQBtui5IpU3K2mFZbEUEhgJiHlZhkqI8rws7hPFxBHlZ5romu1CGRSv2HyQEQiLPkwefJcSk2o0mU+F8Z46KswbKd8qvRUWiq7BsuoYlF/q+Jd839p4/KNnFHhw+Fbc819r/y3dHO7qsk9D2lLPBvEq59SLXC6CYSCq1OTk5F48g+FxLyQSvvyzhFK8taaYL1ACiYdkkSOg/HVO4irmAySLlR8+yHy5wnaWysTF7YmnRxdyecMXFDcxx3KjNCUEGUtb2r4Iixwh5qebxEG58v2Hkh0ERqlLp5kClNLkngLSyF8XExrZi089SYbFm9DRg1FCbEKyoxQE8sqFkTOgTwrDVIPCP/k8qpRcGrxMEXmxnpwjUeXbhjpgA2bBNsp0HPQWOiwNOnddw5YcNIdSFyzTlUKehEbrLDxDNn7osjCXPw5FO22qgPfKHn/pf8XxxxetvSvYlX8BxBVKCdGDmPPDhz0W+Oijjxof//jHt+Hh2oko/qKqFx4l0BJQmQIwS3RNn/fxZXqGFbq4nQzimI9tKFs+S1S1KJ9XoQkEfUQwtKg98fSzefMMwmx5F28/IqK2RLjM2b54/gX0H0v6+IiDZSVgHJogfYWNzDMUpCtsUkKg4pKIUJAsnNTlkjNWzfBCPMOhi8JAiCSqPBmyMFVQ1OdctQwLywNZ5cPCpDl80D6IhjzBASQF0sUeREpSJCyE4ceSpJXbEO2612AHepaTSRn/YrtEAD3n8xV/ntv4+S96nyGRO9gccQZmEPiBK3bRi5kPHcG+v2T32n2+53bxNY8oQyWIB0SR9OmqxMeTh5lm/8azx8srEbCQNSqTpUTX+eagwCiPqiWeQAXO/olHV2tPaYUFjWCxsQJjt7MV564K6iOB2Xj1adNGa3PqDMFl4XwSSnAQCUIibqFPlwtTwbiOkoSR+JvLx3KYv9BXaSrlLyifSegQBNMFTAWhiIeFArRZnoX+8Y2EzKhbnuNlYO9wFpZXkwoH5Kmj/6qOFTz+0n8+Y4Y/2pVIcJqY35+YJ6wjEN33ZzL9kPY3hWjx6Sv+RcByLIQAZZYQJSn2C944FRF/QkvjQ31XZDcV04GVPOGl+WdJEhVGbaNPV3d7Va7ZP83U/1ACgzTjkg4gjUFvHhGWkrPAPnnBLNeFSEKKfAbzOu9yBAUdVj6cZURpZuU3XOUILioD93x2IEnxxFGc9c6M+M93cHSNZVzHquBQDeMn4x898wQ2us7pgGvAbyU8/z5e5EupVEqtJirCgp4KHxVI7sbrQIYKHyKF3+yvIvEEX8FsQNk9qXwgBpgQwNo7p9OKrukzfdzF08+WTmYrV35YF+tU8bEpYImInGtLVH+8PkzZ8iQcVpjrawXCLOHH5uo/9JmWjbXHJMQcNhVW8bOklbsumnJw7Q+cgtVK2mJxAUNNKKncp54KHuzAwnjCE01B1UIHA1A80ik/IkdIfTj6mE8MXh2sSKZhdHUd+IcDykwFLj4eMv7Fv+il75c8/xEmeHaojD+jZ4LgbsPVVvO5iutg4oSAFCCiAqVp/jrUKRU8mzVexsube05ff3tiD0Q1wkP/ojrYgeiaftiheHsjLKL4GrudTxYvb0H9h94bpzeAwCD4cAqJf5SmlBjFH5D8ChVC1Q8KyIkrjtgbE64y4lqtINJHel5Hq4q4ZdsYzsWBWaU+rkFWtFzQbiNNnWciNbT/qD4+Hitq/FdE/3mWzmvQU+W4hZZPenQuRHRNfylcvfVjpUqz0Tj6dNE1/fm4euufTx1z5am3/hr6z6lj9A9ElneKwPJ3IYEVEpqKys0YFeUhoDBP4TV/+bjVIkfqKuu8/ixC/+tqR73111V4DYnrrb+G8a+h1tkk9dY/m7MxV7XUzwdP3ApBgCYG6Co+L6/+kcB4X0g0ERFFzwXjojBc5q8ZhqOKtWEoROmLEwSWBIHowVySyqSS5kIABEYhisRFEov8SgRWGD6K9OMgq8IwBIkTBBYXASGsxcW3pUoHgfF5iIiLPv9x+03kuLxMqaqsUj1KJL4gsFgICGEtFrJtUG6OwDhtJHHhqLOl+dBAG0AnXRAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBIGVhMD/D0fV/fpMMM+gAAAAAElFTkSuQmCC' + }, + ...uni.$uv?.props?.noNetwork + } +} \ No newline at end of file diff --git a/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue b/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue new file mode 100644 index 0000000..5f134fa --- /dev/null +++ b/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/uni_modules/uv-no-network/package.json b/uni_modules/uv-no-network/package.json new file mode 100644 index 0000000..cb48aa9 --- /dev/null +++ b/uni_modules/uv-no-network/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-no-network", + "displayName": "uv-no-network 无网络提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "uv-no-network 该组件在没有任何网络的情况下,显示在内容上方,无需任何配置,引入即可,内部自动处理所有功能和事件。", + "keywords": [ + "uv-no-network", + "uvui", + "uv-ui", + "network", + "无网络" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-overlay", + "uv-icon", + "uv-button" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-no-network/readme.md b/uni_modules/uv-no-network/readme.md new file mode 100644 index 0000000..0e4a1a2 --- /dev/null +++ b/uni_modules/uv-no-network/readme.md @@ -0,0 +1,11 @@ +## NoNetwork 无网络提示 + +> **组件名:uv-no-network** + +该组件在没有任何网络的情况下,显示在内容上方,无需任何配置,引入即可,内部自动处理所有功能和事件。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-notice-bar/changelog.md b/uni_modules/uv-notice-bar/changelog.md new file mode 100644 index 0000000..cdfec7d --- /dev/null +++ b/uni_modules/uv-notice-bar/changelog.md @@ -0,0 +1,19 @@ +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-03) +1. 竖向滚动时候增加change回调 +## 1.0.5(2023-07-21) +1. 增加icon类型,支持设置false不显示图标 +2. 优化文档 +## 1.0.4(2023-07-03) +1. 增加disableScroll 属性,禁止自动滚动 +2. 优化文档 +## 1.0.3(2023-06-04) +1. 修复text传值为null报错的问题 +## 1.0.2(2023-05-30) +1. 修复error报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-notice-bar 滚动通知 diff --git a/uni_modules/uv-notice-bar/components/uv-column-notice/props.js b/uni_modules/uv-notice-bar/components/uv-column-notice/props.js new file mode 100644 index 0000000..d93917c --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-column-notice/props.js @@ -0,0 +1,61 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: '' + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: false + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: 1500 + }, + // 是否禁止用手滑动切换,仅`direction="column"生效` + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: true + }, + // 是否禁止滚动,仅`direction="column"生效` + disableScroll: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.columnNotice + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue b/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue new file mode 100644 index 0000000..73c6bfc --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js b/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js new file mode 100644 index 0000000..3fe0b44 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js @@ -0,0 +1,76 @@ +export default { + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: () => [] + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: 'row' + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: false + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: 2000 + }, + // 跳转的页面路径 + url: { + type: String, + default: '' + }, + // 页面跳转的类型 + linkType: { + type: String, + default: 'navigateTo' + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: true + }, + // 是否禁止滚动,仅`direction="column"生效` + disableScroll: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.noticeBar + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue b/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue new file mode 100644 index 0000000..14dd7c5 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue @@ -0,0 +1,110 @@ + + + + diff --git a/uni_modules/uv-notice-bar/components/uv-row-notice/props.js b/uni_modules/uv-notice-bar/components/uv-row-notice/props.js new file mode 100644 index 0000000..cba1823 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-row-notice/props.js @@ -0,0 +1,40 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: String, + default: '' + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(rpx),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + ...uni.$uv?.props?.rowNotice + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue b/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue new file mode 100644 index 0000000..16117dd --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue @@ -0,0 +1,341 @@ + + + + diff --git a/uni_modules/uv-notice-bar/package.json b/uni_modules/uv-notice-bar/package.json new file mode 100644 index 0000000..f1bca29 --- /dev/null +++ b/uni_modules/uv-notice-bar/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-notice-bar", + "displayName": "uv-notice-bar 滚动通知 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "uv-notice-bar 该组件用于滚动通告场景,有多种模式可供选择。", + "keywords": [ + "uv-notice-bar", + "uvui", + "uv-ui", + "notice", + "滚动公告" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/readme.md b/uni_modules/uv-notice-bar/readme.md new file mode 100644 index 0000000..61eb131 --- /dev/null +++ b/uni_modules/uv-notice-bar/readme.md @@ -0,0 +1,19 @@ +## NoticeBar 滚动通知 + +> **组件名:uv-notice-bar** + +该组件用于滚动通告场景,有多种模式可供选择。灵活配置,开箱即用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-notify/changelog.md b/uni_modules/uv-notify/changelog.md new file mode 100644 index 0000000..5d818ba --- /dev/null +++ b/uni_modules/uv-notify/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-07-02) +uv-notify 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/notify.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-notify 消息提示 diff --git a/uni_modules/uv-notify/components/uv-notify/props.js b/uni_modules/uv-notify/components/uv-notify/props.js new file mode 100644 index 0000000..5728276 --- /dev/null +++ b/uni_modules/uv-notify/components/uv-notify/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: 0 + }, + // type主题,primary,success,warning,error + type: { + type: String, + default: 'primary' + }, + // 字体颜色 + color: { + type: String, + default: '#ffffff' + }, + // 背景颜色 + bgColor: { + type: String, + default: '' + }, + // 展示的文字内容 + message: { + type: String, + default: '' + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: 3000 + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 15 + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.notify + } +} \ No newline at end of file diff --git a/uni_modules/uv-notify/components/uv-notify/uv-notify.vue b/uni_modules/uv-notify/components/uv-notify/uv-notify.vue new file mode 100644 index 0000000..96c1566 --- /dev/null +++ b/uni_modules/uv-notify/components/uv-notify/uv-notify.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/uni_modules/uv-notify/package.json b/uni_modules/uv-notify/package.json new file mode 100644 index 0000000..921949b --- /dev/null +++ b/uni_modules/uv-notify/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-notify", + "displayName": "uv-notify 消息提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "uv-notify 该组件一般用于页面顶部向下滑出一个提示,后自动收起的场景。", + "keywords": [ + "uv-notify", + "uvui", + "uv-ui", + "notify", + "消息提示" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-status-bar", + "uv-overlay", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-notify/readme.md b/uni_modules/uv-notify/readme.md new file mode 100644 index 0000000..482344a --- /dev/null +++ b/uni_modules/uv-notify/readme.md @@ -0,0 +1,11 @@ +## Notify 消息提示 + +> **组件名:uv-notify** + +该组件一般用于页面顶部向下滑出一个提示,后自动收起的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-number-box/changelog.md b/uni_modules/uv-number-box/changelog.md new file mode 100644 index 0000000..3f07995 --- /dev/null +++ b/uni_modules/uv-number-box/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-07-13) +1. 修复 uv-number-box设置value属性不生效的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-number-box 步进器 diff --git a/uni_modules/uv-number-box/components/uv-number-box/props.js b/uni_modules/uv-number-box/components/uv-number-box/props.js new file mode 100644 index 0000000..64b633b --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/props.js @@ -0,0 +1,113 @@ +export default { + props: { + value: { + type: [String, Number], + default: 0 + }, + modelValue: { + type: [String, Number], + default: 0 + }, + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: '' + }, + // 最小值 + min: { + type: [String, Number], + default: 1 + }, + // 最大值 + max: { + type: [String, Number], + default: Number.MAX_SAFE_INTEGER + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: 1 + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: false + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: false + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: false + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: false + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: 35 + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: true + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: true + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: null + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: true + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: '#323233' + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: 30 + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: '#EBECEE' + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: 100 + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: false + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: false + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: '' + }, + ...uni.$uv?.props?.numberBox + } +} \ No newline at end of file diff --git a/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue new file mode 100644 index 0000000..6937e89 --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue @@ -0,0 +1,395 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-number-box/package.json b/uni_modules/uv-number-box/package.json new file mode 100644 index 0000000..771e6eb --- /dev/null +++ b/uni_modules/uv-number-box/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-number-box", + "displayName": "uv-number-box 步进器 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-number-box 该组件一般用于商城购物选择物品数量的场景。", + "keywords": [ + "uv-number-box", + "uvui", + "uv-ui", + "number", + "步进器" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-number-box/readme.md b/uni_modules/uv-number-box/readme.md new file mode 100644 index 0000000..6b83da9 --- /dev/null +++ b/uni_modules/uv-number-box/readme.md @@ -0,0 +1,11 @@ +## NumberBox 步进器 + +> **组件名:uv-number-box** + +该组件一般用于商城购物选择物品数量的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-overlay/changelog.md b/uni_modules/uv-overlay/changelog.md new file mode 100644 index 0000000..ff14713 --- /dev/null +++ b/uni_modules/uv-overlay/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-07-02) +uv-overlay 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.2(2023-06-29) +1. 优化,H5端禁止穿透滚动 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增uv-overlay组件 diff --git a/uni_modules/uv-overlay/components/uv-overlay/props.js b/uni_modules/uv-overlay/components/uv-overlay/props.js new file mode 100644 index 0000000..267c613 --- /dev/null +++ b/uni_modules/uv-overlay/components/uv-overlay/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: false + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: 10070 + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: 300 + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: 0.5 + }, + ...uni.$uv?.props?.overlay + } +} \ No newline at end of file diff --git a/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue b/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue new file mode 100644 index 0000000..53568c0 --- /dev/null +++ b/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue @@ -0,0 +1,85 @@ + + + + diff --git a/uni_modules/uv-overlay/package.json b/uni_modules/uv-overlay/package.json new file mode 100644 index 0000000..a664f3a --- /dev/null +++ b/uni_modules/uv-overlay/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-overlay", + "displayName": "uv-overlay 遮罩层 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "uv-overlay 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景,uv-popup、uv-toast、uv-tooltip等组件就是用了该组件。", + "keywords": [ + "uv-overlay", + "uvui", + "uv-ui", + "overlay", + "遮罩层" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-overlay/readme.md b/uni_modules/uv-overlay/readme.md new file mode 100644 index 0000000..4e8af4b --- /dev/null +++ b/uni_modules/uv-overlay/readme.md @@ -0,0 +1,11 @@ +## Overlay 遮罩层 + +> **组件名:uv-overlay** + +创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景,uv-popup、uv-toast、uv-tooltip等组件就是用了该组件。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui官方QQ群 diff --git a/uni_modules/uv-parse/changelog.md b/uni_modules/uv-parse/changelog.md new file mode 100644 index 0000000..4575e07 --- /dev/null +++ b/uni_modules/uv-parse/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.3(2023-06-19) +1. 修复nvue模式下不显示的BUG +## 1.0.2(2023-06-02) +1. 修复可能存在的BUG +2. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-parse 富文本解析器 diff --git a/uni_modules/uv-parse/components/uv-parse/node/node.vue b/uni_modules/uv-parse/components/uv-parse/node/node.vue new file mode 100644 index 0000000..5857077 --- /dev/null +++ b/uni_modules/uv-parse/components/uv-parse/node/node.vue @@ -0,0 +1,576 @@ +