From f6c8141d88d38ce95e0174504e8fd6046b0aaead Mon Sep 17 00:00:00 2001 From: mc <393918995@qq.com> Date: Thu, 28 Aug 2025 13:57:01 +0800 Subject: [PATCH] first commit --- .gitignore | 24 + .hbuilderx/launch.json | 10 + App.vue | 34 + components/dateSelection/dateSelection.vue | 183 + components/pageanimation/pageanimation.vue | 70 + .../html/.history/index_20250825141035.html | 0 .../html/.history/index_20250825141115.html | 11 + .../html/.history/index_20250825141148.html | 13 + .../html/.history/index_20250825141722.html | 22 + .../html/.history/index_20250825141808.html | 31 + .../html/.history/index_20250825141833.html | 36 + .../html/.history/index_20250825141859.html | 38 + .../html/.history/index_20250825141921.html | 40 + .../html/.history/index_20250825142000.html | 46 + .../html/.history/index_20250825142005.html | 47 + .../html/.history/index_20250825142013.html | 47 + .../html/.history/index_20250825142017.html | 47 + .../html/.history/index_20250825142128.html | 48 + .../html/.history/index_20250825142346.html | 48 + .../html/.history/index_20250825142501.html | 50 + .../html/.history/index_20250825142516.html | 50 + .../html/.history/index_20250825142724.html | 50 + .../html/.history/index_20250825142750.html | 49 + .../html/.history/index_20250825142831.html | 48 + .../html/.history/index_20250825164941.html | 58 + .../html/.history/index_20250825164950.html | 58 + .../html/.history/index_20250825165000.html | 58 + .../html/.history/index_20250825165004.html | 57 + .../html/.history/index_20250825165007.html | 57 + .../html/.history/index_20250825165027.html | 57 + .../html/.history/index_20250825165032.html | 57 + .../html/.history/index_20250825165038.html | 58 + .../html/.history/index_20250825165049.html | 58 + .../html/.history/index_20250825165118.html | 62 + .../html/.history/index_20250825165128.html | 62 + .../html/.history/index_20250825165136.html | 62 + .../html/.history/index_20250825165221.html | 71 + .../html/.history/index_20250825165240.html | 75 + .../html/.history/index_20250825165303.html | 75 + .../html/.history/index_20250825165314.html | 75 + .../html/.history/index_20250825165316.html | 75 + .../html/.history/index_20250825165339.html | 75 + .../html/.history/index_20250825165348.html | 75 + .../html/.history/index_20250825165355.html | 75 + .../html/.history/index_20250825165359.html | 75 + .../html/.history/index_20250825165402.html | 75 + .../html/.history/index_20250825165406.html | 75 + .../html/.history/index_20250825165409.html | 75 + .../html/.history/index_20250825165411.html | 75 + .../html/.history/index_20250825165414.html | 75 + .../html/.history/index_20250825165419.html | 75 + .../html/.history/index_20250825165427.html | 77 + .../html/.history/index_20250825165449.html | 77 + .../html/.history/index_20250825165453.html | 77 + hybrid/html/dom-to-image.min.js | 2 + hybrid/html/index.html | 77 + hybrid/html/map.png | Bin 0 -> 10975 bytes index.html | 20 + main.js | 22 + manifest.json | 105 + pages.json | 32 + pages/go.vue | 19 + pages/index.vue | 312 + pages/pages/camera.vue | 196 + pages/pages/details.vue | 461 + pages/pages/history.vue | 244 + pages/pages/passingTheCar.vue | 156 + pages/pages/setUp.vue | 709 + pages/pages/statistics.vue | 251 + pages/pages/warningInformation.vue | 284 + pages/signIn.vue | 109 + static/back.png | Bin 0 -> 896 bytes static/camera/1.png | Bin 0 -> 2213 bytes static/camera/11.png | Bin 0 -> 1927 bytes static/camera/2.png | Bin 0 -> 2293 bytes static/camera/22.png | Bin 0 -> 1998 bytes static/camera/3.png | Bin 0 -> 666 bytes static/camera/33.png | Bin 0 -> 1978 bytes static/camera/4.png | Bin 0 -> 666 bytes static/camera/44.png | Bin 0 -> 588 bytes static/equipmentno.png | Bin 0 -> 2851 bytes static/equipmenton.png | Bin 0 -> 7348 bytes static/err.png | Bin 0 -> 2270 bytes static/f.png | Bin 0 -> 10741 bytes .../html/.history/index_20250825151752.html | 40 + .../html/.history/index_20250825151800.html | 40 + .../html/.history/index_20250825151912.html | 68 + .../html/.history/index_20250825151913.html | 69 + .../html/.history/index_20250825152013.html | 69 + static/html/dom-to-image.min.js | 2 + static/html/index.html | 77 + static/html/map.png | Bin 0 -> 10975 bytes static/k.png | Bin 0 -> 11498 bytes static/logo.png | Bin 0 -> 9869 bytes static/map.png | Bin 0 -> 10975 bytes static/signIn/1.png | Bin 0 -> 2049 bytes static/signIn/2.png | Bin 0 -> 772 bytes static/signIn/signInbj.png | Bin 0 -> 730507 bytes static/signIn/title.png | Bin 0 -> 30875 bytes static/tab/1.png | Bin 0 -> 1533 bytes static/tab/2.png | Bin 0 -> 1125 bytes static/tab/3.png | Bin 0 -> 832 bytes static/tab/4.png | Bin 0 -> 2165 bytes static/tab/5.png | Bin 0 -> 2125 bytes static/time.png | Bin 0 -> 675 bytes static/tjbj.png | Bin 0 -> 336807 bytes uni.promisify.adaptor.js | 13 + uni.scss | 76 + uni_modules/cc-selectDity/changelog.md | 36 + .../components/cc-selectDity/area.js | 5589 ++++++++ .../cc-selectDity/cc-selectDity.vue | 319 + uni_modules/cc-selectDity/package.json | 85 + uni_modules/cc-selectDity/readme.md | 232 + uni_modules/lime-clipper/changelog.md | 72 + .../components/l-clipper/index.scss | 231 + .../components/l-clipper/l-clipper.uvue | 853 ++ .../components/l-clipper/l-clipper.vue | 869 ++ .../lime-clipper/components/l-clipper/type.ts | 89 + .../components/l-clipper/utils.js | 248 + .../components/l-clipper/utils.uts | 506 + .../components/lime-clipper/lime-clipper.uvue | 179 + .../components/lime-clipper/lime-clipper.vue | 22 + uni_modules/lime-clipper/package.json | 85 + uni_modules/lime-clipper/readme.md | 237 + uni_modules/lime-clipper/static/photo.svg | 19 + uni_modules/lime-clipper/static/rotate.svg | 15 + uni_modules/lime-style/changelog.md | 18 + .../lime-style/color/colorPalette.scss | 186 + uni_modules/lime-style/color/colors.scss | 19 + uni_modules/lime-style/functions.scss | 11 + uni_modules/lime-style/index.scss | 6 + uni_modules/lime-style/mixins/create.scss | 154 + uni_modules/lime-style/mixins/ellipsis.scss | 22 + uni_modules/lime-style/mixins/flex.scss | 13 + uni_modules/lime-style/mixins/hairline.scss | 66 + uni_modules/lime-style/mixins/platform.scss | 17 + uni_modules/lime-style/mixins/useTheme.scss | 37 + uni_modules/lime-style/mixins/utilities.scss | 7 + uni_modules/lime-style/package.json | 84 + uni_modules/lime-style/readme.md | 1 + uni_modules/lime-style/theme/dark.scss | 0 uni_modules/lime-style/theme/default.scss | 147 + uni_modules/lime-style/var.scss | 66 + uni_modules/mcc-drag/changelog.md | 0 .../mcc-drag/components/mcc-drag/mcc-drag.vue | 13 + .../components/mcc-dragsub/mcc-dragsub.vue | 32 + uni_modules/mcc-drag/package.json | 83 + uni_modules/mcc-drag/readme.md | 1 + uni_modules/mcc-haha/changelog.md | 2 + .../mcc-haha/components/mcc-haha/mcc-haha.vue | 7 + uni_modules/mcc-haha/package.json | 83 + uni_modules/mcc-haha/readme.md | 1 + uni_modules/mumu-qrcode/changelog.md | 4 + .../components/mumu-qrcode/jsQR.js | 10102 +++++++++++++++ .../components/mumu-qrcode/mumu-qrcode.vue | 98 + uni_modules/mumu-qrcode/package.json | 81 + uni_modules/mumu-qrcode/readme.md | 54 + uni_modules/piaoyi-cityPicker/changelog.md | 14 + .../components/piaoyi-cityPicker/cityData.js | 10709 ++++++++++++++++ .../piaoyi-cityPicker/piaoyi-cityPicker.vue | 281 + uni_modules/piaoyi-cityPicker/package.json | 17 + uni_modules/piaoyi-cityPicker/readme.md | 98 + uni_modules/piaoyi-editor/changelog.md | 4 + .../components/piaoyi-editor/color-picker.vue | 784 ++ .../components/piaoyi-editor/iconfont.css | 123 + .../components/piaoyi-editor/iconfont.ttf | Bin 0 -> 6564 bytes .../components/piaoyi-editor/iconfont.woff | Bin 0 -> 4076 bytes .../components/piaoyi-editor/iconfont.woff2 | Bin 0 -> 3296 bytes .../piaoyi-editor/piaoyi-editor.vue | 413 + uni_modules/piaoyi-editor/package.json | 15 + uni_modules/piaoyi-editor/readme.md | 95 + uni_modules/qf-image-cropper/changelog.md | 72 + .../qf-image-cropper.render.js | 855 ++ .../qf-image-cropper/qf-image-cropper.vue | 743 ++ .../qf-image-cropper/qf-image-cropper.wxs | 727 ++ uni_modules/qf-image-cropper/package.json | 81 + uni_modules/qf-image-cropper/readme.md | 97 + uni_modules/qiun-data-charts/changelog.md | 320 + .../qiun-data-charts/qiun-data-charts.vue | 1618 +++ .../components/qiun-error/qiun-error.vue | 46 + .../components/qiun-loading/loading1.vue | 162 + .../components/qiun-loading/loading2.vue | 170 + .../components/qiun-loading/loading3.vue | 173 + .../components/qiun-loading/loading4.vue | 222 + .../components/qiun-loading/loading5.vue | 229 + .../components/qiun-loading/qiun-loading.vue | 36 + .../js_sdk/u-charts/config-echarts.js | 422 + .../js_sdk/u-charts/config-ucharts.js | 606 + .../js_sdk/u-charts/readme.md | 5 + .../js_sdk/u-charts/u-charts.js | 7706 +++++++++++ .../js_sdk/u-charts/u-charts.min.js | 18 + uni_modules/qiun-data-charts/license.md | 201 + uni_modules/qiun-data-charts/package.json | 80 + uni_modules/qiun-data-charts/readme.md | 84 + .../static/app-plus/echarts.min.js | 23 + .../qiun-data-charts/static/h5/echarts.min.js | 23 + uni_modules/srh-convertPath/changelog.md | 2 + uni_modules/srh-convertPath/package.json | 97 + uni_modules/srh-convertPath/readme.md | 7 + .../utssdk/app-android/index.uts | 4 + .../utssdk/app-harmony/index.uts | 4 + .../srh-convertPath/utssdk/app-ios/index.uts | 4 + .../srh-convertPath/utssdk/interface.uts | 0 .../srh-convertPath/utssdk/unierror.uts | 39 + uni_modules/srh-convertPath/使用说明.md | 6 + uni_modules/uni-badge/changelog.md | 33 + .../components/uni-badge/uni-badge.vue | 268 + uni_modules/uni-badge/package.json | 85 + uni_modules/uni-badge/readme.md | 10 + uni_modules/uni-breadcrumb/changelog.md | 6 + .../uni-breadcrumb-item.vue | 121 + .../uni-breadcrumb/uni-breadcrumb.vue | 41 + uni_modules/uni-breadcrumb/package.json | 88 + uni_modules/uni-breadcrumb/readme.md | 66 + uni_modules/uni-calendar/changelog.md | 26 + .../components/uni-calendar/calendar.js | 546 + .../components/uni-calendar/i18n/en.json | 12 + .../components/uni-calendar/i18n/index.js | 8 + .../components/uni-calendar/i18n/zh-Hans.json | 12 + .../components/uni-calendar/i18n/zh-Hant.json | 12 + .../uni-calendar/uni-calendar-item.vue | 204 + .../components/uni-calendar/uni-calendar.vue | 566 + .../components/uni-calendar/util.js | 360 + uni_modules/uni-calendar/package.json | 85 + uni_modules/uni-calendar/readme.md | 103 + uni_modules/uni-card/changelog.md | 26 + .../uni-card/components/uni-card/uni-card.vue | 272 + uni_modules/uni-card/package.json | 90 + uni_modules/uni-card/readme.md | 12 + uni_modules/uni-collapse/changelog.md | 36 + .../uni-collapse-item/uni-collapse-item.vue | 402 + .../components/uni-collapse/uni-collapse.vue | 147 + uni_modules/uni-collapse/package.json | 89 + uni_modules/uni-collapse/readme.md | 12 + uni_modules/uni-combox/changelog.md | 15 + .../components/uni-combox/uni-combox.vue | 294 + uni_modules/uni-combox/package.json | 90 + uni_modules/uni-combox/readme.md | 11 + uni_modules/uni-countdown/changelog.md | 24 + .../components/uni-countdown/i18n/en.json | 6 + .../components/uni-countdown/i18n/index.js | 8 + .../uni-countdown/i18n/zh-Hans.json | 6 + .../uni-countdown/i18n/zh-Hant.json | 6 + .../uni-countdown/uni-countdown.vue | 271 + uni_modules/uni-countdown/package.json | 86 + uni_modules/uni-countdown/readme.md | 10 + uni_modules/uni-data-checkbox/changelog.md | 45 + .../uni-data-checkbox/uni-data-checkbox.vue | 821 ++ uni_modules/uni-data-checkbox/package.json | 84 + uni_modules/uni-data-checkbox/readme.md | 18 + uni_modules/uni-data-picker/changelog.md | 75 + .../components/uni-data-picker/keypress.js | 45 + .../uni-data-picker/uni-data-picker.vue | 551 + .../uni-data-pickerview/uni-data-picker.js | 622 + .../uni-data-pickerview.vue | 323 + uni_modules/uni-data-picker/package.json | 90 + uni_modules/uni-data-picker/readme.md | 22 + uni_modules/uni-data-select/changelog.md | 35 + .../uni-data-select/uni-data-select.vue | 517 + uni_modules/uni-data-select/package.json | 85 + uni_modules/uni-data-select/readme.md | 8 + uni_modules/uni-dateformat/changelog.md | 10 + .../components/uni-dateformat/date-format.js | 200 + .../uni-dateformat/uni-dateformat.vue | 88 + uni_modules/uni-dateformat/package.json | 88 + uni_modules/uni-dateformat/readme.md | 11 + uni_modules/uni-datetime-picker/changelog.md | 169 + .../uni-datetime-picker/calendar-item.vue | 177 + .../uni-datetime-picker/calendar.vue | 947 ++ .../uni-datetime-picker/i18n/en.json | 22 + .../uni-datetime-picker/i18n/index.js | 8 + .../uni-datetime-picker/i18n/zh-Hans.json | 22 + .../uni-datetime-picker/i18n/zh-Hant.json | 22 + .../uni-datetime-picker/time-picker.vue | 940 ++ .../uni-datetime-picker.vue | 1073 ++ .../components/uni-datetime-picker/util.js | 421 + uni_modules/uni-datetime-picker/package.json | 90 + uni_modules/uni-datetime-picker/readme.md | 21 + uni_modules/uni-drawer/changelog.md | 13 + .../components/uni-drawer/keypress.js | 45 + .../components/uni-drawer/uni-drawer.vue | 183 + uni_modules/uni-drawer/package.json | 87 + uni_modules/uni-drawer/readme.md | 10 + uni_modules/uni-easyinput/changelog.md | 97 + .../components/uni-easyinput/common.js | 56 + .../uni-easyinput/uni-easyinput.vue | 657 + uni_modules/uni-easyinput/package.json | 87 + uni_modules/uni-easyinput/readme.md | 11 + uni_modules/uni-fab/changelog.md | 23 + .../uni-fab/components/uni-fab/uni-fab.vue | 491 + uni_modules/uni-fab/package.json | 84 + uni_modules/uni-fab/readme.md | 9 + uni_modules/uni-fav/changelog.md | 19 + .../uni-fav/components/uni-fav/i18n/en.json | 4 + .../uni-fav/components/uni-fav/i18n/index.js | 8 + .../components/uni-fav/i18n/zh-Hans.json | 4 + .../components/uni-fav/i18n/zh-Hant.json | 4 + .../uni-fav/components/uni-fav/uni-fav.vue | 161 + uni_modules/uni-fav/package.json | 89 + uni_modules/uni-fav/readme.md | 10 + uni_modules/uni-file-picker/changelog.md | 67 + .../uni-file-picker/choose-and-upload-file.js | 224 + .../uni-file-picker/uni-file-picker.vue | 669 + .../uni-file-picker/upload-file.vue | 325 + .../uni-file-picker/upload-image.vue | 292 + .../components/uni-file-picker/utils.js | 109 + uni_modules/uni-file-picker/package.json | 83 + uni_modules/uni-file-picker/readme.md | 11 + uni_modules/uni-forms/changelog.md | 92 + .../uni-forms-item/uni-forms-item.vue | 627 + .../components/uni-forms/uni-forms.vue | 397 + .../uni-forms/components/uni-forms/utils.js | 293 + .../components/uni-forms/validate.js | 486 + uni_modules/uni-forms/package.json | 88 + uni_modules/uni-forms/readme.md | 23 + uni_modules/uni-goods-nav/changelog.md | 18 + .../components/uni-goods-nav/i18n/en.json | 6 + .../components/uni-goods-nav/i18n/index.js | 8 + .../uni-goods-nav/i18n/zh-Hans.json | 6 + .../uni-goods-nav/i18n/zh-Hant.json | 6 + .../uni-goods-nav/uni-goods-nav.vue | 229 + uni_modules/uni-goods-nav/package.json | 88 + uni_modules/uni-goods-nav/readme.md | 10 + uni_modules/uni-grid/changelog.md | 13 + .../uni-grid-item/uni-grid-item.vue | 127 + .../uni-grid/components/uni-grid/uni-grid.vue | 142 + uni_modules/uni-grid/package.json | 86 + uni_modules/uni-grid/readme.md | 11 + uni_modules/uni-group/changelog.md | 16 + .../components/uni-group/uni-group.vue | 134 + uni_modules/uni-group/package.json | 87 + uni_modules/uni-group/readme.md | 9 + uni_modules/uni-icons/changelog.md | 42 + .../uni-icons/components/uni-icons/icons.js | 1169 ++ .../components/uni-icons/uni-icons.uvue | 91 + .../components/uni-icons/uni-icons.vue | 110 + .../components/uni-icons/uniicons.css | 664 + .../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-indexed-list/changelog.md | 17 + .../uni-indexed-list-item.vue | 144 + .../uni-indexed-list/uni-indexed-list.vue | 369 + uni_modules/uni-indexed-list/package.json | 89 + uni_modules/uni-indexed-list/readme.md | 11 + uni_modules/uni-link/changelog.md | 17 + .../uni-link/components/uni-link/uni-link.vue | 128 + uni_modules/uni-link/package.json | 87 + uni_modules/uni-link/readme.md | 11 + uni_modules/uni-list/changelog.md | 46 + .../components/uni-list-ad/uni-list-ad.vue | 107 + .../uni-list-chat/uni-list-chat.scss | 58 + .../uni-list-chat/uni-list-chat.vue | 593 + .../uni-list-item/uni-list-item.vue | 534 + .../uni-list/components/uni-list/uni-list.vue | 123 + .../components/uni-list/uni-refresh.vue | 65 + .../components/uni-list/uni-refresh.wxs | 87 + uni_modules/uni-list/package.json | 88 + uni_modules/uni-list/readme.md | 346 + uni_modules/uni-load-more/changelog.md | 19 + .../components/uni-load-more/i18n/en.json | 5 + .../components/uni-load-more/i18n/index.js | 8 + .../uni-load-more/i18n/zh-Hans.json | 5 + .../uni-load-more/i18n/zh-Hant.json | 5 + .../uni-load-more/uni-load-more.vue | 399 + uni_modules/uni-load-more/package.json | 86 + uni_modules/uni-load-more/readme.md | 14 + uni_modules/uni-nav-bar/changelog.md | 51 + .../components/uni-nav-bar/uni-nav-bar.vue | 357 + .../components/uni-nav-bar/uni-status-bar.vue | 24 + uni_modules/uni-nav-bar/package.json | 86 + uni_modules/uni-nav-bar/readme.md | 15 + uni_modules/uni-notice-bar/changelog.md | 18 + .../uni-notice-bar/uni-notice-bar.vue | 426 + uni_modules/uni-notice-bar/package.json | 87 + uni_modules/uni-notice-bar/readme.md | 13 + uni_modules/uni-number-box/changelog.md | 25 + .../uni-number-box/uni-number-box.vue | 221 + uni_modules/uni-number-box/package.json | 85 + uni_modules/uni-number-box/readme.md | 13 + uni_modules/uni-pagination/changelog.md | 27 + .../components/uni-pagination/i18n/en.json | 5 + .../components/uni-pagination/i18n/es.json | 5 + .../components/uni-pagination/i18n/fr.json | 5 + .../components/uni-pagination/i18n/index.js | 12 + .../uni-pagination/i18n/zh-Hans.json | 5 + .../uni-pagination/i18n/zh-Hant.json | 5 + .../uni-pagination/uni-pagination.vue | 465 + uni_modules/uni-pagination/package.json | 83 + uni_modules/uni-pagination/readme.md | 11 + uni_modules/uni-popup/changelog.md | 68 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 275 + .../uni-popup-message/uni-popup-message.vue | 143 + .../uni-popup-share/uni-popup-share.vue | 187 + .../components/uni-popup/i18n/en.json | 7 + .../components/uni-popup/i18n/index.js | 8 + .../components/uni-popup/i18n/zh-Hans.json | 7 + .../components/uni-popup/i18n/zh-Hant.json | 7 + .../components/uni-popup/keypress.js | 45 + .../uni-popup/components/uni-popup/popup.js | 26 + .../components/uni-popup/uni-popup.vue | 473 + uni_modules/uni-popup/package.json | 87 + uni_modules/uni-popup/readme.md | 17 + uni_modules/uni-rate/changelog.md | 25 + .../uni-rate/components/uni-rate/uni-rate.vue | 365 + uni_modules/uni-rate/package.json | 88 + uni_modules/uni-rate/readme.md | 12 + uni_modules/uni-row/changelog.md | 10 + .../uni-row/components/uni-col/uni-col.vue | 317 + .../uni-row/components/uni-row/uni-row.vue | 190 + uni_modules/uni-row/package.json | 87 + uni_modules/uni-row/readme.md | 10 + 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-scss/styles/setting/_border.scss | 3 + .../uni-scss/styles/setting/_color.scss | 66 + .../uni-scss/styles/setting/_radius.scss | 55 + .../uni-scss/styles/setting/_space.scss | 56 + .../uni-scss/styles/setting/_styles.scss | 167 + .../uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 + .../uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uni-search-bar/changelog.md | 33 + .../components/uni-search-bar/i18n/en.json | 4 + .../components/uni-search-bar/i18n/index.js | 8 + .../uni-search-bar/i18n/zh-Hans.json | 4 + .../uni-search-bar/i18n/zh-Hant.json | 4 + .../uni-search-bar/uni-search-bar.vue | 298 + uni_modules/uni-search-bar/package.json | 89 + uni_modules/uni-search-bar/readme.md | 14 + uni_modules/uni-section/changelog.md | 2 + .../components/uni-section/uni-section.vue | 167 + uni_modules/uni-section/package.json | 87 + uni_modules/uni-section/readme.md | 8 + .../uni-segmented-control/changelog.md | 9 + .../uni-segmented-control.vue | 145 + .../uni-segmented-control/package.json | 87 + uni_modules/uni-segmented-control/readme.md | 13 + uni_modules/uni-steps/changelog.md | 16 + .../components/uni-steps/uni-steps.vue | 269 + uni_modules/uni-steps/package.json | 89 + uni_modules/uni-steps/readme.md | 13 + uni_modules/uni-swipe-action/changelog.md | 43 + .../uni-swipe-action-item/bindingx.js | 302 + .../components/uni-swipe-action-item/isPC.js | 12 + .../uni-swipe-action-item/mpalipay.js | 195 + .../uni-swipe-action-item/mpother.js | 260 + .../components/uni-swipe-action-item/mpwxs.js | 84 + .../uni-swipe-action-item/render.js | 270 + .../uni-swipe-action-item.vue | 347 + .../components/uni-swipe-action-item/wx.wxs | 341 + .../uni-swipe-action/uni-swipe-action.vue | 60 + uni_modules/uni-swipe-action/package.json | 87 + uni_modules/uni-swipe-action/readme.md | 11 + uni_modules/uni-swiper-dot/changelog.md | 12 + .../uni-swiper-dot/uni-swiper-dot.vue | 218 + uni_modules/uni-swiper-dot/package.json | 87 + uni_modules/uni-swiper-dot/readme.md | 11 + uni_modules/uni-table/changelog.md | 27 + .../components/uni-table/uni-table.vue | 455 + .../components/uni-tbody/uni-tbody.vue | 29 + .../uni-table/components/uni-td/uni-td.vue | 90 + .../components/uni-th/filter-dropdown.vue | 511 + .../uni-table/components/uni-th/uni-th.vue | 285 + .../components/uni-thead/uni-thead.vue | 129 + .../components/uni-tr/table-checkbox.vue | 179 + .../uni-table/components/uni-tr/uni-tr.vue | 171 + uni_modules/uni-table/i18n/en.json | 9 + uni_modules/uni-table/i18n/es.json | 9 + uni_modules/uni-table/i18n/fr.json | 9 + uni_modules/uni-table/i18n/index.js | 12 + uni_modules/uni-table/i18n/zh-Hans.json | 9 + uni_modules/uni-table/i18n/zh-Hant.json | 9 + uni_modules/uni-table/package.json | 83 + uni_modules/uni-table/readme.md | 13 + uni_modules/uni-tag/changelog.md | 21 + .../uni-tag/components/uni-tag/uni-tag.vue | 252 + uni_modules/uni-tag/package.json | 87 + uni_modules/uni-tag/readme.md | 13 + uni_modules/uni-test/changelog.md | 39 + .../uni-test/components/uni-test/uni-test.vue | 26 + uni_modules/uni-test/package.json | 83 + uni_modules/uni-test/readme.md | 10 + uni_modules/uni-title/changelog.md | 10 + .../components/uni-title/uni-title.vue | 171 + uni_modules/uni-title/package.json | 88 + uni_modules/uni-title/readme.md | 14 + uni_modules/uni-tooltip/changelog.md | 10 + .../components/uni-tooltip/uni-tooltip.vue | 68 + uni_modules/uni-tooltip/package.json | 88 + uni_modules/uni-tooltip/readme.md | 8 + uni_modules/uni-transition/changelog.md | 20 + .../uni-transition/createAnimation.js | 131 + .../uni-transition/uni-transition.vue | 281 + uni_modules/uni-transition/package.json | 87 + uni_modules/uni-transition/readme.md | 11 + uni_modules/uni-ui/changelog.md | 541 + .../uni-ui/components/uni-ui/uni-ui.vue | 7 + uni_modules/uni-ui/package.json | 129 + uni_modules/uni-ui/readme.md | 247 + uni_modules/uv-action-sheet/changelog.md | 7 + .../components/uv-action-sheet/props.js | 50 + .../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 | 8 + .../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 + .../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 | 5 + .../components/uv-avatar-group/props.js | 53 + .../uv-avatar-group/uv-avatar-group.vue | 106 + .../uv-avatar/components/uv-avatar/props.js | 80 + .../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 + .../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 + .../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 | 27 + .../uv-button/components/uv-button/nvue.scss | 46 + .../uv-button/components/uv-button/props.js | 163 + .../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 + .../components/uv-calendar/calendar.js | 546 + .../components/uv-calendar/header.vue | 104 + .../components/uv-calendar/month.vue | 616 + .../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 + .../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 | 11 + .../uv-cell/components/uv-cell-group/props.js | 15 + .../uv-cell-group/uv-cell-group.vue | 63 + .../uv-cell/components/uv-cell/props.js | 116 + .../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 + .../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 + .../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 + .../uv-code/components/uv-code/props.js | 35 + .../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 + .../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 + .../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 + .../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 | 26 + .../components/uv-datetime-picker/props.js | 125 + .../uv-datetime-picker/uv-datetime-picker.vue | 353 + uni_modules/uv-datetime-picker/package.json | 88 + uni_modules/uv-datetime-picker/readme.md | 19 + uni_modules/uv-divider/changelog.md | 7 + .../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 | 11 + .../uv-drop-down-item/uv-drop-down-item.vue | 167 + .../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 | 11 + .../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 + .../uv-form/components/uv-form/props.js | 46 + .../uv-form/components/uv-form/uv-form.vue | 209 + .../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 + .../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 | 17 + .../uv-grid/components/uv-grid-item/props.js | 15 + .../components/uv-grid-item/uv-grid-item.vue | 226 + .../uv-grid/components/uv-grid/props.js | 20 + .../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 | 27 + .../uv-icon/components/uv-icon/icons.js | 160 + .../uv-icon/components/uv-icon/props.js | 90 + .../uv-icon/components/uv-icon/uv-icon.vue | 226 + .../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 | 30 + .../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 + .../uv-index-anchor/uv-index-anchor.vue | 98 + .../uv-index-item/uv-index-item.vue | 87 + .../components/uv-index-list/props.js | 30 + .../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 | 25 + .../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 + .../uv-keyboard-car/uv-keyboard-car.vue | 347 + .../components/uv-keyboard-number/props.js | 19 + .../uv-keyboard-number/uv-keyboard-number.vue | 202 + .../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 + .../uv-line/components/uv-line/props.js | 34 + .../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 + .../uv-link/components/uv-link/props.js | 40 + .../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 + .../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 + .../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 + .../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 | 7 + .../components/uv-loading-page/props.js | 50 + .../uv-loading-page/uv-loading-page.vue | 106 + uni_modules/uv-loading-page/package.json | 89 + uni_modules/uv-loading-page/readme.md | 11 + uni_modules/uv-modal/changelog.md | 22 + .../uv-modal/components/uv-modal/props.js | 90 + .../uv-modal/components/uv-modal/uv-modal.vue | 242 + 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 + .../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 + .../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 + .../uv-notice-bar/uv-notice-bar.vue | 110 + .../components/uv-row-notice/props.js | 40 + .../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 + .../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 + .../uv-number-box/uv-number-box.vue | 397 + 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 + .../components/uv-parse/node/node.vue | 576 + .../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 + .../app-plus/uv-parse/js/uni.webview.min.js | 19 + .../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 + .../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 | 29 + .../uv-picker/components/uv-picker/props.js | 95 + .../components/uv-picker/uv-picker.vue | 315 + 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 | 11 + .../uv-qrcode/components/uv-qrcode/cache.js | 1 + .../uv-qrcode/gcanvas/bridge/bridge-weex.js | 241 + .../context-2d/FillStyleLinearGradient.js | 18 + .../gcanvas/context-2d/FillStylePattern.js | 8 + .../context-2d/FillStyleRadialGradient.js | 17 + .../gcanvas/context-2d/RenderingContext.js | 666 + .../gcanvas/context-webgl/ActiveInfo.js | 11 + .../uv-qrcode/gcanvas/context-webgl/Buffer.js | 21 + .../gcanvas/context-webgl/Framebuffer.js | 21 + .../uv-qrcode/gcanvas/context-webgl/GLenum.js | 298 + .../gcanvas/context-webgl/GLmethod.js | 142 + .../uv-qrcode/gcanvas/context-webgl/GLtype.js | 23 + .../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 + .../context-webgl/ShaderPrecisionFormat.js | 11 + .../gcanvas/context-webgl/Texture.js | 22 + .../gcanvas/context-webgl/UniformLocation.js | 22 + .../gcanvas/context-webgl/classUtils.js | 3 + .../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 + .../components/uv-qrcode/uv-qrcode.vue | 1036 ++ uni_modules/uv-qrcode/package.json | 87 + uni_modules/uv-qrcode/readme.md | 21 + uni_modules/uv-radio/changelog.md | 29 + .../components/uv-radio-group/props.js | 89 + .../uv-radio-group/uv-radio-group.vue | 115 + .../uv-radio/components/uv-radio/props.js | 65 + .../uv-radio/components/uv-radio/uv-radio.vue | 347 + uni_modules/uv-radio/package.json | 88 + uni_modules/uv-radio/readme.md | 19 + uni_modules/uv-rate/changelog.md | 17 + .../uv-rate/components/uv-rate/props.js | 73 + .../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 + .../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 + .../uv-row/components/uv-col/uv-col.vue | 165 + uni_modules/uv-row/components/uv-row/props.js | 20 + .../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 + .../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 + .../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 + .../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 + .../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 + .../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 + .../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 + .../components/uv-steps-item/props.js | 25 + .../uv-steps-item/uv-steps-item.vue | 347 + .../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 | 9 + .../uv-sticky/components/uv-sticky/props.js | 41 + .../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 | 5 + .../components/uv-subsection/props.js | 50 + .../uv-subsection/uv-subsection.vue | 279 + 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.vue | 200 + .../components/uv-swipe-action-item/wxs.js | 15 + .../components/uv-swipe-action/props.js | 10 + .../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 | 14 + .../components/uv-swiper-indicator/props.js | 30 + .../uv-swiper-indicator.vue | 112 + .../uv-swiper/components/uv-swiper/props.js | 136 + .../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 + .../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 + .../components/uv-tabbar-item/props.js | 40 + .../uv-tabbar-item/uv-tabbar-item.vue | 146 + .../uv-tabbar/components/uv-tabbar/props.js | 50 + .../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 | 19 + .../uv-tabs/components/uv-tabs/props.js | 71 + .../uv-tabs/components/uv-tabs/uv-tabs.vue | 378 + uni_modules/uv-tabs/package.json | 90 + uni_modules/uv-tabs/readme.md | 19 + uni_modules/uv-tags/changelog.md | 10 + .../uv-tags/components/uv-tags/props.js | 95 + .../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 + .../uv-text/components/uv-text/props.js | 113 + .../uv-text/components/uv-text/uv-text.vue | 218 + .../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 | 26 + .../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 | 7 + .../uv-toast/components/uv-toast/uv-toast.vue | 292 + 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 + .../uv-transition/createAnimation.js | 131 + .../components/uv-transition/props.js | 31 + .../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 | 68 + .../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 + .../uv-ui-tools/libs/css/components.scss | 23 + .../uv-ui-tools/libs/css/variable.scss | 111 + uni_modules/uv-ui-tools/libs/css/vue.scss | 40 + .../libs/function/colorGradient.js | 134 + .../uv-ui-tools/libs/function/debounce.js | 29 + .../uv-ui-tools/libs/function/digit.js | 167 + .../uv-ui-tools/libs/function/index.js | 734 ++ .../uv-ui-tools/libs/function/platform.js | 75 + uni_modules/uv-ui-tools/libs/function/test.js | 287 + .../uv-ui-tools/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 97 + .../luch-request/core/InterceptorManager.js | 50 + .../libs/luch-request/core/Request.js | 198 + .../libs/luch-request/core/buildFullPath.js | 20 + .../libs/luch-request/core/defaults.js | 29 + .../libs/luch-request/core/dispatchRequest.js | 3 + .../libs/luch-request/core/mergeConfig.js | 103 + .../libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 69 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + .../uv-ui-tools/libs/luch-request/index.d.ts | 116 + .../uv-ui-tools/libs/luch-request/index.js | 3 + .../uv-ui-tools/libs/luch-request/utils.js | 131 + .../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 | 166 + uni_modules/uv-ui-tools/libs/mixin/mpMixin.js | 8 + uni_modules/uv-ui-tools/libs/mixin/mpShare.js | 13 + .../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 | 330 + 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 | 15 + .../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 + .../components/uv-upload/uv-upload.vue | 481 + uni_modules/uv-upload/package.json | 90 + uni_modules/uv-upload/readme.md | 11 + uni_modules/uv-vtabs/changelog.md | 14 + .../uv-vtabs-item/uv-vtabs-item.vue | 68 + .../uv-vtabs/components/uv-vtabs/props.js | 79 + .../uv-vtabs/components/uv-vtabs/uv-vtabs.vue | 433 + uni_modules/uv-vtabs/package.json | 87 + uni_modules/uv-vtabs/readme.md | 12 + uni_modules/uv-waterfall/changelog.md | 24 + .../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/base64ToFile.js | 50 + utils/requestbaidumap.js | 20 + 1029 files changed, 148363 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 App.vue create mode 100644 components/dateSelection/dateSelection.vue create mode 100644 components/pageanimation/pageanimation.vue create mode 100644 hybrid/html/.history/index_20250825141035.html create mode 100644 hybrid/html/.history/index_20250825141115.html create mode 100644 hybrid/html/.history/index_20250825141148.html create mode 100644 hybrid/html/.history/index_20250825141722.html create mode 100644 hybrid/html/.history/index_20250825141808.html create mode 100644 hybrid/html/.history/index_20250825141833.html create mode 100644 hybrid/html/.history/index_20250825141859.html create mode 100644 hybrid/html/.history/index_20250825141921.html create mode 100644 hybrid/html/.history/index_20250825142000.html create mode 100644 hybrid/html/.history/index_20250825142005.html create mode 100644 hybrid/html/.history/index_20250825142013.html create mode 100644 hybrid/html/.history/index_20250825142017.html create mode 100644 hybrid/html/.history/index_20250825142128.html create mode 100644 hybrid/html/.history/index_20250825142346.html create mode 100644 hybrid/html/.history/index_20250825142501.html create mode 100644 hybrid/html/.history/index_20250825142516.html create mode 100644 hybrid/html/.history/index_20250825142724.html create mode 100644 hybrid/html/.history/index_20250825142750.html create mode 100644 hybrid/html/.history/index_20250825142831.html create mode 100644 hybrid/html/.history/index_20250825164941.html create mode 100644 hybrid/html/.history/index_20250825164950.html create mode 100644 hybrid/html/.history/index_20250825165000.html create mode 100644 hybrid/html/.history/index_20250825165004.html create mode 100644 hybrid/html/.history/index_20250825165007.html create mode 100644 hybrid/html/.history/index_20250825165027.html create mode 100644 hybrid/html/.history/index_20250825165032.html create mode 100644 hybrid/html/.history/index_20250825165038.html create mode 100644 hybrid/html/.history/index_20250825165049.html create mode 100644 hybrid/html/.history/index_20250825165118.html create mode 100644 hybrid/html/.history/index_20250825165128.html create mode 100644 hybrid/html/.history/index_20250825165136.html create mode 100644 hybrid/html/.history/index_20250825165221.html create mode 100644 hybrid/html/.history/index_20250825165240.html create mode 100644 hybrid/html/.history/index_20250825165303.html create mode 100644 hybrid/html/.history/index_20250825165314.html create mode 100644 hybrid/html/.history/index_20250825165316.html create mode 100644 hybrid/html/.history/index_20250825165339.html create mode 100644 hybrid/html/.history/index_20250825165348.html create mode 100644 hybrid/html/.history/index_20250825165355.html create mode 100644 hybrid/html/.history/index_20250825165359.html create mode 100644 hybrid/html/.history/index_20250825165402.html create mode 100644 hybrid/html/.history/index_20250825165406.html create mode 100644 hybrid/html/.history/index_20250825165409.html create mode 100644 hybrid/html/.history/index_20250825165411.html create mode 100644 hybrid/html/.history/index_20250825165414.html create mode 100644 hybrid/html/.history/index_20250825165419.html create mode 100644 hybrid/html/.history/index_20250825165427.html create mode 100644 hybrid/html/.history/index_20250825165449.html create mode 100644 hybrid/html/.history/index_20250825165453.html create mode 100644 hybrid/html/dom-to-image.min.js create mode 100644 hybrid/html/index.html create mode 100644 hybrid/html/map.png create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/go.vue create mode 100644 pages/index.vue create mode 100644 pages/pages/camera.vue create mode 100644 pages/pages/details.vue create mode 100644 pages/pages/history.vue create mode 100644 pages/pages/passingTheCar.vue create mode 100644 pages/pages/setUp.vue create mode 100644 pages/pages/statistics.vue create mode 100644 pages/pages/warningInformation.vue create mode 100644 pages/signIn.vue create mode 100644 static/back.png create mode 100644 static/camera/1.png create mode 100644 static/camera/11.png create mode 100644 static/camera/2.png create mode 100644 static/camera/22.png create mode 100644 static/camera/3.png create mode 100644 static/camera/33.png create mode 100644 static/camera/4.png create mode 100644 static/camera/44.png create mode 100644 static/equipmentno.png create mode 100644 static/equipmenton.png create mode 100644 static/err.png create mode 100644 static/f.png create mode 100644 static/html/.history/index_20250825151752.html create mode 100644 static/html/.history/index_20250825151800.html create mode 100644 static/html/.history/index_20250825151912.html create mode 100644 static/html/.history/index_20250825151913.html create mode 100644 static/html/.history/index_20250825152013.html create mode 100644 static/html/dom-to-image.min.js create mode 100644 static/html/index.html create mode 100644 static/html/map.png create mode 100644 static/k.png create mode 100644 static/logo.png create mode 100644 static/map.png create mode 100644 static/signIn/1.png create mode 100644 static/signIn/2.png create mode 100644 static/signIn/signInbj.png create mode 100644 static/signIn/title.png create mode 100644 static/tab/1.png create mode 100644 static/tab/2.png create mode 100644 static/tab/3.png create mode 100644 static/tab/4.png create mode 100644 static/tab/5.png create mode 100644 static/time.png create mode 100644 static/tjbj.png create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uni_modules/cc-selectDity/changelog.md create mode 100644 uni_modules/cc-selectDity/components/cc-selectDity/area.js create mode 100644 uni_modules/cc-selectDity/components/cc-selectDity/cc-selectDity.vue create mode 100644 uni_modules/cc-selectDity/package.json create mode 100644 uni_modules/cc-selectDity/readme.md create mode 100644 uni_modules/lime-clipper/changelog.md create mode 100644 uni_modules/lime-clipper/components/l-clipper/index.scss create mode 100644 uni_modules/lime-clipper/components/l-clipper/l-clipper.uvue create mode 100644 uni_modules/lime-clipper/components/l-clipper/l-clipper.vue create mode 100644 uni_modules/lime-clipper/components/l-clipper/type.ts create mode 100644 uni_modules/lime-clipper/components/l-clipper/utils.js create mode 100644 uni_modules/lime-clipper/components/l-clipper/utils.uts create mode 100644 uni_modules/lime-clipper/components/lime-clipper/lime-clipper.uvue create mode 100644 uni_modules/lime-clipper/components/lime-clipper/lime-clipper.vue create mode 100644 uni_modules/lime-clipper/package.json create mode 100644 uni_modules/lime-clipper/readme.md create mode 100644 uni_modules/lime-clipper/static/photo.svg create mode 100644 uni_modules/lime-clipper/static/rotate.svg create mode 100644 uni_modules/lime-style/changelog.md create mode 100644 uni_modules/lime-style/color/colorPalette.scss create mode 100644 uni_modules/lime-style/color/colors.scss create mode 100644 uni_modules/lime-style/functions.scss create mode 100644 uni_modules/lime-style/index.scss create mode 100644 uni_modules/lime-style/mixins/create.scss create mode 100644 uni_modules/lime-style/mixins/ellipsis.scss create mode 100644 uni_modules/lime-style/mixins/flex.scss create mode 100644 uni_modules/lime-style/mixins/hairline.scss create mode 100644 uni_modules/lime-style/mixins/platform.scss create mode 100644 uni_modules/lime-style/mixins/useTheme.scss create mode 100644 uni_modules/lime-style/mixins/utilities.scss create mode 100644 uni_modules/lime-style/package.json create mode 100644 uni_modules/lime-style/readme.md create mode 100644 uni_modules/lime-style/theme/dark.scss create mode 100644 uni_modules/lime-style/theme/default.scss create mode 100644 uni_modules/lime-style/var.scss create mode 100644 uni_modules/mcc-drag/changelog.md create mode 100644 uni_modules/mcc-drag/components/mcc-drag/mcc-drag.vue create mode 100644 uni_modules/mcc-drag/components/mcc-dragsub/mcc-dragsub.vue create mode 100644 uni_modules/mcc-drag/package.json create mode 100644 uni_modules/mcc-drag/readme.md create mode 100644 uni_modules/mcc-haha/changelog.md create mode 100644 uni_modules/mcc-haha/components/mcc-haha/mcc-haha.vue create mode 100644 uni_modules/mcc-haha/package.json create mode 100644 uni_modules/mcc-haha/readme.md create mode 100644 uni_modules/mumu-qrcode/changelog.md create mode 100644 uni_modules/mumu-qrcode/components/mumu-qrcode/jsQR.js create mode 100644 uni_modules/mumu-qrcode/components/mumu-qrcode/mumu-qrcode.vue create mode 100644 uni_modules/mumu-qrcode/package.json create mode 100644 uni_modules/mumu-qrcode/readme.md create mode 100644 uni_modules/piaoyi-cityPicker/changelog.md create mode 100644 uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/cityData.js create mode 100644 uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/piaoyi-cityPicker.vue create mode 100644 uni_modules/piaoyi-cityPicker/package.json create mode 100644 uni_modules/piaoyi-cityPicker/readme.md create mode 100644 uni_modules/piaoyi-editor/changelog.md create mode 100644 uni_modules/piaoyi-editor/components/piaoyi-editor/color-picker.vue create mode 100644 uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.css create mode 100644 uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.ttf create mode 100644 uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.woff create mode 100644 uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.woff2 create mode 100644 uni_modules/piaoyi-editor/components/piaoyi-editor/piaoyi-editor.vue create mode 100644 uni_modules/piaoyi-editor/package.json create mode 100644 uni_modules/piaoyi-editor/readme.md create mode 100644 uni_modules/qf-image-cropper/changelog.md create mode 100644 uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js create mode 100644 uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue create mode 100644 uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs create mode 100644 uni_modules/qf-image-cropper/package.json create mode 100644 uni_modules/qf-image-cropper/readme.md create mode 100644 uni_modules/qiun-data-charts/changelog.md create mode 100644 uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue create mode 100644 uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue create mode 100644 uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js create mode 100644 uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js create mode 100644 uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md create mode 100644 uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js create mode 100644 uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.min.js create mode 100644 uni_modules/qiun-data-charts/license.md create mode 100644 uni_modules/qiun-data-charts/package.json create mode 100644 uni_modules/qiun-data-charts/readme.md create mode 100644 uni_modules/qiun-data-charts/static/app-plus/echarts.min.js create mode 100644 uni_modules/qiun-data-charts/static/h5/echarts.min.js create mode 100644 uni_modules/srh-convertPath/changelog.md create mode 100644 uni_modules/srh-convertPath/package.json create mode 100644 uni_modules/srh-convertPath/readme.md create mode 100644 uni_modules/srh-convertPath/utssdk/app-android/index.uts create mode 100644 uni_modules/srh-convertPath/utssdk/app-harmony/index.uts create mode 100644 uni_modules/srh-convertPath/utssdk/app-ios/index.uts create mode 100644 uni_modules/srh-convertPath/utssdk/interface.uts create mode 100644 uni_modules/srh-convertPath/utssdk/unierror.uts create mode 100644 uni_modules/srh-convertPath/使用说明.md create mode 100644 uni_modules/uni-badge/changelog.md create mode 100644 uni_modules/uni-badge/components/uni-badge/uni-badge.vue create mode 100644 uni_modules/uni-badge/package.json create mode 100644 uni_modules/uni-badge/readme.md create mode 100644 uni_modules/uni-breadcrumb/changelog.md create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue create mode 100644 uni_modules/uni-breadcrumb/package.json create mode 100644 uni_modules/uni-breadcrumb/readme.md create mode 100644 uni_modules/uni-calendar/changelog.md create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 uni_modules/uni-calendar/package.json create mode 100644 uni_modules/uni-calendar/readme.md create mode 100644 uni_modules/uni-card/changelog.md create mode 100644 uni_modules/uni-card/components/uni-card/uni-card.vue create mode 100644 uni_modules/uni-card/package.json create mode 100644 uni_modules/uni-card/readme.md create mode 100644 uni_modules/uni-collapse/changelog.md create mode 100644 uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue create mode 100644 uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue create mode 100644 uni_modules/uni-collapse/package.json create mode 100644 uni_modules/uni-collapse/readme.md create mode 100644 uni_modules/uni-combox/changelog.md create mode 100644 uni_modules/uni-combox/components/uni-combox/uni-combox.vue create mode 100644 uni_modules/uni-combox/package.json create mode 100644 uni_modules/uni-combox/readme.md create mode 100644 uni_modules/uni-countdown/changelog.md create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/en.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/index.js create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue create mode 100644 uni_modules/uni-countdown/package.json create mode 100644 uni_modules/uni-countdown/readme.md create mode 100644 uni_modules/uni-data-checkbox/changelog.md create mode 100644 uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue create mode 100644 uni_modules/uni-data-checkbox/package.json create mode 100644 uni_modules/uni-data-checkbox/readme.md create mode 100644 uni_modules/uni-data-picker/changelog.md create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/keypress.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue create mode 100644 uni_modules/uni-data-picker/package.json create mode 100644 uni_modules/uni-data-picker/readme.md create mode 100644 uni_modules/uni-data-select/changelog.md create mode 100644 uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue create mode 100644 uni_modules/uni-data-select/package.json create mode 100644 uni_modules/uni-data-select/readme.md create mode 100644 uni_modules/uni-dateformat/changelog.md create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/date-format.js create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue create mode 100644 uni_modules/uni-dateformat/package.json create mode 100644 uni_modules/uni-dateformat/readme.md create mode 100644 uni_modules/uni-datetime-picker/changelog.md create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 uni_modules/uni-datetime-picker/package.json create mode 100644 uni_modules/uni-datetime-picker/readme.md create mode 100644 uni_modules/uni-drawer/changelog.md create mode 100644 uni_modules/uni-drawer/components/uni-drawer/keypress.js create mode 100644 uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue create mode 100644 uni_modules/uni-drawer/package.json create mode 100644 uni_modules/uni-drawer/readme.md create mode 100644 uni_modules/uni-easyinput/changelog.md create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/common.js create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue create mode 100644 uni_modules/uni-easyinput/package.json create mode 100644 uni_modules/uni-easyinput/readme.md create mode 100644 uni_modules/uni-fab/changelog.md create mode 100644 uni_modules/uni-fab/components/uni-fab/uni-fab.vue create mode 100644 uni_modules/uni-fab/package.json create mode 100644 uni_modules/uni-fab/readme.md create mode 100644 uni_modules/uni-fav/changelog.md create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/en.json create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/index.js create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json create mode 100644 uni_modules/uni-fav/components/uni-fav/uni-fav.vue create mode 100644 uni_modules/uni-fav/package.json create mode 100644 uni_modules/uni-fav/readme.md create mode 100644 uni_modules/uni-file-picker/changelog.md create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/utils.js create mode 100644 uni_modules/uni-file-picker/package.json create mode 100644 uni_modules/uni-file-picker/readme.md create mode 100644 uni_modules/uni-forms/changelog.md create mode 100644 uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue create mode 100644 uni_modules/uni-forms/components/uni-forms/uni-forms.vue create mode 100644 uni_modules/uni-forms/components/uni-forms/utils.js create mode 100644 uni_modules/uni-forms/components/uni-forms/validate.js create mode 100644 uni_modules/uni-forms/package.json create mode 100644 uni_modules/uni-forms/readme.md create mode 100644 uni_modules/uni-goods-nav/changelog.md create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue create mode 100644 uni_modules/uni-goods-nav/package.json create mode 100644 uni_modules/uni-goods-nav/readme.md create mode 100644 uni_modules/uni-grid/changelog.md create mode 100644 uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue create mode 100644 uni_modules/uni-grid/components/uni-grid/uni-grid.vue create mode 100644 uni_modules/uni-grid/package.json create mode 100644 uni_modules/uni-grid/readme.md create mode 100644 uni_modules/uni-group/changelog.md create mode 100644 uni_modules/uni-group/components/uni-group/uni-group.vue create mode 100644 uni_modules/uni-group/package.json create mode 100644 uni_modules/uni-group/readme.md create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js 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-indexed-list/changelog.md create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue create mode 100644 uni_modules/uni-indexed-list/package.json create mode 100644 uni_modules/uni-indexed-list/readme.md create mode 100644 uni_modules/uni-link/changelog.md create mode 100644 uni_modules/uni-link/components/uni-link/uni-link.vue create mode 100644 uni_modules/uni-link/package.json create mode 100644 uni_modules/uni-link/readme.md create mode 100644 uni_modules/uni-list/changelog.md create mode 100644 uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue create mode 100644 uni_modules/uni-list/components/uni-list-item/uni-list-item.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-list.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.wxs create mode 100644 uni_modules/uni-list/package.json create mode 100644 uni_modules/uni-list/readme.md create mode 100644 uni_modules/uni-load-more/changelog.md create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/en.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/index.js create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue create mode 100644 uni_modules/uni-load-more/package.json create mode 100644 uni_modules/uni-load-more/readme.md create mode 100644 uni_modules/uni-nav-bar/changelog.md create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue create mode 100644 uni_modules/uni-nav-bar/package.json create mode 100644 uni_modules/uni-nav-bar/readme.md create mode 100644 uni_modules/uni-notice-bar/changelog.md create mode 100644 uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue create mode 100644 uni_modules/uni-notice-bar/package.json create mode 100644 uni_modules/uni-notice-bar/readme.md create mode 100644 uni_modules/uni-number-box/changelog.md create mode 100644 uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue create mode 100644 uni_modules/uni-number-box/package.json create mode 100644 uni_modules/uni-number-box/readme.md create mode 100644 uni_modules/uni-pagination/changelog.md create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/en.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/es.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/index.js create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue create mode 100644 uni_modules/uni-pagination/package.json create mode 100644 uni_modules/uni-pagination/readme.md create mode 100644 uni_modules/uni-popup/changelog.md create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/en.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/index.js create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json create mode 100644 uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 uni_modules/uni-popup/package.json create mode 100644 uni_modules/uni-popup/readme.md create mode 100644 uni_modules/uni-rate/changelog.md create mode 100644 uni_modules/uni-rate/components/uni-rate/uni-rate.vue create mode 100644 uni_modules/uni-rate/package.json create mode 100644 uni_modules/uni-rate/readme.md create mode 100644 uni_modules/uni-row/changelog.md create mode 100644 uni_modules/uni-row/components/uni-col/uni-col.vue create mode 100644 uni_modules/uni-row/components/uni-row/uni-row.vue create mode 100644 uni_modules/uni-row/package.json create mode 100644 uni_modules/uni-row/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/uni-search-bar/changelog.md create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue create mode 100644 uni_modules/uni-search-bar/package.json create mode 100644 uni_modules/uni-search-bar/readme.md create mode 100644 uni_modules/uni-section/changelog.md create mode 100644 uni_modules/uni-section/components/uni-section/uni-section.vue create mode 100644 uni_modules/uni-section/package.json create mode 100644 uni_modules/uni-section/readme.md create mode 100644 uni_modules/uni-segmented-control/changelog.md create mode 100644 uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue create mode 100644 uni_modules/uni-segmented-control/package.json create mode 100644 uni_modules/uni-segmented-control/readme.md create mode 100644 uni_modules/uni-steps/changelog.md create mode 100644 uni_modules/uni-steps/components/uni-steps/uni-steps.vue create mode 100644 uni_modules/uni-steps/package.json create mode 100644 uni_modules/uni-steps/readme.md create mode 100644 uni_modules/uni-swipe-action/changelog.md create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue create mode 100644 uni_modules/uni-swipe-action/package.json create mode 100644 uni_modules/uni-swipe-action/readme.md create mode 100644 uni_modules/uni-swiper-dot/changelog.md create mode 100644 uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue create mode 100644 uni_modules/uni-swiper-dot/package.json create mode 100644 uni_modules/uni-swiper-dot/readme.md create mode 100644 uni_modules/uni-table/changelog.md create mode 100644 uni_modules/uni-table/components/uni-table/uni-table.vue create mode 100644 uni_modules/uni-table/components/uni-tbody/uni-tbody.vue create mode 100644 uni_modules/uni-table/components/uni-td/uni-td.vue create mode 100644 uni_modules/uni-table/components/uni-th/filter-dropdown.vue create mode 100644 uni_modules/uni-table/components/uni-th/uni-th.vue create mode 100644 uni_modules/uni-table/components/uni-thead/uni-thead.vue create mode 100644 uni_modules/uni-table/components/uni-tr/table-checkbox.vue create mode 100644 uni_modules/uni-table/components/uni-tr/uni-tr.vue create mode 100644 uni_modules/uni-table/i18n/en.json create mode 100644 uni_modules/uni-table/i18n/es.json create mode 100644 uni_modules/uni-table/i18n/fr.json create mode 100644 uni_modules/uni-table/i18n/index.js create mode 100644 uni_modules/uni-table/i18n/zh-Hans.json create mode 100644 uni_modules/uni-table/i18n/zh-Hant.json create mode 100644 uni_modules/uni-table/package.json create mode 100644 uni_modules/uni-table/readme.md create mode 100644 uni_modules/uni-tag/changelog.md create mode 100644 uni_modules/uni-tag/components/uni-tag/uni-tag.vue create mode 100644 uni_modules/uni-tag/package.json create mode 100644 uni_modules/uni-tag/readme.md create mode 100644 uni_modules/uni-test/changelog.md create mode 100644 uni_modules/uni-test/components/uni-test/uni-test.vue create mode 100644 uni_modules/uni-test/package.json create mode 100644 uni_modules/uni-test/readme.md create mode 100644 uni_modules/uni-title/changelog.md create mode 100644 uni_modules/uni-title/components/uni-title/uni-title.vue create mode 100644 uni_modules/uni-title/package.json create mode 100644 uni_modules/uni-title/readme.md create mode 100644 uni_modules/uni-tooltip/changelog.md create mode 100644 uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue create mode 100644 uni_modules/uni-tooltip/package.json create mode 100644 uni_modules/uni-tooltip/readme.md create mode 100644 uni_modules/uni-transition/changelog.md create mode 100644 uni_modules/uni-transition/components/uni-transition/createAnimation.js create mode 100644 uni_modules/uni-transition/components/uni-transition/uni-transition.vue create mode 100644 uni_modules/uni-transition/package.json create mode 100644 uni_modules/uni-transition/readme.md create mode 100644 uni_modules/uni-ui/changelog.md create mode 100644 uni_modules/uni-ui/components/uni-ui/uni-ui.vue create mode 100644 uni_modules/uni-ui/package.json create mode 100644 uni_modules/uni-ui/readme.md 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/base64ToFile.js create mode 100644 utils/requestbaidumap.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4e78e38 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules/ +unpackage/ +dist/ +unpackage/ +unpackage +/unpackage +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.project +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..29998cf --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,10 @@ +{ + "version" : "1.0", + "configurations" : [ + { + "customPlaygroundType" : "local", + "playground" : "custom", + "type" : "uni-app:app-android" + } + ] +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..dfe843f --- /dev/null +++ b/App.vue @@ -0,0 +1,34 @@ + + + diff --git a/components/dateSelection/dateSelection.vue b/components/dateSelection/dateSelection.vue new file mode 100644 index 0000000..f158fd7 --- /dev/null +++ b/components/dateSelection/dateSelection.vue @@ -0,0 +1,183 @@ + + + + + \ No newline at end of file diff --git a/components/pageanimation/pageanimation.vue b/components/pageanimation/pageanimation.vue new file mode 100644 index 0000000..bbc7850 --- /dev/null +++ b/components/pageanimation/pageanimation.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141035.html b/hybrid/html/.history/index_20250825141035.html new file mode 100644 index 0000000..e69de29 diff --git a/hybrid/html/.history/index_20250825141115.html b/hybrid/html/.history/index_20250825141115.html new file mode 100644 index 0000000..d01f779 --- /dev/null +++ b/hybrid/html/.history/index_20250825141115.html @@ -0,0 +1,11 @@ + + + + + + Document + + + + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141148.html b/hybrid/html/.history/index_20250825141148.html new file mode 100644 index 0000000..ac3136c --- /dev/null +++ b/hybrid/html/.history/index_20250825141148.html @@ -0,0 +1,13 @@ + + + + + + Document + + +
+
设备001
+
+ + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141722.html b/hybrid/html/.history/index_20250825141722.html new file mode 100644 index 0000000..75e894f --- /dev/null +++ b/hybrid/html/.history/index_20250825141722.html @@ -0,0 +1,22 @@ + + + + + + Document + + + +
+
设备001
+
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141808.html b/hybrid/html/.history/index_20250825141808.html new file mode 100644 index 0000000..2fc9e4c --- /dev/null +++ b/hybrid/html/.history/index_20250825141808.html @@ -0,0 +1,31 @@ + + + + + + Document + + + + +
+
设备001
+
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141833.html b/hybrid/html/.history/index_20250825141833.html new file mode 100644 index 0000000..debc133 --- /dev/null +++ b/hybrid/html/.history/index_20250825141833.html @@ -0,0 +1,36 @@ + + + + + + Document + + + + +
+
设备001
+
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141859.html b/hybrid/html/.history/index_20250825141859.html new file mode 100644 index 0000000..ec9ea49 --- /dev/null +++ b/hybrid/html/.history/index_20250825141859.html @@ -0,0 +1,38 @@ + + + + + + Document + + + + +
+
设备001
+
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825141921.html b/hybrid/html/.history/index_20250825141921.html new file mode 100644 index 0000000..8a9a3a2 --- /dev/null +++ b/hybrid/html/.history/index_20250825141921.html @@ -0,0 +1,40 @@ + + + + + + Document + + + + +
+
设备001
+
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142000.html b/hybrid/html/.history/index_20250825142000.html new file mode 100644 index 0000000..ec57515 --- /dev/null +++ b/hybrid/html/.history/index_20250825142000.html @@ -0,0 +1,46 @@ + + + + + + Document + + + + +
+
设备001
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142005.html b/hybrid/html/.history/index_20250825142005.html new file mode 100644 index 0000000..67f5ca9 --- /dev/null +++ b/hybrid/html/.history/index_20250825142005.html @@ -0,0 +1,47 @@ + + + + + + Document + + + + +
+
设备001
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142013.html b/hybrid/html/.history/index_20250825142013.html new file mode 100644 index 0000000..0fb8754 --- /dev/null +++ b/hybrid/html/.history/index_20250825142013.html @@ -0,0 +1,47 @@ + + + + + + Document + + + + +
+
设备001
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142017.html b/hybrid/html/.history/index_20250825142017.html new file mode 100644 index 0000000..1629794 --- /dev/null +++ b/hybrid/html/.history/index_20250825142017.html @@ -0,0 +1,47 @@ + + + + + + Document + + + + +
+
设备001
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142128.html b/hybrid/html/.history/index_20250825142128.html new file mode 100644 index 0000000..8ebbf83 --- /dev/null +++ b/hybrid/html/.history/index_20250825142128.html @@ -0,0 +1,48 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142346.html b/hybrid/html/.history/index_20250825142346.html new file mode 100644 index 0000000..038eb15 --- /dev/null +++ b/hybrid/html/.history/index_20250825142346.html @@ -0,0 +1,48 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142501.html b/hybrid/html/.history/index_20250825142501.html new file mode 100644 index 0000000..c5c5a36 --- /dev/null +++ b/hybrid/html/.history/index_20250825142501.html @@ -0,0 +1,50 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142516.html b/hybrid/html/.history/index_20250825142516.html new file mode 100644 index 0000000..f263eae --- /dev/null +++ b/hybrid/html/.history/index_20250825142516.html @@ -0,0 +1,50 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142724.html b/hybrid/html/.history/index_20250825142724.html new file mode 100644 index 0000000..0f00f62 --- /dev/null +++ b/hybrid/html/.history/index_20250825142724.html @@ -0,0 +1,50 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142750.html b/hybrid/html/.history/index_20250825142750.html new file mode 100644 index 0000000..23e9c9b --- /dev/null +++ b/hybrid/html/.history/index_20250825142750.html @@ -0,0 +1,49 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825142831.html b/hybrid/html/.history/index_20250825142831.html new file mode 100644 index 0000000..182cb30 --- /dev/null +++ b/hybrid/html/.history/index_20250825142831.html @@ -0,0 +1,48 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825164941.html b/hybrid/html/.history/index_20250825164941.html new file mode 100644 index 0000000..3d7103a --- /dev/null +++ b/hybrid/html/.history/index_20250825164941.html @@ -0,0 +1,58 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825164950.html b/hybrid/html/.history/index_20250825164950.html new file mode 100644 index 0000000..4386eac --- /dev/null +++ b/hybrid/html/.history/index_20250825164950.html @@ -0,0 +1,58 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165000.html b/hybrid/html/.history/index_20250825165000.html new file mode 100644 index 0000000..be3b880 --- /dev/null +++ b/hybrid/html/.history/index_20250825165000.html @@ -0,0 +1,58 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165004.html b/hybrid/html/.history/index_20250825165004.html new file mode 100644 index 0000000..f85a319 --- /dev/null +++ b/hybrid/html/.history/index_20250825165004.html @@ -0,0 +1,57 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165007.html b/hybrid/html/.history/index_20250825165007.html new file mode 100644 index 0000000..9f04b39 --- /dev/null +++ b/hybrid/html/.history/index_20250825165007.html @@ -0,0 +1,57 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165027.html b/hybrid/html/.history/index_20250825165027.html new file mode 100644 index 0000000..4716107 --- /dev/null +++ b/hybrid/html/.history/index_20250825165027.html @@ -0,0 +1,57 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165032.html b/hybrid/html/.history/index_20250825165032.html new file mode 100644 index 0000000..23a2ef8 --- /dev/null +++ b/hybrid/html/.history/index_20250825165032.html @@ -0,0 +1,57 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165038.html b/hybrid/html/.history/index_20250825165038.html new file mode 100644 index 0000000..ae07413 --- /dev/null +++ b/hybrid/html/.history/index_20250825165038.html @@ -0,0 +1,58 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165049.html b/hybrid/html/.history/index_20250825165049.html new file mode 100644 index 0000000..b926022 --- /dev/null +++ b/hybrid/html/.history/index_20250825165049.html @@ -0,0 +1,58 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165118.html b/hybrid/html/.history/index_20250825165118.html new file mode 100644 index 0000000..4d56f07 --- /dev/null +++ b/hybrid/html/.history/index_20250825165118.html @@ -0,0 +1,62 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165128.html b/hybrid/html/.history/index_20250825165128.html new file mode 100644 index 0000000..040a48b --- /dev/null +++ b/hybrid/html/.history/index_20250825165128.html @@ -0,0 +1,62 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165136.html b/hybrid/html/.history/index_20250825165136.html new file mode 100644 index 0000000..cac3cce --- /dev/null +++ b/hybrid/html/.history/index_20250825165136.html @@ -0,0 +1,62 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165221.html b/hybrid/html/.history/index_20250825165221.html new file mode 100644 index 0000000..e0ec6c8 --- /dev/null +++ b/hybrid/html/.history/index_20250825165221.html @@ -0,0 +1,71 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165240.html b/hybrid/html/.history/index_20250825165240.html new file mode 100644 index 0000000..c744dfc --- /dev/null +++ b/hybrid/html/.history/index_20250825165240.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165303.html b/hybrid/html/.history/index_20250825165303.html new file mode 100644 index 0000000..c744dfc --- /dev/null +++ b/hybrid/html/.history/index_20250825165303.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165314.html b/hybrid/html/.history/index_20250825165314.html new file mode 100644 index 0000000..4feff18 --- /dev/null +++ b/hybrid/html/.history/index_20250825165314.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165316.html b/hybrid/html/.history/index_20250825165316.html new file mode 100644 index 0000000..4feff18 --- /dev/null +++ b/hybrid/html/.history/index_20250825165316.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ + + +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165339.html b/hybrid/html/.history/index_20250825165339.html new file mode 100644 index 0000000..a986f99 --- /dev/null +++ b/hybrid/html/.history/index_20250825165339.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165348.html b/hybrid/html/.history/index_20250825165348.html new file mode 100644 index 0000000..ec80a71 --- /dev/null +++ b/hybrid/html/.history/index_20250825165348.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165355.html b/hybrid/html/.history/index_20250825165355.html new file mode 100644 index 0000000..5188553 --- /dev/null +++ b/hybrid/html/.history/index_20250825165355.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165359.html b/hybrid/html/.history/index_20250825165359.html new file mode 100644 index 0000000..5188553 --- /dev/null +++ b/hybrid/html/.history/index_20250825165359.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165402.html b/hybrid/html/.history/index_20250825165402.html new file mode 100644 index 0000000..b54d14e --- /dev/null +++ b/hybrid/html/.history/index_20250825165402.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165406.html b/hybrid/html/.history/index_20250825165406.html new file mode 100644 index 0000000..118f7b2 --- /dev/null +++ b/hybrid/html/.history/index_20250825165406.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165409.html b/hybrid/html/.history/index_20250825165409.html new file mode 100644 index 0000000..6cac63a --- /dev/null +++ b/hybrid/html/.history/index_20250825165409.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165411.html b/hybrid/html/.history/index_20250825165411.html new file mode 100644 index 0000000..a4e10dc --- /dev/null +++ b/hybrid/html/.history/index_20250825165411.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165414.html b/hybrid/html/.history/index_20250825165414.html new file mode 100644 index 0000000..828dee7 --- /dev/null +++ b/hybrid/html/.history/index_20250825165414.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165419.html b/hybrid/html/.history/index_20250825165419.html new file mode 100644 index 0000000..c998f07 --- /dev/null +++ b/hybrid/html/.history/index_20250825165419.html @@ -0,0 +1,75 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165427.html b/hybrid/html/.history/index_20250825165427.html new file mode 100644 index 0000000..3891671 --- /dev/null +++ b/hybrid/html/.history/index_20250825165427.html @@ -0,0 +1,77 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165449.html b/hybrid/html/.history/index_20250825165449.html new file mode 100644 index 0000000..ffda887 --- /dev/null +++ b/hybrid/html/.history/index_20250825165449.html @@ -0,0 +1,77 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/.history/index_20250825165453.html b/hybrid/html/.history/index_20250825165453.html new file mode 100644 index 0000000..f793f80 --- /dev/null +++ b/hybrid/html/.history/index_20250825165453.html @@ -0,0 +1,77 @@ + + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/dom-to-image.min.js b/hybrid/html/dom-to-image.min.js new file mode 100644 index 0000000..bc73227 --- /dev/null +++ b/hybrid/html/dom-to-image.min.js @@ -0,0 +1,2 @@ +/*! dom-to-image 10-06-2017 */ +!function(a){"use strict";function b(a,b){function c(a){return b.bgcolor&&(a.style.backgroundColor=b.bgcolor),b.width&&(a.style.width=b.width+"px"),b.height&&(a.style.height=b.height+"px"),b.style&&Object.keys(b.style).forEach(function(c){a.style[c]=b.style[c]}),a}return b=b||{},g(b),Promise.resolve(a).then(function(a){return i(a,b.filter,!0)}).then(j).then(k).then(c).then(function(c){return l(c,b.width||q.width(a),b.height||q.height(a))})}function c(a,b){return h(a,b||{}).then(function(b){return b.getContext("2d").getImageData(0,0,q.width(a),q.height(a)).data})}function d(a,b){return h(a,b||{}).then(function(a){return a.toDataURL()})}function e(a,b){return b=b||{},h(a,b).then(function(a){return a.toDataURL("image/jpeg",b.quality||1)})}function f(a,b){return h(a,b||{}).then(q.canvasToBlob)}function g(a){"undefined"==typeof a.imagePlaceholder?v.impl.options.imagePlaceholder=u.imagePlaceholder:v.impl.options.imagePlaceholder=a.imagePlaceholder,"undefined"==typeof a.cacheBust?v.impl.options.cacheBust=u.cacheBust:v.impl.options.cacheBust=a.cacheBust}function h(a,c){function d(a){var b=document.createElement("canvas");if(b.width=c.width||q.width(a),b.height=c.height||q.height(a),c.bgcolor){var d=b.getContext("2d");d.fillStyle=c.bgcolor,d.fillRect(0,0,b.width,b.height)}return b}return b(a,c).then(q.makeImage).then(q.delay(100)).then(function(b){var c=d(a);return c.getContext("2d").drawImage(b,0,0),c})}function i(a,b,c){function d(a){return a instanceof HTMLCanvasElement?q.makeImage(a.toDataURL()):a.cloneNode(!1)}function e(a,b,c){function d(a,b,c){var d=Promise.resolve();return b.forEach(function(b){d=d.then(function(){return i(b,c)}).then(function(b){b&&a.appendChild(b)})}),d}var e=a.childNodes;return 0===e.length?Promise.resolve(b):d(b,q.asArray(e),c).then(function(){return b})}function f(a,b){function c(){function c(a,b){function c(a,b){q.asArray(a).forEach(function(c){b.setProperty(c,a.getPropertyValue(c),a.getPropertyPriority(c))})}a.cssText?b.cssText=a.cssText:c(a,b)}c(window.getComputedStyle(a),b.style)}function d(){function c(c){function d(a,b,c){function d(a){var b=a.getPropertyValue("content");return a.cssText+" content: "+b+";"}function e(a){function b(b){return b+": "+a.getPropertyValue(b)+(a.getPropertyPriority(b)?" !important":"")}return q.asArray(a).map(b).join("; ")+";"}var f="."+a+":"+b,g=c.cssText?d(c):e(c);return document.createTextNode(f+"{"+g+"}")}var e=window.getComputedStyle(a,c),f=e.getPropertyValue("content");if(""!==f&&"none"!==f){var g=q.uid();b.className=b.className+" "+g;var h=document.createElement("style");h.appendChild(d(g,c,e)),b.appendChild(h)}}[":before",":after"].forEach(function(a){c(a)})}function e(){a instanceof HTMLTextAreaElement&&(b.innerHTML=a.value),a instanceof HTMLInputElement&&b.setAttribute("value",a.value)}function f(){b instanceof SVGElement&&(b.setAttribute("xmlns","http://www.w3.org/2000/svg"),b instanceof SVGRectElement&&["width","height"].forEach(function(a){var c=b.getAttribute(a);c&&b.style.setProperty(a,c)}))}return b instanceof Element?Promise.resolve().then(c).then(d).then(e).then(f).then(function(){return b}):b}return c||!b||b(a)?Promise.resolve(a).then(d).then(function(c){return e(a,c,b)}).then(function(b){return f(a,b)}):Promise.resolve()}function j(a){return s.resolveAll().then(function(b){var c=document.createElement("style");return a.appendChild(c),c.appendChild(document.createTextNode(b)),a})}function k(a){return t.inlineAll(a).then(function(){return a})}function l(a,b,c){return Promise.resolve(a).then(function(a){return a.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),(new XMLSerializer).serializeToString(a)}).then(q.escapeXhtml).then(function(a){return''+a+""}).then(function(a){return''+a+""}).then(function(a){return"data:image/svg+xml;charset=utf-8,"+a})}function m(){function a(){var a="application/font-woff",b="image/jpeg";return{woff:a,woff2:a,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:b,jpeg:b,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml"}}function b(a){var b=/\.([^\.\/]*?)$/g.exec(a);return b?b[1]:""}function c(c){var d=b(c).toLowerCase();return a()[d]||""}function d(a){return a.search(/^(data:)/)!==-1}function e(a){return new Promise(function(b){for(var c=window.atob(a.toDataURL().split(",")[1]),d=c.length,e=new Uint8Array(d),f=0;f + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/hybrid/html/map.png b/hybrid/html/map.png new file mode 100644 index 0000000000000000000000000000000000000000..37222a38882b04e3bb7cf4078c9dde31bf75c424 GIT binary patch literal 10975 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..9c9f62e --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..c1caf36 --- /dev/null +++ b/main.js @@ -0,0 +1,22 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' +import './uni.promisify.adaptor' +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App +}) +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..b2736e6 --- /dev/null +++ b/manifest.json @@ -0,0 +1,105 @@ +{ + "name" : "区间测速", + "appid" : "__UNI__E207F22", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "screenOrientation" : [ + "landscape-primary", //可选,字符串类型,支持横屏 + "landscape-secondary" + ], + "runmode" : "liberate", + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : { + "Maps" : {}, + "Geolocation" : {}, + "LivePusher" : {}, + "VideoPlayer" : {}, + "Camera" : {} + }, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : { + "dSYMs" : false + }, + /* SDK配置 */ + "sdkConfigs" : { + "maps" : { + "baidu" : { + "appkey_ios" : "nWnzss8CKEBKcBLoYUdVybkrKl4o2izT", + "appkey_android" : "nWnzss8CKEBKcBLoYUdVybkrKl4o2izT" + } + }, + "geolocation" : { + "baidu" : { + "__platform__" : [ "android" ], + "appkey_ios" : "nWnzss8CKEBKcBLoYUdVybkrKl4o2izT", + "appkey_android" : "nWnzss8CKEBKcBLoYUdVybkrKl4o2izT" + } + }, + "statics" : {} + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3", + "h5" : { + "sdkConfigs" : { + "maps" : {} + } + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..04417a3 --- /dev/null +++ b/pages.json @@ -0,0 +1,32 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/go", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/signIn", + "style": { + "navigationStyle": "custom" + } + } + + + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "区间测速", + "navigationBarBackgroundColor": "#F8F8F8", + "pageOrientation": "portrait", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {} +} \ No newline at end of file diff --git a/pages/go.vue b/pages/go.vue new file mode 100644 index 0000000..453fcff --- /dev/null +++ b/pages/go.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/pages/index.vue b/pages/index.vue new file mode 100644 index 0000000..b623f77 --- /dev/null +++ b/pages/index.vue @@ -0,0 +1,312 @@ + + + + + \ No newline at end of file diff --git a/pages/pages/camera.vue b/pages/pages/camera.vue new file mode 100644 index 0000000..bf17de9 --- /dev/null +++ b/pages/pages/camera.vue @@ -0,0 +1,196 @@ + + + + + \ No newline at end of file diff --git a/pages/pages/details.vue b/pages/pages/details.vue new file mode 100644 index 0000000..26f952a --- /dev/null +++ b/pages/pages/details.vue @@ -0,0 +1,461 @@ + + + \ No newline at end of file diff --git a/pages/pages/history.vue b/pages/pages/history.vue new file mode 100644 index 0000000..ab6bf9c --- /dev/null +++ b/pages/pages/history.vue @@ -0,0 +1,244 @@ + + + + + \ No newline at end of file diff --git a/pages/pages/passingTheCar.vue b/pages/pages/passingTheCar.vue new file mode 100644 index 0000000..baee16a --- /dev/null +++ b/pages/pages/passingTheCar.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/pages/pages/setUp.vue b/pages/pages/setUp.vue new file mode 100644 index 0000000..c0c5e04 --- /dev/null +++ b/pages/pages/setUp.vue @@ -0,0 +1,709 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/pages/pages/statistics.vue b/pages/pages/statistics.vue new file mode 100644 index 0000000..8594f8b --- /dev/null +++ b/pages/pages/statistics.vue @@ -0,0 +1,251 @@ + + + + + + + \ No newline at end of file diff --git a/pages/pages/warningInformation.vue b/pages/pages/warningInformation.vue new file mode 100644 index 0000000..bd787ac --- /dev/null +++ b/pages/pages/warningInformation.vue @@ -0,0 +1,284 @@ + + + + + \ No newline at end of file diff --git a/pages/signIn.vue b/pages/signIn.vue new file mode 100644 index 0000000..71e5d30 --- /dev/null +++ b/pages/signIn.vue @@ -0,0 +1,109 @@ + + + + + \ No newline at end of file diff --git a/static/back.png b/static/back.png new file mode 100644 index 0000000000000000000000000000000000000000..d65bc9f2d9dfe67a2239ade7487a71ee71bef39c GIT binary patch literal 896 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 N002ovPDHLkV1iu)l8^uZ literal 0 HcmV?d00001 diff --git a/static/camera/2.png b/static/camera/2.png new file mode 100644 index 0000000000000000000000000000000000000000..74d34791b6d4efe835dfe435339d4e19bb7732dc GIT binary patch literal 2293 zcmV;6U z%y;K;=FGW++ZDxYXlN)dD=X{1YuB#bi(>Dj8-MfS-y7rN;yix8-$Ul$b1y#k;^W_L zx4RAho~1iJKK@i=W8+Wwn?H(Xa~0+0k}@HbpPxUqtE+1%DxU{v_d`{R33c?-Zs@9o zuIh;sC+<0X`0yVl^-1};B_NB7i<8fsIkOb4>M2m%Ad8BMZs_dnTnT_BxTolrE>Qq5&*LteHf`GWii(PVB&z08B?aXA_3INV zD=Sx_BI^Kf5?9F<3BiU-uwg@CVc}NTHE2;W5o%3?OixeGh1O4S-yJQZImxffbm zTIx9EO^F!>iEf|Yk$W+D&`j;ZXg2|zQF8`I~_MYwCe8QcA-*xQ&Ur$j8=*sUPnhqCLZ1rbl>GD_!geR>7k7uKmPH$y1G_Qd0{bOkaOnD zc>t|tFG`xAR~q0QOGrrATu@N(o$T?7#^tK2s)q*$2iE}Vd_7z6eGgjwk`pIRe9s{( zEFuIF<6#j>_zHKTR!L}iHE1<&L~DGaaT;a5gEDdI_HTZrO(N=tFN=hTc*J+1oVa{pcwxPo6yaDUVKG87`2lC4Qp?5yl+^ z=w*1?J-mfmAqQJ0z?R*xWuX>KeD{RRmZ=Mpjfn?!x^r1`bMxBKvIeF#eMUycCfHn} z0doMoXQ8YyQxhbcoqyDrSo-nZ^LVmfSkb!7>O|{&8aj61PEyg;gV}tRjM-cjB)J-` zt*!Mifc!V5>(8X5q{a31^$lh#Y~}BBa&of!`}_B!jGI-;X-P{<%Q5Pb1$C-|MAz7g zF7lE};r)QPV6;OF+Rk7eRco0TlD1)JT4m;eDuQIozGG0V2D*5(c4svhtecmsd_RQ0 z&o|?)MSx-f2pSjF*3M-pu++@cv+K8jxkY0FI*mZbETapD2#_f36%l~9Qg_iHSX4k9Udd6VwK+xFv2EcM-L@Du5^L!v0g(a{O4mFyGa64tqYaXI zCO;_I2AC_b7XO;Z?x4&tNGPttA0G<;F_hLqsZT_y5!q;iBpcCqYE?pThtO~eMCuU$ z$+k>?!^eooPGVwWVM9a10THD}WbFW%ot?dCU|^t9!CpV2^>>JD^#(wq66Do?q@eHu ze5>1y`c@)9?EuMq=HFqbQlxzqTIDw0Is`zXiSI`fe?*~Me~50qnpc?_IXghIx_^MW zzZ`BmCfNO$U?1hJlbeN{F5w3e84z%J=ELPt9FTbn;FYrrBwV3+@Ly>;9Da2Jo3?Au{#N$G6Oy(?RM&3ZunErpjCdRASpa^ z>6WG;U>8U-2@DQ_LB2xweip6rbDnw;$c<34Rzdh(47Tfdl*o{=6C}#sfI7Uc0CE#R zj###;)s;Z*1IWb+0#OZ>*$k2*>E&i795*U(3JUHCSAqS}U}xG$wp8267Q2^tB#<>lo~>hA8o7;XZE z)!;`@<}r<0B<%!7WKO{KNfLE^R6=1qcF2?w4!toKh&Y5_189+IJCGw}9gx5w1*Frp zT`pN&+nH=+Og4`D<8n!He;kKA5JoibkULAn07xlI#Q%NJLT#G`AvFG=g%d^#B#W63 zqd9?HNr7E*&z-FX30n;W(%JlywE5+1$40ENjcv!WR;iXCa10R;dOg_E%Z_-Y^aKGm zPTHNa615~M)^O-`Jozarb|+CqE3Gfstt?BTq5|wp>x)LBX%M2NX?;|Por$KF4!|MG zF&0~&Xv)S8TT-8+0WxZ-&r}&F8Q<8c1J3Iq|8)iVuZM)pYR(Hw0^`k?e}xXoq&Y|? z-3KQ2yh2A0W30c_iOI*0j5D8%)J5Gl2FCDf#=(x;fvggrXjVyhuh#|1Tp~JxVJyA) z9?rouOfHaYEk0I`Vo;kxOu^&^8PYOi`EU@udDt*aA&_K+;Bhsz7|gd=d|XW_lE8Gs zd^E9OGmGc2J3}yqL59rcF?E0vveZ^1>HbUDpQ_g^@x3riLm*jzBj%3uVtJ4?R=_k2 zGWb;4JAE;8$edL$O@j;xbi~ZDhgQIp0y5Y-W9cAH*)XMo3<8anqhV#jv;<`6tjM-{ zA45KN9($$N^kKzx3LtbHk#ShDESQ#q426oWACEJ5XO6bxvt_`HDo76h%{CFUFddK~ zkIoEC2V__uFbdNFsW6xb!fc0%nGQ&mQCS2gf+5=-kQ&pQ0L)GYq>i7!3G<=@lEdNR zfVs~B$pMl?G+@$yu;ENLoE!sU$kw|R2dTV;k94%p_4NPhAYe>~(*61`c{Klf6rT>8 P00000NkvXXu0mjfLDV`W literal 0 HcmV?d00001 diff --git a/static/camera/22.png b/static/camera/22.png new file mode 100644 index 0000000000000000000000000000000000000000..eece4f2364e907056299bfba5bd76060371fb97d GIT binary patch literal 1998 zcmV;<2Qm1GP)`!b zcr7s`hTwyUgo{w2jWI$auK)jao#wpr_C9CrbM`*x-e>P*<+eTRtiAW|>~Za(tu1N{ zola*$Z-d{_d^x{=thV4oK;-_Y&H&v`{OUqK$tmA z_z_A^LY{}bS2k1f@s5IxGaz#yyK5qsk9H2?{Zgs#tmX_7nK@2??5v1wEp+aLyzINZ zl6LtN*j@;krbx@L`~XPD>k3_G6(^8L{Mm@%2?(ooUKqy18|!MHq@BJMaSjxui`Dyl zr0ZE{QUx!lK_ao2!qy-pZ%nuj&*vkdPx(%$#val*8+sf9?Ukd?vFBW*@ga>(t&R$$ zl*FeCAijj>vynhnp~eEz$|i>&az+8nbA6V~LXgrX5>j4uW+_#KLMB+$SbGll(VJUA%24BNL}VM{ z{Dfz-kcfA>5n_@iY1jJi7X>g2cL>8G zo0hcEv9Usv?nEaI@)i8!Nrso#z^LiVxx`bbTQ^84m0XQ9x!_hK&nFiqI;AiI5}9B- z^ex2X**O(P+0z9L4S}4AOub;p7(GP$BH!wz-UK8^_4gSJ(zCr!*|C)i`G!Dp(e68l z$(bEhs-3wz^YmHUWYXYRy#(VI4l_Bk`koVKId1}cZmE$MV4hT-0 zYz?wD4wYVmAg3aMoDOFLcXUkDPCf{d-ktXihPc|dtIwH59?=Ft($D%c#I!njB=S%1 zP+=g*i=p+fLDRYCDvT{hp(&73y;tM+L__i}0mw%*`69^0P+VkCz8yxmbE1~eFi7sq zxZaS_C18-9wiQIOL0Ub4TC%y zNicc(KLG>o! zf?N+pliO?(jBr?_4i;CK`h8D|&aOA4oB1b)Y}fz>lQiifNUpz_mRcvc4t*@HFikpq z>NvaJq$ZI=Hf#g~+Y00;-3Ssme1VKr+f&t!osFl?CJui(9WTS5I3VA&wPncA**Fcz z;}o&e@iIk>PK!>*w#?$>w1{prPi{1>(?rMa*ap(gvCH={AdO26V?nAr8onAAzdSE~ z#pT%1C9>RdtW>1O#N$TUKh@L?!tRwq=E9tef0KRm--% zq*?{rL?vIT$!&e~i3Z(hnu5rKO<}h62}mAXZ$oO|Xd1KuP8ml@48PG-U^cS#xek!B zt0er^X93BLMR7B}^1BAjbns4yE${aD;9Oc+h#>%n>?iFL~v{cs|t0 zso;Q*t&4>x2GG;->V@%m%s8pIUkgkQ`$~sGkWw;v1;cnc_?`t;8Kw%Pz#K1EG1y97 zC75cEsgl{tmxB~l-O@0fKnhHk>uTtx;&HT)*VWKJpmFoDW6@l8R|=*x$W(9MYZoZ- zbjIV5{fdeuo;$-V1yW%4+?8Ik4{|sJ%+er}uZqO=)FpGFU{(exrL(85Jq!WU3&>RI z?3s%=eZ%w$G6l3Ju7>pqGYH6ZuZYBQsrM`hFDvGeULThg^T-?T)~$S5u`igxL1v(C zg})yP>8k6qeZZ_0q+2nX6is$m=UC*F>!?1X1gCjT3TgCn1c~y zPWR>j^P32=V4R?Yxjuqa47e09S4NNukm8u>!>`E&$Nyj>b~Z|mBWfs_d*J702(R|p g9>Ns>UP|}He-FI+va`mjt^fc407*qoM6N<$f_8JjcK`qY literal 0 HcmV?d00001 diff --git a/static/camera/3.png b/static/camera/3.png new file mode 100644 index 0000000000000000000000000000000000000000..473d1fdd951ef006d77577613d4dd2e7a5c6f046 GIT binary patch literal 666 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 NpsvAx=!q@c{sVJ=r)>ZL literal 0 HcmV?d00001 diff --git a/static/camera/4.png b/static/camera/4.png new file mode 100644 index 0000000000000000000000000000000000000000..f13f542360a6215fb1c5f07f570b9162baed077a GIT binary patch literal 666 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBP!3HE}8YiVNFfb*0x;TbZ#J#;^>&Fx*a`dC* zBcl@5X%5fXZg6;SDC6Gt&O!621h@5-riF$ZH(x$<z`+AJGt3q{k@~U>c2Jmk3Ifaw#d1|XxqgMo3!Xk^M0e;a}(~}{Caqo^8Y#C zM64yhe0;gU=c~J)q4*1rR}Rdwo(h*{ERDWc{r0ZM^0@Oe4t~hXOJ2ZS%`7XiWtHp& zhx1$;+}YyZ>P}a(~yI z``dhYXZqG{@u^#Hzf~zO&66qFeAA~WT>Zj7Gu2XtsH9KM4!_%i*ca@d*|liG0WsdW zU)GzwUbXnue8mghx(iRe&R8JMyml3n)tdBF^97CbL?do*fAHpF;&iKM_lWaX?=M!a zbdjH|fBTwXtimOS1&w_w0+~LWMDOm`*>rvTcaP;W%g$U+Rtb80(f_=DWMTFGZ#VYy zyLqz4ewUhEBW_iGB*Vn()8;oR+EOn(=DRcVmgr_TtX(X2ZNG0L+b!V-s}6sjyt;AP z$~_7f=FN}c-Qx32>KTlqDI2{rv zka6CB9b440PfZThbw#EZjHZgS+yWXE&K702Sd?4uZmq2LGj(}AxWr_~H7P zdmk29$h>38(cFG2*jB>T?vTSl&7#O@cTeg!ooC+qCw#VlAiMnUyN+UKfN74w)78&q Iol`;+03(bvQ2+n{ literal 0 HcmV?d00001 diff --git a/static/camera/44.png b/static/camera/44.png new file mode 100644 index 0000000000000000000000000000000000000000..3b855d23a2258e316232c1250393aee3425caf84 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBP!3HE}8YiVNFfa*wx;TbZ#J#<9(3jazpf&Lh z<8}`Yu0?`fiv+opoF2KccPk%M%n(0Yy?Nu@AN@yi?^XOgD&ZcXSw1)J^d_6@3*%p( zPhRexVftnx-uH|P1v}z%dA^*x=kT6q*HylZ1?O3BEG~}|{5tvJD|WF3jeMLN+}me-a&>sl>nz*A zXZWN@r6L}K8_cA5?3%^ zP+V3cc%kxe0Q&-GpPxz#KDRC8a{w7Q`@-V8ulC%mPwg#R{dwBL_FY#wOX_}eA(>|& zTe5Qfgq}!~yR5U;ax%YNyWs!1i>sIOEol74BDFN)qQiXdf>$>xT?=0QV0_xYaQmip zY5m`pnb)oADeIG)f2P`LfvveE>lUA9tW{3uznTiket)rZpTtt}E#J8%{CmyT=S92E zIkTGOR`KLuhtnx>3>oKr{TOv8S2Du&HGI4CMC5|eOmPNE6|G~tHT&L=mEQ60_k?cj zxo&7T^LvX!bzTuy#>_L^Us~q94olbczZX5ld+xUvJM&7XeVV5H`O^KJqJhk}Blu1N PQwf8otDnm{r-UW|q{ao} literal 0 HcmV?d00001 diff --git a/static/equipmentno.png b/static/equipmentno.png new file mode 100644 index 0000000000000000000000000000000000000000..a67298fba32487bc6b41aacb2b171fb966b509af GIT binary patch literal 2851 zcmV+;3*7XHP)GB9Am3}FeY;~Pg95C&0D7zTKJziahNzx%qos{2-*?%~~&oZS1~?XFW* zU)Of(JJlm=bX3O2$JbHTHk5ue_qm?FuPx;_K2c=yR>ePkP|52H=>9833yIHB~B}_8HQR%t~0#(7$x~V%I9( zt#@m)tCIuZDxNN8N9hL5vT1(Te`N7tT7_CfQXrB7pvvD=h1gB{G4m>nWAGIvvp^uc z5GT2*sU!hF75^cb`kHjxR2er;_bJ(XP(ZvH+ir9KRQaRI8+Igc>-Z9 zWRLmTu^|cos{Hkpsc%R(?qG$b$kIznbgo*%Yl9{}FaWCj zPbw4NlG5)_Ct*CeT_F5(kU|dxfGU4;8Q)L(fk85{8sGc2@_wg4_(#(+GzLJGzqO3+ zDP@5*orSUBUV-pzlS*g=fUEqyn;3i_-*ZnB5NZS9x*hub>Hg&RKTEU(#)MkkQ7r)6 zfcxEP+~@lmFk`|kbq3~O0NhmbplLYU@l|^N@63*F2%Vw^0pJ!{2Pk2Sc|NXcW>#BD znc@!G)zLLDRs1_M7U{COHQL~M)(JO-IPyXP__`AOVuOs-z2!jN@XZL7US=0C?vUPC zH)9R1e@p<}@4L?nfb;F}M5Y$}M~4>}c})MCEoG0ljf!;%N*8vTD>ox~bm%Nk*< z>fTBKoLBQOC6L;&_F>sLUs|-F`(=a5&&mu4=N41|gXM|R|23@G(A#j}U0dZv^#QHiN7n0CnRPYHn1)>aCD+f3O%#6pB?W-5(cjR9CF zd$S_sJtT>n%Qkfi0dTXP?iL|hP3dl9Z-XYEf#v!XHpw$lx} zM=%_k#96xV6UG3%EPJPhW-!8a^98_@{pm~rz&-tk>O#v6^ebeqjGmIJ1wcpnX@rUm zO@fX7IsL7m2mrjCmX0>)hv!w4A{79bJV^?D(MqN`>?Q%=NK=O>H%v~M6l{LK zCIE1aP{_Qj0bsmf!Nx4D zNSI}?z{>aQRRG+rYv&jPz~DbSBLwFGu%3Ema5HK40C3&U z5!v67jro$p30Jk|$flvpl$bGv2s0aII6eTFo8y$T7AWw)qZ`TqfTxci-dgZ}UgiNl z1K<)}7s@?iSLzo508kM>m*O3@mOBK%(hL9`VQo+f*C0Kn(dCj#C3ySSO%jf9&k_KDivt0w4Y^oG*KHYqH)Q|VHVQABF9JYYQ&1`%0DSTj zUC=am8dlwJd0C zOI`;6d_bv*S4A0T@MRG839jYeOBpOf1LK%25g5+&+SkQlpFx=Ptz{(u93`uR5@4HT zoarai&`^QJ_PDDk0;d6nAUP_SEmT-=?C5>TeR^q^Im1jtnT}e^yKMr%0*r-N7lefv z3o>iz0nk<#gbM;!L>B~C1TG0{>2*PE4Z>AyIO~eAWXa{r)*FP|nub=f;j96$X31sc z>rF%Hi#e^zS}vEtuEZC!A@eiq3Xr|tLaYr}gpUo^LS2}%ZdAtEjPH`L zIX`Bcp`J6Y4RmB~K;sWe0HbU}OijvRV!~LZ;{efG!AC(Nbn*oAL+CYV3nj zs|r%Yh9h+JHlxxPu`#S!a{u3yr@(3j*0hu&HXPjqClx*+r8P8lL6>1jSqTE)-YHbf zyuWBne_OKTCec!?iCF|>FcmEmh*bbW|Bd2&gImw|-~)zAC2htG);Cmori8wY7H4$s- zhOEfB1mod`=%Ns`hg%}GOeW_#0IcZggrhPI?4l61ieoOd6w=da#ufn@RZ;P&3+_wb zB6_|!K*O~H3%}5}WeX-o7sX;KTpXh00I&$s3t_{x1&#$vt};lEnMvv})etsZTL7eH z$yJA`x>k@nP#Y==l$0(C{vs$UsiZnk+W~-=Fy&DNA#Au*72r!ZB}*>sr~(H<$|)&n zGYE&qd-*CY*6+AK7=))Bs1eCP*kK*HR*?F*nlH;1+o5fDN04)&q~M22CH0Q0aUc+~ zn)<*d2K}9-`%3ZGSPDL-yQF`S`ut0S=BwU;O_?>hC#;Sv!z2fR)=_68JzF^^O z%gQs@p?wa7QGHq*TUqvy;X-D>1`OQG?1aJQM){8L>O!9G?2}4g;xzTih-LZa|AQS{ znWe0*$m-zMs=};pzx6g;e3=ev+Qvs0`|`Xx{2uq{V%HThFb)sz_QN0l@a|k!L@e3x z`1*1X(j8x)1A*z{@C6Q2K}i1sha3p09d`bP-n}bqUSZM)!k+p&CVjAb)#}fY{Y!lM zx})K1tZKeDCXZ>*G_>j=&=hs}A~%04DZOG~0CH2*;j0WA01*WM2LfXOL3h5xHyUKK zQ@5~f`9R3~VM1~p4S?LZFskpv*V%^DzOIQ5fNKrI7dp2IK&~|mUuo_EB1sF#+jNdR z=!l%%VEImhz-O@VGB(iJqI^15UtgA)C|B$K%%l0^ZJIDeSe-gF)(~ zKjm680CGTNffBR|;u4xr$p6k z*#ll%nnlF$9a-fxi<)6?m{3*1j(VS6sqp@Cz6TLk7((_8*kk|z002ovPDHLkV1k{J BP3Zst literal 0 HcmV?d00001 diff --git a/static/equipmenton.png b/static/equipmenton.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3ecb4fcca164c3237a8c3b080a98e2a8e515cd GIT binary patch literal 7348 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 aj=uusfK)ZlYndAW0000& zeT-Dq6+icV&OByj=VNQA7NlKRLxTm1 zngIQN|1w2UUZwB}{?=BIo_N9%THLV%vdfm0rQv!0wz`3VKhXHH!?+@Vv1Eym+`03Z zuIt~ib7=k^+_eh?T>4f+KXnR{znV5O%GD?O{61QFV|5BS-$tzUs;5|S5C9v?Wa zt-erL?Zo#;Y*hlpqtS6jI{g`v`kVw2+`AWqYp=By;Ph!oUUU&HU4eu`jj=@HpR@+9 z3Xl|pEt;+`cj`R&=9?f~cb%n~cJd^oCQP8FWEtkAh%B$5HW&e{cm-s6z6s0QAK|-? zucNaO#7~`Y!wuE~eEB7$CQhU#MCUq);`C@P*F|kK3|O%MagKW%Gm#%w;xzEuYarfy zv$X)--H@6x#Stw|;+>eP{>YKhS#U)Hq(pJ9s%h_3;?T4Sy!gHMzZ~=ZElvX*jvw><^WeMdE^7hsjL<)GW<~ToAZ>cF$5rr;$oTP%q`MmrrF6rQ04a`Jh4tw+I_lD> zF&j66@4ox21;Ar*`kHGhcEJIx3ajdGXbGqVFhZedGM_h7-Y_kBDV+55)8K#L0c!y; zO-|39Td@oLET$ro)Iied1Puwb0NB}m7B|3^G^BPI>8Yo{|IkC0F!|kgAv1rz9YxvS zaU*;#rYOIpA)yjrpsw!Q1G(IBeEI?nsU61uSA(=}oh7`uZ5w27w~gD@6|MpUJIt4d6{Vvb*mhEV9QPL_ zsC-+t@Xjw>2%*=lo4$E0l?|+4Z#zLsz+bV7{DX=GNJ!EGU6yxKI-`e`D~isT0s0rV zuP(JOUJw@4<@0+=8I)WBSm$H0&ew_W{$2%cRn@FvPU+V}Z$$BC+hHzGBh5ym4lnvjVWrw;k(zi(U6TjL?rMu!N~_ zxl!1<6>@jq?MWCo;q6#ITrx@kY;MlP=H~mJcpXMst}QkQ(|da%X?`9(8rWR@9yV7$ zIA;amZO#Lj^Lu_XGnz;M3EJag%h*wS~X(%3apuz%?FAPjRW!L08MbW~jl#$lws2Ok8ftqm}M zQI-SGJOg>G7u0C%B3SJ?fhWERHF7xQhQrdg|KW#$n?C(aCa7X=P-t%l<*m1B8OkYh z1r*RDUcUNTj)EzGdHrs>@z0q0R#%5UPu0U6XfNsK`8yTEck07*qoM6N<$f|c?|TmS$7 literal 0 HcmV?d00001 diff --git a/static/f.png b/static/f.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fb33d3933aa3fd7bc4b266dd9f6ef1c3e691b4 GIT binary patch literal 10741 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 literal 0 HcmV?d00001 diff --git a/static/html/.history/index_20250825151752.html b/static/html/.history/index_20250825151752.html new file mode 100644 index 0000000..56e214c --- /dev/null +++ b/static/html/.history/index_20250825151752.html @@ -0,0 +1,40 @@ + + + + + + Document + + + + +
+
设备001
+ + + + + + Document + + + + +
+
设备001
+ + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/static/html/.history/index_20250825151913.html b/static/html/.history/index_20250825151913.html new file mode 100644 index 0000000..30ebf34 --- /dev/null +++ b/static/html/.history/index_20250825151913.html @@ -0,0 +1,69 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/static/html/.history/index_20250825152013.html b/static/html/.history/index_20250825152013.html new file mode 100644 index 0000000..30ebf34 --- /dev/null +++ b/static/html/.history/index_20250825152013.html @@ -0,0 +1,69 @@ + + + + + + Document + + + + +
+
设备001
+ + +
+ + + \ No newline at end of file diff --git a/static/html/dom-to-image.min.js b/static/html/dom-to-image.min.js new file mode 100644 index 0000000..bc73227 --- /dev/null +++ b/static/html/dom-to-image.min.js @@ -0,0 +1,2 @@ +/*! dom-to-image 10-06-2017 */ +!function(a){"use strict";function b(a,b){function c(a){return b.bgcolor&&(a.style.backgroundColor=b.bgcolor),b.width&&(a.style.width=b.width+"px"),b.height&&(a.style.height=b.height+"px"),b.style&&Object.keys(b.style).forEach(function(c){a.style[c]=b.style[c]}),a}return b=b||{},g(b),Promise.resolve(a).then(function(a){return i(a,b.filter,!0)}).then(j).then(k).then(c).then(function(c){return l(c,b.width||q.width(a),b.height||q.height(a))})}function c(a,b){return h(a,b||{}).then(function(b){return b.getContext("2d").getImageData(0,0,q.width(a),q.height(a)).data})}function d(a,b){return h(a,b||{}).then(function(a){return a.toDataURL()})}function e(a,b){return b=b||{},h(a,b).then(function(a){return a.toDataURL("image/jpeg",b.quality||1)})}function f(a,b){return h(a,b||{}).then(q.canvasToBlob)}function g(a){"undefined"==typeof a.imagePlaceholder?v.impl.options.imagePlaceholder=u.imagePlaceholder:v.impl.options.imagePlaceholder=a.imagePlaceholder,"undefined"==typeof a.cacheBust?v.impl.options.cacheBust=u.cacheBust:v.impl.options.cacheBust=a.cacheBust}function h(a,c){function d(a){var b=document.createElement("canvas");if(b.width=c.width||q.width(a),b.height=c.height||q.height(a),c.bgcolor){var d=b.getContext("2d");d.fillStyle=c.bgcolor,d.fillRect(0,0,b.width,b.height)}return b}return b(a,c).then(q.makeImage).then(q.delay(100)).then(function(b){var c=d(a);return c.getContext("2d").drawImage(b,0,0),c})}function i(a,b,c){function d(a){return a instanceof HTMLCanvasElement?q.makeImage(a.toDataURL()):a.cloneNode(!1)}function e(a,b,c){function d(a,b,c){var d=Promise.resolve();return b.forEach(function(b){d=d.then(function(){return i(b,c)}).then(function(b){b&&a.appendChild(b)})}),d}var e=a.childNodes;return 0===e.length?Promise.resolve(b):d(b,q.asArray(e),c).then(function(){return b})}function f(a,b){function c(){function c(a,b){function c(a,b){q.asArray(a).forEach(function(c){b.setProperty(c,a.getPropertyValue(c),a.getPropertyPriority(c))})}a.cssText?b.cssText=a.cssText:c(a,b)}c(window.getComputedStyle(a),b.style)}function d(){function c(c){function d(a,b,c){function d(a){var b=a.getPropertyValue("content");return a.cssText+" content: "+b+";"}function e(a){function b(b){return b+": "+a.getPropertyValue(b)+(a.getPropertyPriority(b)?" !important":"")}return q.asArray(a).map(b).join("; ")+";"}var f="."+a+":"+b,g=c.cssText?d(c):e(c);return document.createTextNode(f+"{"+g+"}")}var e=window.getComputedStyle(a,c),f=e.getPropertyValue("content");if(""!==f&&"none"!==f){var g=q.uid();b.className=b.className+" "+g;var h=document.createElement("style");h.appendChild(d(g,c,e)),b.appendChild(h)}}[":before",":after"].forEach(function(a){c(a)})}function e(){a instanceof HTMLTextAreaElement&&(b.innerHTML=a.value),a instanceof HTMLInputElement&&b.setAttribute("value",a.value)}function f(){b instanceof SVGElement&&(b.setAttribute("xmlns","http://www.w3.org/2000/svg"),b instanceof SVGRectElement&&["width","height"].forEach(function(a){var c=b.getAttribute(a);c&&b.style.setProperty(a,c)}))}return b instanceof Element?Promise.resolve().then(c).then(d).then(e).then(f).then(function(){return b}):b}return c||!b||b(a)?Promise.resolve(a).then(d).then(function(c){return e(a,c,b)}).then(function(b){return f(a,b)}):Promise.resolve()}function j(a){return s.resolveAll().then(function(b){var c=document.createElement("style");return a.appendChild(c),c.appendChild(document.createTextNode(b)),a})}function k(a){return t.inlineAll(a).then(function(){return a})}function l(a,b,c){return Promise.resolve(a).then(function(a){return a.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),(new XMLSerializer).serializeToString(a)}).then(q.escapeXhtml).then(function(a){return''+a+""}).then(function(a){return''+a+""}).then(function(a){return"data:image/svg+xml;charset=utf-8,"+a})}function m(){function a(){var a="application/font-woff",b="image/jpeg";return{woff:a,woff2:a,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:b,jpeg:b,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml"}}function b(a){var b=/\.([^\.\/]*?)$/g.exec(a);return b?b[1]:""}function c(c){var d=b(c).toLowerCase();return a()[d]||""}function d(a){return a.search(/^(data:)/)!==-1}function e(a){return new Promise(function(b){for(var c=window.atob(a.toDataURL().split(",")[1]),d=c.length,e=new Uint8Array(d),f=0;f + + + + + Document + + + + +
+
+
设备001
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/static/html/map.png b/static/html/map.png new file mode 100644 index 0000000000000000000000000000000000000000..37222a38882b04e3bb7cf4078c9dde31bf75c424 GIT binary patch literal 10975 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 literal 0 HcmV?d00001 diff --git a/static/k.png b/static/k.png new file mode 100644 index 0000000000000000000000000000000000000000..3b32c943bd769df82c32f0a4b4b5ceadae94b8d5 GIT binary patch literal 11498 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 literal 0 HcmV?d00001 diff --git a/static/map.png b/static/map.png new file mode 100644 index 0000000000000000000000000000000000000000..37222a38882b04e3bb7cf4078c9dde31bf75c424 GIT binary patch literal 10975 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 literal 0 HcmV?d00001 diff --git a/static/signIn/1.png b/static/signIn/1.png new file mode 100644 index 0000000000000000000000000000000000000000..09de4a7995779e896916cd8c28d5f0f0e741ea9f GIT binary patch literal 2049 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

5Jyeeo-QtxBT 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%0AJA8=Xmu8KLRA9xgs+y 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

-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ℨ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 Nle{2+i@JwA^ZY`Kt)QFRW3+R83jirbl* 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 literal 0 HcmV?d00001 diff --git a/static/tab/1.png b/static/tab/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7580e29749d741b8bdfb1e772888750223c35a GIT binary patch literal 1533 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 KMNUMnLSTZyNq}Gg literal 0 HcmV?d00001 diff --git a/static/tab/4.png b/static/tab/4.png new file mode 100644 index 0000000000000000000000000000000000000000..d7667f0a660612396e74b6a1494e45d4dedd49c2 GIT binary patch literal 2165 zcmbVO3s4kg9KRC~xf2rc0d?uN2x4-(dxr;iD+d7wL3nWD75GAz+XZ&G+g*1TIS`T% z5tT6?QG;L)v%+dn!%Fc1^pH_g$_5`JD&rGH0Zm7t)V||!qm9+n&g{3})`=j9LyctC=3li#2h^wx2Y(}VBtJ4KTYD^u1Vxg#7qf}!!rouHEXy}1~IG)VJQw(uK!oW%oXNw|- zqi9}U9+DS=uzVJ((&=<4rbg9jB|s>Jd`2YfN=EP>W-w5Kg{L`@W*NxANMx|Nq8FLqf^E+b+Or;A_OsZDKKNmAF7KL(577RJvh{v#2mIs1?b|C{= z7>#%WBZvfJp%M&w7}$)^G>L0Mb)g|MGDu~ZPODR5p))Wgp;76ST6KsjBTS>g)R`H> z_YJHi*Ady_`{aMTpUl&svm`CtbR2J~ozoruklt&$PIA{m@R}%-$o~YSj zIA{cpsj~%vg|mrK4Cq`uXi?wpx~`B&T$BlhD0B8(w>Iy}X?sOc+!!G*`PD~JD)TDo zS;Tcg+L^hX9j4l?;(D*Rpm8^$V~eN7t`8E&jJtj#FzDTjlRHwfKZ;&k5*yX^^I_iW zaBF(^LL|Q@An^VT_kj17y?6QGqi+6w_qpIvSRo9^=cjE0{!&BIy6t_!>7n0Z$Ho`}SquDJ|>M z9!%`rd7*mU-81e}zn0zepD^OSvTtm2Q;@vZ&)(j(qTjn><0Z)Z=vdc1#`ff9q(P#X zP-H@lyJOm?5WQDBqx;WklqjV9U20$0$-K55UhebS_V~({jOJ@w-)Y$JPS}nQ5WZ-` zsPq1BK1}t~Ol;kBO+NP6m_72~eF$@GY)g(TTKo&36|%JzC2f<5o5`kVnX~Uzc6x zF0OC-wPAXS)ca>f8ktiUU#X}m50v#DI62S!eS|_@r(W<78cYB2`{yCpT zzUzYGn%=MJESbA+QsLzuw*TsUQQr8mue7?LY}%f?JvUPPruVP5DHgP}0$^Dc?NeB# zDB4(2d|^t=ilmdXuDPy&Fyx vrM5*Z328^Zh^FM5cOQP7U+1YXzy4O_!P0D(y2@x5$B#imY?7fadU460hPW9P literal 0 HcmV?d00001 diff --git a/static/tab/5.png b/static/tab/5.png new file mode 100644 index 0000000000000000000000000000000000000000..57e4c99269a072c275b58e3b62efd2da04b919f7 GIT binary patch literal 2125 zcmbVN2~ZPP7>>#%DuSq0WOP{u1vS~+$7;d^Lpdah5K(GTm(7ywkYvN|VuC^|if6|v zQZB_~#A~ee=x9;!MnSEDtp|!1Dt2&0MT>}cUpO+gW9!tN*|+cb-uK`CE{mNM(a+P* zlf&Wki;C35fiEAtVh=Ykp3AGq1)tv5$V7(2>Er8odvMm24B>EG9+SH1>~w7mic@AD zrl*n#p51H(Xbxw5sNIU;sRRop69&?vgr8I#g&|U}gr`Zge64i?VI(8x(nS2+NjiLP zDz4DOp(<#+9R&ntg2f=a*<@i*yAtl;MZw&$jlfU`giTe#YKK5*x;7S?K+y!G;0d@m zpD%!9U?!Fd|6^I*v+6J7@Q`pEJ;})2P2kDrL#&HsM=|R z+3KXVFkOBE9z*Py6%p|G4x2iFdfbV#rqiYl;d&e)OoW-RunfQooLH-oVkyQ*{R_48 z_yYmJw_2@J#z%EAo1G#UHhc~+qst*5MKih#D}lrj43$pfMED$_W}w3wD>{KDFqWcq z6lLm;RBX4(kWj)CLc!BWi=MJEA%D9-XfT#g!XRoAE?>?S3UvY*%9o=8$rv#5`JGTL zr6*G|J_=Q!BH0H}kTZIW#Xbqv<7f&+n=xQ8X~ql$Vzn4x$mvFO0%f9TAQ)&T>d-=~ zMWZYXi&=0YN~45<%{-FSqkK%v*Cz`xu0V#Ra0PO)h?^{xE4a8=Lg0Ft80^Tp?`tSL z-4WUD`}+TRe=<#i(!xxi&EqIIM@pcPBm;t#(Nz)gL|WI(L_!@|fMU2KyOl8R2rHq7 zySB;C_CP1C%}4;!{|I*{jGO~1*r?>2MacO_w>we+|;C2A8I~+V9$aD5$X%Su0AHU=Ps?wcJ&$Ws`l;~ z(*N?hYcaozE>6vV$$1}p?m|-1bJbMJmUU?VfUwx2@9e!F+P5BQlX;~Lo0Y%Qv}M(N zNhajy^|l~$>f3q4WNApnAKqb>^1)$pkDH3^8_w?t-R3^?IN@J+>u%om7DQG3BE)sG zhuuqNjVr%Xs%!Thakq@ue~ypUe?x=o{k|i%oIvcenv2iGJV-6{eLFsXVR=ontzqn~ z%HETAU%tM*rN63brMbA?rR1dHZdvA)#Vg~M;it#7Kipd}xv78&$QdVM3(14No6LAp z)5w~lZ+|SCa%WW91((BtvfF#ER*CjKvNa1b-K8xnPD$Sd51LuM(Wix5Q+s*y z32D)9>cZcK=nvarD)JOYt@BNjIv$S?3n`Le?UZro{{uyj?FZtR<$2 z=Ne+xtJhhuiX#PMl7EsZYBiQS6Dv=h6*o8VhBt&IJSr}|R~L};uBqv2!1IT~)n^`L zSDDNAy$K#PsqTH=4N_A2>~+=aH~X3|5ka|uvqSG)OD48>8gFbH_`1IO`@M~=$C_-a zC5=DRE@NHZ_bHModPYl zdzKgSM8a#OvrqUfyd_>6uGEbQ$VpF|WlWUr_ZxkveDvct!)vY;4fJ{%A@cer z$v6I4nQemH>I>AGpnA07w`^1Y+AHtBc%EharS8S>nHeV%s^i?{euD)kTXzjvo|Qv* zJj+@>;wxswoT!QA15!q$92TxHC-uBJswLO854+7@Vjo_oTvzH=_cXQ8o$;DiQhoib ze_MN4-=XOSztFX-3fc~wpK|5ggJba_Jt7Vo7e~~*>osFhYEEsE>qW;8KPr5ZW>?tk G1%Cl4&K>Fi literal 0 HcmV?d00001 diff --git a/static/time.png b/static/time.png new file mode 100644 index 0000000000000000000000000000000000000000..3897e215078f15b7583f0b02be5780de1efc6887 GIT binary patch literal 675 zcmV;U0$lxxP)k^HK_yW0-}Sy~ljc$Kp#2a0@%^p+_nmjoIrqQ+^6w)U*LaC9(JrP5xQ+nl zl)_0f<|uy$0e(Q?69a2Jh^1Er+U%TP^89mUS2)?MV*!L2Njf;nBo8{5kWpYfPo^+m zousB7*CL>k->u^{Gp-#J>^S3yus)c=4Nam&Ad}}s#kh5xNga0XfbeX!Ot(qbeDDkP zf3KFE*du* zmq&1=I7K^=CetHW@dXdP+roxPLROmhl)1;>&81S5pR1MWNsse68J5oTtT<8W1lLO} zjpyWV;}UBoYY(aFB$FON(>cycqAPoH{qG3ee8lIQ+ZYWQi5|u5IxIm5lf!5%-=&Y; z0wQrBUEmUj$hTjBQ4;uz#gss~R-%H5-8TWP{Ps_LaF~2MXC6L*3#Jo&6Uf}>G1bHy z2deLZOblS`Ws%l8Z}d$dyTGS+zFZRiX}s`K>Ddk3r%IS%j+I2PCn?;Ws8ddGfMbEJ@ZJHdM2-Wz1C9l@!g~j-5;+d=4mcLr3cs%dv2Sq1zQrWg zJeJPKTo(`H(d3JLo3-`PHqMQ1O(6D14ca7Pd)TA%0gl^oo8L|q`&e997bXAz002ov JPDHLkV1kTGH3$Fz literal 0 HcmV?d00001 diff --git a/static/tjbj.png b/static/tjbj.png new file mode 100644 index 0000000000000000000000000000000000000000..fe31a31ce4eedad462be11f004a7f77fca0b588b GIT binary patch literal 336807 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�%tx})@xen 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 z zu5Z7`QU4Em=^7kdq}ned2w216pLrjGu38$Y2Ael4c2~H63;jbkT;ZSd#brF({7N4# zlY;vw=K^{gCl--kAN?cPDNqfYZ|BfYL5elNZEk+f#b;OQvI>uQ3|D^v)VG3G#%B}i z-FPH!IH&sZ9bNvzJyl8V@9p=u7T)c&ih(rS#P7|EizE{iK>ln8b*19=eVB#6HS|Rrn0N{?*iUi4OoYqBSbtrkHIq=s7BFS*OIHc)EID zi__b;IeOLw2q}A5Dn6*APvZUYbz?AeqOA-oKX7SQVt)I6RpPA+-G&PlvK9>DPJBw) zqbr)T5T3C-XMKk)k1JP&W2L(gf5Bwn*WJg)itkfCOR4J4=z_>)Swn_)pM1=@f3xVGSyrS%FyzX3cn{jgXete4%>wEU&+|2XHeH0~$2PTd(pARRisL#weOa z8jK(XmTBTuQQQ5qZy52B<@!8ZzT8405f$(Joj3lDhNqZd!S(|)S~1V>@Wy>%RQ_>| zJYjY)0-JnjsCACr`a&LX@&Syl_nQ^bmminCsEj4GOFqFT8e-(!sPBjUSa4)hYMp65 zPr*lMbe3wBR^qmxQ~z>TAXu+O{?WVYm6WcZDtZ9&>Ah$Ku1Jod^5~C{!=amVAJ0aBIOBl7*gk0rGv^I_4DO z600VsmALL~?%60+7(B5Db|P3=gPzMcwVvtj#q1*&-o09?{38`iH9yosW7Qy1D-GH0t_Xo>@_xealw1G}8BDfEden8JIXUBB z)cL=?DMm-PD?(~fdUT=wIXM#@lU#LXow{TZk;TjxM!6!ruNJ;&*d;SDzSX%$i*{V| z&08V75JU7%eCTCj%>~ar+x1ZbOEuF}fB*~C8?+}9#oxX+SqG?EyS760-jo-ga(JfI zDHgw%D+&{_={lBWd^F3zpqFk2E~Y0N+Df)>nb5?FB5v|eR?jm@FE|ak+Fcaqjlt^m zbYvlYoP_!}Z3d+j2^8$Qna1XfCu?N48Z2!gK==_)UR(?HA%_c8*gLUDx+Tjs<3Op( zgEqow^)*yEl2B&gQvafjj1asH&&CLEbXVP)?;H{LJgJ3#QI7nmw-E<^7M2&YdcID4 zA&-Au|F37PQW)n{ckjfHfQrMc_=+ImkzYTG*q1sLCN4m~XJ=p5cS45d+m=TDxPzyk z=ZD0wP5iPdi_7OcrfWNl&zD>J`D+%pKGJKHf+2UW!;y%(eJ@m7yngz2$sq3Hx*aW8 ze1sv{54jndNNeOJO`huOT^4I_kMoNTlRpH#{S${F0KI(jSzfeZrv5)805pE7UaUcb z3MO^RM0`;Kad)t8Gikhr=o18;71FDZc2n-##R~=8o3~-FlBL|wd2h$;f@9>?Vy+%T zag$~&>px*<9tXoDy`&nJ+~7DauENcFO#!WnJs`eNrIl*PIl&FBR!C=9UU((jyjCX5 zFDZ8gJ|L(oOunUPA2mz0kGhLo>%#vRAle5E!^i$4z6htRU=<$s81AP_G0xFw`}(_Y z%C$(jGf#zTKj554{&CRKN>Kml%8BkJeLEfe)`O{tS?tI~@+ElHm1VerS6Tcrz1Wz5{xO%xbD9*r3_5N}44TDjo5kx3 z<$d<({e)ODGr`QF_D6SlCrraLEo=x`mB$lenosf$q7`#@htJ>p5LDD0o-B<;k?#L6 zPK;iGHHU_ptFJL=cJa~yr}RtyGNR3u71=#jtO*p7fRV@D; zO>lk`*sfW}nGkQXQk&(u-)*P5dnfo81#Q2z=KXa8=Ia(_y!y=xK8Bn%rZBG&xtU;E zC!%L&gd6y$T+|o2R62jAh?Vgd1tYE*Id z@%F(6+e9E)cai%1_bq%~F|j_H=+t9Cb(OLn*@v4{MdssXz%Ox;)aaizo{W)RWn$lj z0wFy;FFAf&TY~5d%9CeWxC|PL;5tBeSfJk0ORj7ZpzSO!Wr=w-YM8b{s# zDflEbQ4`0s27n4AsyPHd?ARQ*8xpn4U`77A@Q!u)?p(me#oXd44rH`A;6A`^su0#DX>+T{|kP_$1Bzg{% zp?`{~8i1KDX#8eQ!DtJ^zxD2ATsGC|s7SFZ*YypxGUWcj#EEgW8w#A~X`HEONT_E= zm7tscRGqfnc-M#r=ySfoc>U3?C&rCWkMZfdc;lu=z*xfifCm=E=)Uaf?mLNdzAWH+ zlDheaqx)$-0^JVZJSz%E=))_w)1$(+)71yh0_Nnk6=eA(`fmB_3}InsCRaxY)YgqG zlOEB=RnWK)XXoc~C$qUXAwa9$MXVcYwjlpPgTE(NCANH0QF>@sjsbap48K{#fn8wj zx$d>yeuw+f5$fx5owuA#dHrG}F35)lO?6{Qi7k`NhS7}}vh zK$;<>Q@RJ~kXAstL%N0>c<=xFKF@dZop?rFFc$~+p0(C*ukCnJ1;0QDX%`-Z?{_&( zhVHg!+O@kcWpuR5eQ&+K`{h}n`$S5|;eM>io0hiqJb2BJy_)>#!)H@N57uw%`Es|H zfA|-kyOukf%~R#vPq!OhnpBbdZ_g;4imfG%FstS*$&DZ#L084y$50z4m-y389lA2b zz?P(kolTvzRkQIfB^IZ1!SPpy4*9QZNM=_~c{NvMMn40+<17es`1E3DNQtB~P>EE! zTQ=tbzkdw68Gm&uP6Nq|(C%s8M^Ljr`qkfOxT=SKsSvqHpj|O7xA*~#ogZ+(E5SBf zS&s(uG}E9MY3beahzFI;ZUG!z)DOQhxC0(^Uf<1`}~vX^~F=WTyRfl z`?U1(Q%t6}NBGc#hapKflab@f(uem@j*AyQ!T<6o4ghKbXKJ-Ns^hFZ6I|JPgx)YmkU~ul$$P8CE0rtyOUaB`(A8PeKht4Zi;X|(s4MXA^$Dd zL^(sg-G`a{F6OAg{i=jR22=M>c4QTT52r(&16bEOL&J zy7VWq5U%vQ-z0mGpUN@;K+Kkn5`B}=ZUfk@s`@(9Bbbsb9~?FxU(-7CCA6x~xuusn zfB8G5s%C*u=^$Ho(;VZhHd1fwNlC)WQ5+Ydu;HMIkg9kx$_|cbbdtD9nX%WQZfd~t zsikDKk4=kQC*v^u_805nua`Y0nZ&(rfqTxJ=`ujZunPoM#}^U*9^_=MwtF6xZ^JV&>V;(vED& zI2ktff(DL!gjFrw_qwQ~p&$^;GoPG5h)IA6upJp+9Z4ZJ%C3x1@}X`r#LLas%-6o8 zRJ&dn%h;V(8_Lxkd{MQJ(kdb9vRnlNq>& zao7FYg!S+sre&g7*UvBM&T>Eh>B{{`)t{6`u$p`>8&)(|7>J9Y>sC$Doc1xT2oY)+ z_|^>iUlsuMEJAD*+8s&q3Cgv!yPJHG>?MCnXUthu*|$C=y~gDBmYw>vP4hP zq4}O$z@pBw#zZ!H@F14Y<=_ul2+CAMCl48}yl{$*c2B-J?AAYhicc!G_bE!U^{AUb z?ZecPAxqp?W<4liS`NJ31q(6Ei=gRVqgJWo6V6Z$5>gp6WPW*{r)!%TE})R{YP2x! zD*a>n1s<9R!v&>N$NQxQB^J7ZG2wzM>Kc6x;?rhN+)lv)C-<1EWu>P8(4DV^r-qeThK|n9r9&9eS8IG*OMD%K82mj z*WWe+_xbht%4&;skM0)Mc$xt@x(rEo6EOgGs2x)0r! zir!>A@e2L;d);sPouX4Ua$1@@pfyW$7#sNdF#b@^SrC)uZFz-@(||r`Y>siBbE-L?JKpg98oNpL$iWIbW~IK z@87wdi_s`6c<#@eXmRA%Ern{ab#E~Las9LT8Jo{RH)t&aTc_wKZWf8XlL2)cP&lcx zJC%I5kf8)u%tH+J(Tp(hPsQ@FlsV|oxP9x3gF3um6^K8)+n<16$`bAo6b)jc39*IJ zFt%9c6g?LOO0Y1{lL{ub_k|s*D-Et*2XEr;2fMd6!iQB8Bze=dsBz@_W|S=MM@{FJ zkZuQWL=TBi%$O2ykou3d^yfk<3StZgRdQZpL5`6XaBMj!Q@X`F9r;%O?UQVrp7lS(1WTG;z{A{sLXdA@%8h)wU6t1eIYrRU>BK%5` zBpLIdpfG%^uRhuH01oD@V&lkK`ulI?X7{&5-S>@5_t-A1JSaKRR7hP?Qzi-ByTQ|!cb`@0PehfX9 zR=S(f!Ia2Kt6JI}W3|(5!NPCFUkLu{$T(~CiCdCYxhmVVi*V1_+Tg^d7bzDk@_gx4 zMCkk^sHJF%-BqKfU1=tHWthFzlCvP0Iji%U0)&0c#O2TKz@_`N+Y%ln+8@h-wWM&C zz@NX{v*R!U!zcww&rpPmuH!G9%lWgb-Z(iR>6K41qCO8?9CD-rW!HQ2JhiJFt=Skp zZdl_dmKGPW^cOp?B(Lsrox?y%WlVNWG6c$AxW!^T={(nw_OS>3Zys8AKbjER0jrcr zP%z9eytBmpE{2hxTJ<$9kCTcxnh;Z*A|n+c-M>h2823m$q)eSW2F81`5rx65Q?@oF z&F!o^@w=X(9P2V82CN(uv0i=*p7Mf$+zUEV8sxbgQ5<3Q96uxo_BgxGMR5ix;Ri%E zV@2G`?)NEyZ`nZaip1)x9C0xYl?G#jn|Pir zmhxs7QAdBA(gIJQeV$m^gU^qf>+VU^?9R+UI#{asUqr4AuyPDpB$VsOjI$kh{rp)? zm<8A$A!__9wv8cuOlA{LxKa51`NUJEk(8v<bNztYicvol@~VQth5k2Y%(1vugD;V@a=AY4=-iYetQkfe6=gi{Gtf zueQxy%T&5A0ylg?TZ-c^8Z6z4k0XoTX!SH`UPK(ysLe)-aZQ=QwSS&fn$XSC8B?S^ zp$JBvm*ocY1r@FSP@kTPY_AnyLknNO(+VWb`*K5BaC$AoG{GtFT7toiaWQDwo$NNP1-5Vu%qzE5U6~BdUw~_JFIAI-nlZ3?`5 zZ$`6~cJJGNX32kTWbII8Ipj(U#kA9rRh7`G)c2U$hj?iy+Vt} zoCAdqq(w_9?j-_xyd(FcpETH!PHBrfgS@-Ht~6=nz8Vx{Tj;Rc8^dozVUh+0l!1%8 zsyFM8ZzfXYe%q&JZd>^@^TdO!aWxO)p>Rh@py0#c>S`G0S33uKKOsw!2 z`T~6hE8NcDeTja2qg<@@M#4F$ul_l;##zfkH3IQc@0*%m@@3n}RtAK02&e5D8d-Q~ zfb()AQpdR7^^KR{C~##AYhMnYcy}&y1x5IMXMeH9oISLje1GGLnbBH#AhHzFR$3_nn*f{jv5qewvv4{bSd)>w*RB?!hAE z-k~fxDQAnN-y3TX}aw6#nNi7Ba43Uo*h^w%Io*QLz&dRGQ&gp z*qnvq@c{Dc&F*h&>%AO2)M-DENx`tY`hle+lM4qjAo9vQj>khu_p~Wm}ab@MnK->{&IkHFC0j|B!gd#lLB@7{}F!cGwYM2d#Kd_z1{%7h@}xfET|H%aHNXlANzf;4lIXtQMT}pB zA+OJZ4b^62kYDMSm?#9)r@Alb^P=|^;w|;Bl-Bzg&=fza$)(@i=(WAWX%B<%KK7-= z7*NWX57-lYPph^LoTt;Oi@&uYy?Tu|JW0DoMU-*ud?t};yPO`mOqx?2q0n#i&^p95 zK!SQefrptV!hY7fgVMl)9BUsvL(v-@c7CBcJ(iG9ylir2WuayOa;Q|Y_Da)8`E{vwKqF#s`iSzoX0dsN zYr@>?`TL&$$}T>H zFS;rpwm9a=r*zpGVDd^Q=L=l~@2VeO@ykk80ULYOWtmeh_cC~yZ3zE32;_&^NPF;E zqeMVCLeXI^o$_5?)Ku^n3NSNVlb>=UF%&{R?$uvNPAPVh>jh~=`fK0!OZJ2okq zIaS-F6Ztqy%!Iio^h*IVfyes2U!Z|bXb4zxDFKz=1!hy2y?iKN6_17hr&+3r;Y|?; zclN^c7o3n}_D7EBM`nhg6-x^mS~WB0--7M3XN6^I_|np4UDSc->8$u4>euZ78GahY zc!CX{95G51p>ZW=-v)8p0!anRx`>CUI1}AX)xsp()K(v45R08O5Oh5ryHO{o;_Od* zA5TUBOTw=>jP`?)i!>5mp}U$ucIiH1@S8gSNgR~MxYw5pQ2ae-HsmQvKt^&3)nsuM`no%W zf2^S6;8{1PNo0RUTT*6hL)t}j^H7lxy!fGQDw9tsF{N)-2&-kJs%(i6Z7lcO-WXh! zIQ|r(>_%^FACBDg6YAH;W}NVmd2m!xGNbHIM#JzjNlfjiJ?~{;h3u|LPn>>yzWQSR zy((q@{pp|nDQmM@{m?H-*Xp6fnZb$1NicqoIl5+weZ?wQfj>)ZDN_69q_lgFZVV;; zIfSlX{=nSl`jXknoU{n@p~!z_Ve;l%)_+jiUC z_7`28?4@iMTrFn1P?hU9%Gq?|w;9Jp?oU&|p3}#AxLgLxcI8BjCEeMBw6pk~cbT4C z8Pm0k2hs@W)jJu3;-cfp!cPMiPM^k`h7T%BPRLmVst*PQboa?h&hkDMoL`W>L>Z3| z*Mtt=KOH*rpRQ}%z1Wiz3EUR4y1vopf_%3AqWOEOZM#)nos716s`NxCdpGDrY(;;} zhdTZy(9cW0{w{i~xF0WDiwxR%{G@%v7CMXWOLiTAZj|&GZ*}vjWYjsS zg56^53+`Rm%>fDQ+P&dCdeX>OmyyM2X=ZMS%2C=gGW+!-F@m(D|2W#iGIQ%~mZ>i( znMJkwXTM^!HkwNpIf+a+jRYHd6-_y_!V16qbazO-e>;74`N6^FhUdzcX z@!i4I2e)`X^M*OjTv-Hn5nlNDx0s4S^Sw_c+p;~l%jytDz zo)lKxe&6_d50q#C~q)!XllK*w=ja9xw+&ALv1bVdX|Ng&&tt(43-&AVy(FMAUiX`TJ^RWMfKqTWqu zdC%E#G~-aL3aQ?|w|}}woQ3*J)3C?#dJzcjZcXa|L%IBVWGs$>ee zLW0MktuvvuuS-pkeA~_M7B}Mr>JXI?sM|^?mvs!+7yH|vL-1Bsn3=_qzm`ODuAk@# z2lrTdN+Q!^-C%BXmKV+&T1+=Fu*6FsscQ<32aTwQ$nU1Cw1)jK4;dy6M7tr?u-HTn zeEZQ4%sh(-!<&Q?ZNmeo9GVxzZ3+rrg$ykDXf(G$gt2xZeVSu*aYyPFbl<)4en|4{ z@ve1`83m0&B3(FB5lW0ncQo+6-$yEgYv;^-G!(+b@GXod#2;6=x4)`D=u(m5fl#G4 znRU@}bMI$;ioQ6gS&)^eegX7GaWnpj*D!d507vP7DbV3z+#QE;WUD+r$Lp0V&aA@l zj@UeQp5XL@XT8#vZ{gl^N-yGT_&HS~afXQnaeF0sEdB4$r9JrjZjff9dpW`6%S&)26GbWTw#91B)YiJ@KOxcygo?uHhM~IxVRjMjnl+r z@=dYIY&LEg)-3*|3_g!L^_*eCA%s?P=T*u@tys{uY0nCDw%&hl5P#>2uISa3uFw0$ z$t!O8``OqCisB>}TPg4tK#!rGp(g@JmS&NXFzn}8orweevVEit;Lwu%+p`;=YlagTMnDTRydEzt%r ze(py*tbR-oel#${q*ZMa>$y07SKO%ewm_JlT7TDY3s1h`3C4o%k8k+JKD|=sK`CZ& zrPV-TR`%1K2!0eI0(H*BMGvOfl;2fNqRQ>=lAEz(ZxvJ87&tT#C=NDi4|oX9y-aB> zL>odHRL$`ESu-WI6*ua7sH?BLr)s9cPgdx2t_{Xg#yhGB2pORY%G5~q%JDYc6^$#c z<8NCRAO5~D)C*B65xplp>E<~s!M!o?*AERWUe(!s$X@TfT=h?f{omP|eg7?->81JR#5SP)rX*V;mkw{$+F2elD5y z$@jftvR4D+Kz>`12c#}xSIS|pr=5jfsV~MOIS@VLg&;oAc7E4vKY1OPd^qg=U0!Nx zz0$%g7T;sgD~?8{15ujdTl(qEs z^S{mcWujYYqT7d?=iX<1jLHo(a$~`_xtEZ0{z|W`T_;xOdw80B+9Y#w|BE&+~U~j*r(@&csg$@Iv4XMYS|7CF=ko0Nt5ikSZ*Of29y(|Rb^ZBScp)R|Svq)Is zykMuhH;5C3)S!dU7zaIUj_h#pJ1z%vn5bJ!^Ck-@5&iWb)T$*C{Vs&XrZ6x4uniXn zxzj0-T0_6jdO=lfOM~N6>=ZH<3SVVk=8wbOr63uS+Q9z6*l7kdLU4+W?l*Z*Bu>Hw z=*{`NJb6XDp5Pt#-L1gO$evQHu2JHYYbJ7yHLAyhcRsN{m1NJt+qCDyw>UEwtGJud zjFyL2+iI?I2BZt}XRU<}zhQTo<;T*7eXHC^!oM~RoO#sgIFG!%<06ITVcGX_q&<#%6)OFmCYI{bPi@Vm!VqE#$pH#JXZDGa*nau!Qz_2 zjvPl#NNy|%neYHc_`o`X=+ubt_|*FzJn%uYB_gl#g7(Q0M~Orc^D!HnPy#}7CwbLv zK<4G`&sSTjC!L95rrb*LU(_wka50N6mHZK6RW#(UxuPaEBY>rLes{O`*TLUkf+Zel zV*zix32d%ea18g^#QMvi@L%ey7m0&3e?PB2`*xyKVVm2xjtPR%Oc%14UO3~t7HQ|~ zM^UmEX6fI)y(q&9)2y+ha0Hw1f@DnjIj`n_Du%rFhpOhsin#q^M?kYhLso$}Z@L*2 zXo^n#&erhCJ9*2Yy*T8`R$4E;fX1cydp8CHTB(QMjS}>4xe?ppqAF4EC|v zZi2Uvhz>D}ec}b-H^Pfjm2PkC(6H3~HBv?wQI`$u37_i99&@KI5W}B#x^ZMqr$7cV zUzsXl9k-AMMFkAm;KxmQS6Jh6(#A)lIeK=9i^{A*M2|PAVN6TY8PLa$d@lJVoX>{M z#~lUoDbZs42_t^#9*suk6Y*^4dAzG}P_aj%y&T=3iuGv}CBMelb>Pd;7lb7H9vnLC zDJNb@L_`y>eE9BnT!V-RpWomPwU2#nMHs-t+iO{2GQjFNuZxN;{{CkmZBybTsoC91vPB>F_H(B&GsHyfE?Oi?xcGk7+&T+scAK%?wx5#(LB zLnk}u;G8kjH%O6R$E{GP8gJaYpNCP2F%r0gA>W}`b{R{Py3YfoMv6Dzkk&r7d9WkVjsOg`(6c4tp~IlEQZ(gpe=Kk=c6Fv7gvR?)s0Qdq07W0b?WGa+DC#3Z;}@+ z4W2%QXe2u>{a#`b2=0u#{CzijXo^f*x6BMqe=KX)FkrfKpOl|?$JRQr6)FA-x^&2} zz;++M4}-X4-LNT&-KqT>2;rTNr5F@0uOnv9s8h7UB{S>tY&KX56cD zU7vSTlg9?BYpKaJ#*3L9LXE<8tp7@5`I=cTd=>RbPX*Ubk+=G}CZhS%rmgj=8E1^? z7rhu~2)pG-_QLh91OXA0)noGC)>zl}+W`v;9jjAZpn_tT&nHt25Lb#zvmJLfZOoQH zg}3=&M-~aM51b?t3;-d|m_~tAPGRseO`=MNAt1_sw>aL_T(pYUO|9Sqc9R#&)c>*o zEle{Fr+}9FkF*Em)$jnoj>vL0|Nlym#LfVr7Io@kF^WP0^%n~$(7pS=dAV#Rfowk- zg&^)CKMEM7>xZomWBa})0|oi6AFr1x&Bl+7=c~o4Pn~vqE-5g-yN8)ml2gyqT`M@-sGfapVsWlN0ZH5Gw;>Y9epu?dpjI|LGAhl zAqXVVUSR}a_Jr0~%r>i7R!fX)(6;w@QG8^Np?H*!2zpk2!GrR~xgC(0@i%+jSyb?! z+h==6pvp8^RlqveFS(+~>U7esUG_mou61SY} zbC;dkXbQsZ+A6b%^QVz3x4m!`~T8k{jnBi?CCOAWmnhlb1ySs6Z?_)nrRmx~C=fHch ziEGp2dxHC80+7Vd;^R3SvT|?k&wunM+o?27#-2g6(A1V@IG&(3-1W+UTk1ban-W2% z!T8sYR2-NlHa_cfUH|n5rKob?;+WS6MY}SV^G|IBoM)q6FwqK=@^Qf*GGhhY7qx674-aIw0mJ87FP8NTIo#uzgK)6x?DfPm(4aq za~@!}a0>NOg!f_oc`s=u@jN@1pkv~ZVW1V^?DaeQ;}6r4?(WfKZL$rGE)z>HEq1jY zDM0Q>ah6zjzja4SANF@~){17pYojfhe?%JGZ7VmowKd#rKf_rPqIsMv*}{r8bF2G? z2&5n$^i{@E+xpapI*!!vmo0RMYj*6=t?>P9fzO-!qB_Sj zJVN2^$!E`S?vt+buWXUy{+})^XfS=cKc+*^n5{e#?m}BrIA`A9-|o}qih@-#1E{C2 z$B5sh6LHkD*P3nZxmu5q%2NtDaIE)WLHB;lLjf0E}CTgq+NyjcC!zsk}-uyb2ubcdTsn%y+^ zgg3f!(7!QdMnP)rHg}n|n38O_t{Wn1prG4s!M5w(-m*MDnQx;#vsAQ~?T3zajLa*d z);V#*e3X7I8VZi9Pns4|+JH%|&8s|_&X`LCCocXG|WWUry?w|?ClvAcBe{Ii?q zK@{@EAG=ESLdltwuLj=ZcX=MSDcIeK0prcn%?g3ti=1TY7Rif)Z2D)HBn(i)x=bf5 zD`Z%9^4|1wJQJ>aYKVV4kvJ9B)~6{L`CG+|SIn82CO5C|uVs~*i(#DBz7q~>3;Kh%7(t~;LVIxa~lGsB!#CId!qtaD)X|Udq;a8)E@#m?dSi5#o zRiW3y!YZFK(f2IezUa3{O2v4YgNB&dgsc9dRk$Y@SI~YL$i+x6Skv_`^!%$>hCbz?A%g|49z=vlm*S5&`HS@Pjs%f1Ht2xc=0qK6sV(sAJd1UQR82 zi)^2+w3?P7VWm9$BVWnRa z9v#F6k63O$@xs0-y-p_8eb+W1_2|*=Y!-780+3lAlh|ESDG7n{a*nZqP)cC@RVsFN zuwLxQiB|O?e$clJbyQ&fw`C2h^9~J!n%>)y?v3M?ZpeweHP5mZ_WjY3)qM)EDs}zz zbW5- zez49Nh!GRqc7Ta}?BT-I<#;O{LE`%KO;y@LhYJO1RQ=D(e=x+Ug2%1fEH-VwW2|1|Q2 zqf>k)_WP$5XP}J-s?ey{haFS%X%%L(o6iKuqY`_i2t0&;(gwlPJPu&W7 z?Ucn7pS!l?{0`J5cQHK_#!W4)*A1K}oxpt9Wc0|YLNf=;u}`V*GBp9-olYOX(fy(z zte#5bZOFOA`s?^*TLPL_uW+7$@a-t%?QV&Y@FsoDay$CUQbzLWm(wZE2E&i0wq0!0)pct7S1LXb1Ug)TTKsBbWuNeF=lU z!HXj8=iL<58mY(KLdg`((?srYLIgyed)iiiTw9{{R91EuGT&lD(6`?b{N_TJO|q1^ z3%Eo-^sPl%t5jM>UBw>zz1O&`kLPkEpqUNKeueYuq5ED~t222!BK3RzPq{2c3ZQv< z?lZ+^zVoklqt#je{OvAWix*hw7x}!B}-bN78J7HGKRH!VS7eV>>Ygo zQc-B)q_E=XTU7EyyL(t)Pu#Ucp03}Ve*G@}?EMp*O<|=Qa?p(GA|ZHW=1~1BO}Km< zKS$LrZk%-g+USx?!cDJSgRj-@5pVxk5(`l16v=77|B7$vnK4MiIPN@&F2WC-seXj^ zw_Bew?O)ud;>NRT`0$e(5WdE3FWhQ1c`|GqtTo74=)1y9%p-h(eluKDNZTkE-p-BL!Y* z9qr3^04MTF560)@)B@bkh0Pk%l?W@%d}q!hVxFqHt_$dX8w#&L>)&Kz*$y%(rcL8b zzO-cdt1i;avMN|ce)5YT*CQHt%-P{?z^I)NdfnhS#5OI^=req9A0EM=K1Gg8 z!HLzrA>A{O2x()RgDBzH4likU+o6v2uP?|%-P|m(Drkha*%#Dk$!N$-%ugR5Ck&dV z9qKM)WY)zxWE#yZNrw37%XBmCqHcm8NOW$u6IwoPeyCmCD4Z)g zLM`7*%q6%RS|_vH97ASj03TB*Y30p@BG8UlJ5B0-@8^;FuWW^@pe?Ea{>`=Mzc|!q zPF8FDZm>u#p;@{unI&Cm+wOC*#h<3iUlGFOd4V6xhWved+h^Fvh13gp^+M#bwQyfg zasG9D8<&+dYH<8y>r^)<%wuNB)p_2W)k*PnwOQiy>>fF?wME+>rmUDJ`6%JgxO+MS zbpZ5ja%45^xHi~=@&|E=o)|KlfchtlkINz+ho}~LXE$Dnw2)dlRxfr}{y`6c!+OjniU7);IV#kKV^>B6At@JCybvBs!Y31U+iIYEB~ z5r|P?r~1RQo&f1%zmEexc!EL;mmgOG{VOOc^y`j)Z@U&lum8rvjH~#dKM_K;O>VHLhnqshhq*1fuj8XN6D&8KN}aNm#(DYIFR7Lmp(VgB0Rt=W)O-9%0QQ~_U-rTd z{t*ck1^hwaQS3iXx21N$yLqsk4pe>jq4*EZ#+|>tL4xZ);fUUB`-=i@azfV8ll=nm z@j3^XJ1cZxUSpH^)8`Y%bnkuOrfcRki~>RbNNMq{~q#(?d#_N zIU-?hZJ~3}r`wpSF7|S0n-0J}U7xM6Etey~j5B#mMn9CTs1hWqh8_yXL_Z%tw`Qia z&Y*c`VNO>frML(T-`G-AMj-UrOdFn86zNIkTUKEFUhBIuI{3xtZR=v+Fk8<7nWIB6 z`a3WMQLZR)hM6ZoVbgg^1zZtSe zl?5G&rGfIXke|!e!)GaZbAR4jxSBqZy11y%bg1>x%W~fN{)%MpRdb5n(l4VUbvt{x zt_QEeKotWGZOU}M=_aK+0H(z@?vN!@h$s-$k-uSvuA{HAs8hen$8t(DaubzrV z*&Qg5Q%Wy*uY&%_)H=3JPTICUS{oyl@MDNpUMXgoni*VBm#g8q;2 zl!1g?CiO+?6de|d6+cofBfJ}>sV*sboP5cQ8IQE*T+9-G-vvnczWs%)65elOT5z(t zew^LcxzGXsDn{|y4)jX6y?}-wJ+U=bw`f4_IKzU1T(JseyL~?^xw`(re*LEoorbon z5&IiXPf&H0Cozr}LA(#h0*kO}QJnK5OD-?QHWtS5wq)G2dckuLruyI;b`va$Xgs6P z?wMtE3=rN$Fus|yW*pQ zB*u&uSjCxUnJ|en5)Cy=%EKO0B*?C@Ms`$4#V&QhVXQX`YhUk7zqwM}CKV9A>?2qT z?4Au`hfdWmou&lA{?LuPd^Etkc5zaP^&GN@T z*T)#)pSqhJgI*|v20S`(PQz(3dVsZQsd4{I#q;E}TDQOt$zeW6E^%sidV<^eS9OV? zRFGg+QMunafRdK*Ex6ZdN}7h#K$ml!%{Qz6&)?4^%7b*Aei4ZRP#&|S*=bnZ{}M&N=X5J%*7xui`m)PH!|St-o__&ih2-+kYyd#Sp>$PPhKPoKNs z7u{SFqMkQy^bSILY*Nzftgc3!BTt%2kk8g+HQU2NgqA6oA^tre&+centI$fKR{ie39#6RMnCQ0j?jCpSI;IWRA9UlSJe(aQarZ23m&Z7$({3T1zZKErH zr;hedhM&xvxmFSa8^b$Ie|qS`{GV2#uk|{ALw{ZD-OC^a4THix>=BJ^`B+^PSdi~F zGU92dtAn4bUW5>+{P)wlM>Nr$kO;_Bq~e7tQv<5>MLNcoy0PKQB9RxF_XX>1t{12b zESUL6nF8#-uFj*y5&Vs$$KF4#l(u~K?Uqcy2qaXef?uSa3|$#d&$x~dqKW_NskZgZ zkP>@2;P zOl140y9oX_VS2gC|6xzja{Zi~y|4as`_7ul`nAXVO>ZtqmUsuzN`HB}Hb`ye6Q((+ zuh;w&xpiRAPqTi(=wx)1fpHYr)((HLBw_nep^*u^8289ujEsBDcJ#syfi0)H27Y^D zELPQL{q#4vD$XP`e z*h<6H)FAUtXW?P1kt%(r9R;6y97}YxuvG9R^rP1oKk_P3PPx~P>Ld%c3^I&pv zZra=QHgC)`{;iMN`xD@e4j~!!eip@MVYA}PhQ-m{eM-f&^$160hnI6#Yux~JDRQeA zMY?dczeteATk8R_!b24F->LLWB9tD2O_<>%zGw^Xz8^m+vUpk2r>WpkkF(5!6HA0& zQ`xC!Brn|*OsX!y6FK`E*j0_#x89@2{n&f4gGg~^2;qMiLPmH(26;4~Jq%sM#CkZ+ zAV_3);FRHdgHF5FHUm875teVN8}@6#+tE*4!y~i>lMk8^pi09Ynsw8*8FqJ68f5&M z=DV32FJ;jzVG?O4#=fFj*xiYR3>b8VLw&pv-U9=5Zinr;9H;aAj-)7ciOlA!-UCR@ z=EuBj&|QY&v+EzL)stZXbKj*7m0G8LsDGdd2hy)z=^iV+co82*{4TkvUCHHQYA)7Lg+U^iRU{em%=@7d^ z!0c}LLHBiynYww7XxM{akGdy_ZbCO*lS-ELa&x<$ZRLKu!pN?>Pf39D*BV z)iIs@s8GD1O7-f4BaN5AAvvgIes$(G+c)H8r?Mw$>r%nl^AB>8XXw;}rim3^<74-p zUiD6uPOW?v^VQ>vyY156e%d^{T1ZZKdG`apD0Xt3dg9#o&WSGY?e6Puw}%GWDIy5F zJ+9=qSjjocDcc7EJ>)l~XRkcW2xy4BJ&LuJa7EE;E1`O^e@0dA2v1$tbP`-5&z>A} z>9&|6=6M6Phb#w1@PsyHI{G(>2AvsBdX`b}${Z%u z#!?29I0;)JFK_5%?HtT1g`$4l=U8(e%D^Nv&Gu`q9aXj_EBEZ^=;~pA_SAPX8%dJP z>AhLh+W3eB2x<>GE%H7k4=M@rjolJqwiIF$k6vxepZwlvl80e@M;~N)tdF7Q5Q?oj z3bG{HH17v9l2v+WR#nz_@g=^s^GOdov$T@mq^TRk2hU3K9p8F6(>NQguTYsO$v@B; zWsh#iGAOdNxIPVsysaURO%32c!nRF2erkM$wUDL*fh5f=IH~Z=>Ie?i-H(!*M%~nt zwHUZVbRJ~!5JO&smx`_#ZX|-^HUObs(2Fk2xEYc9Bx$e`er`AwS=b7f-MD}PI@lnp z#9-!$NkC+Hv@!R|r*7quwtr&@&ZtgW`H&CIk;vNHyvp>fy1a9L z2iOa>q})9*XQt_Py@I8ZTaa0!ZDt4&H}laGC)Wm?v$#R=2b9py5gN00r9P)AF(ogP zHlfqfSL4ff-LAl9IB&#Ztk=I~dxb=|1ij~t#!ndZ7>ocaQtrA|zCMqn!8B%}^}5bc zetq1Z)md&DDYq##+TQkSN+{1rXmdAF3KH}5IT9Bp@1ZF6CS~PIvi{w(|0_O`+%197 zmhyQ3*s&^NsuZtEcJphqw}{0PemjG_<;9!nhfW5-g}O}MG|M0VVzaj(ce?~mxwzuO%Vq6H~PeQN*ff8NfMSS|g7o>7$?7iq8?a?lA@O)Gfn>j`ml` zabVyrtj+-){~~~o8>99A;2>ZgD#Eb5uv;=mrvP3RxFI78t~llas%1ES?}mZ^S_pGj z=NdR0gWzseoTB;gFaO{y0zgTt%demsbM#|-+forzG>As_i?ZG5xdqq zU&i?7??$rEt7%bVz74aE&*TS%ix!9%ME}`waSnT^TJV-*;^fWxNBGi^(v&#Y3(#sI zDgw7#Dc(svgKD6jEbz7KgPkjDf}pPO97bc$)&=39wWr#9bBwY5D~z!Ps$mn|yliN9 zak0cKc=_*=cmefQ>hM|tO1E|1ry5^X*20$?f^7U0g@e|`d89SS->W1ZDlOs!FrL9w zEDF0W#fbR(LoT?ud|&Xqqjpu*Cc!Z$h}I#vA$Sx#!}9I)b5^{;D0>1zwNVI;bITpW zF(W#{u)jzWrE3;Qz@OWA#t&i(oPQY7q>1VtPP_w8q5dkhnQ12)XBaeA5D8seBU$PN}7%a5uv~vD55lDVZ(YAf3W@XCP&1 zw9HRNmPB(k#_8rVQ81^jXp~BPqg`4qvsFYm+(-3Ey9&xlIE(zP=0=>$r%V=g0kh8& z_^9=&d5Uc65Q|=RF-NGQ+y&PV-G#MjtSH`{T4<=mmBzQV&=WrJULwaSzyD_Tvq*tu z#*p8+e5@970?P2D7r6b%5|S}4*9!JJGvyCDOl^}+y5&ozSUZ~|W@GkaqvUjS0~dn2 zw}YLdc);eO9jp4@;= zHI}R9Ro;M=NBPO9V+Xt1QpbuUkjc*RZ}tgi4?FLY23?oD-88Std;Q+1{E}a}8J5vk zk~eeZd-{e@3x!q>n0&MBip%ab&!`N2^Mcw#cOShCr*V0|m-KYpicXtX% zw;N=ZcH10cPjSiO)I3mLb;JgtG_l6CB-MKcENs z$-cC?*&Wn7mEJO zouPd?L;Ifz_zqKVHwg$t_C>a0M@d%>NInTuX5onkmeR~No(2?K4c09@SKUxa)pl0n zItHdm%aX31@;w;sT4=+x6RsO2X{4H;X)j#eNzG zr~|dPpR?mMBIt1{1SumFj7$MGD$ZiB5NWs9M-6w`;RKfESm+ezpM^1%JpNe0KvB_) zpvw-M){{B&xmu4#Du2gV*TT%M;1SaX`X+RFo8A8Mva!@@^!FS+n{qOJYEA`r5Z;C0 zwc^_^k*<4VVmogI{eJo`G`g-rdB*x?U8`IZ5v_bf%t~-v`D<=8%XN*9o{1~v)@ zO{#PBDi0r0UNbU&Ztmn#4M-93-JpwYmW0+an^bDlMtWA+J>Lt%|{vz zq6HrfPfrp>K0>D+a(}N8F3A1B$@#kv6w*-03iAF?<9YuAv1f6pe+>`oLB3tmCW>Qm zFeZc(1#TOk*1VtQ72naI=e8678?Z1otF|TU;Bqf#GBLHs!FVoW39YL5N2}r{B19Xv1yzqrz8^Fd5`6uE3 zNX`k>w&Xc$DD9;DzP{AP47}uBBXh-n%+!n7oi$W46D{K?&5W~U;dSzAY+#|S6QR*U zfaaiB9!-_^3J-<4+B4@iv^p7(+Ze~;ctz~K0Q;D&>k5e$2d2ne&J-X}v8IPxQ+@q{ z-^*fi*ZeVyhK8o4VwU8qeoTFS@lC#XrEmS+!{b##@nyKL)+Qzz$w@_8V8X5n`9Om_ zRZm2q7BeZ6M(o*4e|*yK{`_oB+<7D1A$O|kFv_y5CeO*grTK@o`*Gr*OadaK(X@pU zf64EB_J(owkCEM!(ucHMz?6`FvIl8=V`G~&q+QFGreX_)gpP=RBXkttmmm6KZ9Yc7 zdyP!{0XJo5ToKyfE?XczK{ER!tgs3Rp%qqs-gKNB4(3HyZ{gmu+EGR9fs>gfz9IDD zR+c}LYGoT;Lg7~KHz!`Qimy4RmN#5mE4pElFkJg?%;ZuRo|EsN@Aw__NPq8!(TTms zMtml@{OzaBkU3>+QGXVR4+LIb5>!}{6tQQOM#u4lq{4EFF{qaV;`b}t2FT)NX>F85 zwVeHGo)LM9HZ2eH6-S^FB|I62l1OJ|LUTV{(_%B>=T}k|1y@8VVsXTnCr|9O)1N0} z%W2Jr^TM|!`o~GI)yJvifo~aD60ME zT%37mqoL^oBw)zfJ+w+&^5O^C{%ztAp9y^GBx&7E%pilkeH*7R6yz1Zxt3NlT(7`M z3kv-a3_4bFB9z&W{W}!9wh7sGPC_nXsBVrYcsT2zcYj2YinYsOidm+cAas6S9wxiNlQ8I{Z{7uT$vMd6ENmfa{HWqQVsCuuHueN9a-fkx-1YDo?~|e!;yI;UcAnh_T4*5g;blH< zG!2?Zhe$!|qchCuxyzn}sD?5YpB6y}ww*CxOt3@HeH4Tk_RE=GO4uZsg)6R93@Q3t zt;lgpk`vdJ_dN2Q-p_6C?hhe8BZV$SkdXVCU}GUA^DR6`r^4Qp<+WGd)SK<5!Q5@e zPM!%{ah@Fsi@<52h!a7J)M?LM!C$*Q?0>E=Ta)Q(HmRQiAN<2Yd8uX6An{MU&kued zjAOmvcjk&L91po2>m36&>vE=eYO2DaZ!;8+>zfd`9*#G*Tc-T?N-T)^V|Cvy;ucjY z(v82!!plNgaKG;~a#$ADL~^pyBxn)S7N+k1fint6tZ-8V2jKd>-5D(_b<@PJ3hygR z+vd_U+2R0(&o^-;sQmb{O@rDnj(Qf%5w;B_QH%^*lU}uJaJl{u;Cp+q@Q>i z7ZlLk=GoRCA}xsvA6sj(KOEcKkbfIK$FA@jy>RY#+wlwJK9`_9lyJjO~k4uzU zg(<52(1NTj{>hXJ!M+RnTNEvg^5j2Vhs$S?cZb?su9qpF7?jo7vD);|B;)&rsA*-9 z#Y}xX+|+7F%Y9??4Ev_Pa)rlIy!%#Q(Ms%SXIM*)&7wq=K6;%*7<2pcT{WHPOxy0W zBDTMI8El_2yZd=R(L3nB!Dmebd{+~Y-r)iNK5)`GOf42)#nMY7p3up>zM6AwtiqNJ zb?M!-SY$uXz~^UYnQLzVUwtbCR>7q;TQnD5+D8SktJ59{7I3WAue2gd_?fTSBE6!x zO*1JETkF@HY>jgd=p!JE`cR#%uEdP1}Om_cGl77LHv1goGHQwkg3$Tf91_L)3>NbSXrGNK>iU_J8+Fu!{vR zHHAyFcsdh9(~cQTjVQUz2!HBRrH5$|aC=jAW&U02befOOH&E=v+$1!=KWHbrQPj0P z&GQH87;U=EI*n?WA)HCfRm|4P5pmDu7Y=G1dID>W=n9m34q1?HM@7*rN8NXPZtHu$aBTY@_tkS# zd4uIRYG52m!dO>lUC8Nwc)FE;e(K>hhEp*PJga- z)PC$Rxy}l$Ps%r83Xmv)de65rHy>9Yn=q(v7^(k;U13wLMdIk={G~9rurmG@9T9+Q zIaTd63t_=A3=rb`W|t)JX2cuy$PNCoUY*y}71wmvVUZg{p8*kk(YeX_?F=gFlPBR^ ztcb>47g@q2txHi@6J7{n+?k5pp-x%s*F)ND#A;`;2H|Yo7`+gK6=d9jUUtuVo)v0c53LC z7$g)b!O>hdA20dN7f>{W;(l(!v9!YZ8L-xL`I(SO1B`LQj$6|D%nQ+LgQT-oN27h( zx58cGowCkmPW{w{23roxs&rH8_QSm^5Q~mdI4;UIn^>zCx13Z7u+AA7ZvHwxJ`_4a zBYs}11eovlaP57fVze{V2(Za5@CvtO-KalfF+*OA$Uth&+1Icr8%|8sFm4oX;P@OG z*qp=JW0N}!v3lQSYv`-5mM|V zd<^%K8eYUVEQ+j5a=T@cy$$-&CG)F#7Te^7)X>?$;#n;eeZp*X>9W)eI=tHAwiW-( zSQBeaKKac5W5D}riHb5#+ViLs1;Jw^?<)2->vXlbtFu8KQC_-ys;BDcPhkfaLijJ~ zUVW&?dMB_Jt~N!;{VjUA%g@6e8XNo;%8|r0X=|_NO6cHYe7wK0fpHQ*dia@IN%^&X z`zdD}bEnxa0?TkgjDa^74adUPdb`%oCDKp7bT2<$3R`vvbTxS0&;3dHW7O|QQTudo zcRqW5m!XxM@E%4G16`}0AW|TIn+Vp^b4pp3gC-<$Gkyu+9ve?eNt89sM1Jn-TIsBo zu`JG2qAKE1P9~zFLj_iV?I`e6UlQkuU%*kg2V=Zrh+l`rAkpIlin-%u7z8`sA^tCS zYqxpbuN!}CK>7Ug1C#jEnc8Hs3H1iH z-b5r~7553NZKr+c?{l-ZbV{>*+*>AT?zzL~yZTkWtn^%Tr%D0}^v zZ4zf3W%pRm0DL%6l@T8Ow}cUxX>0%HyJ1{(Jb2{(ct$Uc&1|wI9zuS*Ce<~U{ z0CH*7BLIL;puRoSvMsS9||izmjE6r!v`8N?E`c9ZH8uYnP2HzL8_T4NA0{|)I$wZXZY%J>0x|LQ`oGgn zoPX=y5C5XLg+QX{G;|W{gpd7c@4x-kUZ?=1%vhA}ayXP)zo^%u+50r=r!t(GEMK|# zv!ZhJUhdSJ3A3^6yu71B$QGM7QxDu$`GrLGho?~HG07~JMF#yYE9}j z8Ak2Mat5@7Sx68n@L^NW-!D@;o`{b5&AI)`lgA($!VpSC_?aM#_qPtqU(t5H8sv#h zrMwY`iBwYX5$EKXid!C`Z3}VxH>!J?2hz3)TCedvg0Fz|?tKNdxW0J%FP!T$YUHRd zhSenA)v57dDM5?T7#St>H$fbR#n$G+xZO@|qNoS)a~?5UOC=KBQP%DX3$?-26K2Cv zA-jl}>0(q=oa}`o$lkI@!~(7f0yNw!!{2Cd;&Q1Z<3inG9z$|Mn-Si+aeHP{OIAS- zzYsN{8>s2Qh@Z(#%a%D|(H<0-EoC*{OV=DdO3{dhUvp?5f3=oVxG!fpzfS^7$G*u( zsdfb^DTPBiujy1?vFz{T49WJAN%^*ig|h|wlS>u6S{GGF66R%TmJEpT1W7p42KzLa z3WZy^nd6PN#G1Kehm!0{z@5p|TG-@pyvy2CAp#~}csBgaat{09h?H>h@ zReA&_o0NmQ{~{w9XP41t;~Y5r-FgKiPhJ|+O3h3HCMNmLK_YqzSAr1d3)sT02W`g+ z8@_rWUx)T0i8vU&OceKt36BS;GDhIm{xl<)7=$a;zXw9dIr|vhuBpOD6Z9zb(Kt5< zkCKz(I!|3tx;21^1^b0OVnUIsssDHEOnc=ebuTm-&GDC4QZ%-MMQbzP&k93^@m1*c z5aw080t9JW_V<@2C+z7b7mEf7DknJy~_)i`~Lq|{waK!agmAqHw&UF%Zc{pvQ0Kr3hNi>6$mbfZU z#m~2g2HXOS(!i0h{>_M2+zs)ZQJ2J1#|g0)aiCMxpa|?7C-N?n&yd}#<~{8hLinNg z^p~H`KNV4%8sq(h#FaPQHeSOZ>zxUIJbxPIr9Wt+*2u9OxDW?L`q>!#b%IJe2FkIR^-UKUh=+M-rc z^Fo|jzpz#Mr_MElx#@j_Fv8HJIW49SRnNN&mqorLoT$xd`AYS#l*2+` zL?l=D{srA3RbHUPW8SIRASC)NX2=Q!v0d4`$I@?V2-Gp-jxEs<&MYiJ8&8Yk@`loXYiMADAQ#rDsx3uZ?mNL zt528ih3uEx_H%!RpJr7H7?Y+zZ`Qc^^>6IEYCO!L5X<#jEQ`T{L5GM3b?DFL$vVo} zr@Uw>9%LzsI#{w_?eH21MrifaEyiZ4VroF`?egMf0PycYfqJw-;Zb{T_%1 zwuZ$*Rs3I8cza$D;GxOx*|nXpCLX=w;}uHQ7V!+6T)*w(03+!-tBoIDHnsA}bvZJl zgK2KXi%}Y5EgGfY4-$g~8iiYYR5KNUc_V+#CUU3joA-Bcmtu5DUM!hMA9qHo65F|< z<`cO*>&3rw)h#holL`&_sJzV^XWXu-oKlcaI4O9m2OqzzGh_^#4m3i;@RyqArl$U* z@5%P&9ymWo5nXWm>F7TCVKl6)o!}ITX5(2zA|iVD30(i4Jg2l9*`V=yv^wQxEsFS4$c#+4uJm`Bo)P zXRuprz!(Bdo0D&LB?WcFA-DlgRh>~a-FjUuk9?a)8K?QQ0K6HpyXcmRkFhZ}%^6^B zN<-uRm4Z)ZwfukX`1UQg5`d4G#afQW0q>0d2d30ifa(in0yN-j;CO{%$pyiOtX5R3myYwRkP!jEO#~RtMhi3R6ReFuZ@(+ z_~WWUrmes#DS1>Nf3QdsmAshcDT%l*mxAmr*7JVYf^T+FIoLq%(DzFZL zosdxSF}@jc&2L3l=vp2YUI&5@P?sG0AwOI_ZXCNVa`hTv1jCMk64t-db4Z}RhW%K; zt}j?HPB`!>aDMbbORSH+Ot6nL5nJFu4kyQbe=@v$;33h2W-~h+@JV4fkiyjhwE^^0 zo(lmn>e;#Q-^nSGNgi(!&a^q&52u?1I#ZbqhDcCKlAsJ{v<1I0Qs~6ia0nF1iO52a zXdJ!+v9b8GeZa$WlbU^ffE|%Z9v;Isy&)Wr^V@uu2?p;e#xK8FNII*91$#s3JS8JM z&oK+e>pl2l?>tjR%+;pDKU=KuCu$A(-K(qOeL{)7mZ>JoFGr!5DebqM7rEp*z8RwI z(I`GKgPNCk{W=N9rH<^-Zdo`}>&p~|q+k6nxxknC``jIkLN63+c(M#tzVwAxe6sXQ zA`z8eDW&Xgl}%^fwob2kkf+@pX2ZkH0*|SR7({i~QXMB@+{__Bj z5H&AkY}!gKJrEA(K3jkJ*~-@nt$e)uBd!t(F%Rx^cy^PTW zL>ZV(>%oQWVeJ$s50ssBxgV8~AM1eF_em%}TyP3*VAe+Hq(Z|olSO!02fy$;a2WDjJ7uS=f710`NM0%y2?C-;Oo3y zy6nMvuw5987Xqe0JS|8)A_N!3no+1`jZ^(?%D{ecu>ps2HHQ?D;OTMlEjho zAsbmABzt*>`Dy23;uGA`Z6^Hvna~k5haC3UKQ2^(aNsc3>{6bLqoGI0Vji#RbC;3J zoLoFk_hZvr{V5Tqf-Cc2ZR{+3w&FJmM@$@>arZ9P%}CF<3$t5<|CgvDMhh4J8|XL( zmLqL_mseev>>?L13T$@MVks@atPAJi@vAS;%W?R!6+0sky`ED3|FQsui;u4J^=_x0 zQ`;3R{SW;Ml^#C7c1*Iz<=-l`Y+ud4zV)#buV{|G!@iU}ISHWj^p$4^wcV2cm`e7t zkb1g)om zW0?`;H^W%|{+-YqZrLUv4J)(j_AvhP^qlObI9?bqP6Py7EjF&2@8>LbK<1`@b-r6n z?WIW0orgDUF@ONUhj3>Q;HT4#*6O{U7sK5-WH?wG+>Y(}L82u-fwgrl!1}K;jFJQZ z-5)F@OHhF1w&(EFgc;caKI@G$An&65>xlhVDdb*xdIVH7s1fh>bplPWWx&RVLoxuy zK)k4pI1(VSgMj;OCk~K&c_`Y;)_`uM7c z%HSYb_1M`hcF9Q;KWvs-Pxakfc-uFs7d$J4WWz4Y2gC%aMBP##My1obHwO7XHh;E@ zM+O-<@SH)Up1neCI;lpfwP|Bl4$x@ZaSPROy*2!=`yjH!bw7q}K#6J89%G-0jtP`T zZYAHTh*hyvUbG0bb9sITgitxPp3Q{u`l)r~2vXk>G$=mp3E{$AYFu{60#W;z4bQzzSaFP4Lc)PoruD+B8tF<|W-l;A z*-)1Hv?UsKp4&a{lCZu_t{sf@(@Ay9u{5hC=6hL>ZvI#V2ffVsMN4D3}P|a&hMPBk9?)X-%!~j*LjyQw8kCf zPA$sy+TX<_YkwE;LUeAXS7oBL`J)`Nz}3H~_Z1JfLATaBn}Q^w6|SsCLOg}Y3iKf= zT7cSr^-k`ZLR!p0vfe>TLNP!Qsm|R3?Sy6pOICXp^t=+lwG0S#6 zH|>d(OEqLmf=PNQmDguJ?GOU1C z=C9>D^jzG{bm=ZF>Wv^=tI*{eU~ayzp!)Vh8bmhm)P^EcFYu7FyQ1Y`*it4&Zy+xG zh9p)9o72fr2Acd{q8|dkIkv^(_fD)?|E&5z>qwafU1XUD?{qn#gT+4$cS%+v2S;8J zMKDxS3DM2(GMCb6)&*F=9P#%shS?NQ#czEIlch(48ZHJ%r5>~si?2!R#`K#YPvV9^ zMODsuI<=5-jtZO?to)utK*;U<9wjV^nK~-8-&(_mD z314%W0uQ zQ1I;gNcG^?m%lg;({J= zPxXtr#>iU@-256`!~JP3sbxRXOA&SzJI(^y2loi>>YpGq*X(C=!Kc^&<4I1E=#9ux z;l4rHrRdm5o>{e5Dj3I|{>+uxVy`*(!p?XyieuXeL_Nk=IK}5XbfAbn znc?zNIGL-(UB=*9-LxSWaje-4hf)q&WiXLJ5G_v_wjRt#!G&l8py^>47Peq)) z#3Mn8IJ8!e^kN}VaN6-WNzE8SIxpV|D@TiR{Gxn(*OU?~{)ct*5jO?8uK`Y{B9>hx zZq{r}O$&&C=iJ|f%(^yM4m4YpsOpDR~xDE2dJLB`1;M-MS6Jmjl1 z73WHEb9czY-aoRVGB}!Z7WQyqUZ1jVam;fSITs!;j7vILK5OMbixfhwD9cXOa!`I2 zt-d_(*?Idr4WZm}{C^z}-53Z{$_O$AQ)Db)v z+e>mYCKG*(qo$a4^zPD@-L#>>tfiu^8O{E7esc~YXaO#|3~g(KZpiMGC5ncl7d0q4 z0b$WRWls9j+k|m;RPa7o{OMYC65b3oRz8#B|8a_tU!!{hjN!G}TiB*S>}366ql}_j zW-T){o9U!-^z~lh;3_|ns9nnC#n#YszLp)H@*nZk>=&u;8+Get7k~wu*_2unw}(;e z=GDbr8W2)6a@PWD@}iv=qwEq<%0s3 zE6q78l$a;C%eJh2o;l+8UEhO5uVXQzdH`|P$Pio_E}M`w<4&+Bkfk1hpQ&+?spjS?JmXx zhlTMZ$r4I3@L7L>sg5{zJIkj4X#^j}>du59znpm%u6YKeEDC`0?(@5H0>>}=p1>^0 zzuI;Hh#iFvfqBTco|u9ER<(SHNCDPM47B?J+_>2gfaCcu2+$qBkbwVIi3F!*?11#l z{^`W7Rc}$`DPmAB!`G-CDZZs0#7vc z73X4$t%!S)w%4hYUBk=w-W;NuCPsm*)`6oqTfs16!f0RYG2cpGxX;BzX==R%ihUyl zSH$q1(M6b%>){y?{fwP4I+}q9)aubm?%~HbG7lw*aZ};uva!U0Ur8muW=RiMNK_DT z`BBGaGpc4Pc*~-OA|Qm)_d=gqo61!MxdgZZq=B%JS)k8e_xF=O|&1oJMK^Y|Ci3KjIkB5Q|CQ zXHs48nh!`AW8IWVD>=cZYju?h{@_5tS(Jv&-WM2vnl-62QcIVz1WFk%aCCRw1~O1r zy0VP4uk$vUb_eOPl}d8op8j^C7g^#i^5ZAR-%WMblr-=UFs3~N(ay2v8xoVfYTS>+ zT^~z{IDp6hEOzYJHS_=vH`ISH(17dK7Ox1VlG&srdG8?^I+a&=6hM4We;ucg;Cxmf z_DU?tFd&PX>SH9#*QW4F40U5Y6qh?L2?aF!h?BBSq75j4>2VZC!;^Rt?e9zxEzD`+9M zB8!jKa$t@dzU}KwI|UDU|8xE0M8pd^#54&1ig^2Z`!ka;M{W~bDjgk1cnL1do`Lc8 zLm_{qo*BKA#fK#mp+8S0D77-S3*Yc|;x3i6_v)YIO~o!N9~dp=RK!_$kO&I&c7$m0 zd?N&O>eV36+cO2~TE_*^EVd{>h~b2TyN(u;J`l{U%19H)Olw*_=yxlL>YxRB@0YOB zk(G|t)dTglXnnvB15 z!BU0K!`@$!YJI}opdpw%l-g-BYdJQO4zUUU0|VQlgw#4ZI)e9cxU zV{lb!uN|-2v5gNuh`Woqv<}~t&x5|?-ldinQ>%*OTh!X~tbvkZw#PSkUoe-u(v|}L zcyb&CMo;2f9JbUtUxKqMhl+m0v?Zl>=LxT>Q!LwVY=lQ-`ZOK_6-AAF* zo^5WY&J>)z#mY~!HVxS#_Z|rzoT72XDXac+uyXee0O^8L^WpQ9(`B^ zOFUCUPxfiHyA!k$Sdk5%a@}0DqVmtrLMJApxBtS-qeIVTxn{H^XL0#`AB=l)3G6Kgk`-N|Uwd)Kgft1(exVDQWzyGhi)bd|g zX3@wsi~Tcu*6rK+vl#Z5(f66jEhB>E$bXXRj9Qm~8yBldpK|Xm4MEAIhEeaoTki%t zYlHkMTdS7-IvMQuUDX9J8r6O{GAT82%f>e(g1X$AgCV*P%D_Dgt4k$dYXa=F0dP3^ zCTN6L{XIz$fJT>3nDmlS@Jd+#=5-sb0JdqEOE2X@pAS;;xE}G69?{4mZ%q>rRVsTS z1(qiNaZNxo_9QYV6M2t$lD|IFtrSSWiP&LotPE}{3hKxu(wcMr9UCMnD2aIcPlk4W z5=3Y_&W`o_iUD}HKAkG<;#S7W%0OP2B<-JP3T&DHwDkZVGY>$+_I!Yt>W~4%6uSz* z#X*3ta;6x-{oGjlijl3D%MJ*^jXOmkSQKXZVk~U=;OktdoVKYGMs7 zw3y0K?Z3MOuivj;zLk5jI5p4>(_khXH|s)YFa|Z z?Hj5O;(sZv&`yYdHdHZm`(R70Msr-nAEC#q6vtyj5oky!sWws*Hz$l8Pgy0uRk-9} zF3ZIlJ@w?o!9VW3n%wvHqlt{{Zr6)bF0Xvhxf zC$XjCHZHJ{v4M6)Oj6y**b=0t?$gZ`9&xDtWJmcTfPyOMwbe5^hS#meZLAtN+@vP- zOWR9vv>lx8EIt)X7#0s21L?@a#xL1>&A%~!nnFO#wDZ6#@W1jxG;s}>LXGCdWJ`FG z_eJ~awaSw%t2my9dE_Tv<7uN&*%_1VqWkl{*b{ZI@JSRYQ95YPq@0?g^YNnXvcMY-n5(gS8WB;nUVWNX#Q`BwNM8$UtC#ezAlfp+3BT<%RJiycCCdS0}M`=BdCNYx%m zE0(|GjpG$I9v4FnZZbG#kP@8;cS_iec9g|QkMzLhD(;U{IAI3-HTHc+_h^;MCFk0!}sQy&KLVdZl!lr^DB%#q2nX{?+B=~ z1ZLVx9r3C4J1fv=|AO$d_Bq%fI^C_EM&?i2akzLWo_1`m;}lM>C(4&9b)LvpmM z^|wFa$RjLh;F7%`%)lfYFPp*Rh^*NeKCLn6m;I=DBoJe#q)hqcL-p8YnnU@}UiQQo zNp)MiD~6DX~_FeS&w&h(w43M+>AX}duL(9I`^vTrLLA?wgY9UfqHxyMEG!uGHD2)6g{}P9>Ws@@ z%+~OR?xM@tt#{C&9fPrG7@R_h^M9Tdy59!rAsSOG&3dW~!pBT`A)8R5oz(lt2|Bm+ zy^0qDt+V)}uWcRmP~m21R6WXO&;i?&Y+btYu z{ygPVTEKFXlP;^dEQP*??~%V00+EDoyY)%H%4gcZYh!!&7aqBno^kpzBS(j|8>&C& zb-A!FU*r9a=6vPW2z55C+N17Yz*?(uF+}0#8y(6(-mU^co89$=a`y&(=UEx&kk`q- z<9BFDJ3M6ZHN-W{lRe2~*GS2Me5rgD7Ww!Q@m4v0^<3E92m&i@00%-zDs$}vcKj>4 z11T;gB%7R|A*;fxMoq(r&b`LoThly}eJJ0tc%_Riug>$3EeoQ74)C3YQZ z`-x%@g{bG3xhf5PsKA5~m#plg-SAv5ECy)2Ps6jad47{1dbXNQ1ngio7degA6e850 z59h>N1&|#OPN=QCaQZq`u{p|B{Pr<_tx8`;LQZ-R@J9=p?)i6!)}5iIYa!{m?Z4$y z+auruJoazyweoKEmKOrsE+1I3ntQ3^NZQXX%gb);Tfl}V`9ZLr7Vuk$YIZwk;0k8}=%rtM0<747 z?SjSJ{o``~^y7cZ@b>>QP48Z7KArzt)3g{c`fuv`7P?IDQmbmkp_O05lEau6KF>|C zu7A>Fds**xAYpZv)Sl|MRrI0nETMgMRA2qNJ3^957Gc4ZYx{7^fk zH$143`0V!eCxf@&iFp!5#*M^q8>&I|odgsYe{czV8Mvx_Sw}s3du*fd?`#naR44_*47bA=U- z-4y=Fw;hK5C4VteLfkOHBmApz&=U+g{QCkKz~oeWd_V;GvK=OsZhqS^}3tmVNS+_O?u-~)c2J=$9 ziWoew{Fd)$QAukig3(fo;^kdYK;mDIJL$Cs>yawL=54;}9)!?jtzwMB#RWASl) z85)OlRmRPehw+xGy%*xLa}qv-&83#;01>YWq`q$xwhtzDF1j?G>7Y_y^sFz;QzXpd z2#!a6q@f?>a2PJYQN&JndQH6n2$W?e9|MLC!b9-1LPIfMwJYRVK%;Djn$Y?u^a0|19t6Nx9Id@0YcAvbLjd;1l`V zl*%XwMWfQw;R5|dzdw1S2B~MT*M%6xM2%GqT)wpMWuttRh+#;5O(Hig8mhwL@_RIs z)5uMm--#+U4TJvvZ_v$Re8gX#!jQ6tyKyiA_h;JI$JbEUuY}R^_`eM~ z2Rha7s>BVJf(^RdqqC|o=_8v0gnZKc17wg<6Ce%j#p0pfxRlvJN3K3j)<+cmP}0ux zxKn7|!l&a0h860%C$|30D03JZ$FG((t|4*>c1_`DUmKY7asvv+8xOkhdZhgw`bF3Q zPgKA}@Fn%>xR~(=`qb(l$`LdPJ}j)Po2Qb;j(KF4ZXQ;rR-F|)EaZV%E+<>LfJrbNl%Z?o-;TrA^aQ0JjOjPHf&%(Fe~$^Q1Tk)y z_A&iz4*9LYmj?B;fNTtr4u0SF5K@QqsAr^o%}xBH%xLK*a1IKktjUF54)1rB@wrI1 zb#gx@GvBriFP(N899nUQy&=xsY$8&2BSrDrPuNZ*rM7UN4rKnlNo}HT`lb=gXcoo| zGXH@uKIlf!@$7AJ*?lptvCQ#Rm@j~Nrw7|gjxml{PMa{r1WCoqQOc4|RJ+tOgG-qJ z!k1X4k*QoyVVh;`>n6mvIp}3R6iYc9019Fe`vo+36u`s0SARcrtu_n;4NJEXevg+< z75IMKzk!W_DeGC z*wX7{wL9MAkj#FgV_Vu-U}viAZ$-ZS;z!Ek-XWeC1T*O{r+Ng6cK<#W825iwV2I-(uMl9JSdgIy&?5Lu+x_6GQN}aqyVF5v8{Pxhw5+QF z(2j(%Bda=%J!Dy-vj`mUgyd5I$tpIUnlb7p;QTb~-b?~uu+iB7e)10g zn(}kbz}tgIwMf&z@XMSF0JlKjpd+}%@PFEHI1&KL0hE9s%=hx={&Ht{+*{SxG#!1aC9EWu+iL-2Bfjw8}4z;og^i z#5_GJEzjyIB-hJ&Ea~5D&uVHlmP-p8=p3NqW1~r=qu90GZL^424SB?zrwInFS)( zr`rJ`;zg8v&uQCV2yLHv-WgJtI@u;`wagnqvcg?mW1GW_y$}RD6hyJHqhA^R5{H0z zO|7G_Sp%cVATXlruN^bfWY9oLSGVwX(Bpp5dBN-40~yAy?))K$9~)kM#-XyNRa25(0Hj{mTWa!21Y#asvRvP) zrwh36yHKJ{k}aZTS#R=LY#t%SzRx#k-6PjQsHg?Zzf^}yB3}snfUCtTs`fUr5=1t^2y&GABXE+{1tPr5#lB`nj-HTv2D!=^9j7OyJ zSMeN{B?R}mYwDhj;7uSgAH8=(_w(XMp57x#+yu8x@|CB;%hu^3W=fseKRz3;O&nEwR=>LPLPcwzXkVb=?O})2 zqvY3VR>@|OJ9l(ttv3JQRQ6l4E6k0%b+8-{R506zzd0v|tyrx8gt~k}4n=Jp zLp>qM<)OdtTF=Naa*P>gxe7o^gx%Fc>Miio26bqmcpGK8fzQYMmA`YV&u1a4ARPQA zdAF$Wozw;+uq*B7AsHggDUo4A+^v+6yz*#Jg%Jtm4+f@4GT=b& z=KMaXb{Y7*csgdtR(bPLYf}B?`{ zC7_lQgi$E&l>=M|Sn$BLBAE_-CZ%?@zp3HEv!lcs%iMUp|6=ofztCq|vx(f;Xnh!* z%blsAnHUX^l>4^P+M@X__Pht~RNT4D4ovT9<EVCSm~f5+Y@HDklMX4TN7j5B_LsyW_lj1wmkbKhy038B;@!$J&~vsY_Z zW{yX*9b`@&gSAziDqi{C5Nf!Na=mo-T4I_oVv1yk8oO2>VvvSqAGD)XTD%VvgNCA) z`dZoxL?*jVeDiycjECE;ysQi~7pyqY4BC;~y#s9M3Tjxgj(KnULQ#NYTcbZq(oEnu z#`mmGi032y^;(UQHd%It7DNY@tlcYynBJO>4eD0TUP<}TTLI;Z9T$Jkd!HU0Qe zQxeiB-J=8qWOR243I?6hNJ%${AdGI11}W+87)p0ZmvoE}Mvsl>>;F8@dEWls?CikK z;P8UG8=re!nwhfQ;+R^xb(k{+^S+&#V%WpJtQn(sLLg6wXWtpi}C zt^U%Y)`{0KghxL=rDQ?tf~9P!t1|8U1QQ+1&4TiF7+1TcRRJk^z8)}of6f0Bpq+Ao z$J3O}0D3?rj-kpQum@@gV|yO5H@Y7yPc#IscXu-kuLksWOV41Uj}RPT9hG5U`D{MJ zx9Ll+=)d~Y)P51HrJ z*aK`rfB{iAG+?D>m+&7O2Cy3#+r~{#qg}{N>4W~qozNi5N5cFy&Q5#*CI^lqe(tES zua4dZ4wKHVsK=DI1tbf)KMtd?F0J-()~)Uxi=rgqDm@}}e`$3-)VJun)`pw%q0d1V zHpBM-EB6!dN4$~3J(`%+RcywyY{%O+CY?U#1WG9I7T@6>vEe4M(RH)oW*>g$2=xfm zf|er1*N%P$f5SbX4|oUmd+U<$%MVmq%3uV=uyf;J9{B1R2{FP>;0QqyV3r>;CuS3L zd*#uG?`xG)^ZSKgX)9rnZ%Bgq7|SL0z9YeW0q!wc&feenT$+0 z;*l5MS^JVoEBAM`RNRW-XYwafla82HK@UI*Ti#9j($Xx)N{R@^24fDE6>| zDqxD9n(jWfW{euqOxzgOrO_c7cjQdhMaQp9ZV7@l3-8Sc9+zlv%~^craXU8Qn6+zm zDx45+dmk}!Bl~rD5C3yvtKnS{PH+?U`Gx!XVD0B{mRr$ybp@%06UfbS__nv3GaIo= zn8`{=hkiK~Uc<0Weu+{WL-cV6zvU?ZnHVj{4lCu;MIT0U#LDN^eD*8$_x5BD8<|?! ze;IH$4oJZ(5$+Rs1s^?_eh;3K0>*|R9Lk(QiDGYvm98+K~u3OR~LYW-+2&iQJ$fi!qW zI=Pudg?9aya`I)w)sd4E>X3NfNo#q@%PEiEmPsowZk;!zTmrKZ+w;=MAaox$9Pln_ zsAeBL%Y}wv6t`MF+9oQ56K=FZiI=A?lR{lh<29HliH3ea(QrX;c~mRy2IVGdqTpZ#OcrDCNJ_h@!!?RR#BbR?ffrAx6{A@F)EM1h$7ioOT733H&x>H8!vOUv2Mx2*v{GqnpGYR`u=c=j+@1)XEu54i9XD_X?_RAc$ z0er4M!L-$w;Kz_W|CxHUOfn{qIi-Z9iDhAFr9mmXbeAqU>`0nWqvLSp3gW$H&$T@X zLn@_EnNXv9WbK$?xDaIJWiV6z76Oh1AD_h7Q`XGjbi<`zFqdkWWjUff@;+XF4{WQG z@#m5vx>|B9ceBC1)_6zy<~N%^Ck8^DF5CO_Qw35=ymR@P$-#*0Bah!iF%z7Z8s=$2f1V=9oDEE$XiLM>GWLW=%AB9(mU&SqV z9UHb22wDwOPq1+3qBa5*ki`gU(xULDI0>`mJDCZhnF+rPoOI&kT5DM&)9VTbQ>G~U zY>6-^yU=+~aA&NaR3Y)Fu|@H~Og;UMw~S9hSVfEhqhh zSmDc}OCJwE3QD$vWyJ*1{_>6unDJU)ls?ZH)oK1+uHQ_)6&(=OU*cqmzqFTMva4Px z0X1T~rW`6)R7SVL{m?Qns>z~rRlSl{20iSxPkPeu3ix4Px}eSHUPD@1HkkhE#Z|f0 z6{hEw!@dK^`Jw#230<%)0hJ8ll^oAiE!un%vMDC~s&i}}6qCzIls@485HQuW#dmrX z&}@giLk(j8$`XC@Mh1EQRrdyZIglWYYpyg2KLM1ExuBMP(H zLY`HhHZqiVvPs=!37Ta-jKede|EmmrkI7Xtmdm)dNldw%T6=L%_;~G4vI;5u)dca^ zYSnkdDF%(a&L@2eUL{xIU)ebQqa3I`u+1 z)f3bR5Jfghbc>VaL%qhnGA20UsHR#_GMPsJF0d7WuesT&Ioc4_0(Y;~g+*sVuyKE$ zOc`)e%dF9*2H3DUmn+?|XU5o46lDMFGYtJgyC496MDzxLTkKxKqlyXufwzGB*d}13 z8$ecOqJQukGz9S6;)kyT6K?;d&(J6sYWPT4sK(h*OKGb4*`6A;;nTLhQoE?GgIjKj zuFVg8b6$ki_fZyGvuz!&-Q|1EqTuzi6~_^M#Qg&X_EqC@@t0nwA+4aXDWAPkka7%4(j$n=Fb*9 zp7Ldsx0Kr%pymga&TJ`pPFOt0?nrBIZC9V5Qt)11UR95CmS^SpL4{(THb!5y{vGt? z1QWNx5iK?I$Y?xrewIVhJsXx(e^5I?vXi`2SIp6T>c+y=VlJ5)n zjM?>we!G|7m*F(irC}5khdFi{UXS%owbv^?MaIYfBraTO8{xRn4Jq209*))3vXcaUoqs!Lr$@o<*z?H@J57)?^+DL0ZN{JI9h7QcTgt^x0|s03PR z1z?~brhXIIjsL9VN|_HQGDlJ3Zd{g;U#w2Oxm(M-=clGo2?_Fb*Iv`89LOiM-w_ zdNxnDSA~d6ejuYjgmr3j=)JSeGdM(bMk(Qp^V63THm!zGJEyXnI9MKJ!P7kT51)MX z+{|-+;2!tL2ZUjdqHh2(P+yN4pnQ<^IqfYbV(i8{f*_+?@ z)!Ke04eLs{3^fcVp8~($w&h(WdB8b?SH-Ia?<7AkeY}r)nx$(^zPlj?pQWRhS=Ymk z`Z%_mvf6g(kSYs({`&HB{uRAQ{6oqI^R&ydoT15lm+yD(%!AE~X#_rKNseYGkWs<* z_y+h@f+M++|6=FM$OP;(=bCiCw3pX>5H7yYp-!_>uF> za6cS*MD$sUY4c-S#yY)lbHbVR%WkuUASwR{Z<9i(`7S@*{~c^4 z#7YAA+0+_Ya3KN62fHr%RG{yjB`e0WU=R2}o04b5%@i`G|5dEdTiCnsnErUAHz})U#Fg-( zsV-GG=)xYQ<$p4cvTrveB-M&wNs02H>fchgMmq5YYQ8%4XQ5tA!0J%& zv4YY|jt&cKim@55Ym(j+gV6ILT}lj;$`v!))q#qKq2`sL&S?ZVDQ_TNLkjev*?nF9 zUQIJbrm{MP=KAaKr~-Q-XRpig9_=t%iiy-p(4x)Fhe3K@$B+IM4cmnTK zU`#}#23i9Zb*4@4`URNlzkI*qL;iO5bg=&l2>ggHuqC~lkt`rJc&<_1$|5{Y&*kf4 zhy1Y~ckKx6Qjn~x*h@xNZ0?ch-HVnu^cy@Bb2o3$9cVsleo!>j~ zTbSuS_MtYZ!}dgO+(iT%D>rWw&tFZ<1JZH}0;o;g@IxZ+n}LxV+rNMoORD@0=?vJh z;`G3`hLRq|edni1eqlBUtr_iJn+zcY*Vqgvy>SLS-soT`Fj?+BA1zxB2-7YW1k}U; zbw1E?c5pV+9M}*6v}M;4ss$MiAP^0x$ArM5%`zI0Dz={T#Ps8W08LMmzzC~A89-${ z>jCxI1E_M^?-m9Mhp(7`(VI)Aaz|Dmk_;~f5E`NJu>apgf(NR{4(2Ar!}n{uI+x@1 zmkTwnfKGt9lbHim-ms^;bBK5L>)KSX986Q5HZ+3u>FK$iHMgBK?NoRK9xfS4-^_8r zsEwPXf|3HgtNetslQu649+nMQCBJpW_TOypg*&Ex5MxLaoi&}=-Z%wG4(C7E2d5n+hE;BaJL6g#m_tI0^EDp^YotD`*=oHure>FQRlz7!-OykKDep1I2rFIa z^oMKQ+cCrzYG0g|N{?b%X{CE?Dx^~>KFf}XAC>eWj=0%ex-0GV32zs6j<~o_-nJ*7 z#e8OwFfUj85k;b}Pc7<>yx86*kEs4#GH?S0IsG;v-SA>|jZ!Ulz4$g3Eh`EYBD*I4 zv3t^);In>exEtx^CoEgG&+)4c_ZaV^IMSGP`P*lObY9$E)yXhb@sb{O$wemf4%u8T zP5AF*bR#oV+LX@}uYEd${{fh9KR6$I%c9x(CHIqXhW#n;XJmZyQkg1UMpVHb(LMK& zXgr&EbEU92%l8MNB+bzUP-CNv*OnAFB{N6hX#w^nF9XjrYz$tWgB|cW`s$Q`efn@!Fwtowc7w%-61ZRhp5Z!uWlkeN?e_Xy6K%-#vdDKMC^)0?SxW_DM3`H98U}BG=Wyij%R} zurtkpRQ^8=YRcG41)>wyl2g*gE+xpHdg(5rZ$f=5q0=gs-c~hvcP?AyuoOKAd-Ocn zF&@IzfKHR}f#eK2B7Mx4%QwBQzVDeRd6UMV5}uaM*S|su$&;oxT!Ajvd%S8>cj_x> z6AILneQ~@S*wqx|!4#AROI4GlRvu^i!w5!lV!rvUj^$!yZk|OP5%*>A+CNUCb!rfc zs&0at%$A%zo-9}0NO$WPmOXpTLT!528@xOJfciPt^Z4ApbGFMBBLT71dQ9A48W?2V zd-8EqD?TuK`+*KYl0tbotK3Tzmkuu8Ki8d0DsLLg9scym_iinAuS+%k*_Ewx#N9vu z)6M|S4^GqLHh?y>UCpp+yz6P1JrqG!*C_;eNyJ|-fdO!EPN=qIAw)C) zLMAV8Bed1^&lnyjICTDRL94%URo%tbQ2hd3GH+k<(?mt<1b685pjWt1;6b1M*g6eYwmgz&TEoLV z+SX1%H&PU*V^?xFXp$cMA(J1ZSkuual-RN@A+{hiEqokV_=cI$rC0?d&4I1pCwh7~ zM{s_e!~8cRe&(8~6H`%xVS)bxKFQ^8rvzs=&{7ndSi{!oY2^xy;yzbzuWU4-ilV7M zd#oY_3igQA=3=FqHeah(Dk0#BeD*=2&jEVGUo=@?DQ5B~#xu81K45;3_U8?zdA?<& zTl&NU?O6aR9wJXrg@q*&b96L=nhv*{9S@xZm0v+2x#JvyJPraVU zFFfUs8o~mlg;^I1)`^}{H zEZQ^KE;r{hq<^F^>yv+NyY~DaH!*Y15i~Eg! zHw3B7-MPKUd>I^C+LDnsqaj8@wN5?mEZ@+W5#>OG(*-uitt6=P)EFR)7?C^wqvjpq zZpg!Z9hy?^M5+It`Z=#Rnkp6ybmr@88#+S~x@3jrnP9}B5vm(~J)#b4KK0BzK>Q?% z6v)@_iUk%_(?t{=Vq8jN$>h?mBGIx!NXicgC$yWh|6dm1kK;+3MeiIUSo_CR&6z(? z!i#-5h#%|#X8UM(AIEI`aJl7kr;l}Iv5P!?9bL$cAyJ}Y(YU)u1Xn4sM;09Snyg}5 z<8L}~Dg@58M1-0gip57i#riBG{j;cL#-9)EH2IO;xIZag9jLRQy5B}pb1NB}0*pxe zn-`B~!!38DyJx%=I@7KF$ z^pEoISGxTCS{D`=GXhjosZNj4)BZ3Jxj@s6w&4BoDVka=xfbmw3%U_~c$EOpLb`WE z`ZGbT^a1(Z96^7ozh|N}?=9(G#vQfq){DXFz}1R%UPjPL6{Q!%5{-YkZ1W>810@A0 zAJ65gVWeGL*4jL@Sgh;ht(~Utz5d8G&s%{qR5qKxZXWGntmb(avJ1u3njPRVv=M~b zqeg77b##J`CD>_jfvJRxoPgJlgVA&L#+hxrP8>`F2!fHT{H#|;O<;jQ_eIWLc+089 zR-p%H`$X=G92t4R2gQD}7)&cOF~W>$~|ggUW}_n$pYn48D@S2lEq&w18TRRYfEjV0X=c? z$VNgm5(d~}gB6c%F=J%9%hTMBB9m#q3IfsJ1tWp_E+qtfx+2yN<8s0e-654rUP*b( z)>Je86#?EvK3yi?m~=%b);Vw}CK!ogv`kpF1SeqV%2pk>8ewT85-d)8s&Z#NU8Jaq zK_)VIyyeMhvRYwxOx_7CV!z5!)*tmPKqCbyo5eAu58Kn)_Pgp+*xkVg3)!w@F)Re$ z6Il8O!y}K>Q^d9>_L|lgN|(FTwz^E3eN>6J*H)GSwisZ)es-;1dyt~48D)xcg-#h0 z@%Gv+%EQ5a(dp}gL`#m`%`g448lHDY(tc5%PHOgDY+Fld{_6Z`m}O(_@E-6wOQ$};t9++_!hU;XTbM=_I*u&u z-`l)i`jLebvkU;QxTE15P%hC33}Jf%RTGdgp$D^$j@Oyg3)&_CvkW3;0Dz5;iwfLT z6uipny;9f5VLuO)M{NOZiIMSdEVTiGngHNpmCrR`!b+c3|BD#s4*8q|rNqfIrsie? zB6ow`D6JR(R=2hwfTimXykpO06oA&+GSqIs@leOx2akPXI_0VE*nAe61sBM|eReMs zJzv2Z>nU)vcV0hG zPw6Q}@TUL&7B+^(03aLwO|FmdsFVSqzAfE*8Is*w*q)i9V;{bgZeJ~@ks)F-gQM~zTW?~tfTYJ%s8p|t{~kSL_dJeIwM^$pumyZy;^)G1S4Rf$>Z^%E{Vxp$j~u1LNDM=m z47)$@Y*w_XgCl+i$PQWt&-IKwMXhmdIJ)`V}poQA(X6$OdE&Gl3LoXa-Gs|>yK+UXZw@xAr*9+ zqK-2C{C(wNd(o)Y_vVZJX>DTFP8gM(u7TbSppIQ! z84J2BuNWib?b+bPa$($g21J%h0 z-_mpok}{V5MzG8edeEQ9=Vh*fnzsH?xV|pV9cty8`x(Trj;vs8*gH&_y=l4Ra;MNci)qf@KZ^2 z%(@?P*H3_P71wuDKarr7Yiz>$;uJjmI$}nX-d?TQ9=@wdqC(4$*>4fBi!1$II!*Fy z8n|B{82=TbI#iA>=U+TZBB&L5hQ4FWALMbT{M3;@C?d~fy2Ua_w_ed~zU5mUbZ}A| z_Y#zBAMj=cl2_?H6Cx?zML`)lAYWz*KJUj_+>Lgo&2Ihn;kycylKL-)2MmG@myHme zz8MwZ>x<@&ic#}55iS^W{r}F$@)q z7lijazcy>eLd@Uwdqfd{fsojilA>!LGunRWq$4Gy*JF1|(&f|G-Nne)gs<&K&cnU4 zGW7bl1R<;;cnIp%v%p&5AQY*Zi&Gy~VN?I*a^KrB?uYhd zX}@&2a@PBU2`<9DJxlu9yE$q|!l&oIx~wDFu-wM{_-BGQl@V0IXBO5Z7ZHjN1Dw*E z?#axZ+|o~-eRJ_i$I$JH(;5^U3gRJ z)<zO%j#zkyKqf~Vva*MxTkkL0or zn4L~>MI0#;MdRb=q^+JMplG1)`cG}%qPgpfTrZ}b&PV@Yi1`V+x0!puYg>1LPFe*u z_efU)L#%=|NRu3-QH)Fec@fS?5YZp+y4;4CltW{MG~*nCw;lEj({&Z03eC6|jW$P@ zhF21fgD|V5(%a5KY1?KeOBnmIgj35SI>M(TY3@K2qc^=Alp%JB#y8fx+O%-_rQ zY|1iV)MnEJS{*+UqrL__kVsu8A$`4P zcZ>bM-qFWT9jamTv0Z8PvmE*mQzK8t=Puu@Us(*`SVnJPb4f_|`+ok4piCGAsHtn% zitazhn~FKga(}3Q3WDP!anZBR>j0JHT|yJvk6!E2q zMZ%uB$tK~HOkD8H(Te$K~4)-aZjNKw-ZK3 z02m0!oxiGvI&L^?tpjn}Vf5-8Xn(gl;rH~dW*$?kE+sK;k)5wmNQ%paE1L2qw;3@` zLsXBnuRSK>9ZxEdJDNQP`Yn9vf^3NasW%*EhwNks}k_b zEzJSzJcZ21+reRf+jMu)uuJ>B_cQ<0a+&>Ar~6!bxg|I1 zsFf^IGdXrY2Q$<7X(m{IvYa?6HeB{k2eWZA#(%PM9Gp{{gsID8vSl6|Ty?h;VVnP|j1BN1- zF*Cic1#|7CCR_3>2Hf}OtHxxGW5?=;Z~n#xntS)-VA@pBD#cHMurYaK(y50tuJ!pE z##M1TRld~BVM2a?tOlFMLzu14sbodF%uyX*@1?CJg_y?}6uwZN>8;i!cgMaKxVXRV zSMA(0Sf}D()0&j|evMGbgj!b^g3Q*ReD>-!&GArU{euk)Nd1#J_8ioi0TlpXyn{{wy`c*MxVQ94J% z(QH0_p2)y+#oYlK)g6d`dq1yk7_>YZ{&C=%$55n8rU|7gY;=&RI`8{=G*F{zL=-4f zgso3d3OffJCCPokskZ#A8}^wRmOhuz*AlqGm;r@HGm?g>FL}9olV4nLBC_gfwq1{( z2&^n)z-&h?<@{sBP&u%O7gavy;kRBY>D+oUAZBBXGigJ4vpBf)rOg8CvaT@0@DJIn zR3;E#_(^y2Z|WstmCd#*{rzX$O&5dx^}FkmXWp7ZY8COBXR^CatL}WH z&iWwtilDIW@hfq!soECgNJ{0v)68-K#)k{kb7a?0SK#9WgUh7XLc)_zgpCrmD-loK zGi67+>UMa%=Iu&OweK$5pNza`dFz?eGPF{}im;Y|YSrOoZ6rzie>?n%XF=mWaYI!X zq`gac@M%$a^NJ0wlpBz8B9olH5sLWg^=es!(;{4T(ZJM+$?T!ply`b-iDXOYRKwOe zYu;9ibd|d|AR(srO;45AaEH4sV?n`#+wyK4QQ^t`!raKIW=vi{FNPRx;sGn|r}P^w zZ1UApRb4{-;1!{jr*po#{{0$y`z{{N*UXeFX+Jt26s3p{Jr(jbxLo`++%AhXKjGY@$Dcc40nohWJ0$BU?Ro zI9Ewjr+!FKNwHrOi;rPR0&VIofH4blAhWDQT!vtNbC4Cln^E1D%A0_<;hdq2Y zx>H8<-VXhbSiNe*-E#yp@?yY6RUI2yMW>6{YsFGGk=NF8+&T9PZAcDSegjErTv<8(8m& zD*p=w&U$|?BxXT@u8W4enBV{aXu~IhY=NeX1Zvmw{cNF{xXVA7=>ocfv8k4fU?KvKLV!F#A@%L58n=Zn`;N}NYL8ZO{;>Ov3}}|O(wPrZQ49u)Nx_4;Qlcpy>q|Rh>|&_I;$xW z-Svf&4A^By)Z-kh59ERfxBT%yeo;h-T#ojG1HX8kqIaqH%}nwJ?N6`Se!c6bL2Ejb zi>-K#xwKkB-x%3vFSz2ifk6p5tNLutKqX6tTz;hJi(6*nhp_V*;DMa?h7jD(h~{Yg zDTTzlk96Xu899feI3vH6efZ_$OM)ZoSk;4x2I3L{x%^J{o@T(x;P2w--Ef@P&Ch}S zB+*}=eN_#3Vi?Y>J#T@Jr&RKX&&eJC=rE5*-j`_*A97fEll)A2F-~arhicmX$*-3F z%)x$8OO%%QuXNvKf%83jcrNa(4Z>qaDIE)3_+j=Pd?&euQcS2n6Vg*1AF0y&z;j7e zFZ-;Z+ht}qpJQA7j?GzSZ+y9Ubb?ZONgEq-dR-v}LiB53_*6?_#Z48a1=0beuhsSq zKIB1+Wb#R$+Ss_nV&j>2WS3R^38-#*B@4{la9X(u45{E&vtWtargybV6faA|>LEYb ztO)+x(9T7`)wxSFBw~rKrYAro_WtDzBdYs%Qi!f-QDi6(wEX-P?EqTmQtfJaA2e!r4iGLQU_4uB0S<|F90UFy4>h2_ zAKkC~p1ULtPc2ol+<6Rl8Z}B>{A0)PBmtS$M1F6BJI!MCDFQ~DZuyL3cV{U2!AjBa zpx~A-&^kv3`^|$hQ@)yDqQ-jzyvo+7Gz#qUNuZd+i}BPUXa8~07#+Sg;PLmfj}tINvLc0K?08IUM&cW$e^kd z8WLozhg%{*;S^JSYN%`yq=HpkcD0_4D?ELgaK`rK4pXG1tLgGmi1f`0Xe# z&aG3sFp=LV9}Z8sjY0y>kLoK%U$Wm&d`WpdXxN`BPh3S-}{fUGxW)$U%8aO7z>1v0zJOizjr{Lf}O5w z&vIu27h()O3J`pQ$f%N_4MH6@(@W$_IbF-YoA)-4Uu4e1Z>!wq0V_723bx($wt6Cd z!eGaH_xs=3vZd;_fwI$A;j@@mMc7yTK|V+!pt%AA{B2jJJ{VbA2Lpo1YGU$BO4wHo zrWJxUI0e0|{56@(ay#FIYD%CzBo{>lNBTW$PcS8vk4%9rUFixyjBcCd?{cy*BR(+9 z1!U^;14-cdy8TKiasceWL6rBm{Tu_+Z=a&F_lCNQj~^2#Y_tX@*#Cc1<3FZ43CsWi zd1V9!wx&qUL>#gH+5ZYLCIy~G0H?e(9Dud^vL!emaLpal&y)Ua;=h@;HH{dVH1jsj z4LNuoK2w3U7wS$IQL8}_Sf&>!d&{nVHg#I(<%X9Wk=}Ekf6zK*K77aE8?nEYnrlUH z;a@kf!nT`E&;spD?2CeSzb{_-RgIRP)E^>JJRfGM3;PT`_0cgaP=7x*EgoFzJLow$ zcE!Ijq_IStsbV|e`aj9HxB83SCl)$5uO2ZNQA@jNL2b@0z4oke*FGU$0wm%You^-Y zTqv~oRr2|FGt$jH2Pq0Wfw0ME=XSiDvMndfBtuDQ0gnrp!bmqc7afo`aC(JZ@@Jpq zQM!)Y&Wwrv_&{k7`UuIF4|ClNUq54UDwwdUH^=CS(ot=mkbL2hz0yOK1oZgIG6wUC zr*^#&N#xDzGfIg379-7RMKnOm-iQRBHT04XVnhY(-KVEJN{YAdRdlCV%y zg3ED>KzEpuaX5+n!v17I1>~Q~Cj3K#a|Y*fd1qkaEKhdLCLn|Blhq^fAByZ9gh|2L zvTGJAkI&;2-|v!=I?X~ONrESsaf3vq)K5*HFO6R8E~uu46GlCcFJMf*4OEn&h&tzB<~Q8~jlpmX3Sl?tYN?ZouYy9F`q2&v$Yhl%BeO9RL|o ziti&1Q1>pm480gYz!Px$)6Xi;E^zT~p)v*%&FxLGbn=o9Coy9oO2Z`{IB3rD--L?< z4Nk>=uoi4GD8iawEvcy*<5hSi#18ETd(};#f10pco$|)n&(zr0>E^$ro;<^etYG@i zy(Pb;3ZJXP#p5y&o*wKEy>tjj`z?cj9o#fIH}Kli{}wBvze}2%vP!^uik>&7e4IdF zA1NyTkj$H)8q<|Az^EF8!~c*2VNrQyxK3;@Y!*q-fLCZV%cq`)otKG#l~(53u&B#C zUu?<3dzBREFRwQdAF_3w@mXiTdXUFM6&CbG>;AZF6{>;yx)8KSeZbNmked#xv!_3e zynTs;L0m4&5ONLAz4!DTTgvG%IfY>?c zE$$%C_lE{XyUb4Y@>G&v|X zHe?ZJQ4m*&Mujv3#qAkDEE#-pBhEzijN@u z!|^s#z(e4=>Iz#WX5?=&MD0%brAs0nPo8hTxTT8Z|H}d(#bCQKixWm?Mg_>82Y*LI z1`B9a54fGr%Ucja+SyE|vz~D4AvkNz<{o+KHE?jcF6by7 z83(m2xzz6|9Q$?4f>?&fULvHf9M@kE)04bZ+0s8|%x&Mlj!2b>N^SD<97J!4EO&IWqykKjJ!Y;N`!QT8V3Z zBOG9v*60;LYy*Hg#};6twg)DL>1Qy*7TgJx(W|}vJUL?}n*3%@6nH(bUYp~X%4cV$ zx%{dh&B-4c798+qKHUuMP8)D@{X>{-fEQdP2?4mCZTbH8E%p_Z4S;Dw;Nh=+FKW&X8zksuV3sg`O|*SpWt)6SdAU{jNu zjKt~*!!1;R_!~pMTB+uGkj|@#Qc&x%?nC?=BqA9X!_1_kcfz-$K6sUw54O_dwt!!1 zfYRMea1&PD;{Q~gVt#N=gh|p2e}YB#&sj7 z>wBW=uN@z(kKrfz_luix;aF6=XNGfl2wHo*wwKpOyCsKZ2e67h-et>9%=BHA%!oSI*_UqA;xi$}H1K9mKLgwt+)!>e2eO>vN{%VGy{ zz73WjxC_wgBpeJ7A~;DvdyEbyd8`l%z8mRY`zk20-DWWMZBP6KKRO{7C?7Y&I21u` zxe2X`ak$m1!KCa_>~?p6{HY9)-e<3CR&6e-y)4&}e@S?t>3NLSA1L2Tm`lqByRj0Y zQtZ1(bK`4&Z8=7)s~qaw9OE6d@FM$q%5eKm-r8R?0+nh?Teov7g)FzfMed25PG6US zX!rY*If*~K^NrH0MlpW}p{>%n;JAYJq9!>pB=QDV`gS~g!_|hg8ef611jPp9EoJeJ z0%$mY`Sw$R9dV?bPonp$LpVVu!Yx%#7S@$DhPBI;93h}OF=`;zE-phL$M*Rs1Ov!gBLp2PLy zuc)pA?tYeV!=Soe#hR7o$eT=E<>VMrtQQa!txCvF86#|f1#9y$rEoc@3(WW<@ zO%4vhz=r}=qOx$+gF&%?cehVTF4^FrQ84hfS6B-lhwxOa^{5Tpu)86>i`xh*HGW^-($>S4R8x1374_xB>B2Nqfs) zC;vPA_BmMw`T3VX{ofr!ilDddI;LZO0ZR|nxzXJyJ6pta(gpa^;1BeaH({)(3$)XY zD*ZY~R(1i#Xq+a#MWy&4iCPGqv%Z#K9B+Bt5#vPqLiJ*)Jme?~2OTe@*X5BNkRl4HT|Ze2)tkGIh%~rXK4Pqc zzt%azL+tvUi-k}H`r5-LFt>h`6Vb9f)BDomTr6Xo^Gse zdqEjs7E$7lG~xE#s9Dl=cw=|1_MG+*#kX4cuH zdAaHUF`-FOS~L-OyGqN_lS>sZr8@=BEK@-*EExPN@_cmuh>y?dSd2-g!RP3~?^--y zz5KjG{_?55y6;D*-+0K5jPwGkVztp9wY84Q>Vi6hyRm(V8qUfG#NM!s zPoU{J-!oWhZ}opX4wZ?1&0CD)PC72$QAIBJY zif#Yz_%`5-;3L!n6XAAvpHM7n^T5XGCTd+`X0NIBq2DeL9TUNB zwY0tD5oVjQjt@o}v0rHeby~S*Qhsu8_O@^6ZYxGD`W|u5RNHpX9?U~Qeno?UT)%M1 zHj_XJHJ?8ihc-wmn%*wta;x1qCCb^nmKmodQUTo)V%wSSU$h%bZ->N7rB-W|~L`u0r+&Tz-(P&0vn66ff z6t8+!ac|+a6Oi1SI5!s6W2HlZU){#f4aCCYp##66F$(t#WEP#)`&tPBEYvAs1mY!D zPs=DQ8cH*w#YiPfRiVq8LF;*Iv*(h-9$e+r;XBY1qN7YVNY0#Z>&pLO?5(4k{Qt0V zN*Dsd2q~!niqaqr8_g6X3_@C3q&qfJx`u&tNGT0Ury`7!?vid0Mh?b)x8LXY{QZ3X z^WM3+kLTVwyWX$sb;ThH{NAS_5&a7@H)iqeVTc9|shqU{5#&!-hGH4Rj1r0Jnv}$+ z0lLcZz(h_KjU>I2&6f-p$?kj{-)qnb+>|n5;eVK3pGS#)BX4LUY7p7O^x*fUga7J) zK2FjQMf#0?r|ziL!lNt|K5+GLdd4OV3W3S24PlSlcb3lNp5JlxE~kDZ$|U~tEXFX2 zmsOhzTlmbtS}iRdLn`X2M412es3*BntrZ$jdFZ)N6?UhIN=2%5_WKziuQ~41wVBBs zl&)`<2(_)Vx*e$8{ zUO^BQlW$sm173yq-Yp&i44vDbK~zK^Z$?!db%F>+@Z?KbAcjEUyd7%B+qpUO;>r7N zeef%n#5c(36}DyXkfSF|29TL`nOts2le76)bA{he_b2O?)pmhCSV`)@`dV+=t<&*V z)E{H7(fgX(2_)V(T`812336+C2vK4uw?*YSqA%#9>gqL84)w_t=^uq&)sUQWt?U!4 z&auv1B%zsqW}R%{*wPb?U!=S6_i|*i58tO%;abg7HY`)xM$}L@q+F?{F>rZ>vO`22 z7q&(dY-aRSvB@j~bi;}~$MEalG~-rnWFc8aR*$V4~3Q=H~Sv7wvUi%ZqK8dK2;q!4tv{~&M~QM{NGnn7l_e70nOy_81eyJNq0VVIvEH!=gJm`ZtmhyhLTK8!S z<0I>o=aVsII%Hk}u(>KPB^2}{j#abYd_`}NY;)#d_S{8M&>Xc8pd}KglO@_Oa_mK$;E%bjUsNs}PRGF**9 zM47+3yW5f5DCiZw;`#(gXjXYCH<9>VyBjT`^)2QO9obEsAXLg8nv)&xkaKGd<~VzP z(JAYvp<41LJi79;PG3jBhtKWZyJU+hSqBTVP<0&AB?UnYuI$wz#V+d-ct(bgxvV(m zy(`#Eu|t?ix@aXPBy(;%!>(5P;alV*a){Zrh8=>ure9WRnJJthIx6u6i;2UQ@St2) zonJ8svhF*__jKtLG>A!N`=ZLCc@(gk_gNS{d5xuQc8w^!4vF#>^U)K;qzTDX-qGQ;Zg-hDYSb79>$32bYe8{DY&#tKgbP4NHRF8RSAOP|z&^Iy>? zzMz?a^*FKN8Bi2^U?pv2YhmCsJ=31xrf}Y%B4fnGFF|(r+ce1uF#DZ(_TF;qVEgRAos}eTYJ)FtAYd2I7qe2h;nY z4Iv1H%&Q0gMb`C)x~#p{I&=JVWWxscW=pEye!>$w60!JqLdUtz4SR!J@;CRhn2Hb3 z1p}D%HBIAJr>uPQ4}Vfh&sg%x-Fj*y{L_#%ce2e|)QPQWoxHn?##1%3mGp(VhqXOY z?NZfr`C%aVDacQcWW~WBCAlZHmd7;{L$gm3NKaU)TX`U19&`2O%3Al9^PH~mxKn8; zPtX>1+h^$pE}-{R5i@5_ny2{tmf%xD(c+_352hndiLVQOal3(bx zh%N7Bf|&}sg?N5ih*R8GH59lHBViCVhn_|gzV$c@=}hI3Z)%l%CDnN%m9(se&RFL# zeu(3eAiYPfmUW;kStc3p`{j~>OOdEoGb&)BZMoz2_Vhhk#a3I~)-95CL2H)}8`hKX zD;v)Tuc}6|yemsdZXV-)T01^oj@IorSNmPeIE^aDQ+?e6b6QN64~pQLIHBF$;&Z^-1;w9e&3{qR}(eP z@Z@T120l!EHUYcEl^hdp%9(xKmpW;PqNjajg{HL#-2ZBo|75_wf-~T@gd)Qh!MtWa zg{iiX7N;ykr(D^OgX^ROlqP&LP6xd2BGc|pUiJKT?_`oX>kE``N`EyaS_8$(g+3cT zBnkC@d;LsLjd}C64|q&2ZUrnWsTORfe1E7l=K0|m0mT+O4q4w&ce<9-??cnK(+_l= z%aoG)0Q?&v8 z_!a$H9yS=YiXc-uIjHj<>N)QrS4s^t)aW;+THm{gsh)YVa@6d!bD{w{r;%0J8g)EtYj(Nw_6a&WDp1!t=w51d{)I#91TxL8rrP$b$_+XJwX{D|u;o5X zp^M$D(y1Gg_8l=f-hp6tcr;&5Ugg6TOX=KTcQ*9g%|?W7Px2c1FdTwf=(p_Ob3N*g zB6lmOy{hT-L=CUB8e{GrywMzq5?=a{$&t00p^)?y$I56{TgHL&_5RrE$T7te`m3#_ z8j*7A@$1Y{L?MbOO0k{sOiSLUKfn~SwX6Jtlrpoar54Rox6AQRCzGb5fSG*pW7Ya$ z2ig|>Dis9Z_C2PSxco#M_u_Oq=1ua7pRLy0#!?vGqQ#{q(SCR8y8d@_!QnX15ejq| zlg|Y-1eQR~D5rzw#W=QGOr)NA6OZ6T$=ESks}LJU)ACWv$1w!CH{!5ser7-&dy_^A z;1iW^(TOBo_+r?S*3W2z{dMay8dq3Wu}uRDy!wP}wlp6tojnWkvsrnXk5nV7>RkH% zsgpfh<>KWDtBo8}gZ=!t$L_ajq0wGT}o>_Y#I&-YXG?lpjmo4wwX5j(H&&L!( z3w$`D+%|oz@8UF3=~A{n!|lSw9B#y+e?@)AMm>JixeZw!8#$0nYB+KrdB>Z=*iL9? zx-Ic8u^j8`O9xV6smjR9NZ4w`Sug3owBiX19>8b=8HR@~SwU7vy260X=48J5=_(oX zPXH8ie~$yytApQd09gGm9@YXW6UE0j0QZkN1@JM#o|<`zn~Q;XY=+c3gA7=MniW`B z=s5qiU5vXa7N>(T(5ZPO59`lxZSbL_(G3l-jF`UAx z1Cr~qNimjJHv{}!fS9s?(dR|J9N1RP_BQ8Jo-Qzn^9d%9)ac$({gr_!y2r0qG@_Yr z#e-tx4=B`!FqAF$FZ|n`XEY&>zYYU9@nR&qqUuF=@{iXOm`_v#V;zY*TOi>bToG4X zT^?KRJ}#Y8$cmIScIvaVt&Pl^)|WW}d0)`jklxHzw8p9t^RFA_E_F>Nwi1pKajR_Z z-~HMtM{Xo}eyxb|W`if6F@0f88s#@Jr0GdoE@st^#-65ISnEWe9!DC3&^|uuLh@6N z1qV%X>ihgR=9A^eVd@z?pA-Whruzu_WYLWN)S2&)M!=*+emGM+w@-B^+)UR_Kh|NM zI-vEmuK%Xd_QewI96ZM#diQrXi!ONK=~JuZ5D+FakGKEX0-UL6;dLDwsu6rE)dOO2 z%1NZpT{Yr7MG${wKY!N;XQ7_lV#=))t1G}gvpBd%5DJeYqv95O5UQw$3%-8vDraP4 zivyNvn!ly0JHLhug4Uj<1A`crQ`-M{Qwox$Q+#eVN_n1U9%BNdZFs)wc}&}27VeDV zQfvR6JV^NIW_TJ6zZ1#z-WWXBAK_s^_AtSx47To-Y(pM`$dKvC-O{v}R~~^qLp*GQ zL>`YT#qZRD@52-eOO^9+q(6L~@QlH|ztbje-2?v;Qf|Qdk-{H@mh{qb>m`*BC@Q?Q zK>U(-M~6g8#TlHad{10A9teU+oqZ}Im|TCX6*$bvr`&QogL2qkwTZfTBRE0VeQSMv)x~-SoE&HiatV^DJ)H==Yq3s@TQNVroIEfe<`#q$JMN^5$=tJ2*CUwRv(6}`>E*;g|_27+Z9PppJ8Xm<57b< z3?)NS6*}wNsRrEof*cf)%^JLy=B(G*e2?!rAM!6c%#D(H=H~Qc?0l>d>2I}%t1}MZpr?QL7D2)) zzE`6<@*@1LfF*+2&2%kl(J^x!U=L)gPj*R;oZq^cqO;&AWLzZpQfD9lr`1mQ+imsD z2^EpOc_u%`t78 zuVLLkGWi~tBt+YkC5PGVi*&Fr-cpK}Uuo_49q}E;>{SQt&=EGr{&wj6x;lQ4-uhA_ zahb6E0;FB2J<=MZ+7Xy@SRO^OeGa+WNKt(`bb^?uVW(40Jh`~)T|c-5rga`A!Z`&a^vbvA~`c*-?3Wgqo3QYBUf)y+|ZY4Ac>jIk^CT>bs~z zxwdpEd-3QjC{PJl?jD>0&YMTZjVtEBBDDwT`bl>M24T13muKjP5H_yXk#wL4K2RT^ zjQb3`iVsM=GwZ7nS*%k=gHz9e+^Da zpyc=FooA@1UC6FdUV#0*@S)Y2&nn!=g9%P7x#+FOmCqmk)a0{6%O+1!PG#;W-feD? zST+U>hI=o^N22rjUR6akzn%c;M=0LYJ^qym){_5xj(x zvkz}%T>*9D)am*QvU>)>a4GV&M>S%m1R3iD^y}Kf!lR1@oaG05BifrL${Gc+T^1J{ zUlciEk+X4}7QG;$Y`@jZ=;nJ%z6Js4q=%1a!>?57?;Jl#G}Rr3fb7T%Z(#3RbOSzF z8v>>Xt`k=~k{_~UoN3H?{@$?MFnS2lIwgH(5}Rlxg}t^%<~&nFlaRtnaFr)yn}WU= znYU#2ypt$?5l$~;*!DyWbg-9?i_dpqjInPdCVvJd5)->OV0VLEWH_*1RBZdc^-c?0 zI`#F@!0d4g>7f@1p|R>?nP3&U0{@}%?d<2=w42;p`VsE&9?&!Pvb6v$9^P$mH^&Nh zsQIu4m|8t1zx{@Rlge_eVJmSDRuIgfdiVGCXFq#o4G!(n&l}8>HZv+blkd-An3!-g zZePNpYo4%=@1cPOAN35nfS{z0Zd-wp{O_iAkE5+$9F& zJc04vV>0(qMKDvA;hHo1$)K}qK17jUVW;kV3X&&uC+b9~Hf0?+eu?9$!L90e$2_|i zV30KS-S3hf%{@;tu9G57?rg`5=;E2sE0&EC%KIiHrxfc&3+>xRH-7n7N}0k&uN;cN zYtfyE-V->CxyD&UaGjo9g>3O#!V^`+0@%h@N{SQRrUr!ITeL4EZ?DNToyNSzS*wdh z*wdu!R#;?C0setzXVXE7M=U{XD!b^%5gqQZc#l_GLLTuxO{^%u#_PC6i5#@`V6s#qu9 zzWgYCU~@Ei#Yn!;PZ4wHGhEQ>BXPXPhxDzxQr7HGPf-W#Wawq?iV-8Ss&9+>h-3Ci zyZPWVX=+Ed7vVg;B>?H89C($q?-u5Q34w1D{PIYAGv-fI-~&V-;-){Sz4!fd@fnT0 z8a#NzUhyTnM(FwR9p#SR=YgFY&}_Vy%ibmC`|tBP@q(r4c(Z??z4dMY z#9aP#Pi8r3BUu2D*RLT(gjlalVcLL z5hlOmu7`WPm%8;Ek^vjK6{PU}#J#i8Loqz*bEDea^tcD;a;|EkslM$K^^Kg3!Ft@% z&K9(TWXQvhi*Ac=|7e0P(#MdPPw;i}U0nBBS>LcV2;ewu7)#VOP>r~v&$Yp0>c5%d=k!0vwu^n&8B z3+opikoG(5Q_`~5%C#@=tvsS`PQCEaQUcV`cyfp9ki)+TXp@6P!J=L0AquC4!Zl_! zy}w=`>AG2@U=verb2< zX=cA}O+FlgI(=I!pYz>gNs*srMs6KDj>{P@-*|gf(AT1ls%7!?IGM_OYRr?$zfrR_ z*&jI2_i-B&h#hZ$1*xqIueW)cVFSo?dJ}_QopnXVkUIkpk3p@Or2fQ zMhmQFbvl^X)Wx8QbHKCCQvob5c2NNUT#@VIM(eq~>*(r9Mu>vRs0lDdWAObzsKr+e z=|5or<4rUOb87p_>nRQtd>6oPKEt-Uo{G?b&jS)MyZ5@^7>wG zwfWDWX9y~4Q9-}B9*A16Hlovc5BQByIEKQ;?Z`yXC zl+^SOZ8^Oo9dDuQKCLoBHA3(HV(55&L2zsEhKOZ7`;eJ4iOlz#4OQXg)7M;L`}y`a z5S;UCCz;GCT(hwzd?Q}qR~OvjYwww|0#8_8ErUDz zbtW?(E{ds6t~7p+f``c}f}`=o+&Pn+&{~!xS#D-`WO>?ZSqG#llT_o>BqZUUdG_y7 zEk&moN`-Jf1R?o1M)IVOxu96LE7ve`3_Mp=hKX>JO?)gUc-Jt$4XN1~a`&G87`_^H zU;QhMR2+$ORFw@j+EdHr<4vW`8xJ15T1m|QJyPMq^^;u*88|9dz42a^%|qD$lnF_V z{gcYuJ<9PgI~p#R`v(#kOMu_%g@3*X9q?Ujm3ZYRK8t5!wmMNEjXR>Ve7-scSY^M( zt{(zFlB(9IC>M^>#XaRYm^uf_XvH^&J6bVtz@O`t-}hHM{iI-C-*j5pjkPCHYm!+< zaUO-4*3DCIFS`A39Gua}E6*%sP@n}ykAg&C)N+5RV&jnSF|HXt3$L}y7I`(#Hkv5m z{5?JjC9B$B^lJ2o^PBF@W{DS-qVxWv%j7qAdis;rwjvY1#S*3QjVMRQsi6g{bND#G z9~sD1IuXoo)IKpB`V)ys3X^yi0?UO%pT`ykxSADNGL%6G=Uo92?ui5UVHQ_786V>- zf%nHiC0KTsM#xEX#f1)7TtGzePQ}YQLh=n&2;;CZN}8Tf>7=+iduT(*-U8*F82$b* zZTVwQF_YDj{35ri1%9g|>IcmHWoMMeL<8y0aJD&f#~J9U_ahYH=HdzwiQnGww<;^M z*6lP-4s=^zYrbBM-=P9#XepsAg**5CR*@0JHH6#@6TFUS;U|iOgmxZg80i*~&c|t| zk%{Xl(w!2|2zOmP+I+3{S1E`sf3vE!R))*B9SJ9Ut|pnd!-(M`RC8B3E=kJi{c(4> zQF1#?=Q(Too<{@T!wH6H{C=W^vP+OrJm=_E7pth^$fEthpcICKT$T~y-V`~o>0Elv z8_arc^*u};QmUMEvIeJM z&yw)h*5D6990JS1kc8%$8ZXSON|fCUw25?U~`=C+ghGMBzD%>U>fMy^n)4x!yUZu2sntA(#mH-C@XYSg2mQ!8xzxU z636+o)Yyr~crC70TkQ9Pmen7CZuJX(Qkx@&p_hjIN|SkS#7U44lHT{a+4%a3^Y+K39R2IUqM;TDHfq z97Y2>io7ZyJyqb2r~ro1t|8sK%tW$G_k$h*6Z8R;)cb9g`DD9L*z|^2r8&<(ZSZT0 z?oBY|37{H&k1e3u<=t;93&Cx4PSN(7mwl?jdN5D50lo4|-@k__xc!cBZviR?bO5>X zOoix!OyB{YCZdKw0OOK@k2vr&zd=Aej08sATkn7XVCyJvD=_jt zULy6L?En%P#i78}O|h=~a;xp_fQbh)%15>bpmsGNs{$6vvvI2&xsy1l%znyUj{gF@ zz~SbsxLxzw^X~{uHt^%Iv30dtazi1$6ga!Q0nRSo!@_C*d&AaB(?wruHDPK#6`9DM z?2!p=*t1xtk^Y#<7uac43iMj~8th$1=#MuqTB(ksNxe}8ztV0yFcA0f(0&xn4=dzH zZ#7##SN-{rK@YlQRsR+p_s%y+h=lD^@9Ofh6GJZ5@Vz{bVXg`4A8Cq?b>vua2_ls{ zZzNeAV*Ha`&Jk4Z=Ik4l=#P44UX0-k4yOXVQ9ACty|dw-X1&G(y)^t3bB~~u92PmhzFZF@SG5_)Bed z^=f`gICJbB)2b^WJ_C`M$jPW{&g6Beq+flI05XM*u994wwKTLvl-5>C?Txnky#U+5 z;xHn5u8i%s3D#S~9;&eB1D0wRML%yYu9SDz49>zw{(7B`ps>XLw@x(KU~70Q6^fiI zCDvMoNX?M%WhD5KVYnYSe2{L$qrMG3sUavA1soUz;r7g+#fNbuPo%Uccl0sY!deH{ zLvTz5owA+%$ja@`f&9!7f3d6xn%aWdB)?@Aq75L>;~??1da3-v_nUX~6-%hC^#-Uv zM}OcG4wZ9y0QnqY747y6ocrN)sQ!SuEa*EI|3Yp+SQz`|lXTc!KsL5bMS|DNl~Cv0>SV!8%9uXOG_9(Si< zvC?fehxm~>c6CKb{Q8GgF+{`Ut|`OiRi;ZOk_Cg&CI zDfqrKXZ7OTZ1aU6k1k3UW;PY*;bn!x2Vb9Fe^7hP=V%)5@e#+Vd~C?$8*hx&N%hN7 z#)GE~PM%)Ue=?x^);gYkof8F;txvYQ_M1772#N`GKA0KVLW(Mqg_a;xhxAveQAct# zPssY^ZFIm{@E})TPw~#=R#Y|32*x8L)zo5fHn< zCg#Gf{8&Hy?Zd-ZGv=|~*dy#!G^Ssr&pqLi)X7yW;;LSUGmLz%AdJ$Dm6x`1=(kBW zFVc>D7i)%tlOR4w%~CVyS^kiYC79dofr>?emBd&NeJf*6sx(v+Wup#FPc=m$=qR_J zio?DyWC(u&Rgt&3T1V^PT#&#?rp1}T56qy^6GC9`D#Z}j`352x^%prvuJ(PjDWYs+ z@y-mCuiL*65VA@?@IjH2FuN0cr3-ByaH-S!#s$&!ZCL=E$nEL|n7Vb#wRF>iZ^&-6 z)Qmxl=YYsa{aB+-iMq0FYh5;}f^iYGPdvH|5xO_>qc!P5>mvC&!f&aFB3A3^vdkY` z^wzh&)~39Tdu8utiiXPK-m!en;!P)V<}WEgd{% zIzoKA(LQ@vjRQO-eDH=tVLufbgtX#0r}KQIOgn|}rTSj^8m27=6?3g%_s#m#s6aC# z_f6%ag+jc5m`^$nQ7j?>r2yI!wO*S0G9&xcGO+tPBb8v~+|uN0&~`8;9InK$j=G7Z z_x(L`&8hyr_v$jNE3)g74NOemP}-Wged&+7H z50XMYQYo;tg(W zzd1T!5p_=m9gWzv&UWc&TbM)Q@H79#>2v=1K_!s>u-+}~WM(?f?r~;bBLcX3jwj3o za4~V_UoRMS@V|NoIra^_A_^8~&6%WL*WDmJjURdT5da8%tDR#kw{3DNrBLjukuZLZ z5P z#O#&Q@%lpuf=s3Vl=Rf`of9zt%^T;;02O_WWt6N;6s=5w6@?(YLz4+JEzb^TC<_!Q zbF)X=*^f*994G1Bl_2Fc|6`{a_in;iQW7Y=)k^mK5Q3xR#%xGd{=@3r)q6}+_o9FD zDkLof79a&+#XDLL=$QWiEdOycj}EFEo}pU~x({YLG@y#wx2~ZSEZ>&|7X$un!ye@s~jI zBbk;;Lgo_@F1w;G%l&5~@$azx%zbJv=`Tz-K#JXj;RExEk5h(`6%Hgl^6dv1}gK@_4OJNd=dRjXH%ywP?(2+$#FEGXJsM3 zxr`jIIFz8min0RsfntkMB3}-rRmoNd88)S?K))dren38Lc7@odEes<<4vQv|c>eOI%Ra>p4KO^2b15mMp1vP=c>V;R4HAy;0CTZ1> z=mM=rX5;1zA)JXF;+hi~22vND{smDaF{Qc47b;VEphfGPLvdS$#(l%SE6g0IIY$04 zd$C0mCbsLraWEF@JspsQnGr@0!E%De9~T;YevQ3ft&BS4UoN}z*KHBSJXsYW3eyp@ zUL%rKO@6SG%_jF~CdBJe=O!(kx~Q}3I@Kn(XT!nE$odx1jG7hbFuB%Ia1fwd`&1$oobia-Ko?hqP^UWgIj*cMeXl6)b)of^JVNU zq)k#g;7Q9m_}pQ{{EQP7%5UTkCd!J4 zyC&eN?``PgR|D@LJC4Z95Wl0mK~)7w#De0>>u2r+Ld_6Me{v;5?1oW_|NG13g3bZ|frgy0Jt=xUpshv@GSEjgW8Uex*EhBp z^S)`IbvX?&5$@HbjUQ?@4*Yh~q|6gjweFxG<$y=~dks8_)T=(YS>YHp;o~F8VZfAF zL0t-KmHP%4i1B>LVvPS%9ZbllGePX=s&EfZHr-7gMMqtX3-nGkTf9dU2Z6NAe7}@% z)F<348KGVh$8OHWoL;b<7QDbN5|X_;nJYkxs%$AkP1zs%Qx@yo(S5-akNdjiIaiI- zc#D*}-IE5_JySiZUy^y9jd&gg*A*ZhmM$CgQ+qjt&B4(FHBhE2wrJn0**5J_e&?vw zp~qRVKX#~4G~V}pxS&CVx6n*e3|x<~g@fHavFmY{`$Vh}_Xb@=b8$I`liXo7a#>B% zQ}d<9H(tjPt5J?z!&i7TYh6ZB+Ov{bGpf?k%N?dW$Y}Qmd0O7MM2y(w2T@|#{db_U zJP_^Iv*U&z*oGM^RcMO_zd_ZToz}vi_jbsspN~e_e$0mSUd6iUmCd|cokavF&o5n= zVfN|AT&TVtx<1a2NK{4Ik5DhPRYfUyVGSfh)v#;*fcn=+?W*R#Bnkc{dtt$f!JevH z(_PdQQm4LcD=JOhN=p&kqsmsmrLEz2&*m%JDg@SJh|0Cv^5s7|2M{+E0Nt`#-a`&H zwSskDF)wDE)(agj#Df$Unzhuevk*>M-F>5xW;FY(z>sQEz&9mCLCL>p%Z6kcc?r~Y4l6)Iscm5`S>BTfleEH`@sZA7H!ozw5Oj{(|xz>x~zvo&(<)uRFP zul@v&#EI4-Fg+8FJ)+FG-FnX=R6Mjei!T);vj=BE{t$P4n zH93%o0Swu)z#Q$22?r)^wqtkVCWS?7>IIJ6t;DBP+y;^KHbS zDLmmt)KXK@CeYKz?D~-|eIXzgS4Iz1uXTo!SSKF?nt_4fKdfkBz_?)#CP;JK}gF2)A z!Fr!lP&tXdp^733Q#h$JYQS&1JNMl-E`I?ez|+Jx+60k{iU!h^(1>Jo^4GGbwPk$R^7yI^E>@CO6z#z;mTnvSR*zmfeg_*J;wzriP{dL?m3dD*%>7w)4=hZ-J;EpI{Ezfay0-I zI-d2_Jmt`fO4*cWL9{ce&)D4aRvtM!pf}2n;{J zKeAsUiy^W$LQSpI^AZKeCH9~a9-7NtgX3~12JvA3ayi7?$M;HpLkc#ZZSv4mFsg5QUVI!ao!O<#j3Zg*tsMP^feD_z#ck3venDzSBC+Z|S^3o(#&Z_9bn}?Ee z*Y=tAQ*=Fbn&>Doy2o?2ITaH)*BqyE)2UDPrqL@QtPaf|zV{CYZ%h0-`kYnlWp|5^KEhC*ab+-LjrtZo#m0OODJ zb2r29iU-Wu2|60cM%;RJ%yqUP%D(+%7PdRK`JRsFx z^Jr97&2Mk&l}P_=XRkZc%2pf`$Ml5=>#+J|j%A|v?L4hCz$TzWPWAd7hi8vtb=}B>dix`XKOj2_A^jl4OS{t<_h$;XSy!* zV_Qa}qX~=wtcD@D=tK~Ozc~pQ@GwQ<4`)t?&))C24o*bZMb>5u4RfqqOq)IQMkPlv!;WDx`AJ)ub{818De)$9t4w&5~(0iCyLj3q3aPao;$8n|Ym>d4D z*{hmX-HTLnWL%6@bIER#oP0Jt1uwQ#d*Ml{0}?=lZzqdSe!fMmeQ&$ok1unC z*khO&sH-)e`o@V!;sd{2@N1{X{Dq82qO@f1@F7}UFx~0IvGz|Vq@$@@H&L0w-z?E2 z0(u&$l~s%~@^a-UadLWF<~dr2H9S&Q%5=+sY?ras&!%zL0|=~)iQ!^U{cC_P@bhZo z5exRR-lOhI4YC*}e8r|XAwAk!{Q2-v3;!I#=lR;B|z{c4Gb;ZH1-`^zM)$F@>$2Ak5x8xlk$A77t7`QAy z`O6C7X9Mdgfp28Avo|H-|NOVChd%mqL7)?dtvbjy;AsT|W2sh~YO&Mk{U)c8!GdW> zm|$}LuX)M&QUFF!4X%ET-#tvGLLFJB7(Y$cjj!79E>yGGI?D#&8R@3PNpsAbodLuh zHh@>)o|1aMFh6PScIC9%=DxvvBU0U6?{z19fuHHYniU^VJH$ZgFwn_IceF6p4sB23 z`WY36`xio0QU-)QPO1@{1G+Kyj&WRyXk{O|?Mny(vMlo%SNGb&#kF0D^mMoWrGrJc zVyXlX(p=Zyjtu*JEJGad=_Uu+da(UJ_WUVN2vB%XlhFdS4~hOQ`uk zC%o{)I+4zUEe+9cA&P;~y2tUd$L@1HY-u?HA z>G?5+t{nhVpo1|Ez1d%D+ST4#eQWR=PIJV0ewUwe*EnTM90&(3%kE`$5xxgC?>x9r zS{3{5&Erc!s2vb3T^vSrMspd#G+Y9SvywIt_mNe9Al~ZrN;-0gPb~0;^{nHqdDK2%JOxNsuyt^d*80r&3pZR{N*haPQT^R0ILDS^P>_ex?Wo-sok-Y3OMZaDh|%-3v(^9LL!k(wx;!MF^=kZ%{)W#AhxGMiW(7sDb> z62Epa?+vjtrTzUGzcv2^!W%xB%_+zs!mgS>#$FuEZ9XumaUj1EbZmd|aq|GeeA{h; znkz0*?GK3rj-auMB$dI)-47Il`b2G1qbhsC|Gfq@2H|OSX3jlssskb{z^$XyO2Xi$ z;Fp+q_y;$Z8{|e7(4GYGlQzi8->*(L@L)t=Qj7V$6~Sijtw1)BLlREvB%e^C9e_TvWQvgZCTikd2KmiAMvh_EPthE0C4a zEV+0kzQmndt6s-WXHU@DlX1r?=#K$Sg_`fev|cl^Nuz0}2Du=0sTHRV8^i#0eV8f1 z6UzrHY>OFUySnMn9N`-sEaaxL~AuV zDLbkiu*=u$?4J9Ii@3O>iyYBHycTQSnEVJa~Bf3 z{^2%?QgujBtz$1DrZi`E2hoqXDSOe$7*n6rg2WBBJtLCaG!;xwiHm&($=p=5i1rQ) zvftT*?mf%F@8lSMY|a|@fp<4No>=_bxUQ%l@1>9FB*dBQoxcAI&GztKl+15?t*}F@ zS3qiMih^OoX?3kbWv&0}&x2Ya5{}nE!H%EWiW0_m&ddgle`!$2bLzM1&htr!G5Gje z<(BvQ4@NeH(lSIhNXQk28L{(ZVi zyvJQ&_eQdjurFaX{xVo-P2nv~rb?SsX$hpV1fMxSi@@)E-s5iCrPwJw!>{NZj4X1{ z|;e_nQ+DbE}SCb)g zxZ8t{ag#sUjB~s{1wBMY2%uGtpQ$Es?bwESxuJ=mxtS8puW!m1M)9YDsC$U$W+7K1 z)-ZYXZbHmdQiOo0HpABA{PUZa9iokVM=3`J7jnC^YW)>MmfxZLWBQ`dV%rJs^(MlT z##dp*h~LF_gYy-B3;yHQKZ_hfW)f64i-_&BMgt$8j8idy_|z#!Mj`F8`;YRJ_I7RCV;q;<+AO}qvTKe|I|JMHZ z=d7f?Ht6ou3_4N}b zmg$GGXE&&J->p(lVMsBItWy<&B);rFf5?)aj`2MaA7IW+Ha~U!D8EdD3TX+;{G7A~)f6{en0Dm)?#6P0V01cEuXa;8Oy18#iQ#uWg?fMO+-yVFQm zyP~@+fWeb@{#EfJ>vKbJ^u(q>E|x}-7-<0;^9kV2`iVFI>{>k=>K+U2W*_wKo(f+s zc>o{d9095unJKyqAo2POsY>yMf9q+kpASwYfD7RYqz9lU2iDZJ;(&m=E35?&WmD~L zwE~2B?R!_(VX9sEzra#^@3!oxZPL?mIia>6|7jud^L}M~h{DyDEYqN*M6NAx3c~ez z@(UTJB9(-v?hd?>$-aentE{UPhP*RNk~n>favQ)bFtbFa95 z(0Rjm`VJZNX#>X0?kID?<3cI?!hQOlsRG4Aip8ksH+?0zUZxX2w{Br4sTSpVO~`2M zC9b~DLLe&@dVE)Txw=tHRV#96?$@TP2R>Xexwve3o zcUPnSs5a2ANuRSVFLjIb)l)hZZ>&+Ve=jd>ORsQV(;Hc0G%}@5Jut(fcwtd|#F$O_ zGdh76-hMR?mC_y=tVKt~%zMXy0=+ykk!|m2cz&9kpIS`Dt~A%fd54zPd*g5m!fkUwF>lr5m0CvC*t^fQhfE zi(s9(K#YA!VLR&0?+&LD^q8uGmiQei{(jgtQvC#{WlT+_BoJATAm)D79d`S@U3eIs zqVImL74sP9>0aJvc$tIgDAB7aSge}TPb5i3GpaHFH?z_VXIQPx-qtp)}YlmTLZ=}Cdm*~9J%_>Zlb?NhbXS-EBiH_sS z-l^uDMYW*<5y<=GjFYmFe&xb$`fTYE)yGNeVWae1DI)CJv*_&+$bylJ4gHGs9ZLaK zv7f!vS`5qfVNUO^a|y4GPXxMN4nS0P$G&{s#%#^-ZDS}-dm64AFEFK{KP2I?8?^3< zVyb@vdt%UrH*1LzK_FTZrBlZw=4*8GX4pK=W?WM$PaQ*B(X{Y+hLynx;2IvL4tVsM z;A)wJ=nnP@OjPbb{N$Lc7%bpTxDf51HCI0*Vn-&eu-z{0W+OZ< zZ~KX1QfLNm{G(@i&{T~&Mv~a5r}|g}{A`$hb94a+W@zAecOS8O!I_58XXG3NH6W%T zyVrAKe;b6u)CQ<3rlb+hT(1Yv)RFDPdzGz{@Y?}QDta$6Nd5;KPlu;yG-EwlXTKQT zl9C)cS~INbz9~grf6;7h7@A#RU4$s|c(fWl-CvM*-f;*I%I{8Cf7~CCeJQ^Q6+~Q) z;o~G=HZK`fI>^lr5C7IV2P8%a?#_57yUX9Ua_!E@#t(noBAi^DnwSgS^)jUxC|pWs zJ4NMleLn>01=a#TDAnL|DYftk&{?dB(23l9MPRYkZV75)&ckA%%&|yWz8UWLbllZW zw#iB1VkYeRL-#VwaMsQ8DVz&;v^Uw*IxYOs@2Ra+BsP%UK($EpTu5BuR}pVwKO=SI z$)yU+mio)L=boF+bleQC=$!_eyFOwkpG}Y745Q+(}>9*fqK*-H) z`AvVu4a;di-i_UESjJXZb3)-7U7E^9{Jay&`2yI>TP;RET|etOx@Mb;y7|q4=Qsc{ zIn88EtiYJh-DM%Nt|Qi*Yo#~QfAd~FyZ(%p&}hNT@XkJH4OBK@m#VjxK}Lei*mXwL z3%R%b6jdmCNx38gwXylO{GS+^prCBr`S&wZAfMO##+ny2YZ%Lm(9M$ON#RfPE!&yD zC(p#+4Zvd%*Ec{+dIOFX@BG(L=W?svC2@utzZ>zJgYs>M>AScLp7|Fo+s{$?TSLnX z(`Rn?kz3~r3q7opi2E=5wgBPz&s!#9K(G$+2n7_zVPIt3FDL=ytCP`-w7~25y?h%6 zq*X#nL5?Y6gh4kSZ+JyVBX>?^hYQm(#9209V{q%S6s?PXZkydd1JhTiBB zpBFl|#Zdb)1Cwxl2Rz{8XRdAl$v)Mi2@wBx+M&=;kL#OwK%uujZ+L12)JOCm?)ZuC zJ^07L0nwYO0nor{V*w&v2u!rc>yE>L-a%t|h#;`VZKVyQjChv;`6Tm?fqW7mDf*^| zeD8r5kQ6N=+y=dAZJ0Xt`TCy(x4=~hS|sW!!`6{TDX9moFTu+#wdsFn&+d*50a-|A zy9{*T{Ia6br0G{{I)7UD-CCF-$#NxlCr*>_vf0U3?lufG9tEt1IpsOf8|@A3!moxO z@@BRX{ifWFpO5Dc9@$@n3cpz3$@SwXp?GE{$fN|bkl3mlPUlo2wSM$2f0VYjXq~G8 zZNq-e!=TIlvdX&4L-;1N@wr6l({)K|H0g116f)!at>}Pk8k^_b&667(M{jaG&pUWN zNw{XBI4LE)3n#`;e?R8DIaf6wqPitM7EQ4wCoT!vW*K#&*gJE7cO;g)q_V(#PuDEu zI_=UTGSiH@kM4yABN>7D?_i?7ZFCKFV+;w01b2`xF-iNYXy-K2V8%5zuV@D8r^V>N zp2L7Df0brW37Xs-T^Ije^8w#T9e3Ji=?ab-S*5+b1lzoe?Q;Bei=b4>ewL2n$A@$3 zUrj&@%bpbsbla2@VErpm`~g-X)>?Lx78SU*Z4!%Y@iD1USgK&ibWn@|*VLUpxtmrt z;*@8zwbH3+F~2Hf33P|IEF%7@@=^cI;pA=I_EH(uK3Q1oq84GMl4mC0mEyc25fNBz zn-eW+^8G}FGez|Z`nI^~KtI&O<>D?Ug~=Cxdo>~k%LhGFPyeYu%AboUIqV?o;p)P< zc73}p2;vNkuK2VDjld%R53Vy`7HKM&2!b;HCp#{8a~!_K_7^-MPysXgqT7=NPLOu0 zKLSlV8l^$1QIS)#_6gE-xl)baedW1mH}Fl2$oV8yMy)KX8&p_W@ytIRlCy&gy(xZ4 zc&h2bvu4hE#wuDwM@ORgRnbf6r@j-|1YHK4W<)@Cb9eHBuVz?@%$Jm36M*yo($Y)H z(``fTv?V+PyF<>Smd}W=(1!DEfACsW-`8LEVaF9OFiFn`Wj+zNhne68 zXZJktv-x@~ZUg+3kljpuEht@1J?0si9Eafa2SAk~PJ%DFZf719*PVr0TBuFG>CIM} z_h}rn{9nQ{Pa4-%(?yTr7A|=a>5EY+qy(ITsj^a@xwYuvb=c4H4|&UQkVwO^cY?v= zM6>;XI!!aMye#`kswN_Ust|jdk(Mz}SJxAAM(Bf)CH_rc;|63tV#1~C1RDrXV>Q<< z_5$A6WRSST1XX_EDM5V6+7qkpeS&bY-g-Jr)Fyr4TS0xldSxz5w{`gyCFf)+eEQir z-+rlQte3AEcTOqZd`in}G=lz(qA!UOM60JIJqd}F`&oPO_O{eqCiPcYP=XwhBl%wX z=TDmWXSV&MCZczIiKa+{yMOL#=kb-8S^|2 zdU@Yopi7V1yXnW!xf1o`PpzB5=R|3r+aEc9u|2s~QMnCtTKhQPl6Es*$nrWw4KMRO z_zB`?moLj%*NejGz_0f3YGTD@r7=jW8&R6uFXOZ-_3FBm^~&>ZRaM??4wl~qzn9N0 zOSiJ_qHY-Ew)R97>{#~7FJ`*UZVrezwa8*SPYchn`gMC(e3%TL)1BCi1-wl`H6VJ+ z#O0!V*OZrLh-*J=u9+M?o7AkILrlXbv}=ded)f%pLgsMdxL}>K@>pLx<^8PleY<3e zjkh~ek;DbIYVUpA{SbRkLYcZ#zTUeN0o~LDBYuf*>f>E}y0DpvWIeC>)`CpggLxJn z>@rBj?g-<3tu+c`qOMoQd~+f?W8HS4WD$(vd?vBYHy4w$8nJTyw(REIeMbEUrRqZ$ zSP_Whol?P-n_YFRmIFkyFpQy?yP;;S=sy8yz-b&%3b5z<=B^Z>>K}8;bg`)o$yW&L zrsr1#7f8v12FqN9_h!xqUqI4B%Qa)*dXahVyROq>MZ&HLfcN|KZSB;MU2&38r4JQk zQ~#yg%*NeJ=lmA!1dh|bY?;~_=bQ|L*`ojM+Zx&1nRX9dJdDlE?W!PN$1SV_h_#fj zv3v3)|9;h}5uPmJCLf{yZTO>7Fq4WA6IV2Vs*F?f2d%>Zb}xqk%zM;)9;gMbJp=$c z=EW1S-C;nJW^b-sHYd2pjO1&7F+nE!djL!Q*7BM9FNXU_He;?IK&Jy+IeJEvbo6I9 zr6>dW9+aEywzQ*?5Va0xQAQFus9aVx4EHF^OaR;0L@fPEaRvz0?4u=Xd$3tH5L|7L z@sec*d8XNG`VxzV{|Hv8a zC}vFu{fjH{m-`RnN+`>KUPF{S*{AukT=(dtNns#@T23r$65bLuU`v(*q36TGx(<#o>F^>XQr~PxCZ#;iBDK;b$EUc02FXN`6EWUoJQ} z)o3{h=SltAwPGr$P=C^)=S-)%GkuQhj3QJIXHJLS7F%h?zW*~vt-d4b*vDITyb?gM zobZtFQi>xiPxCEXhV8|8gyvMJ2Rk-fAi7FO=@&h^I#)VQ#d7VvuqV#!pa$cUJI}Ui z=U+a8L}o&8nQHEQ4gSCZL)=GC%1+*LKCo>b=bVJ%2jX}ee_dzy`u05i4>KQ>_^Zp-emAnTgTQ67*=BQ3;!MtTu0b!y;BQ*A`PD>9VO%7W-ZE^{^`|tAXGLWL+8w_&+Heht@+G`c7Vq z$09FpeAhHbKk%hcoL2PDcAdxUT79vjRmSc*aCPB=lO2!Faz?b(Nz>BVlpWu#pa0Ri zk#LJSpFj7@okM~ysGgi;VrgHY_uGZXYZ-X7JOxWqzzpJS6b z?+@LULQ^^5qu|Pj`*>&AnaVF`w*(Z4or_Wpj#-HkT~*7D=S*H}n8M$s2^1Zw&!tx) zwX;R!3c{)#C{^b+37vlSm1_!^VU!gs!E;g+xn{L8l6JNr#@vQPk2*@qNd(R>UxH2g zZ84e`Imdz}op0zzXn#7tp>rl_x&pq&jE!LHCX{PNp>$qYm$$Ai9e#{?L^wqF+nl0WXy=G30+>Q94->G z(}wOCZkay{4lLXso~50uJ6_2XdSs-sNDO`CREh1hrxb7hZ!dtn zYF&ct)amt{CT7RkGsWH36*~PR8IG@(2f=3cc*sn*Va0GUnSrm+vG`#G-jX>|FZ^9% z1(@Sl{GRwFK7!`^qf0ya`=WO8*e z>JTny0a;VZ&kzoy<`x@E^(Q}6i=Ts7#1x9MmpzJuO!>y6$G+KYMm%QG$6vIWcHXyQ zi3EpO|1@?cV@vYx4R18If=>WN1#6EKxe{r zi0kP|j4WzvOi*L&d)QkiB3iY98JP-yW6;QHzrilf?&I*I1*hc`;gWfZWj7XDsNL!J zhHHt#v)tA>syI*fxkHuVC7ynt5HILDt5n*U?83tzjhVvt4Vo3E7S|yDko@ei%~SZW zI=3PILwQP98#!k<=Fbr4vI{84s5SI_UWF?#W~=zfsO&+OKIZv;WjUOaWx@Mhlg2y3 z(-nntekV@mhpX!TOdoD{<2VD%gG?yN4;6?&-{n5J$_)@pH+AHF)b7&bKhoeN^NYhb z;uRaGMgaCCTo}9pGX4k0%GK9H(+l*l*i0=5Y2m1 z&ceGli#@DC<^l8^FNX16sHF}5jqzq?o-v#f?lzwxA`bd-Tc_XA%y@WTc+PHXmiY5x zW)TV_N@K}OqnraVv}gMX?y|e*`cR$9n458QzO-OyPvzH=-zJ_K_fOx`_sOR0CmC1u zh1kcnLO!G9+*nfDKiDgj%~dd93#SGP6iXCyiaBCD7yQ13y&oQC+akayZA|)(3eloc zkB#`=#BdI7FZ0m-(Y^_d)Wa_uy;&b^tS4v=0zGXM0Hd0_UBW^<+ zPFpzj_Nd$cEY>Hb@a`9oOaH+~q5UuP|04(Up(WHkahJwXC~O<|yhXQlBDAP|MDk*p zSGQ$H`}93}bwr{OvLHlSua@3~G_XqL8ppp0 z=;B_X0C=)0Fwksi1pccVerpd#ko7nbqJSA~KRMZ+uSMOz8TO(59%Xiw!I2Z8KXvbU z%qg%!y?y8iX5)_jyUx%^=r4%y0hYBCuJ6Ee{tnYYe_}~H+BE|MNu_hQlZp8A6~=%v?wpuEd(S-gHkUW}*<9*=<2L$a zL_$~u7B+EGJJCGz6=-E@o(!3goU6qb{p~*@<=BO|3)>KK;B~7kYBvBq7K7ClEc@=a z`SZ@+<@k~jz+K39&smrJ&ljh%AEK&LX+Ogmo9?o|Q3F=GmUbPke?-uQ3|w02#d&5d zEG1KWF!+LKBRD?Q;}T>+tsKV{TkghieuYNncD4qq54={Ec^${jxm-W{Df!b}=N69qyvPe5jYnyf_;@5HEr7ak?tQ%%nzHMN;eE49DeQ^!{}!=*@AU zKa%=1^RGHy`t-i1`uIjw)=zblhh*Qtvm#%F~1i<9O`I5QCHo%B(f zqw82gB`PR|#fs1$(?$G^^OgTZJ!$XrjaXHSv_D&jB2}v8e(?Jx>}qf9NK!=_fBxSy zVkVdr?2wXjFPIu>y0_aBiv6=Nyj5P3wZ5NkwvBl_Zb!vwtZGA?%=u#!*fSiZx9v*a z=$IFY@~_IS8*cP2Ec>IjbQs%|{DX6Hw?~^h{Nht>L!UvT_lmR+N zoL73}MXA6Wkw zkX||2FQlFlJVS7<>*!W;BDTa&RiNI1{;ud(g&`WjaX1g=b4E0%l?BS2+cVxi1F5K= zOOfz3DD*AxoZ18yEYIEKQ+=Rhmc)HUz3)M*%YB~Ft#OOJblm@PT#P5n7u=$k`98cd z(s7Of>OnMZFQ1m(?rCk;mU0!gm-?@(NX+GWAok7}SZqM|+3YEPz_=i1z1C00S&kAz z_jh!nehp+@ELQ6m=!hXR3pLJlv&7#Eo#AEHdATAU z7-;drD%oPPo73iccZc`J7E`T)I^}ynCdWCcr}R-mOg8ieqm>rF3@g6A+~yn)2tc69 zJ6@l~#-!n8elRZMQDde4D1!pIlUh`+`Q}dFLCvDaltx`u8Qs?(eFL`Vso$Txy?ybK z8K%DrD|B0)2p6f{memJMNDB@ozr0}nvLFXqoL$pBfP+GGmgh4&Mz2sTyHgmh;q}wO zBGyDT_AI+yl@L}{wwmBc<9>hKZM(JRVjtrr3T5nmA1Wv%WTUlke(fs8%W#~f9#0cx3w`p-=_Cs%Ix_uCuqbS4cIXzw?D+SI>)1r0^UXmiCcH$tDTw(r{*Q@b=NAT(GfZw+qLcDp$Z*I`NkY_7feqf&kVm+J zsC^Cbi4N+9MV!wNkQr2cm_k#~bD|7@>${JU%Gte1ZTv3Hc6vx9RG34@0qzT_y8Q#l z0EzI9|44rI{U^T?Sxlc1jq$hX=FO5#>%spmQ#;Rv0+Z^^*|UkjuVsy0_z|~RbFTZh zqFiHJlb2CGHV9NNA{deCYG`N<#nBTl;I}@aiOnzderiOEBUEj8S3E?&bIEJ3-}8n<0ZyGtJ3d4gh`Tzj;saELQ{l5Dws(u?JX@ z1f2k?|ni~s9~RQ=lbdXc0UlGXDyPriKa(xF3p!2 zhDvF5tgM=Ds|{(@S@|7{pN>{MGkb&05=W|Ui$~2jRTnutHn+6Bvg5Y%X{3f9t_-k5 zUzF9qa*7?`{Niv%>n)a|Vl{LfqWmturVf%!C@^WaNZ4m_;yywZNUu4a5qXq--`(xy z4SlZ^MSkvasZ0e!yn$Y*DqUfw5SAtytr0uP3Cb~L8;*JzQ`GIK$iQL6J&66blYZxVgxpu$;Ya&l+uI4eZ|3$Rs1L0u)rS?3N=j7aD@KS|DkJ;EPd~BUbgUeT#x@lL z&ZJ(ZSAcU|YwVn5H$Unl@ae+_EJ=r+3i2u1J9?mYfqQ9!v@Z5fWR@>e>X?+=AJbu4$Br6Ny+G7k!S zoQVj74kzf)EsPrEJg;XfjlKoA{H=BJHwhAxL-~`%$urrDe0%7()Z( zXxEku7YIBcEWiEfLrE}1sufDpxgMgnjhcLWedH2<^(_X2{z7NxWS}G}|7+%OK5!a* zIrHrXgS(eQQu$T=5c3n`Po+Tj%T#b=m3jsLAyJ!)fviVE&gRk;J^hy zCVd?K^}+ZcXM*%&+N_8Cu50P`E=*2`%w;y9rQCvPi!Hm4fgOXGhI;~+niGEE@b=Ir zPS=*>)4RNcTpRXivlaIi*LnbF-)?q0plqjimlNS z{+9W)awd#1bSb6E^0byS>Sa229{lZjEyf3?E3+S zC&GPG{3+>Up`Dd_B87kDx&JQ_)heXM*b}9gSLFFCb_ku>%jBez*(V!QW>%Y(QZw8n zZkK~wS*qx35(52ZE&>Don^(5YWakRCpmDc!PBqdACl;J3h!*B^`k}#Hfy4dF$t$*2 z&|+$4xddXAj*2#Y*bX%Y|2@L^@tkktuxz$`IXP}cn*m+o(X=RfDc|Uptxa;l;ulh` zsGtwEiqN8;jnPs4kfYjQ;a_rsM}hwwsUJPjsN2t5?#7?5(TmE>$a+~!6MldiGaed~ zuKvcvW0#kK8+_GS)NKYbL4d)>wkCzoLk;N1<1s#&;@rG>Ig04_`%X2niUSm@>;~scpX`QWZWWKyuJ7LR4XVt$=FL`0 zezPUo)6Q}^iq@#=DHM3|#ilvqHQXE0jMI#$yp^ia;CoC@w4iXG6<)Hw$VKqody2Tt z4&Jau8(G<*!i9}1Ie0+NQVwAfq&E*PBs;IRoz5*31OGLzXY$5 z-H%Qv1lbQ2tSg=qe`A*tua($IMkpmO6-ln?G`^Z=E2|KkHROdkI^2W$%j4&lUC8x?*ez7-v{QONXN zD{|@ShFO%0+Ce~d_wXez1~og%z^FLUl8|Zjc}!eN*i_-!O=kmnwIz7lyQpGX z?@=L5J+Cb=ciCY?E~T942e`pHYH)7o%@ZzIOnrQhg185nS`mT=7SMnm^{~_g$7uex zhW4<|-Q##c4GqN+tx`||Q?{w~QGmu$F6KqOM~9@ffk-n@p9ncV%8Q-@7ULtM2_uEd zHwm*2CE%m>)TupW@IMHYM5AOIK zjTI*RY#x{}cl%?-3*%9^IVwsxp~<2wG1|85^__zYJ~mF`8==XW5&qD#>%rJ%R-UKe%f>Vm%&oH;%E zaQfWfm6gV9b#%HX3vaLi&E0d&HW2{_-cSQ8uGo2%OwW1E&c#-pdPA+;`Ft15$FjC) zBWsf*I_jc$4MQ5l{d-C)_sWNMnT?IyJo0Ez3h_u9cCw~-2BsC(*=kuGsyE6Y$n$bX(#mY`uH)>$pP%O7(AMgEZ~} zPvp1KzHN~X4!Wl*cMex4aF8A^+Z@dci`&|xOr9!7mrI`dFl@?yQH(#;=%}E}{ob=> zR&pJ;x`-1se385AoV>j6ZoBTq;I!J`)%gVXH_h|M=e@1(Shz&&WK`}P(`+No&(AxT z`YTvgkV+PIq#F(SimH?s8(Jl^pe5VIjfTfeiQj)2U{sM^vYz^m{<=qEbQd1( z76umF5Uxu(ovFB{_pi7#Tw_*qdgf-PRb@DG|8(Xibkp>vx}mV?@v@yIZxkhR{2+Vw zJM;Ad;be{>^h3N6Zg7=|M~RoL zJ;yGPhtDl@#Dd7!Y5Kq=ZSyg4LQWgK8JX?l*yJpcjht~GLgY8K`2%>HL zS8eo{%5|#kccU_AwgL@s&Z_IHI!j^GXF(d626P+~?ccWP2#Pb4tQXvc++fge2)DZz z|CJcl^ntO7(aX|bD8ng~QcP*;Ij)-3tkcz%1`kXlq^vqosoo|h+7SoY$12qr$lh9+ z>xUJChDJikVWq*--Z@t@mz}dPbd9+1$(jR!f3w5IV5kvkFHPc0<*XN~k(y5GX%01D zGe4Gr540cd^36Ku9uL=iG80`ekr(9|dZO@ovV$&tBjw;&*j>!-0Tnitiko%MI7A4W z{!;6`bKO-);o>X1g4V;wMqo2SMkktW4wA%Ff0Hxk4q;OmUQGbYg7Jr0uBBkipGSvR zSJ{KU`N62GBG0;$nfYM4r8r@|03izOZrot#Z&e`cJusq;N%1_0fyfWz62GXAFFo)0 z6`9#}A}1mY$*=6G4N47FQ*(M?T4h}@6eUWlE^w3t+UGwdU;e&44b!LDa@>7dpE*GJ z+yV%zde{YTy*v_%|3y6Ed<=8Cy*#ZSY>q!H$FF%_24)p+@Oqa%AWf5=g6ZFnuy{w; z7a+M8ggRGG zpIaeONdp=4=8;QwUs|VLLjUS#rl~@kt{F~$Zz`4j@GYATj*{+3#7-*t{K=oL(~*&q zD?E7tzox@4@a+pH%3U6={mjn0K}@R2%ac-$Z=c4~Gfl~%IAZqgt?sHQe}Q0s z4Bg7_q)RQ?<3mzQJ~H#)VqN6{W|Ap~wL%oOr64S7bni5E3-Y~DLP3P3s3MohsVBW_ zw9Ykb!H}0rK1ZN7o}XoG>5W0K;zG^skPhFRRNzw83yo3hl9RbGkKqSqd{j&9YkKs- z#vf?c+F#@4Hx7;~?z2hbCWmva5dSX^J#1u9QwSk3h;f~JQ2&9$#EI|sE`t|oE%C{X zE>C+c)){g+*YZDfBP=0Ncj#POA9f42X3?2{zUF(Bnl<-=CLxnw4ojOvUy$(2k8U5^ z>7z!nmy}4wyfa3!Hw)UiPPK|sq=vZsnAf=+^4@=?K!c0H!$(cy;$q&SBHoxQM3L+< zO+0<$mEOa8WmOI@QHt+*EZj{7l|OUCd#5e2X1XrTgO94dSP|C+A5OuD_x2M5X-5x% zf<3QteAMyvEE$5kIxMY6L7;$jj`FG~q37|^2Jm*O)<(8-{g%YPVmUn&X{z`rGbX4Y z+iW^MD&U1}<8CWEEaojGa0GBV`d2!4BFk*|7%IQA@UHlcmxwNyA?zE;-Vl{HZU>r~ z50)=44V91KIQXUqmXhoK^_^s|#iO7{!TsaE=KwxS1Mp3<*GuuCC)sZ05Kj+`HR57E z%=zDMemK|BG9A?P*Jf8FD&Mme%pD%NARe-vRHUd!}R3y##*4+1H}pd zuoNFb3Z5S^SG*sqN?q9J&)!mk=LqRrn_3ujw-S69>(P>UM+d||)i@^wW?G|{ZA zZ;r*7^VgOUYI1a0nW-+1N%d2Zym866RcZ+@PT8UfXdq;_7{5wqRq3fnrfaKiS_q%9 z-d&+52Jf=py)rSN~)qS|Etpv-G zp!4YZ9*g`~NZ58Dq5G8TPRk?}ffIhPc#}K+odbi%W>n+1yS_?c)97JWa(+u@7|2T+j~@B=TNe4kaG!3Pc-S2B6>B zulzDD-D>mu>J@U>D>gT-=Q97WMc}`F-pes?ZbN)%gs-Qss(Gg)fo1ulS2YyB{Ol*2 zo4g>){T~X%THAlBObxrYg89RiK>nxtS4#CF9q`eC{nz%cR7_7;Swe{8$0YsyY5s_2 zu#PV~^U3%ui1Q;uqF0qj#uqK-8@3#Z9yLpRmuHt1x~PH7N-V|;8(n!g6tc)v zL`WM++w_B6A!R*ZAl4u0_y@!I^ShODyYFW`tqf-8EXQxNs1W^;=-X`XRaLC+;KNStmXmBU#V4jal zs?(64)0lyUxmy`s=Y*w~rh@oOkph3FyN3kTyf?K^KL$~KHSDz;{knj~Pi{Em)vB_H zPwo6f;qi>x7Uliz?YOv(V@{@vzP~Oykdo*#I^ABj?`sRfDd)OTOk}urNLpt;W@)5I z(_8v-*2`v*nVn%kh<#i~qz{o6p=BcQ`rK?k*@TLF*Q)4U(FyPi9d z=vV*k1sHJqAS@ZncQDht$_Nr=MGv-(P3q9SN(l-9{;>g*cipA_G5W$$W{z(vRi0eu zp*7#R8>kva+4}xM!>R2Bw#}8PyHzNdqQ;l%EPAW&AOfA`Kyd{Lb3{m4T@ujTc_QRC4YGNEvDQ$KsWT|1cb2Q7an zd`YRSRkLRlEy52I%zBr3gF%Khna$~olO)~{;H`z9%hO;1cosJaT`bHg&wN~dnYW5o zJ?<1%3tp8NTx*q^v7;?|;4%AF-oA4d&-NB#Tal*_M)b#<_e1ZGy7%V10%P-AU(c?K z&v`dc!B<$#q41aKBic-TL%G?3teb9@EU;6{>;OB+^}Wk%ZFOv zl*rzv_$Xd{dusJpZVmv+ZHB;Wk1Ly)-~{aJ!XxNO_Ed=R zplx)c0qihJjwX5lZW}@jaXXA=!rlPZ5-We);8Bq$f&YlI|J~^iJ-0^HZK;gb+&`~b zMgiPqgy@04AwTpK;sHZ{Zl`Qoq;JP3r6%BAa`i6WoSOiV-qxKb*@LT4t?B+RXQBT( zE@2m`&7(RWSI4KDf|^69X@b+b@9}g2sO&1dYEFz9YYGsm( zS0QC6T(651f83RwADP>)5(7ME=m<-38{(aB?qVMZ3Y3)9{o2wAA=+q1mGYC$7$`1~ z;UNV6`soIF<|8Chc$DAR{`3g{9H?We?4&9~A0Y z-k&r`kFo-(`UnLUqQ^=z&A+=%8_x=D(QDyl>g4CUEbx$K8WDSZT$xkicusmU;dJpe z2wrAjtuZTQ+}3!txIIRMGUcE?#d@s^`2CqdlQ=M8i`t>)kxP;o}$uE>N!IQ);%=juUAC?D= z>l3J?XdNX=ZD{xuav5Jovg=}wqj39=oHLq4GU zyi5rrJCcQ9zSAi?VWA>5J+(S`&Xm(Xo)UGk9yc24Ko*<)T2qRWclittvci%^8!zJ| zcW>YjiKt1z>-J1=3KEIk|FU+C@!PZUm!_->D#A{X?6FK^W2}r#x&NNR%1~} zicELa!MAvps`9gdTwALn#UZZSc6+)i8P??t%1*~n=RSuZ8~vv(r25QA=N!td8&&o_ z-94_+OMAO!V%#oEWvZA;yf4^DJRhU4g_T|`w9YG+b?(6eUGlAdzR4%PSvsde2NoXcGQK7W9_Nd-sjMvv3n<{zGB3m!Y0^Um$gia3gf}ukj!~lKO?KKh>{;6pVX`3+q~gD*w}$ z?SEkAGgsuhziR(8Y-#_at?K zESZ#6Z?jKEn?Gv68S#XunsOja{eucT)5La&mJ@h1&Om815vEWo#7%PtSSUdgAi#ZUzU4PR*x}SRADG8lD z8DxT=!fzmrOh=+|R5B(*i?(3mxGk-FK*Gt|n*02>+nX$>+E3#0Mqsv~xSyT;4r9`^ zW)Hu?N<#%HQV_p=Z-+!7w;~IkBk#}Z-4T8lj$<;&CzwFr*sw|kdBn_m#z@zW=iz{r^A}Dhv?f z+iQ5Lc?bA)krBjWmLTh%d!uH%vQs==UJsf!fr0ncm%H^h!kL}6bVc;h87iVvKOW!? zHhjmo11scwx?<5F%^LKRFv0k5QF~3CJ4Dz(*a~4kYa0 z;s!G*UjQxu%0L|ed;_xq72S;j_g(Bm$0ob@p2F7e$_3moebg2YZtzk!0Eoc={}_&v zfrjQWZ2`LSp!fb=J#Z24+*9bHTr4e;{+Y5)5|o!{MAhI8Zm@?iXQ2#qaZjD72cWju zz{s8twuK>0?jzarHy9wb|zC1GM+_L`lFFnPTya{F20a~8LckjKg%V~$1L;)(9Ivji+?-K%!+ zgS8;@B&foH+uSa?G%zTHVBYRd6TL_1z2@cW&UCi{#RTtx6BG;SoA+7lpe`RKG6~RaP8#yaCBB0 z-Hoc3BwKN(JCNj%%P~~{(nl7r^);O^QJjmw0<)r|8p7Z9a*gDD@#*uqWs$)(QI3Vt zq|`iG3V{hc2sPCKtL|~_l<4*k+RQ0ts?7+Rqoz<~V&Y$@QImFBcVc)TqDts@?yz5G zK-4MBS*yzQ*_u+Bhw+32X`AHSYsjvoKIKE==hEy)IS$5?HAzosr{_5$&uba)Szv(J zy32=7I@A+tO|}kAMhyoMYdBFil7vA)PVum>*i>|OgSXo0cw5JnQxUowB0>PClxnp| zD4j%A@XvQGxoyh3gli8l@T_=HI?aB)6Uvfl--s(Uqh9@V0rs~0ty3F&s$9kkaF2A^ zd&sP0)Ui07Df9X33b7uD^ix;_V;<40KFa2@^0mt8FMFQFmg;WO(UIj&vB8sgI-kaO zK^D|6OsI1SnhweslMTGLE1aaVN4$<+BD_9*T%U2aFYl3NoYnfQJ+f#p5{RkxEcaOf zBCW&Utaa#&$XlDWR)lopb$c3ETlfDcOMUdN`C5f?p=!vNf06x9)%n-)%W`629^J3B zcE5^bkE}J&-Zr`1i~$6S8eA$K+<2d6uiBNiPYTBf%hQB@nLWHa^GPF@;1@LQnr>fS zUQ}F~hF@a({Yu_}{!x~X4+97i!O=3m8D{%Y=c`2{y}5R#P0X*lL>dOEik`T@*~3lz5P0 z6-sG#r%7qW7fqZ*@$#xsp?f#DgL_3k#)WHYW@T>v3>+by>>lW{3+VKHp+gEEj3H14 zWy^|lfgsbelqg!x4kK-y=L*N33%Z{Zim*sA+3St9s72GppatSvk&fFB=zcHvhyWg^ ztD$2s+hvSG+pD5Z4%@b%2K4igH$7h!mLx#6J7rYz&WxuZJ>$F8*1e$0@as>u&5xVe z1U_Ugo5*pi9V2%g7t2Y1$^2#ivTZzpm+LhB$$;t2DzsD8(0af8eAk!13-t3Rk5((o z>V%LO-o9sEm;2-aRYzuS7Hx2{7WNF2hI6<$u4|hjmP&TqUpM^VXp?HgX|?l{VxgmB zD!ev5T?sRb*h}!t%8i72P_>2xzdkQ2E`AiX_5O3D-^Wl@CjT;%rI&r6CinhVv_y4l zQWVE-y4RM~b}0b`B= zzy7#qPei0Awf5COJ=c3kRHaErR{!iYZD#(S_ejL}GWGH4LG+!+9j5Rnpkp+Lk)6DI#Lj+Uxu2iW4g2 zer>dvc~`@w`>$4_+&nRr0r(p7(zK{>lxQGBV$+oclM=Qy^5DN5dA0kC)@s0wqu9CzuyS`yp6}H4#YHmsHUg&s2`Z@KGc6k5#~w7l)3Ko4~>8*Aalur{1eLY?{Aq z@&G;gI2J7b42-zRfiMay0@gBpaUfT8F&z0MTv}Q(ZxA1407T}83F3ATk0Gd$r)azM z9tu$T8G;)|^tx3t$qPmYm1hPMDF5~IFXpf|1_s8MI(C$>J{S?3pW9owXh|AGjfBU* za%qsww@s3~Bzu1vI~a)f+6$_R0hI47_%}-i6X}6l3xIk$Jus#J3ckOSHOvpda4t;% z(^tLtU>O!1G_LLie{mcJ0W9aEf*167?Ec@&rS$*&N0Rjlafm;DeCmt}pMv0v^C&~z z<_z(fdr}HP^E9o9rfx@ZM7E%e5}YB(<_5EOD%Gm|sRvFA4gKw1ekvhLNkF_FRPL%@ zcsOfsWmSJef5&{`_WM1Xrfac9vTlBXMln%K!2Iy(@2bc9n}_34HBaQ#ja5A`Ws6Ea z4>lHGOzZW0nibG5USS==G=)jy!+^r9o( zT$RN0QOF~EjcEkQOAN7VD~8C}q!af77^A+*cxSy5x~}S#>HppPMI48xDkuNE=+z`p zKUsV@Uttgs0@nI4|8P)yLiz`De7Fo_xZ;~e*GsVtDw)dP`-}N4f6(dI6c}gznt=)PGsPF*Ol9%s`^yksa-71J zpY*+8=}W}tGv-m?XS6L5!KSWRw%`E^9W8%j0;SwD=gP+x&812(#8K1pwZ9*hf8!n9 z(`CHhBWebwtUfh%Z1JnP&GJ;Zo=V7SRG zVzT6sS6q#F{7=7M^H(?(F4NY!W#)iv^Gm>8uBSFHuKNqe*C>f9@GS@RHgd|wENYn2 zKcgw0zA#K`XRx0_g9!f*V{aYR^#4bXOGzjVBGQrrk&=)aNH>h`kVd+5fHV@qC=rlG z5$TdH(NO}@4Z={mMr>@qm!I?de*gWx|JebSXPoo8&wC&D-p7+N!ZOBk3i$Ka8T)Nq z<>8>Y5((Z-2l}Dmz?=&EE6n2T@FVpp?ABO)SLN0j&AdY`-oC<~1tDNg0Ci+idDH*U zi&+yHg6flCy}a{!)axyhPV*UwrmkqLNhV0v(y01#emif2zdwrZ+TVv_ z&Z}tfSFOP%w0)07>|$YhGJa;3jSpemMEddn*9+68&CutZFi14cGl0aN1{Lw@I%ab)QjbGSX0DEokKQ3fXHR5n{U7l( zLS1AXib4cHkdz*Qj%`t1%uCh9VL!Q=y3?UEvhT<1% zFrk(1VT--RU2HP%mQK}v1K7p`O9w*rChf#ZkFT@6=ED3<5~_1H(o0tb;mCG80uH@L zi;t$z-!+N3)h~5sPq0_cB%J3b`X8OV*Ktk`Ws|0xuR5RHYk8*vvHIq56M|uVoxC~3EWzlp zB#f5&~9SmSpPi! zHgwmxQYFbH$O`_u^ppubE46vbB5)8~r4H>`XdKm9>wavN7KcSg|2m5ib{lMaexj4) zq~a(2O`u=DQAI=thP6H#g)Ym?pY>}G%wDt(+egcrTI}gUtsfeT7o5luciAof0RQeO zWvMKh$>ke!Wo)1z997UD|GM64>&P-N=>6@J3)*gnbmunp;^Zt#Mxemb>~7vPKdNJ( zs9W-fwdt41J7t2ki2OXfm+uJQt?5>9TZuwLm?=CIzSXo@pkUocXYnat@rf*=EPq~A z|EHnlu=2VFS8Y#kycN-n@b7u0tj}h{pDuM;u%Q`q$>+YddF^0iyx!@yuk=10uhsm{ zd*UZ%+B1M73cTic^Jm|3g|;bo@Pl3Fx{+xAxK#b|s`fwn{12uv z?Q9>zKV<@ucYx#U4&&rMiyLz%d~yt-{=uggzyS9oY0*IRh`#}^nFlT4U9 zR)T=r}#)u4CY!PzEsA3(&H?yl_!X!(O-@$6mOhasc55=F3w5;2ZheI~%(H zU+A_3Zd~ste56A{<%BJ20nV>CN!8jZajP^!_tdzFwbZ2iiubaDwaX-6Jm;*cLqJPz zQg(-9*=D+^tu2|6i)Ybs(nsJ+JuR>0#;lVbKZIEZ)86>(Oh$9_1AZ=bGMhoNXV{AH z_JH~r&opFnR-j_fKl4sz!%;}e<+)7)%y-d4cV>JqQ<&v8y}y;HW#&_JN27!KxWiu& zGr!p{u+>tBPY8%>t5r@F0teKdytmgms67q)+^QRqiOV_wC))d!vx0tqtC3g7tsGEc z!|+#0?&~jw6HkVr?~>{saRIX;Y6np{SNmO>_59Yps&RyvP-kEtT~auythGv%7D?tO z=w+jHUOg;-O@mIPfd@xwZN<3v)xEgSgcifzpv?Vx0#` zh&7ApEyNjiSW5Ke&mKzixy)5u^{|`?IU(7;KdI7=XKISgZO9z#7avaRew@4*cte($ z?Q+CXz+wLdNq0Zq#-9u-B2~5U`Bv(?^6k>`tb9dt8pDR*=&SOl>f@qjs|txi%Y`{P zr!4AwRF9O?Wz5_RNYY4(8G|S=JTKK%1HS(t02M>RKW2+cE*v@w*6j0eekX&6n2Ep3 zu~7!rR$IM}EaKfK6a0BeXB-?Q7T4W~eE;*3rrHn73$+u2GZDEH^DSx|3Emc83T47*<@FTa$ z#J0Mfm%bideqR5RT~lNU3*73LXA}OSao+^~rTJaW9v4$$(x0p3`l%-oTIwZN+`$fg zm3R{U3hIZCTL12Spg1??ui??GuQ9$0pP@n}z}wKJC8LjABaQJ_{8u>|MNoDL zO%-I0DRpzHG+)c#OV_=v*`V7qTQF0BP0JVcSTD%Ksu}b*U)d0?z0cj;jiBxgnJ0(W zS@H)V=R$=u-#lEC9t|^fX!!_8 z!_xhQJZj|nv9COSp*4g=4I5_B@SbYyqOoY&O9BgCZH|a?ISa=-{Tc^Cq%Ecu|B5^wknH&P!%=HSDH! zkHbi?#<^fTw26H)Sr{W1P%$cTdPIwc>yjLQ#s(wHZcus+d2Mu1x~;p{d^G}Si)#1h zety07PMH$ak&gez~ovu|kmQT;>(q0rZn1`1iF=o|+#t;U%{>y}+6aV`;Pu-qcrZk!aQV z&WQ+>$JtZY1vDsku*X(qVM4w##6FEXn?GXe>;v*z>+1zVKN*^qFUBS+$$ZHo<0PW% zF#4zj#NQ>2}%@8nv2&*9vks1KD|BncsUoC`V|V9MW$fC`1zebW`NYD%PDwfMrT&{V4Eyyx1L@-!cA7`7 zPaU3rtTkl0F*uJ>h$vOYYA{(f>jDiJ0jM65*!&j=&;ZD{* zEwp`o%Y>3r3}d!8f6H_~LBwC-O{HntA|cFMot}=SCl%#@{mZWFH7w~FIEr(48YZ{- zVd_R=!2B(ErF`rr^#5&`{-;l0IX$i;2@YS?d7pfP1#MS+&($z$`t9!9Vc8Tm=~K*J zbW=Uj;2w`kqUyAMwG}H+oWw7jnRk@KG;QDa*kLLzc~ogKAUQk#kFPw1>=3h02fwq9 z003vixoR!~cEUZ8m_5pQwrJ>GT$FFitBzoGwsya2eUOrive znSqIw;zA?<()-D-_9fbvK7gya%J}2Y3x#eXK>^Bnh4wUllp2N?FjQ9)Mald+V~*~1 zPzG|$3g6DjFilnsmurj+wp>*6Y$g|MUm~93h7xSTdDsPGkSJMH#R{CIhctuC+;hSO(X#9oJps07}o+7r=BypIDe zU2s6|;UgL2qX2fy_`Y|%-wRht?iiQ|gZ{a;{x9No0EoK*aO8zp>UlgWNuneC0MrNo z)s?pu|8-_?{2HG0YNaG*$#7(>3!0de-L^f{j)k2n!M{ilh=g00j~O0nG4Kj=ZwXg7 zcP_3>%iO{miYp8eTl$MASi_?WO(s60ubT%&_RuZap5?#y`=Sh?zwJSd#$NB6-uGi@5?IWYeasHDfL z{MX70l9QVqF+MP_8t8N;3Z&dWJf2%%WS!?dE6myaKG)(!CUtC+_Jmj4*U;}hP&;Na z^2@Uc@$%j;)`ue{KIXo9#b%1H4poBq_5H*N#(9JGHNIxJD));DH`YWmAFU}^7)!2*^*&UmlcqVqx$?t>56}TD?4?_lPue4BW33Wc?p*OW#%Yz zGIQh_Q%sOPk|8TZCtGjbYYvuA-l}=64ZcdN3QXW|t9FxHUe1SDv5v+UAGt4u9eTVI z_NV9U<2^9<9G<%^CEec&pN%k*rybgvi?0wgNmjp{-fm*nN|V*!-|EhH)8}&k_2_zU zJUgW_>h$l2_%fb7PgN!Vee>uD9Ud5*Y)|!(v9nW5*Z1oCeJDLg*D)t}6_UiW$jQo--fzC+8*xjrhp9^ zR^{muMrNbn@oe@uO{}ODv97U$V*?a~#7%(d{!#wJ;v^=J(~A5$(w9{gL_hbondSCF z!m8wRJL_RLqE*P#oYN*)yBm+2EL&o5Y*%-e(6$yxI|55m?kTLTdM(Xs#I8nvi355& zRku7sp<<~REYleT$yjX%~OiA-ybw^>1^yCsn|rHZAK4zT=4x(SWB<-l;W+ zvg}o}H6mGpD9!*}G@d4%eLW*0%MN^i_OU$+NqcRtFe+mOKxyL8E&9$~QNy!L9*!w2)=GIZ@I$4z(i?dN)y zoYG%l_&89f!@?)GL@0TO9W3Cm5ZtDYV@MbXk-bdMw1E#o`g93TfxKl2UeLosU8Y=a z@B20lTN2umyr{VdD%!uMcP^?--n))-_X>od2)XMnb6GaZ4DRYBTB5Lw+sjJF2|o+J zkqRSJ?YHs%6c0_R8Pp`KD`d=7vJPja12`rZb7?JVzc#@SGW`=Br$5<4Sy&5WI-f*hG$>GJCqse zPt<8nG!k#!mLbYm8(ZT)D+NrX)4r-%4B{s$wU_*W4yI* z;gLRVZWrNnwBOuW6Hz0dCC%Q47qz|aMqZSCIQ|(?$Xi;u_qYI&4&t#;*aWslzmSfk zr`9`ppS|dtk;vtKlxS-y0&OKnrrFMI&cF0p*zOJ{*;iofyx|-=na%V+u1x>I-7%{> z1@1j;nI+8=yzfD&oVi*uF*5egn#U|92dw>HDjxOsddP#zFkQ z!P$4d_J;&F#^1&g7I{&o8M(f&vo>IgEu-x+ zm5k4JTx=jqIQY}?)1I+s_FG0_FR88Niy0de)K4VqWVEY?~M5gr&4?;k1J#9xQv*Go}pfPswD4d>%C0M?gP zsEYg>H#wr=ic^}0$2MRp-)ozt4QO)9{L0nfAt0K}+B>iJR?A!rGn zh&`7#F6!C9FXH`%oE+O2I9`6*J%28W@=RQ;l-{;5&{Xm0jr96QVp+&8wCr1wOKgC6BEC;`fG@eg~ zP~&gu0T;=!Lq*~qz9H+FyHZ3@a^V5uRu6lo`>k{I)&`DQ8Eon;M6B5!x+b2@DZ7?V z(!-$@g5Aud(>K(|V<#oDlpmjZrsQJXbjL^F=Pu9=+q2W1V?k(^ouw|05T9snbfTLzOBieOPOVhu*i9vO@NodM*cDHI1o!oT-e* z%KqP3>$*K|b(QafQjK*VrNGZ&IaKaB1WU7Rb;(RL`sGbh72c1YLfWz*h=pdRT^H6U zUesFTJXfq12&*#W(4F(MCXRt%%CsurmBX9R^NA~hWzRn^N6;@?-BNd|Z1=9535n0E z=6Rv(a8Y7(Es`AcHubUpthx~|U`jyX>(@L<*_wa-v7(8&OpxCWns*!e zy^~Mm4UKnJ{mU1N5dlOaVW)t^J$D0926PHixfH=juD#linoJKr3A4Nr{C*B%ycA0KR6uWDk$8XQ(h)n~IAo7ei)Z3!w)*MryAGf>mWhIyfurcg~<8tq> z&l>d>Eb2n$@GW4-$+Kjg-PfmHwkPmy=}z{cf-AQpnOz^xYX#Q~_VBbKT`rjH$;E>R ztvu5vpgm&Z%881J=jk96M!Uv!#kZP>iG=cur%#3EW117JJ-<9j4QY0WLg3_Smz1^;GPg!Vw)D&<-6slHOQ4L_e+&LJO!!! zVZu9=_eCK_X~>4%>xkYcyL}_T%IL%J^xD?J1frZ4e32$XJKsh_SQ${NH%B|ciPAhL zmljtX3L>%cV!iY05P>dJ&)AsEPNIa#^^+ zgvuX@t#*@}l|Bq}LVVeASG!}7XNJ56z2-CW)A&!;>Kig*xz^uxeN(W@>o)tXj6|yl zMXx+UpCQk!YcB2FJVKd=@2oSech5Sle)#BUSq;Gb?h432i7Kr<585{nBFU}sgT(RY zXFAgHJR<#d!na`t^clsne!oTB1?^p)~*z{xl9FsO{x()pl zE2@p9u?M_zFFuBGZ7H3;XIDaXmrZ&9T(T!gxBTJxgDh*(O;MWdv#6F&{0-_wllb2> z`bHRKN;LVt0(NiiGC1o7H82;S4J?1@X?q~@;kZ*X*g81p9vA#ZG> zWBIx#@W0r?FcL)Q+20rF;iPD=+Q_R08F>g>n}qq`R>s6fTE(P8F=cXg~?$a!-MR+M(yNm6h}uI_1h+9;_cZ5 z0D~X%W-Hnt2zMO^BC0Tq_{dIXqW$JKcc_$)fs*&Re}s4(0RSqI6WAo)nDVnRTiw!q z`V$*LC7TJN<$UGumT|ov;xB??h6U4lyYm4-`vQ30z#C`EZ}r44OTG!5WddsY`yRq5 z8Mg`@6!6PW%mXwjr4Z1y<8GypOkCS05I3|A4^Xv7*sOp6vT0xFqZ$E30rk8d+#h%V3>ZNpOaLQynh#*Z z{%aG&!TlA$`2Z?%UdbpXDIp6u5RvkUW;#mzPtyh!<@HvsTByXB_;9R5J{90#5nz_(HmpOM<^w;rKrE^C$aO_6ewLiDUaJln) zMJO$5hC}Fymp&Zd-|jclO4yen`tuhes_!vQyr5}J=h984o`T2Kk(6;#=PCZGCjZ<~ zCNr0GTgkb0s*pyoxkSmCdQyiZ60++Ce&=&|7v8?qUKWg0kbpb4m$=TR)3}ZBG^<5f z!gu;1@HJNin|{l9kAm%)^Bm2O@^quPbeYn0Qe6lv>;>d(a~#&d7xlByFs#mB-0uZ3Xs+`o;Y(idA7B?Tm*9@ zNm+O`Z;g=&*I8w%DRn`k928kn^=@NlItb<69;LSz_G>V#4w+tCrM2k3#x1PB z=D4PW<_V|eLe94$-YIqB)?}tGCHd3ri;z0^q*LpI#gH|*2B{lDNh(_ONv#7T(u8u# zgR#M8woj-T%A_gT(dvJT>4#zSdCIzjO96W`5RoaCBy7``V0NBW;68i9q zF!vj0#K-u+L0NGVotL=f;R4d-ogpbKL7{G2f7tyo1H~ZCLz~NfTaH*ACe}V{@P|k< z0%(fVA-OP-Re2<~x0{m_efMDKSS4u)mif4Yrdx?9%&y4Ie-y`ZdFg8=1i`TH_d1IF zC52<;w-9Fppnq;-N%BnkFGNu*0Ryw{N!7^mwu#Zi!5rXfcSmEDmrU>O1JHIr9u#Dj zEb;Y6H_cq$UBr@;i&{ zdVIWVeD9s&^;bPjkNkSIN%qeQBZnj2Ur`c@j;j{m?9ww-pnp>b`4?%{w_@#2Hpf#B zUPB^g+sft`vtDP$(}1`Is(WRvSQ*y`yJ=rW$*v!q=VEVw!F^7rF!}D{V<*Zw_i_(PcCvI8jXHtz9C7K54G zoR#$6yhOE-cP+Nu+I`*^VEz7HX}J=?a-c6%iZj3?LM~Jak@gyu=+(zF{MK-Zn5`v& zvMg*pw<7$c@ruH*&?z=)Sv%+U?`QY6uufs6FbBt*jSDr5)n4TTkuE*z0Llxb_sbBE z*#oVVY1(;Fg8%3@7NQ{Hm^@ZkK zUHw5svmp10k80i%7;Cpda61wl{+Z2aZ4lhJK90(Kz*L+Qf5X-kR|@^9A3q?-HI{fE zn*|&e{0k^u6tLFMqhyAGx{;k80I+G;0Eib<#O>;0;Crwae)AU}8T=jX3r-^$0YX=) z))6Lva{jP!nx4>a-F5aIFvULEIt$pw4?vQ0*KunA5o#Qu)I=)kwupf(c<(=@(di<4 zd4FHbB=l|dg}3=7gvSYNt~lzy9QGuAw>CsN4z(wG+dC>@J1_nv{?DbeGMNq!!X(K*$T3 z&BCRNu^4mV5S(n+o=6zJ%*(KHE?sz5ZZp%U98L;bFEbJ2s+;yHQBC^k`iD4nP|kTG zKW2T^HP7z!FdKw)SFg{DAmt!cyKwlM)^>co@*33Q{}wJgFV5MnZlK=Ez(=uE&RUCc zVSFA1?qC+#?)e!TFz4m+OuR;VM5}*=DB5ZF(FtpT8`6h8q=dJqDX%Lb;V?aMHsK>wX z)%*B-vGF;cyN^v62p?3ivy|>AB_VmnWTGZy;BVVmU5w-;bF{i^lPZN8*vT69(5$9G zJ&v47M?759^(1i;8My4!>_fna!86j+-5wq< z3ct`3eDeB?qI|BZR|P1uen`0rkr4Cy7Nbvz0;dyyuxO@|;)z*vNJ1B@6B7Z&L>ZL@O{x+R+AR|*ToF#4k0A{E|lg+~$hl=j@qhWYH3Zec+(!tb*U7LDO2@K4=>nYlL-f)+=}#Y_4h-#IBcHRfRo^b_P%#W>B0k^DM+ ztyd2tPE=om9NXiT+3;co(3>HS67P)hFEv>7c*3E+nXT4@t=NM-{ZN(;@PYh*B-xyP zoPC?*`jeqkQL-K9g70g?LCi|lDV6aXf~1m&XX8JGNMC+TZn_MYP|dV7gsFShpAjPC zEop*ubS;#6pUplvxQEKL1Z94^OX%0_xaP`3og{3*6H6%isXJ88kEFBjs+a~!Dvy|%Z^smVl_GBbfE;~&&I(PTSAuYEp_e+#Qs{bSIknrI^D?d` zT3fK>UOXK<;ysQ`M_co*e_oUY45hfbCvZ+v{k#tvSBrqMNIF%gy83z$fD?Kf6a|c{q{Y<;mntOI_Yh6}#tA zF-@&!!rtF&`IvRvb3dxF2o}JbI0yomVjLxf*}_C<4ydu$NJ|VxhFaHw3EJhhcbWe( znU7Z7xsXrcAZ%jmizdOz3En&`alh~lPe}LbqA--3^B|XA@gC8YY8B)w!v2bSLLZ*) z+oTXzlY8>xMtqom@O7)SBTVv%vx6?HxBMta`AH?JWxrFs0;gT4nJ@f8HnlB^{UL%g zo!hox@7kE~SMyQE&F|D87wW_?nIk2X61^;hHvpX}tF1aIX; zmma+&lI<&gW)nM$5`^w%JurP}Fds5q9L7XA=6SA`wn4+}=~FNT2qsXG8y2$D=tUuG zVJ6NVc__rzm0AO{@wUbg`OEbIy`u)*|ufhi_QwI6)_+G3snT- zMlD32Z=7zkzE@FO3Ya}L5Yi7wgagx9QyXLc*8SU&RdLT2FrrpK;G*0a3=G0mY>dN` zvwk>1+pKB?Ce|!zj%F5H7M?h6~8m-T_i_0wi(3!rm^yvQbXVK?3Y z*g3%b<~xjPeviUWEQxB~miOHL3t)AYL3cB!zZpE{B;I$2%n3ZMW9Z^wmylMmnRxW{ zwQ(BDAvf`Uu{BD7Vt(MVnz2TpjNYz{k1oO072imoNEP z{j(DMH#kh1a5oyB)MN;px-c@+h?0xyPqdZJ#q<## zK$Q9G5rfN;QO zR{AEPfcm}Olj;)Z2eke|_oj=-y|RTpU}0N$G{4J!&Z%!n!Zg6KWnbEB6ZJz#)Y zxnr!1j+5bz6t+t|wyVvo-@nic`MC`=jh4eeLzgGG!G&^X9GqU1dw<5mM_@)QQevr0 zu=97S0cpD`(syv=An()Qv*)P8zQ39M=K*ml+Hz}65oxqjr>!TCUZ8VM^IoB#XJ*| zv5UB|BTR*oS-R6y%$$Zs;zTq;)=Gem&P&4xD?Bp<^n`cd`jHr9Tud1W{slUN#{rlrz zKuOS0=SLNyFv*v=_+bgKXYupHX>@_lspyPzuJ@|L`LH{`zyHM%U+AJ~oA&q7_!h|` zpos(Z9e{E6NIi3yBBi;BhgenKzP$mJzj(NFnI|0H_LuSg!m?a&Kx)I2X%@~WdEKfe zJ)MGM#!Rn*Q|w%`)%(8v2vN{&KgTT7q^TIX1w!Y%7L;st;aS)58?v)Cus<`HvC^8x zYQE~DnbZw7B?#!%h)2l_p1oHwE4#j+*~hS=U_Q5xB!wSO?e3MYTaU}`T&k(vj_uW+ zUJmn=WPgtl9A~sieL-?<<`oUTv8Iun)6IYtO-j(QvJ0dWS;rmwc>qRnszl(^-wTc3^>mRr920fQBGYYnBE(fll`DGpDD(}KI;@$+#RSd4B z5pKO&?OqWA2lYqrL%C3le7O2-ai8&t7OjB^PDG+l1LM+D6c&W(A(q3g(9Da16}Z9@ zN`MCPtciQavp5k2#tsiZ*2|UgRCDJUM0F{1;nWm~k!_^nMZe-M2bwivWYAek?51c| zCAZZ|LXI1IUiyYZmXFx|+07^^nt<)v)P^fIi`tgYUA%i*C+437pN5qjOWoV!$C!}p z>wKQ(LSBvWolVq=)f9w0Ze|3GPd(4h6=kqIBm?WL zv1?-R^T)Gdfv=z*TXVEWZnqw9Hyr6W!w%NG*Nm2RuqvH%QA9NZ$)QVLA@)y#o1ON| zNhbWozMDV?2OKbrBD4Z~ptU_gk91!}#TLwhV&&c)u6!<^sVJTvvkKF9? zjuz;6sZVdab8dX%mLkzOe71X4OJ=0=hDCQg^^&jgEu>J8?Qak4_tqK3ZP3Gc)d)7< z5q5g_fD`Vua0isTD_BS$?_hVmZWH$);-C;`THzx@D+TR}x%82Yj49*t`n5A2Sm9!! zTj~~FJ*w!}h;L!a#mQHU0ezt#VuvGd>+EhH9bfA#oGG_G^?2g(NpBM5y$*sOUOcBS zv$Mz@t=%+`xpZUPJ8vBJ&D&H+3H*Lz@Qs)$=5{!5;V8|irPeb;ZCl6wG-T+kYqR8` zBiDqb!m4o{JE*93TB!f*D$GKS+k(l#%E6d_AAyd#YIK=^hL$zxGSXL1;|WG|yonCi zfezc?pnY6UyyAOu(0LMGX%c$mQ*V1yp|v~_$)q}18ArLuDg=a-uUlAltf)|jA8eXH zSRXXgK~l3RsK?(+|_fyq`hMF!e%XwqV?h< zJ~9;57s7zMvkK(E-Y0ZFj_SJW9UP2{a$hY{0z`$HKK&<;>;Bh3)}?6E%ISD!5(D&d zdjb_Go?ek#MM^f4$2mJAqaAN%1-{Sr?Q1K^l;3oxz4c z?J+)*_FZ`Q+P##p>kAs%X2eYUr$HV!XapT1O_p1bo1i>FwuQZ;^a-b-6-rZ)TR;7N zpekkK8BKHFnGY$==pN5+HE#`Yqg(Kg@v<`an}e6-UvQG%h3D2V(NL?%2S4d(o)(S% zOe4`MuBE1T5$hfMsPwd&<{K4(bC;4$Ee8RD0oIXE(blThkaCg2xl}Nq zD8@wYx3=V8-!klR3GtS%2`Bl}(jbQ0hg+hxb77bEu(Zi&e5~AOk|LH;#qh6g><^36 z=W=juN{+d=&;2RKM7BGZA8huwMyTaM)O*FbEX=-k5^phOJu3tcM<#ms{zQ5h78>F((C>$efDdwWF5DSwk_X}JlgZTYx8=K{a-IlyK zDOH3&DDIaG@|OQ>7By#+?-R1FT(_u@(@iBWn$yLl*+AXpoTehA ze#di=_}x?weurf6+Tbq!F<6DTJLMFEDF&%~u-99s(Nn*YHE^eo?PtbEveasx97|RU z7=-gmJr^!V!K^<1nG2#wf2y`{^I&MR5awdaT}!4}@0Eg_Ni$oRHMH27AErirxp=E~ zg1DS1lO9L$!sEzCCv*@k&Tov=7E=O}}mk?XRb7t)OQOukweJ zhO}7M7;1S3CzPDf!#}Z%zmoQ!o!r}cjlLBle6Oh45&SIPWQfcMnr#{WAoZp_?zgL{ zht^qiQF?~6mBe|xw=;`@V+vKomoIp-JU!L#tx)ss8VFL8dC~`+`2iZUtZpo%4s*c-XGFx;I>Zd+_s`UpZ}oMACm94kuksvnP2|&>Ci3H2%E; zUtpB3!d-#hMlGFqz{AI5%Z)Cc<($>JWxdm}c?{apFGRTzW7wxTfHp(tU4ts)2 z+9o(tU6fsnlX^bdj^RB0VvgRl9DdMA7U{a;QTL(zSs^bf)jL#HNxjxCVkhSeg}%rh z<-qe=;2apeI* zcqXfWZykmF=@c#DUo-p%&HmwL8<)#uGmXU{hJ6@=3h9orS3~kb9LMf z+KE%=zQTUaYqA|8b_WYxU9$DyL(j~UN*8Zhgpo%0vB7(;@^gE$%_aJw;2V8}d{e31 z8>*z*8LZC~_7|AP z*Y8ohY-x)trb|<6#{!otMWj7!$A*XZ(Q0 zQ*-a(8wB^Y1-<2s#4lltwPVed!{FEKjBZ}W&C4l70^!|LzC0a|BdzCF>c4@Ypbc8u zMzk!CYV(JSC{ef20h>Zx>5zU>gAM}j@979q8%;BcG{O{8b0sig4ycHhFUENQJ{ zSR0GnP*|1A@qT}}&}I=OlXnNY_g}nIVJ<{5EaC&?_kh&%z{6~GN~mj_68y=^gDh-? zyR=Afb(3)nMc4UNW_Qh0ZHc>PmU(?2!UGF5V`+wKAi0+xB#u!t@dz7hh&^xQvXW>O zoU_zKq89QS7?hJA$^(KmUE0yL)cKz$8?HChl!tf#jqbqRHUMywH<@Zab{fcE|7`5j z0KDdLkFI1jY$m!VplcIWBWS^DmcnL_XE*PIU|mrNGZLUBWyMID;(o0ZP;eHn3q-QX zFYbO-4yrlEYXjokY;_{!=%Yhb-rBe^Qik?$hqG|43r>PV+uHEnv}T24%iR*!)u(Jzif``;LsV(J)( z_BXm;X8~>Fi6M!=OKAWfVZA4z_i40~x($omXS5d4zG?h~C!P>L#o1W@zv`B=3xL-H zo$UAl1Ars$`F+lRlKILL+h#YtwrzZ5&WT0Lnroxpx(6V}e@G$T7I+EJ{(;JU;E(`V zU43m7q0&HZ3}#sd)dxIsI&2iH0I$~!;;y4hul+nJntW({5vbdjpxDN zS)Q`qr<}X~u=Y>O6tK=SjieR&v&XPBSqje6w=hq(r>#YwR}M2NWyQrb+iNfFNm^6B zg05=VH@ITuKt$uNa^~V?Re?+OH=z_PVtOsq-W~E?5Y3`IB_b0&dD(L*hFqFAMZ%na zbSuuTa?_0Axl0ruXLKlYA=^fvj%wNKMwJ`OD9~!zTEB0k&vLLX(S+nNPWgx!H|1Rj z((&$$2dAdVtR9GZRwO!f7dtsyLD?%#dW0+hdCoPw#@#s6+SxvQs$WQ66p#I}b9#s1 z<}OkY<|C>;@6)6JQ?F%lcRVz!D2r(8$m~%M?s}AXA(kc&^ue#m*PFu&iC9!_)j$<) zn@Y2b!k@PGv9R zc|^s92_|*PcW5qI7UF6090-XfayZhZ6}>$RNPdO=zTi0I0#8uP*7@@dgTf4yC>ydR z3L}j%lo#h?qZ%yc(-9k9BQSFYzYo%EM3ScE`!zZ}V5`Nb*gefCnbt~oeXh?N0;!jy zWbYvBNBQ8Yk%$vI2qSb81?*Jk=Pg`R99bh?lO?n|WNlIXXCPg~%$NmoXf&!C7`~39geK-lKZKv|!HIWwNcS zB~)YQityeo?4s-qz8N_v3UYR)`kI!;ZEgmvJ^S6tug>Z`k~q2Xx_;rC*XR`~T9 zWfnxBPjNeJve%eP%5H29We-)_CLph`69}ESNT1R?v`t`4fBU%mL2jH#f10|UA^e@8 zw5q3bV1#o%i^PP8qCH_@dIR?G7fiLh_bK)R9uFR}`N3^CKH;^}va<9Y4%_*W?1jm@ zBsC0I{!{{rLk7!+qi^(v3U4HNl%7-0-|P=JWO}T9Yt~ZE@~3Cc!~J$Cm-! z9GO?tpI}_~rZS}Z{ ztIi~|1N7c~=ePamC4W9|vXojUA1s0$@w+qqskVGJq6V+i?`$Prvw7>hCmo_QzcO^7 z%GI+mhW<{Q_hL>^$a=e(I;zAzbTX&~W;AikmH9@0Ddm9PFiiR;4v$o zyRJrVH78x1Ga!rR>_31ug5n3G*t!ck?cylBh`n{&V7Z_2dD=D9B1i|AsdB2cmrs{n zW@Qa*v8g0SYCFk>wDZ$<0YN8w^BG3)Mrbh&6AgWH5NK9vL9(CSS7i{Q^Nq!U0>V{* zJ@j-to#`VKRD>*+qnKO(!?Q;_PNS5)ume_gPN^y_k6KFx`KepqxhC(Po!rZ2<0hPd9A zp~qqVp6)HTlZ?l4n+0~>_clK)RCH%wZBF6o0n8oCLTj1J1bU-iPGmzpSo#L!uk=PTAsI8 z71d|sj(syT;%7L7GV`&c$G^mR-$T~U5btYT=!qxlrmxfV6pEbY{MGqF?9vIFZaaXTp45R~&uO=gNVwN5KP;;VdVaxK?YVxR%nonv9r+W*A%gEuBj zyg+j7@f$)Qrv~P}B9vwgaEQyl!~$|bDheNX7w-N93wT2C)jn_p_`n6|0=IBrFNojd zyc+rDYy&>>SI!uFoi)MxMu46F52_j1e*j>A6^PqWbI%fJRr~gGCh(s>4plaGzo55p z0LYcyqX2%;?FDX@fP~qY8=%Y20;@cXQ##QR|0QU!e(!}1?Pka>62dY2e9OFfA9AU) z-1O^KZ7m5#NmiXvQ{?WJNcO~gq%ncP(EmgP!_aBFSSpWnN71$^fY zn3@S_e!1F0nYp-~EJQ@vv?-rs`0l!%0? z>LV0I&_&4E&mF#MPp1*0DWdld>fOlZ7-~-R)13w)dIhes;c8g4C$n%#uu(j$KP|BJ z?BbpIO+&d2leNL`IinyRlmGAN?wRVi)+B&kF0Ps@tf3-m?{ z=)&F8{kOxfLmBMV#p+?li<2*D5dUUJ$n2v^GBW4xy*q&vxoZo}vC%=*1enoF5PaTk zenkw*pXk~W^a-<5_=q7}Hr~DjH0!vqRXgFLX6s*qP6!HtEiD!rFN-Ndn;m(ASAzhp6B=c`~80Y z3h~bCekZqAu5+Jru5*p)J9)$8O?Fn^l%UuKZ?7(egOtN?1w<6vR(t(dX@8$EiXbP= zN{~V%eRhvm^V^wVUNxE_iPbsOsKrgZg}rP(5Zci2Exl4hv+&#cFqs|IYL6GDL~u=I zV$miJYWVfGd&#*;L%?zp@-DmZj)ymDS zcnMCvJP&82G@_8u*2Ued`|7^*268E^@Dgf?)X6fEc)ln-p|wiMYH#lxu?hG~nCr&5 z|F-*-|LnrBCSV&$NEKn*_yryvyWN;D}Use^2BGW?~bU1~28*ukfwL80YW#MVB#OAk5>30o@Yxv2n`T zh6~w+mpSo_YEx1EvqAQ($MyD?N(6ZP?o&QaH{WX1s_~LPb-SWMY#1;!SQ$18eG)p(^ABW9!s5FJ=%fms{hxYb9Wv<_D zTVQ@7{Am|$bpVX!V38!0OU}MsowO)JCwN<`Pv1C&b#OB0!mQ7g+rk@sj)OSu)ei?F z=9c6&bIu?<0E zlO1&PQ6~FE>WVheQvz_ikcsYwarC8Kx{-J73d>;cVL6TyTPixP?@xa%3Ogn6*B0Thyph61gA|I-ytN8ZY&A0Fqotm0n zmG88r3&Hz6#2z+xSL++-CP9^4hhhSnFXMMUN_gR9es(6`8a$M*?YInW{&>j*2$&d< zcF4kqhAx2$i9iv^rFF7lRcD&bC$Gz%;Vb91a^&}pWqfznTpQ#weoS=)Z6`jfERk57 zF6Bv46tQHn|XYs@I%`r zEjo`UwzOdr9v4CXX*KImjzB^IFbHQGT^GbGY%vU(bNldPz*iuu$V9uWor(O8aHw|3 z7QXWx^hR@Nyfaey6o}%4UeS6ph~I*_jeZ!^l%^s(2|ukE{D*YMx1IOEN~>e#IClfG z>1N63veNOBxK7yV5S^nylzh7l5N5TQp^c)q!%OAg%jIC%Bg|{5jI;QG9`qmkhVP~1 zh6gFal%H%QoG+21`nK?e{_{6H!yZvj6Zw|?87+?-4DvP~-@Uf-pSE$lqK-dk&qsBn z{#OTWGA&zX28^`k6jL;xqdKR4`ufk}Ljwi##syJGU|k$b=S^eh12g}N8fJ3T(4&;X zPWidr2cjm{UeG8C+ z;oIUA4Up8S>0RN;f>;jb`-Y~JVJmLDtfspcPwQTUEoa{w^ru@b{`0``(!)ghad1Qh z@R>xM)@^|1&eOpmTH)9k!;Sec=QvgKlAHIpDK&N`04J5fSRBk9#Pgx8wKd1#L9v2} zs#aHryksTT&&_4<|9Jt_rtMpbL)Bk$zIm)3P+S^M&*&pdji1BPW5BFc+z!D-O7or8 zf9A^>T=aP+zuz-rwSYS-;EY>707_ zSsoApOaFM@vy!0K0ld_6Va@R>Np)Grxj9A;Bu8VKXN0aSMA~mX{L&EI`8?>Uc#$<( z)=RpLBAxP3AQ96Jw4vYc~l_CBeP{PN!~-j)M_4oZt9v_(;4*!~oxlhwzYyk>otP zFZC$D0{iTiT2P`@R&6xUB=9d$@klu_>)qJk&NX;~u1GLdZn6sB9 zH{KOmDzvATNyKVY-~NQY^Yr!J2iN{Bmw*ve=jY|f!N0R{(;v9CyUt!y96VkUr7Rk~ z-dp#nxSUZ*&Om4VyF8}Cl;(qS=dNd;=vs+z7bS|2c#C+&%c&MXb>yuyImvVPZZig6 z-*)U}NdME8)>TrP!=w;3B*;cd`&J;umDYarx>5v*^p6_bCiI#fJz5;CQ-4jgc~hre z3aLHTac>$SJ+X0Oxk7U?-5^xzz5Ii-AHzd;Mihl(zh$3g_=sG*gA8- zBIc}!pHsz4qTa)vX$MJ5LFyF^zkW=&EalECVBFq?6@FlfKsYSw?bwjj{k(9zbhdVd zgZ`e1rEaj#ach4c9h7R0Oyf=)?z;HvQXXJHgddeF&N1@%QC$eKbenw>itxHiW~i?)9m&R=VzxdTy6&% z?7^@5fgjUZj)Y?@^}I$qN?64=isQ zQX|sYVPne-KRH`T>JKF1a4Q7Gg>4AAT^8GpM?PeDky3)Rj@GaOM`hk3<({n#u(7qN zttq2pR#ybo9Us1$%U9s*vu&LLDpRtYTG_1U(cYM`)5I=r%Yjyr0_2V*wZ_^h3e8Xd%Z+j^g@y#F0whqJ5B2fd+rke zMq4WOfiAj8^WSHyg zZpDV(m#dFQH}W3o{k+jXF!L=eCh=O$fnJxPNo1Sv9+!k;ifTt6)ek<=W*((?D?!e~ zUbmk~)EKnazA0)F@L)gzE^)aA;N$lF!M9lqf`nMH=X~#5wfOQLYfvEj#cbIUnj0Txd5rsLmF65nQXbicl`MJ>k^tI%{GW5kVj1 zobzDD^`ocKb3g9zlR;Kjt?rCtH1pEf3g-24Jn+Rq#9=n{H2P=X(p|vkU|w4w>;L?K zbkgD(Gq}t>alncD$!xyVNfm*FEsOgVMYdlVO}YvTyKp?-}Ds;)uY%l@!nB zc!z!-+)qm{JUZ8%q#Q78bd{Lgj^j&=b(l7MI`QGX!_8(5@kR9~@$b1)rXSvJXXP*b zu6{=BEh40px2$RFLtg5erw>ph|KLLG{oOsDEKlA1OHR@fzoxXVOe_$!7>Qh3Qnj@S z47tm-Qo{?^S5~)87ZZai=M*y1#mUmo3XbstQ82d%cO5}ECE=XoeMLaqMr|!Gd}teg zIk@qw!NmRwdC1pi&f1(X6{KyUl) z&;P64#N7jK@YXa8vHz+QY1#PI@aThHNcGip<9^H*uc2URwQusKdQSTXrZxZHw-WDE zrqdtY+WQ3Na8eE!+vGInzAmMFy7urI%kpl>seZ3|-vJ;hUE(+kh4S7BwW{~5Q~MeL zrGG(OUd!`79<9!imPHpRPL4+HJ9ZCgu<-)1TS!5;Gt&3n9y zp%dpKOvi!e2cIauoHoe@UhL?D^%QrV$9TpqTSAI97FC&NKZC!p8>%%|QTZ_J#@L>v z*~)J63HNq_PSx9L)|W!+rNSgBO>}BZOkfIzMw$t{Ze`cQH3**Zu`Jjx+-Sb%Q`mYX zZ3T}~c*y*(BvA$Ksisxsvpssfa|{^y(YPRkjFYEMUMr}!%dO+^o&HDvkmd$Hu0KGs z$F?kqH>ONmB%)oPL+}2xhMVbbsxY!b$YJHROjQ&##DOIC*SQJIV-!V!PBe0^Le8$> zhXO%S#C|&b(~>m7kA$BZwWfM^y*8#&jnW2{5kwy6s7ZN|_I1zK08G1)94jkYd4{bQ zIsp#hA4T69kDrw`Bd$E}!tAVDS1_a@0JekJG!cvB|=q$$-3c zsj_z50&5!1jgln{b}z`j9u)i}k`qykV571RK1OtPg^=FRq|NNHBJ%!4VTY4)u?{tp zX(8u!V?=iPPU+VWa2Tn37R8D3eY!&x=-EzLRnV-d;8@2G!1M6o*&52DN|S-Gybfc_ zDgW&wvovNwdrn%>lpxe@%ME&yY=le^%jNA&fkS%Jv0S^1rpq(AwF9+%m~busq-aqJei#bMGIVFY z&<1Jox@gtp;V3Ckh89 z))pLcTcb%A$$U|+6Az`bC6gtxvWYRr#pgNCmz?;t7?{@{jS^)aBR_#;95*=r=!e@; zFbH8#jwBbam2K{g_Ydxw=#>VkA|u_Z5)QJHxLWGoye?kxS)&2Ba*;_M*4cJIOh7^N z#(nNuKUQu;d%7N$4aY)E$f7rD70hK<`h6?eh`+MYhfvIx$$r3oh`Ce^Qb$jbs2Xb) zytTKR?Z57jUS2VKL$%n2A)RG8G=};HZ604TV_?2AbB$4dTQ~OKRCi90v9U+anHlu`3sb{EdIyR8QtvDte#e7+p2WZO5*= zFIS1Q23CB(OXBd_jOYc6oeig#;<4f!R)h*hAL2`91?v&v4|!RStpy#){0!VVMFX!j zhCjVWP+Y#~5m|Jw(dfU^l!E!j_t+DtY2y1P?0ywxKqMS~H(yKa9yEpSm?YR8fZYEC zQd);5???U62T66c1R+)M&KQ40w}0mkxzj_0%AecU)N((##T#GCX==UoK*Tx+$m3Si zTM^XFDGRkdYEOk%$8?mOWe*ECRa+!xm}dDY8=C(skN_eCywpWmMAeBvetmOwxPB1s zSS|MMM~lAS2}I9w4$0|8Jzy*}U%9)-#yX(*CHGG#Li%xX^)I!`RKyo-fmbFO3nIF=lB z5-!UdXh=+d07^q*3;E#zZGome4*_io8JYC6UZgNd2V(E=9w5rRf5kQq*_nfk-Q14p zV1-%vywb9b_!bZB)UsVxI*&!t6o?;`ZowjJTi9TbmxiG4_xRyrd|I|<9I;4j-**L5 z`2P;){)71FU{$^6PkOz1r?y5?!h_ip)|{#xLZdb+w68w5)*`pP2J2dhxQKIL~@^Ttv@8a4f*ZU_>#Sa04ds5y`zXb5U zq*W`j%zPgp1Ir%V{KNpv=eZzu)Gh`#V zXvR>ei;W5sLj;(jl+Uu~g}}0za8l$Mp@EZ7jHcbiI@@50pzuHMfC_U(@4;dFSN-6| zYUF50x5Oo}Osw`_`i$Zmk%?!jmq7%_twv_{fr}yteFag}mjNXp#m7`Vi?jO&u!q9q z5J_1f!L-Lj9N}x`X=CpaZQ13yzNNZBXa$Xg4RbkjFUM#}Bz=^1)qOf3M#Y0nBdX<4XJ4Z$J1y!T8zL7T*@F9eqL^PG;{{hFEZJPH@}<+Z&r`UOk(a z$x`U^_2X1aYA+$Xv-@JIQ_S!ei{78}uWN=8YwUvmLe*ud>BHO&J<*%0Z~yE;+7gxm zO^Uk$YA>yYsmcOlyvI1*tv-o9HyPO8R$E;Ts@zf1L`sZmL;i{OeC34ivs5-0J=W{%8j9qa4gC zfbXA@$cAE#33H&r!<5xY6r)TOPmOJJ?E??UQl+OjFi8w=*{HMZ7Ro(G+z+~Pfu( z>FCON{K$3&e8A#|jbA&lGjO~q;y(u{wY#Ff)dwa;O5Zh?X^s(zqwY_BvXooq%41d0 z0!E##6QvejFfzU^1;5|#KDJb^YmZHlEcME^<<#8Dvp=D_FzzAb;_}S0br-s;9RY@Jk3|~gHAJsmn z3c!_9pyWWNzUVUOwd+i@1vh-s2C*;$BntA)$2LUXn$Rc7%IVY@f%d;7sV~{(UT$4a zJFz(sR@mp`4s>YeI+P~-P4VCOB=1_nB|A;ju_V!d&5jV3%d~b8%U~&X_S_Ha2E{nG ztxw#{kl+bves9U{0bahFEF^LezRoOo73ubrXLgd*AemkMw9Hc%wozas;t)(L>5BMk9OO4Kab?~8J&a!Z za`3Zsvi8K$CgQsYymq6oNFI^5;yxR+!;-(SGS-rd>@pLD%SeytP+p!}&%{ZkCeXrZ zp?+n12Bif%A#1*2K~+fWZt4*UGk?S};ojGITMT;p!(wwTe*u_$fAjX$YZXG83s+Ld z0|tKCClho0)SwlAi{=>JKEs9HM1aPDfHi zzfM9&;o`U}^|ZrDrrDjK7SL<`oH~%50Liu57f@fwD5kgt7yA$VT0m6P_7gX47Cm_2 z3Cajl0D6}f^yv9(laPl=iaBSF?%iutz zqn{1mc|xNzZc&R=QAemO>|Psd6=ilPTe;F4DH8B&lVH@k8VwE(bL)NwAmfHY+g#Ht z<8S}&LCzx@$IM}ix;2=?P*o*#0-W2wSj273_l3p=8@`(tr4G16Hz&-+50RbYrNrkk z^=2AKI!R(G!vFDMg*!I*W>!Koqe|f7ADh$G^!Bf2{J|4o5b_E4eapt#E2nYzi%^2W zH=!P(?+>^Vm0oP?w%v(|C3*ey`=2zc6BGqRiRI4Dj7=lwJBsDv&PF9XEwEEN)*}?A z+L@Jv?Bv`IB)&-EPu8>0wJil);Afpda13uc4_EnMR!gTaS#p$De^_du6fApejD;M< zMWpo0N&v18Ww86t^=IikaDByr2CNbB1#hGUo*=+dbHJ>u4e%&KoME;t{zxphmLHBe zMiRY&JzE+R*(bec#q6D_Wy`&;=8He<6A*vIa}XU<)WqH(EE_qh+u#o4H~cHD2u-Sl zV7JdZeQ+#*##9@RUJ5_vg2);ha+uZo4+q=%7=F41DK#})wBN!EzWc5^B5Z0)3((d> z6lTFNtDH0;`%-!69-z$tP6S)rri|Y^#Iq5iVk@+4FsuDRAj*H`ClIA&%c3X=XuA&o zK>VggFBfypUHu=rVA1d+dk{Z7MGyZ`A)t3*R#y4+v&^J;@PWq)ABiu8T~c=Cel#DD252D#D4%l>m{e7l;TtEK(ww8RO* zYcmQs5g1GHF1At}o_+|xi0==)$Kf}wsdGxfkRhrV`C8AhG4EmRj-E$eAA+I%(cLpj zM&}uCidC}{QMG0;E373D^XK&SOVKxmgl*(cnn;;wDZyNf1+A_=MPbhqn19O9oiy3d zWt{ffx%3+wa97>QkF*G9aAfP^HB0n~moSxaUaKfY zQca@P6XsvckgG_Bx6!oWSJ8Q*#u?AN)Updan)hs;*qZ6(bqg{NZG+unm{DbJTAZq) zuq6$5Pi$2#hniYl1oRBgHMo?&c}GN%Li|1AIB?#K0!@@k!|15K@4}`mZeSAaF{bM{ zxJ?G0Th?eb!8+VBYeyz}YIDAjD_QeR4<_E!=M-XCl{?r-6SkTXslY242F^d*o&Wr) z*?P|VdtQY3=n2K_tyM^NtW+&mK5)!48}dT0Ljwm=-SHRKOXyrrEa`y-OL9v-R|Czb z(|${Y=5++-dmOB7$9(btbo(;d>Jy#JQHI|T^TZ#8vaT`zB_;e?UA`_R zg)!kduf>UB=5_ct1Fq+uU%f|fOr94V31hY+3`Mm-Wk5Z}{O(80n>z^y0m>g-jnjzS zt@9;O<${K6&4f5fqNI26&?U9Zi<4JrGNs^Y>|*6795yd1DVQ&ip8BhdIw|TN(96C( zM?~^apB@BwqW>dkR%H8X5-ii+_S?Jhn?gco$b>ib#dD6AL2SvLOnID!yg3IH%weGq zooUlV{)&q}wC*}oQ7XqN>^K*ZT-UxGpVLzNO*wBCZX`xKJ1#LPUY3|$@&|Wp*ndvM z^jcr%a(lVsEH|BZhbz_LFO8(7pIg)^eb4?+Ge&99zRPEKp&TW@KmESv`IiPHlXq_D z)530{HghPIF-w(=68EuE;>1#7*D)d#Qt{H;ptI-&9#~}Cg8`xl-&3#yVt*8FurS9 zfk@^#samJm{&tx9-k4cMutEs2R9a_HbLr{&o&&TN`AII=IE={SLoaUUwK;K>u+eSu z)I8c1C+lp^?Yp=PBsT1P50OWAD~FFlu7kRB;WjsupftFz-)Zx7)98~|*}`U*;RYSO z*HSRtTU!7$AoiRXP0O71I=cXIHh-TRuo~_Zi{ZaH#7#mWu<>Adu-m%g3h;Ht*^$= zyI*SuA)b+84OJZ6bF_*uzdNj}pO+5{ZPMiGSq{h4)rNw?e9dCveYYyfhA+Qic(>x2 zznd}F)LA=Najl)tEy@l(3e*bY*SsGv^&1kvyr()l=5Do(rNc&J{&HRP#R9tnKM3zO zAL(TcSvsxI{ym`Jf0~~oXM30S%O{W`ho}c+!Dkd~O^HpLcOX5>hXe+5Un0`EAz1o@ zc>~2CHkTJ97c*c_T6$a7yP`Vh5@UJtkAFB`vd2%RdNV)En_9n?loSpE*@m;qFaOf$}x=)l#?0rZ2EreX#_U?jeOrFGh2n|YlpFOqJzU09J_tqav+#vdDSP} z+xYh1;n-Q;wc#vFUe-|n39aqkwjk==Pv-AH!IWR5Nfr3tnV%rm);-W>Q`YVLY`hV&04S`23%2`)11s9@6H!6|r|BFHIg6NtsP``-xVpS8(q>*g5H<+u*ChNQ zpNRyYJy4Sx+e`W3eM8~6E~KYfXy>@HEL=(KNJf#V{h%+Ox>yfbC9fX4My9sTW2?d; zDrq2h=|(2l9r|7P(->uKzOYpU#Ms3Xpt~w2TXfWf0p`6zfgRT}~qgG?B zX$VaQg$C>8gVdtj@*;(aFDDpsatydAz&rYE!ozUDMoF{xO8WHG)~}my4tWe+Ag9%L z_iRs+wsIYEa*^=}MbE*#gBW9>IFV&D&YGBW4dGfzRfM)PT|J8&mjD-2o~QZGmglyt z+yNCGH?pN!BIl~+b*h_FAnfzBn_bp%iotyEVZ~J`HK6h~BU1KG1(*y{*^YP;gJM4KE zEa-!wLRvJ;w}Z2MV`W`6>XKR~BA2Ve)P=1Uvk1VS=t2|Tuhi1b1hg`XVe*2vszhZv-4lIDXtCy^HrR1x*qC;YM z8IxBOKSs{oP%P5tL37q$5gB+}H28&CIMJHNgE$S*bg@yu2jOnR8cSiO-bV9Qz$0Wi1Lh5EcZtZVHWyrr7Fx`Hh@~2@LF4omR zHiw0rd?rh+Ha%xB8Fc)CdFKLOs)^Il@)Np!orgW1z~nVrtEPETrbxv|lkQM6lRz%J zTzAEBulO0Rn;UD5eF&*ij3mL_73&}d1To^3ku z+oa|rPmwk_EF#&j3OVYcG22325DY;Ioh1^rRkd@`2=j8z*ogifd#BJ?PQ@HlSzYYD0TlV)g9+0I*T&r58*|x)b~Q=m#r}gAv~b3OhBl!w=prDo z(LehF16v+W&ATD;p9k)_tdHHEcQc`bR2(=jgLN2aiO$DN%$NH=uRYO6&qM(fOU}O{ z4Nj3_Ma>3+FojwWB`{)Z(Rc_7J`ctEqL!h{LBE~l8`eh6&? zC^AR`m{C!CkXi5Q;JR2^ck(?+)O*r4yA5`&oPxzqx8$chRS8tey|W-^g6E#2D>%RL zub6-A_fxGnUN3~^ow2zUaZ1@67oghlpFBkRxUGHicAl9(mLM;k><2zS}yyyjQn;x@J$%?$)*@mjH3#8O7Vc0zytAs z1s#f>6~djL=z$`#x$TxZ6@CwpM|dqJ_9nT6cmy`8mT-phTF0JsU;EEWfMgg*j^6b0 z#B-w!n)yjkSY7_{Kaw`$G=FGOvg6h!IyZhuMNPN0P9|t9`jCUArn0>@KJ7%l^Vbhr zj6<(LyGq`w49Xy$j<=MEC`X&|q3J&-V#U!Ea;p0%vleK?GHs)yok|4g?9|t)rS~>~ z7GV|`b9?rekS~}1a)X7|dl7Mxr*Qi+31jm;;*`Js({)@h|D0bGkjfQgiK+dXkuLH4 zq5Xh6W71?d=^f0%3YxBq;N$jPUY4gYh|4T0?!V!$kI>pYihfo)A746G>_7&-Dn45L z45nL5` z5ic2=ED$g`6j-NYo8Bm3?{p8|_SEmEkQl5(*2KP_gSPBSHJdi$YT=embNxQvoZw2z z#~DS07x8z<$TRVAck$6GQOE-_dcpU20-=6B1KC;2yAFy&s`wCJ{C47n<3h+*tmx>r zoXz{_-xl4D;7tMg*x#gpww0q3ohZsUe9xafH&x$rfFe-Q4~SYCy#qv@KS~ zt}33r$X(}&p`T65z*qnOYZS1GdW$dfhxlWE-wScfGXCePSR{1aT@s+U6^{o2bXvBu zfVNo}-n=Nmr5{sCKihEl=zj5kwHe$o!NMG(R}U0lJPsHno>uakE*Sx z|KmR`>38~F_v=~T>3tKp5ld!QIpo*!k3NpNL~E}5%8y0#0`*%qo!735zER|T{}=zW zA@PB>49h(ulOWroT8Rw35j81J0*@aFLW8UiLRhT?C*_$UOiLa=*2%1Gn$PQ{So7sI z!WQzq%%zxm{_+LQuZMXL_4__CjB1;JITgz#W=h^_FjHc{D~!co+Ks{szHt1IGEq+2@(h~3TGCWe<(h+Kj<8cnC2$U7xTUT-@7RG( z+Uv@HuFOU~4w8Z2z`YO1b~ZMT&E}e|u@a)18u=*tO{$2B%~{x*B_qYjr=mi2c;41f z7nzBDX`;~OYWPQ5Zz4V)=KU(QSK^4ABq4Ua*9{EQ@)oaipBDUv7au5`*y`Kx5``A9jeDgN0Yo36J#3g`Y&2S0S_4)1=s3zHhpu=4VMZVleGvi* z^K1Z|rjbJ@F@^#K(fPA#+0 zq(?|WxM(NP8fDD z)!3d_rK?)*`%E^*tcBfYg<$XyZhSpNM^1EmeVKO$eHxK~O{0JZLC@8f9Ts>s4di;> zfe&7MioiBD$OamQb-VFwY08&h-d>oJuP;K!5L_DcxHDTD%-C_{N&jFfouwDljFFEg z!g%}-x~|*FgH9I_6jZwJOWAh-iPBuHIUIYj12VL=nZ93wC|q-5!;AF>NQr3Mt}9a* zM5T}jo%kIQFn;k+N}^L?@@j$Xs|Iv@%e+)Nl2EnI#nhNGA6{JLt{Ee6 zVq7#3XPJ*M`KQ&&SoO&OY)^}MT9raJTV|4!g8|g|M%ByF-0*UuZ~5P!L2vSsc*G-i z6MhOV_Q$T;4w|W9p8KszJ7s);#FQSqDfvZzz}S;rMz?11U& zC-E~wAnauZ_Yie)P=U>B`D3iWl0iS2gmZenlJCz1t3I5zW+U5b*e*Ta=l0KQmsdIQ z0ZBwm&m#E-9j;7za{xg#k1Z4KCgBpcIrp845mf|G;VPdj*8!w|vPU|hP0PrceAz#0 z-qUUiROLsyza>D-<@L>QDX8ZMqMHHpsks zcGS)G>)>hZLXS6KO!~k<@3*FfRRZg=>M`4-O(CZVy!I4IM2cK?a0caDZuERW?A2bc zH_Q59y=tp(Z-?G>;9Lq9Q8p8uo8BYNk4Je5EZiS=SyTVd3c>#`BCP21C8C9{t%AnK zzPSoQJ_Do$Uc#hZbK-Vp0(Z!x4s4eEi}L+WHgwy}kLChnh)I+0ez{Jne4KD)AOEPY z^xLJv(;2$i^yE$FrR$;{l7F)7tY`8<@8V1D$^E3l;^}!CXm{T9^gcdpXBONSI`~S8 z_$3f!bVCp}2IGehO(8@7Jpr^8u{-^zP+#CH@5xBG`5rc}TWS7EgxK4!+wYIj&us?S zB2j_n-wdQmm&0%T^_Q!6BQM+V>wb13f>}-MlfxEoe|zRHLpmdo&jD9>%AiOnNey4x zb9(#nr}iCDcY6F&_`DlS_4~TI9L4sn1<F};sCzApn_g(A>WaaDh!4eqls4ub{#}n~^Hh>0PLRQO z7;8i_!M3rq`A6vEt))_zka6g&scy5VAU!96K0kw4F5xy-hdef&HUZo8+i23PB|Jmx8pN>Is_dXDjfhOjrx0SwcmmS+Kf$X`$d0p(!;Lx#*7uC(TcT z$DfPpJPqpOdF4T&1p$SCzCLG;Xs^D#J4Su3AKP-|f{3)bHBVXrY2Oo?{@mhKFO~*+ z`yWB)e&h6Wae;hSR&D3(`zs40EV;cM*JHbCJ&B6$yHCKPF$?IYk_JEA1emk$kN}16lm)V;J}TFYo&*S9mhR;M z&et*e4}!^DgV8hn+SqlC+5T8Sv~X?Mg*3y@_JVay#Zsi`s2@`a_+j6_J6n!T{q%!- zt4-uPgLg(g`-Wv!jKrnoV2(b?qAQ%u!*dn?nkkYGHhr~vwTsgi9B~0>O}U0n$TK5; z=j0vzFwv8HrgA@&BNVXCRc!?$931 zZU6fUk~H4FXMH#FcaNyraC-rLb!39)pH?ofO^&H3{+6X*&@tBd*+zu?Fdxl2dF)2B zo*$(2X)$a=VTj${$~G)atH^xRvo|TiVaa;=(qnnCaw4dsnyguz#gN7xmeb&zS~)k7;h6q?!1dCGjb_=xjxE>}A$<#4u>2I$6iYp%J}w-#0NCO2Fe zMThZOL!8civRT(&3RI&I!}*ex73RiF&TT5h3P&EDul6f@JsRu4c7MTs6|-YK)A6g} z%T2#boTM8NG(_ZLB3Epssor1Zs3sfu5;muMeErbGnuZPAgIzh1h7r0euVU{(4M_f4 zG0zgUg9~V)8-J_)`OuRnT;~8930E0xnHV+ag<3qB?@ZXWGVG<1jkHLe>1iLw4zB>! z!;+=%b8m)gK#y?4qmeAVO$;>H2lGLZn#8!No*yRz17hGe&|a~bZFVNC zZEpYV8NYD*STOHe>$!}T;j4^Yb@~c#TSkoQNY$dJaCat{X3c(@iLoNPa2|zwlR&Ir zZMkBeacUb``4-=9ZWnCgxhaYSo4Q9vtMqe^oNXw}faAl`vf#)TXZM!@TKJ@9`Q5#X zL72f@%ru=CTt=PjJ0d)wsD$<+MB zzY{p{(KhhPx4@UZU&NQA!a|u!kezSqFQWddqbFLOM=VLXr0&fJo1DORlW&B1G?I(A zww_63%5J?p-4yqNC;6Rh=?*=AKb+E?V{r1i($J_{Oq5X`R7`<$KU4J=ars{IfpzE% zknDE4@V%5@_~KY2+}svutW;N}uvXUi0&gmOz%W}J$eU65pzw_~Dg{3ZbW@I(;Fewa3aLm@LCE9KRjqn;oaZ=21UYxo)C9F zbkEMXpL{;yHuv?OVApgYCG(c9*x!>9gOP^(ymqgRX9#@|14-R|)9j@JtGTcJZ}6mr zq04m9%SlJIcj?CiU$rB1I;%~d_NZ2f*ReKsk{0WTHma*XI3{yXNM9!F{`j!D>>=0B z@TmeQLz=ejmN!OEvNj+4yz=0ehskAe$Q4D6Ne;1;cQn+9zCqS#zny_~K+T1E=PM7` zOmpzhlvy-Y&e@uLnhWnsZM->DZs^hHdhao`gSB%=%Me+uN#b+klH4}JQ}cqG{v6RC zcl6?0B;;C7Zs4nVYRnXFX{zQ4kzWWZfa(Xta?hM;d0vC4Jp~SOvjAVuxN{CRj>dzQ zh(D${2{Wr7zjW;Ai#_w&O)V%U;m%i`IlQ>RxYA@Z)MD0IDLOvA-7n-e84dXCG4E(b zJ{(#%-8}PFl#r8RhO;qu5T#TG4r6-I9~AA*rUrfhoKw@I2l$0c|Ex~UGCw*u@^gpako?qYxh=;(ch0OY} zrY7)*qHK)^XC$P>lZ;wtDekih4obAC0n3a|GWmSJ`(x>o5p52Y1z=Z@b<5{&jMUMs z9;)9eEl;T&IhqgG3%LdoKu}_%xB2mA#wg??6xC)bYi8Ff?|!kBq&kHRJd~xL19Tkrskh9Mjbmt&qP{|ybBP$v^*f_H$TOBRO+S5P~GHO z=Ukyb%srZiVaXiL&q5gnA2JHi{@BaEP5LI3pBo)%CVSUqRgh_8jAjb^E>XO6aYAKB zqWnGW>b^QSs~I; z)=sK8^c_e~N2sJeUREl<1)aa}yXmbq_UH&UdQGkRNohOj#FrcUdH?Nt9_3!Kw5XrH zTGSV4?qEJLVo#{QImEq48qIXhyxL!;8bsdqW9KbsRH~*n-)&HbnMtQ~5iH-Fa2&wO z-%Gr;4z-#oe|+O5=N95Uk{3JVAqoyF^-!Rl(-9zV?Y_)MsL^wIpHStwFNvX8%3d3A zthpES;gkv5{r>pyk2O%bqI*CS?WB!a+=ldP%?h9Av1i6kD{JwqLTsy zDS3Nk|Lb<0f-mJF6YkLi2#BrA%$2)-Oh8OEs!jihvpY+m4P&$DY5tJd=1F$swH_Qt z-gJivRXv4S^(RHQn9l%hz|nEc2>x=+A0Q#eaw>bgBy9*o!<&`%{4@cm*Gm@#bHk@R z3A+}Hu3*A|zcfD3bW_lcW*PU6(Q$O@>Ut#LOoo?_?4qHao9Cl@ko@6o)SpLY^z6D? z0`^x6pbPpsCjuNK=GL7#>BWWQm_*N4l z$6;rMvdvzB>3(6qz>hig8ETK5r{|U^U5?+@mb+{T4EX;Td+%tr<46CW*oufz)Lyk( zquQcI?A2ixZHZY`ZS7SeVpF@6wurr|gwk4-)GjTmirRbc5hRlQ-o4**@BQok&gb~Y zJUGtrdcB{|$MgC8F`46q=z-t8Q=h`Q6fYzCzP9a@;&SHa*{OBX#`f!-hZQ4;D0+ce zyS26&i$C5jVo5gZx9($69l{DCgG`$|AP}c?VpJpxwX5es9@{(7t@rUZF~zF-YgDm&`(vTch9|BY_g+F zJrW*KUAV10)Z#_{lKAlr?@p}34%L=*o)^^IPn*&w7v=6EIg`TSJ@=NB=4w()iX|{{ zYsV9U#B$~WBd+0c>k0XtDMTGg!Y1968);8V^p~2lBgL$&WGCVT|A+u?T_g@&PYCA_ zQIppOPbpDp@0Y%3ByGXiY;~YoLTZ8XYMXLP{Y4JD{|WO(spDWkeL%X7I;isT*tR`z zHDdqt9f&?YvCBIO9+m~osYLC}nv*ix4@PT0Z+%?bHEbW8YCO8{D(iGt@L=V5-S=_d zTQ$%93eneJ>@Q|W!8%)Wo&yJdF)AJ_P??k+g+w>RU}b|dPJxbq$-7)R(|3i~G6Cmc zM_@5hUIgq?q9I(_?*ZugY+&eHY&F=P*VJXu*a6if(K-X`qz+((8#x3rsm$)kX*CVnk^g(EfMbuqTYvxdL$mv*F=i04HM+xPj1sR5`W-fvki#Ob3WF_NxN-j9GVG zfG4PUAC29a`~-YqST{B9l;W4jx4w`^wW~A$gkP}aHj{UmUA(hilLHVe#Gu|$62ZCj zfa2gy0UB|9$Z+j8b-)R+CB<5UNCdPJ9CNHt)j-b!z~$IgU1;*q3;+>|22FrkU)EHd zrzn~$I9x0V%i^R5#2U?NfrU;`i(pK?p(k~KIEV+yA3zBMVi5nX1mwSr0M$4aj6QS) zt_r!3@jns&B}LQ%B*SJXz%B@|DuDgeGy7l1RN~mmsL}NswvADAI{ZD4Dp|AvwAJLqf44-SG>^7>xMFK}2N`Eo84Fwfl z()ge|$)1s5goaLRo(@)|-i^Le7QPHE6XDMMQ-01_8GUV{Q>xsErABUr#2uLrrGT_B zxVA`VbU*D~%^WWgkiKL)KnSH00 zb;Wa%(fFA#OV9yb{UH{TTA~Nr{os_R7K6iO8*WPvnD)NU$V?}B7n{2W!mZHnHDne; z1&uRn3b57%2iLiKBTyM8xA-$xY6!;k!G7CpTNRCgQ)aH7((Ut8;q|?Ud#;+y_yLlR~wKpR+?(3pq?XR)7Tp0>I;P8Y`yb z+wmypP^A>*NmbEe$jtDG*7sx_^Wir?R;e%qe5*oxwr5gRUHO-(_BRMenJPto!ntMl z>!-^_Z!OretZV$XN%Y%v$s9qUn(Dvb8A~rb(k!5i?zN(E`e_6T0Vfc51vosVGwd}B z2&ehmP&btk_2TLcrgZqm4aVrnkgIMKP=CK-2m?#L0}R`0$Z?~9o7uI8AtsnMx_9$o zLx;*i?t+5>Cl1Dfn|sZS}tHQ z&(`-zk1t~$KSUp3;ChE6JWJ$UVxRjPCV9^K)?SD>-Z6t~Q6XxcgqKVMO@#(P=$2ka z2cuIAsc+P01!$4)U#UbC$xBh!x$A2kAZ$}CSVk#QdZAN={PhGP+^Tan7Ct=CA;3ao zfh02am3~db|1IjEBEMwOo4SRg(wbx6=BBCeO_bXTl^=?qz_y#}bvWzUNFyx1f5yf! zNq$MDa;^0VQ4_GV$3%&ch_466;N!n}@D_`t%MS!9Izyt5H}ErhLf+QQ343z+*tV2l zHjeSz8w#bSHy=~S?|9i3G}&1@fP~qPEs*vGR6KPUtkI$1$F29H?roYaDi8Uq8eAhSiq|Tt1~BT*pt|+CoRq zvk<;rZ8UR4#CSWZhr%zpM~h#fxSHr;%Fzwt?TbG-gdlUA*~WBK^WS!n-YvWFTi_&i z!piAj=%)Si+0rX0dIPyZxzBQvOJ%2oM!^ck#XUMpzdX&lFP(9BZOH3^P@!S%PZfk( z3%Hc!oW^5Q-O{>%w*|M+_k15U4j9;XHZfe4v=1EajwXGj!&XDm7T!Se=i~;^v+Cby z!_%HLR@a_ik3OfwpCD!sdq#xunj60`uSD$-vN(tesG~bh%zgRrQ281i(S>!iv_KDs z8lA~Bl%=;bL(YOXFO9j*uoh?~c0y!qdKkA_2NyMB8IKdM|JJ6J4)R5qxph|bBIpSE z(26Cve+@)GkKze0-F-}ZqmSBK6wV@nqt{t=p)DaT^)%!gbxR|4+gDiGV6O)lO(+V4A1h^aH1bawFX^6(={YP7TTr8S)8BwV60C zy=J2=O(CkCKsl@Ee6RFcO+C4{mxpP2BR2f5B}lOSY+q4i`MOssfeC`ZZ7R2a)tlGQ zRqklCE?65dyfXgA9D_XrPgxfTiqC*M^2z~#g4pwLdW_49Jfq!NaT%AU_GEzYOkik5 z8Mqhx*i-F>$Mu%66h*-C-}90KnGccMIR?i2oIiA=&$!U23%>=!;to>@q&WlbGdkk- z0=7j8-J>`=^B;k2KtE4avHyLHjDhg&wkz)D%J1I(`fh1pIpNm-+I&cM`8Ipt_bdq$ zjf0mjUmc7z(Zgp#Z?7vp9>~6OUB(lCH>T;f?fZi(>L}QqM&M9Y5O;j@Tn4c0_uxW_ zJzs5R8UKJ`U+dV$|JhfNPbE(^P(O_wz(ltvp7K~j`P-ss>phBk(p%smU&wj_lZ>r? zK0=m-jN8SC2t2D{9sl+uMB8xt2XHM22cGKf-nFD@6o@0?z{H;T<~1aIhlOLUXswDG z2WO2na%neT^SU7fPnvvdtR4+WH;%f7~zQ`h4BcY4-2aiCcn&PM=E+2<7M<+usoemII3P#un1O zNVI)SAuK&Kjpe;x-s~rJf&G$OhL2#E(XnDe+2)N_8G}nLzqp58QYotL^Y2f>?LTPO zc~$m#+?Djy$(I?qtM@6mbMG#7$+4WA*a|7BK=LLHGKfihNr3~Ig3BDbQ}QF9V>A2f zfePo6p;zg&Y3*C%XU_68E$UX6szu0Jbc{oMN^F0rvLBdWd6^azG8jWljpfENPtD6Z zFLQq=JS`2jYOhK>Kic&@df&H{LIsys%au|1xM`FyeDS3DI-a_myd7$GKDwrX^n_#vI=ZM-PT z;_UF}N9h}6e6ey$-whb%M@yHV<56P^fVHRHS^`3~NX|M|4(p=-bn5HSVbJbG2xbBE4F+^J3Sd7}JFOI&RtX!yV z8pR~R!r?h_8%#yqG0)V_<-j0RRMl}cv8hjT+7YI~nM{ssJVw|iBz#Isp@q2vqpVrX zuu#!Jv+ON>J$LxHjCFK=@=#F} z2)eBucsl5gvQ(zwqtXAI{nHQjTJliDhYEbDQ2pD0=y{N4wDGn)qD=F{cEo!*2QDiI z)uV^A!soSB^$#jMSoG)7@Hii=_fald;53#Q0 z6cUqOq;@seYUrq(T!L`UIFj49AJP#H58(iQcdoPcW|_NhXr!0zFP_x9k1>lyJ)EJOz^XkqlqdriIs5S zhv&}hnxMPVybH&L1Xh>)ShxB^&ul^AcDD0AN)ae=zoFXsNW%Rv;!lP`8(eoIc=C6g z2%IU18S?PngXZ>zU%xNi4A^wZKq6FK`s-<&eL=syK3P7JBBzYgWNJNIg z9fnUwj&c%6_>#|U(iea{ID;xX6`j73in9jrhUiegvwZM4P=b)f`l;kR8+-5lOeS_< z_1v8rS1StSAGL$tjA7q{e$_`&i66=QzCj)ET>?C@40s?j_W^xCuwhKo0eS?i_|9|a z;)?!#*krjU1c)@=2JSm&!d{@kKBM@x0!is{RN!cGnyY=n6;^hrPKjgZrE+D4pKY) zi0~&nw&^y_SWDk|IV;WP`zlqRSG%c7)hl5sU9hkEn3m(dnK0*qfvDBc2XjhJ>Xl0w zjJ&35@3o~a{-Ld5|AL_}F^~>C&OaR!EN8R(^f78cWaI5!E$Y&1BH7;yO=PF9=rM-+ zhC=D~iO9YcibCeD6&|s*it@>FWW{E7%K^q}igQq^WFsGauj@~bf%s#Ky=@A{cJ1-w zZC#|;{gj;cs!$fn!FKNSU}uTo%P0VHu%}eOchy>`1;SF5b0pCp_G`N=b7Cl*w4(gs z>N`}Pv7%i~%w6}{mMX-g5<=5outWfWz#Y##OX0VSCkAvcv2)z~)u#I__Uf1O2-l_& zrKuN7?ab5OFs?8&QN<5iJ}a#g+op}EkEUd7hOgmqap^@PzHzv;SW!H(__P)(| z9z3078BAnLh)R0efk6bnoO>OP*x|^%VIXC`_Fe~hx`F$KAW!~`+;#gTo^W>9zFW}A z#i3sz#@MBIXSJO^Aw~W4<9pSv8vFa-TNUfeK;jscjI-#qg>C*jwDhW6@=1|jonO+n zcQ75Z#%9Zl9(Ij^^&SkENQ2UqwOT9uY+_JfW2xuJ_+u{Ey^?}P6p#S?z|NPgg(%NA zEa}eoVxaqh)1gp%JF7*h&Qw8;WZW9F<45eA;NDHJ(EGP|+iB#p?+H0l<0c|ScI74C zYySd3Z@RFB^99&aVT2f`{z-o0gA_svsgA6cDjzA@fflNdIYeZWZ%9V`o;6#4O@b|k zaWF#FD}B7Xei}3-KaI1&9$&88y|(42kD#jPzE=D-o(`PO>Ajc0xMESI#Q9^erETKR za)b0D`0|FW?7-mpCXe?0p@H0}QgSG*X7}1$INhT;CE-N7aI6cGv63$^X=(0UcrZn? zP&M1+I*a9{tIl8ZKv^ny^7YYxSsi>p;_*@Y8BfzY<iTV$fWDE}VC4{Jg! ziOAqJ7bgBA#X%7NGu(J|jf-G{;5-*U;W0Fs_iIK9U2kSJ)9Fj$9A{s)xf%!2br6V# zoG)<`*cV`Q0y%+-taklg;Z%lj9P3}?rZyEpQo7vS_K06Z#;>-7pI_!OcNq1o#_der-qCUFttb_J>U3QsKj&gJ#AYopqE2nc+PK!|1~g?$$_%KjOnIRe z(f-mf#!xcNZhN!*>+HXqcQ+k$_B|+!uRX{{)hf@09## zqxt1=F$B#myjuKGrUPaFq%-sKO>=j~bxKdZ&@1y{sR?sYS(|P;Ww94N7RpTtny0D1 z2*eXyMFOjOF&}eS3#hxiFnjdk8@y3>c!WSdRkp}{n>3E@LD-(;FMzxBHhMSaQbj=ONOCB4&+5pTkKf{AGAXw`Q*J?ue`1bSib%}on7oSgERSH!7%d> zEVI`yb*P~Q#tb@4InjjfAf%^YdM5_)WZM~xy5r&=?m-WkWH$E7w+f7b{vq;lj;~H- z>vb5@1TC_NR}ZFbVx z#kQ%2&Pbk=&mPb{C*8#=fS;sc=I8d*k~(?W+u1 zu53}Fz?Wh(Q}P@gfU64BNM0QIb&E&ou>IBIX9+dy=|e}OFY#E}*;vy_p?opGCIId@ z8dSfU=i)HtFrc*2b4&v8G@uOjun4T|G6sMvUgaJ-#8!Wc7ikQYST~BwyX6{STV&)0 z7#SG(usr!KQuS5V@nxCs5?QQ$OK^T_TupMulh45SSm(8Z7n9jKBU`C)N=n9a9ubnL zSgh>vNwo4jsj(@L+W2Imd;|_PbdY=P9#2Z!OUuLxX#e5`FcBaE3RpPI00X%J172|i ztcrIXpZou-qk$KwX}q>S0enaW&^nZXawi~tLFh9RnhuDb%^dLs+8iebI@*-}Z%5;Q zbr8}|)>HE(f25QgrIH0+(yUbNf-|n>A9mrkyVvjer zzcO2+YKk5&bxNn~Li352TI_qRap*61e%TbJ zOhWsjjil>=5H+W5ji42S7b6Y2L)|LunfCrQNiN^ zu_jR8+@2)q-4b&nXW?D_?s7a^?$eAPv0~FXj2@C%eaWmBWtohsqSDLhFNP41H$!q6 z&%PnuwLLd?poOPb5P`V|`K@7%fsEceDQrwjgsjTm%YBDFA0^R|sWr{H(e1F=SM80W z4|Kdw8$|K_#|x&J=bPob8(P~N26S=7flgu02AD-AqU?cLhw<}Vrvmwem zWnI$}U#zV#CZ%7OUC;_SANcwTD`X8JL|Dw}=sjO?>r8Yv;=d-EbnaKON!xQ4GTs$N zbwRuMi3x#`k+2tODPIDT^!0@&ZvVEHZWMxYYCD&#tI&elKhb2HnJzsOZU;5gpXv{kXsZQx86IP%@I7?wS^LKj2gWrg|0lt-^WrW_5n_{ z%9!9zmF26;r=sbC97mkpAyaY@smJ)Gz0H!ihP!Jct_an@4c+oYxLzwpJbAyPuJ*m}Mv1?PtdiXz5t z^^DqmCw3ovv5+KVnygwd>y^-5t+d7@;>oUwKXKNeoR6)@_JxApgS<^H;$+H{wWeb( z0mFXhXcs~mx$oXMAaT-_bJ9>J=+#^=X%4kX=v1#XoC)oX>*nzE% z^0f_Uw&Sd74C?&YY?oS~_QlPDA7R78gm9e^i;kC&_Y(aV8loqSw*m`!_pA=>O(>GR z-Okh;I(n57vF*FB;!?XKhlF8Kh|tMFdg$)7#=~lqTn%xPI_){m3u8jFqf-T=5wN*O z%Yo?XJH&gJE8Pu-_rn>8ia*oCUWP}1iH&oAB$$GhTlFE2{3d1Yg-{}T^6PFP0`sqt z*-hd)3IsI!rfD_~tZ5qGMAi}UVZN=8h5a}j5?IEYk_yO9{&1LVR+{h*tH_D~u~L|A zSR-R4h1Dn=5`KAK3x*d3HLKY%Qe_Or8Cu$x!Hl+^1PgGuS?Ko@<=`CyXQJu8K zr|ACcgU8zgk9OWg+4iM){Cq88GST(&{=xHqmC?b!eYXy5?h1eibvrL_fws-D9z;&&PnSYO*&FllbSO=-04~ zYw30c0sT(Ipm0O>xTx$Npe6zVm>*5jLZjzj8MegO;J1)=@vjw-{Gpj%tP)9B5~TB8 zHa2X5ek-gkb?q5-KrT3uno=YlU>h_WbASXzMa=(1F#UxAG9nM4qgwC)_Xyl8cIAM} z#A+nqiL?y@_Xk0MkR;Hy{3m}9fMcOVs)^y$Tqe}qiIIs_MRk`QS6WpzzFVv`m&z^A zn%m?x9~9d?vz`eBl%!i>Rl>ZK=dW1Dxfp*=&UVs%YCw%wkA7-e8SyNVyY^)k5~K6r zgpOg;(z3KTn5WOLAh1_g+#XMyUcuip+uIqxxXH2@mT66Y*MiFIPWa(m(QP`k_{E~vq(b4{R zdwndO&3i>iKuxE~vxXsBcS%P3>~@BGiHlj>30Ju6yf6LX#k`nGsr%6)cF`1fj(nxD zxAb3_C(5N8cgC^K;n%$>q15fKqW4XCraO>N5jQvPY5x?z0t#o$SgcIFzIqyHM^&OG zz4p^|$EfFc3~rY9w5f+1<3lZ!$t&!z#o^Wf9V;|lJFw2rKReK6z**k=@a^7tP?Mh} z^%WN_TcsP7v+g}qG7@j zh8n}gkG(k5<`h6A47~B+Seq5?6;PVcS$0(~pFZ01d9I|7PLp7OW=l(?`8=zHMDpY< z3OduL#TfeGpN=z5q{0HKqs@t=lt;1G2B-dj!kG2hG(+;zQg8t>X;f4G-l64ZjtEPN zq|C~ARYd*cFi&VdV>OVX~BB*4V7lf+B zXdi2E2vvmJfRGv)RD8{;k6S~{p+n{CT2btha5|cRDlRqph?VFphS6M=;mjhcXO=!W zcm1%PD8hxl5hYWxu)q@Bjc6!g6|TZH1MDy#Eh z*e-!OL4$_E`A2M}Al8isREX0|sjYLyz6s2p2q8nfL35MU2)(;5(`i4?ytp7vEH1wP{ z+IK;J`R`-B5`zktuz-BybqW6CmRhHqV;BhS(O61l4hhLpUwQVJ?OLbZs%bZA$Ht9` zbG!_j*7xm8+}1B_t5Dt)3aX|32EvfX>gbB8I5yKlElV6qo2$_zvdBpXWCY+sIZ;Q-5j5_ur z0Z+|yK?+XHqVni-PMS4C;rFDsslQ<=J*z-R58tFSmyw}`h^A(v?HpbJJbjZUpnA+i zIa@hK-N#;_17*prMHTSfAMqa4GJw~fXWQJdG7;tWvU|qG`D?e}$Is(z!iS|c<9;KK zdVj}v4n&7DC>H!fUMR$&x=rm@ocPb?9VoEqou^%pOFd@Q_2Od|<8I1$EOWjktcS=d zdTaaJ&^XBj)}9v6*($p1dFLo|Qr*P_$Fpy^NlYEbo>sdBmDGhb&f2xwj>~=ikB}73~a9Xx>KnQhb*3KSLn|a4*OGWXY0}#WL?^xFKr=e)E zRK%J=oB3&YJgDXI1*C!eKEVd2KR%{}q$6rQrItC>v2ZA(8UOGf#WZ*zy|*8c+4?rO z2Kp4g)Q8E6{m5}Es8S35ck=8Qw_T-K2CR^Yq~{Y31}*Gkwoh(?f?mSzW4{0KWW5xa zD{ad;e)t)&cy0^imo+TBbBW@}msgR~oR@;0l{@ev)irF>v#>M1!1)`6m9+{0*o42{ zY~a16eN+T?XX5jiu>|@y)JXI8>G>@|fW3I{07^?uW!=qU*ivLm5CIYBsc{g7t$U7k z)!A5k%7U0Ez)0yoW-~vk6I18*%@|rc z3d}E=Gi*swFSvpTtzKT`)Ll2Zr-9SdC#a0F-Qiz7q%Ij~k60%IdmAl1T#a2o5JPK( zZ2?(K2m=}>&)XmMU>X5krR?%qO_rLG#zHWeX*>Hk^xmNYOQQS-^fmZ2eC!(`&)Iutqe z{-(g>#FuS?|MH4(*s2uNWTMedCRmB%O&Q>B1=gY(PG7u#bRh{pyiM3zmg8)E^zsoG z!>Xcuv3sDRbbtzti3tadz2$=1fSGK{;JGG8Qlwu-LJ_S+A;o){%eYW@Tf4{iY zeC(UNQ7ozua?e#=x?L}6G13Dc58;?Dd(y*H<6P!))%rrzb2Fig!g5oC<%vR_$9Cjk zFQjoIvGy~;J)hAhvy$!GLw_s$Rc$FWCC!8iJ(l5MgRVrQ$q-vMEW?@VsoD8r^ypia zwOUqys@}8ja`nzqNXA{ue3aH(PbR%j0vxl=rmgIHPTvs}(QC9E-`uJnw%Ji2qvl)k zr0J6jG?lnY0QUp2gM$;=(r2%^2X4H^0fqiczx~Z#5HvH<5^eU@v|IbjZOIZrv(Y>xR^b31YX!v$ z?<(#6Xb%a9bj{alHX{=u71BZeGE@TjzVo@T58+}rECNpK_3o zac7u@w(#kaX6Bsm`Bk=k5?r}4{6ta6x>IxRkv@{~kGSMT>wU^hCZljS7m&22?|Hv` z#?z&gpzsJvTIC(Mq&ex-K9li7oXg(31j62hLoaG)+xeh`;2Yu2ZIMM=xIdU2Cwu;O zjY{EkD*93GEUC=mUkcLCtRu`Nyq37&%;ZY>c?&BS!_y7a$lp63K6YGLrlMs5G ziILu=>nua2MmO#!mmGMG`z}y)U(N7DAhoYz$cvkbFa(|PtE!lG6i06{xwu_%tSjH< zRoEfilr1J#ez=3(t94hJh5a=1lc?32C#9!;BE9h%caH!^9KlB7DLV3U#trr^4_FR+ zVT`%lxlR)kjeUj^WuE1&8fRi$W)P~v^5JhL!Mu@VS%vBwRgtsW1sH~qd?#6O;m@H0 z;mbdsn}DhR{7Rvc#9ubvdB7TP>8l%)58IuOq91$D)>ksTQ5jLYpuOymCwz%}wjVb{ zXXyq1S`)T;W6N^XsLRTY#5_SJEjA!#qteemyz(XI8UMoA&&a%p>(p``lxA`VpJqxV z^z^fjQ)Qei($m#_+TNiT-xyE+RNuJ#09%y`7v;{e-}v7BPr4i70BR(gZX9J*Ow!|E6wV2HU};>z}@ z7WKFEhrr%r%&*yK8$Qx&w4lRMtc|zY(xRZ0`FEN1VU0M>kBV+b3`S4x;xSWsXwT#U z26iyMDPKM@%)(t+Rw+3Zg6o(1SxQcDbn_h+v2)Qw65u!qfmJWBtM?<4IVxY{gZ3<- zj-3~t9Wo|XU5k!T5smjEy25jIEem1s=m`9)J#e6UL*%BxpU_pf?n4ogCJ%(k*xy^Y zK%HVb>v@czd6XxgeA&{fuQl#4-Oq%IOo$)0Wak6H65*d zs`$FkVXP}OD{wvrWI>~}@|j8pTn7}w0YRQ%l-JJa5kCk>w<(~L$v<>(ni&7+=&%+< zl1B0qJdZX#Pi}$WQ<|R@+T_qI0u?Hp39ZO)t@LR>3*#Tiu7^b$Z%_(8n~MOcjz%)r zyUuQHexto|wT|}0%~E>x{GCvSF`cHVg6dSPkKG)@lncc0Y`fNx?ct*+U7_I<`IaHsg&ymjtVp5Y`g>}zte5az6b!qBOYsYr zaNWVDgt31UT;qQ;lq@IszNju!n!*KZBsyi{Ir7&R;t-P6@*R!$(d3QxYQ)#(W1|^p zIn-769Tb*>KQTbd?7V*+NiI*>q}r14;f+=yLlJ*CE6R=maG*J3yc^bk>hLV7840L|8z-5JBH=o@4?#r8I;?!&5)K z!D`6)Y4tu7LlXjkHA=gK*Is)mz~tn=Z3(~-@puynOi!SIK`C*vGQel7Tz>bXVw*ZZ zKA2C-Y6G6B?GPCHLVVa0*rPZp6H-pgPXio_GeMWOMreXizRP8Fir**@0*T`R5*t~? zYJbAo#E{ec**5hEpg^*uV`oCwAuCjzwYW?LNO9Hxtq!?dsf{LaS{r6S$rUF6V$KNs zPXdFmj`jkUF7;jZze2`?-5NqQuksaN0}&3MCA_$1tP`ocg0(8|RPtWJ^eY(^KVSSpDTsWrU)I(1EMs%oZ6 zgH8@uY)drMfg|$|9#d@s4r&#B`~QZNtnWtqL1n5#Dzu8)hvljh#8-90YbL zRz3LgD}L?QlAp}oIY+lVUXxg*+pc7b7NbwVWtRyT()S6rqpsCaZn{Rr+Smjo;484C z!v^V0Qb1YQ)3{X58&y3BHEYD_pESIcKJ9$t4D&I?FRHDUgfM==N;U}*8I@i2jPcA8ePH^A507Mr!X+_1oIA=peP?w%H|9+FNSXWPMLR~oh=hac>(T+GU z-Q8*E-CuImAt*Z}|MtQyRtmebMN}j<@A~b@*PLMK&TCMr<-GuhKFWJ^4$kmLg1_qk z7=w`D6nMSnAPgmW;PI-WwVxn~i##!ypR@LpVB>&W(0|_7aBh$64vNNlBPs8&Hj3yz z-VhOih|2$({a8g_!zx}JM+y4#f7KGpY*ICq9Fr1Jfxq(4C4J!j*i&n+Fvc|lBPJa0 zcf8(d;STn|l=LlNCdd3Ar|=d^`uynApx-p&DF|Gf^%A&|&H34xMtUyx@nX3BL}(o6 zxb@ccEs3M|wyEguwlrq#r3kACm2E?%fkf`1NR-T@Rr7SGzcw zRolSAYnFe~?uloy=76csv(*%(W=wEkS;CZJ)vQ~{(-cJT$AqZ{4yZx&4yzgcqInmy z;W*^6)mx)vl8c^GZlnr0TVnObDE$F_>5EGuB7G7=>}CB zXeVr(ZnvOSn$3p{>(m#D7b-pLQ2Taz?EpM!qJFcE1{imDsVCC^L3Fy;hO-YDmbvVL(RF+UFpkX zcBGxp{pm=};Hzb<zQ8 z>%pqP!sW^F6@XHJdt5-~g0cUmB+bbh0`j*@%m*5Pt^`8o>&I;44~5VsK)XB-E#S#X&Pc|Mjb723-Q4KKLDg9gDGD zhONVVzMNR>jxbfh{~NII1%wD71p=&FR$l;0sgtm>0jc_|fGgBle)8$@aefYv3<0x& zE*m(EVu1VzNp^~UYu`w|flCzlvF?ZgLWrCu;Mlk|{AY6{WVhYBW4wPq`rSc5dg`g4K+6OVqc=G56W*bU^qHU3Fu6tBn|cN`|fkS-$X>xrtnFpo642BN%j z<%&=zco)yxplSd3$7Ss?TZ<(X#CDUSgiD0_38rC8mw4a-So4hIaK(dBySuQL)9GML zXKC<8#^%)9*O&}!-f9@;-QdbTh7(@byt*B0$Iu#^T6?4P1B>nItBe=Z%A3E3A2V#p z#n!lYEs4H8&8D=`Ex1}Z-th@Sf#Ne7>;0|oH1k4pq_h!N1S$Q(Z)RIFDr9jzZizWo z#nM~4xJ-RVT!yW_c;gq6gGjyM z1^S`Dz$6Ye(9cKuW=yR9-3O0odEh_pCB^SV=HuET^Z7-N?)~hmF^rp5^6|AYv@uQA zGmyn?o2#m6{lp-Ame0oWL?Z}`BakOV0^Ibe2)l_$#=Bh@!d|F*-V2^F5y;vaxG_42 z%$F|w5Z5bGQ9;`ID)$9EANt|N_JvNTZHI5L7dv+(;gPBMwLQrYM7WSWFUwLr8O7Qx!@Q_ zjH=?4GJ9gyu(%o`>IxQWA|Fov-un8dec?rbX?0v?g0+bK)6>bVxkDq?-M{N*ojdQy zy4h{Jf6oG+13{Gd%v0PC`i;pc`+Zr~PN|yyB*Lj3&yfc|8$ABBdb4!NpQqP8R-{(3 z%~c=Le%lOj5ARMV&r3>Ek z@I1*9yeLvfeq-3~XDO8JgkeCgoAD@)$Ni>S4*vYyWkiYYChQJFK_&8dEftRll~=8Q zJJ@g45|-s%yGkT!7QTVX(nqAZ#8tU}IfLrbwqcYng%5P9K;Z?nxrxs|~b$ea= zELgvZUi(D`l}=wqCl$79%YNSVn{C-20v7&$er{M9n|nJz!nIUNClp=`f=*xh_T_eI z0FISJ9GV!o3cn<_8 z$TZuXpXW29AJArSb3d@Q;(#>?=dZLAi+;ik?mmniiK|gqx57;ux9(wRI@PJ6B4p>dPn~i4!iK{X78FHOA9!$RnRfQswg82Y+W!>Zo`nYBc(RTeZlVM~*8`>6G`nqE%DT zq#|Os>oeil9LfpL%(5!M&FrbKx6cDF65pM5B@n^3lyR$l= z5|IFqhgn87-$DQB3+x55_2~GN?pxN**5FT3c|`5jTEE(H_DAQLTW20hU#$f;Ugr5& zk?(FoPQDLs-sgC8A`m<<==g|Q|T?<}V&1`F%m(8adktsvYkBILCz`5GtyHat@! z><~y3LRljSZaE(!riV|D6>%_(he#%=(l3ZRK)pc$h}J6(f#M>GgQCElCR4LuE!tz} zE48XfK}bQ}$=pl~2kFoO(YT|pt zy)+4+(wj&L9TAWsMM{vaf~cr;0!mZ5NH3v8dKHmQL=X!Cp?89afOJG4)X-59YDg#{ z$=&b0bN~O%nPD?`~Hl_P>V*?jH_(=%jEw90E31I%?Gcp%I4) zq>r#^CUhOvAB3($>*?<6y%|bp*Q(+`!hC@%w7_M*WF2=)#qZDtDu;6*>-NQ&&~id1 zpttlmRh?QYE0aKBwCDUaP}!TPh!J^K)qoqW$3PZ*u#3l^pE#ug*1{0?-WV^L+S1eo@Dvj)!;gC-0CEduxQmc9Iug zS8xHk>+w~e4%g)2Ft1`fR4Zs>@bx~YY*`sd4~^N?myY`*vE0<}!kPKAC0=K`0*XYb(fEcGQB|Ny}_7_`0L3w=2d~rSZW*^3i%PC+Hxxl_~D7x}FAG+BPrI z@e&36`!oEXXaYgHTBKI4r%u&*Q6JbmyFJ(C+OKPN{iS zmTmniPLR#oHhQGkbDNbZ*3hxNwQX3Z+FL)ST=1*HWS}0b4Y3tKb^hFBY@DFh+n$Yy z3ZHZ5%dFf;@TAN!)ACK4uNgHokv!oLcJx+;kAmR-Fck8I&-Ub880~D3c&NvhAuA3= zc8)NS*5z~d{j2GR=Ghl74r_}MF8#C0>M*~(9kq02A48Ac%#dx`E3K2Hz-!kNN#X7F zr$L2~)9DU-{B#i8bB{kPb-d@Sc~sxPNq*4 zShUeyQh0?1kE3fYRXsG6svEjju^F)9YV^T#(ZoOrK1niQ`{AciHV=lY=4} z(`xdybg9HLYIHSxLWK$yN7^zJ@6{m`QqZv5M$x;Nj^Rbbw$=B?Tl`rNiGIFc z>565#Q{3zwlcBh(kjuI+*vcbY)i^d(BTwG>xh(FiMmtolmrA3A9nSJ2F48{*vC?$tJ|Bx+WOtL~}vdyE7v%IzCub)|w}%OB1hoFfwmy zD+|rqCl^?vpTVY0-p4z?VykH!NIlQ?i9}y`3IF($&#D_@zgbMF8J=7ZyNU4dND9b3 zZRkI)FiKcrkA87;!I~;v*CmG!WrY8w@gpRtD>~^WE@`~iIm+mU=;R9@iIjFO-ZiAxUlJ3!Z=;vXQV@zS#P`-h$`AH8yk%a4e{AuADuQ*n%r*- zdbhk3WqR>6{7S+BF)`#>$sVP5fPI~)F?EN*#-kp(~dm9dH&fVj6SHy>%c+EYx9{A`&p8B3nx$K_3C?5uogwrchCN>AZ71FR?iu%TaK{^rI>SA%E z3}5G;!q7vtsv0G`=MGGxbUb7A-(MvYA0M85AxLi{sxY|N$NWt7RW>JTs#iW<(RS-i zCxP{IHsrRn|Hu+Jq#dvVm9WWbmgi-n{z{b2$2I=Yg0h) zXSZtVL9bG2`-X;%pDzE$`p)|&14H2DR#lGp6qC!4o*Qxn0YF2gA_aqE>JK;D91O&! zynNb>6xPF9U0ED1UG63{U#*CQj07wu>8Z+v z5gkIRXAaNI46rS;TK)&+0ahF5S*APhTP>2-G$7M0gZCWve=OM*w8)QkP%d{a@76Tl z!-j{yjfU3Ho^ z2!;h6!TJuR*HuhF0pjJL9_+{o9ENsBkk56R0#afQD(W~on|`q6LPIL^jXP&W5^-g~ zrU_;j45gd~U3I$$lq zo^op6-~JWWgr#rUfvnfw&ip7)Ey7k&@`p!J&3m{fbFDUX{Jl&fXV@)f4~z8EMy53> zy@HZIo}S;)A4HfcEZMgV9btMiXus_}`HY~x zd&r&YUHymK52^MEGn#WZl3Dr6USB_*&3vy6_W6kmsr4az(I{)C+8NAD#XhTT^{5b; zCW4VVFJnNx5hmfENTeA8Binp@eOog_?7PsE2aZ1cU2W%d(d@z7ESZ-K-yVwSLU#xa z?3;$4vqU1@Z2ty=&P1o~GU}82GDM71;zi3IL?74b>=TyHH#G&Kwugiz(|kRhwb>)H zFE5q5q^vyY>mTvSH+oU+ZQXGys_}cLjZtjKt7iXw8Wf`UM0Bigr{@twv3qv_i~#)u@bbZG&NcSskcdE5qzB%WW1|OD2Mk z*7wDTJ!aA3gi!mgk)SeAaF6hAn+`q-U#BlNCFsNdp!(m?D!HXZ_Xid($oQz#mkvB7 z^S2Ibpg!L#&snlN3C@s>Pr6$uHP(icR(g3`+Q^3!b1!4LwgR-pjpOEgzItM^&YBQA z?Un2!tdJVzz}RrS+BQur4!zUNW0F~Kyv;UqI1$TlL*I?LvYJEBoS9|lDfk;>Kl`P* z)uJhwXGKyo)gW@T^N>+Mp_q+=$@pGEcBb!}W;BZOn)1~3m`_Wff+rYP9d!%o&LG29 z=VTuC5HqZ!{It6Fg5H1F6;VlYgatbKeY2@gI$y#|(`ce!%%rYAJNLPOK~EAi%-IvI zd!PGPW}q}(j7gn197M4L@ASZZG6x|@MLmAzv`e1hg*$qGK4R`1XQor1m{&ygH|uAH z8NUB>{_?3;!fH-Eum)W{XaW@-u*`L?t=!XHaPwJERJg|FcV>=AF`aR7co-M+Z1#b( z5H~w?f3M`3p!E-*w@kMv(rvQd&lwa2g`ZR;o)>T6iiS2!d0abVS^tHasZoBaTcMMh z)L`4QknxWuEGW-X=a!BS!7E%yc*m{U$51u({+DOGnPe~rFpu#}jC<`M5t(Xel?_uWK7YKa zOdy}Rb5EQ;V}XP=`E1`Tagvx7gFWfZeNN4TzF5tivX{VpzQDhHmTPy7qdH;wkEOVC zQ`eCEMfw-a%z2Im@3<2Y!L>3p4umA=53*$ua>L){$@p`{=bfKf`9|$$_j6dp7-5kB z=h0@>HHE=k`DKU(l<9ka67E-pj8|joUhe5>!*94Qgx)TP13O9v@RYwacPRv|f<YS{Dttg7Cu`aFj+lvcAQyn*${YmyKtvAvRkU&O8OK z{kgj^Ak=U7b(8&PvaQmC$G%H+=eg38CsNl2*w~biGZ9Z$ItHNq*FK#n+wj2&hHqPp zD(`p99dH)6c?;t-K7Eh>E2**6HL7!1%pi$ky(h2soaerzWZ+*4GAdVMlX031!TN1UhS4O!v_e-QXCPNboQ~ zCXV)Li9=IKoRORc#9yH_VUq2}><1D63qWjg(+0+al${jGH>DhppnE^gzC~%*aVB9C z>*66^dofYk9vdvciDVgCq8xBW{PZW%=o}yd(yl_Z0RD&gPn)zyEkG5bw-vySN9zt6 zG;O=AuO3GKrQBsguODf{D}wHI?La(`B~HS(hLmX9s-XfjBoBHV#|m)$G#j!h5==wl zrX^Yc(-R=2i;ddfXME^@Y3sJ=A5$g)A;QjrhHBD;ZIttQ=S3~R2uMAk1_mzE2{G&3 zxRg2y)$J-i5zZ6u)c{b)<#lmK%XG8{2eLr$KYpPAXb{OMKy!FI9{#5_PWD=M>^YE9 zG-0a4k~D1>v&9{o)_pmUZh-)|5a7ApHFDlsh>KTEJiiFId?86J0&y+le;j*iFQUy1 za3Qa&X3|+Sw)a;~@|Xi{{^q>Xw&X0oi`k?;ly^k1xDJ zSh2J_9h?g(_ZFCx<>UmmyUVbWQ3e$}xRxXMK#4OqPWbHGmCR0qdPME`r|h}U-t)$r zNoQ002Hr=@%4Nu_?z3@Xlv960y(_x9VYD}%1eAHh64d3M7H*N?8G?KHVs>+^`9Dk8 z#RcB$cPuJZWF?f`I%WksFb7}tzH%rtqbhdTx+^rtHYw8Wqxqo`Rc6}qIH70@oY||Q z^mr#KmBEn7{}w+a;M*BlTP#ymSN#&WEfJ@|mG?U!7lleVb-C{ml;IiA#(g9p3F2V4 zf*c02cOKDca35TTo6)HH%u3q9c4n~Oh2Vkd?Sb6QA@!r0f^)%RzVN%dcl$_2@QP=a zdDaFqnh7oq`Rs}wpdY(JHr8!%hpX%{*di~nEAPPZ#6pDg_NRsDu?r_nDNCp|pd*8h zdO17Y;GsTKEhb{HKb1A(R?~|ofIKSd)Plkjx@h^*MLd$+BO-Sb)+k!4R_!;Dl*1id zH7Z1jxbUf>0!OB2)X~xSrBkg5AtKU6W|C7bF4f$3bu_c1=0la!S`Z1*qW`|auo+%W z>>|8|ChNQuri<9?6dk=sS7LM_aB1VFJ1E=Zlc`f^w;5Cc22Z{0{E+WBRkZ4>sCUlZ zs^FFF3m?{Z@8!=Ba0uz(u2P?6vV~NbcD(Ojreg~E$T*{M#;PWzt9WK66+1*Z{i{t!MCZnVkMC$?5_ek;UX_!EY5hCUcOLW z&1RpPk;uFx{>QrwhMz$E0rYG3eun+pwt-RnSCfCD@e@Mq{WP#RB4*w;4$hf?s7_0D zytMb*>wSsS+lt`J{lg-%biwZ;nGHgR1qSBdrwX%$DD28bLe)_Reaj^-TET5T`_o2* zM+xOL2FKC~7c{!ZZg_t?srg)V*NJZG?Ax_BH3{_`x=D|=0>3&Niwt^*F$PAIFGK9@ z+%{818c?xUBI&_1ck+Zd=I?Y-&LugNt!U4JMJqwL7bqniEzaFQfu0a=cKGf5j1^`B z>?L8hv;Ce+`5b;FlCTSS6=DYDX)dFZQTS-C{03cQwRj#VMkrq@JDdL&JtgX}2vrUGD!w9J*o1?^oFZ|=VT;Gq zUA}73%RbB34=TXeYbOmW6&snlvkG}Xo;SPyNS!K;=tMtVoIcK#&Q7MU^Ssag<#C>s z3hY;5a4cTWY)Em|#?6~}N}vr~=-c9SY@PW+ z>z-`~hxHg~4c!>Vu@SOXyd0fuqn;D4y^q{zany}4l-B`I=%pS%9B+QRDxZ-va|~8e z#AkwfLPy561UcLtca5i(MX&F&xvh;@L~ovHiNjb%(^*Uc>iXbOmT3w5t0LDe`$kDH z)2_5+=uw1e7cajS+t+Lw22GFH&!OW__H|a-wm}mcXJ;}b_l1u`7OXwV{t2@=%O?XX zGfjth2y*Ak^^)orIXJ1sh@AaTDO_Tz^3q~c@|yXCE7xkz>d#J!a07hoZtp>Q4wc4Y zAA(=+e~G+QDk8b%zmOaHTH1FYH0V)>RU7wE1U!{{#JUtG^1m)_Ms)q(^S?^kF3 zoQPO)HRFHz3X||kA&j0w`{;R14a^iGBgWEo*!?3`8})9++HSp}oKfclLN0T;e{Sj- zl?i*%t8BX6##QJ(_3MfLS;>#HlZh6BW!{AVH%(Q2q3v1IilH0%3cS6y6Y2uvgU>u7 zzWLSPX%=dYKUQ(H>zMYJBg0J3w@bnle&2jd;W`y2eTEqzE!80U37Cy`Nvze3&*_nd z3w(C1dMh*QW7GfYx%_vY^3#HgsfyIBr9ocu)y+F8wN4Rr!X_^ZHN(E5{u_AWBuE`CxNSefNzMza=*_CwPTwv4;h%tZ7iT>jKCt%(rbD z4Ioc!wajP(S?B>^LZ=G2HTM83rV{Zc%3it8wHhEW^thQ?F~IVn0cZ=4@qa8v5_s^+ zx;IgRV_mI~hY~a-SC;fwPil4l$I*p}VK~@xnj*)sH68InVC7xyE~Hkk(Bbk;xq7wD z*Ba)SW{L;N>1V3)_h*+h*K3|H`q$y{mlNVPTRcx%LUf910$*7dhkCvc&U7|r|57jd z@eA(@H#MH*m#-htCdxtIzR|VSt%+~UWMfRL|L22!jiG$jf5OXd9<=|`19oUQ`%#FS zenr%AFff9CNYp8ycsue2$g4P`cxHrUbHVV&4t5UW0V8X&B`|Q5fhjsO8lX>ficKEf z3q|=d<4x=t=C{3`Wb~#oLQh}ft{VH&cO2zrPD{OB5EKj8eLr8M`&3@PJEiO#cc6^s(dlgUY;7h z{SfLY#6j3?9XD}5Iw`DB4IJOYBfxuZP%}QpQ_5MDz?ByYM^VEg^A_9;zE`uR{#kG? zjZs~6FASq8hhR`g)$otq3zh82ZT4bgsGCX$!CCvZlaYDuwU=Wqywx?kB-Q;js!@^s zNu+iebaYp^jJ2YX@HA$?vMN^ovBOvA*`ob^yZ^mX(OZKTvsRu`zz1C{g+p( zjLukle7u~;PDCRg`gB__^P{StN+k~z?>#?aC8V2_Sst;@9F1P+k=$R+Jt;9@^oY&v ztyI-}qLu-+0v|E7$Yncm?-1JbEqN7y6$g|?pVc7~JlP5BK*5i)R61~?8RY!*jG7q?^pY-+68dZIb*2&X_mrfpbRSMnH?IC5Ofk0#0siv; z`vR=I*}(WKeQQT4g=t5JFU~5x{MuX6kH5IpVFnq1+!*QWnPeBAwVkCVrrt~cHlfm) z&$X9t%3zjJD_V&mdiJ(tL6vsW4DNjtddJ$AYJT(4+AH=n$bwaSxKM6cq_7fB^R(gX zNqQXI&!h{L1>OIe>MD9&&G%1(ftALeua^8T7edC5{5DuqGu#^#bYZu!%-r~)W3Jnl z0^;P>DdD;QzI^X$ag1L0d&He@rHn(UBj^4Q$D&Usx7QAyHR<4uty$h(++Lby$fGJ< z(s2-oCOgn&zf2QZjSO?;S9(g7dlBi%XT~(n_WR@vA6xm13RHKwiOAM2Gk)sEzNcf(mQKA~dYlsSu3f}=QfKXNzq~9=r0e&0|44#Hn&j)K{xkC}i!H(Wo-r)kgaoby?J7S2>r{t1_>dA|E{M5Tq2t zo!&mL`WXVTKd|c#uQWBq6r=s8JXV};IKQ#YtbtPsT!WDU@BW&nmX1Ll@GKl3o{3%A8BZc+jCslC;#h-fDv>|pm_-?IFn;L36 zZ(BUnq}^jJYHdA37jw{)pk*lFomf<_Z&t}K|E$dkKOqEIUwP`mfCCdq3JQ)#+ls|4 z6Sw!m%79o9fG>=%IkM8KV^0=$^I$o$EOa(!Cgytu=| zyN8!)!tBNOL_i42b*$Vf(;tcz7qY2NvF^x&1&t5{FDz^>u`uAoWcqGpY;q$j5aNzG z+AjcU5V`YwXUCZcEdJd<2?cWcFN%7THjpz(HRxLrAV~D#@*GInteD=PP}{D^O~DzB zKYhlWRRC*Am#}kbXIz$ynU8=gQj?;{A{@vd4Ic}dHXx4sgO;`!9FxWBL67^}&H|L& zSYAC$WC!#{^fe&X0q#Ba;y`*h)-4Q_uddM!|}{I0bsM{*Pk`^^GA?jwVcKze;VyXw(0< z(dN^Atxa#cbncE8nHN$%MV)0197MT!?CSy_n`*PstVd+}y*wzyd2YIJ| zO|tSc_3{-X6Pu!sLTTSoJweOn&dYKj2aaYQc!JGJX`QN^H&Bx7Xiv!8!(V#3luHuS z&EWiglV_2c53|GfD`ZUV&C-s1j|IG%Bl7lV1+F00l}&gkYY4`>KsOk}0=NGzs+yco zK0StcVS?nO|87l-(A;b#=Q2Gr?C1QY+%^=k+izo?DPiI%deoqMwx}cUpa!D!JAbRj zLhb1a+jp2?_fAFZ!jSymUWWWj(fcRAa19q@DpzQp?!?@i9zX@cO<)}fYf|s0V(udX z(+zD_8DZ={4X@+UOk*NL+~79|KiVwBT$3-Tv;Ru(w>SE7t@{;}c}b4*IBdD0x|>e# z@9aDF@yi+B6;=F{u*`YG<16D)$&4P*xh&!WY~V&4rN*WE1zndpv(zvd=OxlL)0BpO zQ5|t+wDyF(Z~c-j+Y^4*GSjzXxtfjPs74K{ zDO%6Xbq?Ro>+W|)y(cLg{GG%{(>5Es6TH;~M$Sg;@LBRYUvSqy_KB(z=J?e3)%CmD zC#e|^&Sml)T1}!Hhb0%U_%#jZD>-6M{Y8-eWDw+q#V$#}WbYz2UYostMqSzYT+$zT zrG4trvX&;wJSenr^U3bJiFn;zKABHnM_I08EGbfcS zur;dIrkV!Y^bWtTgMTQ}@M7M*^8@*Sj(y(HVOopZHH@{O=_@rp18^`m9Fe}sh6tI*gglF>=h5&f(^e0k2`@5HKOb?S)n;-r?Md?i>ET% zD_RRj`*}l5^`9nhMC0Z76<_p}_&`x3I@RDkIYV&^cGX=O>Z%-`EBe?Iv$DZ-zVdZM z_=}twW9OGYBfN4ypks!p%NsXIe=Pk`kfN{dp8yNIWG6$br06P?N>%n5vt$Ogwln7OJn_i+~SSWFmB6HVZ2GENY0Hc zSzK783vsGdpTd@~&_l<5&+z`PMS41Vzs7^WW=-h>OvQH(j?MmlR;00XrdBW}S8slk zHFTs#2ja%kUQ>Pw6?Ag(U-$Sm!Tw!6#bUt(+nQin;U~ipEb@?Z+F)a9bKp#wM=@w3 z4jwwh8JNvvNEXXbBtaq=-7I_Q7Xq5Nqa)b7$|9T@ZA1o?b+(3}HjHrfj|5T-If3;N z+{J#`t=G7q`Elv{CPp5g5i5nadU1RLxfLK>zNIifl^W=@e+K*n=BvS5w00i@T9hQ7m+ouRZ0BDv0mt??Rtlug?6sCMvPmW&X&%Tt<2jwfargfW zha^P}Mq7;>g+?Zkp~Q#t(=on}dt;gM5O)j(a>aPwfQx0t?yBhA;ZpyAx})yezZMJa ziR7GO*jM3qySmglV5-t3wCm$(Pfi>%wMmbdKr&&~hNQGq8EPZuBejFBrXBH_hel$5 zSDmNdbu|!Tg_EyW8?Rah{-JYD$Wf(9td|e63QxTvlJt!8W@Nwmc5QK|$IMw7VNDg= zqOTN4zjQhPVPhKix$)2_jZ~toa3hx&b7eMe$6V%0q69i;e zZDg1))GTxh8~K7#(~&yPMX!GPBeig7I2}>(L!c$ z%AhZRHc%moi1ONCN0Mx};z@w{Qh|DPz5s-d@Ym!(s^J)C9@7$E6MaMgYi819Uq{L@ z2*K#I17ts{rx*VF`(uarl7^HAAeA3j<1<2Dq+_oJ4?XT|Pl1M%{ohf*e~GxqYMNVn zr_13{k~c2HvP%fQC%}xBh_aV(tTw4m6p`RT!U6$`VFJjWa~QobvDc@77c`19k2nD0 ztpO7B`89x82_}5mz_1G;jDdYr_7b8Z{!7Cip;SAs0e8VR>^lS24ivWUu2-O`>il02 zc3b%7cLP^OjbeIHsI;SH?i=LO>?nI$CO~!_9Z@!*AN!aE6!aX2^VI+M;qu5L{!x@0TDAS^`Arm zBu!JQ|Lraz^9rqgfR-3xQ(ry&A6bcRZ5Ia4K#>KZsk0xJ%x-QZ_w)(a)qj^M38mO6 ztPT68$}ghJK`y+W2i<0Bm7_U-U=y_w5q17*?T)Lh-(-B2J-~>U4!m6tE2?4-*9^-j zT))O8j-S9LU&LLLWpE*CJ@u{$)*0W8yvKi)>Gl&gy+bRC&aH%`w1%-QH0xKx{^hv< zW6&!G8WVp5yNZ&n>d;rksSA_amz|I;&kV*xf6gjO*v)Zs&P1P&KYB}z@@-kUJ-@?| z8A$5zo~qI|mOrevm3B1LWev;&hr1vWKlAjznCGL%XgiN{7&L2VxXAU_9*r8^^U(NR zLMT{;Yll7?GTNp_@ax3|0gox1vR{v*m=vA7!XcXy>vQu4 zC*q^4`#WPcXBVtnjbO#N+zbbY>$>jqv14aA2Xc0*`?IKCdy(juMG0~Fmc7S)oZKfD zz(N%~onbC(14?@PNU+ES&q4M3x@L4sukOs3;fTC`o#n)ZbE`)2m*hEL*Fc=MnR)vG&RF;p?kM{_9>}`hK-23+h91Q+& zgAvPDb%R7+pDu6h;t_}xP~^Ij{;__~0;cftzrDAn=aW2e0^cuJ4e~*0)p+>#IGz?^ zY*6IQkL*th+Ke8ak<}z0eMLHzURmkXNa{a(*6WcY0CnIaA(^aC>YtNkW617~e(v$X zcu*@fZXa4b*ZYp{eoB-=Y{va_i|1A(t|$7Q(a(e#oc-=CPBOuzU@}!d=mzg(e9+sT zjSC)7+1MKOgbS`AtX(2Vdr~ca6&|Zl{wpt1>T= KSbKB@r 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�cVsI0N3>ZG?I5~-8MAnIg$sZf#_3B+| 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ⅅsD#CbVs)} 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 { + res.then((res) => { + if (!res) return resolve(res) + return 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..b9249e9 --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是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/cc-selectDity/changelog.md b/uni_modules/cc-selectDity/changelog.md new file mode 100644 index 0000000..8655f8d --- /dev/null +++ b/uni_modules/cc-selectDity/changelog.md @@ -0,0 +1,36 @@ +## 6.0.1(2023-10-13) +适配vue3 +## 6.0(2023-10-08) +修复vue3.0bug, 兼容vue2.0 +## 5.0(2023-09-16) +1:增加初始省市区默认值设置 2:优化组件体验 +## 4.0.1(2023-09-03) +优化了一些问题 +## 4.0.0(2023-08-26) +更新中国最新省市区数据 +## 3.0.2(2023-08-26) +修改区数据格式 +## 3.0.1(2023-07-31) + 修复vue3.0bug +## 3.0(2023-07-19) +组件优化 +## 2.0.3(2023-07-19) +修复退出界面,省市区选项显示bug +## 2.0.2(2023-07-13) +更新无锡市信息 +## 2.0.1(2023-07-11) +组件优化 +## 2.0.0(2023-07-11) +修复vue3.0bug, 支持vue3.0 +## 1.0.6(2023-06-29) +组件优化 +## 1.0.4(2023-06-29) +组件优化 +## 1.0.3(2023-06-29) +组件优化 +## 1.0.2(2023-06-29) +组件说明优化 +## 1.0.1(2023-06-29) +组件优化 +## 1.0.0(2023-06-28) +组件初始化 diff --git a/uni_modules/cc-selectDity/components/cc-selectDity/area.js b/uni_modules/cc-selectDity/components/cc-selectDity/area.js new file mode 100644 index 0000000..eb4d619 --- /dev/null +++ b/uni_modules/cc-selectDity/components/cc-selectDity/area.js @@ -0,0 +1,5589 @@ +var AreaJson = [ + { + "name": "北京市", + "city": [ + { + "name": "北京市", + "area": [ + "东城区", + "西城区", + "海淀区", + "朝阳区", + "丰台区", + "石景山区", + "门头沟区", + "通州区", + "顺义区", + "房山区", + "大兴区", + "昌平区", + "怀柔区", + "平谷区", + "密云区", + "延庆区" + ] + } + ] + }, + { + "name": "上海市", + "city": [ + { + "name": "上海市", + "area": [ + "黄浦区", + "浦东新区", + "徐汇区", + "长宁区", + "静安区", + "普陀区", + "虹口区", + "杨浦区", + "闵行区", + "宝山区", + "嘉定区", + "金山区", + "松江区", + "青浦区", + "奉贤区", + "崇明区" + ] + } + ] + }, + { + "name": "天津市", + "city": [ + { + "name": "天津市", + "area": [ + "和平区", + "河西区", + "南开区", + "河东区", + "河北区", + "红桥区", + "滨海新区", + "东丽区", + "西青区", + "津南区", + "北辰区", + "武清区", + "宝坻区", + "宁河区", + "静海区", + "蓟州区" + ] + } + ] + }, + { + "name": "重庆市", + "city": [ + { + "name": "重庆市", + "area": [ + "渝中区", + "大渡口区", + "江北区", + "沙坪坝区", + "九龙坡区", + "南岸区", + "北碚区", + "渝北区", + "巴南区", + "涪陵区", + "綦江区", + "大足区", + "长寿区", + "江津区", + "合川区", + "永川区", + "南川区", + "璧山区", + "铜梁区", + "潼南区", + "荣昌区", + "万州区", + "梁平区", + "城口县", + "丰都县", + "垫江县", + "忠县", + "开州区", + "云阳县", + "奉节县", + "巫山县", + "巫溪县", + "黔江区", + "武隆区", + "石柱土家族自治县", + "秀山土家族苗族自治县", + "酉阳土家族苗族自治县", + "彭水苗族土家族自治县" + ] + } + ] + }, + { + "name": "广东省", + "city": [ + { + "name": "广州市", + "area": [ + "越秀区", + "荔湾区", + "海珠区", + "天河区", + "白云区", + "黄埔区", + "番禺区", + "花都区", + "南沙区", + "增城区", + "从化区" + ] + }, + { + "name": "深圳市", + "area": [ + "福田区", + "罗湖区", + "南山区", + "盐田区", + "宝安区", + "龙岗区", + "坪山区", + "光明区", + "龙华区", + "大鹏新区" + ] + }, + { + "name": "东莞市", + "area": [ + "莞城区", + "南城区", + "东城区", + "万江区", + "石碣镇", + "石龙镇", + "茶山镇", + "石排镇", + "企石镇", + "横沥镇", + "桥头镇", + "谢岗镇", + "东坑镇", + "常平镇", + "寮步镇", + "大朗镇", + "麻涌镇", + "中堂镇", + "高埗镇", + "樟木头镇", + "大岭山镇", + "望牛墩镇", + "黄江镇", + "洪梅镇", + "清溪镇", + "沙田镇", + "道滘镇", + "塘厦镇", + "虎门镇", + "厚街镇", + "凤岗镇", + "长安镇" + ] + }, + { + "name": "惠州市", + "area": [ + "惠城区", + "惠阳区", + "惠东县", + "博罗县", + "龙门县" + ] + }, + { + "name": "珠海市", + "area": [ + "香洲区", + "金湾区", + "斗门区" + ] + }, + { + "name": "佛山市", + "area": [ + "禅城区", + "南海区", + "顺德区", + "三水区", + "高明区" + ] + }, + { + "name": "中山市", + "area": [ + "石岐区", + "东区", + "西区", + "南区", + "五桂山区", + "火炬开发区", + "黄圃镇", + "南头镇", + "东凤镇", + "阜沙镇", + "小榄镇", + "东升镇", + "古镇镇", + "横栏镇", + "三角镇", + "民众镇", + "南朗镇", + "港口镇", + "大涌镇", + "沙溪镇", + "三乡镇", + "板芙镇", + "神湾镇", + "坦洲镇" + ] + }, + { + "name": "潮州市", + "area": [ + "湘桥区", + "潮安区", + "饶平县" + ] + }, + { + "name": "揭阳市", + "area": [ + "榕城区", + "揭东县", + "揭西县", + "惠来县", + "普宁市" + ] + }, + { + "name": "汕头市", + "area": [ + "金平区", + "龙湖区", + "澄海区", + "濠江区", + "濠江区", + "潮南区", + "南澳县" + ] + }, + { + "name": "汕尾市", + "area": [ + "城区", + "陆丰市", + "海丰县", + "陆河县" + ] + }, + { + "name": "清远市", + "area": [ + "清城区", + "清新区", + "英德市", + "连州市", + "佛冈县", + "阳山县", + "连南瑶族自治县", + "连山壮族瑶族自治县" + ] + }, + { + "name": "云浮市", + "area": [ + "云城区", + "云安县", + "新兴县", + "郁南县", + "罗定市" + ] + }, + { + "name": "韶关市", + "area": [ + "浈江区", + "武江区", + "曲江区", + "乐昌市", + "南雄市", + "始兴县", + "仁化县", + "翁源县", + "新丰县", + "乳源瑶族自治县" + ] + }, + { + "name": "江门市", + "area": [ + "蓬江区", + "江海区", + "新会区", + "台山市", + "开平市", + "鹤山市", + "恩平市" + ] + }, + { + "name": "湛江市", + "area": [ + "赤坎区", + "霞山区", + "坡头区", + "麻章区", + "吴川市", + "雷州市", + "廉江市", + "遂溪县", + "徐闻县" + ] + }, + { + "name": "茂名市", + "area": [ + "茂南区", + "电白区", + "高州市", + "茂港区", + "化州市", + "信宜市" + ] + }, + { + "name": "肇庆市", + "area": [ + "端州区", + "鼎湖区", + "广宁县", + "怀集县", + "封开县", + "德庆县", + "高要区", + "四会市" + ] + }, + { + "name": "河源市", + "area": [ + "源城区", + "紫金县", + "龙川县", + "连平县", + "和平县", + "东源县" + ] + }, + { + "name": "梅州市", + "area": [ + "梅江区", + "梅县区", + "兴宁市", + "平远县", + "蕉岭县", + "大埔县", + "丰顺县", + "五华县" + ] + }, + { + "name": "阳江市", + "area": [ + "江城区", + "阳春市", + "阳东区", + "阳西县", + "海陵岛经济开发试验区", + "阳江高新技术产业开发区" + ] + } + ] + }, + { + "name": "江苏省", + "city": [ + { + "name": "南京市", + "area": [ + "玄武区", + "秦淮区", + "鼓楼区", + "建邺区", + "雨花台区", + "浦口区", + "六合区", + "栖霞区", + "江宁区", + "溧水区", + "高淳县" + ] + }, + { + "name": "无锡市", + "area": [ + "梁溪区", + "滨湖区", + "惠山区", + "锡山区", + "新吴区", + "江阴市", + "宜兴市" + ] + }, + { + "name": "苏州市", + "area": [ + "姑苏区", + "相城区", + "吴中区", + "虎丘区", + "吴江区", + "常熟市", + "昆山市", + "张家港市", + "太仓市" + ] + }, + { + "name": "常州市", + "area": [ + "金坛区", + "武进区", + "新北区", + "天宁区", + "钟楼区", + "溧阳市" + ] + }, + { + "name": "镇江市", + "area": [ + "京口区", + "润州区", + "丹徒区", + "丹阳市", + "扬中市", + "句容市", + "镇江新区", + "镇江高新区" + ] + }, + { + "name": "南通市", + "area": [ + "崇川区", + "港闸区", + "通州区", + "海安县", + "如东县", + "启东市", + "如皋市", + "海门市" + ] + }, + { + "name": "泰州市", + "area": [ + "海陵区", + "高港区", + "姜堰市", + "兴化市", + "泰兴市", + "靖江市" + ] + }, + { + "name": "扬州市", + "area": [ + "广陵区", + "邗江区", + "江都区", + "开发区", + "宝应县", + "仪征市", + "高邮市" + ] + }, + { + "name": "盐城市", + "area": [ + "亭湖区", + "盐都区", + "大丰区", + "建湖县", + "射阳县", + "阜宁县", + "滨海县", + "响水县", + "东台市" + ] + }, + { + "name": "连云港市", + "area": [ + "海州区", + "连云区", + "赣榆区", + "灌云县", + "东海县", + "灌南县" + ] + }, + { + "name": "徐州市", + "area": [ + "云龙区", + "鼓楼区", + "贾汪区", + "泉山区", + "铜山区", + "邳州市", + "新沂市", + "睢宁县", + "沛县", + "丰县" + ] + }, + { + "name": "淮安市", + "area": [ + "清江浦区", + "淮阴区", + "淮安区", + "洪泽区", + "涟水县", + "盱眙县", + "金湖县" + ] + }, + { + "name": "宿迁市", + "area": [ + "宿城区", + "宿豫区", + "沭阳县", + "泗阳县", + "泗洪县", + "洋河新区", + "湖滨新区", + "苏宿工业园区", + "经济开发区" + ] + } + ] + }, + { + "name": "山东省", + "city": [ + { + "name": "济南市", + "area": [ + "历下区", + "市中区", + "槐荫区", + "天桥区", + "历城区", + "长清区", + "章丘区", + "济阳区", + "莱芜区", + "钢城区", + "平阴县", + "商河县", + "高新技术产业开发区" + ] + }, + { + "name": "青岛市", + "area": [ + "市南区", + "市北区", + "黄岛区", + "崂山区", + "李沧区", + "城阳区", + "胶州市", + "即墨区", + "平度市", + "莱西市" + ] + }, + { + "name": "淄博市", + "area": [ + "张店区", + "淄川区", + "博山区", + "临淄区", + "桓台县", + "高青县", + "沂源县" + ] + }, + { + "name": "枣庄市", + "area": [ + "市中区", + "山亭区", + "台儿庄区", + "峄城区", + "薛城区", + "滕州市" + ] + }, + { + "name": "东营市", + "area": [ + "东营区", + "河口区", + "垦利区", + "利津县", + "广饶县" + ] + }, + { + "name": "烟台市", + "area": [ + "芝罘区", + "福山区", + "牟平区", + "莱山区", + "龙口市", + "莱阳市", + "莱州市", + "蓬莱区", + "招远市", + "栖霞市", + "海阳市", + "烟台经济技术开发区", + "烟台高新技术产业开发区" + ] + }, + { + "name": "潍坊市", + "area": [ + "潍城区", + "寒亭区", + "坊子区", + "奎文区", + "临朐县", + "昌乐县", + "青州市", + "诸城市", + "寿光市", + "安丘市", + "高密市", + "昌邑市" + ] + }, + { + "name": "济宁市", + "area": [ + "任城区", + "兖州区", + "微山县", + "鱼台县", + "金乡县", + "嘉祥县", + "汶上县", + "泗水县", + "梁山县", + "曲阜市", + "邹城市" + ] + }, + { + "name": "泰安市", + "area": [ + "泰山区", + "岱岳区", + "新泰市", + "肥城市", + "宁阳县", + "东平县" + ] + }, + { + "name": "威海市", + "area": [ + "环翠区", + "文登区", + "荣成市", + "乳山市", + "南海新区", + "经济技术开发区", + "火炬高技术产业开发区", + "进出口加工保税区", + "临港经济技术开发区" + ] + }, + { + "name": "日照市", + "area": [ + "东港区", + "岚山区", + "五莲县", + "莒县" + ] + }, + { + "name": "莱芜市", + "area": [ + "莱城区", + "钢城区" + ] + }, + { + "name": "临沂市", + "area": [ + "兰山区", + "罗庄区", + "河东区", + "郯城县", + "兰陵县", + "莒南县", + "沂水县", + "蒙阴县", + "平邑县", + "费县", + "沂南县", + "临沭县" + ] + }, + { + "name": "德州市", + "area": [ + "德城区", + "陵城区", + "宁津县", + "庆云县", + "临邑县", + "齐河县", + "平原县", + "夏津县", + "武城县", + "乐陵市", + "禹城市" + ] + }, + { + "name": "聊城市", + "area": [ + "东昌府区", + "茌平区", + "临清市", + "东阿县", + "冠县", + "高唐县", + "阳谷县", + "莘县" + ] + }, + { + "name": "滨州市", + "area": [ + "滨城区", + "沾化区", + "惠民县", + "阳信县", + "无棣县", + "博兴县", + "邹平市" + ] + }, + { + "name": "菏泽市", + "area": [ + "牡丹区", + "定陶县", + "巨野县", + "曹县", + "成武县", + "单县", + "郓城县", + "鄄城县", + "东明县" + ] + } + ] + }, + { + "name": "浙江省", + "city": [ + { + "name": "杭州市", + "area": [ + "上城区", + "拱墅区", + "西湖区", + "滨江区", + "萧山区", + "余杭区", + "富阳区", + "临安区", + "临平区", + "钱塘区", + "建德市", + "桐庐县", + "淳安县" + ] + }, + { + "name": "宁波市", + "area": [ + "海曙区", + "江北区", + "北仑区", + "镇海区", + "鄞州区", + "奉化市", + "余姚市", + "慈溪市", + "象山县", + "宁海县" + ] + }, + { + "name": "温州市", + "area": [ + "鹿城区", + "龙湾区", + "瓯海区", + "洞头区", + "永嘉县", + "平阳县", + "苍南县", + "文成县", + "泰顺县", + "瑞安市", + "乐清市", + "龙港市" + ] + }, + { + "name": "嘉兴市", + "area": [ + "南湖区", + "秀洲区", + "嘉善县", + "海盐县", + "海宁市", + "平湖市", + "桐乡市" + ] + }, + { + "name": "湖州市", + "area": [ + "吴兴区", + "南浔区", + "德清县", + "长兴县", + "安吉县" + ] + }, + { + "name": "绍兴市", + "area": [ + "越城区", + "柯桥区", + "上虞区", + "新昌县", + "嵊州市", + "诸暨市" + ] + }, + { + "name": "金华市", + "area": [ + "婺城区", + "金东区", + "兰溪市", + "义乌市", + "东阳市", + "永康市", + "浦江县", + "武义县", + "磐安县" + ] + }, + { + "name": "衢州市", + "area": [ + "柯城区", + "衢江区", + "龙游县", + "江山市", + "常山县", + "开化县" + ] + }, + { + "name": "舟山市", + "area": [ + "定海区", + "普陀区", + "岱山县", + "嵊泗县" + ] + }, + { + "name": "台州市", + "area": [ + "椒江区", + "黄岩区", + "路桥区", + "临海市", + "温岭市", + "玉环市", + "天台县", + "仙居县", + "三门县" + ] + }, + { + "name": "丽水市", + "area": [ + "莲都区", + "龙泉市", + "青田县", + "云和县", + "庆元县", + "缙云县", + "遂昌县", + "松阳县", + "景宁畲族自治县" + ] + } + ] + }, + { + "name": "河南省", + "city": [ + { + "name": "郑州市", + "area": [ + "中原区", + "二七区", + "管城回族区", + "金水区", + "上街区", + "惠济区", + "中牟县", + "巩义市", + "荥阳市", + "新密市", + "新郑市", + "登封市" + ] + }, + { + "name": "开封市", + "area": [ + "龙亭区", + "顺河回族区", + "鼓楼区", + "禹王台区", + "祥符区", + "杞县", + "通许县", + "尉氏县", + "兰考县" + ] + }, + { + "name": "洛阳市", + "area": [ + "老城区", + "西工区", + "瀍河回族区", + "涧西区", + "吉利区", + "洛龙区", + "孟津县", + "新安县", + "栾川县", + "嵩县", + "汝阳县", + "宜阳县", + "洛宁县", + "伊川县", + "偃师市" + ] + }, + { + "name": "平顶山市", + "area": [ + "新华区", + "卫东区", + "石龙区", + "湛河区", + "宝丰县", + "叶县", + "鲁山县", + "郏县", + "舞钢市", + "汝州市" + ] + }, + { + "name": "安阳市", + "area": [ + "文峰区", + "北关区", + "殷都区", + "龙安区", + "安阳县", + "汤阴县", + "滑县", + "内黄县", + "林州市" + ] + }, + { + "name": "鹤壁市", + "area": [ + "鹤山区", + "山城区", + "淇滨区", + "浚县", + "淇县" + ] + }, + { + "name": "新乡市", + "area": [ + "红旗区", + "卫滨区", + "凤泉区", + "牧野区", + "新乡县", + "获嘉县", + "原阳县", + "延津县", + "封丘县", + "卫辉市", + "辉县市", + "长垣市" + ] + }, + { + "name": "焦作市", + "area": [ + "解放区", + "中站区", + "马村区", + "山阳区", + "修武县", + "博爱县", + "武陟县", + "温县", + "沁阳市", + "孟州市" + ] + }, + { + "name": "濮阳市", + "area": [ + "华龙区", + "清丰县", + "南乐县", + "范县", + "台前县", + "濮阳县" + ] + }, + { + "name": "许昌市", + "area": [ + "魏都区", + "建安区", + "鄢陵县", + "襄城县", + "禹州市", + "长葛市" + ] + }, + { + "name": "漯河市", + "area": [ + "源汇区", + "郾城区", + "召陵区", + "舞阳县", + "临颍县" + ] + }, + { + "name": "三门峡市", + "area": [ + "湖滨区", + "陕州区", + "渑池县", + "卢氏县", + "义马市", + "灵宝市" + ] + }, + { + "name": "南阳市", + "area": [ + "宛城区", + "卧龙区", + "南召县", + "方城县", + "西峡县", + "镇平县", + "内乡县", + "淅川县", + "社旗县", + "唐河县", + "新野县", + "桐柏县", + "邓州市" + ] + }, + { + "name": "商丘市", + "area": [ + "梁园区", + "睢阳区", + "民权县", + "睢县", + "宁陵县", + "柘城县", + "虞城县", + "夏邑县", + "永城市" + ] + }, + { + "name": "信阳市", + "area": [ + "浉河区", + "平桥区", + "罗山县", + "光山县", + "新县", + "商城县", + "固始县", + "潢川县", + "淮滨县", + "息县" + ] + }, + { + "name": "周口市", + "area": [ + "川汇区", + "扶沟县", + "淮阳区", + "西华县", + "商水县", + "沈丘县", + "郸城县", + "太康县", + "鹿邑县", + "项城市" + ] + }, + { + "name": "驻马店市", + "area": [ + "驿城区", + "西平县", + "上蔡县", + "平舆县", + "正阳县", + "确山县", + "泌阳县", + "汝南县", + "遂平县", + "新蔡县" + ] + }, + { + "name": "济源市", + "area": [ + "济水街道", + "沁园街道", + "北海街道", + "天坛街道", + "玉泉街道", + "克井镇", + "五龙口镇", + "梨林镇", + "轵城镇", + "承留镇", + "坡头镇", + "大峪镇", + "邵原镇", + "思礼镇", + "王屋镇", + "下冶镇" + ] + } + ] + }, + { + "name": "四川省", + "city": [ + { + "name": "成都市", + "area": [ + "锦江区", + "青羊区", + "金牛区", + "武侯区", + "成华区", + "龙泉驿区", + "青白江区", + "新都区", + "温江区", + "双流区", + "郫都区", + "新津区", + "金堂县", + "大邑县", + "蒲江县", + "都江堰市", + "彭州市", + "邛崃市", + "崇州市", + "简阳市", + "天府区" + ] + }, + { + "name": "自贡市", + "area": [ + "自流井区", + "贡井区", + "大安区", + "沿滩区", + "荣县", + "富顺县" + ] + }, + { + "name": "攀枝花市", + "area": [ + "东区", + "西区", + "仁和区", + "米易县", + "盐边县" + ] + }, + { + "name": "泸州市", + "area": [ + "江阳区", + "纳溪区", + "龙马潭区", + "泸县", + "合江县", + "叙永县", + "古蔺县" + ] + }, + { + "name": "德阳市", + "area": [ + "旌阳区", + "罗江区", + "中江县", + "广汉市", + "什邡市", + "绵竹市" + ] + }, + { + "name": "绵阳市", + "area": [ + "涪城区", + "游仙区", + "安州区", + "三台县", + "盐亭县", + "梓潼县", + "北川羌族自治县", + "平武县", + "江油市" + ] + }, + { + "name": "广元市", + "area": [ + "利州区", + "昭化区", + "朝天区", + "旺苍县", + "青川县", + "剑阁县", + "苍溪县" + ] + }, + { + "name": "遂宁市", + "area": [ + "船山区", + "安居区", + "蓬溪县", + "大英县", + "射洪市" + ] + }, + { + "name": "内江市", + "area": [ + "市中区", + "东兴区", + "威远县", + "资中县", + "隆昌市" + ] + }, + { + "name": "乐山市", + "area": [ + "市中区", + "沙湾区", + "五通桥区", + "金口河区", + "犍为县", + "井研县", + "夹江县", + "沐川县", + "峨边彝族自治县", + "马边彝族自治县", + "峨眉山市" + ] + }, + { + "name": "南充市", + "area": [ + "顺庆区", + "高坪区", + "嘉陵区", + "南部县", + "营山县", + "蓬安县", + "仪陇县", + "西充县", + "阆中市" + ] + }, + { + "name": "眉山市", + "area": [ + "东坡区", + "彭山区", + "仁寿县", + "洪雅县", + "丹棱县", + "青神县" + ] + }, + { + "name": "宜宾市", + "area": [ + "翠屏区", + "南溪区", + "叙州区", + "江安县", + "长宁县", + "高县", + "珙县", + "筠连县", + "兴文县", + "屏山县" + ] + }, + { + "name": "广安市", + "area": [ + "广安区", + "前锋区", + "岳池县", + "武胜县", + "邻水县", + "华蓥市" + ] + }, + { + "name": "达州市", + "area": [ + "通川区", + "达川区", + "宣汉县", + "开江县", + "大竹县", + "渠县", + "万源市" + ] + }, + { + "name": "雅安市", + "area": [ + "雨城区", + "名山区", + "荥经县", + "汉源县", + "石棉县", + "天全县", + "芦山县", + "宝兴县" + ] + }, + { + "name": "巴中市", + "area": [ + "巴州区", + "恩阳区", + "通江县", + "南江县", + "平昌县" + ] + }, + { + "name": "资阳市", + "area": [ + "雁江区", + "安岳县", + "乐至县" + ] + }, + { + "name": "阿坝藏族羌族自治州", + "area": [ + "马尔康市", + "汶川县", + "理县", + "茂县", + "松潘县", + "九寨沟县", + "金川县", + "小金县", + "黑水县", + "壤塘县", + "阿坝县", + "若尔盖县", + "红原县" + ] + }, + { + "name": "甘孜藏族自治州", + "area": [ + "康定市", + "泸定县", + "丹巴县", + "九龙县", + "雅江县", + "道孚县", + "炉霍县", + "甘孜县", + "新龙县", + "德格县", + "白玉县", + "石渠县", + "色达县", + "理塘县", + "巴塘县", + "乡城县", + "稻城县", + "得荣县" + ] + }, + { + "name": "凉山彝族自治州", + "area": [ + "西昌市", + "木里藏族自治县", + "盐源县", + "德昌县", + "会理县", + "会东县", + "宁南县", + "普格县", + "布拖县", + "金阳县", + "昭觉县", + "喜德县", + "冕宁县", + "越西县", + "甘洛县", + "美姑县", + "雷波县" + ] + } + ] + }, + { + "name": "湖北省", + "city": [ + { + "name": "武汉市", + "area": [ + "江岸区", + "江汉区", + "硚口区", + "汉阳区", + "武昌区", + "青山区", + "洪山区", + "东西湖区", + "汉南区", + "蔡甸区", + "江夏区", + "黄陂区", + "新洲区" + ] + }, + { + "name": "黄石市", + "area": [ + "黄石港区", + "西塞山区", + "下陆区", + "铁山区", + "阳新县", + "大冶市" + ] + }, + { + "name": "十堰市", + "area": [ + "茅箭区", + "张湾区", + "郧阳区", + "郧西县", + "竹山县", + "竹溪县", + "房县", + "丹江口市" + ] + }, + { + "name": "宜昌市", + "area": [ + "西陵区", + "伍家岗区", + "点军区", + "猇亭区", + "夷陵区", + "远安县", + "兴山县", + "秭归县", + "长阳土家族自治县", + "五峰土家族自治县", + "宜都市", + "当阳市", + "枝江市" + ] + }, + { + "name": "襄阳市", + "area": [ + "襄城区", + "樊城区", + "襄州区", + "南漳县", + "谷城县", + "保康县", + "老河口市", + "枣阳市", + "宜城市" + ] + }, + { + "name": "鄂州市", + "area": [ + "梁子湖区", + "华容区", + "鄂城区" + ] + }, + { + "name": "荆门市", + "area": [ + "东宝区", + "掇刀区", + "沙洋县", + "钟祥市", + "京山市" + ] + }, + { + "name": "孝感市", + "area": [ + "孝南区", + "孝昌县", + "大悟县", + "云梦县", + "应城市", + "安陆市", + "汉川市" + ] + }, + { + "name": "荆州市", + "area": [ + "沙市区", + "荆州区", + "公安县", + "监利县", + "江陵县", + "石首市", + "洪湖市", + "松滋市" + ] + }, + { + "name": "黄冈市", + "area": [ + "黄州区", + "团风县", + "红安县", + "罗田县", + "英山县", + "浠水县", + "蕲春县", + "黄梅县", + "麻城市", + "武穴市" + ] + }, + { + "name": "咸宁市", + "area": [ + "咸安区", + "嘉鱼县", + "通城县", + "崇阳县", + "通山县", + "赤壁市" + ] + }, + { + "name": "随州市", + "area": [ + "曾都区", + "随县", + "广水市" + ] + }, + { + "name": "恩施土家族苗族自治州", + "area": [ + "恩施市", + "利川市", + "建始县", + "巴东县", + "宣恩县", + "咸丰县", + "来凤县", + "鹤峰县" + ] + }, + { + "name": "仙桃市", + "area": [ + "干河街道", + "龙华山街道", + "沙嘴街道", + "郑场镇", + "毛嘴镇", + "剅河镇", + "三伏潭镇", + "胡场镇", + "长埫口镇", + "西流河镇", + "彭场镇", + "沙湖镇", + "杨林尾镇", + "张沟镇", + "郭河镇", + "沔城回族镇", + "通海口镇", + "陈场镇", + "仙桃经济开发区", + "仙桃工业园", + "沙湖原种场", + "九合垸原种场", + "排湖风景区" + ] + }, + { + "name": "潜江市", + "area": [ + "园林办事处", + "广华办事处", + "杨市办事处", + "周矶办事处", + "泰丰办事处", + "高场办事处", + "熊口镇", + "高石碑镇", + "老新镇", + "王场镇", + "渔洋镇", + "龙湾镇", + "浩口镇", + "积玉口镇", + "张金镇", + "白鹭湖管理区", + "总口管理区", + "熊口农场管理区", + "运粮湖管理区", + "后湖管理区", + "周矶管理区", + "竹根滩镇" + ] + }, + { + "name": "天门市", + "area": [ + "竟陵街道", + "候口街道", + "杨林街道", + "多宝镇", + "拖市镇", + "张港镇", + "蒋场镇", + "汪场镇", + "渔薪镇", + "黄潭镇", + "岳口镇", + "横林镇", + "彭市镇", + "麻洋镇", + "多祥镇", + "干驿镇", + "马湾镇", + "卢市镇", + "小板镇", + "九真镇", + "皂市镇", + "胡市镇", + "石家河镇", + "佛子山镇", + "净潭乡" + ] + }, + { + "name": "神农架林区", + "area": [ + "松柏镇", + "阳日镇", + "木鱼镇", + "红坪镇", + "新华镇", + "大九湖镇", + "宋洛乡", + "下谷坪土家族乡" + ] + } + ] + }, + { + "name": "湖南省", + "city": [ + { + "name": "长沙市", + "area": [ + "芙蓉区", + "天心区", + "岳麓区", + "开福区", + "雨花区", + "望城区", + "长沙县", + "浏阳市", + "宁乡市" + ] + }, + { + "name": "株洲市", + "area": [ + "荷塘区", + "芦淞区", + "石峰区", + "天元区", + "渌口区", + "攸县", + "茶陵县", + "炎陵县", + "醴陵市", + "云龙示范区" + ] + }, + { + "name": "湘潭市", + "area": [ + "雨湖区", + "岳塘区", + "湘潭县", + "湘乡市", + "韶山市" + ] + }, + { + "name": "衡阳市", + "area": [ + "珠晖区", + "雁峰区", + "石鼓区", + "蒸湘区", + "南岳区", + "衡阳县", + "衡南县", + "衡山县", + "衡东县", + "祁东县", + "耒阳市", + "常宁市" + ] + }, + { + "name": "邵阳市", + "area": [ + "双清区", + "大祥区", + "北塔区", + "新邵县", + "邵阳县", + "隆回县", + "洞口县", + "绥宁县", + "新宁县", + "城步苗族自治县", + "武冈市", + "邵东市" + ] + }, + { + "name": "岳阳市", + "area": [ + "岳阳楼区", + "云溪区", + "君山区", + "岳阳县", + "华容县", + "湘阴县", + "平江县", + "汨罗市", + "临湘市" + ] + }, + { + "name": "常德市", + "area": [ + "武陵区", + "鼎城区", + "安乡县", + "汉寿县", + "澧县", + "临澧县", + "桃源县", + "石门县", + "津市市" + ] + }, + { + "name": "张家界市", + "area": [ + "永定区", + "武陵源区", + "慈利县", + "桑植县" + ] + }, + { + "name": "益阳市", + "area": [ + "资阳区", + "赫山区", + "南县", + "桃江县", + "安化县", + "沅江市" + ] + }, + { + "name": "郴州市", + "area": [ + "北湖区", + "苏仙区", + "桂阳县", + "宜章县", + "永兴县", + "嘉禾县", + "临武县", + "汝城县", + "桂东县", + "安仁县", + "资兴市" + ] + }, + { + "name": "永州市", + "area": [ + "零陵区", + "冷水滩区", + "祁阳县", + "东安县", + "双牌县", + "道县", + "江永县", + "宁远县", + "蓝山县", + "新田县", + "江华瑶族自治县" + ] + }, + { + "name": "怀化市", + "area": [ + "鹤城区", + "中方县", + "沅陵县", + "辰溪县", + "溆浦县", + "会同县", + "麻阳苗族自治县", + "新晃侗族自治县", + "芷江侗族自治县", + "靖州苗族侗族自治县", + "通道侗族自治县", + "洪江市" + ] + }, + { + "name": "娄底市", + "area": [ + "娄星区", + "双峰县", + "新化县", + "冷水江市", + "涟源市" + ] + }, + { + "name": "湘西土家族苗族自治州", + "area": [ + "吉首市", + "泸溪县", + "凤凰县", + "花垣县", + "保靖县", + "古丈县", + "永顺县", + "龙山县" + ] + } + ] + }, + { + "name": "河北省", + "city": [ + { + "name": "石家庄市", + "area": [ + "长安区", + "桥西区", + "新华区", + "井陉矿区", + "裕华区", + "藁城区", + "鹿泉区", + "栾城区", + "井陉县", + "正定县", + "行唐县", + "灵寿县", + "高邑县", + "深泽县", + "赞皇县", + "无极县", + "平山县", + "元氏县", + "赵县", + "辛集市", + "晋州市", + "新乐市" + ] + }, + { + "name": "唐山市", + "area": [ + "路南区", + "路北区", + "古冶区", + "开平区", + "丰南区", + "丰润区", + "曹妃甸区", + "滦州市", + "滦南县", + "乐亭县", + "迁西县", + "玉田县", + "遵化市", + "迁安市" + ] + }, + { + "name": "秦皇岛市", + "area": [ + "海港区", + "山海关区", + "北戴河区", + "抚宁区", + "青龙满族自治县", + "昌黎县", + "卢龙县" + ] + }, + { + "name": "邯郸市", + "area": [ + "邯山区", + "丛台区", + "复兴区", + "峰峰矿区", + "肥乡区", + "永年区", + "临漳县", + "成安县", + "大名县", + "涉县", + "磁县", + "邱县", + "鸡泽县", + "广平县", + "馆陶县", + "魏县", + "曲周县", + "武安市" + ] + }, + { + "name": "邢台市", + "area": [ + "襄都区", + "信都区", + "任泽区", + "南和区", + "临城县", + "内丘县", + "柏乡县", + "隆尧县", + "宁晋县", + "巨鹿县", + "新河县", + "广宗县", + "平乡县", + "威县", + "清河县", + "临西县", + "南宫市", + "沙河市" + ] + }, + { + "name": "保定市", + "area": [ + "竞秀区", + "莲池区", + "满城区", + "清苑区", + "徐水区", + "涞水县", + "阜平县", + "定兴县", + "唐县", + "高阳县", + "容城县", + "涞源县", + "望都县", + "安新县", + "易县", + "曲阳县", + "蠡县", + "顺平县", + "博野县", + "雄县", + "涿州市", + "定州市", + "安国市", + "高碑店市" + ] + }, + { + "name": "张家口市", + "area": [ + "桥东区", + "桥西区", + "宣化区", + "下花园区", + "万全区", + "崇礼区", + "张北县", + "康保县", + "沽源县", + "尚义县", + "蔚县", + "阳原县", + "怀安县", + "怀来县", + "涿鹿县", + "赤城县" + ] + }, + { + "name": "承德市", + "area": [ + "双桥区", + "双滦区", + "鹰手营子矿区", + "承德县", + "兴隆县", + "滦平县", + "隆化县", + "丰宁满族自治县", + "宽城满族自治县", + "围场满族蒙古族自治县", + "平泉市" + ] + }, + { + "name": "沧州市", + "area": [ + "新华区", + "运河区", + "沧县", + "青县", + "东光县", + "海兴县", + "盐山县", + "肃宁县", + "南皮县", + "吴桥县", + "献县", + "孟村回族自治县", + "泊头市", + "任丘市", + "黄骅市", + "河间市" + ] + }, + { + "name": "廊坊市", + "area": [ + "安次区", + "广阳区", + "固安县", + "永清县", + "香河县", + "大城县", + "文安县", + "大厂回族自治县", + "霸州市", + "三河市" + ] + }, + { + "name": "衡水市", + "area": [ + "桃城区", + "冀州区", + "枣强县", + "武邑县", + "武强县", + "饶阳县", + "安平县", + "故城县", + "景县", + "阜城县", + "深州市" + ] + } + ] + }, + { + "name": "福建省", + "city": [ + { + "name": "福州市", + "area": [ + "鼓楼区", + "台江区", + "仓山区", + "马尾区", + "晋安区", + "长乐区", + "闽侯县", + "连江县", + "罗源县", + "闽清县", + "永泰县", + "平潭县", + "福清市", + "高新技术产业开发区" + ] + }, + { + "name": "厦门市", + "area": [ + "思明区", + "海沧区", + "湖里区", + "集美区", + "同安区", + "翔安区" + ] + }, + { + "name": "莆田市", + "area": [ + "城厢区", + "涵江区", + "荔城区", + "秀屿区", + "仙游县" + ] + }, + { + "name": "三明市", + "area": [ + "梅列区", + "三元区", + "明溪县", + "清流县", + "宁化县", + "大田县", + "尤溪县", + "沙县", + "将乐县", + "泰宁县", + "建宁县", + "永安市" + ] + }, + { + "name": "泉州市", + "area": [ + "鲤城区", + "丰泽区", + "洛江区", + "泉港区", + "惠安县", + "安溪县", + "永春县", + "德化县", + "金门县", + "石狮市", + "晋江市", + "南安市" + ] + }, + { + "name": "漳州市", + "area": [ + "芗城区", + "龙文区", + "云霄县", + "漳浦县", + "诏安县", + "长泰县", + "东山县", + "南靖县", + "平和县", + "华安县", + "龙海市" + ] + }, + { + "name": "南平市", + "area": [ + "延平区", + "建阳区", + "顺昌县", + "浦城县", + "光泽县", + "松溪县", + "政和县", + "邵武市", + "武夷山市", + "建瓯市" + ] + }, + { + "name": "龙岩市", + "area": [ + "新罗区", + "永定区", + "长汀县", + "上杭县", + "武平县", + "连城县", + "漳平市" + ] + }, + { + "name": "宁德市", + "area": [ + "蕉城区", + "霞浦县", + "古田县", + "屏南县", + "寿宁县", + "周宁县", + "柘荣县", + "福安市", + "福鼎市" + ] + } + ] + }, + { + "name": "安徽省", + "city": [ + { + "name": "合肥市", + "area": [ + "瑶海区", + "庐阳区", + "蜀山区", + "包河区", + "长丰县", + "肥东县", + "肥西县", + "庐江县", + "巢湖市" + ] + }, + { + "name": "芜湖市", + "area": [ + "镜湖区", + "弋江区", + "鸠江区", + "三山区", + "芜湖县", + "繁昌县", + "南陵县", + "无为市" + ] + }, + { + "name": "蚌埠市", + "area": [ + "龙子湖区", + "蚌山区", + "禹会区", + "淮上区", + "怀远县", + "五河县", + "固镇县" + ] + }, + { + "name": "淮南市", + "area": [ + "大通区", + "田家庵区", + "谢家集区", + "八公山区", + "潘集区", + "凤台县", + "寿县" + ] + }, + { + "name": "马鞍山市", + "area": [ + "花山区", + "雨山区", + "博望区", + "当涂县", + "含山县", + "和县" + ] + }, + { + "name": "淮北市", + "area": [ + "杜集区", + "相山区", + "烈山区", + "濉溪县" + ] + }, + { + "name": "铜陵市", + "area": [ + "铜官区", + "义安区", + "郊区", + "枞阳县" + ] + }, + { + "name": "安庆市", + "area": [ + "迎江区", + "大观区", + "宜秀区", + "怀宁县", + "太湖县", + "宿松县", + "望江县", + "岳西县", + "桐城市", + "潜山市" + ] + }, + { + "name": "黄山市", + "area": [ + "屯溪区", + "黄山区", + "徽州区", + "歙县", + "休宁县", + "黟县", + "祁门县" + ] + }, + { + "name": "滁州市", + "area": [ + "琅琊区", + "南谯区", + "来安县", + "全椒县", + "定远县", + "凤阳县", + "天长市", + "明光市" + ] + }, + { + "name": "阜阳市", + "area": [ + "颍州区", + "颍东区", + "颍泉区", + "临泉县", + "太和县", + "阜南县", + "颍上县", + "界首市" + ] + }, + { + "name": "宿州市", + "area": [ + "埇桥区", + "砀山县", + "萧县", + "灵璧县", + "泗县" + ] + }, + { + "name": "六安市", + "area": [ + "金安区", + "裕安区", + "叶集区", + "霍邱县", + "舒城县", + "金寨县", + "霍山县" + ] + }, + { + "name": "亳州市", + "area": [ + "谯城区", + "涡阳县", + "蒙城县", + "利辛县" + ] + }, + { + "name": "池州市", + "area": [ + "贵池区", + "东至县", + "石台县", + "青阳县" + ] + }, + { + "name": "宣城市", + "area": [ + "宣州区", + "郎溪县", + "泾县", + "绩溪县", + "旌德县", + "宁国市", + "广德市" + ] + } + ] + }, + { + "name": "辽宁省", + "city": [ + { + "name": "沈阳市", + "area": [ + "和平区", + "沈河区", + "大东区", + "皇姑区", + "铁西区", + "苏家屯区", + "浑南区", + "沈北区", + "于洪区", + "辽中区", + "康平县", + "法库县", + "新民市" + ] + }, + { + "name": "大连市", + "area": [ + "中山区", + "西岗区", + "沙河口区", + "甘井子区", + "旅顺口区", + "金州区", + "普兰店区", + "长海县", + "瓦房店市", + "庄河市" + ] + }, + { + "name": "鞍山市", + "area": [ + "铁东区", + "铁西区", + "立山区", + "千山区", + "台安县", + "岫岩满族自治县", + "海城市" + ] + }, + { + "name": "抚顺市", + "area": [ + "新抚区", + "东洲区", + "望花区", + "顺城区", + "抚顺县", + "新宾满族自治县", + "清原满族自治县" + ] + }, + { + "name": "本溪市", + "area": [ + "平山区", + "溪湖区", + "明山区", + "南芬区", + "本溪满族自治县", + "桓仁满族自治县" + ] + }, + { + "name": "丹东市", + "area": [ + "元宝区", + "振兴区", + "振安区", + "宽甸满族自治县", + "东港市", + "凤城市" + ] + }, + { + "name": "锦州市", + "area": [ + "古塔区", + "凌河区", + "太和区", + "黑山县", + "义县", + "凌海市", + "北镇市" + ] + }, + { + "name": "营口市", + "area": [ + "站前区", + "西市区", + "鲅鱼圈区", + "老边区", + "盖州市", + "大石桥市" + ] + }, + { + "name": "阜新市", + "area": [ + "海州区", + "新邱区", + "太平区", + "清河门区", + "细河区", + "阜新蒙古族自治县", + "彰武县" + ] + }, + { + "name": "辽阳市", + "area": [ + "白塔区", + "文圣区", + "宏伟区", + "弓长岭区", + "太子河区", + "辽阳县", + "灯塔市" + ] + }, + { + "name": "盘锦市", + "area": [ + "双台子区", + "兴隆台区", + "大洼区", + "盘山县" + ] + }, + { + "name": "铁岭市", + "area": [ + "银州区", + "清河区", + "铁岭县", + "西丰县", + "昌图县", + "调兵山市", + "开原市" + ] + }, + { + "name": "朝阳市", + "area": [ + "双塔区", + "龙城区", + "朝阳县", + "建平县", + "喀喇沁左翼蒙古族自治县", + "北票市", + "凌源市" + ] + }, + { + "name": "葫芦岛市", + "area": [ + "连山区", + "龙港区", + "南票区", + "绥中县", + "建昌县", + "兴城市" + ] + } + ] + }, + { + "name": "陕西省", + "city": [ + { + "name": "西安市", + "area": [ + "新城区", + "碑林区", + "莲湖区", + "灞桥区", + "未央区", + "雁塔区", + "阎良区", + "临潼区", + "长安区", + "高陵区", + "鄠邑区", + "蓝田县", + "周至县", + "西咸区" + ] + }, + { + "name": "铜川市", + "area": [ + "王益区", + "印台区", + "耀州区", + "宜君县" + ] + }, + { + "name": "宝鸡市", + "area": [ + "渭滨区", + "金台区", + "陈仓区", + "凤翔县", + "岐山县", + "扶风县", + "眉县", + "陇县", + "千阳县", + "麟游县", + "凤县", + "太白县" + ] + }, + { + "name": "咸阳市", + "area": [ + "秦都区", + "杨陵区", + "渭城区", + "三原县", + "泾阳县", + "乾县", + "礼泉县", + "永寿县", + "长武县", + "旬邑县", + "淳化县", + "武功县", + "兴平市", + "彬州市" + ] + }, + { + "name": "渭南市", + "area": [ + "临渭区", + "华州区", + "潼关县", + "大荔县", + "合阳县", + "澄城县", + "蒲城县", + "白水县", + "富平县", + "韩城市", + "华阴市" + ] + }, + { + "name": "延安市", + "area": [ + "宝塔区", + "安塞区", + "延长县", + "延川县", + "志丹县", + "吴起县", + "甘泉县", + "富县", + "洛川县", + "宜川县", + "黄龙县", + "黄陵县", + "子长市" + ] + }, + { + "name": "汉中市", + "area": [ + "汉台区", + "南郑区", + "城固县", + "洋县", + "西乡县", + "勉县", + "宁强县", + "略阳县", + "镇巴县", + "留坝县", + "佛坪县" + ] + }, + { + "name": "榆林市", + "area": [ + "榆阳区", + "横山区", + "府谷县", + "靖边县", + "定边县", + "绥德县", + "米脂县", + "佳县", + "吴堡县", + "清涧县", + "子洲县", + "神木市" + ] + }, + { + "name": "安康市", + "area": [ + "汉滨区", + "汉阴县", + "石泉县", + "宁陕县", + "紫阳县", + "岚皋县", + "平利县", + "镇坪县", + "旬阳县", + "白河县" + ] + }, + { + "name": "商洛市", + "area": [ + "商州区", + "洛南县", + "丹凤县", + "商南县", + "山阳县", + "镇安县", + "柞水县" + ] + } + ] + }, + { + "name": "江西省", + "city": [ + { + "name": "南昌市", + "area": [ + "东湖区", + "西湖区", + "青云谱区", + "青山湖区", + "新建区", + "红谷滩区", + "南昌县", + "安义县", + "进贤县" + ] + }, + { + "name": "景德镇市", + "area": [ + "昌江区", + "珠山区", + "浮梁县", + "乐平市" + ] + }, + { + "name": "萍乡市", + "area": [ + "安源区", + "湘东区", + "莲花县", + "上栗县", + "芦溪县" + ] + }, + { + "name": "九江市", + "area": [ + "濂溪区", + "浔阳区", + "柴桑区", + "武宁县", + "修水县", + "永修县", + "德安县", + "都昌县", + "湖口县", + "彭泽县", + "瑞昌市", + "共青城市", + "庐山市" + ] + }, + { + "name": "新余市", + "area": [ + "渝水区", + "分宜县" + ] + }, + { + "name": "鹰潭市", + "area": [ + "月湖区", + "余江区", + "贵溪市" + ] + }, + { + "name": "赣州市", + "area": [ + "章贡区", + "南康区", + "赣县区", + "信丰县", + "大余县", + "上犹县", + "崇义县", + "安远县", + "定南县", + "全南县", + "宁都县", + "于都县", + "兴国县", + "会昌县", + "寻乌县", + "石城县", + "瑞金市", + "龙南市" + ] + }, + { + "name": "吉安市", + "area": [ + "吉州区", + "青原区", + "吉安县", + "吉水县", + "峡江县", + "新干县", + "永丰县", + "泰和县", + "遂川县", + "万安县", + "安福县", + "永新县", + "井冈山市" + ] + }, + { + "name": "宜春市", + "area": [ + "袁州区", + "奉新县", + "万载县", + "上高县", + "宜丰县", + "靖安县", + "铜鼓县", + "丰城市", + "樟树市", + "高安市" + ] + }, + { + "name": "抚州市", + "area": [ + "临川区", + "东乡区", + "南城县", + "黎川县", + "南丰县", + "崇仁县", + "乐安县", + "宜黄县", + "金溪县", + "资溪县", + "广昌县" + ] + }, + { + "name": "上饶市", + "area": [ + "信州区", + "广丰区", + "广信区", + "玉山县", + "铅山县", + "横峰县", + "弋阳县", + "余干县", + "鄱阳县", + "万年县", + "婺源县", + "德兴市" + ] + } + ] + }, + { + "name": "云南省", + "city": [ + { + "name": "昆明市", + "area": [ + "五华区", + "盘龙区", + "官渡区", + "西山区", + "东川区", + "呈贡区", + "晋宁区", + "富民县", + "宜良县", + "石林彝族自治县", + "嵩明县", + "禄劝彝族苗族自治县", + "寻甸回族彝族自治县", + "安宁市" + ] + }, + { + "name": "曲靖市", + "area": [ + "麒麟区", + "沾益区", + "马龙区", + "陆良县", + "师宗县", + "罗平县", + "富源县", + "会泽县", + "宣威市" + ] + }, + { + "name": "玉溪市", + "area": [ + "红塔区", + "江川区", + "通海县", + "华宁县", + "易门县", + "峨山彝族自治县", + "新平彝族傣族自治县", + "元江哈尼族彝族傣族自治县", + "澄江市" + ] + }, + { + "name": "保山市", + "area": [ + "隆阳区", + "施甸县", + "龙陵县", + "昌宁县", + "腾冲市" + ] + }, + { + "name": "昭通市", + "area": [ + "昭阳区", + "鲁甸县", + "巧家县", + "盐津县", + "大关县", + "永善县", + "绥江县", + "镇雄县", + "彝良县", + "威信县", + "水富市" + ] + }, + { + "name": "丽江市", + "area": [ + "古城区", + "玉龙纳西族自治县", + "永胜县", + "华坪县", + "宁蒗彝族自治县" + ] + }, + { + "name": "普洱市", + "area": [ + "思茅区", + "宁洱哈尼族彝族自治县", + "墨江哈尼族自治县", + "景东彝族自治县", + "景谷傣族彝族自治县", + "镇沅彝族哈尼族拉祜族自治县", + "江城哈尼族彝族自治县", + "孟连傣族拉祜族佤族自治县", + "澜沧拉祜族自治县", + "西盟佤族自治县" + ] + }, + { + "name": "临沧市", + "area": [ + "临翔区", + "凤庆县", + "云县", + "永德县", + "镇康县", + "双江拉祜族佤族布朗族傣族自治县", + "耿马傣族佤族自治县", + "沧源佤族自治县" + ] + }, + { + "name": "楚雄彝族自治州", + "area": [ + "楚雄市", + "双柏县", + "牟定县", + "南华县", + "姚安县", + "大姚县", + "永仁县", + "元谋县", + "武定县", + "禄丰县" + ] + }, + { + "name": "红河哈尼族彝族自治州", + "area": [ + "个旧市", + "开远市", + "蒙自市", + "弥勒市", + "屏边苗族自治县", + "建水县", + "石屏县", + "泸西县", + "元阳县", + "红河县", + "金平苗族瑶族傣族自治县", + "绿春县", + "河口瑶族自治县" + ] + }, + { + "name": "文山壮族苗族自治州", + "area": [ + "文山市", + "砚山县", + "西畴县", + "麻栗坡县", + "马关县", + "丘北县", + "广南县", + "富宁县" + ] + }, + { + "name": "西双版纳傣族自治州", + "area": [ + "景洪市", + "勐海县", + "勐腊县" + ] + }, + { + "name": "大理白族自治州", + "area": [ + "大理市", + "漾濞彝族自治县", + "祥云县", + "宾川县", + "弥渡县", + "南涧彝族自治县", + "巍山彝族回族自治县", + "永平县", + "云龙县", + "洱源县", + "剑川县", + "鹤庆县" + ] + }, + { + "name": "德宏傣族景颇族自治州", + "area": [ + "瑞丽市", + "芒市", + "梁河县", + "盈江县", + "陇川县" + ] + }, + { + "name": "怒江傈僳族自治州", + "area": [ + "泸水市", + "福贡县", + "贡山独龙族怒族自治县", + "兰坪白族普米族自治县" + ] + }, + { + "name": "迪庆藏族自治州", + "area": [ + "香格里拉市", + "德钦县", + "维西傈僳族自治县" + ] + } + ] + }, + { + "name": "山西省", + "city": [ + { + "name": "太原市", + "area": [ + "小店区", + "迎泽区", + "杏花岭区", + "尖草坪区", + "万柏林区", + "晋源区", + "清徐县", + "阳曲县", + "娄烦县", + "古交市" + ] + }, + { + "name": "大同市", + "area": [ + "新荣区", + "平城区", + "云冈区", + "云州区", + "阳高县", + "天镇县", + "广灵县", + "灵丘县", + "浑源县", + "左云县" + ] + }, + { + "name": "阳泉市", + "area": [ + "城区", + "矿区", + "郊区", + "平定县", + "盂县" + ] + }, + { + "name": "长治市", + "area": [ + "潞州区", + "上党区", + "屯留区", + "潞城区", + "襄垣县", + "平顺县", + "黎城县", + "壶关县", + "长子县", + "武乡县", + "沁县", + "沁源县" + ] + }, + { + "name": "晋城市", + "area": [ + "城区", + "沁水县", + "阳城县", + "陵川县", + "泽州县", + "高平市" + ] + }, + { + "name": "朔州市", + "area": [ + "朔城区", + "平鲁区", + "山阴县", + "应县", + "右玉县", + "怀仁市" + ] + }, + { + "name": "晋中市", + "area": [ + "榆次区", + "太谷区", + "榆社县", + "左权县", + "和顺县", + "昔阳县", + "寿阳县", + "祁县", + "平遥县", + "灵石县", + "介休市" + ] + }, + { + "name": "运城市", + "area": [ + "盐湖区", + "临猗县", + "万荣县", + "闻喜县", + "稷山县", + "新绛县", + "绛县", + "垣曲县", + "夏县", + "平陆县", + "芮城县", + "永济市", + "河津市" + ] + }, + { + "name": "忻州市", + "area": [ + "忻府区", + "定襄县", + "五台县", + "代县", + "繁峙县", + "宁武县", + "静乐县", + "神池县", + "五寨县", + "岢岚县", + "河曲县", + "保德县", + "偏关县", + "原平市" + ] + }, + { + "name": "临汾市", + "area": [ + "尧都区", + "曲沃县", + "翼城县", + "襄汾县", + "洪洞县", + "古县", + "安泽县", + "浮山县", + "吉县", + "乡宁县", + "大宁县", + "隰县", + "永和县", + "蒲县", + "汾西县", + "侯马市", + "霍州市" + ] + }, + { + "name": "吕梁市", + "area": [ + "离石区", + "文水县", + "交城县", + "兴县", + "临县", + "柳林县", + "石楼县", + "岚县", + "方山县", + "中阳县", + "交口县", + "孝义市", + "汾阳市" + ] + } + ] + }, + { + "name": "吉林省", + "city": [ + { + "name": "长春市", + "area": [ + "南关区", + "宽城区", + "朝阳区", + "二道区", + "绿园区", + "双阳区", + "九台区", + "农安县", + "榆树市", + "德惠市", + "公主岭市", + "长德区", + "北湖区", + "空港区", + "北区", + "南区", + "高新区", + "汽开区", + "净月区", + "莲花山旅游度假区" + ] + }, + { + "name": "吉林市", + "area": [ + "昌邑区", + "龙潭区", + "船营区", + "丰满区", + "永吉县", + "蛟河市", + "桦甸市", + "舒兰市", + "磐石市" + ] + }, + { + "name": "四平市", + "area": [ + "铁西区", + "铁东区", + "梨树县", + "伊通满族自治县", + "双辽市" + ] + }, + { + "name": "辽源市", + "area": [ + "龙山区", + "西安区", + "东丰县", + "东辽县" + ] + }, + { + "name": "通化市", + "area": [ + "东昌区", + "二道江区", + "通化县", + "辉南县", + "柳河县", + "梅河口市", + "集安市" + ] + }, + { + "name": "白山市", + "area": [ + "浑江区", + "江源区", + "抚松县", + "靖宇县", + "长白朝鲜族自治县", + "临江市" + ] + }, + { + "name": "松原市", + "area": [ + "宁江区", + "前郭尔罗斯蒙古族自治县", + "长岭县", + "乾安县", + "扶余市" + ] + }, + { + "name": "白城市", + "area": [ + "洮北区", + "镇赉县", + "通榆县", + "洮南市", + "大安市" + ] + }, + { + "name": "延边朝鲜族自治州", + "area": [ + "延吉市", + "图们市", + "敦化市", + "珲春市", + "龙井市", + "和龙市", + "汪清县", + "安图县" + ] + } + ] + }, + { + "name": "贵州省", + "city": [ + { + "name": "贵阳市", + "area": [ + "南明区", + "云岩区", + "花溪区", + "乌当区", + "白云区", + "观山湖区", + "开阳县", + "息烽县", + "修文县", + "清镇市" + ] + }, + { + "name": "六盘水市", + "area": [ + "钟山区", + "六枝特区", + "水城县", + "盘州市" + ] + }, + { + "name": "遵义市", + "area": [ + "红花岗区", + "汇川区", + "播州区", + "桐梓县", + "绥阳县", + "正安县", + "道真仡佬族苗族自治县", + "务川仡佬族苗族自治县", + "凤冈县", + "湄潭县", + "余庆县", + "习水县", + "赤水市", + "仁怀市" + ] + }, + { + "name": "安顺市", + "area": [ + "西秀区", + "平坝区", + "普定县", + "镇宁布依族苗族自治县", + "关岭布依族苗族自治县", + "紫云苗族布依族自治县" + ] + }, + { + "name": "毕节市", + "area": [ + "七星关区", + "大方县", + "黔西县", + "金沙县", + "织金县", + "纳雍县", + "威宁彝族回族苗族自治县", + "赫章县" + ] + }, + { + "name": "铜仁市", + "area": [ + "碧江区", + "万山区", + "江口县", + "玉屏侗族自治县", + "石阡县", + "思南县", + "印江土家族苗族自治县", + "德江县", + "沿河土家族自治县", + "松桃苗族自治县" + ] + }, + { + "name": "黔西南布依族苗族自治州", + "area": [ + "兴义市", + "兴仁市", + "普安县", + "晴隆县", + "贞丰县", + "望谟县", + "册亨县", + "安龙县" + ] + }, + { + "name": "黔东南苗族侗族自治州", + "area": [ + "凯里市", + "黄平县", + "施秉县", + "三穗县", + "镇远县", + "岑巩县", + "天柱县", + "锦屏县", + "剑河县", + "台江县", + "黎平县", + "榕江县", + "从江县", + "雷山县", + "麻江县", + "丹寨县" + ] + }, + { + "name": "黔南布依族苗族自治州", + "area": [ + "都匀市", + "福泉市", + "荔波县", + "贵定县", + "瓮安县", + "独山县", + "平塘县", + "罗甸县", + "长顺县", + "龙里县", + "惠水县", + "三都水族自治县" + ] + } + ] + }, + { + "name": "甘肃省", + "city": [ + { + "name": "兰州市", + "area": [ + "城关区", + "七里河区", + "西固区", + "安宁区", + "红古区", + "永登县", + "皋兰县", + "榆中县" + ] + }, + { + "name": "嘉峪关市", + "area": [ + "胜利街道", + "五一街道", + "矿山街道", + "新华街道", + "建设街道", + "前进街道", + "峪苑街道", + "朝阳街道", + "峪泉镇", + "文殊镇", + "新城镇", + "雄关区", + "长城区", + "镜铁区" + ] + }, + { + "name": "金昌市", + "area": [ + "金川区", + "永昌县" + ] + }, + { + "name": "白银市", + "area": [ + "白银区", + "平川区", + "靖远县", + "会宁县", + "景泰县" + ] + }, + { + "name": "天水市", + "area": [ + "秦州区", + "麦积区", + "清水县", + "秦安县", + "甘谷县", + "武山县", + "张家川回族自治县" + ] + }, + { + "name": "武威市", + "area": [ + "凉州区", + "民勤县", + "古浪县", + "天祝藏族自治县" + ] + }, + { + "name": "张掖市", + "area": [ + "甘州区", + "肃南裕固族自治县", + "民乐县", + "临泽县", + "高台县", + "山丹县" + ] + }, + { + "name": "平凉市", + "area": [ + "崆峒区", + "泾川县", + "灵台县", + "崇信县", + "庄浪县", + "静宁县", + "华亭市" + ] + }, + { + "name": "酒泉市", + "area": [ + "肃州区", + "金塔县", + "瓜州县", + "肃北蒙古族自治县", + "阿克塞哈萨克族自治县", + "玉门市", + "敦煌市" + ] + }, + { + "name": "庆阳市", + "area": [ + "西峰区", + "庆城县", + "环县", + "华池县", + "合水县", + "正宁县", + "宁县", + "镇原县" + ] + }, + { + "name": "定西市", + "area": [ + "安定区", + "通渭县", + "陇西县", + "渭源县", + "临洮县", + "漳县", + "岷县" + ] + }, + { + "name": "陇南市", + "area": [ + "武都区", + "成县", + "文县", + "宕昌县", + "康县", + "西和县", + "礼县", + "徽县", + "两当县" + ] + }, + { + "name": "临夏回族自治州", + "area": [ + "临夏市", + "临夏县", + "康乐县", + "永靖县", + "广河县", + "和政县", + "东乡族自治县", + "积石山保安族东乡族撒拉族自治县" + ] + }, + { + "name": "甘南藏族自治州", + "area": [ + "合作市", + "临潭县", + "卓尼县", + "舟曲县", + "迭部县", + "玛曲县", + "碌曲县", + "夏河县" + ] + } + ] + }, + { + "name": "海南省", + "city": [ + { + "name": "海口市", + "area": [ + "秀英区", + "龙华区", + "琼山区", + "美兰区" + ] + }, + { + "name": "三亚市", + "area": [ + "海棠区", + "吉阳区", + "天涯区", + "崖州区" + ] + }, + { + "name": "三沙市", + "area": [ + "西沙群岛", + "中沙群岛", + "南沙群岛" + ] + }, + { + "name": "儋州市", + "area": [ + "那大镇", + "和庆镇", + "南丰镇", + "大成镇", + "雅星镇", + "兰洋镇", + "光村镇", + "木棠镇", + "海头镇", + "峨蔓镇", + "王五镇", + "白马井镇", + "中和镇", + "排浦镇", + "东成镇", + "新州镇", + "国营八一总场", + "国营蓝洋农场", + "国营西联农场", + "国营西培农场" + ] + }, + { + "name": "五指山市", + "area": [ + "通什镇", + "南圣镇", + "毛阳镇", + "番阳镇", + "畅好乡", + "毛道乡", + "水满乡" + ] + }, + { + "name": "琼海市", + "area": [ + "嘉积镇", + "博鳌镇", + "万泉镇", + "潭门镇", + "长坡镇", + "塔洋镇", + "大路镇", + "中原镇", + "阳江镇", + "龙江镇", + "石壁镇", + "会山镇" + ] + }, + { + "name": "文昌市", + "area": [ + "文城镇", + "重兴镇", + "蓬莱镇", + "会文镇", + "东路镇", + "潭牛镇", + "东阁镇", + "文教镇", + "东郊镇", + "龙楼镇", + "昌洒镇", + "翁田镇", + "抱罗镇", + "冯坡镇", + "锦山镇", + "铺前镇", + "公坡镇" + ] + }, + { + "name": "万宁市", + "area": [ + "万城镇", + "龙滚镇", + "和乐镇", + "后安镇", + "大茂镇", + "东澳镇", + "礼纪镇", + "长丰镇", + "山根镇", + "北大镇", + "南桥镇", + "三更罗镇", + "兴隆华侨农场", + "地方国营六连林场" + ] + }, + { + "name": "东方市", + "area": [ + "八所镇", + "东河镇", + "大田镇", + "感城镇", + "板桥镇", + "三家镇", + "四更镇", + "新龙镇", + "天安乡", + "江边乡" + ] + }, + { + "name": "定安县", + "area": [ + "定城镇", + "新竹镇", + "龙湖镇", + "黄竹镇", + "雷鸣镇", + "龙门镇", + "龙河镇", + "岭口镇", + "翰林镇", + "富文镇" + ] + }, + { + "name": "屯昌县", + "area": [ + "屯城镇", + "新兴镇", + "枫木镇", + "乌坡镇", + "南吕镇", + "南坤镇", + "坡心镇", + "西昌镇" + ] + }, + { + "name": "澄迈县", + "area": [ + "金江镇", + "瑞溪镇", + "永发镇", + "老城镇", + "加乐镇", + "文儒镇", + "福山镇", + "桥头镇", + "中兴镇", + "仁兴镇", + "大丰镇", + "金安农场", + "红光农场", + "西达农场", + "澄迈林场", + "海南老城经济开发区", + "海口综合保税区", + "马村中心港区" + ] + }, + { + "name": "临高县", + "area": [ + "临城镇", + "东英镇", + "波莲镇", + "调楼镇", + "新盈镇", + "南宝镇", + "和舍镇", + "多文镇", + "博厚镇", + "皇桐镇", + "加来农场", + "金牌港经济开发区", + "临高角旅游度假开发区" + ] + }, + { + "name": "白沙黎族自治县", + "area": [ + "牙叉镇", + "七坊镇", + "邦溪镇", + "打安镇", + "细水乡", + "元门乡", + "南开乡", + "阜龙乡", + "青松乡", + "金波乡", + "荣邦乡" + ] + }, + { + "name": "昌江黎族自治县", + "area": [ + "石碌镇", + "叉河镇", + "十月田镇", + "乌烈镇", + "昌化镇", + "海尾镇", + "七叉镇", + "王下乡" + ] + }, + { + "name": "乐东黎族自治县", + "area": [ + "抱由镇", + "万冲镇", + "大安镇", + "志仲镇", + "千家镇", + "九所镇", + "利国镇", + "黄流镇", + "佛罗镇", + "尖峰镇", + "莺歌海镇" + ] + }, + { + "name": "陵水黎族自治县", + "area": [ + "椰林镇", + "新村镇", + "英州镇", + "本号镇", + "光坡镇", + "三才镇", + "黎安镇", + "隆广镇", + "文罗镇", + "提蒙乡", + "群英乡" + ] + }, + { + "name": "保亭黎族苗族自治县", + "area": [ + "保城镇", + "什玲镇", + "加茂镇", + "响水镇", + "新政镇", + "三道镇", + "六弓乡", + "南林乡", + "毛感乡" + ] + }, + { + "name": "琼中黎族苗族自治县", + "area": [ + "营根镇", + "湾岭镇", + "黎母山镇", + "红毛镇", + "长征镇", + "中平镇", + "和平镇", + "什运乡", + "上安乡", + "吊罗山乡", + "阳江农场", + "大丰农场", + "新进农场", + "乌石农场", + "岭头农场", + "南方农场", + "新伟农场", + "加钗农场", + "长征农场", + "乘坡农场", + "太平农场" + ] + } + ] + }, + { + "name": "青海省", + "city": [ + { + "name": "西宁市", + "area": [ + "城东区", + "城中区", + "城西区", + "城北区", + "湟中区", + "大通回族土族自治县", + "湟源县" + ] + }, + { + "name": "海东市", + "area": [ + "乐都区", + "平安区", + "民和回族土族自治县", + "互助土族自治县", + "化隆回族自治县", + "循化撒拉族自治县" + ] + }, + { + "name": "海北藏族自治州", + "area": [ + "门源回族自治县", + "祁连县", + "海晏县", + "刚察县" + ] + }, + { + "name": "黄南藏族自治州", + "area": [ + "同仁市", + "尖扎县", + "泽库县", + "河南蒙古族自治县" + ] + }, + { + "name": "海南藏族自治州", + "area": [ + "共和县", + "同德县", + "贵德县", + "兴海县", + "贵南县" + ] + }, + { + "name": "果洛藏族自治州", + "area": [ + "玛沁县", + "班玛县", + "甘德县", + "达日县", + "久治县", + "玛多县" + ] + }, + { + "name": "玉树藏族自治州", + "area": [ + "玉树市", + "杂多县", + "称多县", + "治多县", + "囊谦县", + "曲麻莱县" + ] + }, + { + "name": "海西蒙古族藏族自治州", + "area": [ + "格尔木市", + "德令哈市", + "茫崖市", + "乌兰县", + "都兰县", + "天峻县" + ] + } + ] + }, + { + "name": "黑龙江省", + "city": [ + { + "name": "哈尔滨市", + "area": [ + "道里区", + "南岗区", + "道外区", + "平房区", + "松北区", + "香坊区", + "呼兰区", + "阿城区", + "双城区", + "依兰县", + "方正县", + "宾县", + "巴彦县", + "木兰县", + "通河县", + "延寿县", + "尚志市", + "五常市" + ] + }, + { + "name": "齐齐哈尔市", + "area": [ + "龙沙区", + "建华区", + "铁锋区", + "昂昂溪区", + "富拉尔基区", + "碾子山区", + "梅里斯达斡尔族区", + "龙江县", + "依安县", + "泰来县", + "甘南县", + "富裕县", + "克山县", + "克东县", + "拜泉县", + "讷河市" + ] + }, + { + "name": "鸡西市", + "area": [ + "鸡冠区", + "恒山区", + "滴道区", + "梨树区", + "城子河区", + "麻山区", + "鸡东县", + "虎林市", + "密山市" + ] + }, + { + "name": "鹤岗市", + "area": [ + "向阳区", + "工农区", + "南山区", + "兴安区", + "东山区", + "兴山区", + "萝北县", + "绥滨县" + ] + }, + { + "name": "双鸭山市", + "area": [ + "尖山区", + "岭东区", + "四方台区", + "宝山区", + "集贤县", + "友谊县", + "宝清县", + "饶河县" + ] + }, + { + "name": "大庆市", + "area": [ + "萨尔图区", + "龙凤区", + "让胡路区", + "红岗区", + "大同区", + "肇州县", + "肇源县", + "林甸县", + "杜尔伯特蒙古族自治县" + ] + }, + { + "name": "伊春市", + "area": [ + "伊美区", + "乌翠区", + "友好区", + "嘉荫县", + "汤旺县", + "丰林县", + "大箐山县", + "南岔县", + "金林区", + "铁力市" + ] + }, + { + "name": "佳木斯市", + "area": [ + "向阳区", + "前进区", + "东风区", + "郊区", + "桦南县", + "桦川县", + "汤原县", + "同江市", + "富锦市", + "抚远市" + ] + }, + { + "name": "七台河市", + "area": [ + "新兴区", + "桃山区", + "茄子河区", + "勃利县" + ] + }, + { + "name": "牡丹江市", + "area": [ + "东安区", + "阳明区", + "爱民区", + "西安区", + "林口县", + "绥芬河市", + "海林市", + "宁安市", + "穆棱市", + "东宁市" + ] + }, + { + "name": "黑河市", + "area": [ + "爱辉区", + "逊克县", + "孙吴县", + "北安市", + "五大连池市", + "嫩江市" + ] + }, + { + "name": "绥化市", + "area": [ + "北林区", + "望奎县", + "兰西县", + "青冈县", + "庆安县", + "明水县", + "绥棱县", + "安达市", + "肇东市", + "海伦市" + ] + }, + { + "name": "大兴安岭地区", + "area": [ + "漠河市", + "呼玛县", + "塔河县" + ] + } + ] + }, + { + "name": "西藏自治区", + "city": [ + { + "name": "拉萨市", + "area": [ + "城关区", + "堆龙德庆区", + "达孜区", + "林周县", + "当雄县", + "尼木县", + "曲水县", + "墨竹工卡县" + ] + }, + { + "name": "日喀则市", + "area": [ + "桑珠孜区", + "南木林县", + "江孜县", + "定日县", + "萨迦县", + "拉孜县", + "昂仁县", + "谢通门县", + "白朗县", + "仁布县", + "康马县", + "定结县", + "仲巴县", + "亚东县", + "吉隆县", + "聂拉木县", + "萨嘎县", + "岗巴县" + ] + }, + { + "name": "昌都市", + "area": [ + "卡若区", + "江达县", + "贡觉县", + "类乌齐县", + "丁青县", + "察雅县", + "八宿县", + "左贡县", + "芒康县", + "洛隆县", + "边坝县" + ] + }, + { + "name": "林芝市", + "area": [ + "巴宜区", + "工布江达县", + "米林县", + "墨脱县", + "波密县", + "察隅县", + "朗县" + ] + }, + { + "name": "山南市", + "area": [ + "乃东区", + "扎囊县", + "贡嘎县", + "桑日县", + "琼结县", + "曲松县", + "措美县", + "洛扎县", + "加查县", + "隆子县", + "错那县", + "浪卡子县" + ] + }, + { + "name": "那曲市", + "area": [ + "色尼区", + "嘉黎县", + "比如县", + "聂荣县", + "安多县", + "申扎县", + "索县", + "班戈县", + "巴青县", + "尼玛县", + "双湖县" + ] + }, + { + "name": "阿里地区", + "area": [ + "普兰县", + "札达县", + "噶尔县", + "日土县", + "革吉县", + "改则县", + "措勤县" + ] + } + ] + }, + { + "name": "内蒙古自治区", + "city": [ + { + "name": "呼和浩特市", + "area": [ + "新城区", + "回民区", + "玉泉区", + "赛罕区", + "土默特左旗", + "托克托县", + "和林格尔县", + "清水河县", + "武川县" + ] + }, + { + "name": "包头市", + "area": [ + "东河区", + "昆都仑区", + "青山区", + "石拐区", + "白云鄂博矿区", + "九原区", + "土默特右旗", + "固阳县", + "达尔罕茂明安联合旗" + ] + }, + { + "name": "乌海市", + "area": [ + "海勃湾区", + "海南区", + "乌达区" + ] + }, + { + "name": "赤峰市", + "area": [ + "红山区", + "元宝山区", + "松山区", + "阿鲁科尔沁旗", + "巴林左旗", + "巴林右旗", + "林西县", + "克什克腾旗", + "翁牛特旗", + "喀喇沁旗", + "宁城县", + "敖汉旗", + "新城区" + ] + }, + { + "name": "通辽市", + "area": [ + "科尔沁区", + "科尔沁左翼中旗", + "科尔沁左翼后旗", + "开鲁县", + "库伦旗", + "奈曼旗", + "扎鲁特旗", + "霍林郭勒市" + ] + }, + { + "name": "鄂尔多斯市", + "area": [ + "东胜区", + "康巴什区", + "达拉特旗", + "准格尔旗", + "鄂托克前旗", + "鄂托克旗", + "杭锦旗", + "乌审旗", + "伊金霍洛旗" + ] + }, + { + "name": "呼伦贝尔市", + "area": [ + "海拉尔区", + "扎赉诺尔区", + "阿荣旗", + "莫力达瓦达斡尔族自治旗", + "鄂伦春自治旗", + "鄂温克族自治旗", + "陈巴尔虎旗", + "新巴尔虎左旗", + "新巴尔虎右旗", + "满洲里市", + "牙克石市", + "扎兰屯市", + "额尔古纳市", + "根河市" + ] + }, + { + "name": "巴彦淖尔市", + "area": [ + "临河区", + "五原县", + "磴口县", + "乌拉特前旗", + "乌拉特中旗", + "乌拉特后旗", + "杭锦后旗" + ] + }, + { + "name": "乌兰察布市", + "area": [ + "集宁区", + "卓资县", + "化德县", + "商都县", + "兴和县", + "凉城县", + "察哈尔右翼前旗", + "察哈尔右翼中旗", + "察哈尔右翼后旗", + "四子王旗", + "丰镇市" + ] + }, + { + "name": "兴安盟", + "area": [ + "乌兰浩特市", + "阿尔山市", + "科尔沁右翼前旗", + "科尔沁右翼中旗", + "扎赉特旗", + "突泉县" + ] + }, + { + "name": "锡林郭勒盟", + "area": [ + "二连浩特市", + "锡林浩特市", + "阿巴嘎旗", + "苏尼特左旗", + "苏尼特右旗", + "东乌珠穆沁旗", + "西乌珠穆沁旗", + "太仆寺旗", + "镶黄旗", + "正镶白旗", + "正蓝旗", + "多伦县" + ] + }, + { + "name": "阿拉善盟", + "area": [ + "阿拉善左旗", + "阿拉善右旗", + "额济纳旗" + ] + } + ] + }, + { + "name": "广西壮族自治区", + "city": [ + { + "name": "南宁市", + "area": [ + "兴宁区", + "青秀区", + "江南区", + "西乡塘区", + "良庆区", + "邕宁区", + "武鸣区", + "隆安县", + "马山县", + "上林县", + "宾阳县", + "横县" + ] + }, + { + "name": "柳州市", + "area": [ + "城中区", + "鱼峰区", + "柳南区", + "柳北区", + "柳江区", + "柳城县", + "鹿寨县", + "融安县", + "融水苗族自治县", + "三江侗族自治县" + ] + }, + { + "name": "桂林市", + "area": [ + "秀峰区", + "叠彩区", + "象山区", + "七星区", + "雁山区", + "临桂区", + "阳朔县", + "灵川县", + "全州县", + "兴安县", + "永福县", + "灌阳县", + "龙胜各族自治县", + "资源县", + "平乐县", + "荔浦市", + "恭城瑶族自治县" + ] + }, + { + "name": "梧州市", + "area": [ + "万秀区", + "长洲区", + "龙圩区", + "苍梧县", + "藤县", + "蒙山县", + "岑溪市" + ] + }, + { + "name": "北海市", + "area": [ + "海城区", + "银海区", + "铁山港区", + "合浦县" + ] + }, + { + "name": "防城港市", + "area": [ + "港口区", + "防城区", + "上思县", + "东兴市" + ] + }, + { + "name": "钦州市", + "area": [ + "钦南区", + "钦北区", + "灵山县", + "浦北县" + ] + }, + { + "name": "贵港市", + "area": [ + "港北区", + "港南区", + "覃塘区", + "平南县", + "桂平市" + ] + }, + { + "name": "玉林市", + "area": [ + "玉州区", + "福绵区", + "容县", + "陆川县", + "博白县", + "兴业县", + "北流市" + ] + }, + { + "name": "百色市", + "area": [ + "右江区", + "田阳区", + "田东县", + "德保县", + "那坡县", + "凌云县", + "乐业县", + "田林县", + "西林县", + "隆林各族自治县", + "靖西市", + "平果市" + ] + }, + { + "name": "贺州市", + "area": [ + "八步区", + "平桂区", + "昭平县", + "钟山县", + "富川瑶族自治县" + ] + }, + { + "name": "河池市", + "area": [ + "金城江区", + "宜州区", + "南丹县", + "天峨县", + "凤山县", + "东兰县", + "罗城仫佬族自治县", + "环江毛南族自治县", + "巴马瑶族自治县", + "都安瑶族自治县", + "大化瑶族自治县" + ] + }, + { + "name": "来宾市", + "area": [ + "兴宾区", + "忻城县", + "象州县", + "武宣县", + "金秀瑶族自治县", + "合山市" + ] + }, + { + "name": "崇左市", + "area": [ + "江州区", + "扶绥县", + "宁明县", + "龙州县", + "大新县", + "天等县", + "凭祥市" + ] + } + ] + }, + { + "name": "宁夏回族自治区", + "city": [ + { + "name": "银川市", + "area": [ + "兴庆区", + "西夏区", + "金凤区", + "永宁县", + "贺兰县", + "灵武市" + ] + }, + { + "name": "石嘴山市", + "area": [ + "大武口区", + "惠农区", + "平罗县" + ] + }, + { + "name": "吴忠市", + "area": [ + "利通区", + "红寺堡区", + "盐池县", + "同心县", + "青铜峡市" + ] + }, + { + "name": "固原市", + "area": [ + "原州区", + "西吉县", + "隆德县", + "泾源县", + "彭阳县" + ] + }, + { + "name": "中卫市", + "area": [ + "沙坡头区", + "中宁县", + "海原县" + ] + } + ] + }, + { + "name": "新疆维吾尔自治区", + "city": [ + { + "name": "乌鲁木齐市", + "area": [ + "天山区", + "沙依巴克区", + "新市区", + "水磨沟区", + "头屯河区", + "达坂城区", + "米东区", + "乌鲁木齐县" + ] + }, + { + "name": "克拉玛依市", + "area": [ + "独山子区", + "克拉玛依区", + "白碱滩区", + "乌尔禾区" + ] + }, + { + "name": "吐鲁番市", + "area": [ + "高昌区", + "鄯善县", + "托克逊县" + ] + }, + { + "name": "哈密市", + "area": [ + "伊州区", + "巴里坤哈萨克自治县", + "伊吾县" + ] + }, + { + "name": "昌吉回族自治州", + "area": [ + "昌吉市", + "阜康市", + "呼图壁县", + "玛纳斯县", + "奇台县", + "吉木萨尔县", + "木垒哈萨克自治县" + ] + }, + { + "name": "博尔塔拉蒙古自治州", + "area": [ + "博乐市", + "阿拉山口市", + "精河县", + "温泉县" + ] + }, + { + "name": "巴音郭楞蒙古自治州", + "area": [ + "库尔勒市", + "轮台县", + "尉犁县", + "若羌县", + "且末县", + "焉耆回族自治县", + "和静县", + "和硕县", + "博湖县" + ] + }, + { + "name": "阿克苏地区", + "area": [ + "阿克苏市", + "库车市", + "温宿县", + "沙雅县", + "新和县", + "拜城县", + "乌什县", + "阿瓦提县", + "柯坪县" + ] + }, + { + "name": "克孜勒苏柯尔克孜自治州", + "area": [ + "阿图什市", + "阿克陶县", + "阿合奇县", + "乌恰县" + ] + }, + { + "name": "喀什地区", + "area": [ + "喀什市", + "疏附县", + "疏勒县", + "英吉沙县", + "泽普县", + "莎车县", + "叶城县", + "麦盖提县", + "岳普湖县", + "伽师县", + "巴楚县", + "塔什库尔干塔吉克自治县" + ] + }, + { + "name": "和田地区", + "area": [ + "和田市", + "和田县", + "墨玉县", + "皮山县", + "洛浦县", + "策勒县", + "于田县", + "民丰县" + ] + }, + { + "name": "伊犁哈萨克自治州", + "area": [ + "伊宁市", + "奎屯市", + "霍尔果斯市", + "伊宁县", + "察布查尔锡伯自治县", + "霍城县", + "巩留县", + "新源县", + "昭苏县", + "特克斯县", + "尼勒克县" + ] + }, + { + "name": "塔城地区", + "area": [ + "塔城市", + "乌苏市", + "额敏县", + "沙湾县", + "托里县", + "裕民县", + "和布克赛尔蒙古自治县" + ] + }, + { + "name": "阿勒泰地区", + "area": [ + "阿勒泰市", + "布尔津县", + "富蕴县", + "福海县", + "哈巴河县", + "青河县", + "吉木乃县" + ] + }, + { + "name": "石河子市", + "area": [ + "新城街道", + "向阳街道", + "红山街道", + "老街街道", + "东城街道", + "北泉镇", + "石河子镇" + ] + }, + { + "name": "阿拉尔市", + "area": [ + "幸福路街道", + "金银川路街道", + "青松路街道", + "南口街道", + "托喀依乡", + "一团金银川镇", + "二团新井子镇", + "三团甘泉镇", + "四团永宁镇", + "五团沙河镇", + "六团双城镇", + "七团玛滩镇", + "八团塔门镇", + "九团梨花镇", + "十团昌安镇", + "十一团花桥镇", + "十二团塔南镇", + "十三团幸福镇", + "十四团金杨镇", + "十五团", + "十六团新开岭镇" + ] + }, + { + "name": "图木舒克市", + "area": [ + "锦绣街道", + "前海街道", + "永安坝街道", + "四十一团草湖镇", + "四十二团龙口镇", + "四十四团永安镇", + "四十五团前海镇", + "四十六团永兴镇", + "四十八团河东镇", + "四十九团海安镇", + "五十团夏河镇", + "五十一团唐驿镇", + "五十三团金胡杨镇", + "五十四团兴安镇", + "伽师总场嘉和镇" + ] + }, + { + "name": "五家渠市", + "area": [ + "军垦路街道", + "青湖路街道", + "人民路街道", + "一零二团梧桐镇", + "一零三团蔡家湖镇" + ] + }, + { + "name": "北屯市", + "area": [ + "天骄街道", + "龙疆街道", + "军垦街道", + "北屯镇", + "一八三团双渠镇", + "一八七团丰庆镇", + "一八八团海川镇" + ] + }, + { + "name": "铁门关市", + "area": [ + "迎宾街道", + "二十二团河畔镇", + "二十四团高桥镇", + "二十七团天湖镇", + "二十八团博古其镇", + "三十团双丰镇", + "三十六团米兰镇", + "三十七团金山镇", + "三十八团南屯镇", + "二二三团开泽镇" + ] + }, + { + "name": "双河市", + "area": [ + "八十一团双桥镇", + "八十四团石峪镇", + "八十五团", + "八十六团博河镇", + "八十九团", + "九十团双乐镇" + ] + }, + { + "name": "可克达拉市", + "area": [ + "六十三团榆树庄镇", + "六十四团苇湖镇", + "六十六团", + "六十七团", + "六十八团长丰镇" + ] + }, + { + "name": "昆玉市", + "area": [ + "四十七团老兵镇", + "皮山农场昆泉镇", + "一牧场昆牧镇", + "二二四团", + "二二五团玉泉镇" + ] + }, + { + "name": "胡杨河市", + "area": [ + "一二三团", + "一二四团", + "一二五团", + "一二六团", + "一二七团", + "一二八团", + "一二九团", + "一三零团", + "一三一团", + "一三七团" + ] + } + ] + }, + { + "name": "香港特别行政区", + "city": [ + { + "name": "香港特别行政区", + "area": [ + "中西区", + "湾仔区", + "东区", + "南区", + "油尖旺区", + "深水埗区", + "九龙城区", + "黄大仙区", + "观塘区", + "北区", + "大埔区", + "沙田区", + "西贡区", + "荃湾区", + "屯门区", + "元朗区", + "葵青区", + "离岛区" + ] + } + ] + }, + { + "name": "澳门特别行政区", + "city": [ + { + "name": "澳门特别行政区", + "area": [ + "花地玛堂区", + "圣安多尼堂区", + "大堂区", + "望德堂区", + "风顺堂区", + "嘉模堂区", + "圣方济各堂区", + "路氹城" + ] + } + ] + }, + { + "name": "台湾省", + "city": [ + { + "name": "台北市", + "area": [ + "中正区", + "大同区", + "中山区", + "万华区", + "信义区", + "松山区", + "大安区", + "南港区", + "北投区", + "内湖区", + "士林区", + "文山区" + ] + }, + { + "name": "新北市", + "area": [ + "板桥区", + "土城区", + "新庄区", + "新店区", + "深坑区", + "石碇区", + "坪林区", + "乌来区", + "五股区", + "八里区", + "林口区", + "淡水区", + "中和区", + "永和区", + "三重区", + "芦洲区", + "泰山区", + "树林区", + "莺歌区", + "三峡区", + "汐止区", + "金山区", + "万里区", + "三芝区", + "石门区", + "瑞芳区", + "贡寮区", + "双溪区", + "平溪区" + ] + }, + { + "name": "桃园市", + "area": [ + "桃园区", + "中坜区", + "平镇区", + "八德区", + "杨梅区", + "芦竹区", + "大溪区", + "龙潭区", + "龟山区", + "大园区", + "观音区", + "新屋区", + "复兴区" + ] + }, + { + "name": "台中市", + "area": [ + "中区", + "东区", + "西区", + "南区", + "北区", + "西屯区", + "南屯区", + "北屯区", + "丰原区", + "大里区", + "太平区", + "东势区", + "大甲区", + "清水区", + "沙鹿区", + "梧栖区", + "后里区", + "神冈区", + "潭子区", + "大雅区", + "新社区", + "石冈区", + "外埔区", + "大安区", + "乌日区", + "大肚区", + "龙井区", + "雾峰区", + "和平区" + ] + }, + { + "name": "台南市", + "area": [ + "中西区", + "东区", + "南区", + "北区", + "安平区", + "安南区", + "永康区", + "归仁区", + "新化区", + "左镇区", + "玉井区", + "楠西区", + "南化区", + "仁德区", + "关庙区", + "龙崎区", + "官田区", + "麻豆区", + "佳里区", + "西港区", + "七股区", + "将军区", + "学甲区", + "北门区", + "新营区", + "后壁区", + "白河区", + "东山区", + "六甲区", + "下营区", + "柳营区", + "盐水区", + "善化区", + "大内区", + "山上区", + "新市区", + "安定区" + ] + }, + { + "name": "高雄市", + "area": [ + "楠梓区", + "左营区", + "鼓山区", + "三民区", + "盐埕区", + "前金区", + "新兴区苓雅区", + "前镇区", + "旗津区", + "小港区", + "凤山区", + "大寮区", + "鸟松区", + "林园区", + "仁武区", + "大树区", + "大社区", + "冈山区", + "路竹区", + "桥头区", + "梓官区", + "弥陀区", + "永安区", + "燕巢区", + "阿莲区", + "茄萣区", + "湖内区", + "旗山区", + "美浓区", + "内门区", + "杉林区", + "甲仙区", + "六龟区", + "茂林区", + "桃源区", + "那玛夏区" + ] + } + ] + }, + { + "name": "海外", + "city": [ + { + "name": "海外", + "area": [ + "海外" + ] + } + ] + } +]; +/** + * 获取所有省份 + */ + +export function getProvinces() { + var provinces = []; + + for (var i = 0; i < AreaJson.length; i++) { + provinces.push(AreaJson[i].name); + } + + return provinces; +} +/** + * 获取省对应的所有城市 + */ + + +export function getMyCity(provinceIndex) { + var citys = []; + + for (var i = 0; i < AreaJson[provinceIndex].city.length; i++) { + citys.push(AreaJson[provinceIndex].city[i].name); + } + + return citys; +} +/** + * 获取省市对应的所有地区 + */ + + +export function getAreas(provinceIndex, cityIndex) { + var areas = []; + areas = AreaJson[provinceIndex].city[cityIndex].area; + return areas; +} + diff --git a/uni_modules/cc-selectDity/components/cc-selectDity/cc-selectDity.vue b/uni_modules/cc-selectDity/components/cc-selectDity/cc-selectDity.vue new file mode 100644 index 0000000..371d9ed --- /dev/null +++ b/uni_modules/cc-selectDity/components/cc-selectDity/cc-selectDity.vue @@ -0,0 +1,319 @@ + + + + \ No newline at end of file diff --git a/uni_modules/cc-selectDity/package.json b/uni_modules/cc-selectDity/package.json new file mode 100644 index 0000000..4c9e3df --- /dev/null +++ b/uni_modules/cc-selectDity/package.json @@ -0,0 +1,85 @@ +{ + "id": "cc-selectDity", + "displayName": "自定义简单实用中国省市区三级联动选择器picker 设置收获地址界面模版(适配vue3)", + "version": "6.0.1", + "description": "自定义简单实用中国省市区三级联动选择器picker 地区选择器picker 设置收获地址界面模版", + "keywords": [ + "citypicker", + "省市区", + "picker", + "三级联动", + "选择器" +], + "repository": "", + "engines": { + "HBuilderX": "^3.8.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "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", + "钉钉": "y", + "快手": "y", + "飞书": "y", + "京东": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/cc-selectDity/readme.md b/uni_modules/cc-selectDity/readme.md new file mode 100644 index 0000000..f3a5e45 --- /dev/null +++ b/uni_modules/cc-selectDity/readme.md @@ -0,0 +1,232 @@ +# cc-selectDity + + +#### 使用方法 + +```使用方法 + + + +``` + +#### HTML代码实现部分 +```html + + + + +``` diff --git a/uni_modules/lime-clipper/changelog.md b/uni_modules/lime-clipper/changelog.md new file mode 100644 index 0000000..747a5da --- /dev/null +++ b/uni_modules/lime-clipper/changelog.md @@ -0,0 +1,72 @@ +## 1.0.9(2025-02-14) +- fix: uniapp x ios setLineDash不能为0 +## 1.0.8(2025-01-22) +- feat: 非uniapp x 增加canvasId属性 +## 1.0.7(2025-01-04) +- fix: 修复 vue2 无法生成图片的问题 +## 1.0.6(2024-12-28) +- fix: 修复 vue3 再次调用的时候生成空白的图片 +## 1.0.5(2024-12-17) +- fix: vue2 修复css变量问题 +## 1.0.4(2024-12-06) +- chore: 类型 +## 1.0.3(2024-12-06) +- chore: 更新文档 +## 1.0.2(2024-12-06) +- feat: 兼容uniappx, 目前在uniappx app 上无法使用本地缓存的图片,这个来自于官方BUG,预计在hbx4.42以后修复 +## 1.0.1(2023-06-12) +- fix: 修复vue3 QQ小程序无法生成问题 +## 1.0.0(2023-06-01) +- feat: 支持 vue3 并把 `stylus` 改成 `scss` +## 0.9.0(2022-12-12) +- chore: 更新文档 +- feat: 当缩放为1时 旋转自适应裁剪框 +## 0.8.0(2022-11-02) +- fix: 修复 正方形图片 不充满裁剪框的BUG +## 0.7.0(2021-07-10) +- chore: 统一css3 变量 命名规范 +- chore: 更新文档 +## 0.6.9(2021-07-09) +- chore: 统一命名规范,无须主动引入组件 +- fix: 修复第一次传入图片路径无自适应问题 +- fix: 修复安卓方向导致无法正确得到尺寸问题 +## 0.6.8(2021-06-26) +- fix: 修复 钉钉小程序 返回图片为 `null` 问题 +## 0.6.7(2021-06-19) +- fix: 修复`@touchstart`书写错误 +## 0.6.6(2021-06-19) +- fix: 修复支付宝引用图标的错误 +## 0.6.5(2021-06-14) +- fix: 修复锁定比例失效问题 +## 0.6.4(2021-04-16) +- 修复因mode引起的高度异常 +## 0.6.3(2021-04-13) +- 测试到微信小程序无法进第二次`draw`,故更新使用`v-model`的方式,显示隐藏组件。 +- 原先使用v-if显示隐藏组件依然可以使用,若发现无法二次`draw`请使用`v-model` +```html + +``` +```js +data: () => ({ + show: false +}) +``` +## 0.6.2(2021-03-26) +1、修复图片初始化BUG +2、增加`fileType`属性,默认值为`png` +## 0.6.1(2021-03-10) +- 给事件添加阻止冒泡 +## 0.6.0(2021-03-06) +增加`source`属性,`Object`类型,key为图片来源类型,value为选项说明。
+```js +// source 默认值 +{ + album: '从相册中选择', + camera: '拍照', + // #ifdef MP-WEIXIN + message: '从微信中选择' + // #endif +} +``` +## 0.5.0(2021-02-26) +- 调整为uni_modules目录规范 diff --git a/uni_modules/lime-clipper/components/l-clipper/index.scss b/uni_modules/lime-clipper/components/l-clipper/index.scss new file mode 100644 index 0000000..c53d3f9 --- /dev/null +++ b/uni_modules/lime-clipper/components/l-clipper/index.scss @@ -0,0 +1,231 @@ +@import '~@/uni_modules/lime-style/index.scss'; +$prefix: l !default; +$clipper: #{$prefix}-clipper; + +@font-face { + font-family: clipper-icon; + src: url('https://at.alicdn.com/t/c/font_4769200_ijsa6pjss7d.ttf?t=1733274494453') + // src: url('data:application/octet-stream;base64,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'); +} + + +$clipper-edge-border-width: create-var(clipper-edge-border-width, 6rpx); //6rpx !default; +$clipper-confirm-color: create-var(clipper-confirm-color, #07c160); //#07c160 !default; +$clipper-z-index: create-var(clipper-z-index, 99); //99 !default; +$clipper-mask-color: create-var(clipper-mask-color, rgba(0, 0, 0, 0.5)); //99 !default; + +.flex-auto { + flex: auto +} + +.bg-transparent { + background-color: rgba(0, 0, 0, 0.9); + transition-duration: 0.35s; +} + +.lime-clipper { + width: 100%; + // height: calc(100vh - var(--window-top)); + bottom: 0; + /* #ifdef APP-ANDROID || APP-IOS */ + top: 0; + /* #endif */ + /* #ifndef APP-ANDROID || APP-IOS */ + top: var(--window-top); + /* #endif */ + + background-color: rgba(0, 0, 0, 0.9); + position: fixed; + + left: 3000%; + z-index: $clipper-z-index; + + &.open { + left: 0; + } + + &-mask { + position: relative; + z-index: 2; + overflow: visible; + flex: 1; + /* #ifndef APP-ANDROID || APP-IOS */ + pointer-events: none; + /* #endif */ + } + &__content { + pointer-events: none; + position: absolute; + + box-sizing: border-box; + // box-shadow: $clipper-mask-color 0 0 0 80rpx; + box-shadow: 0 0 0 800rpx $clipper-mask-color ; + background: transparent; + overflow: visible; + // transition-duration 0.35s + // transition-property left,top + /* #ifndef APP-ANDROID || APP-IOS */ + border: 1rpx solid rgba(255,255,255,.3); + &::before,&::after { + content: ''; + position: absolute; + border: 1rpx dashed rgba(255,255,255,.3); + } + + &::before { + width: 100%; + top: 33.33%; + height: 33.33%; + border-left: none; + border-right: none; + } + + &::after { + width: 33.33%; + left: 33.33%; + height: 100%; + border-top:none; + border-bottom: none; + } + /* #endif */ + + } + /* #ifndef APP-ANDROID || APP-IOS */ + &__edge { + overflow: visible; + position: absolute; + // left 6rpx + width: 34rpx; + height: 34rpx; + // background: red; + border: $clipper-edge-border-width solid #ffffff; + pointer-events: auto; + + &::before { + content: ''; + position: absolute; + width: 40rpx; + height: 40rpx; + background-color: transparent; + } + &:nth-child(1) { + left: calc(#{$clipper-edge-border-width} * -1); + top: calc(#{$clipper-edge-border-width} * -1); + border-bottom-width: 0 !important; + border-right-width: 0 !important; + &:before { + top: -50%; + left: -50%; + } + } + + &:nth-child(2) { + right: calc(#{$clipper-edge-border-width} * -1); + top: calc(#{$clipper-edge-border-width} * -1); + border-bottom-width: 0 !important; + border-left-width: 0 !important; + &:before { + top: -50%; + left: 50%; + } + + } + + &:nth-child(3) { + left: calc(#{$clipper-edge-border-width} * -1); + bottom: calc(#{$clipper-edge-border-width} * -1); + border-top-width: 0 !important; + border-right-width: 0 !important; + &:before { + bottom: -50%; + left: -50%; + } + } + + &:nth-child(4) { + right: calc(#{$clipper-edge-border-width} * -1); + bottom: calc(#{$clipper-edge-border-width} * -1); + border-top-width: 0 !important; + border-left-width: 0 !important; + &:before { + bottom: -50%; + left: 50%; + } + } + } + /* #endif */ + &-image { + width: 100%; + border-style: none; + position: absolute; + top: 0; + left: 0; + z-index: 1; + transform-origin: center; + /* #ifndef APP-ANDROID || APP-IOS */ + max-width: inherit; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + /* #endif */ + + } + + &-canvas { + position: fixed; + z-index: 10; + left: -200%; + top: -200%; + pointer-events: none; + } + + &-tools { + position: absolute; + left: 0; + bottom: 10px; + width: 100%; + z-index: 99; + &__btns { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; + padding: 20rpx 40rpx; + box-sizing: border-box; + .text { + color: #fff; + min-width: 60rpx; + // #ifndef UNI-APP-X + display: block; + // #endif + } + .cancel { + font-weight: bold; + width: 112rpx; + height: 60rpx; + text-align: center; + line-height: 60rpx; + } + + .confirm { + font-weight: bold; + width: 112rpx; + height: 60rpx; + line-height: 60rpx; + background: $clipper-confirm-color; + border-radius: 6rpx; + text-align: center; + } + .rotate,.photo { + font-family: clipper-icon; + font-size: 60rpx; + } + // image { + // // display: block; + // width: 60rpx; + // height: 60rpx; + // } + } + } +} + diff --git a/uni_modules/lime-clipper/components/l-clipper/l-clipper.uvue b/uni_modules/lime-clipper/components/l-clipper/l-clipper.uvue new file mode 100644 index 0000000..4a3940a --- /dev/null +++ b/uni_modules/lime-clipper/components/l-clipper/l-clipper.uvue @@ -0,0 +1,853 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-clipper/components/l-clipper/l-clipper.vue b/uni_modules/lime-clipper/components/l-clipper/l-clipper.vue new file mode 100644 index 0000000..687ab57 --- /dev/null +++ b/uni_modules/lime-clipper/components/l-clipper/l-clipper.vue @@ -0,0 +1,869 @@ + + + + + diff --git a/uni_modules/lime-clipper/components/l-clipper/type.ts b/uni_modules/lime-clipper/components/l-clipper/type.ts new file mode 100644 index 0000000..398d238 --- /dev/null +++ b/uni_modules/lime-clipper/components/l-clipper/type.ts @@ -0,0 +1,89 @@ +export interface ClipperProps { + // value: boolean, + customStyle ?: string, + zIndex ?: number, + imageUrl ?: string, + fileType : string, + quality : number, + width : number, + height : number, + minWidth : number, + maxWidth : number, + destWidth ?: number, + destHeight ?: number, + minHeight : number, + maxHeight : number, + isLockWidth : boolean, + isLockHeight : boolean, + isLockRatio : boolean, + scaleRatio : number, + minRatio : number, + maxRatio : number, + isDisableScale : boolean, + isDisableRotate : boolean, + isLimitMove : boolean, + isShowPhotoBtn : boolean, + isShowRotateBtn : boolean, + isShowConfirmBtn : boolean, + isShowCancelBtn : boolean, + rotateAngle : number, + source : any, + confirmBgColor?:string + canvasId?:string + // source ?: UTSJSONObject +} + +export type ClipperclipStart = { + height : number, + width : number, + corner : number, + x : number, + y : number, + clipY : number, + clipX : number, +} +export type Point = { + x : number, + y : number +} +export type ClipperState = { + canvasWidth : number + canvasHeight : number + clipX : number + clipY : number + clipWidth : number + clipHeight : number + animation : boolean + imageWidth : number + imageHeight : number + imageTop : number + imageLeft : number + scale : number + angle : number + image ?: string, + imageInit : boolean + // throttleTimer : number, + // throttleFlag : boolean, + // timeClipCenter : number, + // flagClipTouch : boolean + // flagEndTouch : boolean + // clipStart : ClipperclipStart, + // animationTimer : number + // touchRelative : Point[], +} + +export type ClipBoxSizes = { + width : number; + height : number; + minWidth : number; + minHeight : number; + maxWidth : number; + maxHeight : number; +} + +export type Rectangle = { + x: number, + y: number, + width : number; + height : number; +} \ No newline at end of file diff --git a/uni_modules/lime-clipper/components/l-clipper/utils.js b/uni_modules/lime-clipper/components/l-clipper/utils.js new file mode 100644 index 0000000..3d4d30e --- /dev/null +++ b/uni_modules/lime-clipper/components/l-clipper/utils.js @@ -0,0 +1,248 @@ +/** + * 判断手指触摸位置 + */ +export function determineDirection(clipX, clipY, clipWidth, clipHeight, currentX, currentY) { + /* + * (右下>>1 右上>>2 左上>>3 左下>>4) + */ + let corner; + /** + * 思路:(利用直角坐标系) + * 1.找出裁剪框中心点 + * 2.如点击坐标在上方点与左方点区域内,则点击为左上角 + * 3.如点击坐标在下方点与右方点区域内,则点击为右下角 + * 4.其他角同理 + */ + const mainPoint = [clipX + clipWidth / 2, clipY + clipHeight / 2]; // 中心点 + const currentPoint = [currentX, currentY]; // 触摸点 + + if (currentPoint[0] <= mainPoint[0] && currentPoint[1] <= mainPoint[1]) { + corner = 3; // 左上 + } else if (currentPoint[0] >= mainPoint[0] && currentPoint[1] <= mainPoint[1]) { + corner = 2; // 右上 + } else if (currentPoint[0] <= mainPoint[0] && currentPoint[1] >= mainPoint[1]) { + corner = 4; // 左下 + } else if (currentPoint[0] >= mainPoint[0] && currentPoint[1] >= mainPoint[1]) { + corner = 1; // 右下 + } + + return corner; +} + +/** + * 图片边缘检测检测时,计算图片偏移量 + */ +export function calcImageOffset(data, scale) { + let left = data.imageLeft; + let top = data.imageTop; + scale = scale || data.scale; + + let imageWidth = data.imageWidth; + let imageHeight = data.imageHeight; + if ((data.angle / 90) % 2) { + imageWidth = data.imageHeight; + imageHeight = data.imageWidth; + } + const { + clipX, + clipWidth, + clipY, + clipHeight + } = data; + + // 当前图片宽度/高度 + const currentImageSize = (size) => (size * scale) / 2; + const currentImageWidth = currentImageSize(imageWidth); + const currentImageHeight = currentImageSize(imageHeight); + + left = clipX + currentImageWidth >= left ? left : clipX + currentImageWidth; + left = clipX + clipWidth - currentImageWidth <= left ? left : clipX + clipWidth - currentImageWidth; + top = clipY + currentImageHeight >= top ? top : clipY + currentImageHeight; + top = clipY + clipHeight - currentImageHeight <= top ? top : clipY + clipHeight - currentImageHeight; + return { + left, + top, + scale + }; +} + +/** + * 图片边缘检测时,计算图片缩放比例 + */ +export function calcImageScale(data, scale) { + scale = scale || data.scale; + let { + imageWidth, + imageHeight, + clipWidth, + clipHeight, + angle + } = data + if ((angle / 90) % 2) { + [imageWidth, imageHeight] = [imageHeight, imageWidth] + } + if(angle !== 0 && scale == Math.max(clipWidth / imageHeight , clipHeight / imageWidth )) { + return Math.max(clipWidth / imageWidth , clipHeight / imageHeight ) + } + if (imageWidth * scale < clipWidth) { + scale = clipWidth / imageWidth; + } + if (imageHeight * scale < clipHeight) { + scale = Math.max(scale, clipHeight / imageHeight); + } + return scale +} + +/** + * 计算图片尺寸 + */ +export function calcImageSize(width, height, data) { + let imageWidth = width, + imageHeight = height; + let { + clipWidth, + clipHeight, + sysinfo, + width: originWidth, + height: originHeight + } = data + const cw = clipWidth || originWidth + const ch = clipHeight || originHeight + if (imageWidth && imageHeight) { + if (imageWidth / imageHeight > cw / ch) { + imageHeight = clipHeight || originHeight; + imageWidth = (width / height) * imageHeight; + } else { + imageWidth = cw; + imageHeight = (height / width) * imageWidth; + } + } else { + let sys = sysinfo || uni.getSystemInfoSync(); + imageWidth = sys.windowWidth; + imageHeight = 0; + } + return { + imageWidth, + imageHeight + }; +} + +/** + * 勾股定理求斜边 + */ +export function calcPythagoreanTheorem(width, height) { + return Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)); +} + +/** + * 拖动裁剪框时计算 + */ +export function clipTouchMoveOfCalculate(data, event) { + const clientX = event.touches[0].clientX; + const clientY = event.touches[0].clientY; + + let { + clipWidth, + clipHeight, + clipY: oldClipY, + clipX: oldClipX, + clipStart, + isLockRatio, + maxWidth, + minWidth, + maxHeight, + minHeight + } = data; + maxWidth = uni.upx2px(maxWidth) // maxWidth / 2; + minWidth = uni.upx2px(minWidth) // minWidth / 2; + minHeight = uni.upx2px(minHeight) // minHeight / 2; + maxHeight = uni.upx2px(maxHeight) // maxHeight / 2; + + let width = clipWidth, + height = clipHeight, + clipY = oldClipY, + clipX = oldClipX, + // 获取裁剪框实际宽度/高度 + // 如果大于最大值则使用最大值 + // 如果小于最小值则使用最小值 + sizecorrect = () => { + width = width <= maxWidth ? (width >= minWidth ? width : minWidth) : maxWidth; + height = height <= maxHeight ? (height >= minHeight ? height : minHeight) : maxHeight; + }, + sizeinspect = () => { + + if ((width > maxWidth || width < minWidth || height > maxHeight || height < minHeight) && isLockRatio) { + sizecorrect(); + return false; + } else { + sizecorrect(); + return true; + } + }; + //if (clipStart.corner) { + height = clipStart.height + (clipStart.corner > 1 && clipStart.corner < 4 ? 1 : -1) * (clipStart.y - clientY); + //} + switch (clipStart.corner) { + case 1: + width = clipStart.width - clipStart.x + clientX; + if (isLockRatio) { + height = width / (clipWidth / clipHeight); + } + if (!sizeinspect()) return; + break; + case 2: + width = clipStart.width - clipStart.x + clientX; + if (isLockRatio) { + height = width / (clipWidth / clipHeight); + } + if (!sizeinspect()) { + return; + } else { + clipY = clipStart.clipY - (height - clipStart.height); + } + + break; + case 3: + width = clipStart.width + clipStart.x - clientX; + if (isLockRatio) { + height = width / (clipWidth / clipHeight); + } + if (!sizeinspect()) { + return; + } else { + clipY = clipStart.clipY - (height - clipStart.height); + clipX = clipStart.clipX - (width - clipStart.width); + } + + break; + case 4: + width = clipStart.width + clipStart.x - clientX; + if (isLockRatio) { + height = width / (clipWidth / clipHeight); + } + if (!sizeinspect()) { + return; + } else { + clipX = clipStart.clipX - (width - clipStart.width); + } + break; + default: + break; + } + return { + width, + height, + clipX, + clipY + }; +} + +/** + * 单指拖动图片计算偏移 + */ +export function imageTouchMoveOfCalcOffset(data, clientXForLeft, clientYForLeft) { + return { + left: clientXForLeft - data.touchRelative[0].x, + top: clientYForLeft - data.touchRelative[0].y + }; +} diff --git a/uni_modules/lime-clipper/components/l-clipper/utils.uts b/uni_modules/lime-clipper/components/l-clipper/utils.uts new file mode 100644 index 0000000..8a2d17b --- /dev/null +++ b/uni_modules/lime-clipper/components/l-clipper/utils.uts @@ -0,0 +1,506 @@ +import { Point, ClipperclipStart, Rectangle } from './type'; +const sysinfo = uni.getWindowInfo(); + + +/** + * 将给定的值限制在指定的最小值和最大值之间 + * @param {number} value - 要限制的值。 + * @param {number} min - 允许的最小值。 + * @param {number} max - 允许的最大值。 + * @returns {number} 返回限制后的值。 + */ +export function clamp(value : number, min : number, max : number) : number { + return Math.min(Math.max(value, min), max) +}; + +/** + * 计算图像尺寸 + * @param {number} width - 图像原始宽度 + * @param {number} height - 图像原始高度 + * @param {number} [clipWidth] - 图像剪辑宽度 + * @param {number} [clipHeight] - 图像剪辑高度 + * @param {number} [originWidth] - 图像原始宽度(备用) + * @param {number} [originHeight] - 图像原始高度(备用) + * @returns {{imageWidth: number, imageHeight: number}} - 计算后的图像尺寸 + */ +export function calcImageSize( + width : number, + height : number, + originWidth : number, + originHeight : number, + clipWidth ?: number, + clipHeight ?: number) : number[] { + + // 如果原始宽度和高度都为0,则将图像宽度设置为系统窗口宽度,高度设置为0 + if (width == 0 && height == 0) { + return [sysinfo.windowWidth, 0] + } + + // 使用剪辑宽度和高度,如果未提供则使用原始宽度和高度 + const finalWidth = clipWidth ?? originWidth; + const finalHeight = clipHeight ?? originHeight; + + // 根据宽高比计算最终的图像尺寸 + if (width / height > finalWidth / finalHeight) { + return [ + (width / height) * finalHeight, + finalHeight + ] + } else { + return [ + finalWidth, + (height / width) * finalWidth + ] + } +} + +/** + * 计算图片缩放比例 + * @param {number} imageWidth 图片原始宽度 + * @param {number} imageHeight 图片原始高度 + * @param {number} clipWidth 裁剪区域宽度 + * @param {number} clipHeight 裁剪区域高度 + * @param {number} angle 图片旋转角度 + * @param {number=} scale 图片缩放比例(可选,如果未提供则使用originScale) + * @returns {number} 计算后的图片缩放比例 + */ +export function calcImageScale( + imageWidth : number, + imageHeight : number, + clipWidth : number, + clipHeight : number, + angle : number, + scale : number + ) : number { + let _scale = scale + let _imageWidth = imageWidth + let _imageHeight = imageHeight + // 旋转角度导致宽高互换的情况 + if ((angle / 90) % 2 != 0) { + _imageWidth = imageHeight + _imageHeight = imageWidth + } + + // 计算缩放比例 + const scaleX = clipWidth / _imageWidth; + const scaleY = clipHeight / _imageHeight; + + // 如果旋转角度不为0且当前缩放比例等于最大缩放比例,则调整缩放比例 + if (angle != 0 && scale == Math.max(clipWidth / _imageHeight, clipHeight / _imageWidth)) { + return Math.max(scaleX, scaleY); + } + + // 根据裁剪区域调整缩放比例 + if (_imageWidth * scale < clipWidth) { + _scale = scaleX; + } + if (_imageHeight * scale < clipHeight) { + _scale = Math.max(scale, scaleY); + } + return _scale +} + + + +/** + * 计算图片在裁剪区域内的偏移量 + * @param {number} imageLeft 图片左边缘的初始偏移量。 + * @param {number} imageTop 图片顶边缘的初始偏移量。 + * @param {number} imageWidth 图片的原始宽度。 + * @param {number} imageHeight 图片的原始高度。 + * @param {number} clipX 裁剪区域的左边缘位置。 + * @param {number} clipY 裁剪区域的顶边缘位置。 + * @param {number} clipWidth 裁剪区域的宽度。 + * @param {number} clipHeight 裁剪区域的高度。 + * @param {number} angle 图片的旋转角度。 + * @param {number} scale 图片的缩放比例。 + * @returns {OffsetAndScale} 包含计算后的偏移量left、top和缩放比例scale的对象。 + */ +export function calcImageOffset( + imageLeft : number, + imageTop : number, + imageWidth : number, + imageHeight : number, + clipX : number, + clipY : number, + clipWidth : number, + clipHeight : number, + angle : number, + scale : number) : number[] { + + let left = imageLeft; + let top = imageTop; + + + let _imageWidth = imageWidth + let _imageHeight = imageHeight + // 旋转角度导致宽高互换的情况 + if ((angle / 90) % 2 != 0) { + _imageWidth = imageHeight + _imageHeight = imageWidth + } + + + // 计算当前图片尺寸 + const currentImageWidth = _imageWidth * scale / 2; + const currentImageHeight = _imageHeight * scale / 2; + + // 限制图片偏移量,确保图片在裁剪内 + left = Math.min(left, clipX + currentImageWidth); + left = Math.max(left, clipX + clipWidth - currentImageWidth); + top = Math.min(top, clipY + currentImageHeight); + top = Math.max(top, clipY + clipHeight - currentImageHeight); + + + // return { + // left, + // top, + // scale + // } + + return [left, top, scale] +} + +/** + * 根据给定的宽度和高度计算直角三角形的斜边长度(勾股定理) + * @param {number} width - 直角三角形的宽度。 + * @param {number} height - 直角三角形的高度。 + * @returns {number} 返回直角三角形的斜边长度。 + */ +export function calcPythagoreanTheorem(width : number, height : number) { + return Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)); +} + + +/** + * 计算触摸点相对于给定点的偏移量 + * @param {Point} point - 给定的点对象,包含 x 和 y 坐标。 + * @param {number} clientX - 触摸点的客户端 x 坐标。 + * @param {number} clientY - 触摸点的客户端 y 坐制。 + * @returns {number[]} 返回一个包含两个数字的数组,分别表示触摸点相对于给定点的 x 和 y 偏移量。 + */ +export function imageTouchMoveOfCalcOffset(point : Point, clientX : number, clientY : number) : number[] { + return [ + clientX - point.x, + clientY - point.y, + ] +} + + +/** + * 根据触摸点的位置确定点击的是裁剪框的哪个角 + * @param {number} clipX - 裁剪框的 x 坐标。 + * @param {number} clipY - 裁剪框的 y 坐标。 + * @param {number} clipWidth - 裁剪框的宽度。 + * @param {number} clipHeight - 裁剪框的高度。 + * @param {number} currentX - 触摸点的 x 坐标。 + * @param {number} currentY - 触摸点的 y 坐标。 + * @returns {number} 返回点击的角,1 表示右下角,2 表示右上角,3 表示左上角,4 表示左下角;如果没有点击在角上,则返回 -1。 + */ +export function determineDirection(clipX : number, clipY : number, clipWidth : number, clipHeight : number, currentX : number, currentY : number) : number { + /* + * (右下>>1 右上>>2 左上>>3 左下>>4) + */ + let corner : number = -1; + /** + * 思路:(利用直角坐标系) + * 1.找出裁剪框中心点 + * 2.如点击坐标在上方点与左方点区域内,则点击为左上角 + * 3.如点击坐标在下方点与右方点区域内,则点击为右下角 + * 4.其他角同理 + */ + const mainPoint = [clipX + clipWidth / 2, clipY + clipHeight / 2]; // 中心点 + const currentPoint = [currentX, currentY]; // 触摸点 + + if (currentPoint[0] <= mainPoint[0] && currentPoint[1] <= mainPoint[1]) { + corner = 3; // 左上 + } else if (currentPoint[0] >= mainPoint[0] && currentPoint[1] <= mainPoint[1]) { + corner = 2; // 右上 + } else if (currentPoint[0] <= mainPoint[0] && currentPoint[1] >= mainPoint[1]) { + corner = 4; // 左下 + } else if (currentPoint[0] >= mainPoint[0] && currentPoint[1] >= mainPoint[1]) { + corner = 1; // 右下 + } + return corner; +} + +/** + * 根据触摸事件更新裁剪框的尺寸和位置,并保持比例(如果需要) + * @param {number} clipWidth - 当前裁剪框的宽度。 + * @param {number} clipHeight - 当前裁剪框的高度。 + * @param {number} oldClipX - 当前裁剪框的 x 坐标。 + * @param {number} oldClipY - 当前裁剪框的 y 坐标。 + * @param {number} minWidth - 裁剪框允许的最小宽度。 + * @param {number} maxWidth - 裁剪框允许的最大宽度。 + * @param {number} minHeight - 裁剪框允许的最小高度。 + * @param {number} maxHeight - 裁剪框允许的最大高度。 + * @param {ClipperclipStart} clipStart - 包含裁剪框起始位置和拖动角的信息。 + * @param {boolean} isLockRatio - 是否保持裁剪框的宽高比。 + * @param {UniTouch} touch - 触摸事件对象,包含 clientX 和 clientY 属性。 + * @returns {number[] | null} 如果裁剪框尺寸或位置发生变化,则返回一个包含新宽度、新高度、新 x 坐标和新 y 坐标的数组;否则返回 null。 + */ +export function clipTouchMoveOfCalculate( + clipWidth : number, + clipHeight : number, + oldClipX : number, + oldClipY : number, + minWidth : number, + maxWidth : number, + minHeight : number, + maxHeight : number, + clipStart : ClipperclipStart, + isLockRatio : boolean, + touch : UniTouch) : number[] | null { + const clientX = touch.clientX; + // const clientY = touch.clientY; + + // 获取裁剪框新尺寸 + let width = clipWidth; + let height = clipHeight; + let clipX = oldClipX; + let clipY = oldClipY; + + // 更新尺寸并保持比例 + const updateSizeWithRatio = (newWidth : number) => { + width = newWidth; + height = isLockRatio ? width / (clipWidth / clipHeight) : height; + }; + // 检查并修正尺寸 + const checkAndCorrectSize = () : boolean => { + width = clamp(width, minWidth, maxWidth); + height = clamp(height, minHeight, maxHeight); + return width != clipWidth || height != clipHeight; + }; + // 根据拖动位置更新尺寸和位置 + switch (clipStart.corner) { + case 1: + updateSizeWithRatio(clipStart.width - clipStart.x + clientX); + if (!checkAndCorrectSize()) return null; + break; + case 2: + updateSizeWithRatio(clipStart.width - clipStart.x + clientX); + if (!checkAndCorrectSize()) return null; + clipY = clipStart.clipY - (height - clipStart.height); + break; + case 3: + updateSizeWithRatio(clipStart.x - clientX + clipStart.width); + if (!checkAndCorrectSize()) return null; + clipY = clipStart.clipY - (height - clipStart.height); + clipX = clipStart.clipX - (width - clipStart.width); + break; + case 4: + updateSizeWithRatio(clipStart.width + clipStart.x - clientX); + if (!checkAndCorrectSize()) return null; + clipX = clipStart.clipX - (width - clipStart.width); + break; + default: + return null; + } + + return [ + width, + height, + clipX, + clipY + ] +} + + + +/** + * 判断一个点是否在圆内(包括圆上) + * @param {Point} point - 要检查的点对象,包含 x 和 y 坐标。 + * @param {Point} center - 圆心的点对象,包含 x 和 y 坐标。 + * @param {number} [radius=10] - 圆的半径,默认值为 10。 + * @returns {boolean} 如果点在圆内(包括圆上),则返回 true,否则返回 false。 + */ +export function isPointInCircle(point : Point, center : Point, radius : number = 10) : boolean { + const dx = point.x - center.x; + const dy = point.y - center.y; + return Math.sqrt(dx * dx + dy * dy) <= radius; +} + +/** + * 获取坐标在矩形的哪个顶点 + * @param point 点的坐标 Point + * @param rectangle 多边形的 + * @param radius 顶点的半径 + * @returns 如果点在多边形顶点返回顶点下标 + */ +export function getPointPositionInRectangle( + point : Point, + rectangle : Rectangle, + radius : number = 30 + ) : number | null { + const topLeft : Point = { x: rectangle.x, y: rectangle.y }; + const topRight : Point = { x: rectangle.x + rectangle.width, y: rectangle.y }; + const bottomLeft : Point = { x: rectangle.x, y: rectangle.y + rectangle.height }; + const bottomRight : Point = { x: rectangle.x + rectangle.width, y: rectangle.y + rectangle.height }; + + const corners = [ + bottomRight, + topRight, + topLeft, + bottomLeft, + ]; + + for (let i = 0; i < corners.length; i++) { + if (isPointInCircle(point, corners[i], radius)) { + return i + 1; + } + } + + return null; +} + +/** + * 判断点是否在多边形内(使用射线法) + * @param point 点的坐标 Point + * @param vs 多边形的顶点数组,每个顶点是一个 Point 数组 + * @param start 起始索引(可选,默认为0) + * @param end 结束索引(可选,默认为vs.length) + * @returns 如果点在多边形内返回 true,否则返回 false + */ +function pointInPolygonNested(point: Point, vs: Point[], start?: number, end?: number): boolean { + const {x, y} = point; + let inside = false; + start = start ?? 0; + end = end ?? vs.length + const len = end - start; + for (let i = 0, j = len - 1; i < len; j = i++) { + const xi = vs[i + start].x; + const yi = vs[i + start].y; + const xj = vs[j + start].x; + const yj = vs[j + start].y; + const intersect = ((yi > y) !== (yj > y)) + && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + if (intersect) inside = !inside; + } + return inside; +} + +/** + * 判断一个点是否在旋转后的矩形内(包括边界) + * @param {Point} point - 要检查的点对象,包含 x 和 y 坐标。 + * @param {Rectangle} rect - 矩形对象,包含 x、y、width 和 height 属性。 + * @param {number} scale - 矩形的缩放比例。 + * @param {number} angle - 矩形旋转的角度(角度制)。 + * @returns {boolean} 如果点在旋转后的矩形内(包括边界),则返回 true,否则返回 false。 + */ +export function isPointInRotatedRectangle( + point : Point, + rect : Rectangle, + scale : number, + angle : number // 角度制 + ) : boolean { + // 将角度转换为弧度 + const radians = (angle * Math.PI) / 180; + + // 计算矩形的中心点 + const rectCenterX = rect.x + rect.width / 2; + const rectCenterY = rect.y + rect.height / 2; + + // 缩放矩形的宽高 + const scaledWidth = rect.width * scale; + const scaledHeight = rect.height * scale; + + // 旋转点坐标,基于矩形的中心点 + const cosAngle = Math.cos(-radians); + const sinAngle = Math.sin(-radians); + // const rotatedPoint : Point = { + // x: + // cosAngle * (point.x - rectCenterX) - + // sinAngle * (point.y - rectCenterY) + + // rectCenterX, + // y: + // sinAngle * (point.x - rectCenterX) + + // cosAngle * (point.y - rectCenterY) + + // rectCenterY + // }; + // 检查旋转后的点是否在未旋转的矩形内 + // 这里我们需要计算旋转后的矩形的四个顶点,然后判断点是否在这个四边形内 + const halfScaledWidth = scaledWidth / 2; + const halfScaledHeight = scaledHeight / 2; + + // 计算旋转后的矩形的四个顶点 + const topLeft : Point = { + x: rectCenterX - halfScaledWidth * cosAngle + halfScaledHeight * sinAngle, + y: rectCenterY - halfScaledWidth * sinAngle - halfScaledHeight * cosAngle + }; + const topRight : Point = { + x: rectCenterX + halfScaledWidth * cosAngle + halfScaledHeight * sinAngle, + y: rectCenterY + halfScaledWidth * sinAngle - halfScaledHeight * cosAngle + }; + const bottomRight : Point = { + x: rectCenterX + halfScaledWidth * cosAngle - halfScaledHeight * sinAngle, + y: rectCenterY + halfScaledWidth * sinAngle + halfScaledHeight * cosAngle + }; + const bottomLeft : Point = { + x: rectCenterX - halfScaledWidth * cosAngle - halfScaledHeight * sinAngle, + y: rectCenterY - halfScaledWidth * sinAngle + halfScaledHeight * cosAngle + }; + // 计算向量叉乘 + function crossMul(v1 : Point, v2 : Point) : number { + return v1.x * v2.y - v1.y * v2.x; + } + // 判断两条线段是否相交 + function checkCross(p1 : Point, p2 : Point, p3 : Point, p4 : Point) : boolean { + const v1 : Point = { x: p1.x - p3.x, y: p1.y - p3.y }; + const v2 : Point = { x: p2.x - p3.x, y: p2.y - p3.y }; + + const v3 : Point = { x: p4.x - p3.x, y: p4.y - p3.y }; + const v : number = crossMul(v1, v3) * crossMul(v2, v3); + + const v1_2 : Point = { x: p3.x - p1.x, y: p3.y - p1.y }; + const v2_2 : Point = { x: p4.x - p1.x, y: p4.y - p1.y }; + const v3_2 : Point = { x: p2.x - p1.x, y: p2.y - p1.y }; + return (v <= 0 && crossMul(v1_2, v3_2) * crossMul(v2_2, v3_2) <= 0); + } + + // 使用射线法判断点是否在四边形内 + function isPointInPolygon(point : Point, polygon : Point[]) : boolean { + // const p1 : Point = point; + // const p2 : Point = { x: 1000000000000, y: point.y }; + // let count = 0; + // // 对每条边都和射线作对比 + // for (let i = 0; i < polygon.length - 1; i++) { + // const p3 : Point = polygon[i]; + // const p4 : Point = polygon[i + 1]; + // if (checkCross(p1, p2, p3, p4)) { + // count++; + // } + // } + // console.log('count', count) + // const p3 : Point = polygon[polygon.length - 1]; + // const p4 : Point = polygon[0]; + // if (checkCross(p1, p2, p3, p4)) { + // count++; + // } + // return count % 2 == 0 ? false : true; + + + + let isInside = false; + for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + if ( + (polygon[i].y > point.y) != (polygon[j].y > point.y) && + point.x < + ((polygon[j].x - polygon[i].x) * (point.y - polygon[i].y)) / + (polygon[j].y - polygon[i].y) + + polygon[i].x + ) { + isInside = !isInside; + } + } + return isInside; + } + + return isPointInPolygon(point, [ + topLeft, + topRight, + bottomRight, + bottomLeft + ]); +} + + diff --git a/uni_modules/lime-clipper/components/lime-clipper/lime-clipper.uvue b/uni_modules/lime-clipper/components/lime-clipper/lime-clipper.uvue new file mode 100644 index 0000000..15d1b1b --- /dev/null +++ b/uni_modules/lime-clipper/components/lime-clipper/lime-clipper.uvue @@ -0,0 +1,179 @@ + + + + + + \ No newline at end of file diff --git a/uni_modules/lime-clipper/components/lime-clipper/lime-clipper.vue b/uni_modules/lime-clipper/components/lime-clipper/lime-clipper.vue new file mode 100644 index 0000000..347a0a1 --- /dev/null +++ b/uni_modules/lime-clipper/components/lime-clipper/lime-clipper.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/uni_modules/lime-clipper/package.json b/uni_modules/lime-clipper/package.json new file mode 100644 index 0000000..0352b9c --- /dev/null +++ b/uni_modules/lime-clipper/package.json @@ -0,0 +1,85 @@ +{ + "id": "lime-clipper", + "displayName": "lime-clipper 图片裁剪", + "version": "1.0.9", + "description": "一款自我感觉良好的图片裁剪插件, 兼容uniapp/uniappx", + "keywords": [ + "图片裁剪", + "缩放", + "旋转", + "拖动" + ], + "repository": "https://gitee.com/liangei/lime-clipper", + "engines": { + "HBuilderX": "^3.6.4" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "305716444" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "lime-style" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-uvue": "y", + "app-nvue": "n", + "app-harmony": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-clipper/readme.md b/uni_modules/lime-clipper/readme.md new file mode 100644 index 0000000..ed09ab1 --- /dev/null +++ b/uni_modules/lime-clipper/readme.md @@ -0,0 +1,237 @@ +# Clipper 图片裁剪 +> 图片裁剪,可用于图片头像等裁剪处理 + +## 平台兼容 + +| H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | App | +| --- | ---------- | ------------ | ---------- | ---------- | --------- | --- | +| √ | √ | √ | 未测 | √ | √ | √ | + +## 安装 +插件市场导入即可 + +## 文档 +[clipper](https://limex.qcoon.cn/components/clipper.html) + +## 代码演示 +### 基本用法 +`@success` 事件点击 👉 **确定** 后会返回生成的图片信息,包含 `url`、`width`、`height` + +```html + + + +``` + +```js +export default { + data() { + return { + show: false, + url: '', + } + } +} +``` + + +### 传入图片 +`image-url`可传入**相对路径**、**临时路径**、**本地路径**、**网络图片**
+ +* **当为网络地址时** +* H5:👉 需要解决跨域问题。
+* 小程序:👉 需要配置 downloadFile 域名
+ + +```html + + + +``` + +```js +export default { + data() { + return { + imageUrl: 'https://img12.360buyimg.com/pop/s1180x940_jfs/t1/97205/26/1142/87801/5dbac55aEf795d962/48a4d7a63ff80b8b.jpg', + show: false, + url: '', + } + } +} +``` + + +### 确定按钮颜色 + +```html + +``` + + + +### 使用插槽 +共五个插槽 `cancel` 取消按钮、 `photo` 选择图片按钮、 `rotate` 旋转按钮、 `confirm` 确定按钮和默认插槽。 + +```html + + + + 取消 + 选择图片 + 旋转 + 确定 + + + + 显示取消按钮{{isShowCancelBtn}} + + + + 显示选择图片按钮 + + + + 显示旋转按钮 + + + + 显示确定按钮 + + + + 锁定裁剪框宽度 + + + + 锁定裁剪框高度 + + + + 锁定裁剪框比例 + + + + 限制移动范围 + + + + 禁止缩放 + + + + 禁止旋转 + + + + + +``` + +```js +export default { + + data() { + return { + show: false, + url: '', + isLockWidth: false, + isLockHeight: false, + isLockRatio: true, + isLimitMove: false, + isDisableScale: false, + isDisableRotate: false, + isShowCancelBtn: true, + isShowPhotoBtn: true, + isShowRotateBtn: true, + isShowConfirmBtn: true + } + } +} +``` + +### 查看示例 +- 导入后直接使用这个标签查看演示效果 + +```html + + +``` + + +### 插件标签 +- 默认 l-clipper 为 component +- 默认 lime-clipper 为 demo + + + + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | +| ------------- | ------------ | ---------------- | ------------ | +| image-url | 图片路径 | string | | +| quality | 图片的质量,取值范围为 [0, 1],不在范围内时当作1处理 | number | `1` | +| source | `{album: '从相册中选择'}`key为图片来源类型,value为选项说明 | Object | | +| width | 裁剪框宽度,单位为 `rpx` | number | `400` | +| height | 裁剪框高度 | number | `400` | +| min-width | 裁剪框最小宽度 | number | `200` | +| min-height |裁剪框最小高度 | number | `200` | +| max-width | 裁剪框最大宽度 | number | `600` | +| max-height | 裁剪框最大宽度 | number | `600` | +| min-ratio | 图片最小缩放比 | number | `0.5` | +| max-ratio | 图片最大缩放比 | number | `2` | +| rotate-angle | 旋转按钮每次旋转的角度 | number | `90` | +| scale-ratio | 生成图片相对于裁剪框的比例, **比例越高生成图片越清晰** | number | `1` | +| is-lock-width | 是否锁定裁剪框宽度 | boolean | `false` | +| is-lock-height | 是否锁定裁剪框高度上 | boolean | `false` | +| is-lock-ratio | 是否锁定裁剪框比例 | boolean | `true` | +| is-disable-scale | 是否禁止缩放 | boolean | `false` | +| is-disable-rotate | 是否禁止旋转 | boolean | `false` | +| is-limit-move | 是否限制移动范围 | boolean | `false` | +| is-show-photo-btn | 是否显示选择图片按钮 | boolean | `true` | +| is-show-rotate-btn | 是否显示转按钮 | boolean | `true` | +| is-show-confirm-btn | 是否显示确定按钮 | boolean | `true` | +| is-show-cancel-btn | 是否显示关闭按钮 | boolean | `true` | +| confirm-bg-color | 确定按钮背景色 | string | `` | + + + +### 事件 Events + +| 事件名 | 说明 | 回调 | +| ------- | ------------ | -------------- | +| success | 生成图片成功 | {`width`, `height`, `url`} | +| fail | 生成图片失败 | `error` | +| cancel | 关闭 | `false` | +| ready | 图片加载完成 | {`width`, `height`, `path`, `orientation`, `type`} | +| change | 图片大小改变时触发 | {`width`, `height`} | +| rotate | 图片旋转时触发 | `angle` | + +## 常见问题 +- 1、H5端使用网络图片需要解决跨域问题。 +- 2、小程序使用网络图片需要去公众平台增加下载白名单!二级域名也需要配! +- 3、H5端生成图片是base64,有时显示只有一半可以使用原生标签`` +- 4、IOS APP 请勿使用HBX2.9.3.20201014的版本!这个版本无法生成图片。 +- 5、APP端无成功反馈、也无失败反馈时,请更新基座和HBX。 + + +## 打赏 +如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。 +![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) +![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) \ No newline at end of file diff --git a/uni_modules/lime-clipper/static/photo.svg b/uni_modules/lime-clipper/static/photo.svg new file mode 100644 index 0000000..7b4b590 --- /dev/null +++ b/uni_modules/lime-clipper/static/photo.svg @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/uni_modules/lime-clipper/static/rotate.svg b/uni_modules/lime-clipper/static/rotate.svg new file mode 100644 index 0000000..0143706 --- /dev/null +++ b/uni_modules/lime-clipper/static/rotate.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/uni_modules/lime-style/changelog.md b/uni_modules/lime-style/changelog.md new file mode 100644 index 0000000..417e06e --- /dev/null +++ b/uni_modules/lime-style/changelog.md @@ -0,0 +1,18 @@ +## 0.0.9(2025-01-16) +- feat: 更新 +## 0.0.8(2024-12-15) +- fix: 修复vue2 不支持rgba(0,0,0,1%) +## 0.0.7(2024-12-11) +- feat: 增加除法 +## 0.0.6(2024-12-04) +- fix: 除法问题 +## 0.0.5(2024-11-20) +- feat: 增加flex +## 0.0.4(2024-11-20) +- feat: 增加flex +## 0.0.3(2024-09-30) +- fix: 由于 vue2 h5 css变量不支持rpx,故转成px +## 0.0.2(2024-09-23) +- fix: 修复 vue2 math.div 问题 +## 0.0.1(2024-09-02) +- init diff --git a/uni_modules/lime-style/color/colorPalette.scss b/uni_modules/lime-style/color/colorPalette.scss new file mode 100644 index 0000000..f391408 --- /dev/null +++ b/uni_modules/lime-style/color/colorPalette.scss @@ -0,0 +1,186 @@ +// #ifdef VUE3 +@use "sass:math"; +// #endif + + + +$hueStep: 2; +$saturationStep1: 0.16; +$saturationStep2: 0.05; +$brightnessStep1: 0.05; +$brightnessStep2: 0.15; +$lightColorCount: 5; +$darkColorCount: 4; + +$darkColorMap: ( + (index: 7, opacity: 0.15), + (index: 6, opacity: 0.25), + (index: 5, opacity: 0.3), + (index: 5, opacity: 0.45), + (index: 5, opacity: 0.65), + (index: 5, opacity: 0.85), + (index: 4, opacity: 0.9), + (index: 3, opacity: 0.95), + (index: 2, opacity: 0.97), + (index: 1, opacity: 0.98) +); + +@function div($dividend, $divisor) { + // #ifdef VUE3 + @return math.div($dividend, $divisor); + // #endif + // #ifndef VUE3 + @return $dividend / $divisor; + // #endif +} + +// 求一个数的n次幂 +@function pow($number, $n) { + $ret: 1; + @if $n >= 0 { + @for $i from 1 through $n { + $ret: $ret * $number; + } + } @else { + @for $i from $n to 0 { + $ret: $ret / $number; + } + } + @return $ret; +} + +// 浮点数保留小数位 +@function toFixed($float, $digits: 2) { + $pow: pow(10, $digits); + @return div(round($float * $pow) , $pow); +} + + +// 根据颜色获取对应的hsv,在tinycolor中首先进行了归一化处理,这里没有 +// 返回的结果h是0~360,代表的是色相的角度, sv的范围0-1 +@function rbgToHsv($color) { + $r: red($color); + $g: green($color); + $b: blue($color); + $max: max($r, $g, $b); + $min: min($r, $g, $b); + $diff: $max - $min; + $h: 0; + + @if $max == $min { + $h: 0 + } @else if $max == $r { + $h: div(60 * ($g - $b) , $diff) + if($g >= $b, 0, 360); + } @else if $max == $g { + $h: 60 * div($b - $r , $diff) + 120 //($b - $r) / $diff + 120; + } @else if $max == $b{ + $h: div(60 * ($r - $g) , $diff) + 240; + } + + $s: if($max == 0, 0, div($diff , $max)); + $v: div($max , 255); + + @return $h, $s, $v; +} +// hsv转化成rgb,借鉴了tinycolor的做法,避免通过$th的值判断来获取对应的rgb的取值 +// $t1~4的计算目前不清楚为什么这样做 +@function hsvTorgb($h, $s, $v) { + $th: floor(div($h , 60)); + $t1: div($h , 60) - $th; + $t2: $v * (1 - $s); + $t3: $v * (1 - $t1 * $s); + $t4: $v * (1 - (1 - $t1) * $s); + $i: $th + 1; + $r: nth(($v, $t3, $t2, $t2, $t4, $v), $i); + $g: nth(($t4, $v, $v, $t3, $t2, $t2), $i); + $b: nth(($t2, $t2, $t4, $v, $v, $t3), $i); + + @return rgb($r * 255, $g * 255, $b * 255); +} + +//转换色相 +@function getHue($h, $i, $isLight) { + $hue: null; + @if $h >= 60 and $h <= 240 { + $hue: if($isLight, $h - $hueStep * $i, $h + $hueStep * $i); + } @else { + $hue: if($isLight, $h + $hueStep * $i, $h - $hueStep * $i); + } + + $hue: ($hue + 360) % 360; + + @return round($hue); +} + +// 转换饱和度 +@function getSaturation($s, $i, $isLight) { + $saturation: null; + @if $isLight { + $saturation: $s - $saturationStep1 * $i; + } @else if $i == $darkColorCount { + $saturation: $s + $saturationStep1; + } @else { + $saturation: $s + $saturationStep2 * $i; + } + $saturation: min($saturation, 1); + + @if $isLight and $i == $lightColorCount and $saturation > 0.1 { + $saturation: 0.1; + } + + $saturation: max($saturation, 0.06); + + @return toFixed($saturation, 2); +} + +// 转换明度 +@function getValue($v, $i, $isLight) { + $value: min( + if( + $isLight, + $v + $brightnessStep1 * $i, + $v - $brightnessStep2 * $i + ), + 1); + + @return toFixed($value, 2); +} + + +@function mix($rgb1, $rgb2, $amount){ + $p: $amount; + $r: (red($rgb2) - red($rgb1)) * $p + red($rgb1); + $g: (green($rgb2) - green($rgb1)) * $p + green($rgb1); + $b: (blue($rgb2) - blue($rgb1)) * $p + blue($rgb1); + + @return rgb($r, $g, $b) +} + +// 根据颜色和对应的色板位置,计算出对应的色板颜色 +@function genColor($color, $index, $theme: 'default' , $bgColor: #141414) { + $isLight: if($index <= 6, true, false); + $hsv: rbgToHsv($color); + //这里将i转换成以主色为中心,两侧的i值逐渐增大 + $i: if($isLight, $lightColorCount + 1 - $index, $index - $lightColorCount - 1); + + @if $theme == 'dark' { + $item: nth($darkColorMap, $index); + $index2: map-get($item, index); + $opacity: map-get($item, opacity); + + $rgb: genColor($color, $index2 + 1); + + // @return $rgb; + @return mix( + $bgColor, + $rgb, + $opacity + ) + } + + @return hsvTorgb( + getHue(nth($hsv, 1), $i, $isLight), + getSaturation(nth($hsv, 2), $i, $isLight), + getValue(nth($hsv, 3), $i, $isLight) + ); +} \ No newline at end of file diff --git a/uni_modules/lime-style/color/colors.scss b/uni_modules/lime-style/color/colors.scss new file mode 100644 index 0000000..10742fd --- /dev/null +++ b/uni_modules/lime-style/color/colors.scss @@ -0,0 +1,19 @@ +// 品牌色-主色 +$primary-color: #3283ff!default; +// 错误色 +$error-color: #FF4D4F!default; +// 警告色 +$warning-color: #ffb400!default;// #FF7D00!default; +// 信息色 +$info-color: $primary-color!default; +// 成功色 +$success-color: #34c471!default; + +$blue: #3283ff!default; +$red: #FF4D4F!default; +$orange: #ffb400!default; +// $yellow: #FADC19!default; +$yellow: #fcd53f!default; +$green: #34c471 !default; +$white: #fff; +$black: #000; diff --git a/uni_modules/lime-style/functions.scss b/uni_modules/lime-style/functions.scss new file mode 100644 index 0000000..acfc773 --- /dev/null +++ b/uni_modules/lime-style/functions.scss @@ -0,0 +1,11 @@ +// #ifdef VUE3 +@use "sass:math"; +// #endif +@function divide($dividend, $divisor) { + // #ifdef VUE3 + @return math.div($dividend, $divisor); + // #endif + // #ifndef VUE3 + @return $dividend / $divisor; + // #endif +} diff --git a/uni_modules/lime-style/index.scss b/uni_modules/lime-style/index.scss new file mode 100644 index 0000000..9ea8d8b --- /dev/null +++ b/uni_modules/lime-style/index.scss @@ -0,0 +1,6 @@ +@import './theme/default'; +@import './var'; +// @import './mixins/ellipsis'; +// @import './mixins/hairline'; +@import './mixins/create'; +// @import './mixins/useTheme'; \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/create.scss b/uni_modules/lime-style/mixins/create.scss new file mode 100644 index 0000000..2f68499 --- /dev/null +++ b/uni_modules/lime-style/mixins/create.scss @@ -0,0 +1,154 @@ +// #ifdef VUE3 +@use "sass:math"; +// #endif +@function div($dividend, $divisor) { + // #ifdef VUE3 + @return math.div($dividend, $divisor); + // #endif + // #ifndef VUE3 + @return $dividend / $divisor; + // #endif +} + + +@function to-number($string) { + $result: 0; + $is-negative: str-slice($string, 1, 1) == '-'; + $length: str-length($string); + + @if $is-negative { + $string: str-slice($string, 2); + $length: $length - 1; + } + + $decimal-index: str-index($string, '.'); + + @if $decimal-index { + $decimal-str: str-slice($string, $decimal-index + 1); + $decimal-length: str-length($decimal-str); + $length: $length - $decimal-length - 1; + $string: str-slice($string, 1, $decimal-index - 1); + + $result: to-number($decimal-str) * pow(10, $decimal-length * -1); + } + $numbers:( + '0': 0, + '1': 1, + '2': 2, + '3': 3, + '4': 4, + '5': 5, + '6': 6, + '7': 7, + '8': 8, + '9': 9, + ); + + @for $i from 1 through $length { + $key: str-slice($string, $i, $i); + $number: map-get($numbers, $key); + $digit: if($number == 0, 0, if($length - $i > 0, pow(10, $length - $i), 0)); + $result: $result + $digit * $number + if($length - $i == 0, $number, 0); + } + @return if($is-negative, $result * -1, $result) ; +} + +// 由于vue2 h5和app不支持动态rpx 故转成px +@function rpx-to-px($rpx-string) { + @if type-of($rpx-string) == list { + $new-list: (); + @each $value in $rpx-string { + $v: $value + ''; + $start: str-index($v, 'rpx'); + @if $start { + $new-list: append($new-list, rpx-to-px($v)); + } @else { + $new-list: append($new-list, $value); + } + } + @return $new-list; + } + + @if type-of($rpx-string) == number and comparable($rpx-string, 1rpx) { + @return rpx-to-px($rpx-string + ''); + } + + @if type-of($rpx-string) != string { + @return $rpx-string; + } + $start: str-index($rpx-string, 'rpx'); + $number-map: ( + '-': 1, + '0': 1, + '1': 1, + '2': 1, + '3': 1, + '4': 1, + '5': 1, + '6': 1, + '7': 1, + '8': 1, + '9': 1, + ); + @if not $start { + @return $rpx-string; + } + $result: ''; + @while $start { + // 获取 'rpx' 前的数字 + $number-end: $start - 1; + $number-start: $number-end; + @while $number-start > 0 and map-get($number-map, str-slice($rpx-string, $number-start, $number-start)) ==1 { + $number-start: $number-start - 1; + } + // 提取数字部分 + $number: to-number(str-slice($rpx-string, $number-start + 1, $number-end)); + + // 转换 'rpx' 到 'px' + // $px-value: ($number / 2) + 'px'; + $px-value: div($number, 2) + 'px'; + $result: $result + str-slice($rpx-string, 0, $number-start) + $px-value; + + // 更新字符串和起始位置 + $rpx-string: str-slice($rpx-string, $start + 3); + $start: str-index($rpx-string, 'rpx'); + } + + @return $result + $rpx-string; +} + +@function create-var($name, $values...) { + // 将不定数量的参数转换为列表 + $value-list: $values; + $css-value: null; + @if length($value-list) == 0 { + @warn "The list must have at least 1 values."; + } @else { + // 初始化CSS变量的值为列表中的第一个值 + /* #ifdef VUE2 */ + $css-value: rpx-to-px(nth($value-list, 1)); + /* #endif */ + /* #ifndef VUE2 */ + $css-value: nth($value-list, 1); + /* #endif */ + } + // 检查列表长度是否大于等于2 + @if length($value-list) >= 2 { + // 使用@for循环遍历剩余的值,并构建CSS变量的完整值 + @for $i from 2 through length($value-list) { + /* #ifdef VUE2 */ + $css-value: $css-value + ", " + rpx-to-px(nth($value-list, $i)); + /* #endif */ + /* #ifndef VUE2 */ + $css-value: $css-value + ", " + nth($value-list, $i); + /* #endif */ + } + } + + /* #ifndef APP-NVUE || APP-ANDROID || APP-IOS */ + @return var(--l-#{$name}, #{$css-value}); + /* #endif */ + /* #ifdef APP-NVUE || APP-ANDROID || APP-IOS */ + @return $css-value; + /* #endif */ +} diff --git a/uni_modules/lime-style/mixins/ellipsis.scss b/uni_modules/lime-style/mixins/ellipsis.scss new file mode 100644 index 0000000..7568616 --- /dev/null +++ b/uni_modules/lime-style/mixins/ellipsis.scss @@ -0,0 +1,22 @@ +@mixin ellipsis { + // overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + /* #ifndef APP-ANDROID || APP-IOS || APP-NVUE */ + word-wrap: normal; + /* #endif */ +} + + +@mixin ellipsisLn($line) { + // overflow: hidden; + text-overflow: ellipsis; + /* #ifdef APP-ANDROID || APP-IOS || APP-NVUE */ + lines: $line; + /* #endif */ + /* #ifndef APP-ANDROID || APP-IOS || APP-NVUE */ + -webkit-line-clamp: $line; + display: -webkit-box; + -webkit-box-orient: vertical; + /* #endif */ +} \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/flex.scss b/uni_modules/lime-style/mixins/flex.scss new file mode 100644 index 0000000..a1f36ef --- /dev/null +++ b/uni_modules/lime-style/mixins/flex.scss @@ -0,0 +1,13 @@ +@mixin flex { + /* #ifndef UNI-APP-X */ + display: flex; + /* #endif */ +} +@mixin flex-column { + /* #ifndef UNI-APP-X */ + flex-direction: column; + /* #endif */ +} +@mixin flex-row { + flex-direction: row; +} diff --git a/uni_modules/lime-style/mixins/hairline.scss b/uni_modules/lime-style/mixins/hairline.scss new file mode 100644 index 0000000..fcdf623 --- /dev/null +++ b/uni_modules/lime-style/mixins/hairline.scss @@ -0,0 +1,66 @@ +// @import '../theme/default.scss'; + +@mixin hairline-base { + position: absolute; + box-sizing: border-box; + content: ' '; + pointer-events: none; + transform-origin: center; /* cover wechat button:after default transforn-origin */ +} + +@mixin hairline($color: $border-color-2) { + @include hairline-base; + top: -50%; + right: -50%; + bottom: -50%; + left: -50%; + border: 1px solid $color; + transform: scale(.5); +} + +@mixin hairline-top($color: $border-color-1, $left: 0, $right: 0) { + @include hairline-base; + top: 0; + right: $right; + left: $left; + border-top: 1px solid $color; + transform: scaleY(0.5); +} + +@mixin hairline-bottom($color: $border-color-1, $left: 0, $right: 0) { + @include hairline-base; + right: $right; + bottom: 0; + left: $left; + border-bottom: 1px solid $color; + transform: scaleY(0.5); +} + +@mixin hairline-left($color: $border-bolor-1) { + @include hairline-base; + top: 0; + bottom: 0; + left: 0; + border-left: 1px solid $color; + transform: scaleX(.5); +} + +@mixin hairline-right($color: $border-bolor-1) { + @include hairline-base; + top: 0; + bottom: 0; + right: 0; + border-right: 1px solid $color; + transform: scaleX(.5); +} + +@mixin border { + /* #ifndef APP-ANDROID || APP-IOS */ + &:after { + @content; + } + /* #endif */ + /* #ifdef APP-ANDROID || APP-IOS */ + @content; + /* #endif */ +} \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/platform.scss b/uni_modules/lime-style/mixins/platform.scss new file mode 100644 index 0000000..3c9946f --- /dev/null +++ b/uni_modules/lime-style/mixins/platform.scss @@ -0,0 +1,17 @@ +/* #ifdef APP-NVUE || APP-ANDROID || APP-IOS */ +$is-app: true; +/* #endif */ +/* #ifndef APP-NVUE || APP-ANDROID || APP-IOS */ +$is-app: false; +/* #endif */ + +@mixin is-app { + @if $is-app { + @content; + } +} +@mixin not-app { + @if not($is-app) { + @content; + } +} diff --git a/uni_modules/lime-style/mixins/useTheme.scss b/uni_modules/lime-style/mixins/useTheme.scss new file mode 100644 index 0000000..53e00f7 --- /dev/null +++ b/uni_modules/lime-style/mixins/useTheme.scss @@ -0,0 +1,37 @@ +$limeThemes: light, dark; +$theme: light; + +@mixin use-theme($mode: null) { + @if $mode != null { + /* #ifndef APP-ANDROID || APP-IOS || APP-NVUE */ + @media (prefers-color-scheme: $mode) { + @content; + } + /* #endif */ + /* #ifdef APP-ANDROID || APP-IOS || APP-NVUE */ + &.#{$mode} { + @content; + } + /* #endif */ + } @else { + @each $mode in $limeThemes { + $theme: $mode !global; + /* #ifndef APP-ANDROID || APP-IOS || APP-NVUE */ + @media (prefers-color-scheme: $mode) { + @content; + } + /* #endif */ + + /* #ifdef APP-ANDROID || APP-IOS || APP-NVUE */ + &.#{$mode} { + @content; + } + /* #endif */ + } + } + +} + +@function get-var($themes, $key) { + @return map-get($themes, $key) +} diff --git a/uni_modules/lime-style/mixins/utilities.scss b/uni_modules/lime-style/mixins/utilities.scss new file mode 100644 index 0000000..eec1fb1 --- /dev/null +++ b/uni_modules/lime-style/mixins/utilities.scss @@ -0,0 +1,7 @@ +@import './flex'; + +@mixin resize-none { + /* #ifndef APP-IOS || APP-ANDROID */ + resize: none; + /* #endif */ +} diff --git a/uni_modules/lime-style/package.json b/uni_modules/lime-style/package.json new file mode 100644 index 0000000..ba7df3e --- /dev/null +++ b/uni_modules/lime-style/package.json @@ -0,0 +1,84 @@ +{ + "id": "lime-style", + "displayName": "lime-style", + "version": "0.0.9", + "description": "lime-style", + "keywords": [ + "lime-style" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "sdk-js", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "y" + }, + "client": { + "Vue": { + "vue2": "u", + "vue3": "u" + }, + "App": { + "app-vue": "u", + "app-nvue": "u", + "app-uvue": "u", + "app-harmony": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-style/readme.md b/uni_modules/lime-style/readme.md new file mode 100644 index 0000000..8a55268 --- /dev/null +++ b/uni_modules/lime-style/readme.md @@ -0,0 +1 @@ +# lime-style \ No newline at end of file diff --git a/uni_modules/lime-style/theme/dark.scss b/uni_modules/lime-style/theme/dark.scss new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/lime-style/theme/default.scss b/uni_modules/lime-style/theme/default.scss new file mode 100644 index 0000000..a4de080 --- /dev/null +++ b/uni_modules/lime-style/theme/default.scss @@ -0,0 +1,147 @@ +@import '../mixins/create.scss'; +@import '../color/colorPalette.scss'; +@import '../color/colors.scss'; + +$blue-1: genColor($blue, 1); +$blue-2: genColor($blue, 2); +$blue-3: genColor($blue, 3); +$blue-4: genColor($blue, 4); +$blue-5: genColor($blue, 5); +$blue-6: $blue; +$blue-7: genColor($blue, 7); +$blue-8: genColor($blue, 8); +$blue-9: genColor($blue, 9); +$blue-10: genColor($blue, 10); + +$primary-color-1: create-var('primary-color-1', genColor($primary-color, 1)); // 浅色/白底悬浮 +$primary-color-2: create-var('primary-color-2', genColor($primary-color, 2)); // 文字禁用 +$primary-color-3: create-var('primary-color-3', genColor($primary-color, 3)); // 一般禁用 +$primary-color-4: create-var('primary-color-4', genColor($primary-color, 4)); // 特殊场景 禁用 +$primary-color-5: create-var('primary-color-5', genColor($primary-color, 5)); // 悬浮 +$primary-color-6: create-var('primary-color-6', $primary-color); // 常规 +$primary-color-7: create-var('primary-color-7', genColor($primary-color, 7)); // 点击 +$primary-color-8: create-var('primary-color-8', genColor($primary-color, 8)); // +$primary-color-9: create-var('primary-color-9', genColor($primary-color, 9)); +$primary-color-10: create-var('primary-color-10', genColor($primary-color, 10)); + +$error-color-1: create-var('error-color-1', genColor($error-color, 1)); +$error-color-2: create-var('error-color-2', genColor($error-color, 2)); +$error-color-3: create-var('error-color-3', genColor($error-color, 3)); +$error-color-4: create-var('error-color-4', genColor($error-color, 4)); +$error-color-5: create-var('error-color-5', genColor($error-color, 5)); +$error-color-6: create-var('error-color-6', $error-color); +$error-color-7: create-var('error-color-7', genColor($error-color, 7)); +$error-color-8: create-var('error-color-8', genColor($error-color, 8)); +$error-color-9: create-var('error-color-9', genColor($error-color, 9)); +$error-color-10: create-var('error-color-10', genColor($error-color, 10)); + +$warning-color-1: create-var('warning-color-1', genColor($warning-color, 1)); +$warning-color-2: create-var('warning-color-2', genColor($warning-color, 2)); +$warning-color-3: create-var('warning-color-3', genColor($warning-color, 3)); +$warning-color-4: create-var('warning-color-4', genColor($warning-color, 4)); +$warning-color-5: create-var('warning-color-5', genColor($warning-color, 5)); +$warning-color-6: create-var('warning-color-6', $warning-color); +$warning-color-7: create-var('warning-color-7', genColor($warning-color, 7)); +$warning-color-8: create-var('warning-color-8', genColor($warning-color, 8)); +$warning-color-9: create-var('warning-color-9', genColor($warning-color, 9)); +$warning-color-10: create-var('warning-color-10', genColor($warning-color, 10)); + +$success-color-1: create-var('success-color-1', genColor($success-color, 1)); // 浅色/白底悬浮 +$success-color-2: create-var('success-color-2', genColor($success-color, 2)); // 文字禁用 +$success-color-3: create-var('success-color-3', genColor($success-color, 3)); // 一般禁用 +$success-color-4: create-var('success-color-4', genColor($success-color, 4)); // 特殊场景 +$success-color-5: create-var('success-color-5', genColor($success-color, 5)); // 悬浮 +$success-color-6: create-var('success-color-6', $success-color); // 常规 +$success-color-7: create-var('success-color-7', genColor($success-color, 7)); // 点击 +$success-color-8: create-var('success-color-8', genColor($success-color, 8)); +$success-color-9: create-var('success-color-9', genColor($success-color, 9)); +$success-color-10: create-var('success-color-10', genColor($success-color, 10)); + +$gray-1: create-var('gray-1', #f3f3f3); +$gray-2: create-var('gray-2', #eeeeee); +$gray-3: create-var('gray-3', #e7e7e7); +$gray-4: create-var('gray-4', #dcdcdc); +$gray-5: create-var('gray-5', #c5c5c5); +$gray-6: create-var('gray-6', #a6a6a6); +$gray-7: create-var('gray-7', #8b8b8b); +$gray-8: create-var('gray-8', #777777); +$gray-9: create-var('gray-9', #5e5e5e); +$gray-10: create-var('gray-10', #4b4b4b); +$gray-11: create-var('gray-11', #383838); +$gray-12: create-var('gray-12', #2c2c2c); +$gray-13: create-var('gray-13', #242424); +$gray-14: create-var('gray-14', #181818); + +$text-color-1: create-var('text-color-1', rgba(0,0,0,0.88)); //primary +$text-color-2: create-var('text-color-2', rgba(0,0,0,0.65)); //secondary +$text-color-3: create-var('text-color-3', rgba(0,0,0,0.45)); //placeholder +$text-color-4: create-var('text-color-4', rgba(0,0,0,0.25)); //disabled + +// 容器 +$bg-color-page: create-var('bg-color-page', #f5f5f5); // 整体背景色 布局 +$bg-color-container: create-var('bg-color-container', #fff); // 一级容器背景 组件 +$bg-color-elevated: create-var('bg-color-elevated', #fff); // 二级容器背景 浮层 +$bg-color-spotlight: create-var('bg-color-spotlight', rgba(0, 0, 0, 0.85)); // 引起注意的如 Tooltip +$bg-color-mask: create-var('bg-color-mask', rgba(0, 0, 0, 0.45)); // 蒙层 + +// 填充 +$fill-1: create-var('fill-1', rgba(0, 0, 0, 0.15)); +$fill-2: create-var('fill-2', rgba(0, 0, 0, 0.06)); +$fill-3: create-var('fill-3', rgba(0, 0, 0, 0.04)); +$fill-4: create-var('fill-4', rgba(0, 0, 0, 0.02)); + +// 描边 +$border-color-1: create-var('border-color-1', $gray-2); // 浅色 +$border-color-2: create-var('border-color-2', $gray-3); // 一般 +$border-color-3: create-var('border-color-3', $gray-4); // 深/悬浮 +$border-color-4: create-var('border-color-4', $gray-6); // 重/按钮描边 + + +$alpha-disabled: create-var('alpha-disabled', 0.5); +$alpha-pressed: create-var('alpha-pressed', 0.07); + +// 投影 +/* #ifndef APP-ANDROID || APP-IOS */ +$shadow-1: create-var( + shadow-1, + 0 1px 10px rgba(0, 0, 0, 0.05), + 0 4px 5px rgba(0, 0, 0, 0.08), + 0 2px 4px -1px rgba(0, 0, 0, 0.12) +); + +$shadow-2: create-var( + 'shadow-2', + 0 1px 10px rgba(0, 0, 0, 0.05), + 0 4px 5px rgba(0, 0, 0, 0.08), + 0 2px 4px -1px rgba(0, 0, 0, 0.12) +); +$shadow-3: create-var( + shadow-3, + 0 6px 30px 5px rgba(0, 0, 0, 0.05), + 0 16px 24px 2px rgba(0, 0, 0, 0.04), + 0 8px 10px -5px rgba(0, 0, 0, 0.08) +); + +/* #endif */ +/* #ifdef APP-ANDROID || APP-IOS */ +$shadow-1: create-var( + shadow-1, + 0 1px 10px rgba(0, 0, 0, 0.05) +); +$shadow-2: create-var( + 'shadow-2', + 0 1px 10px rgba(0, 0, 0, 0.05) +); +$shadow-3: create-var( + shadow-3, + 0 6px 30px 5px rgba(0, 0, 0, 0.05) +); +/* #endif */ +$shadow-4: create-var(shadow-4, 0 2px 8px 0 rgba(0, 0, 0, .06)); + +// 基础颜色的扩展 用于 聚焦 / 禁用 / 点击 等状态 +$primary-color-focus: create-var('primary-color-focus', $primary-color-1);// focus态,包括鼠标和键盘 +$primary-color-active: create-var('primary-color-active', $primary-color-8);// 点击态 +$primary-color-disabled: create-var('primary-color-disabled', $primary-color-3); +$primary-color-light: create-var('primary-color-light', $primary-color-1); // 浅色的选中态 +$primary-color-light-active: create-var('primary-color-light-active', $primary-color-2); // 浅色的选中态 \ No newline at end of file diff --git a/uni_modules/lime-style/var.scss b/uni_modules/lime-style/var.scss new file mode 100644 index 0000000..ffd8caa --- /dev/null +++ b/uni_modules/lime-style/var.scss @@ -0,0 +1,66 @@ +@import './mixins/create.scss'; +// 公共前缀 +$prefix: l; + +// Spacer +$spacer: create-var('spacer', 32rpx); // base +$spacer-tn: create-var('spacer-tn', 8rpx); // Tiny +$spacer-xs: create-var('spacer-xs', 16rpx); // Extra Small +$spacer-sm: create-var('spacer-sm', 24rpx); // Small +$spacer-md: create-var('spacer-md', 48rpx); // Medium +$spacer-lg: create-var('spacer-lg', 64rpx); // Large +$spacer-xl: create-var('spacer-xl', 96rpx); // Extra Large +$spacer-hg: create-var('spacer-hg', 160rpx); // Huge //Ultra Big + +// Font +$font-size: create-var('font-size', 28rpx); +$font-size-xs: create-var('font-size-xs', 20rpx); +$font-size-sm: create-var('font-size-sm', 24rpx); +$font-size-md: create-var('font-size-md', 32rpx); +$font-size-lg: create-var('font-size-lg', 40rpx); +$font-size-xl: create-var('font-size-xl', 72rpx); + +$font-size-heading-1: create-var('font-size-heading-1', 76rpx); +$font-size-heading-2: create-var('font-size-heading-2', 60rpx); +$font-size-heading-3: create-var('font-size-heading-3', 48rpx); +$font-size-heading-4: create-var('font-size-heading-4', 40rpx); +$font-size-heading-5: create-var('font-size-heading-5', 32rpx); + + +$font-family: create-var('font-family', PingFang SC, Microsoft YaHei, Arial Regular); // 字体-磅数-常规 +$font-family-md: create-var('font-family-md', PingFang SC, Microsoft YaHei, Arial Medium); // 字体-磅数-粗体 + + +// 行高 +$line-height: create-var('line-height', 1.5714285714285714); +$line-height-sm: create-var('line-height-sm', 1.6666666666666667); +$line-height-md: create-var('line-height-lg', 1.5); +$line-height-lg: create-var('line-height-lg', 1.4); + +$line-height-heading-1: create-var('line-height-heading-1', 1.2105263157894737); +$line-height-heading-2: create-var('line-height-heading-2', 1.2666666666666666); +$line-height-heading-3: create-var('line-height-heading-3', 1.3333333333333333); +$line-height-heading-4: create-var('line-height-heading-4', 1.4); +$line-height-heading-5: create-var('line-height-heading-5', 1.5); + + +// 圆角 +$border-radius: create-var('border-radius', 12rpx); +$border-radius-xs: create-var('border-radius-xs', 4rpx); +$border-radius-sm: create-var('border-radius-sm', 6rpx); +$border-radius-md: create-var('border-radius-md', 12rpx); +$border-radius-lg: create-var('border-radius-lg', 18rpx); +$border-radius-xl: create-var('border-radius-xl', 24rpx); +$border-radius-hg: create-var('border-radius-hg', 999px); +// $border-radius-circle: var(--l-border-radius-circle, 50%); + + +// 动画 +$anim-time-fn-easing: create-var('anim-time-fn-easing', cubic-bezier(0.38, 0, 0.24, 1)); +$anim-time-fn-ease-out: create-var('anim-time-fn-ease-out', cubic-bezier(0, 0, 0.15, 1)); +$anim-time-fn-ease-in: create-var('anim-time-fn-ease-in', cubic-bezier(0.82, 0, 1, 0.9)); +$anim-duration-base: create-var('anim-duration-base', 0.2s); +$anim-duration-moderate: create-var('anim-duration-moderate', 0.24s); +$anim-duration-slow: create-var('anim-duration-slow', 0.28s); + + diff --git a/uni_modules/mcc-drag/changelog.md b/uni_modules/mcc-drag/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/mcc-drag/components/mcc-drag/mcc-drag.vue b/uni_modules/mcc-drag/components/mcc-drag/mcc-drag.vue new file mode 100644 index 0000000..d146317 --- /dev/null +++ b/uni_modules/mcc-drag/components/mcc-drag/mcc-drag.vue @@ -0,0 +1,13 @@ + + + diff --git a/uni_modules/mcc-drag/components/mcc-dragsub/mcc-dragsub.vue b/uni_modules/mcc-drag/components/mcc-dragsub/mcc-dragsub.vue new file mode 100644 index 0000000..a18accc --- /dev/null +++ b/uni_modules/mcc-drag/components/mcc-dragsub/mcc-dragsub.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/mcc-drag/package.json b/uni_modules/mcc-drag/package.json new file mode 100644 index 0000000..bf2f1b1 --- /dev/null +++ b/uni_modules/mcc-drag/package.json @@ -0,0 +1,83 @@ +{ + "id": "mcc-drag", + "displayName": "mcc-drag", + "version": "1.0.0", + "description": "mcc-drag", + "keywords": [ + "mcc-drag" +], + "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": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "u", + "aliyun": "u", + "alipay": "u" + }, + "client": { + "Vue": { + "vue2": "u", + "vue3": "u" + }, + "App": { + "app-vue": "u", + "app-nvue": "u", + "app-uvue": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/mcc-drag/readme.md b/uni_modules/mcc-drag/readme.md new file mode 100644 index 0000000..6fe1ede --- /dev/null +++ b/uni_modules/mcc-drag/readme.md @@ -0,0 +1 @@ +# mcc-drag \ No newline at end of file diff --git a/uni_modules/mcc-haha/changelog.md b/uni_modules/mcc-haha/changelog.md new file mode 100644 index 0000000..d127d58 --- /dev/null +++ b/uni_modules/mcc-haha/changelog.md @@ -0,0 +1,2 @@ +## 1.0.0(2025-03-22) +无 diff --git a/uni_modules/mcc-haha/components/mcc-haha/mcc-haha.vue b/uni_modules/mcc-haha/components/mcc-haha/mcc-haha.vue new file mode 100644 index 0000000..f722a30 --- /dev/null +++ b/uni_modules/mcc-haha/components/mcc-haha/mcc-haha.vue @@ -0,0 +1,7 @@ + + + diff --git a/uni_modules/mcc-haha/package.json b/uni_modules/mcc-haha/package.json new file mode 100644 index 0000000..275ffdf --- /dev/null +++ b/uni_modules/mcc-haha/package.json @@ -0,0 +1,83 @@ +{ + "id": "mcc-haha", + "displayName": "mcc-haha", + "version": "1.0.0", + "description": "mcc-haha", + "keywords": [ + "mcc-haha" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-uts", + "sale": { + "regular": { + "price": "0.01" + }, + "sourcecode": { + "price": "1.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "0", + "data": "0", + "permissions": "0" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-android": "y", + "app-harmony": "y", + "app-ios": "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" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/mcc-haha/readme.md b/uni_modules/mcc-haha/readme.md new file mode 100644 index 0000000..0c6fe8a --- /dev/null +++ b/uni_modules/mcc-haha/readme.md @@ -0,0 +1 @@ +# mcc-haha \ No newline at end of file diff --git a/uni_modules/mumu-qrcode/changelog.md b/uni_modules/mumu-qrcode/changelog.md new file mode 100644 index 0000000..28710ef --- /dev/null +++ b/uni_modules/mumu-qrcode/changelog.md @@ -0,0 +1,4 @@ +## 1.0.2(2021-12-24) +更新插件说明 +## 1.0.1(2021-12-24) +更新支持 uni_modules ,老版本将不在维护。请大家下载新版本。新版本不在需要配置模板了。 diff --git a/uni_modules/mumu-qrcode/components/mumu-qrcode/jsQR.js b/uni_modules/mumu-qrcode/components/mumu-qrcode/jsQR.js new file mode 100644 index 0000000..429896a --- /dev/null +++ b/uni_modules/mumu-qrcode/components/mumu-qrcode/jsQR.js @@ -0,0 +1,10102 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["jsQR"] = factory(); + else + root["jsQR"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 3); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix = /** @class */ (function () { + function BitMatrix(data, width) { + this.width = width; + this.height = data.length / width; + this.data = data; + } + BitMatrix.createEmpty = function (width, height) { + return new BitMatrix(new Uint8ClampedArray(width * height), width); + }; + BitMatrix.prototype.get = function (x, y) { + if (x < 0 || x >= this.width || y < 0 || y >= this.height) { + return false; + } + return !!this.data[y * this.width + x]; + }; + BitMatrix.prototype.set = function (x, y, v) { + this.data[y * this.width + x] = v ? 1 : 0; + }; + BitMatrix.prototype.setRegion = function (left, top, width, height, v) { + for (var y = top; y < top + height; y++) { + for (var x = left; x < left + width; x++) { + this.set(x, y, !!v); + } + } + }; + return BitMatrix; +}()); +exports.BitMatrix = BitMatrix; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var GenericGFPoly_1 = __webpack_require__(2); +function addOrSubtractGF(a, b) { + return a ^ b; // tslint:disable-line:no-bitwise +} +exports.addOrSubtractGF = addOrSubtractGF; +var GenericGF = /** @class */ (function () { + function GenericGF(primitive, size, genBase) { + this.primitive = primitive; + this.size = size; + this.generatorBase = genBase; + this.expTable = new Array(this.size); + this.logTable = new Array(this.size); + var x = 1; + for (var i = 0; i < this.size; i++) { + this.expTable[i] = x; + x = x * 2; + if (x >= this.size) { + x = (x ^ this.primitive) & (this.size - 1); // tslint:disable-line:no-bitwise + } + } + for (var i = 0; i < this.size - 1; i++) { + this.logTable[this.expTable[i]] = i; + } + this.zero = new GenericGFPoly_1.default(this, Uint8ClampedArray.from([0])); + this.one = new GenericGFPoly_1.default(this, Uint8ClampedArray.from([1])); + } + GenericGF.prototype.multiply = function (a, b) { + if (a === 0 || b === 0) { + return 0; + } + return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)]; + }; + GenericGF.prototype.inverse = function (a) { + if (a === 0) { + throw new Error("Can't invert 0"); + } + return this.expTable[this.size - this.logTable[a] - 1]; + }; + GenericGF.prototype.buildMonomial = function (degree, coefficient) { + if (degree < 0) { + throw new Error("Invalid monomial degree less than 0"); + } + if (coefficient === 0) { + return this.zero; + } + var coefficients = new Uint8ClampedArray(degree + 1); + coefficients[0] = coefficient; + return new GenericGFPoly_1.default(this, coefficients); + }; + GenericGF.prototype.log = function (a) { + if (a === 0) { + throw new Error("Can't take log(0)"); + } + return this.logTable[a]; + }; + GenericGF.prototype.exp = function (a) { + return this.expTable[a]; + }; + return GenericGF; +}()); +exports.default = GenericGF; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var GenericGF_1 = __webpack_require__(1); +var GenericGFPoly = /** @class */ (function () { + function GenericGFPoly(field, coefficients) { + if (coefficients.length === 0) { + throw new Error("No coefficients."); + } + this.field = field; + var coefficientsLength = coefficients.length; + if (coefficientsLength > 1 && coefficients[0] === 0) { + // Leading term must be non-zero for anything except the constant polynomial "0" + var firstNonZero = 1; + while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) { + firstNonZero++; + } + if (firstNonZero === coefficientsLength) { + this.coefficients = field.zero.coefficients; + } + else { + this.coefficients = new Uint8ClampedArray(coefficientsLength - firstNonZero); + for (var i = 0; i < this.coefficients.length; i++) { + this.coefficients[i] = coefficients[firstNonZero + i]; + } + } + } + else { + this.coefficients = coefficients; + } + } + GenericGFPoly.prototype.degree = function () { + return this.coefficients.length - 1; + }; + GenericGFPoly.prototype.isZero = function () { + return this.coefficients[0] === 0; + }; + GenericGFPoly.prototype.getCoefficient = function (degree) { + return this.coefficients[this.coefficients.length - 1 - degree]; + }; + GenericGFPoly.prototype.addOrSubtract = function (other) { + var _a; + if (this.isZero()) { + return other; + } + if (other.isZero()) { + return this; + } + var smallerCoefficients = this.coefficients; + var largerCoefficients = other.coefficients; + if (smallerCoefficients.length > largerCoefficients.length) { + _a = [largerCoefficients, smallerCoefficients], smallerCoefficients = _a[0], largerCoefficients = _a[1]; + } + var sumDiff = new Uint8ClampedArray(largerCoefficients.length); + var lengthDiff = largerCoefficients.length - smallerCoefficients.length; + for (var i = 0; i < lengthDiff; i++) { + sumDiff[i] = largerCoefficients[i]; + } + for (var i = lengthDiff; i < largerCoefficients.length; i++) { + sumDiff[i] = GenericGF_1.addOrSubtractGF(smallerCoefficients[i - lengthDiff], largerCoefficients[i]); + } + return new GenericGFPoly(this.field, sumDiff); + }; + GenericGFPoly.prototype.multiply = function (scalar) { + if (scalar === 0) { + return this.field.zero; + } + if (scalar === 1) { + return this; + } + var size = this.coefficients.length; + var product = new Uint8ClampedArray(size); + for (var i = 0; i < size; i++) { + product[i] = this.field.multiply(this.coefficients[i], scalar); + } + return new GenericGFPoly(this.field, product); + }; + GenericGFPoly.prototype.multiplyPoly = function (other) { + if (this.isZero() || other.isZero()) { + return this.field.zero; + } + var aCoefficients = this.coefficients; + var aLength = aCoefficients.length; + var bCoefficients = other.coefficients; + var bLength = bCoefficients.length; + var product = new Uint8ClampedArray(aLength + bLength - 1); + for (var i = 0; i < aLength; i++) { + var aCoeff = aCoefficients[i]; + for (var j = 0; j < bLength; j++) { + product[i + j] = GenericGF_1.addOrSubtractGF(product[i + j], this.field.multiply(aCoeff, bCoefficients[j])); + } + } + return new GenericGFPoly(this.field, product); + }; + GenericGFPoly.prototype.multiplyByMonomial = function (degree, coefficient) { + if (degree < 0) { + throw new Error("Invalid degree less than 0"); + } + if (coefficient === 0) { + return this.field.zero; + } + var size = this.coefficients.length; + var product = new Uint8ClampedArray(size + degree); + for (var i = 0; i < size; i++) { + product[i] = this.field.multiply(this.coefficients[i], coefficient); + } + return new GenericGFPoly(this.field, product); + }; + GenericGFPoly.prototype.evaluateAt = function (a) { + var result = 0; + if (a === 0) { + // Just return the x^0 coefficient + return this.getCoefficient(0); + } + var size = this.coefficients.length; + if (a === 1) { + // Just the sum of the coefficients + this.coefficients.forEach(function (coefficient) { + result = GenericGF_1.addOrSubtractGF(result, coefficient); + }); + return result; + } + result = this.coefficients[0]; + for (var i = 1; i < size; i++) { + result = GenericGF_1.addOrSubtractGF(this.field.multiply(a, result), this.coefficients[i]); + } + return result; + }; + return GenericGFPoly; +}()); +exports.default = GenericGFPoly; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var binarizer_1 = __webpack_require__(4); +var decoder_1 = __webpack_require__(5); +var extractor_1 = __webpack_require__(11); +var locator_1 = __webpack_require__(12); +function scan(matrix) { + var locations = locator_1.locate(matrix); + if (!locations) { + return null; + } + for (var _i = 0, locations_1 = locations; _i < locations_1.length; _i++) { + var location_1 = locations_1[_i]; + var extracted = extractor_1.extract(matrix, location_1); + var decoded = decoder_1.decode(extracted.matrix); + if (decoded) { + return { + binaryData: decoded.bytes, + data: decoded.text, + chunks: decoded.chunks, + version: decoded.version, + location: { + topRightCorner: extracted.mappingFunction(location_1.dimension, 0), + topLeftCorner: extracted.mappingFunction(0, 0), + bottomRightCorner: extracted.mappingFunction(location_1.dimension, location_1.dimension), + bottomLeftCorner: extracted.mappingFunction(0, location_1.dimension), + topRightFinderPattern: location_1.topRight, + topLeftFinderPattern: location_1.topLeft, + bottomLeftFinderPattern: location_1.bottomLeft, + bottomRightAlignmentPattern: location_1.alignmentPattern, + }, + }; + } + } + return null; +} +var defaultOptions = { + inversionAttempts: "attemptBoth", +}; +function jsQR(data, width, height, providedOptions) { + if (providedOptions === void 0) { providedOptions = {}; } + var options = defaultOptions; + Object.keys(options || {}).forEach(function (opt) { + options[opt] = providedOptions[opt] || options[opt]; + }); + var shouldInvert = options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst"; + var tryInvertedFirst = options.inversionAttempts === "onlyInvert" || options.inversionAttempts === "invertFirst"; + var _a = binarizer_1.binarize(data, width, height, shouldInvert), binarized = _a.binarized, inverted = _a.inverted; + var result = scan(tryInvertedFirst ? inverted : binarized); + if (!result && (options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst")) { + result = scan(tryInvertedFirst ? binarized : inverted); + } + return result; +} +jsQR.default = jsQR; +exports.default = jsQR; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +var REGION_SIZE = 8; +var MIN_DYNAMIC_RANGE = 24; +function numBetween(value, min, max) { + return value < min ? min : value > max ? max : value; +} +// Like BitMatrix but accepts arbitry Uint8 values +var Matrix = /** @class */ (function () { + function Matrix(width, height) { + this.width = width; + this.data = new Uint8ClampedArray(width * height); + } + Matrix.prototype.get = function (x, y) { + return this.data[y * this.width + x]; + }; + Matrix.prototype.set = function (x, y, value) { + this.data[y * this.width + x] = value; + }; + return Matrix; +}()); +function binarize(data, width, height, returnInverted) { + if (data.length !== width * height * 4) { + throw new Error("Malformed data passed to binarizer."); + } + // Convert image to greyscale + var greyscalePixels = new Matrix(width, height); + for (var x = 0; x < width; x++) { + for (var y = 0; y < height; y++) { + var r = data[((y * width + x) * 4) + 0]; + var g = data[((y * width + x) * 4) + 1]; + var b = data[((y * width + x) * 4) + 2]; + greyscalePixels.set(x, y, 0.2126 * r + 0.7152 * g + 0.0722 * b); + } + } + var horizontalRegionCount = Math.ceil(width / REGION_SIZE); + var verticalRegionCount = Math.ceil(height / REGION_SIZE); + var blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount); + for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + var sum = 0; + var min = Infinity; + var max = 0; + for (var y = 0; y < REGION_SIZE; y++) { + for (var x = 0; x < REGION_SIZE; x++) { + var pixelLumosity = greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y); + sum += pixelLumosity; + min = Math.min(min, pixelLumosity); + max = Math.max(max, pixelLumosity); + } + } + var average = sum / (Math.pow(REGION_SIZE, 2)); + if (max - min <= MIN_DYNAMIC_RANGE) { + // If variation within the block is low, assume this is a block with only light or only + // dark pixels. In that case we do not want to use the average, as it would divide this + // low contrast area into black and white pixels, essentially creating data out of noise. + // + // Default the blackpoint for these blocks to be half the min - effectively white them out + average = min / 2; + if (verticalRegion > 0 && hortizontalRegion > 0) { + // Correct the "white background" assumption for blocks that have neighbors by comparing + // the pixels in this block to the previously calculated black points. This is based on + // the fact that dark barcode symbology is always surrounded by some amount of light + // background for which reasonable black point estimates were made. The bp estimated at + // the boundaries is used for the interior. + // The (min < bp) is arbitrary but works better than other heuristics that were tried. + var averageNeighborBlackPoint = (blackPoints.get(hortizontalRegion, verticalRegion - 1) + + (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) + + blackPoints.get(hortizontalRegion - 1, verticalRegion - 1)) / 4; + if (min < averageNeighborBlackPoint) { + average = averageNeighborBlackPoint; + } + } + } + blackPoints.set(hortizontalRegion, verticalRegion, average); + } + } + var binarized = BitMatrix_1.BitMatrix.createEmpty(width, height); + var inverted = null; + if (returnInverted) { + inverted = BitMatrix_1.BitMatrix.createEmpty(width, height); + } + for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + var left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3); + var top_1 = numBetween(verticalRegion, 2, verticalRegionCount - 3); + var sum = 0; + for (var xRegion = -2; xRegion <= 2; xRegion++) { + for (var yRegion = -2; yRegion <= 2; yRegion++) { + sum += blackPoints.get(left + xRegion, top_1 + yRegion); + } + } + var threshold = sum / 25; + for (var xRegion = 0; xRegion < REGION_SIZE; xRegion++) { + for (var yRegion = 0; yRegion < REGION_SIZE; yRegion++) { + var x = hortizontalRegion * REGION_SIZE + xRegion; + var y = verticalRegion * REGION_SIZE + yRegion; + var lum = greyscalePixels.get(x, y); + binarized.set(x, y, lum <= threshold); + if (returnInverted) { + inverted.set(x, y, !(lum <= threshold)); + } + } + } + } + } + if (returnInverted) { + return { binarized: binarized, inverted: inverted }; + } + return { binarized: binarized }; +} +exports.binarize = binarize; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +var decodeData_1 = __webpack_require__(6); +var reedsolomon_1 = __webpack_require__(9); +var version_1 = __webpack_require__(10); +// tslint:disable:no-bitwise +function numBitsDiffering(x, y) { + var z = x ^ y; + var bitCount = 0; + while (z) { + bitCount++; + z &= z - 1; + } + return bitCount; +} +function pushBit(bit, byte) { + return (byte << 1) | bit; +} +// tslint:enable:no-bitwise +var FORMAT_INFO_TABLE = [ + { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } }, + { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } }, + { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } }, + { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } }, + { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } }, + { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } }, + { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } }, + { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } }, + { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } }, + { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } }, + { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } }, + { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } }, + { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } }, + { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } }, + { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } }, + { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } }, + { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } }, + { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } }, + { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } }, + { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } }, + { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } }, + { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } }, + { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } }, + { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } }, + { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } }, + { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } }, + { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } }, + { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } }, + { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } }, + { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } }, + { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } }, + { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } }, +]; +var DATA_MASKS = [ + function (p) { return ((p.y + p.x) % 2) === 0; }, + function (p) { return (p.y % 2) === 0; }, + function (p) { return p.x % 3 === 0; }, + function (p) { return (p.y + p.x) % 3 === 0; }, + function (p) { return (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0; }, + function (p) { return ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0; }, + function (p) { return ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, + function (p) { return ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, +]; +function buildFunctionPatternMask(version) { + var dimension = 17 + 4 * version.versionNumber; + var matrix = BitMatrix_1.BitMatrix.createEmpty(dimension, dimension); + matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format + matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format + matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format + // Alignment patterns + for (var _i = 0, _a = version.alignmentPatternCenters; _i < _a.length; _i++) { + var x = _a[_i]; + for (var _b = 0, _c = version.alignmentPatternCenters; _b < _c.length; _b++) { + var y = _c[_b]; + if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) { + matrix.setRegion(x - 2, y - 2, 5, 5, true); + } + } + } + matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern + matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern + if (version.versionNumber > 6) { + matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right + matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left + } + return matrix; +} +function readCodewords(matrix, version, formatInfo) { + var dataMask = DATA_MASKS[formatInfo.dataMask]; + var dimension = matrix.height; + var functionPatternMask = buildFunctionPatternMask(version); + var codewords = []; + var currentByte = 0; + var bitsRead = 0; + // Read columns in pairs, from right to left + var readingUp = true; + for (var columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) { + if (columnIndex === 6) { // Skip whole column with vertical alignment pattern; + columnIndex--; + } + for (var i = 0; i < dimension; i++) { + var y = readingUp ? dimension - 1 - i : i; + for (var columnOffset = 0; columnOffset < 2; columnOffset++) { + var x = columnIndex - columnOffset; + if (!functionPatternMask.get(x, y)) { + bitsRead++; + var bit = matrix.get(x, y); + if (dataMask({ y: y, x: x })) { + bit = !bit; + } + currentByte = pushBit(bit, currentByte); + if (bitsRead === 8) { // Whole bytes + codewords.push(currentByte); + bitsRead = 0; + currentByte = 0; + } + } + } + } + readingUp = !readingUp; + } + return codewords; +} +function readVersion(matrix) { + var dimension = matrix.height; + var provisionalVersion = Math.floor((dimension - 17) / 4); + if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code + return version_1.VERSIONS[provisionalVersion - 1]; + } + var topRightVersionBits = 0; + for (var y = 5; y >= 0; y--) { + for (var x = dimension - 9; x >= dimension - 11; x--) { + topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits); + } + } + var bottomLeftVersionBits = 0; + for (var x = 5; x >= 0; x--) { + for (var y = dimension - 9; y >= dimension - 11; y--) { + bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits); + } + } + var bestDifference = Infinity; + var bestVersion; + for (var _i = 0, VERSIONS_1 = version_1.VERSIONS; _i < VERSIONS_1.length; _i++) { + var version = VERSIONS_1[_i]; + if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) { + return version; + } + var difference = numBitsDiffering(topRightVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + } + // We can tolerate up to 3 bits of error since no two version info codewords will + // differ in less than 8 bits. + if (bestDifference <= 3) { + return bestVersion; + } +} +function readFormatInformation(matrix) { + var topLeftFormatInfoBits = 0; + for (var x = 0; x <= 8; x++) { + if (x !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits); + } + } + for (var y = 7; y >= 0; y--) { + if (y !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits); + } + } + var dimension = matrix.height; + var topRightBottomRightFormatInfoBits = 0; + for (var y = dimension - 1; y >= dimension - 7; y--) { // bottom left + topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits); + } + for (var x = dimension - 8; x < dimension; x++) { // top right + topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits); + } + var bestDifference = Infinity; + var bestFormatInfo = null; + for (var _i = 0, FORMAT_INFO_TABLE_1 = FORMAT_INFO_TABLE; _i < FORMAT_INFO_TABLE_1.length; _i++) { + var _a = FORMAT_INFO_TABLE_1[_i], bits = _a.bits, formatInfo = _a.formatInfo; + if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) { + return formatInfo; + } + var difference = numBitsDiffering(topLeftFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option + difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + } + } + // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match + if (bestDifference <= 3) { + return bestFormatInfo; + } + return null; +} +function getDataBlocks(codewords, version, ecLevel) { + var ecInfo = version.errorCorrectionLevels[ecLevel]; + var dataBlocks = []; + var totalCodewords = 0; + ecInfo.ecBlocks.forEach(function (block) { + for (var i = 0; i < block.numBlocks; i++) { + dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] }); + totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock; + } + }); + // In some cases the QR code will be malformed enough that we pull off more or less than we should. + // If we pull off less there's nothing we can do. + // If we pull off more we can safely truncate + if (codewords.length < totalCodewords) { + return null; + } + codewords = codewords.slice(0, totalCodewords); + var shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock; + // Pull codewords to fill the blocks up to the minimum size + for (var i = 0; i < shortBlockSize; i++) { + for (var _i = 0, dataBlocks_1 = dataBlocks; _i < dataBlocks_1.length; _i++) { + var dataBlock = dataBlocks_1[_i]; + dataBlock.codewords.push(codewords.shift()); + } + } + // If there are any large blocks, pull codewords to fill the last element of those + if (ecInfo.ecBlocks.length > 1) { + var smallBlockCount = ecInfo.ecBlocks[0].numBlocks; + var largeBlockCount = ecInfo.ecBlocks[1].numBlocks; + for (var i = 0; i < largeBlockCount; i++) { + dataBlocks[smallBlockCount + i].codewords.push(codewords.shift()); + } + } + // Add the rest of the codewords to the blocks. These are the error correction codewords. + while (codewords.length > 0) { + for (var _a = 0, dataBlocks_2 = dataBlocks; _a < dataBlocks_2.length; _a++) { + var dataBlock = dataBlocks_2[_a]; + dataBlock.codewords.push(codewords.shift()); + } + } + return dataBlocks; +} +function decodeMatrix(matrix) { + var version = readVersion(matrix); + if (!version) { + return null; + } + var formatInfo = readFormatInformation(matrix); + if (!formatInfo) { + return null; + } + var codewords = readCodewords(matrix, version, formatInfo); + var dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel); + if (!dataBlocks) { + return null; + } + // Count total number of data bytes + var totalBytes = dataBlocks.reduce(function (a, b) { return a + b.numDataCodewords; }, 0); + var resultBytes = new Uint8ClampedArray(totalBytes); + var resultIndex = 0; + for (var _i = 0, dataBlocks_3 = dataBlocks; _i < dataBlocks_3.length; _i++) { + var dataBlock = dataBlocks_3[_i]; + var correctedBytes = reedsolomon_1.decode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords); + if (!correctedBytes) { + return null; + } + for (var i = 0; i < dataBlock.numDataCodewords; i++) { + resultBytes[resultIndex++] = correctedBytes[i]; + } + } + try { + return decodeData_1.decode(resultBytes, version.versionNumber); + } + catch (_a) { + return null; + } +} +function decode(matrix) { + if (matrix == null) { + return null; + } + var result = decodeMatrix(matrix); + if (result) { + return result; + } + // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line. + for (var x = 0; x < matrix.width; x++) { + for (var y = x + 1; y < matrix.height; y++) { + if (matrix.get(x, y) !== matrix.get(y, x)) { + matrix.set(x, y, !matrix.get(x, y)); + matrix.set(y, x, !matrix.get(y, x)); + } + } + } + return decodeMatrix(matrix); +} +exports.decode = decode; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +// tslint:disable:no-bitwise +var BitStream_1 = __webpack_require__(7); +var shiftJISTable_1 = __webpack_require__(8); +var Mode; +(function (Mode) { + Mode["Numeric"] = "numeric"; + Mode["Alphanumeric"] = "alphanumeric"; + Mode["Byte"] = "byte"; + Mode["Kanji"] = "kanji"; + Mode["ECI"] = "eci"; +})(Mode = exports.Mode || (exports.Mode = {})); +var ModeByte; +(function (ModeByte) { + ModeByte[ModeByte["Terminator"] = 0] = "Terminator"; + ModeByte[ModeByte["Numeric"] = 1] = "Numeric"; + ModeByte[ModeByte["Alphanumeric"] = 2] = "Alphanumeric"; + ModeByte[ModeByte["Byte"] = 4] = "Byte"; + ModeByte[ModeByte["Kanji"] = 8] = "Kanji"; + ModeByte[ModeByte["ECI"] = 7] = "ECI"; + // StructuredAppend = 0x3, + // FNC1FirstPosition = 0x5, + // FNC1SecondPosition = 0x9, +})(ModeByte || (ModeByte = {})); +function decodeNumeric(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [10, 12, 14][size]; + var length = stream.readBits(characterCountSize); + // Read digits in groups of 3 + while (length >= 3) { + var num = stream.readBits(10); + if (num >= 1000) { + throw new Error("Invalid numeric value above 999"); + } + var a = Math.floor(num / 100); + var b = Math.floor(num / 10) % 10; + var c = num % 10; + bytes.push(48 + a, 48 + b, 48 + c); + text += a.toString() + b.toString() + c.toString(); + length -= 3; + } + // If the number of digits aren't a multiple of 3, the remaining digits are special cased. + if (length === 2) { + var num = stream.readBits(7); + if (num >= 100) { + throw new Error("Invalid numeric value above 99"); + } + var a = Math.floor(num / 10); + var b = num % 10; + bytes.push(48 + a, 48 + b); + text += a.toString() + b.toString(); + } + else if (length === 1) { + var num = stream.readBits(4); + if (num >= 10) { + throw new Error("Invalid numeric value above 9"); + } + bytes.push(48 + num); + text += num.toString(); + } + return { bytes: bytes, text: text }; +} +var AlphanumericCharacterCodes = [ + "0", "1", "2", "3", "4", "5", "6", "7", "8", + "9", "A", "B", "C", "D", "E", "F", "G", "H", + "I", "J", "K", "L", "M", "N", "O", "P", "Q", + "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + " ", "$", "%", "*", "+", "-", ".", "/", ":", +]; +function decodeAlphanumeric(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [9, 11, 13][size]; + var length = stream.readBits(characterCountSize); + while (length >= 2) { + var v = stream.readBits(11); + var a = Math.floor(v / 45); + var b = v % 45; + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0)); + text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b]; + length -= 2; + } + if (length === 1) { + var a = stream.readBits(6); + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0)); + text += AlphanumericCharacterCodes[a]; + } + return { bytes: bytes, text: text }; +} +function decodeByte(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [8, 16, 16][size]; + var length = stream.readBits(characterCountSize); + for (var i = 0; i < length; i++) { + var b = stream.readBits(8); + bytes.push(b); + } + try { + text += decodeURIComponent(bytes.map(function (b) { return "%" + ("0" + b.toString(16)).substr(-2); }).join("")); + } + catch (_a) { + // failed to decode + } + return { bytes: bytes, text: text }; +} +function decodeKanji(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [8, 10, 12][size]; + var length = stream.readBits(characterCountSize); + for (var i = 0; i < length; i++) { + var k = stream.readBits(13); + var c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0); + if (c < 0x1F00) { + c += 0x8140; + } + else { + c += 0xC140; + } + bytes.push(c >> 8, c & 0xFF); + text += String.fromCharCode(shiftJISTable_1.shiftJISTable[c]); + } + return { bytes: bytes, text: text }; +} +function decode(data, version) { + var _a, _b, _c, _d; + var stream = new BitStream_1.BitStream(data); + // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2). + var size = version <= 9 ? 0 : version <= 26 ? 1 : 2; + var result = { + text: "", + bytes: [], + chunks: [], + version: version, + }; + while (stream.available() >= 4) { + var mode = stream.readBits(4); + if (mode === ModeByte.Terminator) { + return result; + } + else if (mode === ModeByte.ECI) { + if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(7), + }); + } + else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(14), + }); + } + else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(21), + }); + } + else { + // ECI data seems corrupted + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: -1, + }); + } + } + else if (mode === ModeByte.Numeric) { + var numericResult = decodeNumeric(stream, size); + result.text += numericResult.text; + (_a = result.bytes).push.apply(_a, numericResult.bytes); + result.chunks.push({ + type: Mode.Numeric, + text: numericResult.text, + }); + } + else if (mode === ModeByte.Alphanumeric) { + var alphanumericResult = decodeAlphanumeric(stream, size); + result.text += alphanumericResult.text; + (_b = result.bytes).push.apply(_b, alphanumericResult.bytes); + result.chunks.push({ + type: Mode.Alphanumeric, + text: alphanumericResult.text, + }); + } + else if (mode === ModeByte.Byte) { + var byteResult = decodeByte(stream, size); + result.text += byteResult.text; + (_c = result.bytes).push.apply(_c, byteResult.bytes); + result.chunks.push({ + type: Mode.Byte, + bytes: byteResult.bytes, + text: byteResult.text, + }); + } + else if (mode === ModeByte.Kanji) { + var kanjiResult = decodeKanji(stream, size); + result.text += kanjiResult.text; + (_d = result.bytes).push.apply(_d, kanjiResult.bytes); + result.chunks.push({ + type: Mode.Kanji, + bytes: kanjiResult.bytes, + text: kanjiResult.text, + }); + } + } + // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker + if (stream.available() === 0 || stream.readBits(stream.available()) === 0) { + return result; + } +} +exports.decode = decode; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// tslint:disable:no-bitwise +Object.defineProperty(exports, "__esModule", { value: true }); +var BitStream = /** @class */ (function () { + function BitStream(bytes) { + this.byteOffset = 0; + this.bitOffset = 0; + this.bytes = bytes; + } + BitStream.prototype.readBits = function (numBits) { + if (numBits < 1 || numBits > 32 || numBits > this.available()) { + throw new Error("Cannot read " + numBits.toString() + " bits"); + } + var result = 0; + // First, read remainder from current byte + if (this.bitOffset > 0) { + var bitsLeft = 8 - this.bitOffset; + var toRead = numBits < bitsLeft ? numBits : bitsLeft; + var bitsToNotRead = bitsLeft - toRead; + var mask = (0xFF >> (8 - toRead)) << bitsToNotRead; + result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead; + numBits -= toRead; + this.bitOffset += toRead; + if (this.bitOffset === 8) { + this.bitOffset = 0; + this.byteOffset++; + } + } + // Next read whole bytes + if (numBits > 0) { + while (numBits >= 8) { + result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF); + this.byteOffset++; + numBits -= 8; + } + // Finally read a partial byte + if (numBits > 0) { + var bitsToNotRead = 8 - numBits; + var mask = (0xFF >> bitsToNotRead) << bitsToNotRead; + result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead); + this.bitOffset += numBits; + } + } + return result; + }; + BitStream.prototype.available = function () { + return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset; + }; + return BitStream; +}()); +exports.BitStream = BitStream; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.shiftJISTable = { + 0x20: 0x0020, + 0x21: 0x0021, + 0x22: 0x0022, + 0x23: 0x0023, + 0x24: 0x0024, + 0x25: 0x0025, + 0x26: 0x0026, + 0x27: 0x0027, + 0x28: 0x0028, + 0x29: 0x0029, + 0x2A: 0x002A, + 0x2B: 0x002B, + 0x2C: 0x002C, + 0x2D: 0x002D, + 0x2E: 0x002E, + 0x2F: 0x002F, + 0x30: 0x0030, + 0x31: 0x0031, + 0x32: 0x0032, + 0x33: 0x0033, + 0x34: 0x0034, + 0x35: 0x0035, + 0x36: 0x0036, + 0x37: 0x0037, + 0x38: 0x0038, + 0x39: 0x0039, + 0x3A: 0x003A, + 0x3B: 0x003B, + 0x3C: 0x003C, + 0x3D: 0x003D, + 0x3E: 0x003E, + 0x3F: 0x003F, + 0x40: 0x0040, + 0x41: 0x0041, + 0x42: 0x0042, + 0x43: 0x0043, + 0x44: 0x0044, + 0x45: 0x0045, + 0x46: 0x0046, + 0x47: 0x0047, + 0x48: 0x0048, + 0x49: 0x0049, + 0x4A: 0x004A, + 0x4B: 0x004B, + 0x4C: 0x004C, + 0x4D: 0x004D, + 0x4E: 0x004E, + 0x4F: 0x004F, + 0x50: 0x0050, + 0x51: 0x0051, + 0x52: 0x0052, + 0x53: 0x0053, + 0x54: 0x0054, + 0x55: 0x0055, + 0x56: 0x0056, + 0x57: 0x0057, + 0x58: 0x0058, + 0x59: 0x0059, + 0x5A: 0x005A, + 0x5B: 0x005B, + 0x5C: 0x00A5, + 0x5D: 0x005D, + 0x5E: 0x005E, + 0x5F: 0x005F, + 0x60: 0x0060, + 0x61: 0x0061, + 0x62: 0x0062, + 0x63: 0x0063, + 0x64: 0x0064, + 0x65: 0x0065, + 0x66: 0x0066, + 0x67: 0x0067, + 0x68: 0x0068, + 0x69: 0x0069, + 0x6A: 0x006A, + 0x6B: 0x006B, + 0x6C: 0x006C, + 0x6D: 0x006D, + 0x6E: 0x006E, + 0x6F: 0x006F, + 0x70: 0x0070, + 0x71: 0x0071, + 0x72: 0x0072, + 0x73: 0x0073, + 0x74: 0x0074, + 0x75: 0x0075, + 0x76: 0x0076, + 0x77: 0x0077, + 0x78: 0x0078, + 0x79: 0x0079, + 0x7A: 0x007A, + 0x7B: 0x007B, + 0x7C: 0x007C, + 0x7D: 0x007D, + 0x7E: 0x203E, + 0x8140: 0x3000, + 0x8141: 0x3001, + 0x8142: 0x3002, + 0x8143: 0xFF0C, + 0x8144: 0xFF0E, + 0x8145: 0x30FB, + 0x8146: 0xFF1A, + 0x8147: 0xFF1B, + 0x8148: 0xFF1F, + 0x8149: 0xFF01, + 0x814A: 0x309B, + 0x814B: 0x309C, + 0x814C: 0x00B4, + 0x814D: 0xFF40, + 0x814E: 0x00A8, + 0x814F: 0xFF3E, + 0x8150: 0xFFE3, + 0x8151: 0xFF3F, + 0x8152: 0x30FD, + 0x8153: 0x30FE, + 0x8154: 0x309D, + 0x8155: 0x309E, + 0x8156: 0x3003, + 0x8157: 0x4EDD, + 0x8158: 0x3005, + 0x8159: 0x3006, + 0x815A: 0x3007, + 0x815B: 0x30FC, + 0x815C: 0x2015, + 0x815D: 0x2010, + 0x815E: 0xFF0F, + 0x815F: 0x005C, + 0x8160: 0x301C, + 0x8161: 0x2016, + 0x8162: 0xFF5C, + 0x8163: 0x2026, + 0x8164: 0x2025, + 0x8165: 0x2018, + 0x8166: 0x2019, + 0x8167: 0x201C, + 0x8168: 0x201D, + 0x8169: 0xFF08, + 0x816A: 0xFF09, + 0x816B: 0x3014, + 0x816C: 0x3015, + 0x816D: 0xFF3B, + 0x816E: 0xFF3D, + 0x816F: 0xFF5B, + 0x8170: 0xFF5D, + 0x8171: 0x3008, + 0x8172: 0x3009, + 0x8173: 0x300A, + 0x8174: 0x300B, + 0x8175: 0x300C, + 0x8176: 0x300D, + 0x8177: 0x300E, + 0x8178: 0x300F, + 0x8179: 0x3010, + 0x817A: 0x3011, + 0x817B: 0xFF0B, + 0x817C: 0x2212, + 0x817D: 0x00B1, + 0x817E: 0x00D7, + 0x8180: 0x00F7, + 0x8181: 0xFF1D, + 0x8182: 0x2260, + 0x8183: 0xFF1C, + 0x8184: 0xFF1E, + 0x8185: 0x2266, + 0x8186: 0x2267, + 0x8187: 0x221E, + 0x8188: 0x2234, + 0x8189: 0x2642, + 0x818A: 0x2640, + 0x818B: 0x00B0, + 0x818C: 0x2032, + 0x818D: 0x2033, + 0x818E: 0x2103, + 0x818F: 0xFFE5, + 0x8190: 0xFF04, + 0x8191: 0x00A2, + 0x8192: 0x00A3, + 0x8193: 0xFF05, + 0x8194: 0xFF03, + 0x8195: 0xFF06, + 0x8196: 0xFF0A, + 0x8197: 0xFF20, + 0x8198: 0x00A7, + 0x8199: 0x2606, + 0x819A: 0x2605, + 0x819B: 0x25CB, + 0x819C: 0x25CF, + 0x819D: 0x25CE, + 0x819E: 0x25C7, + 0x819F: 0x25C6, + 0x81A0: 0x25A1, + 0x81A1: 0x25A0, + 0x81A2: 0x25B3, + 0x81A3: 0x25B2, + 0x81A4: 0x25BD, + 0x81A5: 0x25BC, + 0x81A6: 0x203B, + 0x81A7: 0x3012, + 0x81A8: 0x2192, + 0x81A9: 0x2190, + 0x81AA: 0x2191, + 0x81AB: 0x2193, + 0x81AC: 0x3013, + 0x81B8: 0x2208, + 0x81B9: 0x220B, + 0x81BA: 0x2286, + 0x81BB: 0x2287, + 0x81BC: 0x2282, + 0x81BD: 0x2283, + 0x81BE: 0x222A, + 0x81BF: 0x2229, + 0x81C8: 0x2227, + 0x81C9: 0x2228, + 0x81CA: 0x00AC, + 0x81CB: 0x21D2, + 0x81CC: 0x21D4, + 0x81CD: 0x2200, + 0x81CE: 0x2203, + 0x81DA: 0x2220, + 0x81DB: 0x22A5, + 0x81DC: 0x2312, + 0x81DD: 0x2202, + 0x81DE: 0x2207, + 0x81DF: 0x2261, + 0x81E0: 0x2252, + 0x81E1: 0x226A, + 0x81E2: 0x226B, + 0x81E3: 0x221A, + 0x81E4: 0x223D, + 0x81E5: 0x221D, + 0x81E6: 0x2235, + 0x81E7: 0x222B, + 0x81E8: 0x222C, + 0x81F0: 0x212B, + 0x81F1: 0x2030, + 0x81F2: 0x266F, + 0x81F3: 0x266D, + 0x81F4: 0x266A, + 0x81F5: 0x2020, + 0x81F6: 0x2021, + 0x81F7: 0x00B6, + 0x81FC: 0x25EF, + 0x824F: 0xFF10, + 0x8250: 0xFF11, + 0x8251: 0xFF12, + 0x8252: 0xFF13, + 0x8253: 0xFF14, + 0x8254: 0xFF15, + 0x8255: 0xFF16, + 0x8256: 0xFF17, + 0x8257: 0xFF18, + 0x8258: 0xFF19, + 0x8260: 0xFF21, + 0x8261: 0xFF22, + 0x8262: 0xFF23, + 0x8263: 0xFF24, + 0x8264: 0xFF25, + 0x8265: 0xFF26, + 0x8266: 0xFF27, + 0x8267: 0xFF28, + 0x8268: 0xFF29, + 0x8269: 0xFF2A, + 0x826A: 0xFF2B, + 0x826B: 0xFF2C, + 0x826C: 0xFF2D, + 0x826D: 0xFF2E, + 0x826E: 0xFF2F, + 0x826F: 0xFF30, + 0x8270: 0xFF31, + 0x8271: 0xFF32, + 0x8272: 0xFF33, + 0x8273: 0xFF34, + 0x8274: 0xFF35, + 0x8275: 0xFF36, + 0x8276: 0xFF37, + 0x8277: 0xFF38, + 0x8278: 0xFF39, + 0x8279: 0xFF3A, + 0x8281: 0xFF41, + 0x8282: 0xFF42, + 0x8283: 0xFF43, + 0x8284: 0xFF44, + 0x8285: 0xFF45, + 0x8286: 0xFF46, + 0x8287: 0xFF47, + 0x8288: 0xFF48, + 0x8289: 0xFF49, + 0x828A: 0xFF4A, + 0x828B: 0xFF4B, + 0x828C: 0xFF4C, + 0x828D: 0xFF4D, + 0x828E: 0xFF4E, + 0x828F: 0xFF4F, + 0x8290: 0xFF50, + 0x8291: 0xFF51, + 0x8292: 0xFF52, + 0x8293: 0xFF53, + 0x8294: 0xFF54, + 0x8295: 0xFF55, + 0x8296: 0xFF56, + 0x8297: 0xFF57, + 0x8298: 0xFF58, + 0x8299: 0xFF59, + 0x829A: 0xFF5A, + 0x829F: 0x3041, + 0x82A0: 0x3042, + 0x82A1: 0x3043, + 0x82A2: 0x3044, + 0x82A3: 0x3045, + 0x82A4: 0x3046, + 0x82A5: 0x3047, + 0x82A6: 0x3048, + 0x82A7: 0x3049, + 0x82A8: 0x304A, + 0x82A9: 0x304B, + 0x82AA: 0x304C, + 0x82AB: 0x304D, + 0x82AC: 0x304E, + 0x82AD: 0x304F, + 0x82AE: 0x3050, + 0x82AF: 0x3051, + 0x82B0: 0x3052, + 0x82B1: 0x3053, + 0x82B2: 0x3054, + 0x82B3: 0x3055, + 0x82B4: 0x3056, + 0x82B5: 0x3057, + 0x82B6: 0x3058, + 0x82B7: 0x3059, + 0x82B8: 0x305A, + 0x82B9: 0x305B, + 0x82BA: 0x305C, + 0x82BB: 0x305D, + 0x82BC: 0x305E, + 0x82BD: 0x305F, + 0x82BE: 0x3060, + 0x82BF: 0x3061, + 0x82C0: 0x3062, + 0x82C1: 0x3063, + 0x82C2: 0x3064, + 0x82C3: 0x3065, + 0x82C4: 0x3066, + 0x82C5: 0x3067, + 0x82C6: 0x3068, + 0x82C7: 0x3069, + 0x82C8: 0x306A, + 0x82C9: 0x306B, + 0x82CA: 0x306C, + 0x82CB: 0x306D, + 0x82CC: 0x306E, + 0x82CD: 0x306F, + 0x82CE: 0x3070, + 0x82CF: 0x3071, + 0x82D0: 0x3072, + 0x82D1: 0x3073, + 0x82D2: 0x3074, + 0x82D3: 0x3075, + 0x82D4: 0x3076, + 0x82D5: 0x3077, + 0x82D6: 0x3078, + 0x82D7: 0x3079, + 0x82D8: 0x307A, + 0x82D9: 0x307B, + 0x82DA: 0x307C, + 0x82DB: 0x307D, + 0x82DC: 0x307E, + 0x82DD: 0x307F, + 0x82DE: 0x3080, + 0x82DF: 0x3081, + 0x82E0: 0x3082, + 0x82E1: 0x3083, + 0x82E2: 0x3084, + 0x82E3: 0x3085, + 0x82E4: 0x3086, + 0x82E5: 0x3087, + 0x82E6: 0x3088, + 0x82E7: 0x3089, + 0x82E8: 0x308A, + 0x82E9: 0x308B, + 0x82EA: 0x308C, + 0x82EB: 0x308D, + 0x82EC: 0x308E, + 0x82ED: 0x308F, + 0x82EE: 0x3090, + 0x82EF: 0x3091, + 0x82F0: 0x3092, + 0x82F1: 0x3093, + 0x8340: 0x30A1, + 0x8341: 0x30A2, + 0x8342: 0x30A3, + 0x8343: 0x30A4, + 0x8344: 0x30A5, + 0x8345: 0x30A6, + 0x8346: 0x30A7, + 0x8347: 0x30A8, + 0x8348: 0x30A9, + 0x8349: 0x30AA, + 0x834A: 0x30AB, + 0x834B: 0x30AC, + 0x834C: 0x30AD, + 0x834D: 0x30AE, + 0x834E: 0x30AF, + 0x834F: 0x30B0, + 0x8350: 0x30B1, + 0x8351: 0x30B2, + 0x8352: 0x30B3, + 0x8353: 0x30B4, + 0x8354: 0x30B5, + 0x8355: 0x30B6, + 0x8356: 0x30B7, + 0x8357: 0x30B8, + 0x8358: 0x30B9, + 0x8359: 0x30BA, + 0x835A: 0x30BB, + 0x835B: 0x30BC, + 0x835C: 0x30BD, + 0x835D: 0x30BE, + 0x835E: 0x30BF, + 0x835F: 0x30C0, + 0x8360: 0x30C1, + 0x8361: 0x30C2, + 0x8362: 0x30C3, + 0x8363: 0x30C4, + 0x8364: 0x30C5, + 0x8365: 0x30C6, + 0x8366: 0x30C7, + 0x8367: 0x30C8, + 0x8368: 0x30C9, + 0x8369: 0x30CA, + 0x836A: 0x30CB, + 0x836B: 0x30CC, + 0x836C: 0x30CD, + 0x836D: 0x30CE, + 0x836E: 0x30CF, + 0x836F: 0x30D0, + 0x8370: 0x30D1, + 0x8371: 0x30D2, + 0x8372: 0x30D3, + 0x8373: 0x30D4, + 0x8374: 0x30D5, + 0x8375: 0x30D6, + 0x8376: 0x30D7, + 0x8377: 0x30D8, + 0x8378: 0x30D9, + 0x8379: 0x30DA, + 0x837A: 0x30DB, + 0x837B: 0x30DC, + 0x837C: 0x30DD, + 0x837D: 0x30DE, + 0x837E: 0x30DF, + 0x8380: 0x30E0, + 0x8381: 0x30E1, + 0x8382: 0x30E2, + 0x8383: 0x30E3, + 0x8384: 0x30E4, + 0x8385: 0x30E5, + 0x8386: 0x30E6, + 0x8387: 0x30E7, + 0x8388: 0x30E8, + 0x8389: 0x30E9, + 0x838A: 0x30EA, + 0x838B: 0x30EB, + 0x838C: 0x30EC, + 0x838D: 0x30ED, + 0x838E: 0x30EE, + 0x838F: 0x30EF, + 0x8390: 0x30F0, + 0x8391: 0x30F1, + 0x8392: 0x30F2, + 0x8393: 0x30F3, + 0x8394: 0x30F4, + 0x8395: 0x30F5, + 0x8396: 0x30F6, + 0x839F: 0x0391, + 0x83A0: 0x0392, + 0x83A1: 0x0393, + 0x83A2: 0x0394, + 0x83A3: 0x0395, + 0x83A4: 0x0396, + 0x83A5: 0x0397, + 0x83A6: 0x0398, + 0x83A7: 0x0399, + 0x83A8: 0x039A, + 0x83A9: 0x039B, + 0x83AA: 0x039C, + 0x83AB: 0x039D, + 0x83AC: 0x039E, + 0x83AD: 0x039F, + 0x83AE: 0x03A0, + 0x83AF: 0x03A1, + 0x83B0: 0x03A3, + 0x83B1: 0x03A4, + 0x83B2: 0x03A5, + 0x83B3: 0x03A6, + 0x83B4: 0x03A7, + 0x83B5: 0x03A8, + 0x83B6: 0x03A9, + 0x83BF: 0x03B1, + 0x83C0: 0x03B2, + 0x83C1: 0x03B3, + 0x83C2: 0x03B4, + 0x83C3: 0x03B5, + 0x83C4: 0x03B6, + 0x83C5: 0x03B7, + 0x83C6: 0x03B8, + 0x83C7: 0x03B9, + 0x83C8: 0x03BA, + 0x83C9: 0x03BB, + 0x83CA: 0x03BC, + 0x83CB: 0x03BD, + 0x83CC: 0x03BE, + 0x83CD: 0x03BF, + 0x83CE: 0x03C0, + 0x83CF: 0x03C1, + 0x83D0: 0x03C3, + 0x83D1: 0x03C4, + 0x83D2: 0x03C5, + 0x83D3: 0x03C6, + 0x83D4: 0x03C7, + 0x83D5: 0x03C8, + 0x83D6: 0x03C9, + 0x8440: 0x0410, + 0x8441: 0x0411, + 0x8442: 0x0412, + 0x8443: 0x0413, + 0x8444: 0x0414, + 0x8445: 0x0415, + 0x8446: 0x0401, + 0x8447: 0x0416, + 0x8448: 0x0417, + 0x8449: 0x0418, + 0x844A: 0x0419, + 0x844B: 0x041A, + 0x844C: 0x041B, + 0x844D: 0x041C, + 0x844E: 0x041D, + 0x844F: 0x041E, + 0x8450: 0x041F, + 0x8451: 0x0420, + 0x8452: 0x0421, + 0x8453: 0x0422, + 0x8454: 0x0423, + 0x8455: 0x0424, + 0x8456: 0x0425, + 0x8457: 0x0426, + 0x8458: 0x0427, + 0x8459: 0x0428, + 0x845A: 0x0429, + 0x845B: 0x042A, + 0x845C: 0x042B, + 0x845D: 0x042C, + 0x845E: 0x042D, + 0x845F: 0x042E, + 0x8460: 0x042F, + 0x8470: 0x0430, + 0x8471: 0x0431, + 0x8472: 0x0432, + 0x8473: 0x0433, + 0x8474: 0x0434, + 0x8475: 0x0435, + 0x8476: 0x0451, + 0x8477: 0x0436, + 0x8478: 0x0437, + 0x8479: 0x0438, + 0x847A: 0x0439, + 0x847B: 0x043A, + 0x847C: 0x043B, + 0x847D: 0x043C, + 0x847E: 0x043D, + 0x8480: 0x043E, + 0x8481: 0x043F, + 0x8482: 0x0440, + 0x8483: 0x0441, + 0x8484: 0x0442, + 0x8485: 0x0443, + 0x8486: 0x0444, + 0x8487: 0x0445, + 0x8488: 0x0446, + 0x8489: 0x0447, + 0x848A: 0x0448, + 0x848B: 0x0449, + 0x848C: 0x044A, + 0x848D: 0x044B, + 0x848E: 0x044C, + 0x848F: 0x044D, + 0x8490: 0x044E, + 0x8491: 0x044F, + 0x849F: 0x2500, + 0x84A0: 0x2502, + 0x84A1: 0x250C, + 0x84A2: 0x2510, + 0x84A3: 0x2518, + 0x84A4: 0x2514, + 0x84A5: 0x251C, + 0x84A6: 0x252C, + 0x84A7: 0x2524, + 0x84A8: 0x2534, + 0x84A9: 0x253C, + 0x84AA: 0x2501, + 0x84AB: 0x2503, + 0x84AC: 0x250F, + 0x84AD: 0x2513, + 0x84AE: 0x251B, + 0x84AF: 0x2517, + 0x84B0: 0x2523, + 0x84B1: 0x2533, + 0x84B2: 0x252B, + 0x84B3: 0x253B, + 0x84B4: 0x254B, + 0x84B5: 0x2520, + 0x84B6: 0x252F, + 0x84B7: 0x2528, + 0x84B8: 0x2537, + 0x84B9: 0x253F, + 0x84BA: 0x251D, + 0x84BB: 0x2530, + 0x84BC: 0x2525, + 0x84BD: 0x2538, + 0x84BE: 0x2542, + 0x889F: 0x4E9C, + 0x88A0: 0x5516, + 0x88A1: 0x5A03, + 0x88A2: 0x963F, + 0x88A3: 0x54C0, + 0x88A4: 0x611B, + 0x88A5: 0x6328, + 0x88A6: 0x59F6, + 0x88A7: 0x9022, + 0x88A8: 0x8475, + 0x88A9: 0x831C, + 0x88AA: 0x7A50, + 0x88AB: 0x60AA, + 0x88AC: 0x63E1, + 0x88AD: 0x6E25, + 0x88AE: 0x65ED, + 0x88AF: 0x8466, + 0x88B0: 0x82A6, + 0x88B1: 0x9BF5, + 0x88B2: 0x6893, + 0x88B3: 0x5727, + 0x88B4: 0x65A1, + 0x88B5: 0x6271, + 0x88B6: 0x5B9B, + 0x88B7: 0x59D0, + 0x88B8: 0x867B, + 0x88B9: 0x98F4, + 0x88BA: 0x7D62, + 0x88BB: 0x7DBE, + 0x88BC: 0x9B8E, + 0x88BD: 0x6216, + 0x88BE: 0x7C9F, + 0x88BF: 0x88B7, + 0x88C0: 0x5B89, + 0x88C1: 0x5EB5, + 0x88C2: 0x6309, + 0x88C3: 0x6697, + 0x88C4: 0x6848, + 0x88C5: 0x95C7, + 0x88C6: 0x978D, + 0x88C7: 0x674F, + 0x88C8: 0x4EE5, + 0x88C9: 0x4F0A, + 0x88CA: 0x4F4D, + 0x88CB: 0x4F9D, + 0x88CC: 0x5049, + 0x88CD: 0x56F2, + 0x88CE: 0x5937, + 0x88CF: 0x59D4, + 0x88D0: 0x5A01, + 0x88D1: 0x5C09, + 0x88D2: 0x60DF, + 0x88D3: 0x610F, + 0x88D4: 0x6170, + 0x88D5: 0x6613, + 0x88D6: 0x6905, + 0x88D7: 0x70BA, + 0x88D8: 0x754F, + 0x88D9: 0x7570, + 0x88DA: 0x79FB, + 0x88DB: 0x7DAD, + 0x88DC: 0x7DEF, + 0x88DD: 0x80C3, + 0x88DE: 0x840E, + 0x88DF: 0x8863, + 0x88E0: 0x8B02, + 0x88E1: 0x9055, + 0x88E2: 0x907A, + 0x88E3: 0x533B, + 0x88E4: 0x4E95, + 0x88E5: 0x4EA5, + 0x88E6: 0x57DF, + 0x88E7: 0x80B2, + 0x88E8: 0x90C1, + 0x88E9: 0x78EF, + 0x88EA: 0x4E00, + 0x88EB: 0x58F1, + 0x88EC: 0x6EA2, + 0x88ED: 0x9038, + 0x88EE: 0x7A32, + 0x88EF: 0x8328, + 0x88F0: 0x828B, + 0x88F1: 0x9C2F, + 0x88F2: 0x5141, + 0x88F3: 0x5370, + 0x88F4: 0x54BD, + 0x88F5: 0x54E1, + 0x88F6: 0x56E0, + 0x88F7: 0x59FB, + 0x88F8: 0x5F15, + 0x88F9: 0x98F2, + 0x88FA: 0x6DEB, + 0x88FB: 0x80E4, + 0x88FC: 0x852D, + 0x8940: 0x9662, + 0x8941: 0x9670, + 0x8942: 0x96A0, + 0x8943: 0x97FB, + 0x8944: 0x540B, + 0x8945: 0x53F3, + 0x8946: 0x5B87, + 0x8947: 0x70CF, + 0x8948: 0x7FBD, + 0x8949: 0x8FC2, + 0x894A: 0x96E8, + 0x894B: 0x536F, + 0x894C: 0x9D5C, + 0x894D: 0x7ABA, + 0x894E: 0x4E11, + 0x894F: 0x7893, + 0x8950: 0x81FC, + 0x8951: 0x6E26, + 0x8952: 0x5618, + 0x8953: 0x5504, + 0x8954: 0x6B1D, + 0x8955: 0x851A, + 0x8956: 0x9C3B, + 0x8957: 0x59E5, + 0x8958: 0x53A9, + 0x8959: 0x6D66, + 0x895A: 0x74DC, + 0x895B: 0x958F, + 0x895C: 0x5642, + 0x895D: 0x4E91, + 0x895E: 0x904B, + 0x895F: 0x96F2, + 0x8960: 0x834F, + 0x8961: 0x990C, + 0x8962: 0x53E1, + 0x8963: 0x55B6, + 0x8964: 0x5B30, + 0x8965: 0x5F71, + 0x8966: 0x6620, + 0x8967: 0x66F3, + 0x8968: 0x6804, + 0x8969: 0x6C38, + 0x896A: 0x6CF3, + 0x896B: 0x6D29, + 0x896C: 0x745B, + 0x896D: 0x76C8, + 0x896E: 0x7A4E, + 0x896F: 0x9834, + 0x8970: 0x82F1, + 0x8971: 0x885B, + 0x8972: 0x8A60, + 0x8973: 0x92ED, + 0x8974: 0x6DB2, + 0x8975: 0x75AB, + 0x8976: 0x76CA, + 0x8977: 0x99C5, + 0x8978: 0x60A6, + 0x8979: 0x8B01, + 0x897A: 0x8D8A, + 0x897B: 0x95B2, + 0x897C: 0x698E, + 0x897D: 0x53AD, + 0x897E: 0x5186, + 0x8980: 0x5712, + 0x8981: 0x5830, + 0x8982: 0x5944, + 0x8983: 0x5BB4, + 0x8984: 0x5EF6, + 0x8985: 0x6028, + 0x8986: 0x63A9, + 0x8987: 0x63F4, + 0x8988: 0x6CBF, + 0x8989: 0x6F14, + 0x898A: 0x708E, + 0x898B: 0x7114, + 0x898C: 0x7159, + 0x898D: 0x71D5, + 0x898E: 0x733F, + 0x898F: 0x7E01, + 0x8990: 0x8276, + 0x8991: 0x82D1, + 0x8992: 0x8597, + 0x8993: 0x9060, + 0x8994: 0x925B, + 0x8995: 0x9D1B, + 0x8996: 0x5869, + 0x8997: 0x65BC, + 0x8998: 0x6C5A, + 0x8999: 0x7525, + 0x899A: 0x51F9, + 0x899B: 0x592E, + 0x899C: 0x5965, + 0x899D: 0x5F80, + 0x899E: 0x5FDC, + 0x899F: 0x62BC, + 0x89A0: 0x65FA, + 0x89A1: 0x6A2A, + 0x89A2: 0x6B27, + 0x89A3: 0x6BB4, + 0x89A4: 0x738B, + 0x89A5: 0x7FC1, + 0x89A6: 0x8956, + 0x89A7: 0x9D2C, + 0x89A8: 0x9D0E, + 0x89A9: 0x9EC4, + 0x89AA: 0x5CA1, + 0x89AB: 0x6C96, + 0x89AC: 0x837B, + 0x89AD: 0x5104, + 0x89AE: 0x5C4B, + 0x89AF: 0x61B6, + 0x89B0: 0x81C6, + 0x89B1: 0x6876, + 0x89B2: 0x7261, + 0x89B3: 0x4E59, + 0x89B4: 0x4FFA, + 0x89B5: 0x5378, + 0x89B6: 0x6069, + 0x89B7: 0x6E29, + 0x89B8: 0x7A4F, + 0x89B9: 0x97F3, + 0x89BA: 0x4E0B, + 0x89BB: 0x5316, + 0x89BC: 0x4EEE, + 0x89BD: 0x4F55, + 0x89BE: 0x4F3D, + 0x89BF: 0x4FA1, + 0x89C0: 0x4F73, + 0x89C1: 0x52A0, + 0x89C2: 0x53EF, + 0x89C3: 0x5609, + 0x89C4: 0x590F, + 0x89C5: 0x5AC1, + 0x89C6: 0x5BB6, + 0x89C7: 0x5BE1, + 0x89C8: 0x79D1, + 0x89C9: 0x6687, + 0x89CA: 0x679C, + 0x89CB: 0x67B6, + 0x89CC: 0x6B4C, + 0x89CD: 0x6CB3, + 0x89CE: 0x706B, + 0x89CF: 0x73C2, + 0x89D0: 0x798D, + 0x89D1: 0x79BE, + 0x89D2: 0x7A3C, + 0x89D3: 0x7B87, + 0x89D4: 0x82B1, + 0x89D5: 0x82DB, + 0x89D6: 0x8304, + 0x89D7: 0x8377, + 0x89D8: 0x83EF, + 0x89D9: 0x83D3, + 0x89DA: 0x8766, + 0x89DB: 0x8AB2, + 0x89DC: 0x5629, + 0x89DD: 0x8CA8, + 0x89DE: 0x8FE6, + 0x89DF: 0x904E, + 0x89E0: 0x971E, + 0x89E1: 0x868A, + 0x89E2: 0x4FC4, + 0x89E3: 0x5CE8, + 0x89E4: 0x6211, + 0x89E5: 0x7259, + 0x89E6: 0x753B, + 0x89E7: 0x81E5, + 0x89E8: 0x82BD, + 0x89E9: 0x86FE, + 0x89EA: 0x8CC0, + 0x89EB: 0x96C5, + 0x89EC: 0x9913, + 0x89ED: 0x99D5, + 0x89EE: 0x4ECB, + 0x89EF: 0x4F1A, + 0x89F0: 0x89E3, + 0x89F1: 0x56DE, + 0x89F2: 0x584A, + 0x89F3: 0x58CA, + 0x89F4: 0x5EFB, + 0x89F5: 0x5FEB, + 0x89F6: 0x602A, + 0x89F7: 0x6094, + 0x89F8: 0x6062, + 0x89F9: 0x61D0, + 0x89FA: 0x6212, + 0x89FB: 0x62D0, + 0x89FC: 0x6539, + 0x8A40: 0x9B41, + 0x8A41: 0x6666, + 0x8A42: 0x68B0, + 0x8A43: 0x6D77, + 0x8A44: 0x7070, + 0x8A45: 0x754C, + 0x8A46: 0x7686, + 0x8A47: 0x7D75, + 0x8A48: 0x82A5, + 0x8A49: 0x87F9, + 0x8A4A: 0x958B, + 0x8A4B: 0x968E, + 0x8A4C: 0x8C9D, + 0x8A4D: 0x51F1, + 0x8A4E: 0x52BE, + 0x8A4F: 0x5916, + 0x8A50: 0x54B3, + 0x8A51: 0x5BB3, + 0x8A52: 0x5D16, + 0x8A53: 0x6168, + 0x8A54: 0x6982, + 0x8A55: 0x6DAF, + 0x8A56: 0x788D, + 0x8A57: 0x84CB, + 0x8A58: 0x8857, + 0x8A59: 0x8A72, + 0x8A5A: 0x93A7, + 0x8A5B: 0x9AB8, + 0x8A5C: 0x6D6C, + 0x8A5D: 0x99A8, + 0x8A5E: 0x86D9, + 0x8A5F: 0x57A3, + 0x8A60: 0x67FF, + 0x8A61: 0x86CE, + 0x8A62: 0x920E, + 0x8A63: 0x5283, + 0x8A64: 0x5687, + 0x8A65: 0x5404, + 0x8A66: 0x5ED3, + 0x8A67: 0x62E1, + 0x8A68: 0x64B9, + 0x8A69: 0x683C, + 0x8A6A: 0x6838, + 0x8A6B: 0x6BBB, + 0x8A6C: 0x7372, + 0x8A6D: 0x78BA, + 0x8A6E: 0x7A6B, + 0x8A6F: 0x899A, + 0x8A70: 0x89D2, + 0x8A71: 0x8D6B, + 0x8A72: 0x8F03, + 0x8A73: 0x90ED, + 0x8A74: 0x95A3, + 0x8A75: 0x9694, + 0x8A76: 0x9769, + 0x8A77: 0x5B66, + 0x8A78: 0x5CB3, + 0x8A79: 0x697D, + 0x8A7A: 0x984D, + 0x8A7B: 0x984E, + 0x8A7C: 0x639B, + 0x8A7D: 0x7B20, + 0x8A7E: 0x6A2B, + 0x8A80: 0x6A7F, + 0x8A81: 0x68B6, + 0x8A82: 0x9C0D, + 0x8A83: 0x6F5F, + 0x8A84: 0x5272, + 0x8A85: 0x559D, + 0x8A86: 0x6070, + 0x8A87: 0x62EC, + 0x8A88: 0x6D3B, + 0x8A89: 0x6E07, + 0x8A8A: 0x6ED1, + 0x8A8B: 0x845B, + 0x8A8C: 0x8910, + 0x8A8D: 0x8F44, + 0x8A8E: 0x4E14, + 0x8A8F: 0x9C39, + 0x8A90: 0x53F6, + 0x8A91: 0x691B, + 0x8A92: 0x6A3A, + 0x8A93: 0x9784, + 0x8A94: 0x682A, + 0x8A95: 0x515C, + 0x8A96: 0x7AC3, + 0x8A97: 0x84B2, + 0x8A98: 0x91DC, + 0x8A99: 0x938C, + 0x8A9A: 0x565B, + 0x8A9B: 0x9D28, + 0x8A9C: 0x6822, + 0x8A9D: 0x8305, + 0x8A9E: 0x8431, + 0x8A9F: 0x7CA5, + 0x8AA0: 0x5208, + 0x8AA1: 0x82C5, + 0x8AA2: 0x74E6, + 0x8AA3: 0x4E7E, + 0x8AA4: 0x4F83, + 0x8AA5: 0x51A0, + 0x8AA6: 0x5BD2, + 0x8AA7: 0x520A, + 0x8AA8: 0x52D8, + 0x8AA9: 0x52E7, + 0x8AAA: 0x5DFB, + 0x8AAB: 0x559A, + 0x8AAC: 0x582A, + 0x8AAD: 0x59E6, + 0x8AAE: 0x5B8C, + 0x8AAF: 0x5B98, + 0x8AB0: 0x5BDB, + 0x8AB1: 0x5E72, + 0x8AB2: 0x5E79, + 0x8AB3: 0x60A3, + 0x8AB4: 0x611F, + 0x8AB5: 0x6163, + 0x8AB6: 0x61BE, + 0x8AB7: 0x63DB, + 0x8AB8: 0x6562, + 0x8AB9: 0x67D1, + 0x8ABA: 0x6853, + 0x8ABB: 0x68FA, + 0x8ABC: 0x6B3E, + 0x8ABD: 0x6B53, + 0x8ABE: 0x6C57, + 0x8ABF: 0x6F22, + 0x8AC0: 0x6F97, + 0x8AC1: 0x6F45, + 0x8AC2: 0x74B0, + 0x8AC3: 0x7518, + 0x8AC4: 0x76E3, + 0x8AC5: 0x770B, + 0x8AC6: 0x7AFF, + 0x8AC7: 0x7BA1, + 0x8AC8: 0x7C21, + 0x8AC9: 0x7DE9, + 0x8ACA: 0x7F36, + 0x8ACB: 0x7FF0, + 0x8ACC: 0x809D, + 0x8ACD: 0x8266, + 0x8ACE: 0x839E, + 0x8ACF: 0x89B3, + 0x8AD0: 0x8ACC, + 0x8AD1: 0x8CAB, + 0x8AD2: 0x9084, + 0x8AD3: 0x9451, + 0x8AD4: 0x9593, + 0x8AD5: 0x9591, + 0x8AD6: 0x95A2, + 0x8AD7: 0x9665, + 0x8AD8: 0x97D3, + 0x8AD9: 0x9928, + 0x8ADA: 0x8218, + 0x8ADB: 0x4E38, + 0x8ADC: 0x542B, + 0x8ADD: 0x5CB8, + 0x8ADE: 0x5DCC, + 0x8ADF: 0x73A9, + 0x8AE0: 0x764C, + 0x8AE1: 0x773C, + 0x8AE2: 0x5CA9, + 0x8AE3: 0x7FEB, + 0x8AE4: 0x8D0B, + 0x8AE5: 0x96C1, + 0x8AE6: 0x9811, + 0x8AE7: 0x9854, + 0x8AE8: 0x9858, + 0x8AE9: 0x4F01, + 0x8AEA: 0x4F0E, + 0x8AEB: 0x5371, + 0x8AEC: 0x559C, + 0x8AED: 0x5668, + 0x8AEE: 0x57FA, + 0x8AEF: 0x5947, + 0x8AF0: 0x5B09, + 0x8AF1: 0x5BC4, + 0x8AF2: 0x5C90, + 0x8AF3: 0x5E0C, + 0x8AF4: 0x5E7E, + 0x8AF5: 0x5FCC, + 0x8AF6: 0x63EE, + 0x8AF7: 0x673A, + 0x8AF8: 0x65D7, + 0x8AF9: 0x65E2, + 0x8AFA: 0x671F, + 0x8AFB: 0x68CB, + 0x8AFC: 0x68C4, + 0x8B40: 0x6A5F, + 0x8B41: 0x5E30, + 0x8B42: 0x6BC5, + 0x8B43: 0x6C17, + 0x8B44: 0x6C7D, + 0x8B45: 0x757F, + 0x8B46: 0x7948, + 0x8B47: 0x5B63, + 0x8B48: 0x7A00, + 0x8B49: 0x7D00, + 0x8B4A: 0x5FBD, + 0x8B4B: 0x898F, + 0x8B4C: 0x8A18, + 0x8B4D: 0x8CB4, + 0x8B4E: 0x8D77, + 0x8B4F: 0x8ECC, + 0x8B50: 0x8F1D, + 0x8B51: 0x98E2, + 0x8B52: 0x9A0E, + 0x8B53: 0x9B3C, + 0x8B54: 0x4E80, + 0x8B55: 0x507D, + 0x8B56: 0x5100, + 0x8B57: 0x5993, + 0x8B58: 0x5B9C, + 0x8B59: 0x622F, + 0x8B5A: 0x6280, + 0x8B5B: 0x64EC, + 0x8B5C: 0x6B3A, + 0x8B5D: 0x72A0, + 0x8B5E: 0x7591, + 0x8B5F: 0x7947, + 0x8B60: 0x7FA9, + 0x8B61: 0x87FB, + 0x8B62: 0x8ABC, + 0x8B63: 0x8B70, + 0x8B64: 0x63AC, + 0x8B65: 0x83CA, + 0x8B66: 0x97A0, + 0x8B67: 0x5409, + 0x8B68: 0x5403, + 0x8B69: 0x55AB, + 0x8B6A: 0x6854, + 0x8B6B: 0x6A58, + 0x8B6C: 0x8A70, + 0x8B6D: 0x7827, + 0x8B6E: 0x6775, + 0x8B6F: 0x9ECD, + 0x8B70: 0x5374, + 0x8B71: 0x5BA2, + 0x8B72: 0x811A, + 0x8B73: 0x8650, + 0x8B74: 0x9006, + 0x8B75: 0x4E18, + 0x8B76: 0x4E45, + 0x8B77: 0x4EC7, + 0x8B78: 0x4F11, + 0x8B79: 0x53CA, + 0x8B7A: 0x5438, + 0x8B7B: 0x5BAE, + 0x8B7C: 0x5F13, + 0x8B7D: 0x6025, + 0x8B7E: 0x6551, + 0x8B80: 0x673D, + 0x8B81: 0x6C42, + 0x8B82: 0x6C72, + 0x8B83: 0x6CE3, + 0x8B84: 0x7078, + 0x8B85: 0x7403, + 0x8B86: 0x7A76, + 0x8B87: 0x7AAE, + 0x8B88: 0x7B08, + 0x8B89: 0x7D1A, + 0x8B8A: 0x7CFE, + 0x8B8B: 0x7D66, + 0x8B8C: 0x65E7, + 0x8B8D: 0x725B, + 0x8B8E: 0x53BB, + 0x8B8F: 0x5C45, + 0x8B90: 0x5DE8, + 0x8B91: 0x62D2, + 0x8B92: 0x62E0, + 0x8B93: 0x6319, + 0x8B94: 0x6E20, + 0x8B95: 0x865A, + 0x8B96: 0x8A31, + 0x8B97: 0x8DDD, + 0x8B98: 0x92F8, + 0x8B99: 0x6F01, + 0x8B9A: 0x79A6, + 0x8B9B: 0x9B5A, + 0x8B9C: 0x4EA8, + 0x8B9D: 0x4EAB, + 0x8B9E: 0x4EAC, + 0x8B9F: 0x4F9B, + 0x8BA0: 0x4FA0, + 0x8BA1: 0x50D1, + 0x8BA2: 0x5147, + 0x8BA3: 0x7AF6, + 0x8BA4: 0x5171, + 0x8BA5: 0x51F6, + 0x8BA6: 0x5354, + 0x8BA7: 0x5321, + 0x8BA8: 0x537F, + 0x8BA9: 0x53EB, + 0x8BAA: 0x55AC, + 0x8BAB: 0x5883, + 0x8BAC: 0x5CE1, + 0x8BAD: 0x5F37, + 0x8BAE: 0x5F4A, + 0x8BAF: 0x602F, + 0x8BB0: 0x6050, + 0x8BB1: 0x606D, + 0x8BB2: 0x631F, + 0x8BB3: 0x6559, + 0x8BB4: 0x6A4B, + 0x8BB5: 0x6CC1, + 0x8BB6: 0x72C2, + 0x8BB7: 0x72ED, + 0x8BB8: 0x77EF, + 0x8BB9: 0x80F8, + 0x8BBA: 0x8105, + 0x8BBB: 0x8208, + 0x8BBC: 0x854E, + 0x8BBD: 0x90F7, + 0x8BBE: 0x93E1, + 0x8BBF: 0x97FF, + 0x8BC0: 0x9957, + 0x8BC1: 0x9A5A, + 0x8BC2: 0x4EF0, + 0x8BC3: 0x51DD, + 0x8BC4: 0x5C2D, + 0x8BC5: 0x6681, + 0x8BC6: 0x696D, + 0x8BC7: 0x5C40, + 0x8BC8: 0x66F2, + 0x8BC9: 0x6975, + 0x8BCA: 0x7389, + 0x8BCB: 0x6850, + 0x8BCC: 0x7C81, + 0x8BCD: 0x50C5, + 0x8BCE: 0x52E4, + 0x8BCF: 0x5747, + 0x8BD0: 0x5DFE, + 0x8BD1: 0x9326, + 0x8BD2: 0x65A4, + 0x8BD3: 0x6B23, + 0x8BD4: 0x6B3D, + 0x8BD5: 0x7434, + 0x8BD6: 0x7981, + 0x8BD7: 0x79BD, + 0x8BD8: 0x7B4B, + 0x8BD9: 0x7DCA, + 0x8BDA: 0x82B9, + 0x8BDB: 0x83CC, + 0x8BDC: 0x887F, + 0x8BDD: 0x895F, + 0x8BDE: 0x8B39, + 0x8BDF: 0x8FD1, + 0x8BE0: 0x91D1, + 0x8BE1: 0x541F, + 0x8BE2: 0x9280, + 0x8BE3: 0x4E5D, + 0x8BE4: 0x5036, + 0x8BE5: 0x53E5, + 0x8BE6: 0x533A, + 0x8BE7: 0x72D7, + 0x8BE8: 0x7396, + 0x8BE9: 0x77E9, + 0x8BEA: 0x82E6, + 0x8BEB: 0x8EAF, + 0x8BEC: 0x99C6, + 0x8BED: 0x99C8, + 0x8BEE: 0x99D2, + 0x8BEF: 0x5177, + 0x8BF0: 0x611A, + 0x8BF1: 0x865E, + 0x8BF2: 0x55B0, + 0x8BF3: 0x7A7A, + 0x8BF4: 0x5076, + 0x8BF5: 0x5BD3, + 0x8BF6: 0x9047, + 0x8BF7: 0x9685, + 0x8BF8: 0x4E32, + 0x8BF9: 0x6ADB, + 0x8BFA: 0x91E7, + 0x8BFB: 0x5C51, + 0x8BFC: 0x5C48, + 0x8C40: 0x6398, + 0x8C41: 0x7A9F, + 0x8C42: 0x6C93, + 0x8C43: 0x9774, + 0x8C44: 0x8F61, + 0x8C45: 0x7AAA, + 0x8C46: 0x718A, + 0x8C47: 0x9688, + 0x8C48: 0x7C82, + 0x8C49: 0x6817, + 0x8C4A: 0x7E70, + 0x8C4B: 0x6851, + 0x8C4C: 0x936C, + 0x8C4D: 0x52F2, + 0x8C4E: 0x541B, + 0x8C4F: 0x85AB, + 0x8C50: 0x8A13, + 0x8C51: 0x7FA4, + 0x8C52: 0x8ECD, + 0x8C53: 0x90E1, + 0x8C54: 0x5366, + 0x8C55: 0x8888, + 0x8C56: 0x7941, + 0x8C57: 0x4FC2, + 0x8C58: 0x50BE, + 0x8C59: 0x5211, + 0x8C5A: 0x5144, + 0x8C5B: 0x5553, + 0x8C5C: 0x572D, + 0x8C5D: 0x73EA, + 0x8C5E: 0x578B, + 0x8C5F: 0x5951, + 0x8C60: 0x5F62, + 0x8C61: 0x5F84, + 0x8C62: 0x6075, + 0x8C63: 0x6176, + 0x8C64: 0x6167, + 0x8C65: 0x61A9, + 0x8C66: 0x63B2, + 0x8C67: 0x643A, + 0x8C68: 0x656C, + 0x8C69: 0x666F, + 0x8C6A: 0x6842, + 0x8C6B: 0x6E13, + 0x8C6C: 0x7566, + 0x8C6D: 0x7A3D, + 0x8C6E: 0x7CFB, + 0x8C6F: 0x7D4C, + 0x8C70: 0x7D99, + 0x8C71: 0x7E4B, + 0x8C72: 0x7F6B, + 0x8C73: 0x830E, + 0x8C74: 0x834A, + 0x8C75: 0x86CD, + 0x8C76: 0x8A08, + 0x8C77: 0x8A63, + 0x8C78: 0x8B66, + 0x8C79: 0x8EFD, + 0x8C7A: 0x981A, + 0x8C7B: 0x9D8F, + 0x8C7C: 0x82B8, + 0x8C7D: 0x8FCE, + 0x8C7E: 0x9BE8, + 0x8C80: 0x5287, + 0x8C81: 0x621F, + 0x8C82: 0x6483, + 0x8C83: 0x6FC0, + 0x8C84: 0x9699, + 0x8C85: 0x6841, + 0x8C86: 0x5091, + 0x8C87: 0x6B20, + 0x8C88: 0x6C7A, + 0x8C89: 0x6F54, + 0x8C8A: 0x7A74, + 0x8C8B: 0x7D50, + 0x8C8C: 0x8840, + 0x8C8D: 0x8A23, + 0x8C8E: 0x6708, + 0x8C8F: 0x4EF6, + 0x8C90: 0x5039, + 0x8C91: 0x5026, + 0x8C92: 0x5065, + 0x8C93: 0x517C, + 0x8C94: 0x5238, + 0x8C95: 0x5263, + 0x8C96: 0x55A7, + 0x8C97: 0x570F, + 0x8C98: 0x5805, + 0x8C99: 0x5ACC, + 0x8C9A: 0x5EFA, + 0x8C9B: 0x61B2, + 0x8C9C: 0x61F8, + 0x8C9D: 0x62F3, + 0x8C9E: 0x6372, + 0x8C9F: 0x691C, + 0x8CA0: 0x6A29, + 0x8CA1: 0x727D, + 0x8CA2: 0x72AC, + 0x8CA3: 0x732E, + 0x8CA4: 0x7814, + 0x8CA5: 0x786F, + 0x8CA6: 0x7D79, + 0x8CA7: 0x770C, + 0x8CA8: 0x80A9, + 0x8CA9: 0x898B, + 0x8CAA: 0x8B19, + 0x8CAB: 0x8CE2, + 0x8CAC: 0x8ED2, + 0x8CAD: 0x9063, + 0x8CAE: 0x9375, + 0x8CAF: 0x967A, + 0x8CB0: 0x9855, + 0x8CB1: 0x9A13, + 0x8CB2: 0x9E78, + 0x8CB3: 0x5143, + 0x8CB4: 0x539F, + 0x8CB5: 0x53B3, + 0x8CB6: 0x5E7B, + 0x8CB7: 0x5F26, + 0x8CB8: 0x6E1B, + 0x8CB9: 0x6E90, + 0x8CBA: 0x7384, + 0x8CBB: 0x73FE, + 0x8CBC: 0x7D43, + 0x8CBD: 0x8237, + 0x8CBE: 0x8A00, + 0x8CBF: 0x8AFA, + 0x8CC0: 0x9650, + 0x8CC1: 0x4E4E, + 0x8CC2: 0x500B, + 0x8CC3: 0x53E4, + 0x8CC4: 0x547C, + 0x8CC5: 0x56FA, + 0x8CC6: 0x59D1, + 0x8CC7: 0x5B64, + 0x8CC8: 0x5DF1, + 0x8CC9: 0x5EAB, + 0x8CCA: 0x5F27, + 0x8CCB: 0x6238, + 0x8CCC: 0x6545, + 0x8CCD: 0x67AF, + 0x8CCE: 0x6E56, + 0x8CCF: 0x72D0, + 0x8CD0: 0x7CCA, + 0x8CD1: 0x88B4, + 0x8CD2: 0x80A1, + 0x8CD3: 0x80E1, + 0x8CD4: 0x83F0, + 0x8CD5: 0x864E, + 0x8CD6: 0x8A87, + 0x8CD7: 0x8DE8, + 0x8CD8: 0x9237, + 0x8CD9: 0x96C7, + 0x8CDA: 0x9867, + 0x8CDB: 0x9F13, + 0x8CDC: 0x4E94, + 0x8CDD: 0x4E92, + 0x8CDE: 0x4F0D, + 0x8CDF: 0x5348, + 0x8CE0: 0x5449, + 0x8CE1: 0x543E, + 0x8CE2: 0x5A2F, + 0x8CE3: 0x5F8C, + 0x8CE4: 0x5FA1, + 0x8CE5: 0x609F, + 0x8CE6: 0x68A7, + 0x8CE7: 0x6A8E, + 0x8CE8: 0x745A, + 0x8CE9: 0x7881, + 0x8CEA: 0x8A9E, + 0x8CEB: 0x8AA4, + 0x8CEC: 0x8B77, + 0x8CED: 0x9190, + 0x8CEE: 0x4E5E, + 0x8CEF: 0x9BC9, + 0x8CF0: 0x4EA4, + 0x8CF1: 0x4F7C, + 0x8CF2: 0x4FAF, + 0x8CF3: 0x5019, + 0x8CF4: 0x5016, + 0x8CF5: 0x5149, + 0x8CF6: 0x516C, + 0x8CF7: 0x529F, + 0x8CF8: 0x52B9, + 0x8CF9: 0x52FE, + 0x8CFA: 0x539A, + 0x8CFB: 0x53E3, + 0x8CFC: 0x5411, + 0x8D40: 0x540E, + 0x8D41: 0x5589, + 0x8D42: 0x5751, + 0x8D43: 0x57A2, + 0x8D44: 0x597D, + 0x8D45: 0x5B54, + 0x8D46: 0x5B5D, + 0x8D47: 0x5B8F, + 0x8D48: 0x5DE5, + 0x8D49: 0x5DE7, + 0x8D4A: 0x5DF7, + 0x8D4B: 0x5E78, + 0x8D4C: 0x5E83, + 0x8D4D: 0x5E9A, + 0x8D4E: 0x5EB7, + 0x8D4F: 0x5F18, + 0x8D50: 0x6052, + 0x8D51: 0x614C, + 0x8D52: 0x6297, + 0x8D53: 0x62D8, + 0x8D54: 0x63A7, + 0x8D55: 0x653B, + 0x8D56: 0x6602, + 0x8D57: 0x6643, + 0x8D58: 0x66F4, + 0x8D59: 0x676D, + 0x8D5A: 0x6821, + 0x8D5B: 0x6897, + 0x8D5C: 0x69CB, + 0x8D5D: 0x6C5F, + 0x8D5E: 0x6D2A, + 0x8D5F: 0x6D69, + 0x8D60: 0x6E2F, + 0x8D61: 0x6E9D, + 0x8D62: 0x7532, + 0x8D63: 0x7687, + 0x8D64: 0x786C, + 0x8D65: 0x7A3F, + 0x8D66: 0x7CE0, + 0x8D67: 0x7D05, + 0x8D68: 0x7D18, + 0x8D69: 0x7D5E, + 0x8D6A: 0x7DB1, + 0x8D6B: 0x8015, + 0x8D6C: 0x8003, + 0x8D6D: 0x80AF, + 0x8D6E: 0x80B1, + 0x8D6F: 0x8154, + 0x8D70: 0x818F, + 0x8D71: 0x822A, + 0x8D72: 0x8352, + 0x8D73: 0x884C, + 0x8D74: 0x8861, + 0x8D75: 0x8B1B, + 0x8D76: 0x8CA2, + 0x8D77: 0x8CFC, + 0x8D78: 0x90CA, + 0x8D79: 0x9175, + 0x8D7A: 0x9271, + 0x8D7B: 0x783F, + 0x8D7C: 0x92FC, + 0x8D7D: 0x95A4, + 0x8D7E: 0x964D, + 0x8D80: 0x9805, + 0x8D81: 0x9999, + 0x8D82: 0x9AD8, + 0x8D83: 0x9D3B, + 0x8D84: 0x525B, + 0x8D85: 0x52AB, + 0x8D86: 0x53F7, + 0x8D87: 0x5408, + 0x8D88: 0x58D5, + 0x8D89: 0x62F7, + 0x8D8A: 0x6FE0, + 0x8D8B: 0x8C6A, + 0x8D8C: 0x8F5F, + 0x8D8D: 0x9EB9, + 0x8D8E: 0x514B, + 0x8D8F: 0x523B, + 0x8D90: 0x544A, + 0x8D91: 0x56FD, + 0x8D92: 0x7A40, + 0x8D93: 0x9177, + 0x8D94: 0x9D60, + 0x8D95: 0x9ED2, + 0x8D96: 0x7344, + 0x8D97: 0x6F09, + 0x8D98: 0x8170, + 0x8D99: 0x7511, + 0x8D9A: 0x5FFD, + 0x8D9B: 0x60DA, + 0x8D9C: 0x9AA8, + 0x8D9D: 0x72DB, + 0x8D9E: 0x8FBC, + 0x8D9F: 0x6B64, + 0x8DA0: 0x9803, + 0x8DA1: 0x4ECA, + 0x8DA2: 0x56F0, + 0x8DA3: 0x5764, + 0x8DA4: 0x58BE, + 0x8DA5: 0x5A5A, + 0x8DA6: 0x6068, + 0x8DA7: 0x61C7, + 0x8DA8: 0x660F, + 0x8DA9: 0x6606, + 0x8DAA: 0x6839, + 0x8DAB: 0x68B1, + 0x8DAC: 0x6DF7, + 0x8DAD: 0x75D5, + 0x8DAE: 0x7D3A, + 0x8DAF: 0x826E, + 0x8DB0: 0x9B42, + 0x8DB1: 0x4E9B, + 0x8DB2: 0x4F50, + 0x8DB3: 0x53C9, + 0x8DB4: 0x5506, + 0x8DB5: 0x5D6F, + 0x8DB6: 0x5DE6, + 0x8DB7: 0x5DEE, + 0x8DB8: 0x67FB, + 0x8DB9: 0x6C99, + 0x8DBA: 0x7473, + 0x8DBB: 0x7802, + 0x8DBC: 0x8A50, + 0x8DBD: 0x9396, + 0x8DBE: 0x88DF, + 0x8DBF: 0x5750, + 0x8DC0: 0x5EA7, + 0x8DC1: 0x632B, + 0x8DC2: 0x50B5, + 0x8DC3: 0x50AC, + 0x8DC4: 0x518D, + 0x8DC5: 0x6700, + 0x8DC6: 0x54C9, + 0x8DC7: 0x585E, + 0x8DC8: 0x59BB, + 0x8DC9: 0x5BB0, + 0x8DCA: 0x5F69, + 0x8DCB: 0x624D, + 0x8DCC: 0x63A1, + 0x8DCD: 0x683D, + 0x8DCE: 0x6B73, + 0x8DCF: 0x6E08, + 0x8DD0: 0x707D, + 0x8DD1: 0x91C7, + 0x8DD2: 0x7280, + 0x8DD3: 0x7815, + 0x8DD4: 0x7826, + 0x8DD5: 0x796D, + 0x8DD6: 0x658E, + 0x8DD7: 0x7D30, + 0x8DD8: 0x83DC, + 0x8DD9: 0x88C1, + 0x8DDA: 0x8F09, + 0x8DDB: 0x969B, + 0x8DDC: 0x5264, + 0x8DDD: 0x5728, + 0x8DDE: 0x6750, + 0x8DDF: 0x7F6A, + 0x8DE0: 0x8CA1, + 0x8DE1: 0x51B4, + 0x8DE2: 0x5742, + 0x8DE3: 0x962A, + 0x8DE4: 0x583A, + 0x8DE5: 0x698A, + 0x8DE6: 0x80B4, + 0x8DE7: 0x54B2, + 0x8DE8: 0x5D0E, + 0x8DE9: 0x57FC, + 0x8DEA: 0x7895, + 0x8DEB: 0x9DFA, + 0x8DEC: 0x4F5C, + 0x8DED: 0x524A, + 0x8DEE: 0x548B, + 0x8DEF: 0x643E, + 0x8DF0: 0x6628, + 0x8DF1: 0x6714, + 0x8DF2: 0x67F5, + 0x8DF3: 0x7A84, + 0x8DF4: 0x7B56, + 0x8DF5: 0x7D22, + 0x8DF6: 0x932F, + 0x8DF7: 0x685C, + 0x8DF8: 0x9BAD, + 0x8DF9: 0x7B39, + 0x8DFA: 0x5319, + 0x8DFB: 0x518A, + 0x8DFC: 0x5237, + 0x8E40: 0x5BDF, + 0x8E41: 0x62F6, + 0x8E42: 0x64AE, + 0x8E43: 0x64E6, + 0x8E44: 0x672D, + 0x8E45: 0x6BBA, + 0x8E46: 0x85A9, + 0x8E47: 0x96D1, + 0x8E48: 0x7690, + 0x8E49: 0x9BD6, + 0x8E4A: 0x634C, + 0x8E4B: 0x9306, + 0x8E4C: 0x9BAB, + 0x8E4D: 0x76BF, + 0x8E4E: 0x6652, + 0x8E4F: 0x4E09, + 0x8E50: 0x5098, + 0x8E51: 0x53C2, + 0x8E52: 0x5C71, + 0x8E53: 0x60E8, + 0x8E54: 0x6492, + 0x8E55: 0x6563, + 0x8E56: 0x685F, + 0x8E57: 0x71E6, + 0x8E58: 0x73CA, + 0x8E59: 0x7523, + 0x8E5A: 0x7B97, + 0x8E5B: 0x7E82, + 0x8E5C: 0x8695, + 0x8E5D: 0x8B83, + 0x8E5E: 0x8CDB, + 0x8E5F: 0x9178, + 0x8E60: 0x9910, + 0x8E61: 0x65AC, + 0x8E62: 0x66AB, + 0x8E63: 0x6B8B, + 0x8E64: 0x4ED5, + 0x8E65: 0x4ED4, + 0x8E66: 0x4F3A, + 0x8E67: 0x4F7F, + 0x8E68: 0x523A, + 0x8E69: 0x53F8, + 0x8E6A: 0x53F2, + 0x8E6B: 0x55E3, + 0x8E6C: 0x56DB, + 0x8E6D: 0x58EB, + 0x8E6E: 0x59CB, + 0x8E6F: 0x59C9, + 0x8E70: 0x59FF, + 0x8E71: 0x5B50, + 0x8E72: 0x5C4D, + 0x8E73: 0x5E02, + 0x8E74: 0x5E2B, + 0x8E75: 0x5FD7, + 0x8E76: 0x601D, + 0x8E77: 0x6307, + 0x8E78: 0x652F, + 0x8E79: 0x5B5C, + 0x8E7A: 0x65AF, + 0x8E7B: 0x65BD, + 0x8E7C: 0x65E8, + 0x8E7D: 0x679D, + 0x8E7E: 0x6B62, + 0x8E80: 0x6B7B, + 0x8E81: 0x6C0F, + 0x8E82: 0x7345, + 0x8E83: 0x7949, + 0x8E84: 0x79C1, + 0x8E85: 0x7CF8, + 0x8E86: 0x7D19, + 0x8E87: 0x7D2B, + 0x8E88: 0x80A2, + 0x8E89: 0x8102, + 0x8E8A: 0x81F3, + 0x8E8B: 0x8996, + 0x8E8C: 0x8A5E, + 0x8E8D: 0x8A69, + 0x8E8E: 0x8A66, + 0x8E8F: 0x8A8C, + 0x8E90: 0x8AEE, + 0x8E91: 0x8CC7, + 0x8E92: 0x8CDC, + 0x8E93: 0x96CC, + 0x8E94: 0x98FC, + 0x8E95: 0x6B6F, + 0x8E96: 0x4E8B, + 0x8E97: 0x4F3C, + 0x8E98: 0x4F8D, + 0x8E99: 0x5150, + 0x8E9A: 0x5B57, + 0x8E9B: 0x5BFA, + 0x8E9C: 0x6148, + 0x8E9D: 0x6301, + 0x8E9E: 0x6642, + 0x8E9F: 0x6B21, + 0x8EA0: 0x6ECB, + 0x8EA1: 0x6CBB, + 0x8EA2: 0x723E, + 0x8EA3: 0x74BD, + 0x8EA4: 0x75D4, + 0x8EA5: 0x78C1, + 0x8EA6: 0x793A, + 0x8EA7: 0x800C, + 0x8EA8: 0x8033, + 0x8EA9: 0x81EA, + 0x8EAA: 0x8494, + 0x8EAB: 0x8F9E, + 0x8EAC: 0x6C50, + 0x8EAD: 0x9E7F, + 0x8EAE: 0x5F0F, + 0x8EAF: 0x8B58, + 0x8EB0: 0x9D2B, + 0x8EB1: 0x7AFA, + 0x8EB2: 0x8EF8, + 0x8EB3: 0x5B8D, + 0x8EB4: 0x96EB, + 0x8EB5: 0x4E03, + 0x8EB6: 0x53F1, + 0x8EB7: 0x57F7, + 0x8EB8: 0x5931, + 0x8EB9: 0x5AC9, + 0x8EBA: 0x5BA4, + 0x8EBB: 0x6089, + 0x8EBC: 0x6E7F, + 0x8EBD: 0x6F06, + 0x8EBE: 0x75BE, + 0x8EBF: 0x8CEA, + 0x8EC0: 0x5B9F, + 0x8EC1: 0x8500, + 0x8EC2: 0x7BE0, + 0x8EC3: 0x5072, + 0x8EC4: 0x67F4, + 0x8EC5: 0x829D, + 0x8EC6: 0x5C61, + 0x8EC7: 0x854A, + 0x8EC8: 0x7E1E, + 0x8EC9: 0x820E, + 0x8ECA: 0x5199, + 0x8ECB: 0x5C04, + 0x8ECC: 0x6368, + 0x8ECD: 0x8D66, + 0x8ECE: 0x659C, + 0x8ECF: 0x716E, + 0x8ED0: 0x793E, + 0x8ED1: 0x7D17, + 0x8ED2: 0x8005, + 0x8ED3: 0x8B1D, + 0x8ED4: 0x8ECA, + 0x8ED5: 0x906E, + 0x8ED6: 0x86C7, + 0x8ED7: 0x90AA, + 0x8ED8: 0x501F, + 0x8ED9: 0x52FA, + 0x8EDA: 0x5C3A, + 0x8EDB: 0x6753, + 0x8EDC: 0x707C, + 0x8EDD: 0x7235, + 0x8EDE: 0x914C, + 0x8EDF: 0x91C8, + 0x8EE0: 0x932B, + 0x8EE1: 0x82E5, + 0x8EE2: 0x5BC2, + 0x8EE3: 0x5F31, + 0x8EE4: 0x60F9, + 0x8EE5: 0x4E3B, + 0x8EE6: 0x53D6, + 0x8EE7: 0x5B88, + 0x8EE8: 0x624B, + 0x8EE9: 0x6731, + 0x8EEA: 0x6B8A, + 0x8EEB: 0x72E9, + 0x8EEC: 0x73E0, + 0x8EED: 0x7A2E, + 0x8EEE: 0x816B, + 0x8EEF: 0x8DA3, + 0x8EF0: 0x9152, + 0x8EF1: 0x9996, + 0x8EF2: 0x5112, + 0x8EF3: 0x53D7, + 0x8EF4: 0x546A, + 0x8EF5: 0x5BFF, + 0x8EF6: 0x6388, + 0x8EF7: 0x6A39, + 0x8EF8: 0x7DAC, + 0x8EF9: 0x9700, + 0x8EFA: 0x56DA, + 0x8EFB: 0x53CE, + 0x8EFC: 0x5468, + 0x8F40: 0x5B97, + 0x8F41: 0x5C31, + 0x8F42: 0x5DDE, + 0x8F43: 0x4FEE, + 0x8F44: 0x6101, + 0x8F45: 0x62FE, + 0x8F46: 0x6D32, + 0x8F47: 0x79C0, + 0x8F48: 0x79CB, + 0x8F49: 0x7D42, + 0x8F4A: 0x7E4D, + 0x8F4B: 0x7FD2, + 0x8F4C: 0x81ED, + 0x8F4D: 0x821F, + 0x8F4E: 0x8490, + 0x8F4F: 0x8846, + 0x8F50: 0x8972, + 0x8F51: 0x8B90, + 0x8F52: 0x8E74, + 0x8F53: 0x8F2F, + 0x8F54: 0x9031, + 0x8F55: 0x914B, + 0x8F56: 0x916C, + 0x8F57: 0x96C6, + 0x8F58: 0x919C, + 0x8F59: 0x4EC0, + 0x8F5A: 0x4F4F, + 0x8F5B: 0x5145, + 0x8F5C: 0x5341, + 0x8F5D: 0x5F93, + 0x8F5E: 0x620E, + 0x8F5F: 0x67D4, + 0x8F60: 0x6C41, + 0x8F61: 0x6E0B, + 0x8F62: 0x7363, + 0x8F63: 0x7E26, + 0x8F64: 0x91CD, + 0x8F65: 0x9283, + 0x8F66: 0x53D4, + 0x8F67: 0x5919, + 0x8F68: 0x5BBF, + 0x8F69: 0x6DD1, + 0x8F6A: 0x795D, + 0x8F6B: 0x7E2E, + 0x8F6C: 0x7C9B, + 0x8F6D: 0x587E, + 0x8F6E: 0x719F, + 0x8F6F: 0x51FA, + 0x8F70: 0x8853, + 0x8F71: 0x8FF0, + 0x8F72: 0x4FCA, + 0x8F73: 0x5CFB, + 0x8F74: 0x6625, + 0x8F75: 0x77AC, + 0x8F76: 0x7AE3, + 0x8F77: 0x821C, + 0x8F78: 0x99FF, + 0x8F79: 0x51C6, + 0x8F7A: 0x5FAA, + 0x8F7B: 0x65EC, + 0x8F7C: 0x696F, + 0x8F7D: 0x6B89, + 0x8F7E: 0x6DF3, + 0x8F80: 0x6E96, + 0x8F81: 0x6F64, + 0x8F82: 0x76FE, + 0x8F83: 0x7D14, + 0x8F84: 0x5DE1, + 0x8F85: 0x9075, + 0x8F86: 0x9187, + 0x8F87: 0x9806, + 0x8F88: 0x51E6, + 0x8F89: 0x521D, + 0x8F8A: 0x6240, + 0x8F8B: 0x6691, + 0x8F8C: 0x66D9, + 0x8F8D: 0x6E1A, + 0x8F8E: 0x5EB6, + 0x8F8F: 0x7DD2, + 0x8F90: 0x7F72, + 0x8F91: 0x66F8, + 0x8F92: 0x85AF, + 0x8F93: 0x85F7, + 0x8F94: 0x8AF8, + 0x8F95: 0x52A9, + 0x8F96: 0x53D9, + 0x8F97: 0x5973, + 0x8F98: 0x5E8F, + 0x8F99: 0x5F90, + 0x8F9A: 0x6055, + 0x8F9B: 0x92E4, + 0x8F9C: 0x9664, + 0x8F9D: 0x50B7, + 0x8F9E: 0x511F, + 0x8F9F: 0x52DD, + 0x8FA0: 0x5320, + 0x8FA1: 0x5347, + 0x8FA2: 0x53EC, + 0x8FA3: 0x54E8, + 0x8FA4: 0x5546, + 0x8FA5: 0x5531, + 0x8FA6: 0x5617, + 0x8FA7: 0x5968, + 0x8FA8: 0x59BE, + 0x8FA9: 0x5A3C, + 0x8FAA: 0x5BB5, + 0x8FAB: 0x5C06, + 0x8FAC: 0x5C0F, + 0x8FAD: 0x5C11, + 0x8FAE: 0x5C1A, + 0x8FAF: 0x5E84, + 0x8FB0: 0x5E8A, + 0x8FB1: 0x5EE0, + 0x8FB2: 0x5F70, + 0x8FB3: 0x627F, + 0x8FB4: 0x6284, + 0x8FB5: 0x62DB, + 0x8FB6: 0x638C, + 0x8FB7: 0x6377, + 0x8FB8: 0x6607, + 0x8FB9: 0x660C, + 0x8FBA: 0x662D, + 0x8FBB: 0x6676, + 0x8FBC: 0x677E, + 0x8FBD: 0x68A2, + 0x8FBE: 0x6A1F, + 0x8FBF: 0x6A35, + 0x8FC0: 0x6CBC, + 0x8FC1: 0x6D88, + 0x8FC2: 0x6E09, + 0x8FC3: 0x6E58, + 0x8FC4: 0x713C, + 0x8FC5: 0x7126, + 0x8FC6: 0x7167, + 0x8FC7: 0x75C7, + 0x8FC8: 0x7701, + 0x8FC9: 0x785D, + 0x8FCA: 0x7901, + 0x8FCB: 0x7965, + 0x8FCC: 0x79F0, + 0x8FCD: 0x7AE0, + 0x8FCE: 0x7B11, + 0x8FCF: 0x7CA7, + 0x8FD0: 0x7D39, + 0x8FD1: 0x8096, + 0x8FD2: 0x83D6, + 0x8FD3: 0x848B, + 0x8FD4: 0x8549, + 0x8FD5: 0x885D, + 0x8FD6: 0x88F3, + 0x8FD7: 0x8A1F, + 0x8FD8: 0x8A3C, + 0x8FD9: 0x8A54, + 0x8FDA: 0x8A73, + 0x8FDB: 0x8C61, + 0x8FDC: 0x8CDE, + 0x8FDD: 0x91A4, + 0x8FDE: 0x9266, + 0x8FDF: 0x937E, + 0x8FE0: 0x9418, + 0x8FE1: 0x969C, + 0x8FE2: 0x9798, + 0x8FE3: 0x4E0A, + 0x8FE4: 0x4E08, + 0x8FE5: 0x4E1E, + 0x8FE6: 0x4E57, + 0x8FE7: 0x5197, + 0x8FE8: 0x5270, + 0x8FE9: 0x57CE, + 0x8FEA: 0x5834, + 0x8FEB: 0x58CC, + 0x8FEC: 0x5B22, + 0x8FED: 0x5E38, + 0x8FEE: 0x60C5, + 0x8FEF: 0x64FE, + 0x8FF0: 0x6761, + 0x8FF1: 0x6756, + 0x8FF2: 0x6D44, + 0x8FF3: 0x72B6, + 0x8FF4: 0x7573, + 0x8FF5: 0x7A63, + 0x8FF6: 0x84B8, + 0x8FF7: 0x8B72, + 0x8FF8: 0x91B8, + 0x8FF9: 0x9320, + 0x8FFA: 0x5631, + 0x8FFB: 0x57F4, + 0x8FFC: 0x98FE, + 0x9040: 0x62ED, + 0x9041: 0x690D, + 0x9042: 0x6B96, + 0x9043: 0x71ED, + 0x9044: 0x7E54, + 0x9045: 0x8077, + 0x9046: 0x8272, + 0x9047: 0x89E6, + 0x9048: 0x98DF, + 0x9049: 0x8755, + 0x904A: 0x8FB1, + 0x904B: 0x5C3B, + 0x904C: 0x4F38, + 0x904D: 0x4FE1, + 0x904E: 0x4FB5, + 0x904F: 0x5507, + 0x9050: 0x5A20, + 0x9051: 0x5BDD, + 0x9052: 0x5BE9, + 0x9053: 0x5FC3, + 0x9054: 0x614E, + 0x9055: 0x632F, + 0x9056: 0x65B0, + 0x9057: 0x664B, + 0x9058: 0x68EE, + 0x9059: 0x699B, + 0x905A: 0x6D78, + 0x905B: 0x6DF1, + 0x905C: 0x7533, + 0x905D: 0x75B9, + 0x905E: 0x771F, + 0x905F: 0x795E, + 0x9060: 0x79E6, + 0x9061: 0x7D33, + 0x9062: 0x81E3, + 0x9063: 0x82AF, + 0x9064: 0x85AA, + 0x9065: 0x89AA, + 0x9066: 0x8A3A, + 0x9067: 0x8EAB, + 0x9068: 0x8F9B, + 0x9069: 0x9032, + 0x906A: 0x91DD, + 0x906B: 0x9707, + 0x906C: 0x4EBA, + 0x906D: 0x4EC1, + 0x906E: 0x5203, + 0x906F: 0x5875, + 0x9070: 0x58EC, + 0x9071: 0x5C0B, + 0x9072: 0x751A, + 0x9073: 0x5C3D, + 0x9074: 0x814E, + 0x9075: 0x8A0A, + 0x9076: 0x8FC5, + 0x9077: 0x9663, + 0x9078: 0x976D, + 0x9079: 0x7B25, + 0x907A: 0x8ACF, + 0x907B: 0x9808, + 0x907C: 0x9162, + 0x907D: 0x56F3, + 0x907E: 0x53A8, + 0x9080: 0x9017, + 0x9081: 0x5439, + 0x9082: 0x5782, + 0x9083: 0x5E25, + 0x9084: 0x63A8, + 0x9085: 0x6C34, + 0x9086: 0x708A, + 0x9087: 0x7761, + 0x9088: 0x7C8B, + 0x9089: 0x7FE0, + 0x908A: 0x8870, + 0x908B: 0x9042, + 0x908C: 0x9154, + 0x908D: 0x9310, + 0x908E: 0x9318, + 0x908F: 0x968F, + 0x9090: 0x745E, + 0x9091: 0x9AC4, + 0x9092: 0x5D07, + 0x9093: 0x5D69, + 0x9094: 0x6570, + 0x9095: 0x67A2, + 0x9096: 0x8DA8, + 0x9097: 0x96DB, + 0x9098: 0x636E, + 0x9099: 0x6749, + 0x909A: 0x6919, + 0x909B: 0x83C5, + 0x909C: 0x9817, + 0x909D: 0x96C0, + 0x909E: 0x88FE, + 0x909F: 0x6F84, + 0x90A0: 0x647A, + 0x90A1: 0x5BF8, + 0x90A2: 0x4E16, + 0x90A3: 0x702C, + 0x90A4: 0x755D, + 0x90A5: 0x662F, + 0x90A6: 0x51C4, + 0x90A7: 0x5236, + 0x90A8: 0x52E2, + 0x90A9: 0x59D3, + 0x90AA: 0x5F81, + 0x90AB: 0x6027, + 0x90AC: 0x6210, + 0x90AD: 0x653F, + 0x90AE: 0x6574, + 0x90AF: 0x661F, + 0x90B0: 0x6674, + 0x90B1: 0x68F2, + 0x90B2: 0x6816, + 0x90B3: 0x6B63, + 0x90B4: 0x6E05, + 0x90B5: 0x7272, + 0x90B6: 0x751F, + 0x90B7: 0x76DB, + 0x90B8: 0x7CBE, + 0x90B9: 0x8056, + 0x90BA: 0x58F0, + 0x90BB: 0x88FD, + 0x90BC: 0x897F, + 0x90BD: 0x8AA0, + 0x90BE: 0x8A93, + 0x90BF: 0x8ACB, + 0x90C0: 0x901D, + 0x90C1: 0x9192, + 0x90C2: 0x9752, + 0x90C3: 0x9759, + 0x90C4: 0x6589, + 0x90C5: 0x7A0E, + 0x90C6: 0x8106, + 0x90C7: 0x96BB, + 0x90C8: 0x5E2D, + 0x90C9: 0x60DC, + 0x90CA: 0x621A, + 0x90CB: 0x65A5, + 0x90CC: 0x6614, + 0x90CD: 0x6790, + 0x90CE: 0x77F3, + 0x90CF: 0x7A4D, + 0x90D0: 0x7C4D, + 0x90D1: 0x7E3E, + 0x90D2: 0x810A, + 0x90D3: 0x8CAC, + 0x90D4: 0x8D64, + 0x90D5: 0x8DE1, + 0x90D6: 0x8E5F, + 0x90D7: 0x78A9, + 0x90D8: 0x5207, + 0x90D9: 0x62D9, + 0x90DA: 0x63A5, + 0x90DB: 0x6442, + 0x90DC: 0x6298, + 0x90DD: 0x8A2D, + 0x90DE: 0x7A83, + 0x90DF: 0x7BC0, + 0x90E0: 0x8AAC, + 0x90E1: 0x96EA, + 0x90E2: 0x7D76, + 0x90E3: 0x820C, + 0x90E4: 0x8749, + 0x90E5: 0x4ED9, + 0x90E6: 0x5148, + 0x90E7: 0x5343, + 0x90E8: 0x5360, + 0x90E9: 0x5BA3, + 0x90EA: 0x5C02, + 0x90EB: 0x5C16, + 0x90EC: 0x5DDD, + 0x90ED: 0x6226, + 0x90EE: 0x6247, + 0x90EF: 0x64B0, + 0x90F0: 0x6813, + 0x90F1: 0x6834, + 0x90F2: 0x6CC9, + 0x90F3: 0x6D45, + 0x90F4: 0x6D17, + 0x90F5: 0x67D3, + 0x90F6: 0x6F5C, + 0x90F7: 0x714E, + 0x90F8: 0x717D, + 0x90F9: 0x65CB, + 0x90FA: 0x7A7F, + 0x90FB: 0x7BAD, + 0x90FC: 0x7DDA, + 0x9140: 0x7E4A, + 0x9141: 0x7FA8, + 0x9142: 0x817A, + 0x9143: 0x821B, + 0x9144: 0x8239, + 0x9145: 0x85A6, + 0x9146: 0x8A6E, + 0x9147: 0x8CCE, + 0x9148: 0x8DF5, + 0x9149: 0x9078, + 0x914A: 0x9077, + 0x914B: 0x92AD, + 0x914C: 0x9291, + 0x914D: 0x9583, + 0x914E: 0x9BAE, + 0x914F: 0x524D, + 0x9150: 0x5584, + 0x9151: 0x6F38, + 0x9152: 0x7136, + 0x9153: 0x5168, + 0x9154: 0x7985, + 0x9155: 0x7E55, + 0x9156: 0x81B3, + 0x9157: 0x7CCE, + 0x9158: 0x564C, + 0x9159: 0x5851, + 0x915A: 0x5CA8, + 0x915B: 0x63AA, + 0x915C: 0x66FE, + 0x915D: 0x66FD, + 0x915E: 0x695A, + 0x915F: 0x72D9, + 0x9160: 0x758F, + 0x9161: 0x758E, + 0x9162: 0x790E, + 0x9163: 0x7956, + 0x9164: 0x79DF, + 0x9165: 0x7C97, + 0x9166: 0x7D20, + 0x9167: 0x7D44, + 0x9168: 0x8607, + 0x9169: 0x8A34, + 0x916A: 0x963B, + 0x916B: 0x9061, + 0x916C: 0x9F20, + 0x916D: 0x50E7, + 0x916E: 0x5275, + 0x916F: 0x53CC, + 0x9170: 0x53E2, + 0x9171: 0x5009, + 0x9172: 0x55AA, + 0x9173: 0x58EE, + 0x9174: 0x594F, + 0x9175: 0x723D, + 0x9176: 0x5B8B, + 0x9177: 0x5C64, + 0x9178: 0x531D, + 0x9179: 0x60E3, + 0x917A: 0x60F3, + 0x917B: 0x635C, + 0x917C: 0x6383, + 0x917D: 0x633F, + 0x917E: 0x63BB, + 0x9180: 0x64CD, + 0x9181: 0x65E9, + 0x9182: 0x66F9, + 0x9183: 0x5DE3, + 0x9184: 0x69CD, + 0x9185: 0x69FD, + 0x9186: 0x6F15, + 0x9187: 0x71E5, + 0x9188: 0x4E89, + 0x9189: 0x75E9, + 0x918A: 0x76F8, + 0x918B: 0x7A93, + 0x918C: 0x7CDF, + 0x918D: 0x7DCF, + 0x918E: 0x7D9C, + 0x918F: 0x8061, + 0x9190: 0x8349, + 0x9191: 0x8358, + 0x9192: 0x846C, + 0x9193: 0x84BC, + 0x9194: 0x85FB, + 0x9195: 0x88C5, + 0x9196: 0x8D70, + 0x9197: 0x9001, + 0x9198: 0x906D, + 0x9199: 0x9397, + 0x919A: 0x971C, + 0x919B: 0x9A12, + 0x919C: 0x50CF, + 0x919D: 0x5897, + 0x919E: 0x618E, + 0x919F: 0x81D3, + 0x91A0: 0x8535, + 0x91A1: 0x8D08, + 0x91A2: 0x9020, + 0x91A3: 0x4FC3, + 0x91A4: 0x5074, + 0x91A5: 0x5247, + 0x91A6: 0x5373, + 0x91A7: 0x606F, + 0x91A8: 0x6349, + 0x91A9: 0x675F, + 0x91AA: 0x6E2C, + 0x91AB: 0x8DB3, + 0x91AC: 0x901F, + 0x91AD: 0x4FD7, + 0x91AE: 0x5C5E, + 0x91AF: 0x8CCA, + 0x91B0: 0x65CF, + 0x91B1: 0x7D9A, + 0x91B2: 0x5352, + 0x91B3: 0x8896, + 0x91B4: 0x5176, + 0x91B5: 0x63C3, + 0x91B6: 0x5B58, + 0x91B7: 0x5B6B, + 0x91B8: 0x5C0A, + 0x91B9: 0x640D, + 0x91BA: 0x6751, + 0x91BB: 0x905C, + 0x91BC: 0x4ED6, + 0x91BD: 0x591A, + 0x91BE: 0x592A, + 0x91BF: 0x6C70, + 0x91C0: 0x8A51, + 0x91C1: 0x553E, + 0x91C2: 0x5815, + 0x91C3: 0x59A5, + 0x91C4: 0x60F0, + 0x91C5: 0x6253, + 0x91C6: 0x67C1, + 0x91C7: 0x8235, + 0x91C8: 0x6955, + 0x91C9: 0x9640, + 0x91CA: 0x99C4, + 0x91CB: 0x9A28, + 0x91CC: 0x4F53, + 0x91CD: 0x5806, + 0x91CE: 0x5BFE, + 0x91CF: 0x8010, + 0x91D0: 0x5CB1, + 0x91D1: 0x5E2F, + 0x91D2: 0x5F85, + 0x91D3: 0x6020, + 0x91D4: 0x614B, + 0x91D5: 0x6234, + 0x91D6: 0x66FF, + 0x91D7: 0x6CF0, + 0x91D8: 0x6EDE, + 0x91D9: 0x80CE, + 0x91DA: 0x817F, + 0x91DB: 0x82D4, + 0x91DC: 0x888B, + 0x91DD: 0x8CB8, + 0x91DE: 0x9000, + 0x91DF: 0x902E, + 0x91E0: 0x968A, + 0x91E1: 0x9EDB, + 0x91E2: 0x9BDB, + 0x91E3: 0x4EE3, + 0x91E4: 0x53F0, + 0x91E5: 0x5927, + 0x91E6: 0x7B2C, + 0x91E7: 0x918D, + 0x91E8: 0x984C, + 0x91E9: 0x9DF9, + 0x91EA: 0x6EDD, + 0x91EB: 0x7027, + 0x91EC: 0x5353, + 0x91ED: 0x5544, + 0x91EE: 0x5B85, + 0x91EF: 0x6258, + 0x91F0: 0x629E, + 0x91F1: 0x62D3, + 0x91F2: 0x6CA2, + 0x91F3: 0x6FEF, + 0x91F4: 0x7422, + 0x91F5: 0x8A17, + 0x91F6: 0x9438, + 0x91F7: 0x6FC1, + 0x91F8: 0x8AFE, + 0x91F9: 0x8338, + 0x91FA: 0x51E7, + 0x91FB: 0x86F8, + 0x91FC: 0x53EA, + 0x9240: 0x53E9, + 0x9241: 0x4F46, + 0x9242: 0x9054, + 0x9243: 0x8FB0, + 0x9244: 0x596A, + 0x9245: 0x8131, + 0x9246: 0x5DFD, + 0x9247: 0x7AEA, + 0x9248: 0x8FBF, + 0x9249: 0x68DA, + 0x924A: 0x8C37, + 0x924B: 0x72F8, + 0x924C: 0x9C48, + 0x924D: 0x6A3D, + 0x924E: 0x8AB0, + 0x924F: 0x4E39, + 0x9250: 0x5358, + 0x9251: 0x5606, + 0x9252: 0x5766, + 0x9253: 0x62C5, + 0x9254: 0x63A2, + 0x9255: 0x65E6, + 0x9256: 0x6B4E, + 0x9257: 0x6DE1, + 0x9258: 0x6E5B, + 0x9259: 0x70AD, + 0x925A: 0x77ED, + 0x925B: 0x7AEF, + 0x925C: 0x7BAA, + 0x925D: 0x7DBB, + 0x925E: 0x803D, + 0x925F: 0x80C6, + 0x9260: 0x86CB, + 0x9261: 0x8A95, + 0x9262: 0x935B, + 0x9263: 0x56E3, + 0x9264: 0x58C7, + 0x9265: 0x5F3E, + 0x9266: 0x65AD, + 0x9267: 0x6696, + 0x9268: 0x6A80, + 0x9269: 0x6BB5, + 0x926A: 0x7537, + 0x926B: 0x8AC7, + 0x926C: 0x5024, + 0x926D: 0x77E5, + 0x926E: 0x5730, + 0x926F: 0x5F1B, + 0x9270: 0x6065, + 0x9271: 0x667A, + 0x9272: 0x6C60, + 0x9273: 0x75F4, + 0x9274: 0x7A1A, + 0x9275: 0x7F6E, + 0x9276: 0x81F4, + 0x9277: 0x8718, + 0x9278: 0x9045, + 0x9279: 0x99B3, + 0x927A: 0x7BC9, + 0x927B: 0x755C, + 0x927C: 0x7AF9, + 0x927D: 0x7B51, + 0x927E: 0x84C4, + 0x9280: 0x9010, + 0x9281: 0x79E9, + 0x9282: 0x7A92, + 0x9283: 0x8336, + 0x9284: 0x5AE1, + 0x9285: 0x7740, + 0x9286: 0x4E2D, + 0x9287: 0x4EF2, + 0x9288: 0x5B99, + 0x9289: 0x5FE0, + 0x928A: 0x62BD, + 0x928B: 0x663C, + 0x928C: 0x67F1, + 0x928D: 0x6CE8, + 0x928E: 0x866B, + 0x928F: 0x8877, + 0x9290: 0x8A3B, + 0x9291: 0x914E, + 0x9292: 0x92F3, + 0x9293: 0x99D0, + 0x9294: 0x6A17, + 0x9295: 0x7026, + 0x9296: 0x732A, + 0x9297: 0x82E7, + 0x9298: 0x8457, + 0x9299: 0x8CAF, + 0x929A: 0x4E01, + 0x929B: 0x5146, + 0x929C: 0x51CB, + 0x929D: 0x558B, + 0x929E: 0x5BF5, + 0x929F: 0x5E16, + 0x92A0: 0x5E33, + 0x92A1: 0x5E81, + 0x92A2: 0x5F14, + 0x92A3: 0x5F35, + 0x92A4: 0x5F6B, + 0x92A5: 0x5FB4, + 0x92A6: 0x61F2, + 0x92A7: 0x6311, + 0x92A8: 0x66A2, + 0x92A9: 0x671D, + 0x92AA: 0x6F6E, + 0x92AB: 0x7252, + 0x92AC: 0x753A, + 0x92AD: 0x773A, + 0x92AE: 0x8074, + 0x92AF: 0x8139, + 0x92B0: 0x8178, + 0x92B1: 0x8776, + 0x92B2: 0x8ABF, + 0x92B3: 0x8ADC, + 0x92B4: 0x8D85, + 0x92B5: 0x8DF3, + 0x92B6: 0x929A, + 0x92B7: 0x9577, + 0x92B8: 0x9802, + 0x92B9: 0x9CE5, + 0x92BA: 0x52C5, + 0x92BB: 0x6357, + 0x92BC: 0x76F4, + 0x92BD: 0x6715, + 0x92BE: 0x6C88, + 0x92BF: 0x73CD, + 0x92C0: 0x8CC3, + 0x92C1: 0x93AE, + 0x92C2: 0x9673, + 0x92C3: 0x6D25, + 0x92C4: 0x589C, + 0x92C5: 0x690E, + 0x92C6: 0x69CC, + 0x92C7: 0x8FFD, + 0x92C8: 0x939A, + 0x92C9: 0x75DB, + 0x92CA: 0x901A, + 0x92CB: 0x585A, + 0x92CC: 0x6802, + 0x92CD: 0x63B4, + 0x92CE: 0x69FB, + 0x92CF: 0x4F43, + 0x92D0: 0x6F2C, + 0x92D1: 0x67D8, + 0x92D2: 0x8FBB, + 0x92D3: 0x8526, + 0x92D4: 0x7DB4, + 0x92D5: 0x9354, + 0x92D6: 0x693F, + 0x92D7: 0x6F70, + 0x92D8: 0x576A, + 0x92D9: 0x58F7, + 0x92DA: 0x5B2C, + 0x92DB: 0x7D2C, + 0x92DC: 0x722A, + 0x92DD: 0x540A, + 0x92DE: 0x91E3, + 0x92DF: 0x9DB4, + 0x92E0: 0x4EAD, + 0x92E1: 0x4F4E, + 0x92E2: 0x505C, + 0x92E3: 0x5075, + 0x92E4: 0x5243, + 0x92E5: 0x8C9E, + 0x92E6: 0x5448, + 0x92E7: 0x5824, + 0x92E8: 0x5B9A, + 0x92E9: 0x5E1D, + 0x92EA: 0x5E95, + 0x92EB: 0x5EAD, + 0x92EC: 0x5EF7, + 0x92ED: 0x5F1F, + 0x92EE: 0x608C, + 0x92EF: 0x62B5, + 0x92F0: 0x633A, + 0x92F1: 0x63D0, + 0x92F2: 0x68AF, + 0x92F3: 0x6C40, + 0x92F4: 0x7887, + 0x92F5: 0x798E, + 0x92F6: 0x7A0B, + 0x92F7: 0x7DE0, + 0x92F8: 0x8247, + 0x92F9: 0x8A02, + 0x92FA: 0x8AE6, + 0x92FB: 0x8E44, + 0x92FC: 0x9013, + 0x9340: 0x90B8, + 0x9341: 0x912D, + 0x9342: 0x91D8, + 0x9343: 0x9F0E, + 0x9344: 0x6CE5, + 0x9345: 0x6458, + 0x9346: 0x64E2, + 0x9347: 0x6575, + 0x9348: 0x6EF4, + 0x9349: 0x7684, + 0x934A: 0x7B1B, + 0x934B: 0x9069, + 0x934C: 0x93D1, + 0x934D: 0x6EBA, + 0x934E: 0x54F2, + 0x934F: 0x5FB9, + 0x9350: 0x64A4, + 0x9351: 0x8F4D, + 0x9352: 0x8FED, + 0x9353: 0x9244, + 0x9354: 0x5178, + 0x9355: 0x586B, + 0x9356: 0x5929, + 0x9357: 0x5C55, + 0x9358: 0x5E97, + 0x9359: 0x6DFB, + 0x935A: 0x7E8F, + 0x935B: 0x751C, + 0x935C: 0x8CBC, + 0x935D: 0x8EE2, + 0x935E: 0x985B, + 0x935F: 0x70B9, + 0x9360: 0x4F1D, + 0x9361: 0x6BBF, + 0x9362: 0x6FB1, + 0x9363: 0x7530, + 0x9364: 0x96FB, + 0x9365: 0x514E, + 0x9366: 0x5410, + 0x9367: 0x5835, + 0x9368: 0x5857, + 0x9369: 0x59AC, + 0x936A: 0x5C60, + 0x936B: 0x5F92, + 0x936C: 0x6597, + 0x936D: 0x675C, + 0x936E: 0x6E21, + 0x936F: 0x767B, + 0x9370: 0x83DF, + 0x9371: 0x8CED, + 0x9372: 0x9014, + 0x9373: 0x90FD, + 0x9374: 0x934D, + 0x9375: 0x7825, + 0x9376: 0x783A, + 0x9377: 0x52AA, + 0x9378: 0x5EA6, + 0x9379: 0x571F, + 0x937A: 0x5974, + 0x937B: 0x6012, + 0x937C: 0x5012, + 0x937D: 0x515A, + 0x937E: 0x51AC, + 0x9380: 0x51CD, + 0x9381: 0x5200, + 0x9382: 0x5510, + 0x9383: 0x5854, + 0x9384: 0x5858, + 0x9385: 0x5957, + 0x9386: 0x5B95, + 0x9387: 0x5CF6, + 0x9388: 0x5D8B, + 0x9389: 0x60BC, + 0x938A: 0x6295, + 0x938B: 0x642D, + 0x938C: 0x6771, + 0x938D: 0x6843, + 0x938E: 0x68BC, + 0x938F: 0x68DF, + 0x9390: 0x76D7, + 0x9391: 0x6DD8, + 0x9392: 0x6E6F, + 0x9393: 0x6D9B, + 0x9394: 0x706F, + 0x9395: 0x71C8, + 0x9396: 0x5F53, + 0x9397: 0x75D8, + 0x9398: 0x7977, + 0x9399: 0x7B49, + 0x939A: 0x7B54, + 0x939B: 0x7B52, + 0x939C: 0x7CD6, + 0x939D: 0x7D71, + 0x939E: 0x5230, + 0x939F: 0x8463, + 0x93A0: 0x8569, + 0x93A1: 0x85E4, + 0x93A2: 0x8A0E, + 0x93A3: 0x8B04, + 0x93A4: 0x8C46, + 0x93A5: 0x8E0F, + 0x93A6: 0x9003, + 0x93A7: 0x900F, + 0x93A8: 0x9419, + 0x93A9: 0x9676, + 0x93AA: 0x982D, + 0x93AB: 0x9A30, + 0x93AC: 0x95D8, + 0x93AD: 0x50CD, + 0x93AE: 0x52D5, + 0x93AF: 0x540C, + 0x93B0: 0x5802, + 0x93B1: 0x5C0E, + 0x93B2: 0x61A7, + 0x93B3: 0x649E, + 0x93B4: 0x6D1E, + 0x93B5: 0x77B3, + 0x93B6: 0x7AE5, + 0x93B7: 0x80F4, + 0x93B8: 0x8404, + 0x93B9: 0x9053, + 0x93BA: 0x9285, + 0x93BB: 0x5CE0, + 0x93BC: 0x9D07, + 0x93BD: 0x533F, + 0x93BE: 0x5F97, + 0x93BF: 0x5FB3, + 0x93C0: 0x6D9C, + 0x93C1: 0x7279, + 0x93C2: 0x7763, + 0x93C3: 0x79BF, + 0x93C4: 0x7BE4, + 0x93C5: 0x6BD2, + 0x93C6: 0x72EC, + 0x93C7: 0x8AAD, + 0x93C8: 0x6803, + 0x93C9: 0x6A61, + 0x93CA: 0x51F8, + 0x93CB: 0x7A81, + 0x93CC: 0x6934, + 0x93CD: 0x5C4A, + 0x93CE: 0x9CF6, + 0x93CF: 0x82EB, + 0x93D0: 0x5BC5, + 0x93D1: 0x9149, + 0x93D2: 0x701E, + 0x93D3: 0x5678, + 0x93D4: 0x5C6F, + 0x93D5: 0x60C7, + 0x93D6: 0x6566, + 0x93D7: 0x6C8C, + 0x93D8: 0x8C5A, + 0x93D9: 0x9041, + 0x93DA: 0x9813, + 0x93DB: 0x5451, + 0x93DC: 0x66C7, + 0x93DD: 0x920D, + 0x93DE: 0x5948, + 0x93DF: 0x90A3, + 0x93E0: 0x5185, + 0x93E1: 0x4E4D, + 0x93E2: 0x51EA, + 0x93E3: 0x8599, + 0x93E4: 0x8B0E, + 0x93E5: 0x7058, + 0x93E6: 0x637A, + 0x93E7: 0x934B, + 0x93E8: 0x6962, + 0x93E9: 0x99B4, + 0x93EA: 0x7E04, + 0x93EB: 0x7577, + 0x93EC: 0x5357, + 0x93ED: 0x6960, + 0x93EE: 0x8EDF, + 0x93EF: 0x96E3, + 0x93F0: 0x6C5D, + 0x93F1: 0x4E8C, + 0x93F2: 0x5C3C, + 0x93F3: 0x5F10, + 0x93F4: 0x8FE9, + 0x93F5: 0x5302, + 0x93F6: 0x8CD1, + 0x93F7: 0x8089, + 0x93F8: 0x8679, + 0x93F9: 0x5EFF, + 0x93FA: 0x65E5, + 0x93FB: 0x4E73, + 0x93FC: 0x5165, + 0x9440: 0x5982, + 0x9441: 0x5C3F, + 0x9442: 0x97EE, + 0x9443: 0x4EFB, + 0x9444: 0x598A, + 0x9445: 0x5FCD, + 0x9446: 0x8A8D, + 0x9447: 0x6FE1, + 0x9448: 0x79B0, + 0x9449: 0x7962, + 0x944A: 0x5BE7, + 0x944B: 0x8471, + 0x944C: 0x732B, + 0x944D: 0x71B1, + 0x944E: 0x5E74, + 0x944F: 0x5FF5, + 0x9450: 0x637B, + 0x9451: 0x649A, + 0x9452: 0x71C3, + 0x9453: 0x7C98, + 0x9454: 0x4E43, + 0x9455: 0x5EFC, + 0x9456: 0x4E4B, + 0x9457: 0x57DC, + 0x9458: 0x56A2, + 0x9459: 0x60A9, + 0x945A: 0x6FC3, + 0x945B: 0x7D0D, + 0x945C: 0x80FD, + 0x945D: 0x8133, + 0x945E: 0x81BF, + 0x945F: 0x8FB2, + 0x9460: 0x8997, + 0x9461: 0x86A4, + 0x9462: 0x5DF4, + 0x9463: 0x628A, + 0x9464: 0x64AD, + 0x9465: 0x8987, + 0x9466: 0x6777, + 0x9467: 0x6CE2, + 0x9468: 0x6D3E, + 0x9469: 0x7436, + 0x946A: 0x7834, + 0x946B: 0x5A46, + 0x946C: 0x7F75, + 0x946D: 0x82AD, + 0x946E: 0x99AC, + 0x946F: 0x4FF3, + 0x9470: 0x5EC3, + 0x9471: 0x62DD, + 0x9472: 0x6392, + 0x9473: 0x6557, + 0x9474: 0x676F, + 0x9475: 0x76C3, + 0x9476: 0x724C, + 0x9477: 0x80CC, + 0x9478: 0x80BA, + 0x9479: 0x8F29, + 0x947A: 0x914D, + 0x947B: 0x500D, + 0x947C: 0x57F9, + 0x947D: 0x5A92, + 0x947E: 0x6885, + 0x9480: 0x6973, + 0x9481: 0x7164, + 0x9482: 0x72FD, + 0x9483: 0x8CB7, + 0x9484: 0x58F2, + 0x9485: 0x8CE0, + 0x9486: 0x966A, + 0x9487: 0x9019, + 0x9488: 0x877F, + 0x9489: 0x79E4, + 0x948A: 0x77E7, + 0x948B: 0x8429, + 0x948C: 0x4F2F, + 0x948D: 0x5265, + 0x948E: 0x535A, + 0x948F: 0x62CD, + 0x9490: 0x67CF, + 0x9491: 0x6CCA, + 0x9492: 0x767D, + 0x9493: 0x7B94, + 0x9494: 0x7C95, + 0x9495: 0x8236, + 0x9496: 0x8584, + 0x9497: 0x8FEB, + 0x9498: 0x66DD, + 0x9499: 0x6F20, + 0x949A: 0x7206, + 0x949B: 0x7E1B, + 0x949C: 0x83AB, + 0x949D: 0x99C1, + 0x949E: 0x9EA6, + 0x949F: 0x51FD, + 0x94A0: 0x7BB1, + 0x94A1: 0x7872, + 0x94A2: 0x7BB8, + 0x94A3: 0x8087, + 0x94A4: 0x7B48, + 0x94A5: 0x6AE8, + 0x94A6: 0x5E61, + 0x94A7: 0x808C, + 0x94A8: 0x7551, + 0x94A9: 0x7560, + 0x94AA: 0x516B, + 0x94AB: 0x9262, + 0x94AC: 0x6E8C, + 0x94AD: 0x767A, + 0x94AE: 0x9197, + 0x94AF: 0x9AEA, + 0x94B0: 0x4F10, + 0x94B1: 0x7F70, + 0x94B2: 0x629C, + 0x94B3: 0x7B4F, + 0x94B4: 0x95A5, + 0x94B5: 0x9CE9, + 0x94B6: 0x567A, + 0x94B7: 0x5859, + 0x94B8: 0x86E4, + 0x94B9: 0x96BC, + 0x94BA: 0x4F34, + 0x94BB: 0x5224, + 0x94BC: 0x534A, + 0x94BD: 0x53CD, + 0x94BE: 0x53DB, + 0x94BF: 0x5E06, + 0x94C0: 0x642C, + 0x94C1: 0x6591, + 0x94C2: 0x677F, + 0x94C3: 0x6C3E, + 0x94C4: 0x6C4E, + 0x94C5: 0x7248, + 0x94C6: 0x72AF, + 0x94C7: 0x73ED, + 0x94C8: 0x7554, + 0x94C9: 0x7E41, + 0x94CA: 0x822C, + 0x94CB: 0x85E9, + 0x94CC: 0x8CA9, + 0x94CD: 0x7BC4, + 0x94CE: 0x91C6, + 0x94CF: 0x7169, + 0x94D0: 0x9812, + 0x94D1: 0x98EF, + 0x94D2: 0x633D, + 0x94D3: 0x6669, + 0x94D4: 0x756A, + 0x94D5: 0x76E4, + 0x94D6: 0x78D0, + 0x94D7: 0x8543, + 0x94D8: 0x86EE, + 0x94D9: 0x532A, + 0x94DA: 0x5351, + 0x94DB: 0x5426, + 0x94DC: 0x5983, + 0x94DD: 0x5E87, + 0x94DE: 0x5F7C, + 0x94DF: 0x60B2, + 0x94E0: 0x6249, + 0x94E1: 0x6279, + 0x94E2: 0x62AB, + 0x94E3: 0x6590, + 0x94E4: 0x6BD4, + 0x94E5: 0x6CCC, + 0x94E6: 0x75B2, + 0x94E7: 0x76AE, + 0x94E8: 0x7891, + 0x94E9: 0x79D8, + 0x94EA: 0x7DCB, + 0x94EB: 0x7F77, + 0x94EC: 0x80A5, + 0x94ED: 0x88AB, + 0x94EE: 0x8AB9, + 0x94EF: 0x8CBB, + 0x94F0: 0x907F, + 0x94F1: 0x975E, + 0x94F2: 0x98DB, + 0x94F3: 0x6A0B, + 0x94F4: 0x7C38, + 0x94F5: 0x5099, + 0x94F6: 0x5C3E, + 0x94F7: 0x5FAE, + 0x94F8: 0x6787, + 0x94F9: 0x6BD8, + 0x94FA: 0x7435, + 0x94FB: 0x7709, + 0x94FC: 0x7F8E, + 0x9540: 0x9F3B, + 0x9541: 0x67CA, + 0x9542: 0x7A17, + 0x9543: 0x5339, + 0x9544: 0x758B, + 0x9545: 0x9AED, + 0x9546: 0x5F66, + 0x9547: 0x819D, + 0x9548: 0x83F1, + 0x9549: 0x8098, + 0x954A: 0x5F3C, + 0x954B: 0x5FC5, + 0x954C: 0x7562, + 0x954D: 0x7B46, + 0x954E: 0x903C, + 0x954F: 0x6867, + 0x9550: 0x59EB, + 0x9551: 0x5A9B, + 0x9552: 0x7D10, + 0x9553: 0x767E, + 0x9554: 0x8B2C, + 0x9555: 0x4FF5, + 0x9556: 0x5F6A, + 0x9557: 0x6A19, + 0x9558: 0x6C37, + 0x9559: 0x6F02, + 0x955A: 0x74E2, + 0x955B: 0x7968, + 0x955C: 0x8868, + 0x955D: 0x8A55, + 0x955E: 0x8C79, + 0x955F: 0x5EDF, + 0x9560: 0x63CF, + 0x9561: 0x75C5, + 0x9562: 0x79D2, + 0x9563: 0x82D7, + 0x9564: 0x9328, + 0x9565: 0x92F2, + 0x9566: 0x849C, + 0x9567: 0x86ED, + 0x9568: 0x9C2D, + 0x9569: 0x54C1, + 0x956A: 0x5F6C, + 0x956B: 0x658C, + 0x956C: 0x6D5C, + 0x956D: 0x7015, + 0x956E: 0x8CA7, + 0x956F: 0x8CD3, + 0x9570: 0x983B, + 0x9571: 0x654F, + 0x9572: 0x74F6, + 0x9573: 0x4E0D, + 0x9574: 0x4ED8, + 0x9575: 0x57E0, + 0x9576: 0x592B, + 0x9577: 0x5A66, + 0x9578: 0x5BCC, + 0x9579: 0x51A8, + 0x957A: 0x5E03, + 0x957B: 0x5E9C, + 0x957C: 0x6016, + 0x957D: 0x6276, + 0x957E: 0x6577, + 0x9580: 0x65A7, + 0x9581: 0x666E, + 0x9582: 0x6D6E, + 0x9583: 0x7236, + 0x9584: 0x7B26, + 0x9585: 0x8150, + 0x9586: 0x819A, + 0x9587: 0x8299, + 0x9588: 0x8B5C, + 0x9589: 0x8CA0, + 0x958A: 0x8CE6, + 0x958B: 0x8D74, + 0x958C: 0x961C, + 0x958D: 0x9644, + 0x958E: 0x4FAE, + 0x958F: 0x64AB, + 0x9590: 0x6B66, + 0x9591: 0x821E, + 0x9592: 0x8461, + 0x9593: 0x856A, + 0x9594: 0x90E8, + 0x9595: 0x5C01, + 0x9596: 0x6953, + 0x9597: 0x98A8, + 0x9598: 0x847A, + 0x9599: 0x8557, + 0x959A: 0x4F0F, + 0x959B: 0x526F, + 0x959C: 0x5FA9, + 0x959D: 0x5E45, + 0x959E: 0x670D, + 0x959F: 0x798F, + 0x95A0: 0x8179, + 0x95A1: 0x8907, + 0x95A2: 0x8986, + 0x95A3: 0x6DF5, + 0x95A4: 0x5F17, + 0x95A5: 0x6255, + 0x95A6: 0x6CB8, + 0x95A7: 0x4ECF, + 0x95A8: 0x7269, + 0x95A9: 0x9B92, + 0x95AA: 0x5206, + 0x95AB: 0x543B, + 0x95AC: 0x5674, + 0x95AD: 0x58B3, + 0x95AE: 0x61A4, + 0x95AF: 0x626E, + 0x95B0: 0x711A, + 0x95B1: 0x596E, + 0x95B2: 0x7C89, + 0x95B3: 0x7CDE, + 0x95B4: 0x7D1B, + 0x95B5: 0x96F0, + 0x95B6: 0x6587, + 0x95B7: 0x805E, + 0x95B8: 0x4E19, + 0x95B9: 0x4F75, + 0x95BA: 0x5175, + 0x95BB: 0x5840, + 0x95BC: 0x5E63, + 0x95BD: 0x5E73, + 0x95BE: 0x5F0A, + 0x95BF: 0x67C4, + 0x95C0: 0x4E26, + 0x95C1: 0x853D, + 0x95C2: 0x9589, + 0x95C3: 0x965B, + 0x95C4: 0x7C73, + 0x95C5: 0x9801, + 0x95C6: 0x50FB, + 0x95C7: 0x58C1, + 0x95C8: 0x7656, + 0x95C9: 0x78A7, + 0x95CA: 0x5225, + 0x95CB: 0x77A5, + 0x95CC: 0x8511, + 0x95CD: 0x7B86, + 0x95CE: 0x504F, + 0x95CF: 0x5909, + 0x95D0: 0x7247, + 0x95D1: 0x7BC7, + 0x95D2: 0x7DE8, + 0x95D3: 0x8FBA, + 0x95D4: 0x8FD4, + 0x95D5: 0x904D, + 0x95D6: 0x4FBF, + 0x95D7: 0x52C9, + 0x95D8: 0x5A29, + 0x95D9: 0x5F01, + 0x95DA: 0x97AD, + 0x95DB: 0x4FDD, + 0x95DC: 0x8217, + 0x95DD: 0x92EA, + 0x95DE: 0x5703, + 0x95DF: 0x6355, + 0x95E0: 0x6B69, + 0x95E1: 0x752B, + 0x95E2: 0x88DC, + 0x95E3: 0x8F14, + 0x95E4: 0x7A42, + 0x95E5: 0x52DF, + 0x95E6: 0x5893, + 0x95E7: 0x6155, + 0x95E8: 0x620A, + 0x95E9: 0x66AE, + 0x95EA: 0x6BCD, + 0x95EB: 0x7C3F, + 0x95EC: 0x83E9, + 0x95ED: 0x5023, + 0x95EE: 0x4FF8, + 0x95EF: 0x5305, + 0x95F0: 0x5446, + 0x95F1: 0x5831, + 0x95F2: 0x5949, + 0x95F3: 0x5B9D, + 0x95F4: 0x5CF0, + 0x95F5: 0x5CEF, + 0x95F6: 0x5D29, + 0x95F7: 0x5E96, + 0x95F8: 0x62B1, + 0x95F9: 0x6367, + 0x95FA: 0x653E, + 0x95FB: 0x65B9, + 0x95FC: 0x670B, + 0x9640: 0x6CD5, + 0x9641: 0x6CE1, + 0x9642: 0x70F9, + 0x9643: 0x7832, + 0x9644: 0x7E2B, + 0x9645: 0x80DE, + 0x9646: 0x82B3, + 0x9647: 0x840C, + 0x9648: 0x84EC, + 0x9649: 0x8702, + 0x964A: 0x8912, + 0x964B: 0x8A2A, + 0x964C: 0x8C4A, + 0x964D: 0x90A6, + 0x964E: 0x92D2, + 0x964F: 0x98FD, + 0x9650: 0x9CF3, + 0x9651: 0x9D6C, + 0x9652: 0x4E4F, + 0x9653: 0x4EA1, + 0x9654: 0x508D, + 0x9655: 0x5256, + 0x9656: 0x574A, + 0x9657: 0x59A8, + 0x9658: 0x5E3D, + 0x9659: 0x5FD8, + 0x965A: 0x5FD9, + 0x965B: 0x623F, + 0x965C: 0x66B4, + 0x965D: 0x671B, + 0x965E: 0x67D0, + 0x965F: 0x68D2, + 0x9660: 0x5192, + 0x9661: 0x7D21, + 0x9662: 0x80AA, + 0x9663: 0x81A8, + 0x9664: 0x8B00, + 0x9665: 0x8C8C, + 0x9666: 0x8CBF, + 0x9667: 0x927E, + 0x9668: 0x9632, + 0x9669: 0x5420, + 0x966A: 0x982C, + 0x966B: 0x5317, + 0x966C: 0x50D5, + 0x966D: 0x535C, + 0x966E: 0x58A8, + 0x966F: 0x64B2, + 0x9670: 0x6734, + 0x9671: 0x7267, + 0x9672: 0x7766, + 0x9673: 0x7A46, + 0x9674: 0x91E6, + 0x9675: 0x52C3, + 0x9676: 0x6CA1, + 0x9677: 0x6B86, + 0x9678: 0x5800, + 0x9679: 0x5E4C, + 0x967A: 0x5954, + 0x967B: 0x672C, + 0x967C: 0x7FFB, + 0x967D: 0x51E1, + 0x967E: 0x76C6, + 0x9680: 0x6469, + 0x9681: 0x78E8, + 0x9682: 0x9B54, + 0x9683: 0x9EBB, + 0x9684: 0x57CB, + 0x9685: 0x59B9, + 0x9686: 0x6627, + 0x9687: 0x679A, + 0x9688: 0x6BCE, + 0x9689: 0x54E9, + 0x968A: 0x69D9, + 0x968B: 0x5E55, + 0x968C: 0x819C, + 0x968D: 0x6795, + 0x968E: 0x9BAA, + 0x968F: 0x67FE, + 0x9690: 0x9C52, + 0x9691: 0x685D, + 0x9692: 0x4EA6, + 0x9693: 0x4FE3, + 0x9694: 0x53C8, + 0x9695: 0x62B9, + 0x9696: 0x672B, + 0x9697: 0x6CAB, + 0x9698: 0x8FC4, + 0x9699: 0x4FAD, + 0x969A: 0x7E6D, + 0x969B: 0x9EBF, + 0x969C: 0x4E07, + 0x969D: 0x6162, + 0x969E: 0x6E80, + 0x969F: 0x6F2B, + 0x96A0: 0x8513, + 0x96A1: 0x5473, + 0x96A2: 0x672A, + 0x96A3: 0x9B45, + 0x96A4: 0x5DF3, + 0x96A5: 0x7B95, + 0x96A6: 0x5CAC, + 0x96A7: 0x5BC6, + 0x96A8: 0x871C, + 0x96A9: 0x6E4A, + 0x96AA: 0x84D1, + 0x96AB: 0x7A14, + 0x96AC: 0x8108, + 0x96AD: 0x5999, + 0x96AE: 0x7C8D, + 0x96AF: 0x6C11, + 0x96B0: 0x7720, + 0x96B1: 0x52D9, + 0x96B2: 0x5922, + 0x96B3: 0x7121, + 0x96B4: 0x725F, + 0x96B5: 0x77DB, + 0x96B6: 0x9727, + 0x96B7: 0x9D61, + 0x96B8: 0x690B, + 0x96B9: 0x5A7F, + 0x96BA: 0x5A18, + 0x96BB: 0x51A5, + 0x96BC: 0x540D, + 0x96BD: 0x547D, + 0x96BE: 0x660E, + 0x96BF: 0x76DF, + 0x96C0: 0x8FF7, + 0x96C1: 0x9298, + 0x96C2: 0x9CF4, + 0x96C3: 0x59EA, + 0x96C4: 0x725D, + 0x96C5: 0x6EC5, + 0x96C6: 0x514D, + 0x96C7: 0x68C9, + 0x96C8: 0x7DBF, + 0x96C9: 0x7DEC, + 0x96CA: 0x9762, + 0x96CB: 0x9EBA, + 0x96CC: 0x6478, + 0x96CD: 0x6A21, + 0x96CE: 0x8302, + 0x96CF: 0x5984, + 0x96D0: 0x5B5F, + 0x96D1: 0x6BDB, + 0x96D2: 0x731B, + 0x96D3: 0x76F2, + 0x96D4: 0x7DB2, + 0x96D5: 0x8017, + 0x96D6: 0x8499, + 0x96D7: 0x5132, + 0x96D8: 0x6728, + 0x96D9: 0x9ED9, + 0x96DA: 0x76EE, + 0x96DB: 0x6762, + 0x96DC: 0x52FF, + 0x96DD: 0x9905, + 0x96DE: 0x5C24, + 0x96DF: 0x623B, + 0x96E0: 0x7C7E, + 0x96E1: 0x8CB0, + 0x96E2: 0x554F, + 0x96E3: 0x60B6, + 0x96E4: 0x7D0B, + 0x96E5: 0x9580, + 0x96E6: 0x5301, + 0x96E7: 0x4E5F, + 0x96E8: 0x51B6, + 0x96E9: 0x591C, + 0x96EA: 0x723A, + 0x96EB: 0x8036, + 0x96EC: 0x91CE, + 0x96ED: 0x5F25, + 0x96EE: 0x77E2, + 0x96EF: 0x5384, + 0x96F0: 0x5F79, + 0x96F1: 0x7D04, + 0x96F2: 0x85AC, + 0x96F3: 0x8A33, + 0x96F4: 0x8E8D, + 0x96F5: 0x9756, + 0x96F6: 0x67F3, + 0x96F7: 0x85AE, + 0x96F8: 0x9453, + 0x96F9: 0x6109, + 0x96FA: 0x6108, + 0x96FB: 0x6CB9, + 0x96FC: 0x7652, + 0x9740: 0x8AED, + 0x9741: 0x8F38, + 0x9742: 0x552F, + 0x9743: 0x4F51, + 0x9744: 0x512A, + 0x9745: 0x52C7, + 0x9746: 0x53CB, + 0x9747: 0x5BA5, + 0x9748: 0x5E7D, + 0x9749: 0x60A0, + 0x974A: 0x6182, + 0x974B: 0x63D6, + 0x974C: 0x6709, + 0x974D: 0x67DA, + 0x974E: 0x6E67, + 0x974F: 0x6D8C, + 0x9750: 0x7336, + 0x9751: 0x7337, + 0x9752: 0x7531, + 0x9753: 0x7950, + 0x9754: 0x88D5, + 0x9755: 0x8A98, + 0x9756: 0x904A, + 0x9757: 0x9091, + 0x9758: 0x90F5, + 0x9759: 0x96C4, + 0x975A: 0x878D, + 0x975B: 0x5915, + 0x975C: 0x4E88, + 0x975D: 0x4F59, + 0x975E: 0x4E0E, + 0x975F: 0x8A89, + 0x9760: 0x8F3F, + 0x9761: 0x9810, + 0x9762: 0x50AD, + 0x9763: 0x5E7C, + 0x9764: 0x5996, + 0x9765: 0x5BB9, + 0x9766: 0x5EB8, + 0x9767: 0x63DA, + 0x9768: 0x63FA, + 0x9769: 0x64C1, + 0x976A: 0x66DC, + 0x976B: 0x694A, + 0x976C: 0x69D8, + 0x976D: 0x6D0B, + 0x976E: 0x6EB6, + 0x976F: 0x7194, + 0x9770: 0x7528, + 0x9771: 0x7AAF, + 0x9772: 0x7F8A, + 0x9773: 0x8000, + 0x9774: 0x8449, + 0x9775: 0x84C9, + 0x9776: 0x8981, + 0x9777: 0x8B21, + 0x9778: 0x8E0A, + 0x9779: 0x9065, + 0x977A: 0x967D, + 0x977B: 0x990A, + 0x977C: 0x617E, + 0x977D: 0x6291, + 0x977E: 0x6B32, + 0x9780: 0x6C83, + 0x9781: 0x6D74, + 0x9782: 0x7FCC, + 0x9783: 0x7FFC, + 0x9784: 0x6DC0, + 0x9785: 0x7F85, + 0x9786: 0x87BA, + 0x9787: 0x88F8, + 0x9788: 0x6765, + 0x9789: 0x83B1, + 0x978A: 0x983C, + 0x978B: 0x96F7, + 0x978C: 0x6D1B, + 0x978D: 0x7D61, + 0x978E: 0x843D, + 0x978F: 0x916A, + 0x9790: 0x4E71, + 0x9791: 0x5375, + 0x9792: 0x5D50, + 0x9793: 0x6B04, + 0x9794: 0x6FEB, + 0x9795: 0x85CD, + 0x9796: 0x862D, + 0x9797: 0x89A7, + 0x9798: 0x5229, + 0x9799: 0x540F, + 0x979A: 0x5C65, + 0x979B: 0x674E, + 0x979C: 0x68A8, + 0x979D: 0x7406, + 0x979E: 0x7483, + 0x979F: 0x75E2, + 0x97A0: 0x88CF, + 0x97A1: 0x88E1, + 0x97A2: 0x91CC, + 0x97A3: 0x96E2, + 0x97A4: 0x9678, + 0x97A5: 0x5F8B, + 0x97A6: 0x7387, + 0x97A7: 0x7ACB, + 0x97A8: 0x844E, + 0x97A9: 0x63A0, + 0x97AA: 0x7565, + 0x97AB: 0x5289, + 0x97AC: 0x6D41, + 0x97AD: 0x6E9C, + 0x97AE: 0x7409, + 0x97AF: 0x7559, + 0x97B0: 0x786B, + 0x97B1: 0x7C92, + 0x97B2: 0x9686, + 0x97B3: 0x7ADC, + 0x97B4: 0x9F8D, + 0x97B5: 0x4FB6, + 0x97B6: 0x616E, + 0x97B7: 0x65C5, + 0x97B8: 0x865C, + 0x97B9: 0x4E86, + 0x97BA: 0x4EAE, + 0x97BB: 0x50DA, + 0x97BC: 0x4E21, + 0x97BD: 0x51CC, + 0x97BE: 0x5BEE, + 0x97BF: 0x6599, + 0x97C0: 0x6881, + 0x97C1: 0x6DBC, + 0x97C2: 0x731F, + 0x97C3: 0x7642, + 0x97C4: 0x77AD, + 0x97C5: 0x7A1C, + 0x97C6: 0x7CE7, + 0x97C7: 0x826F, + 0x97C8: 0x8AD2, + 0x97C9: 0x907C, + 0x97CA: 0x91CF, + 0x97CB: 0x9675, + 0x97CC: 0x9818, + 0x97CD: 0x529B, + 0x97CE: 0x7DD1, + 0x97CF: 0x502B, + 0x97D0: 0x5398, + 0x97D1: 0x6797, + 0x97D2: 0x6DCB, + 0x97D3: 0x71D0, + 0x97D4: 0x7433, + 0x97D5: 0x81E8, + 0x97D6: 0x8F2A, + 0x97D7: 0x96A3, + 0x97D8: 0x9C57, + 0x97D9: 0x9E9F, + 0x97DA: 0x7460, + 0x97DB: 0x5841, + 0x97DC: 0x6D99, + 0x97DD: 0x7D2F, + 0x97DE: 0x985E, + 0x97DF: 0x4EE4, + 0x97E0: 0x4F36, + 0x97E1: 0x4F8B, + 0x97E2: 0x51B7, + 0x97E3: 0x52B1, + 0x97E4: 0x5DBA, + 0x97E5: 0x601C, + 0x97E6: 0x73B2, + 0x97E7: 0x793C, + 0x97E8: 0x82D3, + 0x97E9: 0x9234, + 0x97EA: 0x96B7, + 0x97EB: 0x96F6, + 0x97EC: 0x970A, + 0x97ED: 0x9E97, + 0x97EE: 0x9F62, + 0x97EF: 0x66A6, + 0x97F0: 0x6B74, + 0x97F1: 0x5217, + 0x97F2: 0x52A3, + 0x97F3: 0x70C8, + 0x97F4: 0x88C2, + 0x97F5: 0x5EC9, + 0x97F6: 0x604B, + 0x97F7: 0x6190, + 0x97F8: 0x6F23, + 0x97F9: 0x7149, + 0x97FA: 0x7C3E, + 0x97FB: 0x7DF4, + 0x97FC: 0x806F, + 0x9840: 0x84EE, + 0x9841: 0x9023, + 0x9842: 0x932C, + 0x9843: 0x5442, + 0x9844: 0x9B6F, + 0x9845: 0x6AD3, + 0x9846: 0x7089, + 0x9847: 0x8CC2, + 0x9848: 0x8DEF, + 0x9849: 0x9732, + 0x984A: 0x52B4, + 0x984B: 0x5A41, + 0x984C: 0x5ECA, + 0x984D: 0x5F04, + 0x984E: 0x6717, + 0x984F: 0x697C, + 0x9850: 0x6994, + 0x9851: 0x6D6A, + 0x9852: 0x6F0F, + 0x9853: 0x7262, + 0x9854: 0x72FC, + 0x9855: 0x7BED, + 0x9856: 0x8001, + 0x9857: 0x807E, + 0x9858: 0x874B, + 0x9859: 0x90CE, + 0x985A: 0x516D, + 0x985B: 0x9E93, + 0x985C: 0x7984, + 0x985D: 0x808B, + 0x985E: 0x9332, + 0x985F: 0x8AD6, + 0x9860: 0x502D, + 0x9861: 0x548C, + 0x9862: 0x8A71, + 0x9863: 0x6B6A, + 0x9864: 0x8CC4, + 0x9865: 0x8107, + 0x9866: 0x60D1, + 0x9867: 0x67A0, + 0x9868: 0x9DF2, + 0x9869: 0x4E99, + 0x986A: 0x4E98, + 0x986B: 0x9C10, + 0x986C: 0x8A6B, + 0x986D: 0x85C1, + 0x986E: 0x8568, + 0x986F: 0x6900, + 0x9870: 0x6E7E, + 0x9871: 0x7897, + 0x9872: 0x8155, + 0x989F: 0x5F0C, + 0x98A0: 0x4E10, + 0x98A1: 0x4E15, + 0x98A2: 0x4E2A, + 0x98A3: 0x4E31, + 0x98A4: 0x4E36, + 0x98A5: 0x4E3C, + 0x98A6: 0x4E3F, + 0x98A7: 0x4E42, + 0x98A8: 0x4E56, + 0x98A9: 0x4E58, + 0x98AA: 0x4E82, + 0x98AB: 0x4E85, + 0x98AC: 0x8C6B, + 0x98AD: 0x4E8A, + 0x98AE: 0x8212, + 0x98AF: 0x5F0D, + 0x98B0: 0x4E8E, + 0x98B1: 0x4E9E, + 0x98B2: 0x4E9F, + 0x98B3: 0x4EA0, + 0x98B4: 0x4EA2, + 0x98B5: 0x4EB0, + 0x98B6: 0x4EB3, + 0x98B7: 0x4EB6, + 0x98B8: 0x4ECE, + 0x98B9: 0x4ECD, + 0x98BA: 0x4EC4, + 0x98BB: 0x4EC6, + 0x98BC: 0x4EC2, + 0x98BD: 0x4ED7, + 0x98BE: 0x4EDE, + 0x98BF: 0x4EED, + 0x98C0: 0x4EDF, + 0x98C1: 0x4EF7, + 0x98C2: 0x4F09, + 0x98C3: 0x4F5A, + 0x98C4: 0x4F30, + 0x98C5: 0x4F5B, + 0x98C6: 0x4F5D, + 0x98C7: 0x4F57, + 0x98C8: 0x4F47, + 0x98C9: 0x4F76, + 0x98CA: 0x4F88, + 0x98CB: 0x4F8F, + 0x98CC: 0x4F98, + 0x98CD: 0x4F7B, + 0x98CE: 0x4F69, + 0x98CF: 0x4F70, + 0x98D0: 0x4F91, + 0x98D1: 0x4F6F, + 0x98D2: 0x4F86, + 0x98D3: 0x4F96, + 0x98D4: 0x5118, + 0x98D5: 0x4FD4, + 0x98D6: 0x4FDF, + 0x98D7: 0x4FCE, + 0x98D8: 0x4FD8, + 0x98D9: 0x4FDB, + 0x98DA: 0x4FD1, + 0x98DB: 0x4FDA, + 0x98DC: 0x4FD0, + 0x98DD: 0x4FE4, + 0x98DE: 0x4FE5, + 0x98DF: 0x501A, + 0x98E0: 0x5028, + 0x98E1: 0x5014, + 0x98E2: 0x502A, + 0x98E3: 0x5025, + 0x98E4: 0x5005, + 0x98E5: 0x4F1C, + 0x98E6: 0x4FF6, + 0x98E7: 0x5021, + 0x98E8: 0x5029, + 0x98E9: 0x502C, + 0x98EA: 0x4FFE, + 0x98EB: 0x4FEF, + 0x98EC: 0x5011, + 0x98ED: 0x5006, + 0x98EE: 0x5043, + 0x98EF: 0x5047, + 0x98F0: 0x6703, + 0x98F1: 0x5055, + 0x98F2: 0x5050, + 0x98F3: 0x5048, + 0x98F4: 0x505A, + 0x98F5: 0x5056, + 0x98F6: 0x506C, + 0x98F7: 0x5078, + 0x98F8: 0x5080, + 0x98F9: 0x509A, + 0x98FA: 0x5085, + 0x98FB: 0x50B4, + 0x98FC: 0x50B2, + 0x9940: 0x50C9, + 0x9941: 0x50CA, + 0x9942: 0x50B3, + 0x9943: 0x50C2, + 0x9944: 0x50D6, + 0x9945: 0x50DE, + 0x9946: 0x50E5, + 0x9947: 0x50ED, + 0x9948: 0x50E3, + 0x9949: 0x50EE, + 0x994A: 0x50F9, + 0x994B: 0x50F5, + 0x994C: 0x5109, + 0x994D: 0x5101, + 0x994E: 0x5102, + 0x994F: 0x5116, + 0x9950: 0x5115, + 0x9951: 0x5114, + 0x9952: 0x511A, + 0x9953: 0x5121, + 0x9954: 0x513A, + 0x9955: 0x5137, + 0x9956: 0x513C, + 0x9957: 0x513B, + 0x9958: 0x513F, + 0x9959: 0x5140, + 0x995A: 0x5152, + 0x995B: 0x514C, + 0x995C: 0x5154, + 0x995D: 0x5162, + 0x995E: 0x7AF8, + 0x995F: 0x5169, + 0x9960: 0x516A, + 0x9961: 0x516E, + 0x9962: 0x5180, + 0x9963: 0x5182, + 0x9964: 0x56D8, + 0x9965: 0x518C, + 0x9966: 0x5189, + 0x9967: 0x518F, + 0x9968: 0x5191, + 0x9969: 0x5193, + 0x996A: 0x5195, + 0x996B: 0x5196, + 0x996C: 0x51A4, + 0x996D: 0x51A6, + 0x996E: 0x51A2, + 0x996F: 0x51A9, + 0x9970: 0x51AA, + 0x9971: 0x51AB, + 0x9972: 0x51B3, + 0x9973: 0x51B1, + 0x9974: 0x51B2, + 0x9975: 0x51B0, + 0x9976: 0x51B5, + 0x9977: 0x51BD, + 0x9978: 0x51C5, + 0x9979: 0x51C9, + 0x997A: 0x51DB, + 0x997B: 0x51E0, + 0x997C: 0x8655, + 0x997D: 0x51E9, + 0x997E: 0x51ED, + 0x9980: 0x51F0, + 0x9981: 0x51F5, + 0x9982: 0x51FE, + 0x9983: 0x5204, + 0x9984: 0x520B, + 0x9985: 0x5214, + 0x9986: 0x520E, + 0x9987: 0x5227, + 0x9988: 0x522A, + 0x9989: 0x522E, + 0x998A: 0x5233, + 0x998B: 0x5239, + 0x998C: 0x524F, + 0x998D: 0x5244, + 0x998E: 0x524B, + 0x998F: 0x524C, + 0x9990: 0x525E, + 0x9991: 0x5254, + 0x9992: 0x526A, + 0x9993: 0x5274, + 0x9994: 0x5269, + 0x9995: 0x5273, + 0x9996: 0x527F, + 0x9997: 0x527D, + 0x9998: 0x528D, + 0x9999: 0x5294, + 0x999A: 0x5292, + 0x999B: 0x5271, + 0x999C: 0x5288, + 0x999D: 0x5291, + 0x999E: 0x8FA8, + 0x999F: 0x8FA7, + 0x99A0: 0x52AC, + 0x99A1: 0x52AD, + 0x99A2: 0x52BC, + 0x99A3: 0x52B5, + 0x99A4: 0x52C1, + 0x99A5: 0x52CD, + 0x99A6: 0x52D7, + 0x99A7: 0x52DE, + 0x99A8: 0x52E3, + 0x99A9: 0x52E6, + 0x99AA: 0x98ED, + 0x99AB: 0x52E0, + 0x99AC: 0x52F3, + 0x99AD: 0x52F5, + 0x99AE: 0x52F8, + 0x99AF: 0x52F9, + 0x99B0: 0x5306, + 0x99B1: 0x5308, + 0x99B2: 0x7538, + 0x99B3: 0x530D, + 0x99B4: 0x5310, + 0x99B5: 0x530F, + 0x99B6: 0x5315, + 0x99B7: 0x531A, + 0x99B8: 0x5323, + 0x99B9: 0x532F, + 0x99BA: 0x5331, + 0x99BB: 0x5333, + 0x99BC: 0x5338, + 0x99BD: 0x5340, + 0x99BE: 0x5346, + 0x99BF: 0x5345, + 0x99C0: 0x4E17, + 0x99C1: 0x5349, + 0x99C2: 0x534D, + 0x99C3: 0x51D6, + 0x99C4: 0x535E, + 0x99C5: 0x5369, + 0x99C6: 0x536E, + 0x99C7: 0x5918, + 0x99C8: 0x537B, + 0x99C9: 0x5377, + 0x99CA: 0x5382, + 0x99CB: 0x5396, + 0x99CC: 0x53A0, + 0x99CD: 0x53A6, + 0x99CE: 0x53A5, + 0x99CF: 0x53AE, + 0x99D0: 0x53B0, + 0x99D1: 0x53B6, + 0x99D2: 0x53C3, + 0x99D3: 0x7C12, + 0x99D4: 0x96D9, + 0x99D5: 0x53DF, + 0x99D6: 0x66FC, + 0x99D7: 0x71EE, + 0x99D8: 0x53EE, + 0x99D9: 0x53E8, + 0x99DA: 0x53ED, + 0x99DB: 0x53FA, + 0x99DC: 0x5401, + 0x99DD: 0x543D, + 0x99DE: 0x5440, + 0x99DF: 0x542C, + 0x99E0: 0x542D, + 0x99E1: 0x543C, + 0x99E2: 0x542E, + 0x99E3: 0x5436, + 0x99E4: 0x5429, + 0x99E5: 0x541D, + 0x99E6: 0x544E, + 0x99E7: 0x548F, + 0x99E8: 0x5475, + 0x99E9: 0x548E, + 0x99EA: 0x545F, + 0x99EB: 0x5471, + 0x99EC: 0x5477, + 0x99ED: 0x5470, + 0x99EE: 0x5492, + 0x99EF: 0x547B, + 0x99F0: 0x5480, + 0x99F1: 0x5476, + 0x99F2: 0x5484, + 0x99F3: 0x5490, + 0x99F4: 0x5486, + 0x99F5: 0x54C7, + 0x99F6: 0x54A2, + 0x99F7: 0x54B8, + 0x99F8: 0x54A5, + 0x99F9: 0x54AC, + 0x99FA: 0x54C4, + 0x99FB: 0x54C8, + 0x99FC: 0x54A8, + 0x9A40: 0x54AB, + 0x9A41: 0x54C2, + 0x9A42: 0x54A4, + 0x9A43: 0x54BE, + 0x9A44: 0x54BC, + 0x9A45: 0x54D8, + 0x9A46: 0x54E5, + 0x9A47: 0x54E6, + 0x9A48: 0x550F, + 0x9A49: 0x5514, + 0x9A4A: 0x54FD, + 0x9A4B: 0x54EE, + 0x9A4C: 0x54ED, + 0x9A4D: 0x54FA, + 0x9A4E: 0x54E2, + 0x9A4F: 0x5539, + 0x9A50: 0x5540, + 0x9A51: 0x5563, + 0x9A52: 0x554C, + 0x9A53: 0x552E, + 0x9A54: 0x555C, + 0x9A55: 0x5545, + 0x9A56: 0x5556, + 0x9A57: 0x5557, + 0x9A58: 0x5538, + 0x9A59: 0x5533, + 0x9A5A: 0x555D, + 0x9A5B: 0x5599, + 0x9A5C: 0x5580, + 0x9A5D: 0x54AF, + 0x9A5E: 0x558A, + 0x9A5F: 0x559F, + 0x9A60: 0x557B, + 0x9A61: 0x557E, + 0x9A62: 0x5598, + 0x9A63: 0x559E, + 0x9A64: 0x55AE, + 0x9A65: 0x557C, + 0x9A66: 0x5583, + 0x9A67: 0x55A9, + 0x9A68: 0x5587, + 0x9A69: 0x55A8, + 0x9A6A: 0x55DA, + 0x9A6B: 0x55C5, + 0x9A6C: 0x55DF, + 0x9A6D: 0x55C4, + 0x9A6E: 0x55DC, + 0x9A6F: 0x55E4, + 0x9A70: 0x55D4, + 0x9A71: 0x5614, + 0x9A72: 0x55F7, + 0x9A73: 0x5616, + 0x9A74: 0x55FE, + 0x9A75: 0x55FD, + 0x9A76: 0x561B, + 0x9A77: 0x55F9, + 0x9A78: 0x564E, + 0x9A79: 0x5650, + 0x9A7A: 0x71DF, + 0x9A7B: 0x5634, + 0x9A7C: 0x5636, + 0x9A7D: 0x5632, + 0x9A7E: 0x5638, + 0x9A80: 0x566B, + 0x9A81: 0x5664, + 0x9A82: 0x562F, + 0x9A83: 0x566C, + 0x9A84: 0x566A, + 0x9A85: 0x5686, + 0x9A86: 0x5680, + 0x9A87: 0x568A, + 0x9A88: 0x56A0, + 0x9A89: 0x5694, + 0x9A8A: 0x568F, + 0x9A8B: 0x56A5, + 0x9A8C: 0x56AE, + 0x9A8D: 0x56B6, + 0x9A8E: 0x56B4, + 0x9A8F: 0x56C2, + 0x9A90: 0x56BC, + 0x9A91: 0x56C1, + 0x9A92: 0x56C3, + 0x9A93: 0x56C0, + 0x9A94: 0x56C8, + 0x9A95: 0x56CE, + 0x9A96: 0x56D1, + 0x9A97: 0x56D3, + 0x9A98: 0x56D7, + 0x9A99: 0x56EE, + 0x9A9A: 0x56F9, + 0x9A9B: 0x5700, + 0x9A9C: 0x56FF, + 0x9A9D: 0x5704, + 0x9A9E: 0x5709, + 0x9A9F: 0x5708, + 0x9AA0: 0x570B, + 0x9AA1: 0x570D, + 0x9AA2: 0x5713, + 0x9AA3: 0x5718, + 0x9AA4: 0x5716, + 0x9AA5: 0x55C7, + 0x9AA6: 0x571C, + 0x9AA7: 0x5726, + 0x9AA8: 0x5737, + 0x9AA9: 0x5738, + 0x9AAA: 0x574E, + 0x9AAB: 0x573B, + 0x9AAC: 0x5740, + 0x9AAD: 0x574F, + 0x9AAE: 0x5769, + 0x9AAF: 0x57C0, + 0x9AB0: 0x5788, + 0x9AB1: 0x5761, + 0x9AB2: 0x577F, + 0x9AB3: 0x5789, + 0x9AB4: 0x5793, + 0x9AB5: 0x57A0, + 0x9AB6: 0x57B3, + 0x9AB7: 0x57A4, + 0x9AB8: 0x57AA, + 0x9AB9: 0x57B0, + 0x9ABA: 0x57C3, + 0x9ABB: 0x57C6, + 0x9ABC: 0x57D4, + 0x9ABD: 0x57D2, + 0x9ABE: 0x57D3, + 0x9ABF: 0x580A, + 0x9AC0: 0x57D6, + 0x9AC1: 0x57E3, + 0x9AC2: 0x580B, + 0x9AC3: 0x5819, + 0x9AC4: 0x581D, + 0x9AC5: 0x5872, + 0x9AC6: 0x5821, + 0x9AC7: 0x5862, + 0x9AC8: 0x584B, + 0x9AC9: 0x5870, + 0x9ACA: 0x6BC0, + 0x9ACB: 0x5852, + 0x9ACC: 0x583D, + 0x9ACD: 0x5879, + 0x9ACE: 0x5885, + 0x9ACF: 0x58B9, + 0x9AD0: 0x589F, + 0x9AD1: 0x58AB, + 0x9AD2: 0x58BA, + 0x9AD3: 0x58DE, + 0x9AD4: 0x58BB, + 0x9AD5: 0x58B8, + 0x9AD6: 0x58AE, + 0x9AD7: 0x58C5, + 0x9AD8: 0x58D3, + 0x9AD9: 0x58D1, + 0x9ADA: 0x58D7, + 0x9ADB: 0x58D9, + 0x9ADC: 0x58D8, + 0x9ADD: 0x58E5, + 0x9ADE: 0x58DC, + 0x9ADF: 0x58E4, + 0x9AE0: 0x58DF, + 0x9AE1: 0x58EF, + 0x9AE2: 0x58FA, + 0x9AE3: 0x58F9, + 0x9AE4: 0x58FB, + 0x9AE5: 0x58FC, + 0x9AE6: 0x58FD, + 0x9AE7: 0x5902, + 0x9AE8: 0x590A, + 0x9AE9: 0x5910, + 0x9AEA: 0x591B, + 0x9AEB: 0x68A6, + 0x9AEC: 0x5925, + 0x9AED: 0x592C, + 0x9AEE: 0x592D, + 0x9AEF: 0x5932, + 0x9AF0: 0x5938, + 0x9AF1: 0x593E, + 0x9AF2: 0x7AD2, + 0x9AF3: 0x5955, + 0x9AF4: 0x5950, + 0x9AF5: 0x594E, + 0x9AF6: 0x595A, + 0x9AF7: 0x5958, + 0x9AF8: 0x5962, + 0x9AF9: 0x5960, + 0x9AFA: 0x5967, + 0x9AFB: 0x596C, + 0x9AFC: 0x5969, + 0x9B40: 0x5978, + 0x9B41: 0x5981, + 0x9B42: 0x599D, + 0x9B43: 0x4F5E, + 0x9B44: 0x4FAB, + 0x9B45: 0x59A3, + 0x9B46: 0x59B2, + 0x9B47: 0x59C6, + 0x9B48: 0x59E8, + 0x9B49: 0x59DC, + 0x9B4A: 0x598D, + 0x9B4B: 0x59D9, + 0x9B4C: 0x59DA, + 0x9B4D: 0x5A25, + 0x9B4E: 0x5A1F, + 0x9B4F: 0x5A11, + 0x9B50: 0x5A1C, + 0x9B51: 0x5A09, + 0x9B52: 0x5A1A, + 0x9B53: 0x5A40, + 0x9B54: 0x5A6C, + 0x9B55: 0x5A49, + 0x9B56: 0x5A35, + 0x9B57: 0x5A36, + 0x9B58: 0x5A62, + 0x9B59: 0x5A6A, + 0x9B5A: 0x5A9A, + 0x9B5B: 0x5ABC, + 0x9B5C: 0x5ABE, + 0x9B5D: 0x5ACB, + 0x9B5E: 0x5AC2, + 0x9B5F: 0x5ABD, + 0x9B60: 0x5AE3, + 0x9B61: 0x5AD7, + 0x9B62: 0x5AE6, + 0x9B63: 0x5AE9, + 0x9B64: 0x5AD6, + 0x9B65: 0x5AFA, + 0x9B66: 0x5AFB, + 0x9B67: 0x5B0C, + 0x9B68: 0x5B0B, + 0x9B69: 0x5B16, + 0x9B6A: 0x5B32, + 0x9B6B: 0x5AD0, + 0x9B6C: 0x5B2A, + 0x9B6D: 0x5B36, + 0x9B6E: 0x5B3E, + 0x9B6F: 0x5B43, + 0x9B70: 0x5B45, + 0x9B71: 0x5B40, + 0x9B72: 0x5B51, + 0x9B73: 0x5B55, + 0x9B74: 0x5B5A, + 0x9B75: 0x5B5B, + 0x9B76: 0x5B65, + 0x9B77: 0x5B69, + 0x9B78: 0x5B70, + 0x9B79: 0x5B73, + 0x9B7A: 0x5B75, + 0x9B7B: 0x5B78, + 0x9B7C: 0x6588, + 0x9B7D: 0x5B7A, + 0x9B7E: 0x5B80, + 0x9B80: 0x5B83, + 0x9B81: 0x5BA6, + 0x9B82: 0x5BB8, + 0x9B83: 0x5BC3, + 0x9B84: 0x5BC7, + 0x9B85: 0x5BC9, + 0x9B86: 0x5BD4, + 0x9B87: 0x5BD0, + 0x9B88: 0x5BE4, + 0x9B89: 0x5BE6, + 0x9B8A: 0x5BE2, + 0x9B8B: 0x5BDE, + 0x9B8C: 0x5BE5, + 0x9B8D: 0x5BEB, + 0x9B8E: 0x5BF0, + 0x9B8F: 0x5BF6, + 0x9B90: 0x5BF3, + 0x9B91: 0x5C05, + 0x9B92: 0x5C07, + 0x9B93: 0x5C08, + 0x9B94: 0x5C0D, + 0x9B95: 0x5C13, + 0x9B96: 0x5C20, + 0x9B97: 0x5C22, + 0x9B98: 0x5C28, + 0x9B99: 0x5C38, + 0x9B9A: 0x5C39, + 0x9B9B: 0x5C41, + 0x9B9C: 0x5C46, + 0x9B9D: 0x5C4E, + 0x9B9E: 0x5C53, + 0x9B9F: 0x5C50, + 0x9BA0: 0x5C4F, + 0x9BA1: 0x5B71, + 0x9BA2: 0x5C6C, + 0x9BA3: 0x5C6E, + 0x9BA4: 0x4E62, + 0x9BA5: 0x5C76, + 0x9BA6: 0x5C79, + 0x9BA7: 0x5C8C, + 0x9BA8: 0x5C91, + 0x9BA9: 0x5C94, + 0x9BAA: 0x599B, + 0x9BAB: 0x5CAB, + 0x9BAC: 0x5CBB, + 0x9BAD: 0x5CB6, + 0x9BAE: 0x5CBC, + 0x9BAF: 0x5CB7, + 0x9BB0: 0x5CC5, + 0x9BB1: 0x5CBE, + 0x9BB2: 0x5CC7, + 0x9BB3: 0x5CD9, + 0x9BB4: 0x5CE9, + 0x9BB5: 0x5CFD, + 0x9BB6: 0x5CFA, + 0x9BB7: 0x5CED, + 0x9BB8: 0x5D8C, + 0x9BB9: 0x5CEA, + 0x9BBA: 0x5D0B, + 0x9BBB: 0x5D15, + 0x9BBC: 0x5D17, + 0x9BBD: 0x5D5C, + 0x9BBE: 0x5D1F, + 0x9BBF: 0x5D1B, + 0x9BC0: 0x5D11, + 0x9BC1: 0x5D14, + 0x9BC2: 0x5D22, + 0x9BC3: 0x5D1A, + 0x9BC4: 0x5D19, + 0x9BC5: 0x5D18, + 0x9BC6: 0x5D4C, + 0x9BC7: 0x5D52, + 0x9BC8: 0x5D4E, + 0x9BC9: 0x5D4B, + 0x9BCA: 0x5D6C, + 0x9BCB: 0x5D73, + 0x9BCC: 0x5D76, + 0x9BCD: 0x5D87, + 0x9BCE: 0x5D84, + 0x9BCF: 0x5D82, + 0x9BD0: 0x5DA2, + 0x9BD1: 0x5D9D, + 0x9BD2: 0x5DAC, + 0x9BD3: 0x5DAE, + 0x9BD4: 0x5DBD, + 0x9BD5: 0x5D90, + 0x9BD6: 0x5DB7, + 0x9BD7: 0x5DBC, + 0x9BD8: 0x5DC9, + 0x9BD9: 0x5DCD, + 0x9BDA: 0x5DD3, + 0x9BDB: 0x5DD2, + 0x9BDC: 0x5DD6, + 0x9BDD: 0x5DDB, + 0x9BDE: 0x5DEB, + 0x9BDF: 0x5DF2, + 0x9BE0: 0x5DF5, + 0x9BE1: 0x5E0B, + 0x9BE2: 0x5E1A, + 0x9BE3: 0x5E19, + 0x9BE4: 0x5E11, + 0x9BE5: 0x5E1B, + 0x9BE6: 0x5E36, + 0x9BE7: 0x5E37, + 0x9BE8: 0x5E44, + 0x9BE9: 0x5E43, + 0x9BEA: 0x5E40, + 0x9BEB: 0x5E4E, + 0x9BEC: 0x5E57, + 0x9BED: 0x5E54, + 0x9BEE: 0x5E5F, + 0x9BEF: 0x5E62, + 0x9BF0: 0x5E64, + 0x9BF1: 0x5E47, + 0x9BF2: 0x5E75, + 0x9BF3: 0x5E76, + 0x9BF4: 0x5E7A, + 0x9BF5: 0x9EBC, + 0x9BF6: 0x5E7F, + 0x9BF7: 0x5EA0, + 0x9BF8: 0x5EC1, + 0x9BF9: 0x5EC2, + 0x9BFA: 0x5EC8, + 0x9BFB: 0x5ED0, + 0x9BFC: 0x5ECF, + 0x9C40: 0x5ED6, + 0x9C41: 0x5EE3, + 0x9C42: 0x5EDD, + 0x9C43: 0x5EDA, + 0x9C44: 0x5EDB, + 0x9C45: 0x5EE2, + 0x9C46: 0x5EE1, + 0x9C47: 0x5EE8, + 0x9C48: 0x5EE9, + 0x9C49: 0x5EEC, + 0x9C4A: 0x5EF1, + 0x9C4B: 0x5EF3, + 0x9C4C: 0x5EF0, + 0x9C4D: 0x5EF4, + 0x9C4E: 0x5EF8, + 0x9C4F: 0x5EFE, + 0x9C50: 0x5F03, + 0x9C51: 0x5F09, + 0x9C52: 0x5F5D, + 0x9C53: 0x5F5C, + 0x9C54: 0x5F0B, + 0x9C55: 0x5F11, + 0x9C56: 0x5F16, + 0x9C57: 0x5F29, + 0x9C58: 0x5F2D, + 0x9C59: 0x5F38, + 0x9C5A: 0x5F41, + 0x9C5B: 0x5F48, + 0x9C5C: 0x5F4C, + 0x9C5D: 0x5F4E, + 0x9C5E: 0x5F2F, + 0x9C5F: 0x5F51, + 0x9C60: 0x5F56, + 0x9C61: 0x5F57, + 0x9C62: 0x5F59, + 0x9C63: 0x5F61, + 0x9C64: 0x5F6D, + 0x9C65: 0x5F73, + 0x9C66: 0x5F77, + 0x9C67: 0x5F83, + 0x9C68: 0x5F82, + 0x9C69: 0x5F7F, + 0x9C6A: 0x5F8A, + 0x9C6B: 0x5F88, + 0x9C6C: 0x5F91, + 0x9C6D: 0x5F87, + 0x9C6E: 0x5F9E, + 0x9C6F: 0x5F99, + 0x9C70: 0x5F98, + 0x9C71: 0x5FA0, + 0x9C72: 0x5FA8, + 0x9C73: 0x5FAD, + 0x9C74: 0x5FBC, + 0x9C75: 0x5FD6, + 0x9C76: 0x5FFB, + 0x9C77: 0x5FE4, + 0x9C78: 0x5FF8, + 0x9C79: 0x5FF1, + 0x9C7A: 0x5FDD, + 0x9C7B: 0x60B3, + 0x9C7C: 0x5FFF, + 0x9C7D: 0x6021, + 0x9C7E: 0x6060, + 0x9C80: 0x6019, + 0x9C81: 0x6010, + 0x9C82: 0x6029, + 0x9C83: 0x600E, + 0x9C84: 0x6031, + 0x9C85: 0x601B, + 0x9C86: 0x6015, + 0x9C87: 0x602B, + 0x9C88: 0x6026, + 0x9C89: 0x600F, + 0x9C8A: 0x603A, + 0x9C8B: 0x605A, + 0x9C8C: 0x6041, + 0x9C8D: 0x606A, + 0x9C8E: 0x6077, + 0x9C8F: 0x605F, + 0x9C90: 0x604A, + 0x9C91: 0x6046, + 0x9C92: 0x604D, + 0x9C93: 0x6063, + 0x9C94: 0x6043, + 0x9C95: 0x6064, + 0x9C96: 0x6042, + 0x9C97: 0x606C, + 0x9C98: 0x606B, + 0x9C99: 0x6059, + 0x9C9A: 0x6081, + 0x9C9B: 0x608D, + 0x9C9C: 0x60E7, + 0x9C9D: 0x6083, + 0x9C9E: 0x609A, + 0x9C9F: 0x6084, + 0x9CA0: 0x609B, + 0x9CA1: 0x6096, + 0x9CA2: 0x6097, + 0x9CA3: 0x6092, + 0x9CA4: 0x60A7, + 0x9CA5: 0x608B, + 0x9CA6: 0x60E1, + 0x9CA7: 0x60B8, + 0x9CA8: 0x60E0, + 0x9CA9: 0x60D3, + 0x9CAA: 0x60B4, + 0x9CAB: 0x5FF0, + 0x9CAC: 0x60BD, + 0x9CAD: 0x60C6, + 0x9CAE: 0x60B5, + 0x9CAF: 0x60D8, + 0x9CB0: 0x614D, + 0x9CB1: 0x6115, + 0x9CB2: 0x6106, + 0x9CB3: 0x60F6, + 0x9CB4: 0x60F7, + 0x9CB5: 0x6100, + 0x9CB6: 0x60F4, + 0x9CB7: 0x60FA, + 0x9CB8: 0x6103, + 0x9CB9: 0x6121, + 0x9CBA: 0x60FB, + 0x9CBB: 0x60F1, + 0x9CBC: 0x610D, + 0x9CBD: 0x610E, + 0x9CBE: 0x6147, + 0x9CBF: 0x613E, + 0x9CC0: 0x6128, + 0x9CC1: 0x6127, + 0x9CC2: 0x614A, + 0x9CC3: 0x613F, + 0x9CC4: 0x613C, + 0x9CC5: 0x612C, + 0x9CC6: 0x6134, + 0x9CC7: 0x613D, + 0x9CC8: 0x6142, + 0x9CC9: 0x6144, + 0x9CCA: 0x6173, + 0x9CCB: 0x6177, + 0x9CCC: 0x6158, + 0x9CCD: 0x6159, + 0x9CCE: 0x615A, + 0x9CCF: 0x616B, + 0x9CD0: 0x6174, + 0x9CD1: 0x616F, + 0x9CD2: 0x6165, + 0x9CD3: 0x6171, + 0x9CD4: 0x615F, + 0x9CD5: 0x615D, + 0x9CD6: 0x6153, + 0x9CD7: 0x6175, + 0x9CD8: 0x6199, + 0x9CD9: 0x6196, + 0x9CDA: 0x6187, + 0x9CDB: 0x61AC, + 0x9CDC: 0x6194, + 0x9CDD: 0x619A, + 0x9CDE: 0x618A, + 0x9CDF: 0x6191, + 0x9CE0: 0x61AB, + 0x9CE1: 0x61AE, + 0x9CE2: 0x61CC, + 0x9CE3: 0x61CA, + 0x9CE4: 0x61C9, + 0x9CE5: 0x61F7, + 0x9CE6: 0x61C8, + 0x9CE7: 0x61C3, + 0x9CE8: 0x61C6, + 0x9CE9: 0x61BA, + 0x9CEA: 0x61CB, + 0x9CEB: 0x7F79, + 0x9CEC: 0x61CD, + 0x9CED: 0x61E6, + 0x9CEE: 0x61E3, + 0x9CEF: 0x61F6, + 0x9CF0: 0x61FA, + 0x9CF1: 0x61F4, + 0x9CF2: 0x61FF, + 0x9CF3: 0x61FD, + 0x9CF4: 0x61FC, + 0x9CF5: 0x61FE, + 0x9CF6: 0x6200, + 0x9CF7: 0x6208, + 0x9CF8: 0x6209, + 0x9CF9: 0x620D, + 0x9CFA: 0x620C, + 0x9CFB: 0x6214, + 0x9CFC: 0x621B, + 0x9D40: 0x621E, + 0x9D41: 0x6221, + 0x9D42: 0x622A, + 0x9D43: 0x622E, + 0x9D44: 0x6230, + 0x9D45: 0x6232, + 0x9D46: 0x6233, + 0x9D47: 0x6241, + 0x9D48: 0x624E, + 0x9D49: 0x625E, + 0x9D4A: 0x6263, + 0x9D4B: 0x625B, + 0x9D4C: 0x6260, + 0x9D4D: 0x6268, + 0x9D4E: 0x627C, + 0x9D4F: 0x6282, + 0x9D50: 0x6289, + 0x9D51: 0x627E, + 0x9D52: 0x6292, + 0x9D53: 0x6293, + 0x9D54: 0x6296, + 0x9D55: 0x62D4, + 0x9D56: 0x6283, + 0x9D57: 0x6294, + 0x9D58: 0x62D7, + 0x9D59: 0x62D1, + 0x9D5A: 0x62BB, + 0x9D5B: 0x62CF, + 0x9D5C: 0x62FF, + 0x9D5D: 0x62C6, + 0x9D5E: 0x64D4, + 0x9D5F: 0x62C8, + 0x9D60: 0x62DC, + 0x9D61: 0x62CC, + 0x9D62: 0x62CA, + 0x9D63: 0x62C2, + 0x9D64: 0x62C7, + 0x9D65: 0x629B, + 0x9D66: 0x62C9, + 0x9D67: 0x630C, + 0x9D68: 0x62EE, + 0x9D69: 0x62F1, + 0x9D6A: 0x6327, + 0x9D6B: 0x6302, + 0x9D6C: 0x6308, + 0x9D6D: 0x62EF, + 0x9D6E: 0x62F5, + 0x9D6F: 0x6350, + 0x9D70: 0x633E, + 0x9D71: 0x634D, + 0x9D72: 0x641C, + 0x9D73: 0x634F, + 0x9D74: 0x6396, + 0x9D75: 0x638E, + 0x9D76: 0x6380, + 0x9D77: 0x63AB, + 0x9D78: 0x6376, + 0x9D79: 0x63A3, + 0x9D7A: 0x638F, + 0x9D7B: 0x6389, + 0x9D7C: 0x639F, + 0x9D7D: 0x63B5, + 0x9D7E: 0x636B, + 0x9D80: 0x6369, + 0x9D81: 0x63BE, + 0x9D82: 0x63E9, + 0x9D83: 0x63C0, + 0x9D84: 0x63C6, + 0x9D85: 0x63E3, + 0x9D86: 0x63C9, + 0x9D87: 0x63D2, + 0x9D88: 0x63F6, + 0x9D89: 0x63C4, + 0x9D8A: 0x6416, + 0x9D8B: 0x6434, + 0x9D8C: 0x6406, + 0x9D8D: 0x6413, + 0x9D8E: 0x6426, + 0x9D8F: 0x6436, + 0x9D90: 0x651D, + 0x9D91: 0x6417, + 0x9D92: 0x6428, + 0x9D93: 0x640F, + 0x9D94: 0x6467, + 0x9D95: 0x646F, + 0x9D96: 0x6476, + 0x9D97: 0x644E, + 0x9D98: 0x652A, + 0x9D99: 0x6495, + 0x9D9A: 0x6493, + 0x9D9B: 0x64A5, + 0x9D9C: 0x64A9, + 0x9D9D: 0x6488, + 0x9D9E: 0x64BC, + 0x9D9F: 0x64DA, + 0x9DA0: 0x64D2, + 0x9DA1: 0x64C5, + 0x9DA2: 0x64C7, + 0x9DA3: 0x64BB, + 0x9DA4: 0x64D8, + 0x9DA5: 0x64C2, + 0x9DA6: 0x64F1, + 0x9DA7: 0x64E7, + 0x9DA8: 0x8209, + 0x9DA9: 0x64E0, + 0x9DAA: 0x64E1, + 0x9DAB: 0x62AC, + 0x9DAC: 0x64E3, + 0x9DAD: 0x64EF, + 0x9DAE: 0x652C, + 0x9DAF: 0x64F6, + 0x9DB0: 0x64F4, + 0x9DB1: 0x64F2, + 0x9DB2: 0x64FA, + 0x9DB3: 0x6500, + 0x9DB4: 0x64FD, + 0x9DB5: 0x6518, + 0x9DB6: 0x651C, + 0x9DB7: 0x6505, + 0x9DB8: 0x6524, + 0x9DB9: 0x6523, + 0x9DBA: 0x652B, + 0x9DBB: 0x6534, + 0x9DBC: 0x6535, + 0x9DBD: 0x6537, + 0x9DBE: 0x6536, + 0x9DBF: 0x6538, + 0x9DC0: 0x754B, + 0x9DC1: 0x6548, + 0x9DC2: 0x6556, + 0x9DC3: 0x6555, + 0x9DC4: 0x654D, + 0x9DC5: 0x6558, + 0x9DC6: 0x655E, + 0x9DC7: 0x655D, + 0x9DC8: 0x6572, + 0x9DC9: 0x6578, + 0x9DCA: 0x6582, + 0x9DCB: 0x6583, + 0x9DCC: 0x8B8A, + 0x9DCD: 0x659B, + 0x9DCE: 0x659F, + 0x9DCF: 0x65AB, + 0x9DD0: 0x65B7, + 0x9DD1: 0x65C3, + 0x9DD2: 0x65C6, + 0x9DD3: 0x65C1, + 0x9DD4: 0x65C4, + 0x9DD5: 0x65CC, + 0x9DD6: 0x65D2, + 0x9DD7: 0x65DB, + 0x9DD8: 0x65D9, + 0x9DD9: 0x65E0, + 0x9DDA: 0x65E1, + 0x9DDB: 0x65F1, + 0x9DDC: 0x6772, + 0x9DDD: 0x660A, + 0x9DDE: 0x6603, + 0x9DDF: 0x65FB, + 0x9DE0: 0x6773, + 0x9DE1: 0x6635, + 0x9DE2: 0x6636, + 0x9DE3: 0x6634, + 0x9DE4: 0x661C, + 0x9DE5: 0x664F, + 0x9DE6: 0x6644, + 0x9DE7: 0x6649, + 0x9DE8: 0x6641, + 0x9DE9: 0x665E, + 0x9DEA: 0x665D, + 0x9DEB: 0x6664, + 0x9DEC: 0x6667, + 0x9DED: 0x6668, + 0x9DEE: 0x665F, + 0x9DEF: 0x6662, + 0x9DF0: 0x6670, + 0x9DF1: 0x6683, + 0x9DF2: 0x6688, + 0x9DF3: 0x668E, + 0x9DF4: 0x6689, + 0x9DF5: 0x6684, + 0x9DF6: 0x6698, + 0x9DF7: 0x669D, + 0x9DF8: 0x66C1, + 0x9DF9: 0x66B9, + 0x9DFA: 0x66C9, + 0x9DFB: 0x66BE, + 0x9DFC: 0x66BC, + 0x9E40: 0x66C4, + 0x9E41: 0x66B8, + 0x9E42: 0x66D6, + 0x9E43: 0x66DA, + 0x9E44: 0x66E0, + 0x9E45: 0x663F, + 0x9E46: 0x66E6, + 0x9E47: 0x66E9, + 0x9E48: 0x66F0, + 0x9E49: 0x66F5, + 0x9E4A: 0x66F7, + 0x9E4B: 0x670F, + 0x9E4C: 0x6716, + 0x9E4D: 0x671E, + 0x9E4E: 0x6726, + 0x9E4F: 0x6727, + 0x9E50: 0x9738, + 0x9E51: 0x672E, + 0x9E52: 0x673F, + 0x9E53: 0x6736, + 0x9E54: 0x6741, + 0x9E55: 0x6738, + 0x9E56: 0x6737, + 0x9E57: 0x6746, + 0x9E58: 0x675E, + 0x9E59: 0x6760, + 0x9E5A: 0x6759, + 0x9E5B: 0x6763, + 0x9E5C: 0x6764, + 0x9E5D: 0x6789, + 0x9E5E: 0x6770, + 0x9E5F: 0x67A9, + 0x9E60: 0x677C, + 0x9E61: 0x676A, + 0x9E62: 0x678C, + 0x9E63: 0x678B, + 0x9E64: 0x67A6, + 0x9E65: 0x67A1, + 0x9E66: 0x6785, + 0x9E67: 0x67B7, + 0x9E68: 0x67EF, + 0x9E69: 0x67B4, + 0x9E6A: 0x67EC, + 0x9E6B: 0x67B3, + 0x9E6C: 0x67E9, + 0x9E6D: 0x67B8, + 0x9E6E: 0x67E4, + 0x9E6F: 0x67DE, + 0x9E70: 0x67DD, + 0x9E71: 0x67E2, + 0x9E72: 0x67EE, + 0x9E73: 0x67B9, + 0x9E74: 0x67CE, + 0x9E75: 0x67C6, + 0x9E76: 0x67E7, + 0x9E77: 0x6A9C, + 0x9E78: 0x681E, + 0x9E79: 0x6846, + 0x9E7A: 0x6829, + 0x9E7B: 0x6840, + 0x9E7C: 0x684D, + 0x9E7D: 0x6832, + 0x9E7E: 0x684E, + 0x9E80: 0x68B3, + 0x9E81: 0x682B, + 0x9E82: 0x6859, + 0x9E83: 0x6863, + 0x9E84: 0x6877, + 0x9E85: 0x687F, + 0x9E86: 0x689F, + 0x9E87: 0x688F, + 0x9E88: 0x68AD, + 0x9E89: 0x6894, + 0x9E8A: 0x689D, + 0x9E8B: 0x689B, + 0x9E8C: 0x6883, + 0x9E8D: 0x6AAE, + 0x9E8E: 0x68B9, + 0x9E8F: 0x6874, + 0x9E90: 0x68B5, + 0x9E91: 0x68A0, + 0x9E92: 0x68BA, + 0x9E93: 0x690F, + 0x9E94: 0x688D, + 0x9E95: 0x687E, + 0x9E96: 0x6901, + 0x9E97: 0x68CA, + 0x9E98: 0x6908, + 0x9E99: 0x68D8, + 0x9E9A: 0x6922, + 0x9E9B: 0x6926, + 0x9E9C: 0x68E1, + 0x9E9D: 0x690C, + 0x9E9E: 0x68CD, + 0x9E9F: 0x68D4, + 0x9EA0: 0x68E7, + 0x9EA1: 0x68D5, + 0x9EA2: 0x6936, + 0x9EA3: 0x6912, + 0x9EA4: 0x6904, + 0x9EA5: 0x68D7, + 0x9EA6: 0x68E3, + 0x9EA7: 0x6925, + 0x9EA8: 0x68F9, + 0x9EA9: 0x68E0, + 0x9EAA: 0x68EF, + 0x9EAB: 0x6928, + 0x9EAC: 0x692A, + 0x9EAD: 0x691A, + 0x9EAE: 0x6923, + 0x9EAF: 0x6921, + 0x9EB0: 0x68C6, + 0x9EB1: 0x6979, + 0x9EB2: 0x6977, + 0x9EB3: 0x695C, + 0x9EB4: 0x6978, + 0x9EB5: 0x696B, + 0x9EB6: 0x6954, + 0x9EB7: 0x697E, + 0x9EB8: 0x696E, + 0x9EB9: 0x6939, + 0x9EBA: 0x6974, + 0x9EBB: 0x693D, + 0x9EBC: 0x6959, + 0x9EBD: 0x6930, + 0x9EBE: 0x6961, + 0x9EBF: 0x695E, + 0x9EC0: 0x695D, + 0x9EC1: 0x6981, + 0x9EC2: 0x696A, + 0x9EC3: 0x69B2, + 0x9EC4: 0x69AE, + 0x9EC5: 0x69D0, + 0x9EC6: 0x69BF, + 0x9EC7: 0x69C1, + 0x9EC8: 0x69D3, + 0x9EC9: 0x69BE, + 0x9ECA: 0x69CE, + 0x9ECB: 0x5BE8, + 0x9ECC: 0x69CA, + 0x9ECD: 0x69DD, + 0x9ECE: 0x69BB, + 0x9ECF: 0x69C3, + 0x9ED0: 0x69A7, + 0x9ED1: 0x6A2E, + 0x9ED2: 0x6991, + 0x9ED3: 0x69A0, + 0x9ED4: 0x699C, + 0x9ED5: 0x6995, + 0x9ED6: 0x69B4, + 0x9ED7: 0x69DE, + 0x9ED8: 0x69E8, + 0x9ED9: 0x6A02, + 0x9EDA: 0x6A1B, + 0x9EDB: 0x69FF, + 0x9EDC: 0x6B0A, + 0x9EDD: 0x69F9, + 0x9EDE: 0x69F2, + 0x9EDF: 0x69E7, + 0x9EE0: 0x6A05, + 0x9EE1: 0x69B1, + 0x9EE2: 0x6A1E, + 0x9EE3: 0x69ED, + 0x9EE4: 0x6A14, + 0x9EE5: 0x69EB, + 0x9EE6: 0x6A0A, + 0x9EE7: 0x6A12, + 0x9EE8: 0x6AC1, + 0x9EE9: 0x6A23, + 0x9EEA: 0x6A13, + 0x9EEB: 0x6A44, + 0x9EEC: 0x6A0C, + 0x9EED: 0x6A72, + 0x9EEE: 0x6A36, + 0x9EEF: 0x6A78, + 0x9EF0: 0x6A47, + 0x9EF1: 0x6A62, + 0x9EF2: 0x6A59, + 0x9EF3: 0x6A66, + 0x9EF4: 0x6A48, + 0x9EF5: 0x6A38, + 0x9EF6: 0x6A22, + 0x9EF7: 0x6A90, + 0x9EF8: 0x6A8D, + 0x9EF9: 0x6AA0, + 0x9EFA: 0x6A84, + 0x9EFB: 0x6AA2, + 0x9EFC: 0x6AA3, + 0x9F40: 0x6A97, + 0x9F41: 0x8617, + 0x9F42: 0x6ABB, + 0x9F43: 0x6AC3, + 0x9F44: 0x6AC2, + 0x9F45: 0x6AB8, + 0x9F46: 0x6AB3, + 0x9F47: 0x6AAC, + 0x9F48: 0x6ADE, + 0x9F49: 0x6AD1, + 0x9F4A: 0x6ADF, + 0x9F4B: 0x6AAA, + 0x9F4C: 0x6ADA, + 0x9F4D: 0x6AEA, + 0x9F4E: 0x6AFB, + 0x9F4F: 0x6B05, + 0x9F50: 0x8616, + 0x9F51: 0x6AFA, + 0x9F52: 0x6B12, + 0x9F53: 0x6B16, + 0x9F54: 0x9B31, + 0x9F55: 0x6B1F, + 0x9F56: 0x6B38, + 0x9F57: 0x6B37, + 0x9F58: 0x76DC, + 0x9F59: 0x6B39, + 0x9F5A: 0x98EE, + 0x9F5B: 0x6B47, + 0x9F5C: 0x6B43, + 0x9F5D: 0x6B49, + 0x9F5E: 0x6B50, + 0x9F5F: 0x6B59, + 0x9F60: 0x6B54, + 0x9F61: 0x6B5B, + 0x9F62: 0x6B5F, + 0x9F63: 0x6B61, + 0x9F64: 0x6B78, + 0x9F65: 0x6B79, + 0x9F66: 0x6B7F, + 0x9F67: 0x6B80, + 0x9F68: 0x6B84, + 0x9F69: 0x6B83, + 0x9F6A: 0x6B8D, + 0x9F6B: 0x6B98, + 0x9F6C: 0x6B95, + 0x9F6D: 0x6B9E, + 0x9F6E: 0x6BA4, + 0x9F6F: 0x6BAA, + 0x9F70: 0x6BAB, + 0x9F71: 0x6BAF, + 0x9F72: 0x6BB2, + 0x9F73: 0x6BB1, + 0x9F74: 0x6BB3, + 0x9F75: 0x6BB7, + 0x9F76: 0x6BBC, + 0x9F77: 0x6BC6, + 0x9F78: 0x6BCB, + 0x9F79: 0x6BD3, + 0x9F7A: 0x6BDF, + 0x9F7B: 0x6BEC, + 0x9F7C: 0x6BEB, + 0x9F7D: 0x6BF3, + 0x9F7E: 0x6BEF, + 0x9F80: 0x9EBE, + 0x9F81: 0x6C08, + 0x9F82: 0x6C13, + 0x9F83: 0x6C14, + 0x9F84: 0x6C1B, + 0x9F85: 0x6C24, + 0x9F86: 0x6C23, + 0x9F87: 0x6C5E, + 0x9F88: 0x6C55, + 0x9F89: 0x6C62, + 0x9F8A: 0x6C6A, + 0x9F8B: 0x6C82, + 0x9F8C: 0x6C8D, + 0x9F8D: 0x6C9A, + 0x9F8E: 0x6C81, + 0x9F8F: 0x6C9B, + 0x9F90: 0x6C7E, + 0x9F91: 0x6C68, + 0x9F92: 0x6C73, + 0x9F93: 0x6C92, + 0x9F94: 0x6C90, + 0x9F95: 0x6CC4, + 0x9F96: 0x6CF1, + 0x9F97: 0x6CD3, + 0x9F98: 0x6CBD, + 0x9F99: 0x6CD7, + 0x9F9A: 0x6CC5, + 0x9F9B: 0x6CDD, + 0x9F9C: 0x6CAE, + 0x9F9D: 0x6CB1, + 0x9F9E: 0x6CBE, + 0x9F9F: 0x6CBA, + 0x9FA0: 0x6CDB, + 0x9FA1: 0x6CEF, + 0x9FA2: 0x6CD9, + 0x9FA3: 0x6CEA, + 0x9FA4: 0x6D1F, + 0x9FA5: 0x884D, + 0x9FA6: 0x6D36, + 0x9FA7: 0x6D2B, + 0x9FA8: 0x6D3D, + 0x9FA9: 0x6D38, + 0x9FAA: 0x6D19, + 0x9FAB: 0x6D35, + 0x9FAC: 0x6D33, + 0x9FAD: 0x6D12, + 0x9FAE: 0x6D0C, + 0x9FAF: 0x6D63, + 0x9FB0: 0x6D93, + 0x9FB1: 0x6D64, + 0x9FB2: 0x6D5A, + 0x9FB3: 0x6D79, + 0x9FB4: 0x6D59, + 0x9FB5: 0x6D8E, + 0x9FB6: 0x6D95, + 0x9FB7: 0x6FE4, + 0x9FB8: 0x6D85, + 0x9FB9: 0x6DF9, + 0x9FBA: 0x6E15, + 0x9FBB: 0x6E0A, + 0x9FBC: 0x6DB5, + 0x9FBD: 0x6DC7, + 0x9FBE: 0x6DE6, + 0x9FBF: 0x6DB8, + 0x9FC0: 0x6DC6, + 0x9FC1: 0x6DEC, + 0x9FC2: 0x6DDE, + 0x9FC3: 0x6DCC, + 0x9FC4: 0x6DE8, + 0x9FC5: 0x6DD2, + 0x9FC6: 0x6DC5, + 0x9FC7: 0x6DFA, + 0x9FC8: 0x6DD9, + 0x9FC9: 0x6DE4, + 0x9FCA: 0x6DD5, + 0x9FCB: 0x6DEA, + 0x9FCC: 0x6DEE, + 0x9FCD: 0x6E2D, + 0x9FCE: 0x6E6E, + 0x9FCF: 0x6E2E, + 0x9FD0: 0x6E19, + 0x9FD1: 0x6E72, + 0x9FD2: 0x6E5F, + 0x9FD3: 0x6E3E, + 0x9FD4: 0x6E23, + 0x9FD5: 0x6E6B, + 0x9FD6: 0x6E2B, + 0x9FD7: 0x6E76, + 0x9FD8: 0x6E4D, + 0x9FD9: 0x6E1F, + 0x9FDA: 0x6E43, + 0x9FDB: 0x6E3A, + 0x9FDC: 0x6E4E, + 0x9FDD: 0x6E24, + 0x9FDE: 0x6EFF, + 0x9FDF: 0x6E1D, + 0x9FE0: 0x6E38, + 0x9FE1: 0x6E82, + 0x9FE2: 0x6EAA, + 0x9FE3: 0x6E98, + 0x9FE4: 0x6EC9, + 0x9FE5: 0x6EB7, + 0x9FE6: 0x6ED3, + 0x9FE7: 0x6EBD, + 0x9FE8: 0x6EAF, + 0x9FE9: 0x6EC4, + 0x9FEA: 0x6EB2, + 0x9FEB: 0x6ED4, + 0x9FEC: 0x6ED5, + 0x9FED: 0x6E8F, + 0x9FEE: 0x6EA5, + 0x9FEF: 0x6EC2, + 0x9FF0: 0x6E9F, + 0x9FF1: 0x6F41, + 0x9FF2: 0x6F11, + 0x9FF3: 0x704C, + 0x9FF4: 0x6EEC, + 0x9FF5: 0x6EF8, + 0x9FF6: 0x6EFE, + 0x9FF7: 0x6F3F, + 0x9FF8: 0x6EF2, + 0x9FF9: 0x6F31, + 0x9FFA: 0x6EEF, + 0x9FFB: 0x6F32, + 0x9FFC: 0x6ECC, + 0xA1: 0xFF61, + 0xA2: 0xFF62, + 0xA3: 0xFF63, + 0xA4: 0xFF64, + 0xA5: 0xFF65, + 0xA6: 0xFF66, + 0xA7: 0xFF67, + 0xA8: 0xFF68, + 0xA9: 0xFF69, + 0xAA: 0xFF6A, + 0xAB: 0xFF6B, + 0xAC: 0xFF6C, + 0xAD: 0xFF6D, + 0xAE: 0xFF6E, + 0xAF: 0xFF6F, + 0xB0: 0xFF70, + 0xB1: 0xFF71, + 0xB2: 0xFF72, + 0xB3: 0xFF73, + 0xB4: 0xFF74, + 0xB5: 0xFF75, + 0xB6: 0xFF76, + 0xB7: 0xFF77, + 0xB8: 0xFF78, + 0xB9: 0xFF79, + 0xBA: 0xFF7A, + 0xBB: 0xFF7B, + 0xBC: 0xFF7C, + 0xBD: 0xFF7D, + 0xBE: 0xFF7E, + 0xBF: 0xFF7F, + 0xC0: 0xFF80, + 0xC1: 0xFF81, + 0xC2: 0xFF82, + 0xC3: 0xFF83, + 0xC4: 0xFF84, + 0xC5: 0xFF85, + 0xC6: 0xFF86, + 0xC7: 0xFF87, + 0xC8: 0xFF88, + 0xC9: 0xFF89, + 0xCA: 0xFF8A, + 0xCB: 0xFF8B, + 0xCC: 0xFF8C, + 0xCD: 0xFF8D, + 0xCE: 0xFF8E, + 0xCF: 0xFF8F, + 0xD0: 0xFF90, + 0xD1: 0xFF91, + 0xD2: 0xFF92, + 0xD3: 0xFF93, + 0xD4: 0xFF94, + 0xD5: 0xFF95, + 0xD6: 0xFF96, + 0xD7: 0xFF97, + 0xD8: 0xFF98, + 0xD9: 0xFF99, + 0xDA: 0xFF9A, + 0xDB: 0xFF9B, + 0xDC: 0xFF9C, + 0xDD: 0xFF9D, + 0xDE: 0xFF9E, + 0xDF: 0xFF9F, + 0xE040: 0x6F3E, + 0xE041: 0x6F13, + 0xE042: 0x6EF7, + 0xE043: 0x6F86, + 0xE044: 0x6F7A, + 0xE045: 0x6F78, + 0xE046: 0x6F81, + 0xE047: 0x6F80, + 0xE048: 0x6F6F, + 0xE049: 0x6F5B, + 0xE04A: 0x6FF3, + 0xE04B: 0x6F6D, + 0xE04C: 0x6F82, + 0xE04D: 0x6F7C, + 0xE04E: 0x6F58, + 0xE04F: 0x6F8E, + 0xE050: 0x6F91, + 0xE051: 0x6FC2, + 0xE052: 0x6F66, + 0xE053: 0x6FB3, + 0xE054: 0x6FA3, + 0xE055: 0x6FA1, + 0xE056: 0x6FA4, + 0xE057: 0x6FB9, + 0xE058: 0x6FC6, + 0xE059: 0x6FAA, + 0xE05A: 0x6FDF, + 0xE05B: 0x6FD5, + 0xE05C: 0x6FEC, + 0xE05D: 0x6FD4, + 0xE05E: 0x6FD8, + 0xE05F: 0x6FF1, + 0xE060: 0x6FEE, + 0xE061: 0x6FDB, + 0xE062: 0x7009, + 0xE063: 0x700B, + 0xE064: 0x6FFA, + 0xE065: 0x7011, + 0xE066: 0x7001, + 0xE067: 0x700F, + 0xE068: 0x6FFE, + 0xE069: 0x701B, + 0xE06A: 0x701A, + 0xE06B: 0x6F74, + 0xE06C: 0x701D, + 0xE06D: 0x7018, + 0xE06E: 0x701F, + 0xE06F: 0x7030, + 0xE070: 0x703E, + 0xE071: 0x7032, + 0xE072: 0x7051, + 0xE073: 0x7063, + 0xE074: 0x7099, + 0xE075: 0x7092, + 0xE076: 0x70AF, + 0xE077: 0x70F1, + 0xE078: 0x70AC, + 0xE079: 0x70B8, + 0xE07A: 0x70B3, + 0xE07B: 0x70AE, + 0xE07C: 0x70DF, + 0xE07D: 0x70CB, + 0xE07E: 0x70DD, + 0xE080: 0x70D9, + 0xE081: 0x7109, + 0xE082: 0x70FD, + 0xE083: 0x711C, + 0xE084: 0x7119, + 0xE085: 0x7165, + 0xE086: 0x7155, + 0xE087: 0x7188, + 0xE088: 0x7166, + 0xE089: 0x7162, + 0xE08A: 0x714C, + 0xE08B: 0x7156, + 0xE08C: 0x716C, + 0xE08D: 0x718F, + 0xE08E: 0x71FB, + 0xE08F: 0x7184, + 0xE090: 0x7195, + 0xE091: 0x71A8, + 0xE092: 0x71AC, + 0xE093: 0x71D7, + 0xE094: 0x71B9, + 0xE095: 0x71BE, + 0xE096: 0x71D2, + 0xE097: 0x71C9, + 0xE098: 0x71D4, + 0xE099: 0x71CE, + 0xE09A: 0x71E0, + 0xE09B: 0x71EC, + 0xE09C: 0x71E7, + 0xE09D: 0x71F5, + 0xE09E: 0x71FC, + 0xE09F: 0x71F9, + 0xE0A0: 0x71FF, + 0xE0A1: 0x720D, + 0xE0A2: 0x7210, + 0xE0A3: 0x721B, + 0xE0A4: 0x7228, + 0xE0A5: 0x722D, + 0xE0A6: 0x722C, + 0xE0A7: 0x7230, + 0xE0A8: 0x7232, + 0xE0A9: 0x723B, + 0xE0AA: 0x723C, + 0xE0AB: 0x723F, + 0xE0AC: 0x7240, + 0xE0AD: 0x7246, + 0xE0AE: 0x724B, + 0xE0AF: 0x7258, + 0xE0B0: 0x7274, + 0xE0B1: 0x727E, + 0xE0B2: 0x7282, + 0xE0B3: 0x7281, + 0xE0B4: 0x7287, + 0xE0B5: 0x7292, + 0xE0B6: 0x7296, + 0xE0B7: 0x72A2, + 0xE0B8: 0x72A7, + 0xE0B9: 0x72B9, + 0xE0BA: 0x72B2, + 0xE0BB: 0x72C3, + 0xE0BC: 0x72C6, + 0xE0BD: 0x72C4, + 0xE0BE: 0x72CE, + 0xE0BF: 0x72D2, + 0xE0C0: 0x72E2, + 0xE0C1: 0x72E0, + 0xE0C2: 0x72E1, + 0xE0C3: 0x72F9, + 0xE0C4: 0x72F7, + 0xE0C5: 0x500F, + 0xE0C6: 0x7317, + 0xE0C7: 0x730A, + 0xE0C8: 0x731C, + 0xE0C9: 0x7316, + 0xE0CA: 0x731D, + 0xE0CB: 0x7334, + 0xE0CC: 0x732F, + 0xE0CD: 0x7329, + 0xE0CE: 0x7325, + 0xE0CF: 0x733E, + 0xE0D0: 0x734E, + 0xE0D1: 0x734F, + 0xE0D2: 0x9ED8, + 0xE0D3: 0x7357, + 0xE0D4: 0x736A, + 0xE0D5: 0x7368, + 0xE0D6: 0x7370, + 0xE0D7: 0x7378, + 0xE0D8: 0x7375, + 0xE0D9: 0x737B, + 0xE0DA: 0x737A, + 0xE0DB: 0x73C8, + 0xE0DC: 0x73B3, + 0xE0DD: 0x73CE, + 0xE0DE: 0x73BB, + 0xE0DF: 0x73C0, + 0xE0E0: 0x73E5, + 0xE0E1: 0x73EE, + 0xE0E2: 0x73DE, + 0xE0E3: 0x74A2, + 0xE0E4: 0x7405, + 0xE0E5: 0x746F, + 0xE0E6: 0x7425, + 0xE0E7: 0x73F8, + 0xE0E8: 0x7432, + 0xE0E9: 0x743A, + 0xE0EA: 0x7455, + 0xE0EB: 0x743F, + 0xE0EC: 0x745F, + 0xE0ED: 0x7459, + 0xE0EE: 0x7441, + 0xE0EF: 0x745C, + 0xE0F0: 0x7469, + 0xE0F1: 0x7470, + 0xE0F2: 0x7463, + 0xE0F3: 0x746A, + 0xE0F4: 0x7476, + 0xE0F5: 0x747E, + 0xE0F6: 0x748B, + 0xE0F7: 0x749E, + 0xE0F8: 0x74A7, + 0xE0F9: 0x74CA, + 0xE0FA: 0x74CF, + 0xE0FB: 0x74D4, + 0xE0FC: 0x73F1, + 0xE140: 0x74E0, + 0xE141: 0x74E3, + 0xE142: 0x74E7, + 0xE143: 0x74E9, + 0xE144: 0x74EE, + 0xE145: 0x74F2, + 0xE146: 0x74F0, + 0xE147: 0x74F1, + 0xE148: 0x74F8, + 0xE149: 0x74F7, + 0xE14A: 0x7504, + 0xE14B: 0x7503, + 0xE14C: 0x7505, + 0xE14D: 0x750C, + 0xE14E: 0x750E, + 0xE14F: 0x750D, + 0xE150: 0x7515, + 0xE151: 0x7513, + 0xE152: 0x751E, + 0xE153: 0x7526, + 0xE154: 0x752C, + 0xE155: 0x753C, + 0xE156: 0x7544, + 0xE157: 0x754D, + 0xE158: 0x754A, + 0xE159: 0x7549, + 0xE15A: 0x755B, + 0xE15B: 0x7546, + 0xE15C: 0x755A, + 0xE15D: 0x7569, + 0xE15E: 0x7564, + 0xE15F: 0x7567, + 0xE160: 0x756B, + 0xE161: 0x756D, + 0xE162: 0x7578, + 0xE163: 0x7576, + 0xE164: 0x7586, + 0xE165: 0x7587, + 0xE166: 0x7574, + 0xE167: 0x758A, + 0xE168: 0x7589, + 0xE169: 0x7582, + 0xE16A: 0x7594, + 0xE16B: 0x759A, + 0xE16C: 0x759D, + 0xE16D: 0x75A5, + 0xE16E: 0x75A3, + 0xE16F: 0x75C2, + 0xE170: 0x75B3, + 0xE171: 0x75C3, + 0xE172: 0x75B5, + 0xE173: 0x75BD, + 0xE174: 0x75B8, + 0xE175: 0x75BC, + 0xE176: 0x75B1, + 0xE177: 0x75CD, + 0xE178: 0x75CA, + 0xE179: 0x75D2, + 0xE17A: 0x75D9, + 0xE17B: 0x75E3, + 0xE17C: 0x75DE, + 0xE17D: 0x75FE, + 0xE17E: 0x75FF, + 0xE180: 0x75FC, + 0xE181: 0x7601, + 0xE182: 0x75F0, + 0xE183: 0x75FA, + 0xE184: 0x75F2, + 0xE185: 0x75F3, + 0xE186: 0x760B, + 0xE187: 0x760D, + 0xE188: 0x7609, + 0xE189: 0x761F, + 0xE18A: 0x7627, + 0xE18B: 0x7620, + 0xE18C: 0x7621, + 0xE18D: 0x7622, + 0xE18E: 0x7624, + 0xE18F: 0x7634, + 0xE190: 0x7630, + 0xE191: 0x763B, + 0xE192: 0x7647, + 0xE193: 0x7648, + 0xE194: 0x7646, + 0xE195: 0x765C, + 0xE196: 0x7658, + 0xE197: 0x7661, + 0xE198: 0x7662, + 0xE199: 0x7668, + 0xE19A: 0x7669, + 0xE19B: 0x766A, + 0xE19C: 0x7667, + 0xE19D: 0x766C, + 0xE19E: 0x7670, + 0xE19F: 0x7672, + 0xE1A0: 0x7676, + 0xE1A1: 0x7678, + 0xE1A2: 0x767C, + 0xE1A3: 0x7680, + 0xE1A4: 0x7683, + 0xE1A5: 0x7688, + 0xE1A6: 0x768B, + 0xE1A7: 0x768E, + 0xE1A8: 0x7696, + 0xE1A9: 0x7693, + 0xE1AA: 0x7699, + 0xE1AB: 0x769A, + 0xE1AC: 0x76B0, + 0xE1AD: 0x76B4, + 0xE1AE: 0x76B8, + 0xE1AF: 0x76B9, + 0xE1B0: 0x76BA, + 0xE1B1: 0x76C2, + 0xE1B2: 0x76CD, + 0xE1B3: 0x76D6, + 0xE1B4: 0x76D2, + 0xE1B5: 0x76DE, + 0xE1B6: 0x76E1, + 0xE1B7: 0x76E5, + 0xE1B8: 0x76E7, + 0xE1B9: 0x76EA, + 0xE1BA: 0x862F, + 0xE1BB: 0x76FB, + 0xE1BC: 0x7708, + 0xE1BD: 0x7707, + 0xE1BE: 0x7704, + 0xE1BF: 0x7729, + 0xE1C0: 0x7724, + 0xE1C1: 0x771E, + 0xE1C2: 0x7725, + 0xE1C3: 0x7726, + 0xE1C4: 0x771B, + 0xE1C5: 0x7737, + 0xE1C6: 0x7738, + 0xE1C7: 0x7747, + 0xE1C8: 0x775A, + 0xE1C9: 0x7768, + 0xE1CA: 0x776B, + 0xE1CB: 0x775B, + 0xE1CC: 0x7765, + 0xE1CD: 0x777F, + 0xE1CE: 0x777E, + 0xE1CF: 0x7779, + 0xE1D0: 0x778E, + 0xE1D1: 0x778B, + 0xE1D2: 0x7791, + 0xE1D3: 0x77A0, + 0xE1D4: 0x779E, + 0xE1D5: 0x77B0, + 0xE1D6: 0x77B6, + 0xE1D7: 0x77B9, + 0xE1D8: 0x77BF, + 0xE1D9: 0x77BC, + 0xE1DA: 0x77BD, + 0xE1DB: 0x77BB, + 0xE1DC: 0x77C7, + 0xE1DD: 0x77CD, + 0xE1DE: 0x77D7, + 0xE1DF: 0x77DA, + 0xE1E0: 0x77DC, + 0xE1E1: 0x77E3, + 0xE1E2: 0x77EE, + 0xE1E3: 0x77FC, + 0xE1E4: 0x780C, + 0xE1E5: 0x7812, + 0xE1E6: 0x7926, + 0xE1E7: 0x7820, + 0xE1E8: 0x792A, + 0xE1E9: 0x7845, + 0xE1EA: 0x788E, + 0xE1EB: 0x7874, + 0xE1EC: 0x7886, + 0xE1ED: 0x787C, + 0xE1EE: 0x789A, + 0xE1EF: 0x788C, + 0xE1F0: 0x78A3, + 0xE1F1: 0x78B5, + 0xE1F2: 0x78AA, + 0xE1F3: 0x78AF, + 0xE1F4: 0x78D1, + 0xE1F5: 0x78C6, + 0xE1F6: 0x78CB, + 0xE1F7: 0x78D4, + 0xE1F8: 0x78BE, + 0xE1F9: 0x78BC, + 0xE1FA: 0x78C5, + 0xE1FB: 0x78CA, + 0xE1FC: 0x78EC, + 0xE240: 0x78E7, + 0xE241: 0x78DA, + 0xE242: 0x78FD, + 0xE243: 0x78F4, + 0xE244: 0x7907, + 0xE245: 0x7912, + 0xE246: 0x7911, + 0xE247: 0x7919, + 0xE248: 0x792C, + 0xE249: 0x792B, + 0xE24A: 0x7940, + 0xE24B: 0x7960, + 0xE24C: 0x7957, + 0xE24D: 0x795F, + 0xE24E: 0x795A, + 0xE24F: 0x7955, + 0xE250: 0x7953, + 0xE251: 0x797A, + 0xE252: 0x797F, + 0xE253: 0x798A, + 0xE254: 0x799D, + 0xE255: 0x79A7, + 0xE256: 0x9F4B, + 0xE257: 0x79AA, + 0xE258: 0x79AE, + 0xE259: 0x79B3, + 0xE25A: 0x79B9, + 0xE25B: 0x79BA, + 0xE25C: 0x79C9, + 0xE25D: 0x79D5, + 0xE25E: 0x79E7, + 0xE25F: 0x79EC, + 0xE260: 0x79E1, + 0xE261: 0x79E3, + 0xE262: 0x7A08, + 0xE263: 0x7A0D, + 0xE264: 0x7A18, + 0xE265: 0x7A19, + 0xE266: 0x7A20, + 0xE267: 0x7A1F, + 0xE268: 0x7980, + 0xE269: 0x7A31, + 0xE26A: 0x7A3B, + 0xE26B: 0x7A3E, + 0xE26C: 0x7A37, + 0xE26D: 0x7A43, + 0xE26E: 0x7A57, + 0xE26F: 0x7A49, + 0xE270: 0x7A61, + 0xE271: 0x7A62, + 0xE272: 0x7A69, + 0xE273: 0x9F9D, + 0xE274: 0x7A70, + 0xE275: 0x7A79, + 0xE276: 0x7A7D, + 0xE277: 0x7A88, + 0xE278: 0x7A97, + 0xE279: 0x7A95, + 0xE27A: 0x7A98, + 0xE27B: 0x7A96, + 0xE27C: 0x7AA9, + 0xE27D: 0x7AC8, + 0xE27E: 0x7AB0, + 0xE280: 0x7AB6, + 0xE281: 0x7AC5, + 0xE282: 0x7AC4, + 0xE283: 0x7ABF, + 0xE284: 0x9083, + 0xE285: 0x7AC7, + 0xE286: 0x7ACA, + 0xE287: 0x7ACD, + 0xE288: 0x7ACF, + 0xE289: 0x7AD5, + 0xE28A: 0x7AD3, + 0xE28B: 0x7AD9, + 0xE28C: 0x7ADA, + 0xE28D: 0x7ADD, + 0xE28E: 0x7AE1, + 0xE28F: 0x7AE2, + 0xE290: 0x7AE6, + 0xE291: 0x7AED, + 0xE292: 0x7AF0, + 0xE293: 0x7B02, + 0xE294: 0x7B0F, + 0xE295: 0x7B0A, + 0xE296: 0x7B06, + 0xE297: 0x7B33, + 0xE298: 0x7B18, + 0xE299: 0x7B19, + 0xE29A: 0x7B1E, + 0xE29B: 0x7B35, + 0xE29C: 0x7B28, + 0xE29D: 0x7B36, + 0xE29E: 0x7B50, + 0xE29F: 0x7B7A, + 0xE2A0: 0x7B04, + 0xE2A1: 0x7B4D, + 0xE2A2: 0x7B0B, + 0xE2A3: 0x7B4C, + 0xE2A4: 0x7B45, + 0xE2A5: 0x7B75, + 0xE2A6: 0x7B65, + 0xE2A7: 0x7B74, + 0xE2A8: 0x7B67, + 0xE2A9: 0x7B70, + 0xE2AA: 0x7B71, + 0xE2AB: 0x7B6C, + 0xE2AC: 0x7B6E, + 0xE2AD: 0x7B9D, + 0xE2AE: 0x7B98, + 0xE2AF: 0x7B9F, + 0xE2B0: 0x7B8D, + 0xE2B1: 0x7B9C, + 0xE2B2: 0x7B9A, + 0xE2B3: 0x7B8B, + 0xE2B4: 0x7B92, + 0xE2B5: 0x7B8F, + 0xE2B6: 0x7B5D, + 0xE2B7: 0x7B99, + 0xE2B8: 0x7BCB, + 0xE2B9: 0x7BC1, + 0xE2BA: 0x7BCC, + 0xE2BB: 0x7BCF, + 0xE2BC: 0x7BB4, + 0xE2BD: 0x7BC6, + 0xE2BE: 0x7BDD, + 0xE2BF: 0x7BE9, + 0xE2C0: 0x7C11, + 0xE2C1: 0x7C14, + 0xE2C2: 0x7BE6, + 0xE2C3: 0x7BE5, + 0xE2C4: 0x7C60, + 0xE2C5: 0x7C00, + 0xE2C6: 0x7C07, + 0xE2C7: 0x7C13, + 0xE2C8: 0x7BF3, + 0xE2C9: 0x7BF7, + 0xE2CA: 0x7C17, + 0xE2CB: 0x7C0D, + 0xE2CC: 0x7BF6, + 0xE2CD: 0x7C23, + 0xE2CE: 0x7C27, + 0xE2CF: 0x7C2A, + 0xE2D0: 0x7C1F, + 0xE2D1: 0x7C37, + 0xE2D2: 0x7C2B, + 0xE2D3: 0x7C3D, + 0xE2D4: 0x7C4C, + 0xE2D5: 0x7C43, + 0xE2D6: 0x7C54, + 0xE2D7: 0x7C4F, + 0xE2D8: 0x7C40, + 0xE2D9: 0x7C50, + 0xE2DA: 0x7C58, + 0xE2DB: 0x7C5F, + 0xE2DC: 0x7C64, + 0xE2DD: 0x7C56, + 0xE2DE: 0x7C65, + 0xE2DF: 0x7C6C, + 0xE2E0: 0x7C75, + 0xE2E1: 0x7C83, + 0xE2E2: 0x7C90, + 0xE2E3: 0x7CA4, + 0xE2E4: 0x7CAD, + 0xE2E5: 0x7CA2, + 0xE2E6: 0x7CAB, + 0xE2E7: 0x7CA1, + 0xE2E8: 0x7CA8, + 0xE2E9: 0x7CB3, + 0xE2EA: 0x7CB2, + 0xE2EB: 0x7CB1, + 0xE2EC: 0x7CAE, + 0xE2ED: 0x7CB9, + 0xE2EE: 0x7CBD, + 0xE2EF: 0x7CC0, + 0xE2F0: 0x7CC5, + 0xE2F1: 0x7CC2, + 0xE2F2: 0x7CD8, + 0xE2F3: 0x7CD2, + 0xE2F4: 0x7CDC, + 0xE2F5: 0x7CE2, + 0xE2F6: 0x9B3B, + 0xE2F7: 0x7CEF, + 0xE2F8: 0x7CF2, + 0xE2F9: 0x7CF4, + 0xE2FA: 0x7CF6, + 0xE2FB: 0x7CFA, + 0xE2FC: 0x7D06, + 0xE340: 0x7D02, + 0xE341: 0x7D1C, + 0xE342: 0x7D15, + 0xE343: 0x7D0A, + 0xE344: 0x7D45, + 0xE345: 0x7D4B, + 0xE346: 0x7D2E, + 0xE347: 0x7D32, + 0xE348: 0x7D3F, + 0xE349: 0x7D35, + 0xE34A: 0x7D46, + 0xE34B: 0x7D73, + 0xE34C: 0x7D56, + 0xE34D: 0x7D4E, + 0xE34E: 0x7D72, + 0xE34F: 0x7D68, + 0xE350: 0x7D6E, + 0xE351: 0x7D4F, + 0xE352: 0x7D63, + 0xE353: 0x7D93, + 0xE354: 0x7D89, + 0xE355: 0x7D5B, + 0xE356: 0x7D8F, + 0xE357: 0x7D7D, + 0xE358: 0x7D9B, + 0xE359: 0x7DBA, + 0xE35A: 0x7DAE, + 0xE35B: 0x7DA3, + 0xE35C: 0x7DB5, + 0xE35D: 0x7DC7, + 0xE35E: 0x7DBD, + 0xE35F: 0x7DAB, + 0xE360: 0x7E3D, + 0xE361: 0x7DA2, + 0xE362: 0x7DAF, + 0xE363: 0x7DDC, + 0xE364: 0x7DB8, + 0xE365: 0x7D9F, + 0xE366: 0x7DB0, + 0xE367: 0x7DD8, + 0xE368: 0x7DDD, + 0xE369: 0x7DE4, + 0xE36A: 0x7DDE, + 0xE36B: 0x7DFB, + 0xE36C: 0x7DF2, + 0xE36D: 0x7DE1, + 0xE36E: 0x7E05, + 0xE36F: 0x7E0A, + 0xE370: 0x7E23, + 0xE371: 0x7E21, + 0xE372: 0x7E12, + 0xE373: 0x7E31, + 0xE374: 0x7E1F, + 0xE375: 0x7E09, + 0xE376: 0x7E0B, + 0xE377: 0x7E22, + 0xE378: 0x7E46, + 0xE379: 0x7E66, + 0xE37A: 0x7E3B, + 0xE37B: 0x7E35, + 0xE37C: 0x7E39, + 0xE37D: 0x7E43, + 0xE37E: 0x7E37, + 0xE380: 0x7E32, + 0xE381: 0x7E3A, + 0xE382: 0x7E67, + 0xE383: 0x7E5D, + 0xE384: 0x7E56, + 0xE385: 0x7E5E, + 0xE386: 0x7E59, + 0xE387: 0x7E5A, + 0xE388: 0x7E79, + 0xE389: 0x7E6A, + 0xE38A: 0x7E69, + 0xE38B: 0x7E7C, + 0xE38C: 0x7E7B, + 0xE38D: 0x7E83, + 0xE38E: 0x7DD5, + 0xE38F: 0x7E7D, + 0xE390: 0x8FAE, + 0xE391: 0x7E7F, + 0xE392: 0x7E88, + 0xE393: 0x7E89, + 0xE394: 0x7E8C, + 0xE395: 0x7E92, + 0xE396: 0x7E90, + 0xE397: 0x7E93, + 0xE398: 0x7E94, + 0xE399: 0x7E96, + 0xE39A: 0x7E8E, + 0xE39B: 0x7E9B, + 0xE39C: 0x7E9C, + 0xE39D: 0x7F38, + 0xE39E: 0x7F3A, + 0xE39F: 0x7F45, + 0xE3A0: 0x7F4C, + 0xE3A1: 0x7F4D, + 0xE3A2: 0x7F4E, + 0xE3A3: 0x7F50, + 0xE3A4: 0x7F51, + 0xE3A5: 0x7F55, + 0xE3A6: 0x7F54, + 0xE3A7: 0x7F58, + 0xE3A8: 0x7F5F, + 0xE3A9: 0x7F60, + 0xE3AA: 0x7F68, + 0xE3AB: 0x7F69, + 0xE3AC: 0x7F67, + 0xE3AD: 0x7F78, + 0xE3AE: 0x7F82, + 0xE3AF: 0x7F86, + 0xE3B0: 0x7F83, + 0xE3B1: 0x7F88, + 0xE3B2: 0x7F87, + 0xE3B3: 0x7F8C, + 0xE3B4: 0x7F94, + 0xE3B5: 0x7F9E, + 0xE3B6: 0x7F9D, + 0xE3B7: 0x7F9A, + 0xE3B8: 0x7FA3, + 0xE3B9: 0x7FAF, + 0xE3BA: 0x7FB2, + 0xE3BB: 0x7FB9, + 0xE3BC: 0x7FAE, + 0xE3BD: 0x7FB6, + 0xE3BE: 0x7FB8, + 0xE3BF: 0x8B71, + 0xE3C0: 0x7FC5, + 0xE3C1: 0x7FC6, + 0xE3C2: 0x7FCA, + 0xE3C3: 0x7FD5, + 0xE3C4: 0x7FD4, + 0xE3C5: 0x7FE1, + 0xE3C6: 0x7FE6, + 0xE3C7: 0x7FE9, + 0xE3C8: 0x7FF3, + 0xE3C9: 0x7FF9, + 0xE3CA: 0x98DC, + 0xE3CB: 0x8006, + 0xE3CC: 0x8004, + 0xE3CD: 0x800B, + 0xE3CE: 0x8012, + 0xE3CF: 0x8018, + 0xE3D0: 0x8019, + 0xE3D1: 0x801C, + 0xE3D2: 0x8021, + 0xE3D3: 0x8028, + 0xE3D4: 0x803F, + 0xE3D5: 0x803B, + 0xE3D6: 0x804A, + 0xE3D7: 0x8046, + 0xE3D8: 0x8052, + 0xE3D9: 0x8058, + 0xE3DA: 0x805A, + 0xE3DB: 0x805F, + 0xE3DC: 0x8062, + 0xE3DD: 0x8068, + 0xE3DE: 0x8073, + 0xE3DF: 0x8072, + 0xE3E0: 0x8070, + 0xE3E1: 0x8076, + 0xE3E2: 0x8079, + 0xE3E3: 0x807D, + 0xE3E4: 0x807F, + 0xE3E5: 0x8084, + 0xE3E6: 0x8086, + 0xE3E7: 0x8085, + 0xE3E8: 0x809B, + 0xE3E9: 0x8093, + 0xE3EA: 0x809A, + 0xE3EB: 0x80AD, + 0xE3EC: 0x5190, + 0xE3ED: 0x80AC, + 0xE3EE: 0x80DB, + 0xE3EF: 0x80E5, + 0xE3F0: 0x80D9, + 0xE3F1: 0x80DD, + 0xE3F2: 0x80C4, + 0xE3F3: 0x80DA, + 0xE3F4: 0x80D6, + 0xE3F5: 0x8109, + 0xE3F6: 0x80EF, + 0xE3F7: 0x80F1, + 0xE3F8: 0x811B, + 0xE3F9: 0x8129, + 0xE3FA: 0x8123, + 0xE3FB: 0x812F, + 0xE3FC: 0x814B, + 0xE440: 0x968B, + 0xE441: 0x8146, + 0xE442: 0x813E, + 0xE443: 0x8153, + 0xE444: 0x8151, + 0xE445: 0x80FC, + 0xE446: 0x8171, + 0xE447: 0x816E, + 0xE448: 0x8165, + 0xE449: 0x8166, + 0xE44A: 0x8174, + 0xE44B: 0x8183, + 0xE44C: 0x8188, + 0xE44D: 0x818A, + 0xE44E: 0x8180, + 0xE44F: 0x8182, + 0xE450: 0x81A0, + 0xE451: 0x8195, + 0xE452: 0x81A4, + 0xE453: 0x81A3, + 0xE454: 0x815F, + 0xE455: 0x8193, + 0xE456: 0x81A9, + 0xE457: 0x81B0, + 0xE458: 0x81B5, + 0xE459: 0x81BE, + 0xE45A: 0x81B8, + 0xE45B: 0x81BD, + 0xE45C: 0x81C0, + 0xE45D: 0x81C2, + 0xE45E: 0x81BA, + 0xE45F: 0x81C9, + 0xE460: 0x81CD, + 0xE461: 0x81D1, + 0xE462: 0x81D9, + 0xE463: 0x81D8, + 0xE464: 0x81C8, + 0xE465: 0x81DA, + 0xE466: 0x81DF, + 0xE467: 0x81E0, + 0xE468: 0x81E7, + 0xE469: 0x81FA, + 0xE46A: 0x81FB, + 0xE46B: 0x81FE, + 0xE46C: 0x8201, + 0xE46D: 0x8202, + 0xE46E: 0x8205, + 0xE46F: 0x8207, + 0xE470: 0x820A, + 0xE471: 0x820D, + 0xE472: 0x8210, + 0xE473: 0x8216, + 0xE474: 0x8229, + 0xE475: 0x822B, + 0xE476: 0x8238, + 0xE477: 0x8233, + 0xE478: 0x8240, + 0xE479: 0x8259, + 0xE47A: 0x8258, + 0xE47B: 0x825D, + 0xE47C: 0x825A, + 0xE47D: 0x825F, + 0xE47E: 0x8264, + 0xE480: 0x8262, + 0xE481: 0x8268, + 0xE482: 0x826A, + 0xE483: 0x826B, + 0xE484: 0x822E, + 0xE485: 0x8271, + 0xE486: 0x8277, + 0xE487: 0x8278, + 0xE488: 0x827E, + 0xE489: 0x828D, + 0xE48A: 0x8292, + 0xE48B: 0x82AB, + 0xE48C: 0x829F, + 0xE48D: 0x82BB, + 0xE48E: 0x82AC, + 0xE48F: 0x82E1, + 0xE490: 0x82E3, + 0xE491: 0x82DF, + 0xE492: 0x82D2, + 0xE493: 0x82F4, + 0xE494: 0x82F3, + 0xE495: 0x82FA, + 0xE496: 0x8393, + 0xE497: 0x8303, + 0xE498: 0x82FB, + 0xE499: 0x82F9, + 0xE49A: 0x82DE, + 0xE49B: 0x8306, + 0xE49C: 0x82DC, + 0xE49D: 0x8309, + 0xE49E: 0x82D9, + 0xE49F: 0x8335, + 0xE4A0: 0x8334, + 0xE4A1: 0x8316, + 0xE4A2: 0x8332, + 0xE4A3: 0x8331, + 0xE4A4: 0x8340, + 0xE4A5: 0x8339, + 0xE4A6: 0x8350, + 0xE4A7: 0x8345, + 0xE4A8: 0x832F, + 0xE4A9: 0x832B, + 0xE4AA: 0x8317, + 0xE4AB: 0x8318, + 0xE4AC: 0x8385, + 0xE4AD: 0x839A, + 0xE4AE: 0x83AA, + 0xE4AF: 0x839F, + 0xE4B0: 0x83A2, + 0xE4B1: 0x8396, + 0xE4B2: 0x8323, + 0xE4B3: 0x838E, + 0xE4B4: 0x8387, + 0xE4B5: 0x838A, + 0xE4B6: 0x837C, + 0xE4B7: 0x83B5, + 0xE4B8: 0x8373, + 0xE4B9: 0x8375, + 0xE4BA: 0x83A0, + 0xE4BB: 0x8389, + 0xE4BC: 0x83A8, + 0xE4BD: 0x83F4, + 0xE4BE: 0x8413, + 0xE4BF: 0x83EB, + 0xE4C0: 0x83CE, + 0xE4C1: 0x83FD, + 0xE4C2: 0x8403, + 0xE4C3: 0x83D8, + 0xE4C4: 0x840B, + 0xE4C5: 0x83C1, + 0xE4C6: 0x83F7, + 0xE4C7: 0x8407, + 0xE4C8: 0x83E0, + 0xE4C9: 0x83F2, + 0xE4CA: 0x840D, + 0xE4CB: 0x8422, + 0xE4CC: 0x8420, + 0xE4CD: 0x83BD, + 0xE4CE: 0x8438, + 0xE4CF: 0x8506, + 0xE4D0: 0x83FB, + 0xE4D1: 0x846D, + 0xE4D2: 0x842A, + 0xE4D3: 0x843C, + 0xE4D4: 0x855A, + 0xE4D5: 0x8484, + 0xE4D6: 0x8477, + 0xE4D7: 0x846B, + 0xE4D8: 0x84AD, + 0xE4D9: 0x846E, + 0xE4DA: 0x8482, + 0xE4DB: 0x8469, + 0xE4DC: 0x8446, + 0xE4DD: 0x842C, + 0xE4DE: 0x846F, + 0xE4DF: 0x8479, + 0xE4E0: 0x8435, + 0xE4E1: 0x84CA, + 0xE4E2: 0x8462, + 0xE4E3: 0x84B9, + 0xE4E4: 0x84BF, + 0xE4E5: 0x849F, + 0xE4E6: 0x84D9, + 0xE4E7: 0x84CD, + 0xE4E8: 0x84BB, + 0xE4E9: 0x84DA, + 0xE4EA: 0x84D0, + 0xE4EB: 0x84C1, + 0xE4EC: 0x84C6, + 0xE4ED: 0x84D6, + 0xE4EE: 0x84A1, + 0xE4EF: 0x8521, + 0xE4F0: 0x84FF, + 0xE4F1: 0x84F4, + 0xE4F2: 0x8517, + 0xE4F3: 0x8518, + 0xE4F4: 0x852C, + 0xE4F5: 0x851F, + 0xE4F6: 0x8515, + 0xE4F7: 0x8514, + 0xE4F8: 0x84FC, + 0xE4F9: 0x8540, + 0xE4FA: 0x8563, + 0xE4FB: 0x8558, + 0xE4FC: 0x8548, + 0xE540: 0x8541, + 0xE541: 0x8602, + 0xE542: 0x854B, + 0xE543: 0x8555, + 0xE544: 0x8580, + 0xE545: 0x85A4, + 0xE546: 0x8588, + 0xE547: 0x8591, + 0xE548: 0x858A, + 0xE549: 0x85A8, + 0xE54A: 0x856D, + 0xE54B: 0x8594, + 0xE54C: 0x859B, + 0xE54D: 0x85EA, + 0xE54E: 0x8587, + 0xE54F: 0x859C, + 0xE550: 0x8577, + 0xE551: 0x857E, + 0xE552: 0x8590, + 0xE553: 0x85C9, + 0xE554: 0x85BA, + 0xE555: 0x85CF, + 0xE556: 0x85B9, + 0xE557: 0x85D0, + 0xE558: 0x85D5, + 0xE559: 0x85DD, + 0xE55A: 0x85E5, + 0xE55B: 0x85DC, + 0xE55C: 0x85F9, + 0xE55D: 0x860A, + 0xE55E: 0x8613, + 0xE55F: 0x860B, + 0xE560: 0x85FE, + 0xE561: 0x85FA, + 0xE562: 0x8606, + 0xE563: 0x8622, + 0xE564: 0x861A, + 0xE565: 0x8630, + 0xE566: 0x863F, + 0xE567: 0x864D, + 0xE568: 0x4E55, + 0xE569: 0x8654, + 0xE56A: 0x865F, + 0xE56B: 0x8667, + 0xE56C: 0x8671, + 0xE56D: 0x8693, + 0xE56E: 0x86A3, + 0xE56F: 0x86A9, + 0xE570: 0x86AA, + 0xE571: 0x868B, + 0xE572: 0x868C, + 0xE573: 0x86B6, + 0xE574: 0x86AF, + 0xE575: 0x86C4, + 0xE576: 0x86C6, + 0xE577: 0x86B0, + 0xE578: 0x86C9, + 0xE579: 0x8823, + 0xE57A: 0x86AB, + 0xE57B: 0x86D4, + 0xE57C: 0x86DE, + 0xE57D: 0x86E9, + 0xE57E: 0x86EC, + 0xE580: 0x86DF, + 0xE581: 0x86DB, + 0xE582: 0x86EF, + 0xE583: 0x8712, + 0xE584: 0x8706, + 0xE585: 0x8708, + 0xE586: 0x8700, + 0xE587: 0x8703, + 0xE588: 0x86FB, + 0xE589: 0x8711, + 0xE58A: 0x8709, + 0xE58B: 0x870D, + 0xE58C: 0x86F9, + 0xE58D: 0x870A, + 0xE58E: 0x8734, + 0xE58F: 0x873F, + 0xE590: 0x8737, + 0xE591: 0x873B, + 0xE592: 0x8725, + 0xE593: 0x8729, + 0xE594: 0x871A, + 0xE595: 0x8760, + 0xE596: 0x875F, + 0xE597: 0x8778, + 0xE598: 0x874C, + 0xE599: 0x874E, + 0xE59A: 0x8774, + 0xE59B: 0x8757, + 0xE59C: 0x8768, + 0xE59D: 0x876E, + 0xE59E: 0x8759, + 0xE59F: 0x8753, + 0xE5A0: 0x8763, + 0xE5A1: 0x876A, + 0xE5A2: 0x8805, + 0xE5A3: 0x87A2, + 0xE5A4: 0x879F, + 0xE5A5: 0x8782, + 0xE5A6: 0x87AF, + 0xE5A7: 0x87CB, + 0xE5A8: 0x87BD, + 0xE5A9: 0x87C0, + 0xE5AA: 0x87D0, + 0xE5AB: 0x96D6, + 0xE5AC: 0x87AB, + 0xE5AD: 0x87C4, + 0xE5AE: 0x87B3, + 0xE5AF: 0x87C7, + 0xE5B0: 0x87C6, + 0xE5B1: 0x87BB, + 0xE5B2: 0x87EF, + 0xE5B3: 0x87F2, + 0xE5B4: 0x87E0, + 0xE5B5: 0x880F, + 0xE5B6: 0x880D, + 0xE5B7: 0x87FE, + 0xE5B8: 0x87F6, + 0xE5B9: 0x87F7, + 0xE5BA: 0x880E, + 0xE5BB: 0x87D2, + 0xE5BC: 0x8811, + 0xE5BD: 0x8816, + 0xE5BE: 0x8815, + 0xE5BF: 0x8822, + 0xE5C0: 0x8821, + 0xE5C1: 0x8831, + 0xE5C2: 0x8836, + 0xE5C3: 0x8839, + 0xE5C4: 0x8827, + 0xE5C5: 0x883B, + 0xE5C6: 0x8844, + 0xE5C7: 0x8842, + 0xE5C8: 0x8852, + 0xE5C9: 0x8859, + 0xE5CA: 0x885E, + 0xE5CB: 0x8862, + 0xE5CC: 0x886B, + 0xE5CD: 0x8881, + 0xE5CE: 0x887E, + 0xE5CF: 0x889E, + 0xE5D0: 0x8875, + 0xE5D1: 0x887D, + 0xE5D2: 0x88B5, + 0xE5D3: 0x8872, + 0xE5D4: 0x8882, + 0xE5D5: 0x8897, + 0xE5D6: 0x8892, + 0xE5D7: 0x88AE, + 0xE5D8: 0x8899, + 0xE5D9: 0x88A2, + 0xE5DA: 0x888D, + 0xE5DB: 0x88A4, + 0xE5DC: 0x88B0, + 0xE5DD: 0x88BF, + 0xE5DE: 0x88B1, + 0xE5DF: 0x88C3, + 0xE5E0: 0x88C4, + 0xE5E1: 0x88D4, + 0xE5E2: 0x88D8, + 0xE5E3: 0x88D9, + 0xE5E4: 0x88DD, + 0xE5E5: 0x88F9, + 0xE5E6: 0x8902, + 0xE5E7: 0x88FC, + 0xE5E8: 0x88F4, + 0xE5E9: 0x88E8, + 0xE5EA: 0x88F2, + 0xE5EB: 0x8904, + 0xE5EC: 0x890C, + 0xE5ED: 0x890A, + 0xE5EE: 0x8913, + 0xE5EF: 0x8943, + 0xE5F0: 0x891E, + 0xE5F1: 0x8925, + 0xE5F2: 0x892A, + 0xE5F3: 0x892B, + 0xE5F4: 0x8941, + 0xE5F5: 0x8944, + 0xE5F6: 0x893B, + 0xE5F7: 0x8936, + 0xE5F8: 0x8938, + 0xE5F9: 0x894C, + 0xE5FA: 0x891D, + 0xE5FB: 0x8960, + 0xE5FC: 0x895E, + 0xE640: 0x8966, + 0xE641: 0x8964, + 0xE642: 0x896D, + 0xE643: 0x896A, + 0xE644: 0x896F, + 0xE645: 0x8974, + 0xE646: 0x8977, + 0xE647: 0x897E, + 0xE648: 0x8983, + 0xE649: 0x8988, + 0xE64A: 0x898A, + 0xE64B: 0x8993, + 0xE64C: 0x8998, + 0xE64D: 0x89A1, + 0xE64E: 0x89A9, + 0xE64F: 0x89A6, + 0xE650: 0x89AC, + 0xE651: 0x89AF, + 0xE652: 0x89B2, + 0xE653: 0x89BA, + 0xE654: 0x89BD, + 0xE655: 0x89BF, + 0xE656: 0x89C0, + 0xE657: 0x89DA, + 0xE658: 0x89DC, + 0xE659: 0x89DD, + 0xE65A: 0x89E7, + 0xE65B: 0x89F4, + 0xE65C: 0x89F8, + 0xE65D: 0x8A03, + 0xE65E: 0x8A16, + 0xE65F: 0x8A10, + 0xE660: 0x8A0C, + 0xE661: 0x8A1B, + 0xE662: 0x8A1D, + 0xE663: 0x8A25, + 0xE664: 0x8A36, + 0xE665: 0x8A41, + 0xE666: 0x8A5B, + 0xE667: 0x8A52, + 0xE668: 0x8A46, + 0xE669: 0x8A48, + 0xE66A: 0x8A7C, + 0xE66B: 0x8A6D, + 0xE66C: 0x8A6C, + 0xE66D: 0x8A62, + 0xE66E: 0x8A85, + 0xE66F: 0x8A82, + 0xE670: 0x8A84, + 0xE671: 0x8AA8, + 0xE672: 0x8AA1, + 0xE673: 0x8A91, + 0xE674: 0x8AA5, + 0xE675: 0x8AA6, + 0xE676: 0x8A9A, + 0xE677: 0x8AA3, + 0xE678: 0x8AC4, + 0xE679: 0x8ACD, + 0xE67A: 0x8AC2, + 0xE67B: 0x8ADA, + 0xE67C: 0x8AEB, + 0xE67D: 0x8AF3, + 0xE67E: 0x8AE7, + 0xE680: 0x8AE4, + 0xE681: 0x8AF1, + 0xE682: 0x8B14, + 0xE683: 0x8AE0, + 0xE684: 0x8AE2, + 0xE685: 0x8AF7, + 0xE686: 0x8ADE, + 0xE687: 0x8ADB, + 0xE688: 0x8B0C, + 0xE689: 0x8B07, + 0xE68A: 0x8B1A, + 0xE68B: 0x8AE1, + 0xE68C: 0x8B16, + 0xE68D: 0x8B10, + 0xE68E: 0x8B17, + 0xE68F: 0x8B20, + 0xE690: 0x8B33, + 0xE691: 0x97AB, + 0xE692: 0x8B26, + 0xE693: 0x8B2B, + 0xE694: 0x8B3E, + 0xE695: 0x8B28, + 0xE696: 0x8B41, + 0xE697: 0x8B4C, + 0xE698: 0x8B4F, + 0xE699: 0x8B4E, + 0xE69A: 0x8B49, + 0xE69B: 0x8B56, + 0xE69C: 0x8B5B, + 0xE69D: 0x8B5A, + 0xE69E: 0x8B6B, + 0xE69F: 0x8B5F, + 0xE6A0: 0x8B6C, + 0xE6A1: 0x8B6F, + 0xE6A2: 0x8B74, + 0xE6A3: 0x8B7D, + 0xE6A4: 0x8B80, + 0xE6A5: 0x8B8C, + 0xE6A6: 0x8B8E, + 0xE6A7: 0x8B92, + 0xE6A8: 0x8B93, + 0xE6A9: 0x8B96, + 0xE6AA: 0x8B99, + 0xE6AB: 0x8B9A, + 0xE6AC: 0x8C3A, + 0xE6AD: 0x8C41, + 0xE6AE: 0x8C3F, + 0xE6AF: 0x8C48, + 0xE6B0: 0x8C4C, + 0xE6B1: 0x8C4E, + 0xE6B2: 0x8C50, + 0xE6B3: 0x8C55, + 0xE6B4: 0x8C62, + 0xE6B5: 0x8C6C, + 0xE6B6: 0x8C78, + 0xE6B7: 0x8C7A, + 0xE6B8: 0x8C82, + 0xE6B9: 0x8C89, + 0xE6BA: 0x8C85, + 0xE6BB: 0x8C8A, + 0xE6BC: 0x8C8D, + 0xE6BD: 0x8C8E, + 0xE6BE: 0x8C94, + 0xE6BF: 0x8C7C, + 0xE6C0: 0x8C98, + 0xE6C1: 0x621D, + 0xE6C2: 0x8CAD, + 0xE6C3: 0x8CAA, + 0xE6C4: 0x8CBD, + 0xE6C5: 0x8CB2, + 0xE6C6: 0x8CB3, + 0xE6C7: 0x8CAE, + 0xE6C8: 0x8CB6, + 0xE6C9: 0x8CC8, + 0xE6CA: 0x8CC1, + 0xE6CB: 0x8CE4, + 0xE6CC: 0x8CE3, + 0xE6CD: 0x8CDA, + 0xE6CE: 0x8CFD, + 0xE6CF: 0x8CFA, + 0xE6D0: 0x8CFB, + 0xE6D1: 0x8D04, + 0xE6D2: 0x8D05, + 0xE6D3: 0x8D0A, + 0xE6D4: 0x8D07, + 0xE6D5: 0x8D0F, + 0xE6D6: 0x8D0D, + 0xE6D7: 0x8D10, + 0xE6D8: 0x9F4E, + 0xE6D9: 0x8D13, + 0xE6DA: 0x8CCD, + 0xE6DB: 0x8D14, + 0xE6DC: 0x8D16, + 0xE6DD: 0x8D67, + 0xE6DE: 0x8D6D, + 0xE6DF: 0x8D71, + 0xE6E0: 0x8D73, + 0xE6E1: 0x8D81, + 0xE6E2: 0x8D99, + 0xE6E3: 0x8DC2, + 0xE6E4: 0x8DBE, + 0xE6E5: 0x8DBA, + 0xE6E6: 0x8DCF, + 0xE6E7: 0x8DDA, + 0xE6E8: 0x8DD6, + 0xE6E9: 0x8DCC, + 0xE6EA: 0x8DDB, + 0xE6EB: 0x8DCB, + 0xE6EC: 0x8DEA, + 0xE6ED: 0x8DEB, + 0xE6EE: 0x8DDF, + 0xE6EF: 0x8DE3, + 0xE6F0: 0x8DFC, + 0xE6F1: 0x8E08, + 0xE6F2: 0x8E09, + 0xE6F3: 0x8DFF, + 0xE6F4: 0x8E1D, + 0xE6F5: 0x8E1E, + 0xE6F6: 0x8E10, + 0xE6F7: 0x8E1F, + 0xE6F8: 0x8E42, + 0xE6F9: 0x8E35, + 0xE6FA: 0x8E30, + 0xE6FB: 0x8E34, + 0xE6FC: 0x8E4A, + 0xE740: 0x8E47, + 0xE741: 0x8E49, + 0xE742: 0x8E4C, + 0xE743: 0x8E50, + 0xE744: 0x8E48, + 0xE745: 0x8E59, + 0xE746: 0x8E64, + 0xE747: 0x8E60, + 0xE748: 0x8E2A, + 0xE749: 0x8E63, + 0xE74A: 0x8E55, + 0xE74B: 0x8E76, + 0xE74C: 0x8E72, + 0xE74D: 0x8E7C, + 0xE74E: 0x8E81, + 0xE74F: 0x8E87, + 0xE750: 0x8E85, + 0xE751: 0x8E84, + 0xE752: 0x8E8B, + 0xE753: 0x8E8A, + 0xE754: 0x8E93, + 0xE755: 0x8E91, + 0xE756: 0x8E94, + 0xE757: 0x8E99, + 0xE758: 0x8EAA, + 0xE759: 0x8EA1, + 0xE75A: 0x8EAC, + 0xE75B: 0x8EB0, + 0xE75C: 0x8EC6, + 0xE75D: 0x8EB1, + 0xE75E: 0x8EBE, + 0xE75F: 0x8EC5, + 0xE760: 0x8EC8, + 0xE761: 0x8ECB, + 0xE762: 0x8EDB, + 0xE763: 0x8EE3, + 0xE764: 0x8EFC, + 0xE765: 0x8EFB, + 0xE766: 0x8EEB, + 0xE767: 0x8EFE, + 0xE768: 0x8F0A, + 0xE769: 0x8F05, + 0xE76A: 0x8F15, + 0xE76B: 0x8F12, + 0xE76C: 0x8F19, + 0xE76D: 0x8F13, + 0xE76E: 0x8F1C, + 0xE76F: 0x8F1F, + 0xE770: 0x8F1B, + 0xE771: 0x8F0C, + 0xE772: 0x8F26, + 0xE773: 0x8F33, + 0xE774: 0x8F3B, + 0xE775: 0x8F39, + 0xE776: 0x8F45, + 0xE777: 0x8F42, + 0xE778: 0x8F3E, + 0xE779: 0x8F4C, + 0xE77A: 0x8F49, + 0xE77B: 0x8F46, + 0xE77C: 0x8F4E, + 0xE77D: 0x8F57, + 0xE77E: 0x8F5C, + 0xE780: 0x8F62, + 0xE781: 0x8F63, + 0xE782: 0x8F64, + 0xE783: 0x8F9C, + 0xE784: 0x8F9F, + 0xE785: 0x8FA3, + 0xE786: 0x8FAD, + 0xE787: 0x8FAF, + 0xE788: 0x8FB7, + 0xE789: 0x8FDA, + 0xE78A: 0x8FE5, + 0xE78B: 0x8FE2, + 0xE78C: 0x8FEA, + 0xE78D: 0x8FEF, + 0xE78E: 0x9087, + 0xE78F: 0x8FF4, + 0xE790: 0x9005, + 0xE791: 0x8FF9, + 0xE792: 0x8FFA, + 0xE793: 0x9011, + 0xE794: 0x9015, + 0xE795: 0x9021, + 0xE796: 0x900D, + 0xE797: 0x901E, + 0xE798: 0x9016, + 0xE799: 0x900B, + 0xE79A: 0x9027, + 0xE79B: 0x9036, + 0xE79C: 0x9035, + 0xE79D: 0x9039, + 0xE79E: 0x8FF8, + 0xE79F: 0x904F, + 0xE7A0: 0x9050, + 0xE7A1: 0x9051, + 0xE7A2: 0x9052, + 0xE7A3: 0x900E, + 0xE7A4: 0x9049, + 0xE7A5: 0x903E, + 0xE7A6: 0x9056, + 0xE7A7: 0x9058, + 0xE7A8: 0x905E, + 0xE7A9: 0x9068, + 0xE7AA: 0x906F, + 0xE7AB: 0x9076, + 0xE7AC: 0x96A8, + 0xE7AD: 0x9072, + 0xE7AE: 0x9082, + 0xE7AF: 0x907D, + 0xE7B0: 0x9081, + 0xE7B1: 0x9080, + 0xE7B2: 0x908A, + 0xE7B3: 0x9089, + 0xE7B4: 0x908F, + 0xE7B5: 0x90A8, + 0xE7B6: 0x90AF, + 0xE7B7: 0x90B1, + 0xE7B8: 0x90B5, + 0xE7B9: 0x90E2, + 0xE7BA: 0x90E4, + 0xE7BB: 0x6248, + 0xE7BC: 0x90DB, + 0xE7BD: 0x9102, + 0xE7BE: 0x9112, + 0xE7BF: 0x9119, + 0xE7C0: 0x9132, + 0xE7C1: 0x9130, + 0xE7C2: 0x914A, + 0xE7C3: 0x9156, + 0xE7C4: 0x9158, + 0xE7C5: 0x9163, + 0xE7C6: 0x9165, + 0xE7C7: 0x9169, + 0xE7C8: 0x9173, + 0xE7C9: 0x9172, + 0xE7CA: 0x918B, + 0xE7CB: 0x9189, + 0xE7CC: 0x9182, + 0xE7CD: 0x91A2, + 0xE7CE: 0x91AB, + 0xE7CF: 0x91AF, + 0xE7D0: 0x91AA, + 0xE7D1: 0x91B5, + 0xE7D2: 0x91B4, + 0xE7D3: 0x91BA, + 0xE7D4: 0x91C0, + 0xE7D5: 0x91C1, + 0xE7D6: 0x91C9, + 0xE7D7: 0x91CB, + 0xE7D8: 0x91D0, + 0xE7D9: 0x91D6, + 0xE7DA: 0x91DF, + 0xE7DB: 0x91E1, + 0xE7DC: 0x91DB, + 0xE7DD: 0x91FC, + 0xE7DE: 0x91F5, + 0xE7DF: 0x91F6, + 0xE7E0: 0x921E, + 0xE7E1: 0x91FF, + 0xE7E2: 0x9214, + 0xE7E3: 0x922C, + 0xE7E4: 0x9215, + 0xE7E5: 0x9211, + 0xE7E6: 0x925E, + 0xE7E7: 0x9257, + 0xE7E8: 0x9245, + 0xE7E9: 0x9249, + 0xE7EA: 0x9264, + 0xE7EB: 0x9248, + 0xE7EC: 0x9295, + 0xE7ED: 0x923F, + 0xE7EE: 0x924B, + 0xE7EF: 0x9250, + 0xE7F0: 0x929C, + 0xE7F1: 0x9296, + 0xE7F2: 0x9293, + 0xE7F3: 0x929B, + 0xE7F4: 0x925A, + 0xE7F5: 0x92CF, + 0xE7F6: 0x92B9, + 0xE7F7: 0x92B7, + 0xE7F8: 0x92E9, + 0xE7F9: 0x930F, + 0xE7FA: 0x92FA, + 0xE7FB: 0x9344, + 0xE7FC: 0x932E, + 0xE840: 0x9319, + 0xE841: 0x9322, + 0xE842: 0x931A, + 0xE843: 0x9323, + 0xE844: 0x933A, + 0xE845: 0x9335, + 0xE846: 0x933B, + 0xE847: 0x935C, + 0xE848: 0x9360, + 0xE849: 0x937C, + 0xE84A: 0x936E, + 0xE84B: 0x9356, + 0xE84C: 0x93B0, + 0xE84D: 0x93AC, + 0xE84E: 0x93AD, + 0xE84F: 0x9394, + 0xE850: 0x93B9, + 0xE851: 0x93D6, + 0xE852: 0x93D7, + 0xE853: 0x93E8, + 0xE854: 0x93E5, + 0xE855: 0x93D8, + 0xE856: 0x93C3, + 0xE857: 0x93DD, + 0xE858: 0x93D0, + 0xE859: 0x93C8, + 0xE85A: 0x93E4, + 0xE85B: 0x941A, + 0xE85C: 0x9414, + 0xE85D: 0x9413, + 0xE85E: 0x9403, + 0xE85F: 0x9407, + 0xE860: 0x9410, + 0xE861: 0x9436, + 0xE862: 0x942B, + 0xE863: 0x9435, + 0xE864: 0x9421, + 0xE865: 0x943A, + 0xE866: 0x9441, + 0xE867: 0x9452, + 0xE868: 0x9444, + 0xE869: 0x945B, + 0xE86A: 0x9460, + 0xE86B: 0x9462, + 0xE86C: 0x945E, + 0xE86D: 0x946A, + 0xE86E: 0x9229, + 0xE86F: 0x9470, + 0xE870: 0x9475, + 0xE871: 0x9477, + 0xE872: 0x947D, + 0xE873: 0x945A, + 0xE874: 0x947C, + 0xE875: 0x947E, + 0xE876: 0x9481, + 0xE877: 0x947F, + 0xE878: 0x9582, + 0xE879: 0x9587, + 0xE87A: 0x958A, + 0xE87B: 0x9594, + 0xE87C: 0x9596, + 0xE87D: 0x9598, + 0xE87E: 0x9599, + 0xE880: 0x95A0, + 0xE881: 0x95A8, + 0xE882: 0x95A7, + 0xE883: 0x95AD, + 0xE884: 0x95BC, + 0xE885: 0x95BB, + 0xE886: 0x95B9, + 0xE887: 0x95BE, + 0xE888: 0x95CA, + 0xE889: 0x6FF6, + 0xE88A: 0x95C3, + 0xE88B: 0x95CD, + 0xE88C: 0x95CC, + 0xE88D: 0x95D5, + 0xE88E: 0x95D4, + 0xE88F: 0x95D6, + 0xE890: 0x95DC, + 0xE891: 0x95E1, + 0xE892: 0x95E5, + 0xE893: 0x95E2, + 0xE894: 0x9621, + 0xE895: 0x9628, + 0xE896: 0x962E, + 0xE897: 0x962F, + 0xE898: 0x9642, + 0xE899: 0x964C, + 0xE89A: 0x964F, + 0xE89B: 0x964B, + 0xE89C: 0x9677, + 0xE89D: 0x965C, + 0xE89E: 0x965E, + 0xE89F: 0x965D, + 0xE8A0: 0x965F, + 0xE8A1: 0x9666, + 0xE8A2: 0x9672, + 0xE8A3: 0x966C, + 0xE8A4: 0x968D, + 0xE8A5: 0x9698, + 0xE8A6: 0x9695, + 0xE8A7: 0x9697, + 0xE8A8: 0x96AA, + 0xE8A9: 0x96A7, + 0xE8AA: 0x96B1, + 0xE8AB: 0x96B2, + 0xE8AC: 0x96B0, + 0xE8AD: 0x96B4, + 0xE8AE: 0x96B6, + 0xE8AF: 0x96B8, + 0xE8B0: 0x96B9, + 0xE8B1: 0x96CE, + 0xE8B2: 0x96CB, + 0xE8B3: 0x96C9, + 0xE8B4: 0x96CD, + 0xE8B5: 0x894D, + 0xE8B6: 0x96DC, + 0xE8B7: 0x970D, + 0xE8B8: 0x96D5, + 0xE8B9: 0x96F9, + 0xE8BA: 0x9704, + 0xE8BB: 0x9706, + 0xE8BC: 0x9708, + 0xE8BD: 0x9713, + 0xE8BE: 0x970E, + 0xE8BF: 0x9711, + 0xE8C0: 0x970F, + 0xE8C1: 0x9716, + 0xE8C2: 0x9719, + 0xE8C3: 0x9724, + 0xE8C4: 0x972A, + 0xE8C5: 0x9730, + 0xE8C6: 0x9739, + 0xE8C7: 0x973D, + 0xE8C8: 0x973E, + 0xE8C9: 0x9744, + 0xE8CA: 0x9746, + 0xE8CB: 0x9748, + 0xE8CC: 0x9742, + 0xE8CD: 0x9749, + 0xE8CE: 0x975C, + 0xE8CF: 0x9760, + 0xE8D0: 0x9764, + 0xE8D1: 0x9766, + 0xE8D2: 0x9768, + 0xE8D3: 0x52D2, + 0xE8D4: 0x976B, + 0xE8D5: 0x9771, + 0xE8D6: 0x9779, + 0xE8D7: 0x9785, + 0xE8D8: 0x977C, + 0xE8D9: 0x9781, + 0xE8DA: 0x977A, + 0xE8DB: 0x9786, + 0xE8DC: 0x978B, + 0xE8DD: 0x978F, + 0xE8DE: 0x9790, + 0xE8DF: 0x979C, + 0xE8E0: 0x97A8, + 0xE8E1: 0x97A6, + 0xE8E2: 0x97A3, + 0xE8E3: 0x97B3, + 0xE8E4: 0x97B4, + 0xE8E5: 0x97C3, + 0xE8E6: 0x97C6, + 0xE8E7: 0x97C8, + 0xE8E8: 0x97CB, + 0xE8E9: 0x97DC, + 0xE8EA: 0x97ED, + 0xE8EB: 0x9F4F, + 0xE8EC: 0x97F2, + 0xE8ED: 0x7ADF, + 0xE8EE: 0x97F6, + 0xE8EF: 0x97F5, + 0xE8F0: 0x980F, + 0xE8F1: 0x980C, + 0xE8F2: 0x9838, + 0xE8F3: 0x9824, + 0xE8F4: 0x9821, + 0xE8F5: 0x9837, + 0xE8F6: 0x983D, + 0xE8F7: 0x9846, + 0xE8F8: 0x984F, + 0xE8F9: 0x984B, + 0xE8FA: 0x986B, + 0xE8FB: 0x986F, + 0xE8FC: 0x9870, + 0xE940: 0x9871, + 0xE941: 0x9874, + 0xE942: 0x9873, + 0xE943: 0x98AA, + 0xE944: 0x98AF, + 0xE945: 0x98B1, + 0xE946: 0x98B6, + 0xE947: 0x98C4, + 0xE948: 0x98C3, + 0xE949: 0x98C6, + 0xE94A: 0x98E9, + 0xE94B: 0x98EB, + 0xE94C: 0x9903, + 0xE94D: 0x9909, + 0xE94E: 0x9912, + 0xE94F: 0x9914, + 0xE950: 0x9918, + 0xE951: 0x9921, + 0xE952: 0x991D, + 0xE953: 0x991E, + 0xE954: 0x9924, + 0xE955: 0x9920, + 0xE956: 0x992C, + 0xE957: 0x992E, + 0xE958: 0x993D, + 0xE959: 0x993E, + 0xE95A: 0x9942, + 0xE95B: 0x9949, + 0xE95C: 0x9945, + 0xE95D: 0x9950, + 0xE95E: 0x994B, + 0xE95F: 0x9951, + 0xE960: 0x9952, + 0xE961: 0x994C, + 0xE962: 0x9955, + 0xE963: 0x9997, + 0xE964: 0x9998, + 0xE965: 0x99A5, + 0xE966: 0x99AD, + 0xE967: 0x99AE, + 0xE968: 0x99BC, + 0xE969: 0x99DF, + 0xE96A: 0x99DB, + 0xE96B: 0x99DD, + 0xE96C: 0x99D8, + 0xE96D: 0x99D1, + 0xE96E: 0x99ED, + 0xE96F: 0x99EE, + 0xE970: 0x99F1, + 0xE971: 0x99F2, + 0xE972: 0x99FB, + 0xE973: 0x99F8, + 0xE974: 0x9A01, + 0xE975: 0x9A0F, + 0xE976: 0x9A05, + 0xE977: 0x99E2, + 0xE978: 0x9A19, + 0xE979: 0x9A2B, + 0xE97A: 0x9A37, + 0xE97B: 0x9A45, + 0xE97C: 0x9A42, + 0xE97D: 0x9A40, + 0xE97E: 0x9A43, + 0xE980: 0x9A3E, + 0xE981: 0x9A55, + 0xE982: 0x9A4D, + 0xE983: 0x9A5B, + 0xE984: 0x9A57, + 0xE985: 0x9A5F, + 0xE986: 0x9A62, + 0xE987: 0x9A65, + 0xE988: 0x9A64, + 0xE989: 0x9A69, + 0xE98A: 0x9A6B, + 0xE98B: 0x9A6A, + 0xE98C: 0x9AAD, + 0xE98D: 0x9AB0, + 0xE98E: 0x9ABC, + 0xE98F: 0x9AC0, + 0xE990: 0x9ACF, + 0xE991: 0x9AD1, + 0xE992: 0x9AD3, + 0xE993: 0x9AD4, + 0xE994: 0x9ADE, + 0xE995: 0x9ADF, + 0xE996: 0x9AE2, + 0xE997: 0x9AE3, + 0xE998: 0x9AE6, + 0xE999: 0x9AEF, + 0xE99A: 0x9AEB, + 0xE99B: 0x9AEE, + 0xE99C: 0x9AF4, + 0xE99D: 0x9AF1, + 0xE99E: 0x9AF7, + 0xE99F: 0x9AFB, + 0xE9A0: 0x9B06, + 0xE9A1: 0x9B18, + 0xE9A2: 0x9B1A, + 0xE9A3: 0x9B1F, + 0xE9A4: 0x9B22, + 0xE9A5: 0x9B23, + 0xE9A6: 0x9B25, + 0xE9A7: 0x9B27, + 0xE9A8: 0x9B28, + 0xE9A9: 0x9B29, + 0xE9AA: 0x9B2A, + 0xE9AB: 0x9B2E, + 0xE9AC: 0x9B2F, + 0xE9AD: 0x9B32, + 0xE9AE: 0x9B44, + 0xE9AF: 0x9B43, + 0xE9B0: 0x9B4F, + 0xE9B1: 0x9B4D, + 0xE9B2: 0x9B4E, + 0xE9B3: 0x9B51, + 0xE9B4: 0x9B58, + 0xE9B5: 0x9B74, + 0xE9B6: 0x9B93, + 0xE9B7: 0x9B83, + 0xE9B8: 0x9B91, + 0xE9B9: 0x9B96, + 0xE9BA: 0x9B97, + 0xE9BB: 0x9B9F, + 0xE9BC: 0x9BA0, + 0xE9BD: 0x9BA8, + 0xE9BE: 0x9BB4, + 0xE9BF: 0x9BC0, + 0xE9C0: 0x9BCA, + 0xE9C1: 0x9BB9, + 0xE9C2: 0x9BC6, + 0xE9C3: 0x9BCF, + 0xE9C4: 0x9BD1, + 0xE9C5: 0x9BD2, + 0xE9C6: 0x9BE3, + 0xE9C7: 0x9BE2, + 0xE9C8: 0x9BE4, + 0xE9C9: 0x9BD4, + 0xE9CA: 0x9BE1, + 0xE9CB: 0x9C3A, + 0xE9CC: 0x9BF2, + 0xE9CD: 0x9BF1, + 0xE9CE: 0x9BF0, + 0xE9CF: 0x9C15, + 0xE9D0: 0x9C14, + 0xE9D1: 0x9C09, + 0xE9D2: 0x9C13, + 0xE9D3: 0x9C0C, + 0xE9D4: 0x9C06, + 0xE9D5: 0x9C08, + 0xE9D6: 0x9C12, + 0xE9D7: 0x9C0A, + 0xE9D8: 0x9C04, + 0xE9D9: 0x9C2E, + 0xE9DA: 0x9C1B, + 0xE9DB: 0x9C25, + 0xE9DC: 0x9C24, + 0xE9DD: 0x9C21, + 0xE9DE: 0x9C30, + 0xE9DF: 0x9C47, + 0xE9E0: 0x9C32, + 0xE9E1: 0x9C46, + 0xE9E2: 0x9C3E, + 0xE9E3: 0x9C5A, + 0xE9E4: 0x9C60, + 0xE9E5: 0x9C67, + 0xE9E6: 0x9C76, + 0xE9E7: 0x9C78, + 0xE9E8: 0x9CE7, + 0xE9E9: 0x9CEC, + 0xE9EA: 0x9CF0, + 0xE9EB: 0x9D09, + 0xE9EC: 0x9D08, + 0xE9ED: 0x9CEB, + 0xE9EE: 0x9D03, + 0xE9EF: 0x9D06, + 0xE9F0: 0x9D2A, + 0xE9F1: 0x9D26, + 0xE9F2: 0x9DAF, + 0xE9F3: 0x9D23, + 0xE9F4: 0x9D1F, + 0xE9F5: 0x9D44, + 0xE9F6: 0x9D15, + 0xE9F7: 0x9D12, + 0xE9F8: 0x9D41, + 0xE9F9: 0x9D3F, + 0xE9FA: 0x9D3E, + 0xE9FB: 0x9D46, + 0xE9FC: 0x9D48, + 0xEA40: 0x9D5D, + 0xEA41: 0x9D5E, + 0xEA42: 0x9D64, + 0xEA43: 0x9D51, + 0xEA44: 0x9D50, + 0xEA45: 0x9D59, + 0xEA46: 0x9D72, + 0xEA47: 0x9D89, + 0xEA48: 0x9D87, + 0xEA49: 0x9DAB, + 0xEA4A: 0x9D6F, + 0xEA4B: 0x9D7A, + 0xEA4C: 0x9D9A, + 0xEA4D: 0x9DA4, + 0xEA4E: 0x9DA9, + 0xEA4F: 0x9DB2, + 0xEA50: 0x9DC4, + 0xEA51: 0x9DC1, + 0xEA52: 0x9DBB, + 0xEA53: 0x9DB8, + 0xEA54: 0x9DBA, + 0xEA55: 0x9DC6, + 0xEA56: 0x9DCF, + 0xEA57: 0x9DC2, + 0xEA58: 0x9DD9, + 0xEA59: 0x9DD3, + 0xEA5A: 0x9DF8, + 0xEA5B: 0x9DE6, + 0xEA5C: 0x9DED, + 0xEA5D: 0x9DEF, + 0xEA5E: 0x9DFD, + 0xEA5F: 0x9E1A, + 0xEA60: 0x9E1B, + 0xEA61: 0x9E1E, + 0xEA62: 0x9E75, + 0xEA63: 0x9E79, + 0xEA64: 0x9E7D, + 0xEA65: 0x9E81, + 0xEA66: 0x9E88, + 0xEA67: 0x9E8B, + 0xEA68: 0x9E8C, + 0xEA69: 0x9E92, + 0xEA6A: 0x9E95, + 0xEA6B: 0x9E91, + 0xEA6C: 0x9E9D, + 0xEA6D: 0x9EA5, + 0xEA6E: 0x9EA9, + 0xEA6F: 0x9EB8, + 0xEA70: 0x9EAA, + 0xEA71: 0x9EAD, + 0xEA72: 0x9761, + 0xEA73: 0x9ECC, + 0xEA74: 0x9ECE, + 0xEA75: 0x9ECF, + 0xEA76: 0x9ED0, + 0xEA77: 0x9ED4, + 0xEA78: 0x9EDC, + 0xEA79: 0x9EDE, + 0xEA7A: 0x9EDD, + 0xEA7B: 0x9EE0, + 0xEA7C: 0x9EE5, + 0xEA7D: 0x9EE8, + 0xEA7E: 0x9EEF, + 0xEA80: 0x9EF4, + 0xEA81: 0x9EF6, + 0xEA82: 0x9EF7, + 0xEA83: 0x9EF9, + 0xEA84: 0x9EFB, + 0xEA85: 0x9EFC, + 0xEA86: 0x9EFD, + 0xEA87: 0x9F07, + 0xEA88: 0x9F08, + 0xEA89: 0x76B7, + 0xEA8A: 0x9F15, + 0xEA8B: 0x9F21, + 0xEA8C: 0x9F2C, + 0xEA8D: 0x9F3E, + 0xEA8E: 0x9F4A, + 0xEA8F: 0x9F52, + 0xEA90: 0x9F54, + 0xEA91: 0x9F63, + 0xEA92: 0x9F5F, + 0xEA93: 0x9F60, + 0xEA94: 0x9F61, + 0xEA95: 0x9F66, + 0xEA96: 0x9F67, + 0xEA97: 0x9F6C, + 0xEA98: 0x9F6A, + 0xEA99: 0x9F77, + 0xEA9A: 0x9F72, + 0xEA9B: 0x9F76, + 0xEA9C: 0x9F95, + 0xEA9D: 0x9F9C, + 0xEA9E: 0x9FA0, + 0xEA9F: 0x582F, + 0xEAA0: 0x69C7, + 0xEAA1: 0x9059, + 0xEAA2: 0x7464, + 0xEAA3: 0x51DC, + 0xEAA4: 0x7199, +}; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var GenericGF_1 = __webpack_require__(1); +var GenericGFPoly_1 = __webpack_require__(2); +function runEuclideanAlgorithm(field, a, b, R) { + var _a; + // Assume a's degree is >= b's + if (a.degree() < b.degree()) { + _a = [b, a], a = _a[0], b = _a[1]; + } + var rLast = a; + var r = b; + var tLast = field.zero; + var t = field.one; + // Run Euclidean algorithm until r's degree is less than R/2 + while (r.degree() >= R / 2) { + var rLastLast = rLast; + var tLastLast = tLast; + rLast = r; + tLast = t; + // Divide rLastLast by rLast, with quotient in q and remainder in r + if (rLast.isZero()) { + // Euclidean algorithm already terminated? + return null; + } + r = rLastLast; + var q = field.zero; + var denominatorLeadingTerm = rLast.getCoefficient(rLast.degree()); + var dltInverse = field.inverse(denominatorLeadingTerm); + while (r.degree() >= rLast.degree() && !r.isZero()) { + var degreeDiff = r.degree() - rLast.degree(); + var scale = field.multiply(r.getCoefficient(r.degree()), dltInverse); + q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale)); + r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale)); + } + t = q.multiplyPoly(tLast).addOrSubtract(tLastLast); + if (r.degree() >= rLast.degree()) { + return null; + } + } + var sigmaTildeAtZero = t.getCoefficient(0); + if (sigmaTildeAtZero === 0) { + return null; + } + var inverse = field.inverse(sigmaTildeAtZero); + return [t.multiply(inverse), r.multiply(inverse)]; +} +function findErrorLocations(field, errorLocator) { + // This is a direct application of Chien's search + var numErrors = errorLocator.degree(); + if (numErrors === 1) { + return [errorLocator.getCoefficient(1)]; + } + var result = new Array(numErrors); + var errorCount = 0; + for (var i = 1; i < field.size && errorCount < numErrors; i++) { + if (errorLocator.evaluateAt(i) === 0) { + result[errorCount] = field.inverse(i); + errorCount++; + } + } + if (errorCount !== numErrors) { + return null; + } + return result; +} +function findErrorMagnitudes(field, errorEvaluator, errorLocations) { + // This is directly applying Forney's Formula + var s = errorLocations.length; + var result = new Array(s); + for (var i = 0; i < s; i++) { + var xiInverse = field.inverse(errorLocations[i]); + var denominator = 1; + for (var j = 0; j < s; j++) { + if (i !== j) { + denominator = field.multiply(denominator, GenericGF_1.addOrSubtractGF(1, field.multiply(errorLocations[j], xiInverse))); + } + } + result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator)); + if (field.generatorBase !== 0) { + result[i] = field.multiply(result[i], xiInverse); + } + } + return result; +} +function decode(bytes, twoS) { + var outputBytes = new Uint8ClampedArray(bytes.length); + outputBytes.set(bytes); + var field = new GenericGF_1.default(0x011D, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1 + var poly = new GenericGFPoly_1.default(field, outputBytes); + var syndromeCoefficients = new Uint8ClampedArray(twoS); + var error = false; + for (var s = 0; s < twoS; s++) { + var evaluation = poly.evaluateAt(field.exp(s + field.generatorBase)); + syndromeCoefficients[syndromeCoefficients.length - 1 - s] = evaluation; + if (evaluation !== 0) { + error = true; + } + } + if (!error) { + return outputBytes; + } + var syndrome = new GenericGFPoly_1.default(field, syndromeCoefficients); + var sigmaOmega = runEuclideanAlgorithm(field, field.buildMonomial(twoS, 1), syndrome, twoS); + if (sigmaOmega === null) { + return null; + } + var errorLocations = findErrorLocations(field, sigmaOmega[0]); + if (errorLocations == null) { + return null; + } + var errorMagnitudes = findErrorMagnitudes(field, sigmaOmega[1], errorLocations); + for (var i = 0; i < errorLocations.length; i++) { + var position = outputBytes.length - 1 - field.log(errorLocations[i]); + if (position < 0) { + return null; + } + outputBytes[position] = GenericGF_1.addOrSubtractGF(outputBytes[position], errorMagnitudes[i]); + } + return outputBytes; +} +exports.decode = decode; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSIONS = [ + { + infoBits: null, + versionNumber: 1, + alignmentPatternCenters: [], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 7, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + { + ecCodewordsPerBlock: 13, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }], + }, + { + ecCodewordsPerBlock: 17, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 2, + alignmentPatternCenters: [6, 18], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 3, + alignmentPatternCenters: [6, 22], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 15, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 4, + alignmentPatternCenters: [6, 26], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 5, + alignmentPatternCenters: [6, 30], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 11 }, + { numBlocks: 2, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: null, + versionNumber: 6, + alignmentPatternCenters: [6, 34], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }], + }, + ], + }, + { + infoBits: 0x07C94, + versionNumber: 7, + alignmentPatternCenters: [6, 22, 38], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + { numBlocks: 1, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x085BC, + versionNumber: 8, + alignmentPatternCenters: [6, 24, 42], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 38 }, + { numBlocks: 2, dataCodewordsPerBlock: 39 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 18 }, + { numBlocks: 2, dataCodewordsPerBlock: 19 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 14 }, + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x09A99, + versionNumber: 9, + alignmentPatternCenters: [6, 26, 46], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0A4D3, + versionNumber: 10, + alignmentPatternCenters: [6, 28, 50], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 68 }, + { numBlocks: 2, dataCodewordsPerBlock: 69 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 43 }, + { numBlocks: 1, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x0BBF6, + versionNumber: 11, + alignmentPatternCenters: [6, 30, 54], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 50 }, + { numBlocks: 4, dataCodewordsPerBlock: 51 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + { numBlocks: 4, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 12 }, + { numBlocks: 8, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0C762, + versionNumber: 12, + alignmentPatternCenters: [6, 32, 58], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 92 }, + { numBlocks: 2, dataCodewordsPerBlock: 93 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 20 }, + { numBlocks: 6, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x0D847, + versionNumber: 13, + alignmentPatternCenters: [6, 34, 62], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 37 }, + { numBlocks: 1, dataCodewordsPerBlock: 38 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 20 }, + { numBlocks: 4, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 11 }, + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: 0x0E60D, + versionNumber: 14, + alignmentPatternCenters: [6, 26, 46, 66], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 40 }, + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 16 }, + { numBlocks: 5, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 5, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0F928, + versionNumber: 15, + alignmentPatternCenters: [6, 26, 48, 70], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 87 }, + { numBlocks: 1, dataCodewordsPerBlock: 88 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + { numBlocks: 5, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 7, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x10B78, + versionNumber: 16, + alignmentPatternCenters: [6, 26, 50, 74], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 98 }, + { numBlocks: 1, dataCodewordsPerBlock: 99 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1145D, + versionNumber: 17, + alignmentPatternCenters: [6, 30, 54, 78], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 1, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 22 }, + { numBlocks: 15, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 17, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x12A17, + versionNumber: 18, + alignmentPatternCenters: [6, 30, 56, 82], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 120 }, + { numBlocks: 1, dataCodewordsPerBlock: 121 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 43 }, + { numBlocks: 4, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x13532, + versionNumber: 19, + alignmentPatternCenters: [6, 30, 58, 86], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 113 }, + { numBlocks: 4, dataCodewordsPerBlock: 114 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 44 }, + { numBlocks: 11, dataCodewordsPerBlock: 45 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 21 }, + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 13 }, + { numBlocks: 16, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x149A6, + versionNumber: 20, + alignmentPatternCenters: [6, 34, 62, 90], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 41 }, + { numBlocks: 13, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 5, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 15 }, + { numBlocks: 10, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x15683, + versionNumber: 21, + alignmentPatternCenters: [6, 28, 50, 72, 94], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 116 }, + { numBlocks: 4, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 16 }, + { numBlocks: 6, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x168C9, + versionNumber: 22, + alignmentPatternCenters: [6, 26, 50, 74, 98], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 111 }, + { numBlocks: 7, dataCodewordsPerBlock: 112 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: 0x177EC, + versionNumber: 23, + alignmentPatternCenters: [6, 30, 54, 74, 102], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 121 }, + { numBlocks: 5, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + { numBlocks: 14, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 16, dataCodewordsPerBlock: 15 }, + { numBlocks: 14, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x18EC4, + versionNumber: 24, + alignmentPatternCenters: [6, 28, 54, 80, 106], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 45 }, + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 30, dataCodewordsPerBlock: 16 }, + { numBlocks: 2, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x191E1, + versionNumber: 25, + alignmentPatternCenters: [6, 32, 58, 84, 110], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 106 }, + { numBlocks: 4, dataCodewordsPerBlock: 107 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 47 }, + { numBlocks: 13, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1AFAB, + versionNumber: 26, + alignmentPatternCenters: [6, 30, 58, 86, 114], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 114 }, + { numBlocks: 2, dataCodewordsPerBlock: 115 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 46 }, + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 28, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 33, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x1B08E, + versionNumber: 27, + alignmentPatternCenters: [6, 34, 62, 90, 118], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 23 }, + { numBlocks: 26, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1CC1A, + versionNumber: 28, + alignmentPatternCenters: [6, 26, 50, 74, 98, 122], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 117 }, + { numBlocks: 10, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 45 }, + { numBlocks: 23, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 24 }, + { numBlocks: 31, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 31, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1D33F, + versionNumber: 29, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 116 }, + { numBlocks: 7, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 21, dataCodewordsPerBlock: 45 }, + { numBlocks: 7, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + { numBlocks: 37, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 26, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1ED75, + versionNumber: 30, + alignmentPatternCenters: [6, 26, 52, 78, 104, 130], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 115 }, + { numBlocks: 10, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 47 }, + { numBlocks: 10, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 25, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 25, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1F250, + versionNumber: 31, + alignmentPatternCenters: [6, 30, 56, 82, 108, 134], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 3, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 46 }, + { numBlocks: 29, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 24 }, + { numBlocks: 1, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x209D5, + versionNumber: 32, + alignmentPatternCenters: [6, 34, 60, 86, 112, 138], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 24 }, + { numBlocks: 35, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 35, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x216F0, + versionNumber: 33, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 21, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 24 }, + { numBlocks: 19, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x228BA, + versionNumber: 34, + alignmentPatternCenters: [6, 34, 62, 90, 118, 146], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 6, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 44, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 59, dataCodewordsPerBlock: 16 }, + { numBlocks: 1, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x2379F, + versionNumber: 35, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 121 }, + { numBlocks: 7, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 47 }, + { numBlocks: 26, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 39, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 41, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x24B0B, + versionNumber: 36, + alignmentPatternCenters: [6, 24, 50, 76, 102, 128, 154], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 121 }, + { numBlocks: 14, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 47 }, + { numBlocks: 34, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 46, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 64, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x2542E, + versionNumber: 37, + alignmentPatternCenters: [6, 28, 54, 80, 106, 132, 158], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 46 }, + { numBlocks: 14, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 49, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 24, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x26A64, + versionNumber: 38, + alignmentPatternCenters: [6, 32, 58, 84, 110, 136, 162], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 122 }, + { numBlocks: 18, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 46 }, + { numBlocks: 32, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 48, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 15 }, + { numBlocks: 32, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x27541, + versionNumber: 39, + alignmentPatternCenters: [6, 26, 54, 82, 110, 138, 166], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 40, dataCodewordsPerBlock: 47 }, + { numBlocks: 7, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 43, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 15 }, + { numBlocks: 67, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x28C69, + versionNumber: 40, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142, 170], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 118 }, + { numBlocks: 6, dataCodewordsPerBlock: 119 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 18, dataCodewordsPerBlock: 47 }, + { numBlocks: 31, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 34, dataCodewordsPerBlock: 24 }, + { numBlocks: 34, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 15 }, + { numBlocks: 61, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, +]; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +function squareToQuadrilateral(p1, p2, p3, p4) { + var dx3 = p1.x - p2.x + p3.x - p4.x; + var dy3 = p1.y - p2.y + p3.y - p4.y; + if (dx3 === 0 && dy3 === 0) { // Affine + return { + a11: p2.x - p1.x, + a12: p2.y - p1.y, + a13: 0, + a21: p3.x - p2.x, + a22: p3.y - p2.y, + a23: 0, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } + else { + var dx1 = p2.x - p3.x; + var dx2 = p4.x - p3.x; + var dy1 = p2.y - p3.y; + var dy2 = p4.y - p3.y; + var denominator = dx1 * dy2 - dx2 * dy1; + var a13 = (dx3 * dy2 - dx2 * dy3) / denominator; + var a23 = (dx1 * dy3 - dx3 * dy1) / denominator; + return { + a11: p2.x - p1.x + a13 * p2.x, + a12: p2.y - p1.y + a13 * p2.y, + a13: a13, + a21: p4.x - p1.x + a23 * p4.x, + a22: p4.y - p1.y + a23 * p4.y, + a23: a23, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } +} +function quadrilateralToSquare(p1, p2, p3, p4) { + // Here, the adjoint serves as the inverse: + var sToQ = squareToQuadrilateral(p1, p2, p3, p4); + return { + a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32, + a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33, + a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22, + a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33, + a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31, + a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23, + a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31, + a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32, + a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21, + }; +} +function times(a, b) { + return { + a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13, + a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13, + a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13, + a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23, + a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23, + a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23, + a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33, + a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33, + a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33, + }; +} +function extract(image, location) { + var qToS = quadrilateralToSquare({ x: 3.5, y: 3.5 }, { x: location.dimension - 3.5, y: 3.5 }, { x: location.dimension - 6.5, y: location.dimension - 6.5 }, { x: 3.5, y: location.dimension - 3.5 }); + var sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft); + var transform = times(sToQ, qToS); + var matrix = BitMatrix_1.BitMatrix.createEmpty(location.dimension, location.dimension); + var mappingFunction = function (x, y) { + var denominator = transform.a13 * x + transform.a23 * y + transform.a33; + return { + x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator, + y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator, + }; + }; + for (var y = 0; y < location.dimension; y++) { + for (var x = 0; x < location.dimension; x++) { + var xValue = x + 0.5; + var yValue = y + 0.5; + var sourcePixel = mappingFunction(xValue, yValue); + matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y))); + } + } + return { + matrix: matrix, + mappingFunction: mappingFunction, + }; +} +exports.extract = extract; + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var MAX_FINDERPATTERNS_TO_SEARCH = 4; +var MIN_QUAD_RATIO = 0.5; +var MAX_QUAD_RATIO = 1.5; +var distance = function (a, b) { return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); }; +function sum(values) { + return values.reduce(function (a, b) { return a + b; }); +} +// Takes three finder patterns and organizes them into topLeft, topRight, etc +function reorderFinderPatterns(pattern1, pattern2, pattern3) { + var _a, _b, _c, _d; + // Find distances between pattern centers + var oneTwoDistance = distance(pattern1, pattern2); + var twoThreeDistance = distance(pattern2, pattern3); + var oneThreeDistance = distance(pattern1, pattern3); + var bottomLeft; + var topLeft; + var topRight; + // Assume one closest to other two is B; A and C will just be guesses at first + if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) { + _a = [pattern2, pattern1, pattern3], bottomLeft = _a[0], topLeft = _a[1], topRight = _a[2]; + } + else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) { + _b = [pattern1, pattern2, pattern3], bottomLeft = _b[0], topLeft = _b[1], topRight = _b[2]; + } + else { + _c = [pattern1, pattern3, pattern2], bottomLeft = _c[0], topLeft = _c[1], topRight = _c[2]; + } + // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B) + // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then + // we've got it flipped around and should swap topRight and bottomLeft. + if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) { + _d = [topRight, bottomLeft], bottomLeft = _d[0], topRight = _d[1]; + } + return { bottomLeft: bottomLeft, topLeft: topLeft, topRight: topRight }; +} +// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns +function computeDimension(topLeft, topRight, bottomLeft, matrix) { + var moduleSize = (sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1 + sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 + + sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 + + sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7) / 4; + if (moduleSize < 1) { + throw new Error("Invalid module size"); + } + var topDimension = Math.round(distance(topLeft, topRight) / moduleSize); + var sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize); + var dimension = Math.floor((topDimension + sideDimension) / 2) + 7; + switch (dimension % 4) { + case 0: + dimension++; + break; + case 2: + dimension--; + break; + } + return { dimension: dimension, moduleSize: moduleSize }; +} +// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point. +// Returns an array of elements, representing the pixel size of the black white run. +// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm +function countBlackWhiteRunTowardsPoint(origin, end, matrix, length) { + var switchPoints = [{ x: Math.floor(origin.x), y: Math.floor(origin.y) }]; + var steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x); + var fromX; + var fromY; + var toX; + var toY; + if (steep) { + fromX = Math.floor(origin.y); + fromY = Math.floor(origin.x); + toX = Math.floor(end.y); + toY = Math.floor(end.x); + } + else { + fromX = Math.floor(origin.x); + fromY = Math.floor(origin.y); + toX = Math.floor(end.x); + toY = Math.floor(end.y); + } + var dx = Math.abs(toX - fromX); + var dy = Math.abs(toY - fromY); + var error = Math.floor(-dx / 2); + var xStep = fromX < toX ? 1 : -1; + var yStep = fromY < toY ? 1 : -1; + var currentPixel = true; + // Loop up until x == toX, but not beyond + for (var x = fromX, y = fromY; x !== toX + xStep; x += xStep) { + // Does current pixel mean we have moved white to black or vice versa? + // Scanning black in state 0,2 and white in state 1, so if we find the wrong + // color, advance to next state or end if we are in state 2 already + var realX = steep ? y : x; + var realY = steep ? x : y; + if (matrix.get(realX, realY) !== currentPixel) { + currentPixel = !currentPixel; + switchPoints.push({ x: realX, y: realY }); + if (switchPoints.length === length + 1) { + break; + } + } + error += dy; + if (error > 0) { + if (y === toY) { + break; + } + y += yStep; + error -= dx; + } + } + var distances = []; + for (var i = 0; i < length; i++) { + if (switchPoints[i] && switchPoints[i + 1]) { + distances.push(distance(switchPoints[i], switchPoints[i + 1])); + } + else { + distances.push(0); + } + } + return distances; +} +// Takes an origin point and an end point and counts the sizes of the black white run in the origin point +// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes +// of the black white run. Takes a length which represents the number of switches from black to white to look for. +function countBlackWhiteRun(origin, end, matrix, length) { + var _a; + var rise = end.y - origin.y; + var run = end.x - origin.x; + var towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2)); + var awayFromEnd = countBlackWhiteRunTowardsPoint(origin, { x: origin.x - run, y: origin.y - rise }, matrix, Math.ceil(length / 2)); + var middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel + return (_a = awayFromEnd.concat(middleValue)).concat.apply(_a, towardsEnd); +} +// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the "error" - +// that is the amount the run diverges from the expected ratio +function scoreBlackWhiteRun(sequence, ratios) { + var averageSize = sum(sequence) / sum(ratios); + var error = 0; + ratios.forEach(function (ratio, i) { + error += Math.pow((sequence[i] - ratio * averageSize), 2); + }); + return { averageSize: averageSize, error: error }; +} +// Takes an X,Y point and an array of sizes and scores the point against those ratios. +// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios +// against that. +function scorePattern(point, ratios, matrix) { + try { + var horizontalRun = countBlackWhiteRun(point, { x: -1, y: point.y }, matrix, ratios.length); + var verticalRun = countBlackWhiteRun(point, { x: point.x, y: -1 }, matrix, ratios.length); + var topLeftPoint = { + x: Math.max(0, point.x - point.y) - 1, + y: Math.max(0, point.y - point.x) - 1, + }; + var topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length); + var bottomLeftPoint = { + x: Math.min(matrix.width, point.x + point.y) + 1, + y: Math.min(matrix.height, point.y + point.x) + 1, + }; + var bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length); + var horzError = scoreBlackWhiteRun(horizontalRun, ratios); + var vertError = scoreBlackWhiteRun(verticalRun, ratios); + var diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios); + var diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios); + var ratioError = Math.sqrt(horzError.error * horzError.error + + vertError.error * vertError.error + + diagDownError.error * diagDownError.error + + diagUpError.error * diagUpError.error); + var avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4; + var sizeError = (Math.pow((horzError.averageSize - avgSize), 2) + + Math.pow((vertError.averageSize - avgSize), 2) + + Math.pow((diagDownError.averageSize - avgSize), 2) + + Math.pow((diagUpError.averageSize - avgSize), 2)) / avgSize; + return ratioError + sizeError; + } + catch (_a) { + return Infinity; + } +} +function recenterLocation(matrix, p) { + var leftX = Math.round(p.x); + while (matrix.get(leftX, Math.round(p.y))) { + leftX--; + } + var rightX = Math.round(p.x); + while (matrix.get(rightX, Math.round(p.y))) { + rightX++; + } + var x = (leftX + rightX) / 2; + var topY = Math.round(p.y); + while (matrix.get(Math.round(x), topY)) { + topY--; + } + var bottomY = Math.round(p.y); + while (matrix.get(Math.round(x), bottomY)) { + bottomY++; + } + var y = (topY + bottomY) / 2; + return { x: x, y: y }; +} +function locate(matrix) { + var finderPatternQuads = []; + var activeFinderPatternQuads = []; + var alignmentPatternQuads = []; + var activeAlignmentPatternQuads = []; + var _loop_1 = function (y) { + var length_1 = 0; + var lastBit = false; + var scans = [0, 0, 0, 0, 0]; + var _loop_2 = function (x) { + var v = matrix.get(x, y); + if (v === lastBit) { + length_1++; + } + else { + scans = [scans[1], scans[2], scans[3], scans[4], length_1]; + length_1 = 1; + lastBit = v; + // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b + var averageFinderPatternBlocksize = sum(scans) / 7; + var validFinderPattern = Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize && + Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + !v; // And make sure the current pixel is white since finder patterns are bordered in white + // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w + var averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3; + var validAlignmentPattern = Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + v; // Is the current pixel black since alignment patterns are bordered in black + if (validFinderPattern) { + // Compute the start and end x values of the large center black square + var endX_1 = x - scans[3] - scans[4]; + var startX_1 = endX_1 - scans[2]; + var line = { startX: startX_1, endX: endX_1, y: y }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + var matchingQuads = activeFinderPatternQuads.filter(function (q) { + return (startX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) || + (endX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) || + (startX_1 <= q.bottom.startX && endX_1 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO)); + }); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } + else { + activeFinderPatternQuads.push({ top: line, bottom: line }); + } + } + if (validAlignmentPattern) { + // Compute the start and end x values of the center black square + var endX_2 = x - scans[4]; + var startX_2 = endX_2 - scans[3]; + var line = { startX: startX_2, y: y, endX: endX_2 }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + var matchingQuads = activeAlignmentPatternQuads.filter(function (q) { + return (startX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) || + (endX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) || + (startX_2 <= q.bottom.startX && endX_2 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO)); + }); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } + else { + activeAlignmentPatternQuads.push({ top: line, bottom: line }); + } + } + } + }; + for (var x = -1; x <= matrix.width; x++) { + _loop_2(x); + } + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y !== y && q.bottom.y - q.top.y >= 2; })); + activeFinderPatternQuads = activeFinderPatternQuads.filter(function (q) { return q.bottom.y === y; }); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y !== y; })); + activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y === y; }); + }; + for (var y = 0; y <= matrix.height; y++) { + _loop_1(y); + } + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y - q.top.y >= 2; })); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads); + var finderPatternGroups = finderPatternQuads + .filter(function (q) { return q.bottom.y - q.top.y >= 2; }) // All quads must be at least 2px tall since the center square is larger than a block + .map(function (q) { + var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + var y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.round(x), Math.round(y))) { + return; + } + var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, q.bottom.y - q.top.y + 1]; + var size = sum(lengths) / lengths.length; + var score = scorePattern({ x: Math.round(x), y: Math.round(y) }, [1, 1, 3, 1, 1], matrix); + return { score: score, x: x, y: y, size: size }; + }) + .filter(function (q) { return !!q; }) // Filter out any rejected quads from above + .sort(function (a, b) { return a.score - b.score; }) + // Now take the top finder pattern options and try to find 2 other options with a similar size. + .map(function (point, i, finderPatterns) { + if (i > MAX_FINDERPATTERNS_TO_SEARCH) { + return null; + } + var otherPoints = finderPatterns + .filter(function (p, ii) { return i !== ii; }) + .map(function (p) { return ({ x: p.x, y: p.y, score: p.score + (Math.pow((p.size - point.size), 2)) / point.size, size: p.size }); }) + .sort(function (a, b) { return a.score - b.score; }); + if (otherPoints.length < 2) { + return null; + } + var score = point.score + otherPoints[0].score + otherPoints[1].score; + return { points: [point].concat(otherPoints.slice(0, 2)), score: score }; + }) + .filter(function (q) { return !!q; }) // Filter out any rejected finder patterns from above + .sort(function (a, b) { return a.score - b.score; }); + if (finderPatternGroups.length === 0) { + return null; + } + var _a = reorderFinderPatterns(finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2]), topRight = _a.topRight, topLeft = _a.topLeft, bottomLeft = _a.bottomLeft; + var alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft); + var result = []; + if (alignment) { + result.push({ + alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y }, + bottomLeft: { x: bottomLeft.x, y: bottomLeft.y }, + dimension: alignment.dimension, + topLeft: { x: topLeft.x, y: topLeft.y }, + topRight: { x: topRight.x, y: topRight.y }, + }); + } + // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account + // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression + // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We + // compute and return the location data for the naively centered points as it is little additional work and allows for multiple + // attempts at decoding harder images. + var midTopRight = recenterLocation(matrix, topRight); + var midTopLeft = recenterLocation(matrix, topLeft); + var midBottomLeft = recenterLocation(matrix, bottomLeft); + var centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft); + if (centeredAlignment) { + result.push({ + alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y }, + bottomLeft: { x: midBottomLeft.x, y: midBottomLeft.y }, + topLeft: { x: midTopLeft.x, y: midTopLeft.y }, + topRight: { x: midTopRight.x, y: midTopRight.y }, + dimension: centeredAlignment.dimension, + }); + } + if (result.length === 0) { + return null; + } + return result; +} +exports.locate = locate; +function findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft) { + var _a; + // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code. + // We'll use these to help find the alignment pattern but also later when we do the extraction. + var dimension; + var moduleSize; + try { + (_a = computeDimension(topLeft, topRight, bottomLeft, matrix), dimension = _a.dimension, moduleSize = _a.moduleSize); + } + catch (e) { + return null; + } + // Now find the alignment pattern + var bottomRightFinderPattern = { + x: topRight.x - topLeft.x + bottomLeft.x, + y: topRight.y - topLeft.y + bottomLeft.y, + }; + var modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize); + var correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns); + var expectedAlignmentPattern = { + x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x), + y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y), + }; + var alignmentPatterns = alignmentPatternQuads + .map(function (q) { + var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + var y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.floor(x), Math.floor(y))) { + return; + } + var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, (q.bottom.y - q.top.y + 1)]; + var size = sum(lengths) / lengths.length; + var sizeScore = scorePattern({ x: Math.floor(x), y: Math.floor(y) }, [1, 1, 1], matrix); + var score = sizeScore + distance({ x: x, y: y }, expectedAlignmentPattern); + return { x: x, y: y, score: score }; + }) + .filter(function (v) { return !!v; }) + .sort(function (a, b) { return a.score - b.score; }); + // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern + // so we can only use our best guess. + var alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern; + return { alignmentPattern: alignmentPattern, dimension: dimension }; +} + + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/uni_modules/mumu-qrcode/components/mumu-qrcode/mumu-qrcode.vue b/uni_modules/mumu-qrcode/components/mumu-qrcode/mumu-qrcode.vue new file mode 100644 index 0000000..c8765b4 --- /dev/null +++ b/uni_modules/mumu-qrcode/components/mumu-qrcode/mumu-qrcode.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/uni_modules/mumu-qrcode/package.json b/uni_modules/mumu-qrcode/package.json new file mode 100644 index 0000000..788910c --- /dev/null +++ b/uni_modules/mumu-qrcode/package.json @@ -0,0 +1,81 @@ +{ + "id": "mumu-qrcode", + "displayName": "本地图片二维码识别解析(可选择本地文件或者拍照)", + "version": "1.0.2", + "description": "读取本地文件进行解析读取二维码内容", + "keywords": [ + "二维码", + "文件识别" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无 " + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "u" + }, + "App": { + "app-vue": "u", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "u", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/mumu-qrcode/readme.md b/uni_modules/mumu-qrcode/readme.md new file mode 100644 index 0000000..4c1f05b --- /dev/null +++ b/uni_modules/mumu-qrcode/readme.md @@ -0,0 +1,54 @@ +# 插件介绍 +实现功能:读取本地的图片,进行二维码解析。 +## 插件使用 +插件已支持 uni_modules 支持组件easycom,以下代码演示的是普通使用 + +``` html +<--! HTML --> + + +``` + +``` javascript +// js + import mumuQrcode from '@/uni_modules/mumu-qrcode/components/mumu-qrcode/mumu-qrcode.vue' + export default { + components: { mumuQrcode }, + data() { + return { + + } + }, + methods: { + qrcodeCallback(data) { + uni.showModal({ + content: data + }) + }, + get() { + this.$refs.getQrcode.getQrcode() + } + }, + } +``` + +## 相关API +### 事件(Events) + +| 名称 | 说明 | 参数 | +| -------------- | -------------------- | ---------- | +| qrcodeCallback | 当解析到二维码时调用 | 二维码数据 | + +### 方法(Methods) +此方法如要通过ref手动调用 + +| 名称 | 说明 | 参数 | +| -------------- | -------------------- | ---------- | +| getQrcode| 解析二维码 | - | + +## 演示地址 +连接地址:[https://student.mumudev.top/h5qrcode/](https://student.mumudev.top/h5qrcode/) +![enter description here](https://student.mumudev.top/h5qrcode/qrcode.png) + +## 支持作者 +![支持作者](https://student.mumudev.top/wxMP.jpg) \ No newline at end of file diff --git a/uni_modules/piaoyi-cityPicker/changelog.md b/uni_modules/piaoyi-cityPicker/changelog.md new file mode 100644 index 0000000..d0adffc --- /dev/null +++ b/uni_modules/piaoyi-cityPicker/changelog.md @@ -0,0 +1,14 @@ +## 1.1.3(2024-02-29) +更新使用文档 +## 1.1.2(2024-01-16) +解决Vue3项目导入导出报错问题 +## 1.1.1(2023-12-06) +defaultValue可以传入defaultValue:['河北省','唐山市','丰南区']数组类型以及defaultValue: '420103'地区编码字符串类型 +## 1.1.0(2023-12-05) +即默认值传入地区编码,也支持传入中文省市区数组 +## 1.0.9(2023-12-04) +优化 +## 1.0.8(2023-10-24) +修复东菀市和中山市下各镇的行政编码错误问题 +## 1.0.4(2023-09-15) +改为uni_modules规范 \ No newline at end of file diff --git a/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/cityData.js b/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/cityData.js new file mode 100644 index 0000000..6d06ea8 --- /dev/null +++ b/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/cityData.js @@ -0,0 +1,10709 @@ +export const addressList = [{ + "code": "11", + "name": "北京市", + "children": [{ + "code": "1101", + "name": "市辖区", + "children": [{ + "code": "110101", + "name": "东城区" + }, { + "code": "110102", + "name": "西城区" + }, { + "code": "110105", + "name": "朝阳区" + }, { + "code": "110106", + "name": "丰台区" + }, { + "code": "110107", + "name": "石景山区" + }, { + "code": "110108", + "name": "海淀区" + }, { + "code": "110109", + "name": "门头沟区" + }, { + "code": "110111", + "name": "房山区" + }, { + "code": "110112", + "name": "通州区" + }, { + "code": "110113", + "name": "顺义区" + }, { + "code": "110114", + "name": "昌平区" + }, { + "code": "110115", + "name": "大兴区" + }, { + "code": "110116", + "name": "怀柔区" + }, { + "code": "110117", + "name": "平谷区" + }, { + "code": "110118", + "name": "密云区" + }, { + "code": "110119", + "name": "延庆区" + }] + }] +}, { + "code": "12", + "name": "天津市", + "children": [{ + "code": "1201", + "name": "市辖区", + "children": [{ + "code": "120101", + "name": "和平区" + }, { + "code": "120102", + "name": "河东区" + }, { + "code": "120103", + "name": "河西区" + }, { + "code": "120104", + "name": "南开区" + }, { + "code": "120105", + "name": "河北区" + }, { + "code": "120106", + "name": "红桥区" + }, { + "code": "120110", + "name": "东丽区" + }, { + "code": "120111", + "name": "西青区" + }, { + "code": "120112", + "name": "津南区" + }, { + "code": "120113", + "name": "北辰区" + }, { + "code": "120114", + "name": "武清区" + }, { + "code": "120115", + "name": "宝坻区" + }, { + "code": "120116", + "name": "滨海新区" + }, { + "code": "120117", + "name": "宁河区" + }, { + "code": "120118", + "name": "静海区" + }, { + "code": "120119", + "name": "蓟州区" + }] + }] +}, { + "code": "13", + "name": "河北省", + "children": [{ + "code": "1301", + "name": "石家庄市", + "children": [{ + "code": "130102", + "name": "长安区" + }, { + "code": "130104", + "name": "桥西区" + }, { + "code": "130105", + "name": "新华区" + }, { + "code": "130107", + "name": "井陉矿区" + }, { + "code": "130108", + "name": "裕华区" + }, { + "code": "130109", + "name": "藁城区" + }, { + "code": "130110", + "name": "鹿泉区" + }, { + "code": "130111", + "name": "栾城区" + }, { + "code": "130121", + "name": "井陉县" + }, { + "code": "130123", + "name": "正定县" + }, { + "code": "130125", + "name": "行唐县" + }, { + "code": "130126", + "name": "灵寿县" + }, { + "code": "130127", + "name": "高邑县" + }, { + "code": "130128", + "name": "深泽县" + }, { + "code": "130129", + "name": "赞皇县" + }, { + "code": "130130", + "name": "无极县" + }, { + "code": "130131", + "name": "平山县" + }, { + "code": "130132", + "name": "元氏县" + }, { + "code": "130133", + "name": "赵县" + }, { + "code": "130171", + "name": "石家庄高新技术产业开发区" + }, { + "code": "130172", + "name": "石家庄循环化工园区" + }, { + "code": "130181", + "name": "辛集市" + }, { + "code": "130183", + "name": "晋州市" + }, { + "code": "130184", + "name": "新乐市" + }] + }, { + "code": "1302", + "name": "唐山市", + "children": [{ + "code": "130202", + "name": "路南区" + }, { + "code": "130203", + "name": "路北区" + }, { + "code": "130204", + "name": "古冶区" + }, { + "code": "130205", + "name": "开平区" + }, { + "code": "130207", + "name": "丰南区" + }, { + "code": "130208", + "name": "丰润区" + }, { + "code": "130209", + "name": "曹妃甸区" + }, { + "code": "130224", + "name": "滦南县" + }, { + "code": "130225", + "name": "乐亭县" + }, { + "code": "130227", + "name": "迁西县" + }, { + "code": "130229", + "name": "玉田县" + }, { + "code": "130271", + "name": "河北唐山芦台经济开发区" + }, { + "code": "130272", + "name": "唐山市汉沽管理区" + }, { + "code": "130273", + "name": "唐山高新技术产业开发区" + }, { + "code": "130274", + "name": "河北唐山海港经济开发区" + }, { + "code": "130281", + "name": "遵化市" + }, { + "code": "130283", + "name": "迁安市" + }, { + "code": "130284", + "name": "滦州市" + }] + }, { + "code": "1303", + "name": "秦皇岛市", + "children": [{ + "code": "130302", + "name": "海港区" + }, { + "code": "130303", + "name": "山海关区" + }, { + "code": "130304", + "name": "北戴河区" + }, { + "code": "130306", + "name": "抚宁区" + }, { + "code": "130321", + "name": "青龙满族自治县" + }, { + "code": "130322", + "name": "昌黎县" + }, { + "code": "130324", + "name": "卢龙县" + }, { + "code": "130371", + "name": "秦皇岛市经济技术开发区" + }, { + "code": "130372", + "name": "北戴河新区" + }] + }, { + "code": "1304", + "name": "邯郸市", + "children": [{ + "code": "130402", + "name": "邯山区" + }, { + "code": "130403", + "name": "丛台区" + }, { + "code": "130404", + "name": "复兴区" + }, { + "code": "130406", + "name": "峰峰矿区" + }, { + "code": "130407", + "name": "肥乡区" + }, { + "code": "130408", + "name": "永年区" + }, { + "code": "130423", + "name": "临漳县" + }, { + "code": "130424", + "name": "成安县" + }, { + "code": "130425", + "name": "大名县" + }, { + "code": "130426", + "name": "涉县" + }, { + "code": "130427", + "name": "磁县" + }, { + "code": "130430", + "name": "邱县" + }, { + "code": "130431", + "name": "鸡泽县" + }, { + "code": "130432", + "name": "广平县" + }, { + "code": "130433", + "name": "馆陶县" + }, { + "code": "130434", + "name": "魏县" + }, { + "code": "130435", + "name": "曲周县" + }, { + "code": "130471", + "name": "邯郸经济技术开发区" + }, { + "code": "130473", + "name": "邯郸冀南新区" + }, { + "code": "130481", + "name": "武安市" + }] + }, { + "code": "1305", + "name": "邢台市", + "children": [{ + "code": "130502", + "name": "襄都区" + }, { + "code": "130503", + "name": "信都区" + }, { + "code": "130505", + "name": "任泽区" + }, { + "code": "130506", + "name": "南和区" + }, { + "code": "130522", + "name": "临城县" + }, { + "code": "130523", + "name": "内丘县" + }, { + "code": "130524", + "name": "柏乡县" + }, { + "code": "130525", + "name": "隆尧县" + }, { + "code": "130528", + "name": "宁晋县" + }, { + "code": "130529", + "name": "巨鹿县" + }, { + "code": "130530", + "name": "新河县" + }, { + "code": "130531", + "name": "广宗县" + }, { + "code": "130532", + "name": "平乡县" + }, { + "code": "130533", + "name": "威县" + }, { + "code": "130534", + "name": "清河县" + }, { + "code": "130535", + "name": "临西县" + }, { + "code": "130571", + "name": "河北邢台经济开发区" + }, { + "code": "130581", + "name": "南宫市" + }, { + "code": "130582", + "name": "沙河市" + }] + }, { + "code": "1306", + "name": "保定市", + "children": [{ + "code": "130602", + "name": "竞秀区" + }, { + "code": "130606", + "name": "莲池区" + }, { + "code": "130607", + "name": "满城区" + }, { + "code": "130608", + "name": "清苑区" + }, { + "code": "130609", + "name": "徐水区" + }, { + "code": "130623", + "name": "涞水县" + }, { + "code": "130624", + "name": "阜平县" + }, { + "code": "130626", + "name": "定兴县" + }, { + "code": "130627", + "name": "唐县" + }, { + "code": "130628", + "name": "高阳县" + }, { + "code": "130629", + "name": "容城县" + }, { + "code": "130630", + "name": "涞源县" + }, { + "code": "130631", + "name": "望都县" + }, { + "code": "130632", + "name": "安新县" + }, { + "code": "130633", + "name": "易县" + }, { + "code": "130634", + "name": "曲阳县" + }, { + "code": "130635", + "name": "蠡县" + }, { + "code": "130636", + "name": "顺平县" + }, { + "code": "130637", + "name": "博野县" + }, { + "code": "130638", + "name": "雄县" + }, { + "code": "130671", + "name": "保定高新技术产业开发区" + }, { + "code": "130672", + "name": "保定白沟新城" + }, { + "code": "130681", + "name": "涿州市" + }, { + "code": "130682", + "name": "定州市" + }, { + "code": "130683", + "name": "安国市" + }, { + "code": "130684", + "name": "高碑店市" + }] + }, { + "code": "1307", + "name": "张家口市", + "children": [{ + "code": "130702", + "name": "桥东区" + }, { + "code": "130703", + "name": "桥西区" + }, { + "code": "130705", + "name": "宣化区" + }, { + "code": "130706", + "name": "下花园区" + }, { + "code": "130708", + "name": "万全区" + }, { + "code": "130709", + "name": "崇礼区" + }, { + "code": "130722", + "name": "张北县" + }, { + "code": "130723", + "name": "康保县" + }, { + "code": "130724", + "name": "沽源县" + }, { + "code": "130725", + "name": "尚义县" + }, { + "code": "130726", + "name": "蔚县" + }, { + "code": "130727", + "name": "阳原县" + }, { + "code": "130728", + "name": "怀安县" + }, { + "code": "130730", + "name": "怀来县" + }, { + "code": "130731", + "name": "涿鹿县" + }, { + "code": "130732", + "name": "赤城县" + }, { + "code": "130771", + "name": "张家口经济开发区" + }, { + "code": "130772", + "name": "张家口市察北管理区" + }, { + "code": "130773", + "name": "张家口市塞北管理区" + }] + }, { + "code": "1308", + "name": "承德市", + "children": [{ + "code": "130802", + "name": "双桥区" + }, { + "code": "130803", + "name": "双滦区" + }, { + "code": "130804", + "name": "鹰手营子矿区" + }, { + "code": "130821", + "name": "承德县" + }, { + "code": "130822", + "name": "兴隆县" + }, { + "code": "130824", + "name": "滦平县" + }, { + "code": "130825", + "name": "隆化县" + }, { + "code": "130826", + "name": "丰宁满族自治县" + }, { + "code": "130827", + "name": "宽城满族自治县" + }, { + "code": "130828", + "name": "围场满族蒙古族自治县" + }, { + "code": "130871", + "name": "承德高新技术产业开发区" + }, { + "code": "130881", + "name": "平泉市" + }] + }, { + "code": "1309", + "name": "沧州市", + "children": [{ + "code": "130902", + "name": "新华区" + }, { + "code": "130903", + "name": "运河区" + }, { + "code": "130921", + "name": "沧县" + }, { + "code": "130922", + "name": "青县" + }, { + "code": "130923", + "name": "东光县" + }, { + "code": "130924", + "name": "海兴县" + }, { + "code": "130925", + "name": "盐山县" + }, { + "code": "130926", + "name": "肃宁县" + }, { + "code": "130927", + "name": "南皮县" + }, { + "code": "130928", + "name": "吴桥县" + }, { + "code": "130929", + "name": "献县" + }, { + "code": "130930", + "name": "孟村回族自治县" + }, { + "code": "130971", + "name": "河北沧州经济开发区" + }, { + "code": "130972", + "name": "沧州高新技术产业开发区" + }, { + "code": "130973", + "name": "沧州渤海新区" + }, { + "code": "130981", + "name": "泊头市" + }, { + "code": "130982", + "name": "任丘市" + }, { + "code": "130983", + "name": "黄骅市" + }, { + "code": "130984", + "name": "河间市" + }] + }, { + "code": "1310", + "name": "廊坊市", + "children": [{ + "code": "131002", + "name": "安次区" + }, { + "code": "131003", + "name": "广阳区" + }, { + "code": "131022", + "name": "固安县" + }, { + "code": "131023", + "name": "永清县" + }, { + "code": "131024", + "name": "香河县" + }, { + "code": "131025", + "name": "大城县" + }, { + "code": "131026", + "name": "文安县" + }, { + "code": "131028", + "name": "大厂回族自治县" + }, { + "code": "131071", + "name": "廊坊经济技术开发区" + }, { + "code": "131081", + "name": "霸州市" + }, { + "code": "131082", + "name": "三河市" + }] + }, { + "code": "1311", + "name": "衡水市", + "children": [{ + "code": "131102", + "name": "桃城区" + }, { + "code": "131103", + "name": "冀州区" + }, { + "code": "131121", + "name": "枣强县" + }, { + "code": "131122", + "name": "武邑县" + }, { + "code": "131123", + "name": "武强县" + }, { + "code": "131124", + "name": "饶阳县" + }, { + "code": "131125", + "name": "安平县" + }, { + "code": "131126", + "name": "故城县" + }, { + "code": "131127", + "name": "景县" + }, { + "code": "131128", + "name": "阜城县" + }, { + "code": "131171", + "name": "河北衡水高新技术产业开发区" + }, { + "code": "131172", + "name": "衡水滨湖新区" + }, { + "code": "131182", + "name": "深州市" + }] + }] +}, { + "code": "14", + "name": "山西省", + "children": [{ + "code": "1401", + "name": "太原市", + "children": [{ + "code": "140105", + "name": "小店区" + }, { + "code": "140106", + "name": "迎泽区" + }, { + "code": "140107", + "name": "杏花岭区" + }, { + "code": "140108", + "name": "尖草坪区" + }, { + "code": "140109", + "name": "万柏林区" + }, { + "code": "140110", + "name": "晋源区" + }, { + "code": "140121", + "name": "清徐县" + }, { + "code": "140122", + "name": "阳曲县" + }, { + "code": "140123", + "name": "娄烦县" + }, { + "code": "140171", + "name": "山西转型综合改革示范区" + }, { + "code": "140181", + "name": "古交市" + }] + }, { + "code": "1402", + "name": "大同市", + "children": [{ + "code": "140212", + "name": "新荣区" + }, { + "code": "140213", + "name": "平城区" + }, { + "code": "140214", + "name": "云冈区" + }, { + "code": "140215", + "name": "云州区" + }, { + "code": "140221", + "name": "阳高县" + }, { + "code": "140222", + "name": "天镇县" + }, { + "code": "140223", + "name": "广灵县" + }, { + "code": "140224", + "name": "灵丘县" + }, { + "code": "140225", + "name": "浑源县" + }, { + "code": "140226", + "name": "左云县" + }, { + "code": "140271", + "name": "山西大同经济开发区" + }] + }, { + "code": "1403", + "name": "阳泉市", + "children": [{ + "code": "140302", + "name": "城区" + }, { + "code": "140303", + "name": "矿区" + }, { + "code": "140311", + "name": "郊区" + }, { + "code": "140321", + "name": "平定县" + }, { + "code": "140322", + "name": "盂县" + }] + }, { + "code": "1404", + "name": "长治市", + "children": [{ + "code": "140403", + "name": "潞州区" + }, { + "code": "140404", + "name": "上党区" + }, { + "code": "140405", + "name": "屯留区" + }, { + "code": "140406", + "name": "潞城区" + }, { + "code": "140423", + "name": "襄垣县" + }, { + "code": "140425", + "name": "平顺县" + }, { + "code": "140426", + "name": "黎城县" + }, { + "code": "140427", + "name": "壶关县" + }, { + "code": "140428", + "name": "长子县" + }, { + "code": "140429", + "name": "武乡县" + }, { + "code": "140430", + "name": "沁县" + }, { + "code": "140431", + "name": "沁源县" + }, { + "code": "140471", + "name": "山西长治高新技术产业园区" + }] + }, { + "code": "1405", + "name": "晋城市", + "children": [{ + "code": "140502", + "name": "城区" + }, { + "code": "140521", + "name": "沁水县" + }, { + "code": "140522", + "name": "阳城县" + }, { + "code": "140524", + "name": "陵川县" + }, { + "code": "140525", + "name": "泽州县" + }, { + "code": "140581", + "name": "高平市" + }] + }, { + "code": "1406", + "name": "朔州市", + "children": [{ + "code": "140602", + "name": "朔城区" + }, { + "code": "140603", + "name": "平鲁区" + }, { + "code": "140621", + "name": "山阴县" + }, { + "code": "140622", + "name": "应县" + }, { + "code": "140623", + "name": "右玉县" + }, { + "code": "140671", + "name": "山西朔州经济开发区" + }, { + "code": "140681", + "name": "怀仁市" + }] + }, { + "code": "1407", + "name": "晋中市", + "children": [{ + "code": "140702", + "name": "榆次区" + }, { + "code": "140703", + "name": "太谷区" + }, { + "code": "140721", + "name": "榆社县" + }, { + "code": "140722", + "name": "左权县" + }, { + "code": "140723", + "name": "和顺县" + }, { + "code": "140724", + "name": "昔阳县" + }, { + "code": "140725", + "name": "寿阳县" + }, { + "code": "140727", + "name": "祁县" + }, { + "code": "140728", + "name": "平遥县" + }, { + "code": "140729", + "name": "灵石县" + }, { + "code": "140781", + "name": "介休市" + }] + }, { + "code": "1408", + "name": "运城市", + "children": [{ + "code": "140802", + "name": "盐湖区" + }, { + "code": "140821", + "name": "临猗县" + }, { + "code": "140822", + "name": "万荣县" + }, { + "code": "140823", + "name": "闻喜县" + }, { + "code": "140824", + "name": "稷山县" + }, { + "code": "140825", + "name": "新绛县" + }, { + "code": "140826", + "name": "绛县" + }, { + "code": "140827", + "name": "垣曲县" + }, { + "code": "140828", + "name": "夏县" + }, { + "code": "140829", + "name": "平陆县" + }, { + "code": "140830", + "name": "芮城县" + }, { + "code": "140881", + "name": "永济市" + }, { + "code": "140882", + "name": "河津市" + }] + }, { + "code": "1409", + "name": "忻州市", + "children": [{ + "code": "140902", + "name": "忻府区" + }, { + "code": "140921", + "name": "定襄县" + }, { + "code": "140922", + "name": "五台县" + }, { + "code": "140923", + "name": "代县" + }, { + "code": "140924", + "name": "繁峙县" + }, { + "code": "140925", + "name": "宁武县" + }, { + "code": "140926", + "name": "静乐县" + }, { + "code": "140927", + "name": "神池县" + }, { + "code": "140928", + "name": "五寨县" + }, { + "code": "140929", + "name": "岢岚县" + }, { + "code": "140930", + "name": "河曲县" + }, { + "code": "140931", + "name": "保德县" + }, { + "code": "140932", + "name": "偏关县" + }, { + "code": "140971", + "name": "五台山风景名胜区" + }, { + "code": "140981", + "name": "原平市" + }] + }, { + "code": "1410", + "name": "临汾市", + "children": [{ + "code": "141002", + "name": "尧都区" + }, { + "code": "141021", + "name": "曲沃县" + }, { + "code": "141022", + "name": "翼城县" + }, { + "code": "141023", + "name": "襄汾县" + }, { + "code": "141024", + "name": "洪洞县" + }, { + "code": "141025", + "name": "古县" + }, { + "code": "141026", + "name": "安泽县" + }, { + "code": "141027", + "name": "浮山县" + }, { + "code": "141028", + "name": "吉县" + }, { + "code": "141029", + "name": "乡宁县" + }, { + "code": "141030", + "name": "大宁县" + }, { + "code": "141031", + "name": "隰县" + }, { + "code": "141032", + "name": "永和县" + }, { + "code": "141033", + "name": "蒲县" + }, { + "code": "141034", + "name": "汾西县" + }, { + "code": "141081", + "name": "侯马市" + }, { + "code": "141082", + "name": "霍州市" + }] + }, { + "code": "1411", + "name": "吕梁市", + "children": [{ + "code": "141102", + "name": "离石区" + }, { + "code": "141121", + "name": "文水县" + }, { + "code": "141122", + "name": "交城县" + }, { + "code": "141123", + "name": "兴县" + }, { + "code": "141124", + "name": "临县" + }, { + "code": "141125", + "name": "柳林县" + }, { + "code": "141126", + "name": "石楼县" + }, { + "code": "141127", + "name": "岚县" + }, { + "code": "141128", + "name": "方山县" + }, { + "code": "141129", + "name": "中阳县" + }, { + "code": "141130", + "name": "交口县" + }, { + "code": "141181", + "name": "孝义市" + }, { + "code": "141182", + "name": "汾阳市" + }] + }] +}, { + "code": "15", + "name": "内蒙古自治区", + "children": [{ + "code": "1501", + "name": "呼和浩特市", + "children": [{ + "code": "150102", + "name": "新城区" + }, { + "code": "150103", + "name": "回民区" + }, { + "code": "150104", + "name": "玉泉区" + }, { + "code": "150105", + "name": "赛罕区" + }, { + "code": "150121", + "name": "土默特左旗" + }, { + "code": "150122", + "name": "托克托县" + }, { + "code": "150123", + "name": "和林格尔县" + }, { + "code": "150124", + "name": "清水河县" + }, { + "code": "150125", + "name": "武川县" + }, { + "code": "150172", + "name": "呼和浩特经济技术开发区" + }] + }, { + "code": "1502", + "name": "包头市", + "children": [{ + "code": "150202", + "name": "东河区" + }, { + "code": "150203", + "name": "昆都仑区" + }, { + "code": "150204", + "name": "青山区" + }, { + "code": "150205", + "name": "石拐区" + }, { + "code": "150206", + "name": "白云鄂博矿区" + }, { + "code": "150207", + "name": "九原区" + }, { + "code": "150221", + "name": "土默特右旗" + }, { + "code": "150222", + "name": "固阳县" + }, { + "code": "150223", + "name": "达尔罕茂明安联合旗" + }, { + "code": "150271", + "name": "包头稀土高新技术产业开发区" + }] + }, { + "code": "1503", + "name": "乌海市", + "children": [{ + "code": "150302", + "name": "海勃湾区" + }, { + "code": "150303", + "name": "海南区" + }, { + "code": "150304", + "name": "乌达区" + }] + }, { + "code": "1504", + "name": "赤峰市", + "children": [{ + "code": "150402", + "name": "红山区" + }, { + "code": "150403", + "name": "元宝山区" + }, { + "code": "150404", + "name": "松山区" + }, { + "code": "150421", + "name": "阿鲁科尔沁旗" + }, { + "code": "150422", + "name": "巴林左旗" + }, { + "code": "150423", + "name": "巴林右旗" + }, { + "code": "150424", + "name": "林西县" + }, { + "code": "150425", + "name": "克什克腾旗" + }, { + "code": "150426", + "name": "翁牛特旗" + }, { + "code": "150428", + "name": "喀喇沁旗" + }, { + "code": "150429", + "name": "宁城县" + }, { + "code": "150430", + "name": "敖汉旗" + }] + }, { + "code": "1505", + "name": "通辽市", + "children": [{ + "code": "150502", + "name": "科尔沁区" + }, { + "code": "150521", + "name": "科尔沁左翼中旗" + }, { + "code": "150522", + "name": "科尔沁左翼后旗" + }, { + "code": "150523", + "name": "开鲁县" + }, { + "code": "150524", + "name": "库伦旗" + }, { + "code": "150525", + "name": "奈曼旗" + }, { + "code": "150526", + "name": "扎鲁特旗" + }, { + "code": "150571", + "name": "通辽经济技术开发区" + }, { + "code": "150581", + "name": "霍林郭勒市" + }] + }, { + "code": "1506", + "name": "鄂尔多斯市", + "children": [{ + "code": "150602", + "name": "东胜区" + }, { + "code": "150603", + "name": "康巴什区" + }, { + "code": "150621", + "name": "达拉特旗" + }, { + "code": "150622", + "name": "准格尔旗" + }, { + "code": "150623", + "name": "鄂托克前旗" + }, { + "code": "150624", + "name": "鄂托克旗" + }, { + "code": "150625", + "name": "杭锦旗" + }, { + "code": "150626", + "name": "乌审旗" + }, { + "code": "150627", + "name": "伊金霍洛旗" + }] + }, { + "code": "1507", + "name": "呼伦贝尔市", + "children": [{ + "code": "150702", + "name": "海拉尔区" + }, { + "code": "150703", + "name": "扎赉诺尔区" + }, { + "code": "150721", + "name": "阿荣旗" + }, { + "code": "150722", + "name": "莫力达瓦达斡尔族自治旗" + }, { + "code": "150723", + "name": "鄂伦春自治旗" + }, { + "code": "150724", + "name": "鄂温克族自治旗" + }, { + "code": "150725", + "name": "陈巴尔虎旗" + }, { + "code": "150726", + "name": "新巴尔虎左旗" + }, { + "code": "150727", + "name": "新巴尔虎右旗" + }, { + "code": "150781", + "name": "满洲里市" + }, { + "code": "150782", + "name": "牙克石市" + }, { + "code": "150783", + "name": "扎兰屯市" + }, { + "code": "150784", + "name": "额尔古纳市" + }, { + "code": "150785", + "name": "根河市" + }] + }, { + "code": "1508", + "name": "巴彦淖尔市", + "children": [{ + "code": "150802", + "name": "临河区" + }, { + "code": "150821", + "name": "五原县" + }, { + "code": "150822", + "name": "磴口县" + }, { + "code": "150823", + "name": "乌拉特前旗" + }, { + "code": "150824", + "name": "乌拉特中旗" + }, { + "code": "150825", + "name": "乌拉特后旗" + }, { + "code": "150826", + "name": "杭锦后旗" + }] + }, { + "code": "1509", + "name": "乌兰察布市", + "children": [{ + "code": "150902", + "name": "集宁区" + }, { + "code": "150921", + "name": "卓资县" + }, { + "code": "150922", + "name": "化德县" + }, { + "code": "150923", + "name": "商都县" + }, { + "code": "150924", + "name": "兴和县" + }, { + "code": "150925", + "name": "凉城县" + }, { + "code": "150926", + "name": "察哈尔右翼前旗" + }, { + "code": "150927", + "name": "察哈尔右翼中旗" + }, { + "code": "150928", + "name": "察哈尔右翼后旗" + }, { + "code": "150929", + "name": "四子王旗" + }, { + "code": "150981", + "name": "丰镇市" + }] + }, { + "code": "1522", + "name": "兴安盟", + "children": [{ + "code": "152201", + "name": "乌兰浩特市" + }, { + "code": "152202", + "name": "阿尔山市" + }, { + "code": "152221", + "name": "科尔沁右翼前旗" + }, { + "code": "152222", + "name": "科尔沁右翼中旗" + }, { + "code": "152223", + "name": "扎赉特旗" + }, { + "code": "152224", + "name": "突泉县" + }] + }, { + "code": "1525", + "name": "锡林郭勒盟", + "children": [{ + "code": "152501", + "name": "二连浩特市" + }, { + "code": "152502", + "name": "锡林浩特市" + }, { + "code": "152522", + "name": "阿巴嘎旗" + }, { + "code": "152523", + "name": "苏尼特左旗" + }, { + "code": "152524", + "name": "苏尼特右旗" + }, { + "code": "152525", + "name": "东乌珠穆沁旗" + }, { + "code": "152526", + "name": "西乌珠穆沁旗" + }, { + "code": "152527", + "name": "太仆寺旗" + }, { + "code": "152528", + "name": "镶黄旗" + }, { + "code": "152529", + "name": "正镶白旗" + }, { + "code": "152530", + "name": "正蓝旗" + }, { + "code": "152531", + "name": "多伦县" + }, { + "code": "152571", + "name": "乌拉盖管委会" + }] + }, { + "code": "1529", + "name": "阿拉善盟", + "children": [{ + "code": "152921", + "name": "阿拉善左旗" + }, { + "code": "152922", + "name": "阿拉善右旗" + }, { + "code": "152923", + "name": "额济纳旗" + }, { + "code": "152971", + "name": "内蒙古阿拉善经济开发区" + }] + }] +}, { + "code": "21", + "name": "辽宁省", + "children": [{ + "code": "2101", + "name": "沈阳市", + "children": [{ + "code": "210102", + "name": "和平区" + }, { + "code": "210103", + "name": "沈河区" + }, { + "code": "210104", + "name": "大东区" + }, { + "code": "210105", + "name": "皇姑区" + }, { + "code": "210106", + "name": "铁西区" + }, { + "code": "210111", + "name": "苏家屯区" + }, { + "code": "210112", + "name": "浑南区" + }, { + "code": "210113", + "name": "沈北新区" + }, { + "code": "210114", + "name": "于洪区" + }, { + "code": "210115", + "name": "辽中区" + }, { + "code": "210123", + "name": "康平县" + }, { + "code": "210124", + "name": "法库县" + }, { + "code": "210181", + "name": "新民市" + }] + }, { + "code": "2102", + "name": "大连市", + "children": [{ + "code": "210202", + "name": "中山区" + }, { + "code": "210203", + "name": "西岗区" + }, { + "code": "210204", + "name": "沙河口区" + }, { + "code": "210211", + "name": "甘井子区" + }, { + "code": "210212", + "name": "旅顺口区" + }, { + "code": "210213", + "name": "金州区" + }, { + "code": "210214", + "name": "普兰店区" + }, { + "code": "210224", + "name": "长海县" + }, { + "code": "210281", + "name": "瓦房店市" + }, { + "code": "210283", + "name": "庄河市" + }] + }, { + "code": "2103", + "name": "鞍山市", + "children": [{ + "code": "210302", + "name": "铁东区" + }, { + "code": "210303", + "name": "铁西区" + }, { + "code": "210304", + "name": "立山区" + }, { + "code": "210311", + "name": "千山区" + }, { + "code": "210321", + "name": "台安县" + }, { + "code": "210323", + "name": "岫岩满族自治县" + }, { + "code": "210381", + "name": "海城市" + }] + }, { + "code": "2104", + "name": "抚顺市", + "children": [{ + "code": "210402", + "name": "新抚区" + }, { + "code": "210403", + "name": "东洲区" + }, { + "code": "210404", + "name": "望花区" + }, { + "code": "210411", + "name": "顺城区" + }, { + "code": "210421", + "name": "抚顺县" + }, { + "code": "210422", + "name": "新宾满族自治县" + }, { + "code": "210423", + "name": "清原满族自治县" + }] + }, { + "code": "2105", + "name": "本溪市", + "children": [{ + "code": "210502", + "name": "平山区" + }, { + "code": "210503", + "name": "溪湖区" + }, { + "code": "210504", + "name": "明山区" + }, { + "code": "210505", + "name": "南芬区" + }, { + "code": "210521", + "name": "本溪满族自治县" + }, { + "code": "210522", + "name": "桓仁满族自治县" + }] + }, { + "code": "2106", + "name": "丹东市", + "children": [{ + "code": "210602", + "name": "元宝区" + }, { + "code": "210603", + "name": "振兴区" + }, { + "code": "210604", + "name": "振安区" + }, { + "code": "210624", + "name": "宽甸满族自治县" + }, { + "code": "210681", + "name": "东港市" + }, { + "code": "210682", + "name": "凤城市" + }] + }, { + "code": "2107", + "name": "锦州市", + "children": [{ + "code": "210702", + "name": "古塔区" + }, { + "code": "210703", + "name": "凌河区" + }, { + "code": "210711", + "name": "太和区" + }, { + "code": "210726", + "name": "黑山县" + }, { + "code": "210727", + "name": "义县" + }, { + "code": "210781", + "name": "凌海市" + }, { + "code": "210782", + "name": "北镇市" + }] + }, { + "code": "2108", + "name": "营口市", + "children": [{ + "code": "210802", + "name": "站前区" + }, { + "code": "210803", + "name": "西市区" + }, { + "code": "210804", + "name": "鲅鱼圈区" + }, { + "code": "210811", + "name": "老边区" + }, { + "code": "210881", + "name": "盖州市" + }, { + "code": "210882", + "name": "大石桥市" + }] + }, { + "code": "2109", + "name": "阜新市", + "children": [{ + "code": "210902", + "name": "海州区" + }, { + "code": "210903", + "name": "新邱区" + }, { + "code": "210904", + "name": "太平区" + }, { + "code": "210905", + "name": "清河门区" + }, { + "code": "210911", + "name": "细河区" + }, { + "code": "210921", + "name": "阜新蒙古族自治县" + }, { + "code": "210922", + "name": "彰武县" + }] + }, { + "code": "2110", + "name": "辽阳市", + "children": [{ + "code": "211002", + "name": "白塔区" + }, { + "code": "211003", + "name": "文圣区" + }, { + "code": "211004", + "name": "宏伟区" + }, { + "code": "211005", + "name": "弓长岭区" + }, { + "code": "211011", + "name": "太子河区" + }, { + "code": "211021", + "name": "辽阳县" + }, { + "code": "211081", + "name": "灯塔市" + }] + }, { + "code": "2111", + "name": "盘锦市", + "children": [{ + "code": "211102", + "name": "双台子区" + }, { + "code": "211103", + "name": "兴隆台区" + }, { + "code": "211104", + "name": "大洼区" + }, { + "code": "211122", + "name": "盘山县" + }] + }, { + "code": "2112", + "name": "铁岭市", + "children": [{ + "code": "211202", + "name": "银州区" + }, { + "code": "211204", + "name": "清河区" + }, { + "code": "211221", + "name": "铁岭县" + }, { + "code": "211223", + "name": "西丰县" + }, { + "code": "211224", + "name": "昌图县" + }, { + "code": "211281", + "name": "调兵山市" + }, { + "code": "211282", + "name": "开原市" + }] + }, { + "code": "2113", + "name": "朝阳市", + "children": [{ + "code": "211302", + "name": "双塔区" + }, { + "code": "211303", + "name": "龙城区" + }, { + "code": "211321", + "name": "朝阳县" + }, { + "code": "211322", + "name": "建平县" + }, { + "code": "211324", + "name": "喀喇沁左翼蒙古族自治县" + }, { + "code": "211381", + "name": "北票市" + }, { + "code": "211382", + "name": "凌源市" + }] + }, { + "code": "2114", + "name": "葫芦岛市", + "children": [{ + "code": "211402", + "name": "连山区" + }, { + "code": "211403", + "name": "龙港区" + }, { + "code": "211404", + "name": "南票区" + }, { + "code": "211421", + "name": "绥中县" + }, { + "code": "211422", + "name": "建昌县" + }, { + "code": "211481", + "name": "兴城市" + }] + }] +}, { + "code": "22", + "name": "吉林省", + "children": [{ + "code": "2201", + "name": "长春市", + "children": [{ + "code": "220102", + "name": "南关区" + }, { + "code": "220103", + "name": "宽城区" + }, { + "code": "220104", + "name": "朝阳区" + }, { + "code": "220105", + "name": "二道区" + }, { + "code": "220106", + "name": "绿园区" + }, { + "code": "220112", + "name": "双阳区" + }, { + "code": "220113", + "name": "九台区" + }, { + "code": "220122", + "name": "农安县" + }, { + "code": "220171", + "name": "长春经济技术开发区" + }, { + "code": "220172", + "name": "长春净月高新技术产业开发区" + }, { + "code": "220173", + "name": "长春高新技术产业开发区" + }, { + "code": "220174", + "name": "长春汽车经济技术开发区" + }, { + "code": "220182", + "name": "榆树市" + }, { + "code": "220183", + "name": "德惠市" + }, { + "code": "220184", + "name": "公主岭市" + }] + }, { + "code": "2202", + "name": "吉林市", + "children": [{ + "code": "220202", + "name": "昌邑区" + }, { + "code": "220203", + "name": "龙潭区" + }, { + "code": "220204", + "name": "船营区" + }, { + "code": "220211", + "name": "丰满区" + }, { + "code": "220221", + "name": "永吉县" + }, { + "code": "220271", + "name": "吉林经济开发区" + }, { + "code": "220272", + "name": "吉林高新技术产业开发区" + }, { + "code": "220273", + "name": "吉林中国新加坡食品区" + }, { + "code": "220281", + "name": "蛟河市" + }, { + "code": "220282", + "name": "桦甸市" + }, { + "code": "220283", + "name": "舒兰市" + }, { + "code": "220284", + "name": "磐石市" + }] + }, { + "code": "2203", + "name": "四平市", + "children": [{ + "code": "220302", + "name": "铁西区" + }, { + "code": "220303", + "name": "铁东区" + }, { + "code": "220322", + "name": "梨树县" + }, { + "code": "220323", + "name": "伊通满族自治县" + }, { + "code": "220382", + "name": "双辽市" + }] + }, { + "code": "2204", + "name": "辽源市", + "children": [{ + "code": "220402", + "name": "龙山区" + }, { + "code": "220403", + "name": "西安区" + }, { + "code": "220421", + "name": "东丰县" + }, { + "code": "220422", + "name": "东辽县" + }] + }, { + "code": "2205", + "name": "通化市", + "children": [{ + "code": "220502", + "name": "东昌区" + }, { + "code": "220503", + "name": "二道江区" + }, { + "code": "220521", + "name": "通化县" + }, { + "code": "220523", + "name": "辉南县" + }, { + "code": "220524", + "name": "柳河县" + }, { + "code": "220581", + "name": "梅河口市" + }, { + "code": "220582", + "name": "集安市" + }] + }, { + "code": "2206", + "name": "白山市", + "children": [{ + "code": "220602", + "name": "浑江区" + }, { + "code": "220605", + "name": "江源区" + }, { + "code": "220621", + "name": "抚松县" + }, { + "code": "220622", + "name": "靖宇县" + }, { + "code": "220623", + "name": "长白朝鲜族自治县" + }, { + "code": "220681", + "name": "临江市" + }] + }, { + "code": "2207", + "name": "松原市", + "children": [{ + "code": "220702", + "name": "宁江区" + }, { + "code": "220721", + "name": "前郭尔罗斯蒙古族自治县" + }, { + "code": "220722", + "name": "长岭县" + }, { + "code": "220723", + "name": "乾安县" + }, { + "code": "220771", + "name": "吉林松原经济开发区" + }, { + "code": "220781", + "name": "扶余市" + }] + }, { + "code": "2208", + "name": "白城市", + "children": [{ + "code": "220802", + "name": "洮北区" + }, { + "code": "220821", + "name": "镇赉县" + }, { + "code": "220822", + "name": "通榆县" + }, { + "code": "220871", + "name": "吉林白城经济开发区" + }, { + "code": "220881", + "name": "洮南市" + }, { + "code": "220882", + "name": "大安市" + }] + }, { + "code": "2224", + "name": "延边朝鲜族自治州", + "children": [{ + "code": "222401", + "name": "延吉市" + }, { + "code": "222402", + "name": "图们市" + }, { + "code": "222403", + "name": "敦化市" + }, { + "code": "222404", + "name": "珲春市" + }, { + "code": "222405", + "name": "龙井市" + }, { + "code": "222406", + "name": "和龙市" + }, { + "code": "222424", + "name": "汪清县" + }, { + "code": "222426", + "name": "安图县" + }] + }] +}, { + "code": "23", + "name": "黑龙江省", + "children": [{ + "code": "2301", + "name": "哈尔滨市", + "children": [{ + "code": "230102", + "name": "道里区" + }, { + "code": "230103", + "name": "南岗区" + }, { + "code": "230104", + "name": "道外区" + }, { + "code": "230108", + "name": "平房区" + }, { + "code": "230109", + "name": "松北区" + }, { + "code": "230110", + "name": "香坊区" + }, { + "code": "230111", + "name": "呼兰区" + }, { + "code": "230112", + "name": "阿城区" + }, { + "code": "230113", + "name": "双城区" + }, { + "code": "230123", + "name": "依兰县" + }, { + "code": "230124", + "name": "方正县" + }, { + "code": "230125", + "name": "宾县" + }, { + "code": "230126", + "name": "巴彦县" + }, { + "code": "230127", + "name": "木兰县" + }, { + "code": "230128", + "name": "通河县" + }, { + "code": "230129", + "name": "延寿县" + }, { + "code": "230183", + "name": "尚志市" + }, { + "code": "230184", + "name": "五常市" + }] + }, { + "code": "2302", + "name": "齐齐哈尔市", + "children": [{ + "code": "230202", + "name": "龙沙区" + }, { + "code": "230203", + "name": "建华区" + }, { + "code": "230204", + "name": "铁锋区" + }, { + "code": "230205", + "name": "昂昂溪区" + }, { + "code": "230206", + "name": "富拉尔基区" + }, { + "code": "230207", + "name": "碾子山区" + }, { + "code": "230208", + "name": "梅里斯达斡尔族区" + }, { + "code": "230221", + "name": "龙江县" + }, { + "code": "230223", + "name": "依安县" + }, { + "code": "230224", + "name": "泰来县" + }, { + "code": "230225", + "name": "甘南县" + }, { + "code": "230227", + "name": "富裕县" + }, { + "code": "230229", + "name": "克山县" + }, { + "code": "230230", + "name": "克东县" + }, { + "code": "230231", + "name": "拜泉县" + }, { + "code": "230281", + "name": "讷河市" + }] + }, { + "code": "2303", + "name": "鸡西市", + "children": [{ + "code": "230302", + "name": "鸡冠区" + }, { + "code": "230303", + "name": "恒山区" + }, { + "code": "230304", + "name": "滴道区" + }, { + "code": "230305", + "name": "梨树区" + }, { + "code": "230306", + "name": "城子河区" + }, { + "code": "230307", + "name": "麻山区" + }, { + "code": "230321", + "name": "鸡东县" + }, { + "code": "230381", + "name": "虎林市" + }, { + "code": "230382", + "name": "密山市" + }] + }, { + "code": "2304", + "name": "鹤岗市", + "children": [{ + "code": "230402", + "name": "向阳区" + }, { + "code": "230403", + "name": "工农区" + }, { + "code": "230404", + "name": "南山区" + }, { + "code": "230405", + "name": "兴安区" + }, { + "code": "230406", + "name": "东山区" + }, { + "code": "230407", + "name": "兴山区" + }, { + "code": "230421", + "name": "萝北县" + }, { + "code": "230422", + "name": "绥滨县" + }] + }, { + "code": "2305", + "name": "双鸭山市", + "children": [{ + "code": "230502", + "name": "尖山区" + }, { + "code": "230503", + "name": "岭东区" + }, { + "code": "230505", + "name": "四方台区" + }, { + "code": "230506", + "name": "宝山区" + }, { + "code": "230521", + "name": "集贤县" + }, { + "code": "230522", + "name": "友谊县" + }, { + "code": "230523", + "name": "宝清县" + }, { + "code": "230524", + "name": "饶河县" + }] + }, { + "code": "2306", + "name": "大庆市", + "children": [{ + "code": "230602", + "name": "萨尔图区" + }, { + "code": "230603", + "name": "龙凤区" + }, { + "code": "230604", + "name": "让胡路区" + }, { + "code": "230605", + "name": "红岗区" + }, { + "code": "230606", + "name": "大同区" + }, { + "code": "230621", + "name": "肇州县" + }, { + "code": "230622", + "name": "肇源县" + }, { + "code": "230623", + "name": "林甸县" + }, { + "code": "230624", + "name": "杜尔伯特蒙古族自治县" + }, { + "code": "230671", + "name": "大庆高新技术产业开发区" + }] + }, { + "code": "2307", + "name": "伊春市", + "children": [{ + "code": "230717", + "name": "伊美区" + }, { + "code": "230718", + "name": "乌翠区" + }, { + "code": "230719", + "name": "友好区" + }, { + "code": "230722", + "name": "嘉荫县" + }, { + "code": "230723", + "name": "汤旺县" + }, { + "code": "230724", + "name": "丰林县" + }, { + "code": "230725", + "name": "大箐山县" + }, { + "code": "230726", + "name": "南岔县" + }, { + "code": "230751", + "name": "金林区" + }, { + "code": "230781", + "name": "铁力市" + }] + }, { + "code": "2308", + "name": "佳木斯市", + "children": [{ + "code": "230803", + "name": "向阳区" + }, { + "code": "230804", + "name": "前进区" + }, { + "code": "230805", + "name": "东风区" + }, { + "code": "230811", + "name": "郊区" + }, { + "code": "230822", + "name": "桦南县" + }, { + "code": "230826", + "name": "桦川县" + }, { + "code": "230828", + "name": "汤原县" + }, { + "code": "230881", + "name": "同江市" + }, { + "code": "230882", + "name": "富锦市" + }, { + "code": "230883", + "name": "抚远市" + }] + }, { + "code": "2309", + "name": "七台河市", + "children": [{ + "code": "230902", + "name": "新兴区" + }, { + "code": "230903", + "name": "桃山区" + }, { + "code": "230904", + "name": "茄子河区" + }, { + "code": "230921", + "name": "勃利县" + }] + }, { + "code": "2310", + "name": "牡丹江市", + "children": [{ + "code": "231002", + "name": "东安区" + }, { + "code": "231003", + "name": "阳明区" + }, { + "code": "231004", + "name": "爱民区" + }, { + "code": "231005", + "name": "西安区" + }, { + "code": "231025", + "name": "林口县" + }, { + "code": "231071", + "name": "牡丹江经济技术开发区" + }, { + "code": "231081", + "name": "绥芬河市" + }, { + "code": "231083", + "name": "海林市" + }, { + "code": "231084", + "name": "宁安市" + }, { + "code": "231085", + "name": "穆棱市" + }, { + "code": "231086", + "name": "东宁市" + }] + }, { + "code": "2311", + "name": "黑河市", + "children": [{ + "code": "231102", + "name": "爱辉区" + }, { + "code": "231123", + "name": "逊克县" + }, { + "code": "231124", + "name": "孙吴县" + }, { + "code": "231181", + "name": "北安市" + }, { + "code": "231182", + "name": "五大连池市" + }, { + "code": "231183", + "name": "嫩江市" + }] + }, { + "code": "2312", + "name": "绥化市", + "children": [{ + "code": "231202", + "name": "北林区" + }, { + "code": "231221", + "name": "望奎县" + }, { + "code": "231222", + "name": "兰西县" + }, { + "code": "231223", + "name": "青冈县" + }, { + "code": "231224", + "name": "庆安县" + }, { + "code": "231225", + "name": "明水县" + }, { + "code": "231226", + "name": "绥棱县" + }, { + "code": "231281", + "name": "安达市" + }, { + "code": "231282", + "name": "肇东市" + }, { + "code": "231283", + "name": "海伦市" + }] + }, { + "code": "2327", + "name": "大兴安岭地区", + "children": [{ + "code": "232701", + "name": "漠河市" + }, { + "code": "232721", + "name": "呼玛县" + }, { + "code": "232722", + "name": "塔河县" + }, { + "code": "232761", + "name": "加格达奇区" + }, { + "code": "232762", + "name": "松岭区" + }, { + "code": "232763", + "name": "新林区" + }, { + "code": "232764", + "name": "呼中区" + }] + }] +}, { + "code": "31", + "name": "上海市", + "children": [{ + "code": "3101", + "name": "市辖区", + "children": [{ + "code": "310101", + "name": "黄浦区" + }, { + "code": "310104", + "name": "徐汇区" + }, { + "code": "310105", + "name": "长宁区" + }, { + "code": "310106", + "name": "静安区" + }, { + "code": "310107", + "name": "普陀区" + }, { + "code": "310109", + "name": "虹口区" + }, { + "code": "310110", + "name": "杨浦区" + }, { + "code": "310112", + "name": "闵行区" + }, { + "code": "310113", + "name": "宝山区" + }, { + "code": "310114", + "name": "嘉定区" + }, { + "code": "310115", + "name": "浦东新区" + }, { + "code": "310116", + "name": "金山区" + }, { + "code": "310117", + "name": "松江区" + }, { + "code": "310118", + "name": "青浦区" + }, { + "code": "310120", + "name": "奉贤区" + }, { + "code": "310151", + "name": "崇明区" + }] + }] +}, { + "code": "32", + "name": "江苏省", + "children": [{ + "code": "3201", + "name": "南京市", + "children": [{ + "code": "320102", + "name": "玄武区" + }, { + "code": "320104", + "name": "秦淮区" + }, { + "code": "320105", + "name": "建邺区" + }, { + "code": "320106", + "name": "鼓楼区" + }, { + "code": "320111", + "name": "浦口区" + }, { + "code": "320113", + "name": "栖霞区" + }, { + "code": "320114", + "name": "雨花台区" + }, { + "code": "320115", + "name": "江宁区" + }, { + "code": "320116", + "name": "六合区" + }, { + "code": "320117", + "name": "溧水区" + }, { + "code": "320118", + "name": "高淳区" + }] + }, { + "code": "3202", + "name": "无锡市", + "children": [{ + "code": "320205", + "name": "锡山区" + }, { + "code": "320206", + "name": "惠山区" + }, { + "code": "320211", + "name": "滨湖区" + }, { + "code": "320213", + "name": "梁溪区" + }, { + "code": "320214", + "name": "新吴区" + }, { + "code": "320281", + "name": "江阴市" + }, { + "code": "320282", + "name": "宜兴市" + }] + }, { + "code": "3203", + "name": "徐州市", + "children": [{ + "code": "320302", + "name": "鼓楼区" + }, { + "code": "320303", + "name": "云龙区" + }, { + "code": "320305", + "name": "贾汪区" + }, { + "code": "320311", + "name": "泉山区" + }, { + "code": "320312", + "name": "铜山区" + }, { + "code": "320321", + "name": "丰县" + }, { + "code": "320322", + "name": "沛县" + }, { + "code": "320324", + "name": "睢宁县" + }, { + "code": "320371", + "name": "徐州经济技术开发区" + }, { + "code": "320381", + "name": "新沂市" + }, { + "code": "320382", + "name": "邳州市" + }] + }, { + "code": "3204", + "name": "常州市", + "children": [{ + "code": "320402", + "name": "天宁区" + }, { + "code": "320404", + "name": "钟楼区" + }, { + "code": "320411", + "name": "新北区" + }, { + "code": "320412", + "name": "武进区" + }, { + "code": "320413", + "name": "金坛区" + }, { + "code": "320481", + "name": "溧阳市" + }] + }, { + "code": "3205", + "name": "苏州市", + "children": [{ + "code": "320505", + "name": "虎丘区" + }, { + "code": "320506", + "name": "吴中区" + }, { + "code": "320507", + "name": "相城区" + }, { + "code": "320508", + "name": "姑苏区" + }, { + "code": "320509", + "name": "吴江区" + }, { + "code": "320571", + "name": "苏州工业园区" + }, { + "code": "320581", + "name": "常熟市" + }, { + "code": "320582", + "name": "张家港市" + }, { + "code": "320583", + "name": "昆山市" + }, { + "code": "320585", + "name": "太仓市" + }] + }, { + "code": "3206", + "name": "南通市", + "children": [{ + "code": "320602", + "name": "崇川区" + }, { + "code": "320611", + "name": "港闸区" + }, { + "code": "320612", + "name": "通州区" + }, { + "code": "320623", + "name": "如东县" + }, { + "code": "320671", + "name": "南通经济技术开发区" + }, { + "code": "320681", + "name": "启东市" + }, { + "code": "320682", + "name": "如皋市" + }, { + "code": "320684", + "name": "海门市" + }, { + "code": "320685", + "name": "海安市" + }] + }, { + "code": "3207", + "name": "连云港市", + "children": [{ + "code": "320703", + "name": "连云区" + }, { + "code": "320706", + "name": "海州区" + }, { + "code": "320707", + "name": "赣榆区" + }, { + "code": "320722", + "name": "东海县" + }, { + "code": "320723", + "name": "灌云县" + }, { + "code": "320724", + "name": "灌南县" + }, { + "code": "320771", + "name": "连云港经济技术开发区" + }, { + "code": "320772", + "name": "连云港高新技术产业开发区" + }] + }, { + "code": "3208", + "name": "淮安市", + "children": [{ + "code": "320803", + "name": "淮安区" + }, { + "code": "320804", + "name": "淮阴区" + }, { + "code": "320812", + "name": "清江浦区" + }, { + "code": "320813", + "name": "洪泽区" + }, { + "code": "320826", + "name": "涟水县" + }, { + "code": "320830", + "name": "盱眙县" + }, { + "code": "320831", + "name": "金湖县" + }, { + "code": "320871", + "name": "淮安经济技术开发区" + }] + }, { + "code": "3209", + "name": "盐城市", + "children": [{ + "code": "320902", + "name": "亭湖区" + }, { + "code": "320903", + "name": "盐都区" + }, { + "code": "320904", + "name": "大丰区" + }, { + "code": "320921", + "name": "响水县" + }, { + "code": "320922", + "name": "滨海县" + }, { + "code": "320923", + "name": "阜宁县" + }, { + "code": "320924", + "name": "射阳县" + }, { + "code": "320925", + "name": "建湖县" + }, { + "code": "320971", + "name": "盐城经济技术开发区" + }, { + "code": "320981", + "name": "东台市" + }] + }, { + "code": "3210", + "name": "扬州市", + "children": [{ + "code": "321002", + "name": "广陵区" + }, { + "code": "321003", + "name": "邗江区" + }, { + "code": "321012", + "name": "江都区" + }, { + "code": "321023", + "name": "宝应县" + }, { + "code": "321071", + "name": "扬州经济技术开发区" + }, { + "code": "321081", + "name": "仪征市" + }, { + "code": "321084", + "name": "高邮市" + }] + }, { + "code": "3211", + "name": "镇江市", + "children": [{ + "code": "321102", + "name": "京口区" + }, { + "code": "321111", + "name": "润州区" + }, { + "code": "321112", + "name": "丹徒区" + }, { + "code": "321171", + "name": "镇江新区" + }, { + "code": "321181", + "name": "丹阳市" + }, { + "code": "321182", + "name": "扬中市" + }, { + "code": "321183", + "name": "句容市" + }] + }, { + "code": "3212", + "name": "泰州市", + "children": [{ + "code": "321202", + "name": "海陵区" + }, { + "code": "321203", + "name": "高港区" + }, { + "code": "321204", + "name": "姜堰区" + }, { + "code": "321271", + "name": "泰州医药高新技术产业开发区" + }, { + "code": "321281", + "name": "兴化市" + }, { + "code": "321282", + "name": "靖江市" + }, { + "code": "321283", + "name": "泰兴市" + }] + }, { + "code": "3213", + "name": "宿迁市", + "children": [{ + "code": "321302", + "name": "宿城区" + }, { + "code": "321311", + "name": "宿豫区" + }, { + "code": "321322", + "name": "沭阳县" + }, { + "code": "321323", + "name": "泗阳县" + }, { + "code": "321324", + "name": "泗洪县" + }, { + "code": "321371", + "name": "宿迁经济技术开发区" + }] + }] +}, { + "code": "33", + "name": "浙江省", + "children": [{ + "code": "3301", + "name": "杭州市", + "children": [{ + "code": "330102", + "name": "上城区" + }, { + "code": "330103", + "name": "下城区" + }, { + "code": "330104", + "name": "江干区" + }, { + "code": "330105", + "name": "拱墅区" + }, { + "code": "330106", + "name": "西湖区" + }, { + "code": "330108", + "name": "滨江区" + }, { + "code": "330109", + "name": "萧山区" + }, { + "code": "330110", + "name": "余杭区" + }, { + "code": "330111", + "name": "富阳区" + }, { + "code": "330112", + "name": "临安区" + }, { + "code": "330122", + "name": "桐庐县" + }, { + "code": "330127", + "name": "淳安县" + }, { + "code": "330182", + "name": "建德市" + }] + }, { + "code": "3302", + "name": "宁波市", + "children": [{ + "code": "330203", + "name": "海曙区" + }, { + "code": "330205", + "name": "江北区" + }, { + "code": "330206", + "name": "北仑区" + }, { + "code": "330211", + "name": "镇海区" + }, { + "code": "330212", + "name": "鄞州区" + }, { + "code": "330213", + "name": "奉化区" + }, { + "code": "330225", + "name": "象山县" + }, { + "code": "330226", + "name": "宁海县" + }, { + "code": "330281", + "name": "余姚市" + }, { + "code": "330282", + "name": "慈溪市" + }] + }, { + "code": "3303", + "name": "温州市", + "children": [{ + "code": "330302", + "name": "鹿城区" + }, { + "code": "330303", + "name": "龙湾区" + }, { + "code": "330304", + "name": "瓯海区" + }, { + "code": "330305", + "name": "洞头区" + }, { + "code": "330324", + "name": "永嘉县" + }, { + "code": "330326", + "name": "平阳县" + }, { + "code": "330327", + "name": "苍南县" + }, { + "code": "330328", + "name": "文成县" + }, { + "code": "330329", + "name": "泰顺县" + }, { + "code": "330371", + "name": "温州经济技术开发区" + }, { + "code": "330381", + "name": "瑞安市" + }, { + "code": "330382", + "name": "乐清市" + }, { + "code": "330383", + "name": "龙港市" + }] + }, { + "code": "3304", + "name": "嘉兴市", + "children": [{ + "code": "330402", + "name": "南湖区" + }, { + "code": "330411", + "name": "秀洲区" + }, { + "code": "330421", + "name": "嘉善县" + }, { + "code": "330424", + "name": "海盐县" + }, { + "code": "330481", + "name": "海宁市" + }, { + "code": "330482", + "name": "平湖市" + }, { + "code": "330483", + "name": "桐乡市" + }] + }, { + "code": "3305", + "name": "湖州市", + "children": [{ + "code": "330502", + "name": "吴兴区" + }, { + "code": "330503", + "name": "南浔区" + }, { + "code": "330521", + "name": "德清县" + }, { + "code": "330522", + "name": "长兴县" + }, { + "code": "330523", + "name": "安吉县" + }] + }, { + "code": "3306", + "name": "绍兴市", + "children": [{ + "code": "330602", + "name": "越城区" + }, { + "code": "330603", + "name": "柯桥区" + }, { + "code": "330604", + "name": "上虞区" + }, { + "code": "330624", + "name": "新昌县" + }, { + "code": "330681", + "name": "诸暨市" + }, { + "code": "330683", + "name": "嵊州市" + }] + }, { + "code": "3307", + "name": "金华市", + "children": [{ + "code": "330702", + "name": "婺城区" + }, { + "code": "330703", + "name": "金东区" + }, { + "code": "330723", + "name": "武义县" + }, { + "code": "330726", + "name": "浦江县" + }, { + "code": "330727", + "name": "磐安县" + }, { + "code": "330781", + "name": "兰溪市" + }, { + "code": "330782", + "name": "义乌市" + }, { + "code": "330783", + "name": "东阳市" + }, { + "code": "330784", + "name": "永康市" + }] + }, { + "code": "3308", + "name": "衢州市", + "children": [{ + "code": "330802", + "name": "柯城区" + }, { + "code": "330803", + "name": "衢江区" + }, { + "code": "330822", + "name": "常山县" + }, { + "code": "330824", + "name": "开化县" + }, { + "code": "330825", + "name": "龙游县" + }, { + "code": "330881", + "name": "江山市" + }] + }, { + "code": "3309", + "name": "舟山市", + "children": [{ + "code": "330902", + "name": "定海区" + }, { + "code": "330903", + "name": "普陀区" + }, { + "code": "330921", + "name": "岱山县" + }, { + "code": "330922", + "name": "嵊泗县" + }] + }, { + "code": "3310", + "name": "台州市", + "children": [{ + "code": "331002", + "name": "椒江区" + }, { + "code": "331003", + "name": "黄岩区" + }, { + "code": "331004", + "name": "路桥区" + }, { + "code": "331022", + "name": "三门县" + }, { + "code": "331023", + "name": "天台县" + }, { + "code": "331024", + "name": "仙居县" + }, { + "code": "331081", + "name": "温岭市" + }, { + "code": "331082", + "name": "临海市" + }, { + "code": "331083", + "name": "玉环市" + }] + }, { + "code": "3311", + "name": "丽水市", + "children": [{ + "code": "331102", + "name": "莲都区" + }, { + "code": "331121", + "name": "青田县" + }, { + "code": "331122", + "name": "缙云县" + }, { + "code": "331123", + "name": "遂昌县" + }, { + "code": "331124", + "name": "松阳县" + }, { + "code": "331125", + "name": "云和县" + }, { + "code": "331126", + "name": "庆元县" + }, { + "code": "331127", + "name": "景宁畲族自治县" + }, { + "code": "331181", + "name": "龙泉市" + }] + }] +}, { + "code": "34", + "name": "安徽省", + "children": [{ + "code": "3401", + "name": "合肥市", + "children": [{ + "code": "340102", + "name": "瑶海区" + }, { + "code": "340103", + "name": "庐阳区" + }, { + "code": "340104", + "name": "蜀山区" + }, { + "code": "340111", + "name": "包河区" + }, { + "code": "340121", + "name": "长丰县" + }, { + "code": "340122", + "name": "肥东县" + }, { + "code": "340123", + "name": "肥西县" + }, { + "code": "340124", + "name": "庐江县" + }, { + "code": "340171", + "name": "合肥高新技术产业开发区" + }, { + "code": "340172", + "name": "合肥经济技术开发区" + }, { + "code": "340173", + "name": "合肥新站高新技术产业开发区" + }, { + "code": "340181", + "name": "巢湖市" + }] + }, { + "code": "3402", + "name": "芜湖市", + "children": [{ + "code": "340202", + "name": "镜湖区" + }, { + "code": "340203", + "name": "弋江区" + }, { + "code": "340207", + "name": "鸠江区" + }, { + "code": "340208", + "name": "三山区" + }, { + "code": "340221", + "name": "芜湖县" + }, { + "code": "340222", + "name": "繁昌县" + }, { + "code": "340223", + "name": "南陵县" + }, { + "code": "340271", + "name": "芜湖经济技术开发区" + }, { + "code": "340272", + "name": "安徽芜湖长江大桥经济开发区" + }, { + "code": "340281", + "name": "无为市" + }] + }, { + "code": "3403", + "name": "蚌埠市", + "children": [{ + "code": "340302", + "name": "龙子湖区" + }, { + "code": "340303", + "name": "蚌山区" + }, { + "code": "340304", + "name": "禹会区" + }, { + "code": "340311", + "name": "淮上区" + }, { + "code": "340321", + "name": "怀远县" + }, { + "code": "340322", + "name": "五河县" + }, { + "code": "340323", + "name": "固镇县" + }, { + "code": "340371", + "name": "蚌埠市高新技术开发区" + }, { + "code": "340372", + "name": "蚌埠市经济开发区" + }] + }, { + "code": "3404", + "name": "淮南市", + "children": [{ + "code": "340402", + "name": "大通区" + }, { + "code": "340403", + "name": "田家庵区" + }, { + "code": "340404", + "name": "谢家集区" + }, { + "code": "340405", + "name": "八公山区" + }, { + "code": "340406", + "name": "潘集区" + }, { + "code": "340421", + "name": "凤台县" + }, { + "code": "340422", + "name": "寿县" + }] + }, { + "code": "3405", + "name": "马鞍山市", + "children": [{ + "code": "340503", + "name": "花山区" + }, { + "code": "340504", + "name": "雨山区" + }, { + "code": "340506", + "name": "博望区" + }, { + "code": "340521", + "name": "当涂县" + }, { + "code": "340522", + "name": "含山县" + }, { + "code": "340523", + "name": "和县" + }] + }, { + "code": "3406", + "name": "淮北市", + "children": [{ + "code": "340602", + "name": "杜集区" + }, { + "code": "340603", + "name": "相山区" + }, { + "code": "340604", + "name": "烈山区" + }, { + "code": "340621", + "name": "濉溪县" + }] + }, { + "code": "3407", + "name": "铜陵市", + "children": [{ + "code": "340705", + "name": "铜官区" + }, { + "code": "340706", + "name": "义安区" + }, { + "code": "340711", + "name": "郊区" + }, { + "code": "340722", + "name": "枞阳县" + }] + }, { + "code": "3408", + "name": "安庆市", + "children": [{ + "code": "340802", + "name": "迎江区" + }, { + "code": "340803", + "name": "大观区" + }, { + "code": "340811", + "name": "宜秀区" + }, { + "code": "340822", + "name": "怀宁县" + }, { + "code": "340825", + "name": "太湖县" + }, { + "code": "340826", + "name": "宿松县" + }, { + "code": "340827", + "name": "望江县" + }, { + "code": "340828", + "name": "岳西县" + }, { + "code": "340871", + "name": "安徽安庆经济开发区" + }, { + "code": "340881", + "name": "桐城市" + }, { + "code": "340882", + "name": "潜山市" + }] + }, { + "code": "3410", + "name": "黄山市", + "children": [{ + "code": "341002", + "name": "屯溪区" + }, { + "code": "341003", + "name": "黄山区" + }, { + "code": "341004", + "name": "徽州区" + }, { + "code": "341021", + "name": "歙县" + }, { + "code": "341022", + "name": "休宁县" + }, { + "code": "341023", + "name": "黟县" + }, { + "code": "341024", + "name": "祁门县" + }] + }, { + "code": "3411", + "name": "滁州市", + "children": [{ + "code": "341102", + "name": "琅琊区" + }, { + "code": "341103", + "name": "南谯区" + }, { + "code": "341122", + "name": "来安县" + }, { + "code": "341124", + "name": "全椒县" + }, { + "code": "341125", + "name": "定远县" + }, { + "code": "341126", + "name": "凤阳县" + }, { + "code": "341171", + "name": "苏滁现代产业园" + }, { + "code": "341172", + "name": "滁州经济技术开发区" + }, { + "code": "341181", + "name": "天长市" + }, { + "code": "341182", + "name": "明光市" + }] + }, { + "code": "3412", + "name": "阜阳市", + "children": [{ + "code": "341202", + "name": "颍州区" + }, { + "code": "341203", + "name": "颍东区" + }, { + "code": "341204", + "name": "颍泉区" + }, { + "code": "341221", + "name": "临泉县" + }, { + "code": "341222", + "name": "太和县" + }, { + "code": "341225", + "name": "阜南县" + }, { + "code": "341226", + "name": "颍上县" + }, { + "code": "341271", + "name": "阜阳合肥现代产业园区" + }, { + "code": "341272", + "name": "阜阳经济技术开发区" + }, { + "code": "341282", + "name": "界首市" + }] + }, { + "code": "3413", + "name": "宿州市", + "children": [{ + "code": "341302", + "name": "埇桥区" + }, { + "code": "341321", + "name": "砀山县" + }, { + "code": "341322", + "name": "萧县" + }, { + "code": "341323", + "name": "灵璧县" + }, { + "code": "341324", + "name": "泗县" + }, { + "code": "341371", + "name": "宿州马鞍山现代产业园区" + }, { + "code": "341372", + "name": "宿州经济技术开发区" + }] + }, { + "code": "3415", + "name": "六安市", + "children": [{ + "code": "341502", + "name": "金安区" + }, { + "code": "341503", + "name": "裕安区" + }, { + "code": "341504", + "name": "叶集区" + }, { + "code": "341522", + "name": "霍邱县" + }, { + "code": "341523", + "name": "舒城县" + }, { + "code": "341524", + "name": "金寨县" + }, { + "code": "341525", + "name": "霍山县" + }] + }, { + "code": "3416", + "name": "亳州市", + "children": [{ + "code": "341602", + "name": "谯城区" + }, { + "code": "341621", + "name": "涡阳县" + }, { + "code": "341622", + "name": "蒙城县" + }, { + "code": "341623", + "name": "利辛县" + }] + }, { + "code": "3417", + "name": "池州市", + "children": [{ + "code": "341702", + "name": "贵池区" + }, { + "code": "341721", + "name": "东至县" + }, { + "code": "341722", + "name": "石台县" + }, { + "code": "341723", + "name": "青阳县" + }] + }, { + "code": "3418", + "name": "宣城市", + "children": [{ + "code": "341802", + "name": "宣州区" + }, { + "code": "341821", + "name": "郎溪县" + }, { + "code": "341823", + "name": "泾县" + }, { + "code": "341824", + "name": "绩溪县" + }, { + "code": "341825", + "name": "旌德县" + }, { + "code": "341871", + "name": "宣城市经济开发区" + }, { + "code": "341881", + "name": "宁国市" + }, { + "code": "341882", + "name": "广德市" + }] + }] +}, { + "code": "35", + "name": "福建省", + "children": [{ + "code": "3501", + "name": "福州市", + "children": [{ + "code": "350102", + "name": "鼓楼区" + }, { + "code": "350103", + "name": "台江区" + }, { + "code": "350104", + "name": "仓山区" + }, { + "code": "350105", + "name": "马尾区" + }, { + "code": "350111", + "name": "晋安区" + }, { + "code": "350112", + "name": "长乐区" + }, { + "code": "350121", + "name": "闽侯县" + }, { + "code": "350122", + "name": "连江县" + }, { + "code": "350123", + "name": "罗源县" + }, { + "code": "350124", + "name": "闽清县" + }, { + "code": "350125", + "name": "永泰县" + }, { + "code": "350128", + "name": "平潭县" + }, { + "code": "350181", + "name": "福清市" + }] + }, { + "code": "3502", + "name": "厦门市", + "children": [{ + "code": "350203", + "name": "思明区" + }, { + "code": "350205", + "name": "海沧区" + }, { + "code": "350206", + "name": "湖里区" + }, { + "code": "350211", + "name": "集美区" + }, { + "code": "350212", + "name": "同安区" + }, { + "code": "350213", + "name": "翔安区" + }] + }, { + "code": "3503", + "name": "莆田市", + "children": [{ + "code": "350302", + "name": "城厢区" + }, { + "code": "350303", + "name": "涵江区" + }, { + "code": "350304", + "name": "荔城区" + }, { + "code": "350305", + "name": "秀屿区" + }, { + "code": "350322", + "name": "仙游县" + }] + }, { + "code": "3504", + "name": "三明市", + "children": [{ + "code": "350402", + "name": "梅列区" + }, { + "code": "350403", + "name": "三元区" + }, { + "code": "350421", + "name": "明溪县" + }, { + "code": "350423", + "name": "清流县" + }, { + "code": "350424", + "name": "宁化县" + }, { + "code": "350425", + "name": "大田县" + }, { + "code": "350426", + "name": "尤溪县" + }, { + "code": "350427", + "name": "沙县" + }, { + "code": "350428", + "name": "将乐县" + }, { + "code": "350429", + "name": "泰宁县" + }, { + "code": "350430", + "name": "建宁县" + }, { + "code": "350481", + "name": "永安市" + }] + }, { + "code": "3505", + "name": "泉州市", + "children": [{ + "code": "350502", + "name": "鲤城区" + }, { + "code": "350503", + "name": "丰泽区" + }, { + "code": "350504", + "name": "洛江区" + }, { + "code": "350505", + "name": "泉港区" + }, { + "code": "350521", + "name": "惠安县" + }, { + "code": "350524", + "name": "安溪县" + }, { + "code": "350525", + "name": "永春县" + }, { + "code": "350526", + "name": "德化县" + }, { + "code": "350527", + "name": "金门县" + }, { + "code": "350581", + "name": "石狮市" + }, { + "code": "350582", + "name": "晋江市" + }, { + "code": "350583", + "name": "南安市" + }] + }, { + "code": "3506", + "name": "漳州市", + "children": [{ + "code": "350602", + "name": "芗城区" + }, { + "code": "350603", + "name": "龙文区" + }, { + "code": "350622", + "name": "云霄县" + }, { + "code": "350623", + "name": "漳浦县" + }, { + "code": "350624", + "name": "诏安县" + }, { + "code": "350625", + "name": "长泰县" + }, { + "code": "350626", + "name": "东山县" + }, { + "code": "350627", + "name": "南靖县" + }, { + "code": "350628", + "name": "平和县" + }, { + "code": "350629", + "name": "华安县" + }, { + "code": "350681", + "name": "龙海市" + }] + }, { + "code": "3507", + "name": "南平市", + "children": [{ + "code": "350702", + "name": "延平区" + }, { + "code": "350703", + "name": "建阳区" + }, { + "code": "350721", + "name": "顺昌县" + }, { + "code": "350722", + "name": "浦城县" + }, { + "code": "350723", + "name": "光泽县" + }, { + "code": "350724", + "name": "松溪县" + }, { + "code": "350725", + "name": "政和县" + }, { + "code": "350781", + "name": "邵武市" + }, { + "code": "350782", + "name": "武夷山市" + }, { + "code": "350783", + "name": "建瓯市" + }] + }, { + "code": "3508", + "name": "龙岩市", + "children": [{ + "code": "350802", + "name": "新罗区" + }, { + "code": "350803", + "name": "永定区" + }, { + "code": "350821", + "name": "长汀县" + }, { + "code": "350823", + "name": "上杭县" + }, { + "code": "350824", + "name": "武平县" + }, { + "code": "350825", + "name": "连城县" + }, { + "code": "350881", + "name": "漳平市" + }] + }, { + "code": "3509", + "name": "宁德市", + "children": [{ + "code": "350902", + "name": "蕉城区" + }, { + "code": "350921", + "name": "霞浦县" + }, { + "code": "350922", + "name": "古田县" + }, { + "code": "350923", + "name": "屏南县" + }, { + "code": "350924", + "name": "寿宁县" + }, { + "code": "350925", + "name": "周宁县" + }, { + "code": "350926", + "name": "柘荣县" + }, { + "code": "350981", + "name": "福安市" + }, { + "code": "350982", + "name": "福鼎市" + }] + }] +}, { + "code": "36", + "name": "江西省", + "children": [{ + "code": "3601", + "name": "南昌市", + "children": [{ + "code": "360102", + "name": "东湖区" + }, { + "code": "360103", + "name": "西湖区" + }, { + "code": "360104", + "name": "青云谱区" + }, { + "code": "360111", + "name": "青山湖区" + }, { + "code": "360112", + "name": "新建区" + }, { + "code": "360113", + "name": "红谷滩区" + }, { + "code": "360121", + "name": "南昌县" + }, { + "code": "360123", + "name": "安义县" + }, { + "code": "360124", + "name": "进贤县" + }] + }, { + "code": "3602", + "name": "景德镇市", + "children": [{ + "code": "360202", + "name": "昌江区" + }, { + "code": "360203", + "name": "珠山区" + }, { + "code": "360222", + "name": "浮梁县" + }, { + "code": "360281", + "name": "乐平市" + }] + }, { + "code": "3603", + "name": "萍乡市", + "children": [{ + "code": "360302", + "name": "安源区" + }, { + "code": "360313", + "name": "湘东区" + }, { + "code": "360321", + "name": "莲花县" + }, { + "code": "360322", + "name": "上栗县" + }, { + "code": "360323", + "name": "芦溪县" + }] + }, { + "code": "3604", + "name": "九江市", + "children": [{ + "code": "360402", + "name": "濂溪区" + }, { + "code": "360403", + "name": "浔阳区" + }, { + "code": "360404", + "name": "柴桑区" + }, { + "code": "360423", + "name": "武宁县" + }, { + "code": "360424", + "name": "修水县" + }, { + "code": "360425", + "name": "永修县" + }, { + "code": "360426", + "name": "德安县" + }, { + "code": "360428", + "name": "都昌县" + }, { + "code": "360429", + "name": "湖口县" + }, { + "code": "360430", + "name": "彭泽县" + }, { + "code": "360481", + "name": "瑞昌市" + }, { + "code": "360482", + "name": "共青城市" + }, { + "code": "360483", + "name": "庐山市" + }] + }, { + "code": "3605", + "name": "新余市", + "children": [{ + "code": "360502", + "name": "渝水区" + }, { + "code": "360521", + "name": "分宜县" + }] + }, { + "code": "3606", + "name": "鹰潭市", + "children": [{ + "code": "360602", + "name": "月湖区" + }, { + "code": "360603", + "name": "余江区" + }, { + "code": "360681", + "name": "贵溪市" + }] + }, { + "code": "3607", + "name": "赣州市", + "children": [{ + "code": "360702", + "name": "章贡区" + }, { + "code": "360703", + "name": "南康区" + }, { + "code": "360704", + "name": "赣县区" + }, { + "code": "360722", + "name": "信丰县" + }, { + "code": "360723", + "name": "大余县" + }, { + "code": "360724", + "name": "上犹县" + }, { + "code": "360725", + "name": "崇义县" + }, { + "code": "360726", + "name": "安远县" + }, { + "code": "360728", + "name": "定南县" + }, { + "code": "360729", + "name": "全南县" + }, { + "code": "360730", + "name": "宁都县" + }, { + "code": "360731", + "name": "于都县" + }, { + "code": "360732", + "name": "兴国县" + }, { + "code": "360733", + "name": "会昌县" + }, { + "code": "360734", + "name": "寻乌县" + }, { + "code": "360735", + "name": "石城县" + }, { + "code": "360781", + "name": "瑞金市" + }, { + "code": "360783", + "name": "龙南市" + }] + }, { + "code": "3608", + "name": "吉安市", + "children": [{ + "code": "360802", + "name": "吉州区" + }, { + "code": "360803", + "name": "青原区" + }, { + "code": "360821", + "name": "吉安县" + }, { + "code": "360822", + "name": "吉水县" + }, { + "code": "360823", + "name": "峡江县" + }, { + "code": "360824", + "name": "新干县" + }, { + "code": "360825", + "name": "永丰县" + }, { + "code": "360826", + "name": "泰和县" + }, { + "code": "360827", + "name": "遂川县" + }, { + "code": "360828", + "name": "万安县" + }, { + "code": "360829", + "name": "安福县" + }, { + "code": "360830", + "name": "永新县" + }, { + "code": "360881", + "name": "井冈山市" + }] + }, { + "code": "3609", + "name": "宜春市", + "children": [{ + "code": "360902", + "name": "袁州区" + }, { + "code": "360921", + "name": "奉新县" + }, { + "code": "360922", + "name": "万载县" + }, { + "code": "360923", + "name": "上高县" + }, { + "code": "360924", + "name": "宜丰县" + }, { + "code": "360925", + "name": "靖安县" + }, { + "code": "360926", + "name": "铜鼓县" + }, { + "code": "360981", + "name": "丰城市" + }, { + "code": "360982", + "name": "樟树市" + }, { + "code": "360983", + "name": "高安市" + }] + }, { + "code": "3610", + "name": "抚州市", + "children": [{ + "code": "361002", + "name": "临川区" + }, { + "code": "361003", + "name": "东乡区" + }, { + "code": "361021", + "name": "南城县" + }, { + "code": "361022", + "name": "黎川县" + }, { + "code": "361023", + "name": "南丰县" + }, { + "code": "361024", + "name": "崇仁县" + }, { + "code": "361025", + "name": "乐安县" + }, { + "code": "361026", + "name": "宜黄县" + }, { + "code": "361027", + "name": "金溪县" + }, { + "code": "361028", + "name": "资溪县" + }, { + "code": "361030", + "name": "广昌县" + }] + }, { + "code": "3611", + "name": "上饶市", + "children": [{ + "code": "361102", + "name": "信州区" + }, { + "code": "361103", + "name": "广丰区" + }, { + "code": "361104", + "name": "广信区" + }, { + "code": "361123", + "name": "玉山县" + }, { + "code": "361124", + "name": "铅山县" + }, { + "code": "361125", + "name": "横峰县" + }, { + "code": "361126", + "name": "弋阳县" + }, { + "code": "361127", + "name": "余干县" + }, { + "code": "361128", + "name": "鄱阳县" + }, { + "code": "361129", + "name": "万年县" + }, { + "code": "361130", + "name": "婺源县" + }, { + "code": "361181", + "name": "德兴市" + }] + }] +}, { + "code": "37", + "name": "山东省", + "children": [{ + "code": "3701", + "name": "济南市", + "children": [{ + "code": "370102", + "name": "历下区" + }, { + "code": "370103", + "name": "市中区" + }, { + "code": "370104", + "name": "槐荫区" + }, { + "code": "370105", + "name": "天桥区" + }, { + "code": "370112", + "name": "历城区" + }, { + "code": "370113", + "name": "长清区" + }, { + "code": "370114", + "name": "章丘区" + }, { + "code": "370115", + "name": "济阳区" + }, { + "code": "370116", + "name": "莱芜区" + }, { + "code": "370117", + "name": "钢城区" + }, { + "code": "370124", + "name": "平阴县" + }, { + "code": "370126", + "name": "商河县" + }, { + "code": "370171", + "name": "济南高新技术产业开发区" + }] + }, { + "code": "3702", + "name": "青岛市", + "children": [{ + "code": "370202", + "name": "市南区" + }, { + "code": "370203", + "name": "市北区" + }, { + "code": "370211", + "name": "黄岛区" + }, { + "code": "370212", + "name": "崂山区" + }, { + "code": "370213", + "name": "李沧区" + }, { + "code": "370214", + "name": "城阳区" + }, { + "code": "370215", + "name": "即墨区" + }, { + "code": "370271", + "name": "青岛高新技术产业开发区" + }, { + "code": "370281", + "name": "胶州市" + }, { + "code": "370283", + "name": "平度市" + }, { + "code": "370285", + "name": "莱西市" + }] + }, { + "code": "3703", + "name": "淄博市", + "children": [{ + "code": "370302", + "name": "淄川区" + }, { + "code": "370303", + "name": "张店区" + }, { + "code": "370304", + "name": "博山区" + }, { + "code": "370305", + "name": "临淄区" + }, { + "code": "370306", + "name": "周村区" + }, { + "code": "370321", + "name": "桓台县" + }, { + "code": "370322", + "name": "高青县" + }, { + "code": "370323", + "name": "沂源县" + }] + }, { + "code": "3704", + "name": "枣庄市", + "children": [{ + "code": "370402", + "name": "市中区" + }, { + "code": "370403", + "name": "薛城区" + }, { + "code": "370404", + "name": "峄城区" + }, { + "code": "370405", + "name": "台儿庄区" + }, { + "code": "370406", + "name": "山亭区" + }, { + "code": "370481", + "name": "滕州市" + }] + }, { + "code": "3705", + "name": "东营市", + "children": [{ + "code": "370502", + "name": "东营区" + }, { + "code": "370503", + "name": "河口区" + }, { + "code": "370505", + "name": "垦利区" + }, { + "code": "370522", + "name": "利津县" + }, { + "code": "370523", + "name": "广饶县" + }, { + "code": "370571", + "name": "东营经济技术开发区" + }, { + "code": "370572", + "name": "东营港经济开发区" + }] + }, { + "code": "3706", + "name": "烟台市", + "children": [{ + "code": "370602", + "name": "芝罘区" + }, { + "code": "370611", + "name": "福山区" + }, { + "code": "370612", + "name": "牟平区" + }, { + "code": "370613", + "name": "莱山区" + }, { + "code": "370614", + "name": "蓬莱区" + }, { + "code": "370671", + "name": "烟台高新技术产业开发区" + }, { + "code": "370672", + "name": "烟台经济技术开发区" + }, { + "code": "370681", + "name": "龙口市" + }, { + "code": "370682", + "name": "莱阳市" + }, { + "code": "370683", + "name": "莱州市" + }, { + "code": "370685", + "name": "招远市" + }, { + "code": "370686", + "name": "栖霞市" + }, { + "code": "370687", + "name": "海阳市" + }] + }, { + "code": "3707", + "name": "潍坊市", + "children": [{ + "code": "370702", + "name": "潍城区" + }, { + "code": "370703", + "name": "寒亭区" + }, { + "code": "370704", + "name": "坊子区" + }, { + "code": "370705", + "name": "奎文区" + }, { + "code": "370724", + "name": "临朐县" + }, { + "code": "370725", + "name": "昌乐县" + }, { + "code": "370772", + "name": "潍坊滨海经济技术开发区" + }, { + "code": "370781", + "name": "青州市" + }, { + "code": "370782", + "name": "诸城市" + }, { + "code": "370783", + "name": "寿光市" + }, { + "code": "370784", + "name": "安丘市" + }, { + "code": "370785", + "name": "高密市" + }, { + "code": "370786", + "name": "昌邑市" + }] + }, { + "code": "3708", + "name": "济宁市", + "children": [{ + "code": "370811", + "name": "任城区" + }, { + "code": "370812", + "name": "兖州区" + }, { + "code": "370826", + "name": "微山县" + }, { + "code": "370827", + "name": "鱼台县" + }, { + "code": "370828", + "name": "金乡县" + }, { + "code": "370829", + "name": "嘉祥县" + }, { + "code": "370830", + "name": "汶上县" + }, { + "code": "370831", + "name": "泗水县" + }, { + "code": "370832", + "name": "梁山县" + }, { + "code": "370871", + "name": "济宁高新技术产业开发区" + }, { + "code": "370881", + "name": "曲阜市" + }, { + "code": "370883", + "name": "邹城市" + }] + }, { + "code": "3709", + "name": "泰安市", + "children": [{ + "code": "370902", + "name": "泰山区" + }, { + "code": "370911", + "name": "岱岳区" + }, { + "code": "370921", + "name": "宁阳县" + }, { + "code": "370923", + "name": "东平县" + }, { + "code": "370982", + "name": "新泰市" + }, { + "code": "370983", + "name": "肥城市" + }] + }, { + "code": "3710", + "name": "威海市", + "children": [{ + "code": "371002", + "name": "环翠区" + }, { + "code": "371003", + "name": "文登区" + }, { + "code": "371071", + "name": "威海火炬高技术产业开发区" + }, { + "code": "371072", + "name": "威海经济技术开发区" + }, { + "code": "371073", + "name": "威海临港经济技术开发区" + }, { + "code": "371082", + "name": "荣成市" + }, { + "code": "371083", + "name": "乳山市" + }] + }, { + "code": "3711", + "name": "日照市", + "children": [{ + "code": "371102", + "name": "东港区" + }, { + "code": "371103", + "name": "岚山区" + }, { + "code": "371121", + "name": "五莲县" + }, { + "code": "371122", + "name": "莒县" + }, { + "code": "371171", + "name": "日照经济技术开发区" + }] + }, { + "code": "3713", + "name": "临沂市", + "children": [{ + "code": "371302", + "name": "兰山区" + }, { + "code": "371311", + "name": "罗庄区" + }, { + "code": "371312", + "name": "河东区" + }, { + "code": "371321", + "name": "沂南县" + }, { + "code": "371322", + "name": "郯城县" + }, { + "code": "371323", + "name": "沂水县" + }, { + "code": "371324", + "name": "兰陵县" + }, { + "code": "371325", + "name": "费县" + }, { + "code": "371326", + "name": "平邑县" + }, { + "code": "371327", + "name": "莒南县" + }, { + "code": "371328", + "name": "蒙阴县" + }, { + "code": "371329", + "name": "临沭县" + }, { + "code": "371371", + "name": "临沂高新技术产业开发区" + }] + }, { + "code": "3714", + "name": "德州市", + "children": [{ + "code": "371402", + "name": "德城区" + }, { + "code": "371403", + "name": "陵城区" + }, { + "code": "371422", + "name": "宁津县" + }, { + "code": "371423", + "name": "庆云县" + }, { + "code": "371424", + "name": "临邑县" + }, { + "code": "371425", + "name": "齐河县" + }, { + "code": "371426", + "name": "平原县" + }, { + "code": "371427", + "name": "夏津县" + }, { + "code": "371428", + "name": "武城县" + }, { + "code": "371471", + "name": "德州经济技术开发区" + }, { + "code": "371472", + "name": "德州运河经济开发区" + }, { + "code": "371481", + "name": "乐陵市" + }, { + "code": "371482", + "name": "禹城市" + }] + }, { + "code": "3715", + "name": "聊城市", + "children": [{ + "code": "371502", + "name": "东昌府区" + }, { + "code": "371503", + "name": "茌平区" + }, { + "code": "371521", + "name": "阳谷县" + }, { + "code": "371522", + "name": "莘县" + }, { + "code": "371524", + "name": "东阿县" + }, { + "code": "371525", + "name": "冠县" + }, { + "code": "371526", + "name": "高唐县" + }, { + "code": "371581", + "name": "临清市" + }] + }, { + "code": "3716", + "name": "滨州市", + "children": [{ + "code": "371602", + "name": "滨城区" + }, { + "code": "371603", + "name": "沾化区" + }, { + "code": "371621", + "name": "惠民县" + }, { + "code": "371622", + "name": "阳信县" + }, { + "code": "371623", + "name": "无棣县" + }, { + "code": "371625", + "name": "博兴县" + }, { + "code": "371681", + "name": "邹平市" + }] + }, { + "code": "3717", + "name": "菏泽市", + "children": [{ + "code": "371702", + "name": "牡丹区" + }, { + "code": "371703", + "name": "定陶区" + }, { + "code": "371721", + "name": "曹县" + }, { + "code": "371722", + "name": "单县" + }, { + "code": "371723", + "name": "成武县" + }, { + "code": "371724", + "name": "巨野县" + }, { + "code": "371725", + "name": "郓城县" + }, { + "code": "371726", + "name": "鄄城县" + }, { + "code": "371728", + "name": "东明县" + }, { + "code": "371771", + "name": "菏泽经济技术开发区" + }, { + "code": "371772", + "name": "菏泽高新技术开发区" + }] + }] +}, { + "code": "41", + "name": "河南省", + "children": [{ + "code": "4101", + "name": "郑州市", + "children": [{ + "code": "410102", + "name": "中原区" + }, { + "code": "410103", + "name": "二七区" + }, { + "code": "410104", + "name": "管城回族区" + }, { + "code": "410105", + "name": "金水区" + }, { + "code": "410106", + "name": "上街区" + }, { + "code": "410108", + "name": "惠济区" + }, { + "code": "410122", + "name": "中牟县" + }, { + "code": "410171", + "name": "郑州经济技术开发区" + }, { + "code": "410172", + "name": "郑州高新技术产业开发区" + }, { + "code": "410173", + "name": "郑州航空港经济综合实验区" + }, { + "code": "410181", + "name": "巩义市" + }, { + "code": "410182", + "name": "荥阳市" + }, { + "code": "410183", + "name": "新密市" + }, { + "code": "410184", + "name": "新郑市" + }, { + "code": "410185", + "name": "登封市" + }] + }, { + "code": "4102", + "name": "开封市", + "children": [{ + "code": "410202", + "name": "龙亭区" + }, { + "code": "410203", + "name": "顺河回族区" + }, { + "code": "410204", + "name": "鼓楼区" + }, { + "code": "410205", + "name": "禹王台区" + }, { + "code": "410212", + "name": "祥符区" + }, { + "code": "410221", + "name": "杞县" + }, { + "code": "410222", + "name": "通许县" + }, { + "code": "410223", + "name": "尉氏县" + }, { + "code": "410225", + "name": "兰考县" + }] + }, { + "code": "4103", + "name": "洛阳市", + "children": [{ + "code": "410302", + "name": "老城区" + }, { + "code": "410303", + "name": "西工区" + }, { + "code": "410304", + "name": "瀍河回族区" + }, { + "code": "410305", + "name": "涧西区" + }, { + "code": "410306", + "name": "吉利区" + }, { + "code": "410311", + "name": "洛龙区" + }, { + "code": "410322", + "name": "孟津县" + }, { + "code": "410323", + "name": "新安县" + }, { + "code": "410324", + "name": "栾川县" + }, { + "code": "410325", + "name": "嵩县" + }, { + "code": "410326", + "name": "汝阳县" + }, { + "code": "410327", + "name": "宜阳县" + }, { + "code": "410328", + "name": "洛宁县" + }, { + "code": "410329", + "name": "伊川县" + }, { + "code": "410371", + "name": "洛阳高新技术产业开发区" + }, { + "code": "410381", + "name": "偃师市" + }] + }, { + "code": "4104", + "name": "平顶山市", + "children": [{ + "code": "410402", + "name": "新华区" + }, { + "code": "410403", + "name": "卫东区" + }, { + "code": "410404", + "name": "石龙区" + }, { + "code": "410411", + "name": "湛河区" + }, { + "code": "410421", + "name": "宝丰县" + }, { + "code": "410422", + "name": "叶县" + }, { + "code": "410423", + "name": "鲁山县" + }, { + "code": "410425", + "name": "郏县" + }, { + "code": "410471", + "name": "平顶山高新技术产业开发区" + }, { + "code": "410472", + "name": "平顶山市城乡一体化示范区" + }, { + "code": "410481", + "name": "舞钢市" + }, { + "code": "410482", + "name": "汝州市" + }] + }, { + "code": "4105", + "name": "安阳市", + "children": [{ + "code": "410502", + "name": "文峰区" + }, { + "code": "410503", + "name": "北关区" + }, { + "code": "410505", + "name": "殷都区" + }, { + "code": "410506", + "name": "龙安区" + }, { + "code": "410522", + "name": "安阳县" + }, { + "code": "410523", + "name": "汤阴县" + }, { + "code": "410526", + "name": "滑县" + }, { + "code": "410527", + "name": "内黄县" + }, { + "code": "410571", + "name": "安阳高新技术产业开发区" + }, { + "code": "410581", + "name": "林州市" + }] + }, { + "code": "4106", + "name": "鹤壁市", + "children": [{ + "code": "410602", + "name": "鹤山区" + }, { + "code": "410603", + "name": "山城区" + }, { + "code": "410611", + "name": "淇滨区" + }, { + "code": "410621", + "name": "浚县" + }, { + "code": "410622", + "name": "淇县" + }, { + "code": "410671", + "name": "鹤壁经济技术开发区" + }] + }, { + "code": "4107", + "name": "新乡市", + "children": [{ + "code": "410702", + "name": "红旗区" + }, { + "code": "410703", + "name": "卫滨区" + }, { + "code": "410704", + "name": "凤泉区" + }, { + "code": "410711", + "name": "牧野区" + }, { + "code": "410721", + "name": "新乡县" + }, { + "code": "410724", + "name": "获嘉县" + }, { + "code": "410725", + "name": "原阳县" + }, { + "code": "410726", + "name": "延津县" + }, { + "code": "410727", + "name": "封丘县" + }, { + "code": "410771", + "name": "新乡高新技术产业开发区" + }, { + "code": "410772", + "name": "新乡经济技术开发区" + }, { + "code": "410773", + "name": "新乡市平原城乡一体化示范区" + }, { + "code": "410781", + "name": "卫辉市" + }, { + "code": "410782", + "name": "辉县市" + }, { + "code": "410783", + "name": "长垣市" + }] + }, { + "code": "4108", + "name": "焦作市", + "children": [{ + "code": "410802", + "name": "解放区" + }, { + "code": "410803", + "name": "中站区" + }, { + "code": "410804", + "name": "马村区" + }, { + "code": "410811", + "name": "山阳区" + }, { + "code": "410821", + "name": "修武县" + }, { + "code": "410822", + "name": "博爱县" + }, { + "code": "410823", + "name": "武陟县" + }, { + "code": "410825", + "name": "温县" + }, { + "code": "410871", + "name": "焦作城乡一体化示范区" + }, { + "code": "410882", + "name": "沁阳市" + }, { + "code": "410883", + "name": "孟州市" + }] + }, { + "code": "4109", + "name": "濮阳市", + "children": [{ + "code": "410902", + "name": "华龙区" + }, { + "code": "410922", + "name": "清丰县" + }, { + "code": "410923", + "name": "南乐县" + }, { + "code": "410926", + "name": "范县" + }, { + "code": "410927", + "name": "台前县" + }, { + "code": "410928", + "name": "濮阳县" + }, { + "code": "410971", + "name": "河南濮阳工业园区" + }, { + "code": "410972", + "name": "濮阳经济技术开发区" + }] + }, { + "code": "4110", + "name": "许昌市", + "children": [{ + "code": "411002", + "name": "魏都区" + }, { + "code": "411003", + "name": "建安区" + }, { + "code": "411024", + "name": "鄢陵县" + }, { + "code": "411025", + "name": "襄城县" + }, { + "code": "411071", + "name": "许昌经济技术开发区" + }, { + "code": "411081", + "name": "禹州市" + }, { + "code": "411082", + "name": "长葛市" + }] + }, { + "code": "4111", + "name": "漯河市", + "children": [{ + "code": "411102", + "name": "源汇区" + }, { + "code": "411103", + "name": "郾城区" + }, { + "code": "411104", + "name": "召陵区" + }, { + "code": "411121", + "name": "舞阳县" + }, { + "code": "411122", + "name": "临颍县" + }, { + "code": "411171", + "name": "漯河经济技术开发区" + }] + }, { + "code": "4112", + "name": "三门峡市", + "children": [{ + "code": "411202", + "name": "湖滨区" + }, { + "code": "411203", + "name": "陕州区" + }, { + "code": "411221", + "name": "渑池县" + }, { + "code": "411224", + "name": "卢氏县" + }, { + "code": "411271", + "name": "河南三门峡经济开发区" + }, { + "code": "411281", + "name": "义马市" + }, { + "code": "411282", + "name": "灵宝市" + }] + }, { + "code": "4113", + "name": "南阳市", + "children": [{ + "code": "411302", + "name": "宛城区" + }, { + "code": "411303", + "name": "卧龙区" + }, { + "code": "411321", + "name": "南召县" + }, { + "code": "411322", + "name": "方城县" + }, { + "code": "411323", + "name": "西峡县" + }, { + "code": "411324", + "name": "镇平县" + }, { + "code": "411325", + "name": "内乡县" + }, { + "code": "411326", + "name": "淅川县" + }, { + "code": "411327", + "name": "社旗县" + }, { + "code": "411328", + "name": "唐河县" + }, { + "code": "411329", + "name": "新野县" + }, { + "code": "411330", + "name": "桐柏县" + }, { + "code": "411371", + "name": "南阳高新技术产业开发区" + }, { + "code": "411372", + "name": "南阳市城乡一体化示范区" + }, { + "code": "411381", + "name": "邓州市" + }] + }, { + "code": "4114", + "name": "商丘市", + "children": [{ + "code": "411402", + "name": "梁园区" + }, { + "code": "411403", + "name": "睢阳区" + }, { + "code": "411421", + "name": "民权县" + }, { + "code": "411422", + "name": "睢县" + }, { + "code": "411423", + "name": "宁陵县" + }, { + "code": "411424", + "name": "柘城县" + }, { + "code": "411425", + "name": "虞城县" + }, { + "code": "411426", + "name": "夏邑县" + }, { + "code": "411471", + "name": "豫东综合物流产业聚集区" + }, { + "code": "411472", + "name": "河南商丘经济开发区" + }, { + "code": "411481", + "name": "永城市" + }] + }, { + "code": "4115", + "name": "信阳市", + "children": [{ + "code": "411502", + "name": "浉河区" + }, { + "code": "411503", + "name": "平桥区" + }, { + "code": "411521", + "name": "罗山县" + }, { + "code": "411522", + "name": "光山县" + }, { + "code": "411523", + "name": "新县" + }, { + "code": "411524", + "name": "商城县" + }, { + "code": "411525", + "name": "固始县" + }, { + "code": "411526", + "name": "潢川县" + }, { + "code": "411527", + "name": "淮滨县" + }, { + "code": "411528", + "name": "息县" + }, { + "code": "411571", + "name": "信阳高新技术产业开发区" + }] + }, { + "code": "4116", + "name": "周口市", + "children": [{ + "code": "411602", + "name": "川汇区" + }, { + "code": "411603", + "name": "淮阳区" + }, { + "code": "411621", + "name": "扶沟县" + }, { + "code": "411622", + "name": "西华县" + }, { + "code": "411623", + "name": "商水县" + }, { + "code": "411624", + "name": "沈丘县" + }, { + "code": "411625", + "name": "郸城县" + }, { + "code": "411627", + "name": "太康县" + }, { + "code": "411628", + "name": "鹿邑县" + }, { + "code": "411671", + "name": "河南周口经济开发区" + }, { + "code": "411681", + "name": "项城市" + }] + }, { + "code": "4117", + "name": "驻马店市", + "children": [{ + "code": "411702", + "name": "驿城区" + }, { + "code": "411721", + "name": "西平县" + }, { + "code": "411722", + "name": "上蔡县" + }, { + "code": "411723", + "name": "平舆县" + }, { + "code": "411724", + "name": "正阳县" + }, { + "code": "411725", + "name": "确山县" + }, { + "code": "411726", + "name": "泌阳县" + }, { + "code": "411727", + "name": "汝南县" + }, { + "code": "411728", + "name": "遂平县" + }, { + "code": "411729", + "name": "新蔡县" + }, { + "code": "411771", + "name": "河南驻马店经济开发区" + }] + }, { + "code": "4190", + "name": "省直辖县级行政区划", + "children": [{ + "code": "419001", + "name": "济源市" + }] + }] +}, { + "code": "42", + "name": "湖北省", + "children": [{ + "code": "4201", + "name": "武汉市", + "children": [{ + "code": "420102", + "name": "江岸区" + }, { + "code": "420103", + "name": "江汉区" + }, { + "code": "420104", + "name": "硚口区" + }, { + "code": "420105", + "name": "汉阳区" + }, { + "code": "420106", + "name": "武昌区" + }, { + "code": "420107", + "name": "青山区" + }, { + "code": "420111", + "name": "洪山区" + }, { + "code": "420112", + "name": "东西湖区" + }, { + "code": "420113", + "name": "汉南区" + }, { + "code": "420114", + "name": "蔡甸区" + }, { + "code": "420115", + "name": "江夏区" + }, { + "code": "420116", + "name": "黄陂区" + }, { + "code": "420117", + "name": "新洲区" + }] + }, { + "code": "4202", + "name": "黄石市", + "children": [{ + "code": "420202", + "name": "黄石港区" + }, { + "code": "420203", + "name": "西塞山区" + }, { + "code": "420204", + "name": "下陆区" + }, { + "code": "420205", + "name": "铁山区" + }, { + "code": "420222", + "name": "阳新县" + }, { + "code": "420281", + "name": "大冶市" + }] + }, { + "code": "4203", + "name": "十堰市", + "children": [{ + "code": "420302", + "name": "茅箭区" + }, { + "code": "420303", + "name": "张湾区" + }, { + "code": "420304", + "name": "郧阳区" + }, { + "code": "420322", + "name": "郧西县" + }, { + "code": "420323", + "name": "竹山县" + }, { + "code": "420324", + "name": "竹溪县" + }, { + "code": "420325", + "name": "房县" + }, { + "code": "420381", + "name": "丹江口市" + }] + }, { + "code": "4205", + "name": "宜昌市", + "children": [{ + "code": "420502", + "name": "西陵区" + }, { + "code": "420503", + "name": "伍家岗区" + }, { + "code": "420504", + "name": "点军区" + }, { + "code": "420505", + "name": "猇亭区" + }, { + "code": "420506", + "name": "夷陵区" + }, { + "code": "420525", + "name": "远安县" + }, { + "code": "420526", + "name": "兴山县" + }, { + "code": "420527", + "name": "秭归县" + }, { + "code": "420528", + "name": "长阳土家族自治县" + }, { + "code": "420529", + "name": "五峰土家族自治县" + }, { + "code": "420581", + "name": "宜都市" + }, { + "code": "420582", + "name": "当阳市" + }, { + "code": "420583", + "name": "枝江市" + }] + }, { + "code": "4206", + "name": "襄阳市", + "children": [{ + "code": "420602", + "name": "襄城区" + }, { + "code": "420606", + "name": "樊城区" + }, { + "code": "420607", + "name": "襄州区" + }, { + "code": "420624", + "name": "南漳县" + }, { + "code": "420625", + "name": "谷城县" + }, { + "code": "420626", + "name": "保康县" + }, { + "code": "420682", + "name": "老河口市" + }, { + "code": "420683", + "name": "枣阳市" + }, { + "code": "420684", + "name": "宜城市" + }] + }, { + "code": "4207", + "name": "鄂州市", + "children": [{ + "code": "420702", + "name": "梁子湖区" + }, { + "code": "420703", + "name": "华容区" + }, { + "code": "420704", + "name": "鄂城区" + }] + }, { + "code": "4208", + "name": "荆门市", + "children": [{ + "code": "420802", + "name": "东宝区" + }, { + "code": "420804", + "name": "掇刀区" + }, { + "code": "420822", + "name": "沙洋县" + }, { + "code": "420881", + "name": "钟祥市" + }, { + "code": "420882", + "name": "京山市" + }] + }, { + "code": "4209", + "name": "孝感市", + "children": [{ + "code": "420902", + "name": "孝南区" + }, { + "code": "420921", + "name": "孝昌县" + }, { + "code": "420922", + "name": "大悟县" + }, { + "code": "420923", + "name": "云梦县" + }, { + "code": "420981", + "name": "应城市" + }, { + "code": "420982", + "name": "安陆市" + }, { + "code": "420984", + "name": "汉川市" + }] + }, { + "code": "4210", + "name": "荆州市", + "children": [{ + "code": "421002", + "name": "沙市区" + }, { + "code": "421003", + "name": "荆州区" + }, { + "code": "421022", + "name": "公安县" + }, { + "code": "421023", + "name": "监利县" + }, { + "code": "421024", + "name": "江陵县" + }, { + "code": "421071", + "name": "荆州经济技术开发区" + }, { + "code": "421081", + "name": "石首市" + }, { + "code": "421083", + "name": "洪湖市" + }, { + "code": "421087", + "name": "松滋市" + }] + }, { + "code": "4211", + "name": "黄冈市", + "children": [{ + "code": "421102", + "name": "黄州区" + }, { + "code": "421121", + "name": "团风县" + }, { + "code": "421122", + "name": "红安县" + }, { + "code": "421123", + "name": "罗田县" + }, { + "code": "421124", + "name": "英山县" + }, { + "code": "421125", + "name": "浠水县" + }, { + "code": "421126", + "name": "蕲春县" + }, { + "code": "421127", + "name": "黄梅县" + }, { + "code": "421171", + "name": "龙感湖管理区" + }, { + "code": "421181", + "name": "麻城市" + }, { + "code": "421182", + "name": "武穴市" + }] + }, { + "code": "4212", + "name": "咸宁市", + "children": [{ + "code": "421202", + "name": "咸安区" + }, { + "code": "421221", + "name": "嘉鱼县" + }, { + "code": "421222", + "name": "通城县" + }, { + "code": "421223", + "name": "崇阳县" + }, { + "code": "421224", + "name": "通山县" + }, { + "code": "421281", + "name": "赤壁市" + }] + }, { + "code": "4213", + "name": "随州市", + "children": [{ + "code": "421303", + "name": "曾都区" + }, { + "code": "421321", + "name": "随县" + }, { + "code": "421381", + "name": "广水市" + }] + }, { + "code": "4228", + "name": "恩施土家族苗族自治州", + "children": [{ + "code": "422801", + "name": "恩施市" + }, { + "code": "422802", + "name": "利川市" + }, { + "code": "422822", + "name": "建始县" + }, { + "code": "422823", + "name": "巴东县" + }, { + "code": "422825", + "name": "宣恩县" + }, { + "code": "422826", + "name": "咸丰县" + }, { + "code": "422827", + "name": "来凤县" + }, { + "code": "422828", + "name": "鹤峰县" + }] + }, { + "code": "4290", + "name": "省直辖县级行政区划", + "children": [{ + "code": "429004", + "name": "仙桃市" + }, { + "code": "429005", + "name": "潜江市" + }, { + "code": "429006", + "name": "天门市" + }, { + "code": "429021", + "name": "神农架林区" + }] + }] +}, { + "code": "43", + "name": "湖南省", + "children": [{ + "code": "4301", + "name": "长沙市", + "children": [{ + "code": "430102", + "name": "芙蓉区" + }, { + "code": "430103", + "name": "天心区" + }, { + "code": "430104", + "name": "岳麓区" + }, { + "code": "430105", + "name": "开福区" + }, { + "code": "430111", + "name": "雨花区" + }, { + "code": "430112", + "name": "望城区" + }, { + "code": "430121", + "name": "长沙县" + }, { + "code": "430181", + "name": "浏阳市" + }, { + "code": "430182", + "name": "宁乡市" + }] + }, { + "code": "4302", + "name": "株洲市", + "children": [{ + "code": "430202", + "name": "荷塘区" + }, { + "code": "430203", + "name": "芦淞区" + }, { + "code": "430204", + "name": "石峰区" + }, { + "code": "430211", + "name": "天元区" + }, { + "code": "430212", + "name": "渌口区" + }, { + "code": "430223", + "name": "攸县" + }, { + "code": "430224", + "name": "茶陵县" + }, { + "code": "430225", + "name": "炎陵县" + }, { + "code": "430271", + "name": "云龙示范区" + }, { + "code": "430281", + "name": "醴陵市" + }] + }, { + "code": "4303", + "name": "湘潭市", + "children": [{ + "code": "430302", + "name": "雨湖区" + }, { + "code": "430304", + "name": "岳塘区" + }, { + "code": "430321", + "name": "湘潭县" + }, { + "code": "430371", + "name": "湖南湘潭高新技术产业园区" + }, { + "code": "430372", + "name": "湘潭昭山示范区" + }, { + "code": "430373", + "name": "湘潭九华示范区" + }, { + "code": "430381", + "name": "湘乡市" + }, { + "code": "430382", + "name": "韶山市" + }] + }, { + "code": "4304", + "name": "衡阳市", + "children": [{ + "code": "430405", + "name": "珠晖区" + }, { + "code": "430406", + "name": "雁峰区" + }, { + "code": "430407", + "name": "石鼓区" + }, { + "code": "430408", + "name": "蒸湘区" + }, { + "code": "430412", + "name": "南岳区" + }, { + "code": "430421", + "name": "衡阳县" + }, { + "code": "430422", + "name": "衡南县" + }, { + "code": "430423", + "name": "衡山县" + }, { + "code": "430424", + "name": "衡东县" + }, { + "code": "430426", + "name": "祁东县" + }, { + "code": "430471", + "name": "衡阳综合保税区" + }, { + "code": "430472", + "name": "湖南衡阳高新技术产业园区" + }, { + "code": "430473", + "name": "湖南衡阳松木经济开发区" + }, { + "code": "430481", + "name": "耒阳市" + }, { + "code": "430482", + "name": "常宁市" + }] + }, { + "code": "4305", + "name": "邵阳市", + "children": [{ + "code": "430502", + "name": "双清区" + }, { + "code": "430503", + "name": "大祥区" + }, { + "code": "430511", + "name": "北塔区" + }, { + "code": "430522", + "name": "新邵县" + }, { + "code": "430523", + "name": "邵阳县" + }, { + "code": "430524", + "name": "隆回县" + }, { + "code": "430525", + "name": "洞口县" + }, { + "code": "430527", + "name": "绥宁县" + }, { + "code": "430528", + "name": "新宁县" + }, { + "code": "430529", + "name": "城步苗族自治县" + }, { + "code": "430581", + "name": "武冈市" + }, { + "code": "430582", + "name": "邵东市" + }] + }, { + "code": "4306", + "name": "岳阳市", + "children": [{ + "code": "430602", + "name": "岳阳楼区" + }, { + "code": "430603", + "name": "云溪区" + }, { + "code": "430611", + "name": "君山区" + }, { + "code": "430621", + "name": "岳阳县" + }, { + "code": "430623", + "name": "华容县" + }, { + "code": "430624", + "name": "湘阴县" + }, { + "code": "430626", + "name": "平江县" + }, { + "code": "430671", + "name": "岳阳市屈原管理区" + }, { + "code": "430681", + "name": "汨罗市" + }, { + "code": "430682", + "name": "临湘市" + }] + }, { + "code": "4307", + "name": "常德市", + "children": [{ + "code": "430702", + "name": "武陵区" + }, { + "code": "430703", + "name": "鼎城区" + }, { + "code": "430721", + "name": "安乡县" + }, { + "code": "430722", + "name": "汉寿县" + }, { + "code": "430723", + "name": "澧县" + }, { + "code": "430724", + "name": "临澧县" + }, { + "code": "430725", + "name": "桃源县" + }, { + "code": "430726", + "name": "石门县" + }, { + "code": "430771", + "name": "常德市西洞庭管理区" + }, { + "code": "430781", + "name": "津市市" + }] + }, { + "code": "4308", + "name": "张家界市", + "children": [{ + "code": "430802", + "name": "永定区" + }, { + "code": "430811", + "name": "武陵源区" + }, { + "code": "430821", + "name": "慈利县" + }, { + "code": "430822", + "name": "桑植县" + }] + }, { + "code": "4309", + "name": "益阳市", + "children": [{ + "code": "430902", + "name": "资阳区" + }, { + "code": "430903", + "name": "赫山区" + }, { + "code": "430921", + "name": "南县" + }, { + "code": "430922", + "name": "桃江县" + }, { + "code": "430923", + "name": "安化县" + }, { + "code": "430971", + "name": "益阳市大通湖管理区" + }, { + "code": "430972", + "name": "湖南益阳高新技术产业园区" + }, { + "code": "430981", + "name": "沅江市" + }] + }, { + "code": "4310", + "name": "郴州市", + "children": [{ + "code": "431002", + "name": "北湖区" + }, { + "code": "431003", + "name": "苏仙区" + }, { + "code": "431021", + "name": "桂阳县" + }, { + "code": "431022", + "name": "宜章县" + }, { + "code": "431023", + "name": "永兴县" + }, { + "code": "431024", + "name": "嘉禾县" + }, { + "code": "431025", + "name": "临武县" + }, { + "code": "431026", + "name": "汝城县" + }, { + "code": "431027", + "name": "桂东县" + }, { + "code": "431028", + "name": "安仁县" + }, { + "code": "431081", + "name": "资兴市" + }] + }, { + "code": "4311", + "name": "永州市", + "children": [{ + "code": "431102", + "name": "零陵区" + }, { + "code": "431103", + "name": "冷水滩区" + }, { + "code": "431121", + "name": "祁阳县" + }, { + "code": "431122", + "name": "东安县" + }, { + "code": "431123", + "name": "双牌县" + }, { + "code": "431124", + "name": "道县" + }, { + "code": "431125", + "name": "江永县" + }, { + "code": "431126", + "name": "宁远县" + }, { + "code": "431127", + "name": "蓝山县" + }, { + "code": "431128", + "name": "新田县" + }, { + "code": "431129", + "name": "江华瑶族自治县" + }, { + "code": "431171", + "name": "永州经济技术开发区" + }, { + "code": "431172", + "name": "永州市金洞管理区" + }, { + "code": "431173", + "name": "永州市回龙圩管理区" + }] + }, { + "code": "4312", + "name": "怀化市", + "children": [{ + "code": "431202", + "name": "鹤城区" + }, { + "code": "431221", + "name": "中方县" + }, { + "code": "431222", + "name": "沅陵县" + }, { + "code": "431223", + "name": "辰溪县" + }, { + "code": "431224", + "name": "溆浦县" + }, { + "code": "431225", + "name": "会同县" + }, { + "code": "431226", + "name": "麻阳苗族自治县" + }, { + "code": "431227", + "name": "新晃侗族自治县" + }, { + "code": "431228", + "name": "芷江侗族自治县" + }, { + "code": "431229", + "name": "靖州苗族侗族自治县" + }, { + "code": "431230", + "name": "通道侗族自治县" + }, { + "code": "431271", + "name": "怀化市洪江管理区" + }, { + "code": "431281", + "name": "洪江市" + }] + }, { + "code": "4313", + "name": "娄底市", + "children": [{ + "code": "431302", + "name": "娄星区" + }, { + "code": "431321", + "name": "双峰县" + }, { + "code": "431322", + "name": "新化县" + }, { + "code": "431381", + "name": "冷水江市" + }, { + "code": "431382", + "name": "涟源市" + }] + }, { + "code": "4331", + "name": "湘西土家族苗族自治州", + "children": [{ + "code": "433101", + "name": "吉首市" + }, { + "code": "433122", + "name": "泸溪县" + }, { + "code": "433123", + "name": "凤凰县" + }, { + "code": "433124", + "name": "花垣县" + }, { + "code": "433125", + "name": "保靖县" + }, { + "code": "433126", + "name": "古丈县" + }, { + "code": "433127", + "name": "永顺县" + }, { + "code": "433130", + "name": "龙山县" + }] + }] +}, { + "code": "44", + "name": "广东省", + "children": [{ + "code": "4401", + "name": "广州市", + "children": [{ + "code": "440103", + "name": "荔湾区" + }, { + "code": "440104", + "name": "越秀区" + }, { + "code": "440105", + "name": "海珠区" + }, { + "code": "440106", + "name": "天河区" + }, { + "code": "440111", + "name": "白云区" + }, { + "code": "440112", + "name": "黄埔区" + }, { + "code": "440113", + "name": "番禺区" + }, { + "code": "440114", + "name": "花都区" + }, { + "code": "440115", + "name": "南沙区" + }, { + "code": "440117", + "name": "从化区" + }, { + "code": "440118", + "name": "增城区" + }] + }, { + "code": "4402", + "name": "韶关市", + "children": [{ + "code": "440203", + "name": "武江区" + }, { + "code": "440204", + "name": "浈江区" + }, { + "code": "440205", + "name": "曲江区" + }, { + "code": "440222", + "name": "始兴县" + }, { + "code": "440224", + "name": "仁化县" + }, { + "code": "440229", + "name": "翁源县" + }, { + "code": "440232", + "name": "乳源瑶族自治县" + }, { + "code": "440233", + "name": "新丰县" + }, { + "code": "440281", + "name": "乐昌市" + }, { + "code": "440282", + "name": "南雄市" + }] + }, { + "code": "4403", + "name": "深圳市", + "children": [{ + "code": "440303", + "name": "罗湖区" + }, { + "code": "440304", + "name": "福田区" + }, { + "code": "440305", + "name": "南山区" + }, { + "code": "440306", + "name": "宝安区" + }, { + "code": "440307", + "name": "龙岗区" + }, { + "code": "440308", + "name": "盐田区" + }, { + "code": "440309", + "name": "龙华区" + }, { + "code": "440310", + "name": "坪山区" + }, { + "code": "440311", + "name": "光明区" + }] + }, { + "code": "4404", + "name": "珠海市", + "children": [{ + "code": "440402", + "name": "香洲区" + }, { + "code": "440403", + "name": "斗门区" + }, { + "code": "440404", + "name": "金湾区" + }] + }, { + "code": "4405", + "name": "汕头市", + "children": [{ + "code": "440507", + "name": "龙湖区" + }, { + "code": "440511", + "name": "金平区" + }, { + "code": "440512", + "name": "濠江区" + }, { + "code": "440513", + "name": "潮阳区" + }, { + "code": "440514", + "name": "潮南区" + }, { + "code": "440515", + "name": "澄海区" + }, { + "code": "440523", + "name": "南澳县" + }] + }, { + "code": "4406", + "name": "佛山市", + "children": [{ + "code": "440604", + "name": "禅城区" + }, { + "code": "440605", + "name": "南海区" + }, { + "code": "440606", + "name": "顺德区" + }, { + "code": "440607", + "name": "三水区" + }, { + "code": "440608", + "name": "高明区" + }] + }, { + "code": "4407", + "name": "江门市", + "children": [{ + "code": "440703", + "name": "蓬江区" + }, { + "code": "440704", + "name": "江海区" + }, { + "code": "440705", + "name": "新会区" + }, { + "code": "440781", + "name": "台山市" + }, { + "code": "440783", + "name": "开平市" + }, { + "code": "440784", + "name": "鹤山市" + }, { + "code": "440785", + "name": "恩平市" + }] + }, { + "code": "4408", + "name": "湛江市", + "children": [{ + "code": "440802", + "name": "赤坎区" + }, { + "code": "440803", + "name": "霞山区" + }, { + "code": "440804", + "name": "坡头区" + }, { + "code": "440811", + "name": "麻章区" + }, { + "code": "440823", + "name": "遂溪县" + }, { + "code": "440825", + "name": "徐闻县" + }, { + "code": "440881", + "name": "廉江市" + }, { + "code": "440882", + "name": "雷州市" + }, { + "code": "440883", + "name": "吴川市" + }] + }, { + "code": "4409", + "name": "茂名市", + "children": [{ + "code": "440902", + "name": "茂南区" + }, { + "code": "440904", + "name": "电白区" + }, { + "code": "440981", + "name": "高州市" + }, { + "code": "440982", + "name": "化州市" + }, { + "code": "440983", + "name": "信宜市" + }] + }, { + "code": "4412", + "name": "肇庆市", + "children": [{ + "code": "441202", + "name": "端州区" + }, { + "code": "441203", + "name": "鼎湖区" + }, { + "code": "441204", + "name": "高要区" + }, { + "code": "441223", + "name": "广宁县" + }, { + "code": "441224", + "name": "怀集县" + }, { + "code": "441225", + "name": "封开县" + }, { + "code": "441226", + "name": "德庆县" + }, { + "code": "441284", + "name": "四会市" + }] + }, { + "code": "4413", + "name": "惠州市", + "children": [{ + "code": "441302", + "name": "惠城区" + }, { + "code": "441303", + "name": "惠阳区" + }, { + "code": "441322", + "name": "博罗县" + }, { + "code": "441323", + "name": "惠东县" + }, { + "code": "441324", + "name": "龙门县" + }] + }, { + "code": "4414", + "name": "梅州市", + "children": [{ + "code": "441402", + "name": "梅江区" + }, { + "code": "441403", + "name": "梅县区" + }, { + "code": "441422", + "name": "大埔县" + }, { + "code": "441423", + "name": "丰顺县" + }, { + "code": "441424", + "name": "五华县" + }, { + "code": "441426", + "name": "平远县" + }, { + "code": "441427", + "name": "蕉岭县" + }, { + "code": "441481", + "name": "兴宁市" + }] + }, { + "code": "4415", + "name": "汕尾市", + "children": [{ + "code": "441502", + "name": "城区" + }, { + "code": "441521", + "name": "海丰县" + }, { + "code": "441523", + "name": "陆河县" + }, { + "code": "441581", + "name": "陆丰市" + }] + }, { + "code": "4416", + "name": "河源市", + "children": [{ + "code": "441602", + "name": "源城区" + }, { + "code": "441621", + "name": "紫金县" + }, { + "code": "441622", + "name": "龙川县" + }, { + "code": "441623", + "name": "连平县" + }, { + "code": "441624", + "name": "和平县" + }, { + "code": "441625", + "name": "东源县" + }] + }, { + "code": "4417", + "name": "阳江市", + "children": [{ + "code": "441702", + "name": "江城区" + }, { + "code": "441704", + "name": "阳东区" + }, { + "code": "441721", + "name": "阳西县" + }, { + "code": "441781", + "name": "阳春市" + }] + }, { + "code": "4418", + "name": "清远市", + "children": [{ + "code": "441802", + "name": "清城区" + }, { + "code": "441803", + "name": "清新区" + }, { + "code": "441821", + "name": "佛冈县" + }, { + "code": "441823", + "name": "阳山县" + }, { + "code": "441825", + "name": "连山壮族瑶族自治县" + }, { + "code": "441826", + "name": "连南瑶族自治县" + }, { + "code": "441881", + "name": "英德市" + }, { + "code": "441882", + "name": "连州市" + }] + }, { + "code": "4419", + "name": "东莞市", + "children": [{ + "code": "441901", + "name": "中堂镇" + }, { + "code": "441903", + "name": "南城街道" + }, { + "code": "441904", + "name": "长安镇" + }, { + "code": "441905", + "name": "东坑镇" + }, { + "code": "441906", + "name": "樟木头镇" + }, { + "code": "441907", + "name": "莞城街道" + }, { + "code": "441908", + "name": "石龙镇" + }, { + "code": "441909", + "name": "桥头镇" + }, { + "code": "441910", + "name": "万江街道" + }, { + "code": "441911", + "name": "麻涌镇" + }, { + "code": "441912", + "name": "虎门镇" + }, { + "code": "441913", + "name": "谢岗镇" + }, { + "code": "441914", + "name": "石碣镇" + }, { + "code": "441915", + "name": "茶山镇" + }, { + "code": "441916", + "name": "东城街道" + }, { + "code": "441917", + "name": "洪梅镇" + }, { + "code": "441918", + "name": "道滘镇" + }, { + "code": "441919", + "name": "高埗镇" + }, { + "code": "441920", + "name": "企石镇" + }, { + "code": "441921", + "name": "凤岗镇" + }, { + "code": "441922", + "name": "大岭山镇" + }, { + "code": "441923", + "name": "松山湖" + }, { + "code": "441924", + "name": "清溪镇" + }, { + "code": "441925", + "name": "望牛墩镇" + }, { + "code": "441926", + "name": "厚街镇" + }, { + "code": "441927", + "name": "常平镇" + }, { + "code": "441928", + "name": "寮步镇" + }, { + "code": "441929", + "name": "石排镇" + }, { + "code": "441930", + "name": "横沥镇" + }, { + "code": "441931", + "name": "塘厦镇" + }, { + "code": "441932", + "name": "黄江镇" + }, { + "code": "441933", + "name": "大朗镇" + }, { + "code": "441934", + "name": "东莞港" + }, { + "code": "441935", + "name": "东莞生态园" + }, { + "code": "441990", + "name": "沙田镇" + }], + }, { + "code": "4420", + "name": "中山市", + "children": [{ + "code": "442001", + "name": "南头镇" + }, { + "code": "442002", + "name": "神湾镇" + }, { + "code": "442003", + "name": "东凤镇" + }, { + "code": "442004", + "name": "五桂山街道" + }, { + "code": "442005", + "name": "黄圃镇" + }, { + "code": "442006", + "name": "小榄镇" + }, { + "code": "442007", + "name": "石岐街道" + }, { + "code": "442008", + "name": "横栏镇" + }, { + "code": "442009", + "name": "三角镇" + }, { + "code": "442010", + "name": "三乡镇" + }, { + "code": "442011", + "name": "港口镇" + }, { + "code": "442012", + "name": "沙溪镇" + }, { + "code": "442013", + "name": "板芙镇" + }, { + "code": "442015", + "name": "东升镇" + }, { + "code": "442016", + "name": "阜沙镇" + }, { + "code": "442017", + "name": "民众镇" + }, { + "code": "442018", + "name": "东区街道" + }, { + "code": "422019", + "name": "火炬开发区街道办事处" + }, { + "code": "442020", + "name": "西区街道" + }, { + "code": "442021", + "name": "南区街道" + }, { + "code": "442022", + "name": "古镇镇" + }, { + "code": "442023", + "name": "坦洲镇" + }, { + "code": "442024", + "name": "大涌镇" + }, { + "code": "442025", + "name": "南朗镇" + }] + }, { + "code": "4451", + "name": "潮州市", + "children": [{ + "code": "445102", + "name": "湘桥区" + }, { + "code": "445103", + "name": "潮安区" + }, { + "code": "445122", + "name": "饶平县" + }] + }, { + "code": "4452", + "name": "揭阳市", + "children": [{ + "code": "445202", + "name": "榕城区" + }, { + "code": "445203", + "name": "揭东区" + }, { + "code": "445222", + "name": "揭西县" + }, { + "code": "445224", + "name": "惠来县" + }, { + "code": "445281", + "name": "普宁市" + }] + }, { + "code": "4453", + "name": "云浮市", + "children": [{ + "code": "445302", + "name": "云城区" + }, { + "code": "445303", + "name": "云安区" + }, { + "code": "445321", + "name": "新兴县" + }, { + "code": "445322", + "name": "郁南县" + }, { + "code": "445381", + "name": "罗定市" + }] + }] +}, { + "code": "45", + "name": "广西壮族自治区", + "children": [{ + "code": "4501", + "name": "南宁市", + "children": [{ + "code": "450102", + "name": "兴宁区" + }, { + "code": "450103", + "name": "青秀区" + }, { + "code": "450105", + "name": "江南区" + }, { + "code": "450107", + "name": "西乡塘区" + }, { + "code": "450108", + "name": "良庆区" + }, { + "code": "450109", + "name": "邕宁区" + }, { + "code": "450110", + "name": "武鸣区" + }, { + "code": "450123", + "name": "隆安县" + }, { + "code": "450124", + "name": "马山县" + }, { + "code": "450125", + "name": "上林县" + }, { + "code": "450126", + "name": "宾阳县" + }, { + "code": "450127", + "name": "横县" + }] + }, { + "code": "4502", + "name": "柳州市", + "children": [{ + "code": "450202", + "name": "城中区" + }, { + "code": "450203", + "name": "鱼峰区" + }, { + "code": "450204", + "name": "柳南区" + }, { + "code": "450205", + "name": "柳北区" + }, { + "code": "450206", + "name": "柳江区" + }, { + "code": "450222", + "name": "柳城县" + }, { + "code": "450223", + "name": "鹿寨县" + }, { + "code": "450224", + "name": "融安县" + }, { + "code": "450225", + "name": "融水苗族自治县" + }, { + "code": "450226", + "name": "三江侗族自治县" + }] + }, { + "code": "4503", + "name": "桂林市", + "children": [{ + "code": "450302", + "name": "秀峰区" + }, { + "code": "450303", + "name": "叠彩区" + }, { + "code": "450304", + "name": "象山区" + }, { + "code": "450305", + "name": "七星区" + }, { + "code": "450311", + "name": "雁山区" + }, { + "code": "450312", + "name": "临桂区" + }, { + "code": "450321", + "name": "阳朔县" + }, { + "code": "450323", + "name": "灵川县" + }, { + "code": "450324", + "name": "全州县" + }, { + "code": "450325", + "name": "兴安县" + }, { + "code": "450326", + "name": "永福县" + }, { + "code": "450327", + "name": "灌阳县" + }, { + "code": "450328", + "name": "龙胜各族自治县" + }, { + "code": "450329", + "name": "资源县" + }, { + "code": "450330", + "name": "平乐县" + }, { + "code": "450332", + "name": "恭城瑶族自治县" + }, { + "code": "450381", + "name": "荔浦市" + }] + }, { + "code": "4504", + "name": "梧州市", + "children": [{ + "code": "450403", + "name": "万秀区" + }, { + "code": "450405", + "name": "长洲区" + }, { + "code": "450406", + "name": "龙圩区" + }, { + "code": "450421", + "name": "苍梧县" + }, { + "code": "450422", + "name": "藤县" + }, { + "code": "450423", + "name": "蒙山县" + }, { + "code": "450481", + "name": "岑溪市" + }] + }, { + "code": "4505", + "name": "北海市", + "children": [{ + "code": "450502", + "name": "海城区" + }, { + "code": "450503", + "name": "银海区" + }, { + "code": "450512", + "name": "铁山港区" + }, { + "code": "450521", + "name": "合浦县" + }] + }, { + "code": "4506", + "name": "防城港市", + "children": [{ + "code": "450602", + "name": "港口区" + }, { + "code": "450603", + "name": "防城区" + }, { + "code": "450621", + "name": "上思县" + }, { + "code": "450681", + "name": "东兴市" + }] + }, { + "code": "4507", + "name": "钦州市", + "children": [{ + "code": "450702", + "name": "钦南区" + }, { + "code": "450703", + "name": "钦北区" + }, { + "code": "450721", + "name": "灵山县" + }, { + "code": "450722", + "name": "浦北县" + }] + }, { + "code": "4508", + "name": "贵港市", + "children": [{ + "code": "450802", + "name": "港北区" + }, { + "code": "450803", + "name": "港南区" + }, { + "code": "450804", + "name": "覃塘区" + }, { + "code": "450821", + "name": "平南县" + }, { + "code": "450881", + "name": "桂平市" + }] + }, { + "code": "4509", + "name": "玉林市", + "children": [{ + "code": "450902", + "name": "玉州区" + }, { + "code": "450903", + "name": "福绵区" + }, { + "code": "450921", + "name": "容县" + }, { + "code": "450922", + "name": "陆川县" + }, { + "code": "450923", + "name": "博白县" + }, { + "code": "450924", + "name": "兴业县" + }, { + "code": "450981", + "name": "北流市" + }] + }, { + "code": "4510", + "name": "百色市", + "children": [{ + "code": "451002", + "name": "右江区" + }, { + "code": "451003", + "name": "田阳区" + }, { + "code": "451022", + "name": "田东县" + }, { + "code": "451024", + "name": "德保县" + }, { + "code": "451026", + "name": "那坡县" + }, { + "code": "451027", + "name": "凌云县" + }, { + "code": "451028", + "name": "乐业县" + }, { + "code": "451029", + "name": "田林县" + }, { + "code": "451030", + "name": "西林县" + }, { + "code": "451031", + "name": "隆林各族自治县" + }, { + "code": "451081", + "name": "靖西市" + }, { + "code": "451082", + "name": "平果市" + }] + }, { + "code": "4511", + "name": "贺州市", + "children": [{ + "code": "451102", + "name": "八步区" + }, { + "code": "451103", + "name": "平桂区" + }, { + "code": "451121", + "name": "昭平县" + }, { + "code": "451122", + "name": "钟山县" + }, { + "code": "451123", + "name": "富川瑶族自治县" + }] + }, { + "code": "4512", + "name": "河池市", + "children": [{ + "code": "451202", + "name": "金城江区" + }, { + "code": "451203", + "name": "宜州区" + }, { + "code": "451221", + "name": "南丹县" + }, { + "code": "451222", + "name": "天峨县" + }, { + "code": "451223", + "name": "凤山县" + }, { + "code": "451224", + "name": "东兰县" + }, { + "code": "451225", + "name": "罗城仫佬族自治县" + }, { + "code": "451226", + "name": "环江毛南族自治县" + }, { + "code": "451227", + "name": "巴马瑶族自治县" + }, { + "code": "451228", + "name": "都安瑶族自治县" + }, { + "code": "451229", + "name": "大化瑶族自治县" + }] + }, { + "code": "4513", + "name": "来宾市", + "children": [{ + "code": "451302", + "name": "兴宾区" + }, { + "code": "451321", + "name": "忻城县" + }, { + "code": "451322", + "name": "象州县" + }, { + "code": "451323", + "name": "武宣县" + }, { + "code": "451324", + "name": "金秀瑶族自治县" + }, { + "code": "451381", + "name": "合山市" + }] + }, { + "code": "4514", + "name": "崇左市", + "children": [{ + "code": "451402", + "name": "江州区" + }, { + "code": "451421", + "name": "扶绥县" + }, { + "code": "451422", + "name": "宁明县" + }, { + "code": "451423", + "name": "龙州县" + }, { + "code": "451424", + "name": "大新县" + }, { + "code": "451425", + "name": "天等县" + }, { + "code": "451481", + "name": "凭祥市" + }] + }] +}, { + "code": "46", + "name": "海南省", + "children": [{ + "code": "4601", + "name": "海口市", + "children": [{ + "code": "460105", + "name": "秀英区" + }, { + "code": "460106", + "name": "龙华区" + }, { + "code": "460107", + "name": "琼山区" + }, { + "code": "460108", + "name": "美兰区" + }] + }, { + "code": "4602", + "name": "三亚市", + "children": [{ + "code": "460202", + "name": "海棠区" + }, { + "code": "460203", + "name": "吉阳区" + }, { + "code": "460204", + "name": "天涯区" + }, { + "code": "460205", + "name": "崖州区" + }] + }, { + "code": "4603", + "name": "三沙市", + "children": [{ + "code": "460321", + "name": "西沙群岛" + }, { + "code": "460322", + "name": "南沙群岛" + }, { + "code": "460323", + "name": "中沙群岛的岛礁及其海域" + }] + }, { + "code": "4604", + "name": "儋州市", + "children": [{ + "code": "460400100", + "name": "那大镇" + }, { + "code": "460400101", + "name": "和庆镇" + }, { + "code": "460400102", + "name": "南丰镇" + }, { + "code": "460400103", + "name": "大成镇" + }, { + "code": "460400104", + "name": "雅星镇" + }, { + "code": "460400105", + "name": "兰洋镇" + }, { + "code": "460400106", + "name": "光村镇" + }, { + "code": "460400107", + "name": "木棠镇" + }, { + "code": "460400108", + "name": "海头镇" + }, { + "code": "460400109", + "name": "峨蔓镇" + }, { + "code": "460400111", + "name": "王五镇" + }, { + "code": "460400112", + "name": "白马井镇" + }, { + "code": "460400113", + "name": "中和镇" + }, { + "code": "460400114", + "name": "排浦镇" + }, { + "code": "460400115", + "name": "东成镇" + }, { + "code": "460400116", + "name": "新州镇" + }, { + "code": "460400499", + "name": "洋浦经济开发区" + }, { + "code": "460400500", + "name": "华南热作学院" + }] + }, { + "code": "4690", + "name": "省直辖县级行政区划", + "children": [{ + "code": "469001", + "name": "五指山市" + }, { + "code": "469002", + "name": "琼海市" + }, { + "code": "469005", + "name": "文昌市" + }, { + "code": "469006", + "name": "万宁市" + }, { + "code": "469007", + "name": "东方市" + }, { + "code": "469021", + "name": "定安县" + }, { + "code": "469022", + "name": "屯昌县" + }, { + "code": "469023", + "name": "澄迈县" + }, { + "code": "469024", + "name": "临高县" + }, { + "code": "469025", + "name": "白沙黎族自治县" + }, { + "code": "469026", + "name": "昌江黎族自治县" + }, { + "code": "469027", + "name": "乐东黎族自治县" + }, { + "code": "469028", + "name": "陵水黎族自治县" + }, { + "code": "469029", + "name": "保亭黎族苗族自治县" + }, { + "code": "469030", + "name": "琼中黎族苗族自治县" + }] + }] +}, { + "code": "50", + "name": "重庆市", + "children": [{ + "code": "5001", + "name": "市辖区", + "children": [{ + "code": "500101", + "name": "万州区" + }, { + "code": "500102", + "name": "涪陵区" + }, { + "code": "500103", + "name": "渝中区" + }, { + "code": "500104", + "name": "大渡口区" + }, { + "code": "500105", + "name": "江北区" + }, { + "code": "500106", + "name": "沙坪坝区" + }, { + "code": "500107", + "name": "九龙坡区" + }, { + "code": "500108", + "name": "南岸区" + }, { + "code": "500109", + "name": "北碚区" + }, { + "code": "500110", + "name": "綦江区" + }, { + "code": "500111", + "name": "大足区" + }, { + "code": "500112", + "name": "渝北区" + }, { + "code": "500113", + "name": "巴南区" + }, { + "code": "500114", + "name": "黔江区" + }, { + "code": "500115", + "name": "长寿区" + }, { + "code": "500116", + "name": "江津区" + }, { + "code": "500117", + "name": "合川区" + }, { + "code": "500118", + "name": "永川区" + }, { + "code": "500119", + "name": "南川区" + }, { + "code": "500120", + "name": "璧山区" + }, { + "code": "500151", + "name": "铜梁区" + }, { + "code": "500152", + "name": "潼南区" + }, { + "code": "500153", + "name": "荣昌区" + }, { + "code": "500154", + "name": "开州区" + }, { + "code": "500155", + "name": "梁平区" + }, { + "code": "500156", + "name": "武隆区" + }] + }, { + "code": "5002", + "name": "县", + "children": [{ + "code": "500229", + "name": "城口县" + }, { + "code": "500230", + "name": "丰都县" + }, { + "code": "500231", + "name": "垫江县" + }, { + "code": "500233", + "name": "忠县" + }, { + "code": "500235", + "name": "云阳县" + }, { + "code": "500236", + "name": "奉节县" + }, { + "code": "500237", + "name": "巫山县" + }, { + "code": "500238", + "name": "巫溪县" + }, { + "code": "500240", + "name": "石柱土家族自治县" + }, { + "code": "500241", + "name": "秀山土家族苗族自治县" + }, { + "code": "500242", + "name": "酉阳土家族苗族自治县" + }, { + "code": "500243", + "name": "彭水苗族土家族自治县" + }] + }] +}, { + "code": "51", + "name": "四川省", + "children": [{ + "code": "5101", + "name": "成都市", + "children": [{ + "code": "510104", + "name": "锦江区" + }, { + "code": "510105", + "name": "青羊区" + }, { + "code": "510106", + "name": "金牛区" + }, { + "code": "510107", + "name": "武侯区" + }, { + "code": "510108", + "name": "成华区" + }, { + "code": "510112", + "name": "龙泉驿区" + }, { + "code": "510113", + "name": "青白江区" + }, { + "code": "510114", + "name": "新都区" + }, { + "code": "510115", + "name": "温江区" + }, { + "code": "510116", + "name": "双流区" + }, { + "code": "510117", + "name": "郫都区" + }, { + "code": "510118", + "name": "新津区" + }, { + "code": "510121", + "name": "金堂县" + }, { + "code": "510129", + "name": "大邑县" + }, { + "code": "510131", + "name": "蒲江县" + }, { + "code": "510181", + "name": "都江堰市" + }, { + "code": "510182", + "name": "彭州市" + }, { + "code": "510183", + "name": "邛崃市" + }, { + "code": "510184", + "name": "崇州市" + }, { + "code": "510185", + "name": "简阳市" + }] + }, { + "code": "5103", + "name": "自贡市", + "children": [{ + "code": "510302", + "name": "自流井区" + }, { + "code": "510303", + "name": "贡井区" + }, { + "code": "510304", + "name": "大安区" + }, { + "code": "510311", + "name": "沿滩区" + }, { + "code": "510321", + "name": "荣县" + }, { + "code": "510322", + "name": "富顺县" + }] + }, { + "code": "5104", + "name": "攀枝花市", + "children": [{ + "code": "510402", + "name": "东区" + }, { + "code": "510403", + "name": "西区" + }, { + "code": "510411", + "name": "仁和区" + }, { + "code": "510421", + "name": "米易县" + }, { + "code": "510422", + "name": "盐边县" + }] + }, { + "code": "5105", + "name": "泸州市", + "children": [{ + "code": "510502", + "name": "江阳区" + }, { + "code": "510503", + "name": "纳溪区" + }, { + "code": "510504", + "name": "龙马潭区" + }, { + "code": "510521", + "name": "泸县" + }, { + "code": "510522", + "name": "合江县" + }, { + "code": "510524", + "name": "叙永县" + }, { + "code": "510525", + "name": "古蔺县" + }] + }, { + "code": "5106", + "name": "德阳市", + "children": [{ + "code": "510603", + "name": "旌阳区" + }, { + "code": "510604", + "name": "罗江区" + }, { + "code": "510623", + "name": "中江县" + }, { + "code": "510681", + "name": "广汉市" + }, { + "code": "510682", + "name": "什邡市" + }, { + "code": "510683", + "name": "绵竹市" + }] + }, { + "code": "5107", + "name": "绵阳市", + "children": [{ + "code": "510703", + "name": "涪城区" + }, { + "code": "510704", + "name": "游仙区" + }, { + "code": "510705", + "name": "安州区" + }, { + "code": "510722", + "name": "三台县" + }, { + "code": "510723", + "name": "盐亭县" + }, { + "code": "510725", + "name": "梓潼县" + }, { + "code": "510726", + "name": "北川羌族自治县" + }, { + "code": "510727", + "name": "平武县" + }, { + "code": "510781", + "name": "江油市" + }] + }, { + "code": "5108", + "name": "广元市", + "children": [{ + "code": "510802", + "name": "利州区" + }, { + "code": "510811", + "name": "昭化区" + }, { + "code": "510812", + "name": "朝天区" + }, { + "code": "510821", + "name": "旺苍县" + }, { + "code": "510822", + "name": "青川县" + }, { + "code": "510823", + "name": "剑阁县" + }, { + "code": "510824", + "name": "苍溪县" + }] + }, { + "code": "5109", + "name": "遂宁市", + "children": [{ + "code": "510903", + "name": "船山区" + }, { + "code": "510904", + "name": "安居区" + }, { + "code": "510921", + "name": "蓬溪县" + }, { + "code": "510923", + "name": "大英县" + }, { + "code": "510981", + "name": "射洪市" + }] + }, { + "code": "5110", + "name": "内江市", + "children": [{ + "code": "511002", + "name": "市中区" + }, { + "code": "511011", + "name": "东兴区" + }, { + "code": "511024", + "name": "威远县" + }, { + "code": "511025", + "name": "资中县" + }, { + "code": "511071", + "name": "内江经济开发区" + }, { + "code": "511083", + "name": "隆昌市" + }] + }, { + "code": "5111", + "name": "乐山市", + "children": [{ + "code": "511102", + "name": "市中区" + }, { + "code": "511111", + "name": "沙湾区" + }, { + "code": "511112", + "name": "五通桥区" + }, { + "code": "511113", + "name": "金口河区" + }, { + "code": "511123", + "name": "犍为县" + }, { + "code": "511124", + "name": "井研县" + }, { + "code": "511126", + "name": "夹江县" + }, { + "code": "511129", + "name": "沐川县" + }, { + "code": "511132", + "name": "峨边彝族自治县" + }, { + "code": "511133", + "name": "马边彝族自治县" + }, { + "code": "511181", + "name": "峨眉山市" + }] + }, { + "code": "5113", + "name": "南充市", + "children": [{ + "code": "511302", + "name": "顺庆区" + }, { + "code": "511303", + "name": "高坪区" + }, { + "code": "511304", + "name": "嘉陵区" + }, { + "code": "511321", + "name": "南部县" + }, { + "code": "511322", + "name": "营山县" + }, { + "code": "511323", + "name": "蓬安县" + }, { + "code": "511324", + "name": "仪陇县" + }, { + "code": "511325", + "name": "西充县" + }, { + "code": "511381", + "name": "阆中市" + }] + }, { + "code": "5114", + "name": "眉山市", + "children": [{ + "code": "511402", + "name": "东坡区" + }, { + "code": "511403", + "name": "彭山区" + }, { + "code": "511421", + "name": "仁寿县" + }, { + "code": "511423", + "name": "洪雅县" + }, { + "code": "511424", + "name": "丹棱县" + }, { + "code": "511425", + "name": "青神县" + }] + }, { + "code": "5115", + "name": "宜宾市", + "children": [{ + "code": "511502", + "name": "翠屏区" + }, { + "code": "511503", + "name": "南溪区" + }, { + "code": "511504", + "name": "叙州区" + }, { + "code": "511523", + "name": "江安县" + }, { + "code": "511524", + "name": "长宁县" + }, { + "code": "511525", + "name": "高县" + }, { + "code": "511526", + "name": "珙县" + }, { + "code": "511527", + "name": "筠连县" + }, { + "code": "511528", + "name": "兴文县" + }, { + "code": "511529", + "name": "屏山县" + }] + }, { + "code": "5116", + "name": "广安市", + "children": [{ + "code": "511602", + "name": "广安区" + }, { + "code": "511603", + "name": "前锋区" + }, { + "code": "511621", + "name": "岳池县" + }, { + "code": "511622", + "name": "武胜县" + }, { + "code": "511623", + "name": "邻水县" + }, { + "code": "511681", + "name": "华蓥市" + }] + }, { + "code": "5117", + "name": "达州市", + "children": [{ + "code": "511702", + "name": "通川区" + }, { + "code": "511703", + "name": "达川区" + }, { + "code": "511722", + "name": "宣汉县" + }, { + "code": "511723", + "name": "开江县" + }, { + "code": "511724", + "name": "大竹县" + }, { + "code": "511725", + "name": "渠县" + }, { + "code": "511771", + "name": "达州经济开发区" + }, { + "code": "511781", + "name": "万源市" + }] + }, { + "code": "5118", + "name": "雅安市", + "children": [{ + "code": "511802", + "name": "雨城区" + }, { + "code": "511803", + "name": "名山区" + }, { + "code": "511822", + "name": "荥经县" + }, { + "code": "511823", + "name": "汉源县" + }, { + "code": "511824", + "name": "石棉县" + }, { + "code": "511825", + "name": "天全县" + }, { + "code": "511826", + "name": "芦山县" + }, { + "code": "511827", + "name": "宝兴县" + }] + }, { + "code": "5119", + "name": "巴中市", + "children": [{ + "code": "511902", + "name": "巴州区" + }, { + "code": "511903", + "name": "恩阳区" + }, { + "code": "511921", + "name": "通江县" + }, { + "code": "511922", + "name": "南江县" + }, { + "code": "511923", + "name": "平昌县" + }, { + "code": "511971", + "name": "巴中经济开发区" + }] + }, { + "code": "5120", + "name": "资阳市", + "children": [{ + "code": "512002", + "name": "雁江区" + }, { + "code": "512021", + "name": "安岳县" + }, { + "code": "512022", + "name": "乐至县" + }] + }, { + "code": "5132", + "name": "阿坝藏族羌族自治州", + "children": [{ + "code": "513201", + "name": "马尔康市" + }, { + "code": "513221", + "name": "汶川县" + }, { + "code": "513222", + "name": "理县" + }, { + "code": "513223", + "name": "茂县" + }, { + "code": "513224", + "name": "松潘县" + }, { + "code": "513225", + "name": "九寨沟县" + }, { + "code": "513226", + "name": "金川县" + }, { + "code": "513227", + "name": "小金县" + }, { + "code": "513228", + "name": "黑水县" + }, { + "code": "513230", + "name": "壤塘县" + }, { + "code": "513231", + "name": "阿坝县" + }, { + "code": "513232", + "name": "若尔盖县" + }, { + "code": "513233", + "name": "红原县" + }] + }, { + "code": "5133", + "name": "甘孜藏族自治州", + "children": [{ + "code": "513301", + "name": "康定市" + }, { + "code": "513322", + "name": "泸定县" + }, { + "code": "513323", + "name": "丹巴县" + }, { + "code": "513324", + "name": "九龙县" + }, { + "code": "513325", + "name": "雅江县" + }, { + "code": "513326", + "name": "道孚县" + }, { + "code": "513327", + "name": "炉霍县" + }, { + "code": "513328", + "name": "甘孜县" + }, { + "code": "513329", + "name": "新龙县" + }, { + "code": "513330", + "name": "德格县" + }, { + "code": "513331", + "name": "白玉县" + }, { + "code": "513332", + "name": "石渠县" + }, { + "code": "513333", + "name": "色达县" + }, { + "code": "513334", + "name": "理塘县" + }, { + "code": "513335", + "name": "巴塘县" + }, { + "code": "513336", + "name": "乡城县" + }, { + "code": "513337", + "name": "稻城县" + }, { + "code": "513338", + "name": "得荣县" + }] + }, { + "code": "5134", + "name": "凉山彝族自治州", + "children": [{ + "code": "513401", + "name": "西昌市" + }, { + "code": "513422", + "name": "木里藏族自治县" + }, { + "code": "513423", + "name": "盐源县" + }, { + "code": "513424", + "name": "德昌县" + }, { + "code": "513425", + "name": "会理县" + }, { + "code": "513426", + "name": "会东县" + }, { + "code": "513427", + "name": "宁南县" + }, { + "code": "513428", + "name": "普格县" + }, { + "code": "513429", + "name": "布拖县" + }, { + "code": "513430", + "name": "金阳县" + }, { + "code": "513431", + "name": "昭觉县" + }, { + "code": "513432", + "name": "喜德县" + }, { + "code": "513433", + "name": "冕宁县" + }, { + "code": "513434", + "name": "越西县" + }, { + "code": "513435", + "name": "甘洛县" + }, { + "code": "513436", + "name": "美姑县" + }, { + "code": "513437", + "name": "雷波县" + }] + }] +}, { + "code": "52", + "name": "贵州省", + "children": [{ + "code": "5201", + "name": "贵阳市", + "children": [{ + "code": "520102", + "name": "南明区" + }, { + "code": "520103", + "name": "云岩区" + }, { + "code": "520111", + "name": "花溪区" + }, { + "code": "520112", + "name": "乌当区" + }, { + "code": "520113", + "name": "白云区" + }, { + "code": "520115", + "name": "观山湖区" + }, { + "code": "520121", + "name": "开阳县" + }, { + "code": "520122", + "name": "息烽县" + }, { + "code": "520123", + "name": "修文县" + }, { + "code": "520181", + "name": "清镇市" + }] + }, { + "code": "5202", + "name": "六盘水市", + "children": [{ + "code": "520201", + "name": "钟山区" + }, { + "code": "520203", + "name": "六枝特区" + }, { + "code": "520221", + "name": "水城县" + }, { + "code": "520281", + "name": "盘州市" + }] + }, { + "code": "5203", + "name": "遵义市", + "children": [{ + "code": "520302", + "name": "红花岗区" + }, { + "code": "520303", + "name": "汇川区" + }, { + "code": "520304", + "name": "播州区" + }, { + "code": "520322", + "name": "桐梓县" + }, { + "code": "520323", + "name": "绥阳县" + }, { + "code": "520324", + "name": "正安县" + }, { + "code": "520325", + "name": "道真仡佬族苗族自治县" + }, { + "code": "520326", + "name": "务川仡佬族苗族自治县" + }, { + "code": "520327", + "name": "凤冈县" + }, { + "code": "520328", + "name": "湄潭县" + }, { + "code": "520329", + "name": "余庆县" + }, { + "code": "520330", + "name": "习水县" + }, { + "code": "520381", + "name": "赤水市" + }, { + "code": "520382", + "name": "仁怀市" + }] + }, { + "code": "5204", + "name": "安顺市", + "children": [{ + "code": "520402", + "name": "西秀区" + }, { + "code": "520403", + "name": "平坝区" + }, { + "code": "520422", + "name": "普定县" + }, { + "code": "520423", + "name": "镇宁布依族苗族自治县" + }, { + "code": "520424", + "name": "关岭布依族苗族自治县" + }, { + "code": "520425", + "name": "紫云苗族布依族自治县" + }] + }, { + "code": "5205", + "name": "毕节市", + "children": [{ + "code": "520502", + "name": "七星关区" + }, { + "code": "520521", + "name": "大方县" + }, { + "code": "520522", + "name": "黔西县" + }, { + "code": "520523", + "name": "金沙县" + }, { + "code": "520524", + "name": "织金县" + }, { + "code": "520525", + "name": "纳雍县" + }, { + "code": "520526", + "name": "威宁彝族回族苗族自治县" + }, { + "code": "520527", + "name": "赫章县" + }] + }, { + "code": "5206", + "name": "铜仁市", + "children": [{ + "code": "520602", + "name": "碧江区" + }, { + "code": "520603", + "name": "万山区" + }, { + "code": "520621", + "name": "江口县" + }, { + "code": "520622", + "name": "玉屏侗族自治县" + }, { + "code": "520623", + "name": "石阡县" + }, { + "code": "520624", + "name": "思南县" + }, { + "code": "520625", + "name": "印江土家族苗族自治县" + }, { + "code": "520626", + "name": "德江县" + }, { + "code": "520627", + "name": "沿河土家族自治县" + }, { + "code": "520628", + "name": "松桃苗族自治县" + }] + }, { + "code": "5223", + "name": "黔西南布依族苗族自治州", + "children": [{ + "code": "522301", + "name": "兴义市" + }, { + "code": "522302", + "name": "兴仁市" + }, { + "code": "522323", + "name": "普安县" + }, { + "code": "522324", + "name": "晴隆县" + }, { + "code": "522325", + "name": "贞丰县" + }, { + "code": "522326", + "name": "望谟县" + }, { + "code": "522327", + "name": "册亨县" + }, { + "code": "522328", + "name": "安龙县" + }] + }, { + "code": "5226", + "name": "黔东南苗族侗族自治州", + "children": [{ + "code": "522601", + "name": "凯里市" + }, { + "code": "522622", + "name": "黄平县" + }, { + "code": "522623", + "name": "施秉县" + }, { + "code": "522624", + "name": "三穗县" + }, { + "code": "522625", + "name": "镇远县" + }, { + "code": "522626", + "name": "岑巩县" + }, { + "code": "522627", + "name": "天柱县" + }, { + "code": "522628", + "name": "锦屏县" + }, { + "code": "522629", + "name": "剑河县" + }, { + "code": "522630", + "name": "台江县" + }, { + "code": "522631", + "name": "黎平县" + }, { + "code": "522632", + "name": "榕江县" + }, { + "code": "522633", + "name": "从江县" + }, { + "code": "522634", + "name": "雷山县" + }, { + "code": "522635", + "name": "麻江县" + }, { + "code": "522636", + "name": "丹寨县" + }] + }, { + "code": "5227", + "name": "黔南布依族苗族自治州", + "children": [{ + "code": "522701", + "name": "都匀市" + }, { + "code": "522702", + "name": "福泉市" + }, { + "code": "522722", + "name": "荔波县" + }, { + "code": "522723", + "name": "贵定县" + }, { + "code": "522725", + "name": "瓮安县" + }, { + "code": "522726", + "name": "独山县" + }, { + "code": "522727", + "name": "平塘县" + }, { + "code": "522728", + "name": "罗甸县" + }, { + "code": "522729", + "name": "长顺县" + }, { + "code": "522730", + "name": "龙里县" + }, { + "code": "522731", + "name": "惠水县" + }, { + "code": "522732", + "name": "三都水族自治县" + }] + }] +}, { + "code": "53", + "name": "云南省", + "children": [{ + "code": "5301", + "name": "昆明市", + "children": [{ + "code": "530102", + "name": "五华区" + }, { + "code": "530103", + "name": "盘龙区" + }, { + "code": "530111", + "name": "官渡区" + }, { + "code": "530112", + "name": "西山区" + }, { + "code": "530113", + "name": "东川区" + }, { + "code": "530114", + "name": "呈贡区" + }, { + "code": "530115", + "name": "晋宁区" + }, { + "code": "530124", + "name": "富民县" + }, { + "code": "530125", + "name": "宜良县" + }, { + "code": "530126", + "name": "石林彝族自治县" + }, { + "code": "530127", + "name": "嵩明县" + }, { + "code": "530128", + "name": "禄劝彝族苗族自治县" + }, { + "code": "530129", + "name": "寻甸回族彝族自治县" + }, { + "code": "530181", + "name": "安宁市" + }] + }, { + "code": "5303", + "name": "曲靖市", + "children": [{ + "code": "530302", + "name": "麒麟区" + }, { + "code": "530303", + "name": "沾益区" + }, { + "code": "530304", + "name": "马龙区" + }, { + "code": "530322", + "name": "陆良县" + }, { + "code": "530323", + "name": "师宗县" + }, { + "code": "530324", + "name": "罗平县" + }, { + "code": "530325", + "name": "富源县" + }, { + "code": "530326", + "name": "会泽县" + }, { + "code": "530381", + "name": "宣威市" + }] + }, { + "code": "5304", + "name": "玉溪市", + "children": [{ + "code": "530402", + "name": "红塔区" + }, { + "code": "530403", + "name": "江川区" + }, { + "code": "530423", + "name": "通海县" + }, { + "code": "530424", + "name": "华宁县" + }, { + "code": "530425", + "name": "易门县" + }, { + "code": "530426", + "name": "峨山彝族自治县" + }, { + "code": "530427", + "name": "新平彝族傣族自治县" + }, { + "code": "530428", + "name": "元江哈尼族彝族傣族自治县" + }, { + "code": "530481", + "name": "澄江市" + }] + }, { + "code": "5305", + "name": "保山市", + "children": [{ + "code": "530502", + "name": "隆阳区" + }, { + "code": "530521", + "name": "施甸县" + }, { + "code": "530523", + "name": "龙陵县" + }, { + "code": "530524", + "name": "昌宁县" + }, { + "code": "530581", + "name": "腾冲市" + }] + }, { + "code": "5306", + "name": "昭通市", + "children": [{ + "code": "530602", + "name": "昭阳区" + }, { + "code": "530621", + "name": "鲁甸县" + }, { + "code": "530622", + "name": "巧家县" + }, { + "code": "530623", + "name": "盐津县" + }, { + "code": "530624", + "name": "大关县" + }, { + "code": "530625", + "name": "永善县" + }, { + "code": "530626", + "name": "绥江县" + }, { + "code": "530627", + "name": "镇雄县" + }, { + "code": "530628", + "name": "彝良县" + }, { + "code": "530629", + "name": "威信县" + }, { + "code": "530681", + "name": "水富市" + }] + }, { + "code": "5307", + "name": "丽江市", + "children": [{ + "code": "530702", + "name": "古城区" + }, { + "code": "530721", + "name": "玉龙纳西族自治县" + }, { + "code": "530722", + "name": "永胜县" + }, { + "code": "530723", + "name": "华坪县" + }, { + "code": "530724", + "name": "宁蒗彝族自治县" + }] + }, { + "code": "5308", + "name": "普洱市", + "children": [{ + "code": "530802", + "name": "思茅区" + }, { + "code": "530821", + "name": "宁洱哈尼族彝族自治县" + }, { + "code": "530822", + "name": "墨江哈尼族自治县" + }, { + "code": "530823", + "name": "景东彝族自治县" + }, { + "code": "530824", + "name": "景谷傣族彝族自治县" + }, { + "code": "530825", + "name": "镇沅彝族哈尼族拉祜族自治县" + }, { + "code": "530826", + "name": "江城哈尼族彝族自治县" + }, { + "code": "530827", + "name": "孟连傣族拉祜族佤族自治县" + }, { + "code": "530828", + "name": "澜沧拉祜族自治县" + }, { + "code": "530829", + "name": "西盟佤族自治县" + }] + }, { + "code": "5309", + "name": "临沧市", + "children": [{ + "code": "530902", + "name": "临翔区" + }, { + "code": "530921", + "name": "凤庆县" + }, { + "code": "530922", + "name": "云县" + }, { + "code": "530923", + "name": "永德县" + }, { + "code": "530924", + "name": "镇康县" + }, { + "code": "530925", + "name": "双江拉祜族佤族布朗族傣族自治县" + }, { + "code": "530926", + "name": "耿马傣族佤族自治县" + }, { + "code": "530927", + "name": "沧源佤族自治县" + }] + }, { + "code": "5323", + "name": "楚雄彝族自治州", + "children": [{ + "code": "532301", + "name": "楚雄市" + }, { + "code": "532322", + "name": "双柏县" + }, { + "code": "532323", + "name": "牟定县" + }, { + "code": "532324", + "name": "南华县" + }, { + "code": "532325", + "name": "姚安县" + }, { + "code": "532326", + "name": "大姚县" + }, { + "code": "532327", + "name": "永仁县" + }, { + "code": "532328", + "name": "元谋县" + }, { + "code": "532329", + "name": "武定县" + }, { + "code": "532331", + "name": "禄丰县" + }] + }, { + "code": "5325", + "name": "红河哈尼族彝族自治州", + "children": [{ + "code": "532501", + "name": "个旧市" + }, { + "code": "532502", + "name": "开远市" + }, { + "code": "532503", + "name": "蒙自市" + }, { + "code": "532504", + "name": "弥勒市" + }, { + "code": "532523", + "name": "屏边苗族自治县" + }, { + "code": "532524", + "name": "建水县" + }, { + "code": "532525", + "name": "石屏县" + }, { + "code": "532527", + "name": "泸西县" + }, { + "code": "532528", + "name": "元阳县" + }, { + "code": "532529", + "name": "红河县" + }, { + "code": "532530", + "name": "金平苗族瑶族傣族自治县" + }, { + "code": "532531", + "name": "绿春县" + }, { + "code": "532532", + "name": "河口瑶族自治县" + }] + }, { + "code": "5326", + "name": "文山壮族苗族自治州", + "children": [{ + "code": "532601", + "name": "文山市" + }, { + "code": "532622", + "name": "砚山县" + }, { + "code": "532623", + "name": "西畴县" + }, { + "code": "532624", + "name": "麻栗坡县" + }, { + "code": "532625", + "name": "马关县" + }, { + "code": "532626", + "name": "丘北县" + }, { + "code": "532627", + "name": "广南县" + }, { + "code": "532628", + "name": "富宁县" + }] + }, { + "code": "5328", + "name": "西双版纳傣族自治州", + "children": [{ + "code": "532801", + "name": "景洪市" + }, { + "code": "532822", + "name": "勐海县" + }, { + "code": "532823", + "name": "勐腊县" + }] + }, { + "code": "5329", + "name": "大理白族自治州", + "children": [{ + "code": "532901", + "name": "大理市" + }, { + "code": "532922", + "name": "漾濞彝族自治县" + }, { + "code": "532923", + "name": "祥云县" + }, { + "code": "532924", + "name": "宾川县" + }, { + "code": "532925", + "name": "弥渡县" + }, { + "code": "532926", + "name": "南涧彝族自治县" + }, { + "code": "532927", + "name": "巍山彝族回族自治县" + }, { + "code": "532928", + "name": "永平县" + }, { + "code": "532929", + "name": "云龙县" + }, { + "code": "532930", + "name": "洱源县" + }, { + "code": "532931", + "name": "剑川县" + }, { + "code": "532932", + "name": "鹤庆县" + }] + }, { + "code": "5331", + "name": "德宏傣族景颇族自治州", + "children": [{ + "code": "533102", + "name": "瑞丽市" + }, { + "code": "533103", + "name": "芒市" + }, { + "code": "533122", + "name": "梁河县" + }, { + "code": "533123", + "name": "盈江县" + }, { + "code": "533124", + "name": "陇川县" + }] + }, { + "code": "5333", + "name": "怒江傈僳族自治州", + "children": [{ + "code": "533301", + "name": "泸水市" + }, { + "code": "533323", + "name": "福贡县" + }, { + "code": "533324", + "name": "贡山独龙族怒族自治县" + }, { + "code": "533325", + "name": "兰坪白族普米族自治县" + }] + }, { + "code": "5334", + "name": "迪庆藏族自治州", + "children": [{ + "code": "533401", + "name": "香格里拉市" + }, { + "code": "533422", + "name": "德钦县" + }, { + "code": "533423", + "name": "维西傈僳族自治县" + }] + }] +}, { + "code": "54", + "name": "西藏自治区", + "children": [{ + "code": "5401", + "name": "拉萨市", + "children": [{ + "code": "540102", + "name": "城关区" + }, { + "code": "540103", + "name": "堆龙德庆区" + }, { + "code": "540104", + "name": "达孜区" + }, { + "code": "540121", + "name": "林周县" + }, { + "code": "540122", + "name": "当雄县" + }, { + "code": "540123", + "name": "尼木县" + }, { + "code": "540124", + "name": "曲水县" + }, { + "code": "540127", + "name": "墨竹工卡县" + }, { + "code": "540171", + "name": "格尔木藏青工业园区" + }, { + "code": "540172", + "name": "拉萨经济技术开发区" + }, { + "code": "540173", + "name": "西藏文化旅游创意园区" + }, { + "code": "540174", + "name": "达孜工业园区" + }] + }, { + "code": "5402", + "name": "日喀则市", + "children": [{ + "code": "540202", + "name": "桑珠孜区" + }, { + "code": "540221", + "name": "南木林县" + }, { + "code": "540222", + "name": "江孜县" + }, { + "code": "540223", + "name": "定日县" + }, { + "code": "540224", + "name": "萨迦县" + }, { + "code": "540225", + "name": "拉孜县" + }, { + "code": "540226", + "name": "昂仁县" + }, { + "code": "540227", + "name": "谢通门县" + }, { + "code": "540228", + "name": "白朗县" + }, { + "code": "540229", + "name": "仁布县" + }, { + "code": "540230", + "name": "康马县" + }, { + "code": "540231", + "name": "定结县" + }, { + "code": "540232", + "name": "仲巴县" + }, { + "code": "540233", + "name": "亚东县" + }, { + "code": "540234", + "name": "吉隆县" + }, { + "code": "540235", + "name": "聂拉木县" + }, { + "code": "540236", + "name": "萨嘎县" + }, { + "code": "540237", + "name": "岗巴县" + }] + }, { + "code": "5403", + "name": "昌都市", + "children": [{ + "code": "540302", + "name": "卡若区" + }, { + "code": "540321", + "name": "江达县" + }, { + "code": "540322", + "name": "贡觉县" + }, { + "code": "540323", + "name": "类乌齐县" + }, { + "code": "540324", + "name": "丁青县" + }, { + "code": "540325", + "name": "察雅县" + }, { + "code": "540326", + "name": "八宿县" + }, { + "code": "540327", + "name": "左贡县" + }, { + "code": "540328", + "name": "芒康县" + }, { + "code": "540329", + "name": "洛隆县" + }, { + "code": "540330", + "name": "边坝县" + }] + }, { + "code": "5404", + "name": "林芝市", + "children": [{ + "code": "540402", + "name": "巴宜区" + }, { + "code": "540421", + "name": "工布江达县" + }, { + "code": "540422", + "name": "米林县" + }, { + "code": "540423", + "name": "墨脱县" + }, { + "code": "540424", + "name": "波密县" + }, { + "code": "540425", + "name": "察隅县" + }, { + "code": "540426", + "name": "朗县" + }] + }, { + "code": "5405", + "name": "山南市", + "children": [{ + "code": "540502", + "name": "乃东区" + }, { + "code": "540521", + "name": "扎囊县" + }, { + "code": "540522", + "name": "贡嘎县" + }, { + "code": "540523", + "name": "桑日县" + }, { + "code": "540524", + "name": "琼结县" + }, { + "code": "540525", + "name": "曲松县" + }, { + "code": "540526", + "name": "措美县" + }, { + "code": "540527", + "name": "洛扎县" + }, { + "code": "540528", + "name": "加查县" + }, { + "code": "540529", + "name": "隆子县" + }, { + "code": "540530", + "name": "错那县" + }, { + "code": "540531", + "name": "浪卡子县" + }] + }, { + "code": "5406", + "name": "那曲市", + "children": [{ + "code": "540602", + "name": "色尼区" + }, { + "code": "540621", + "name": "嘉黎县" + }, { + "code": "540622", + "name": "比如县" + }, { + "code": "540623", + "name": "聂荣县" + }, { + "code": "540624", + "name": "安多县" + }, { + "code": "540625", + "name": "申扎县" + }, { + "code": "540626", + "name": "索县" + }, { + "code": "540627", + "name": "班戈县" + }, { + "code": "540628", + "name": "巴青县" + }, { + "code": "540629", + "name": "尼玛县" + }, { + "code": "540630", + "name": "双湖县" + }] + }, { + "code": "5425", + "name": "阿里地区", + "children": [{ + "code": "542521", + "name": "普兰县" + }, { + "code": "542522", + "name": "札达县" + }, { + "code": "542523", + "name": "噶尔县" + }, { + "code": "542524", + "name": "日土县" + }, { + "code": "542525", + "name": "革吉县" + }, { + "code": "542526", + "name": "改则县" + }, { + "code": "542527", + "name": "措勤县" + }] + }] +}, { + "code": "61", + "name": "陕西省", + "children": [{ + "code": "6101", + "name": "西安市", + "children": [{ + "code": "610102", + "name": "新城区" + }, { + "code": "610103", + "name": "碑林区" + }, { + "code": "610104", + "name": "莲湖区" + }, { + "code": "610111", + "name": "灞桥区" + }, { + "code": "610112", + "name": "未央区" + }, { + "code": "610113", + "name": "雁塔区" + }, { + "code": "610114", + "name": "阎良区" + }, { + "code": "610115", + "name": "临潼区" + }, { + "code": "610116", + "name": "长安区" + }, { + "code": "610117", + "name": "高陵区" + }, { + "code": "610118", + "name": "鄠邑区" + }, { + "code": "610122", + "name": "蓝田县" + }, { + "code": "610124", + "name": "周至县" + }] + }, { + "code": "6102", + "name": "铜川市", + "children": [{ + "code": "610202", + "name": "王益区" + }, { + "code": "610203", + "name": "印台区" + }, { + "code": "610204", + "name": "耀州区" + }, { + "code": "610222", + "name": "宜君县" + }] + }, { + "code": "6103", + "name": "宝鸡市", + "children": [{ + "code": "610302", + "name": "渭滨区" + }, { + "code": "610303", + "name": "金台区" + }, { + "code": "610304", + "name": "陈仓区" + }, { + "code": "610322", + "name": "凤翔县" + }, { + "code": "610323", + "name": "岐山县" + }, { + "code": "610324", + "name": "扶风县" + }, { + "code": "610326", + "name": "眉县" + }, { + "code": "610327", + "name": "陇县" + }, { + "code": "610328", + "name": "千阳县" + }, { + "code": "610329", + "name": "麟游县" + }, { + "code": "610330", + "name": "凤县" + }, { + "code": "610331", + "name": "太白县" + }] + }, { + "code": "6104", + "name": "咸阳市", + "children": [{ + "code": "610402", + "name": "秦都区" + }, { + "code": "610403", + "name": "杨陵区" + }, { + "code": "610404", + "name": "渭城区" + }, { + "code": "610422", + "name": "三原县" + }, { + "code": "610423", + "name": "泾阳县" + }, { + "code": "610424", + "name": "乾县" + }, { + "code": "610425", + "name": "礼泉县" + }, { + "code": "610426", + "name": "永寿县" + }, { + "code": "610428", + "name": "长武县" + }, { + "code": "610429", + "name": "旬邑县" + }, { + "code": "610430", + "name": "淳化县" + }, { + "code": "610431", + "name": "武功县" + }, { + "code": "610481", + "name": "兴平市" + }, { + "code": "610482", + "name": "彬州市" + }] + }, { + "code": "6105", + "name": "渭南市", + "children": [{ + "code": "610502", + "name": "临渭区" + }, { + "code": "610503", + "name": "华州区" + }, { + "code": "610522", + "name": "潼关县" + }, { + "code": "610523", + "name": "大荔县" + }, { + "code": "610524", + "name": "合阳县" + }, { + "code": "610525", + "name": "澄城县" + }, { + "code": "610526", + "name": "蒲城县" + }, { + "code": "610527", + "name": "白水县" + }, { + "code": "610528", + "name": "富平县" + }, { + "code": "610581", + "name": "韩城市" + }, { + "code": "610582", + "name": "华阴市" + }] + }, { + "code": "6106", + "name": "延安市", + "children": [{ + "code": "610602", + "name": "宝塔区" + }, { + "code": "610603", + "name": "安塞区" + }, { + "code": "610621", + "name": "延长县" + }, { + "code": "610622", + "name": "延川县" + }, { + "code": "610625", + "name": "志丹县" + }, { + "code": "610626", + "name": "吴起县" + }, { + "code": "610627", + "name": "甘泉县" + }, { + "code": "610628", + "name": "富县" + }, { + "code": "610629", + "name": "洛川县" + }, { + "code": "610630", + "name": "宜川县" + }, { + "code": "610631", + "name": "黄龙县" + }, { + "code": "610632", + "name": "黄陵县" + }, { + "code": "610681", + "name": "子长市" + }] + }, { + "code": "6107", + "name": "汉中市", + "children": [{ + "code": "610702", + "name": "汉台区" + }, { + "code": "610703", + "name": "南郑区" + }, { + "code": "610722", + "name": "城固县" + }, { + "code": "610723", + "name": "洋县" + }, { + "code": "610724", + "name": "西乡县" + }, { + "code": "610725", + "name": "勉县" + }, { + "code": "610726", + "name": "宁强县" + }, { + "code": "610727", + "name": "略阳县" + }, { + "code": "610728", + "name": "镇巴县" + }, { + "code": "610729", + "name": "留坝县" + }, { + "code": "610730", + "name": "佛坪县" + }] + }, { + "code": "6108", + "name": "榆林市", + "children": [{ + "code": "610802", + "name": "榆阳区" + }, { + "code": "610803", + "name": "横山区" + }, { + "code": "610822", + "name": "府谷县" + }, { + "code": "610824", + "name": "靖边县" + }, { + "code": "610825", + "name": "定边县" + }, { + "code": "610826", + "name": "绥德县" + }, { + "code": "610827", + "name": "米脂县" + }, { + "code": "610828", + "name": "佳县" + }, { + "code": "610829", + "name": "吴堡县" + }, { + "code": "610830", + "name": "清涧县" + }, { + "code": "610831", + "name": "子洲县" + }, { + "code": "610881", + "name": "神木市" + }] + }, { + "code": "6109", + "name": "安康市", + "children": [{ + "code": "610902", + "name": "汉滨区" + }, { + "code": "610921", + "name": "汉阴县" + }, { + "code": "610922", + "name": "石泉县" + }, { + "code": "610923", + "name": "宁陕县" + }, { + "code": "610924", + "name": "紫阳县" + }, { + "code": "610925", + "name": "岚皋县" + }, { + "code": "610926", + "name": "平利县" + }, { + "code": "610927", + "name": "镇坪县" + }, { + "code": "610928", + "name": "旬阳县" + }, { + "code": "610929", + "name": "白河县" + }] + }, { + "code": "6110", + "name": "商洛市", + "children": [{ + "code": "611002", + "name": "商州区" + }, { + "code": "611021", + "name": "洛南县" + }, { + "code": "611022", + "name": "丹凤县" + }, { + "code": "611023", + "name": "商南县" + }, { + "code": "611024", + "name": "山阳县" + }, { + "code": "611025", + "name": "镇安县" + }, { + "code": "611026", + "name": "柞水县" + }] + }] +}, { + "code": "62", + "name": "甘肃省", + "children": [{ + "code": "6201", + "name": "兰州市", + "children": [{ + "code": "620102", + "name": "城关区" + }, { + "code": "620103", + "name": "七里河区" + }, { + "code": "620104", + "name": "西固区" + }, { + "code": "620105", + "name": "安宁区" + }, { + "code": "620111", + "name": "红古区" + }, { + "code": "620121", + "name": "永登县" + }, { + "code": "620122", + "name": "皋兰县" + }, { + "code": "620123", + "name": "榆中县" + }, { + "code": "620171", + "name": "兰州新区" + }] + }, { + "code": "6202", + "name": "嘉峪关市", + "children": [{ + "code": "620201001", + "name": "雄关街道" + }, { + "code": "620201002", + "name": "钢城街道" + }, { + "code": "620201100", + "name": "新城镇" + }, { + "code": "620201101", + "name": "峪泉镇" + }, { + "code": "620201102", + "name": "文殊镇" + }] + }, { + "code": "6203", + "name": "金昌市", + "children": [{ + "code": "620302", + "name": "金川区" + }, { + "code": "620321", + "name": "永昌县" + }] + }, { + "code": "6204", + "name": "白银市", + "children": [{ + "code": "620402", + "name": "白银区" + }, { + "code": "620403", + "name": "平川区" + }, { + "code": "620421", + "name": "靖远县" + }, { + "code": "620422", + "name": "会宁县" + }, { + "code": "620423", + "name": "景泰县" + }] + }, { + "code": "6205", + "name": "天水市", + "children": [{ + "code": "620502", + "name": "秦州区" + }, { + "code": "620503", + "name": "麦积区" + }, { + "code": "620521", + "name": "清水县" + }, { + "code": "620522", + "name": "秦安县" + }, { + "code": "620523", + "name": "甘谷县" + }, { + "code": "620524", + "name": "武山县" + }, { + "code": "620525", + "name": "张家川回族自治县" + }] + }, { + "code": "6206", + "name": "武威市", + "children": [{ + "code": "620602", + "name": "凉州区" + }, { + "code": "620621", + "name": "民勤县" + }, { + "code": "620622", + "name": "古浪县" + }, { + "code": "620623", + "name": "天祝藏族自治县" + }] + }, { + "code": "6207", + "name": "张掖市", + "children": [{ + "code": "620702", + "name": "甘州区" + }, { + "code": "620721", + "name": "肃南裕固族自治县" + }, { + "code": "620722", + "name": "民乐县" + }, { + "code": "620723", + "name": "临泽县" + }, { + "code": "620724", + "name": "高台县" + }, { + "code": "620725", + "name": "山丹县" + }] + }, { + "code": "6208", + "name": "平凉市", + "children": [{ + "code": "620802", + "name": "崆峒区" + }, { + "code": "620821", + "name": "泾川县" + }, { + "code": "620822", + "name": "灵台县" + }, { + "code": "620823", + "name": "崇信县" + }, { + "code": "620825", + "name": "庄浪县" + }, { + "code": "620826", + "name": "静宁县" + }, { + "code": "620881", + "name": "华亭市" + }] + }, { + "code": "6209", + "name": "酒泉市", + "children": [{ + "code": "620902", + "name": "肃州区" + }, { + "code": "620921", + "name": "金塔县" + }, { + "code": "620922", + "name": "瓜州县" + }, { + "code": "620923", + "name": "肃北蒙古族自治县" + }, { + "code": "620924", + "name": "阿克塞哈萨克族自治县" + }, { + "code": "620981", + "name": "玉门市" + }, { + "code": "620982", + "name": "敦煌市" + }] + }, { + "code": "6210", + "name": "庆阳市", + "children": [{ + "code": "621002", + "name": "西峰区" + }, { + "code": "621021", + "name": "庆城县" + }, { + "code": "621022", + "name": "环县" + }, { + "code": "621023", + "name": "华池县" + }, { + "code": "621024", + "name": "合水县" + }, { + "code": "621025", + "name": "正宁县" + }, { + "code": "621026", + "name": "宁县" + }, { + "code": "621027", + "name": "镇原县" + }] + }, { + "code": "6211", + "name": "定西市", + "children": [{ + "code": "621102", + "name": "安定区" + }, { + "code": "621121", + "name": "通渭县" + }, { + "code": "621122", + "name": "陇西县" + }, { + "code": "621123", + "name": "渭源县" + }, { + "code": "621124", + "name": "临洮县" + }, { + "code": "621125", + "name": "漳县" + }, { + "code": "621126", + "name": "岷县" + }] + }, { + "code": "6212", + "name": "陇南市", + "children": [{ + "code": "621202", + "name": "武都区" + }, { + "code": "621221", + "name": "成县" + }, { + "code": "621222", + "name": "文县" + }, { + "code": "621223", + "name": "宕昌县" + }, { + "code": "621224", + "name": "康县" + }, { + "code": "621225", + "name": "西和县" + }, { + "code": "621226", + "name": "礼县" + }, { + "code": "621227", + "name": "徽县" + }, { + "code": "621228", + "name": "两当县" + }] + }, { + "code": "6229", + "name": "临夏回族自治州", + "children": [{ + "code": "622901", + "name": "临夏市" + }, { + "code": "622921", + "name": "临夏县" + }, { + "code": "622922", + "name": "康乐县" + }, { + "code": "622923", + "name": "永靖县" + }, { + "code": "622924", + "name": "广河县" + }, { + "code": "622925", + "name": "和政县" + }, { + "code": "622926", + "name": "东乡族自治县" + }, { + "code": "622927", + "name": "积石山保安族东乡族撒拉族自治县" + }] + }, { + "code": "6230", + "name": "甘南藏族自治州", + "children": [{ + "code": "623001", + "name": "合作市" + }, { + "code": "623021", + "name": "临潭县" + }, { + "code": "623022", + "name": "卓尼县" + }, { + "code": "623023", + "name": "舟曲县" + }, { + "code": "623024", + "name": "迭部县" + }, { + "code": "623025", + "name": "玛曲县" + }, { + "code": "623026", + "name": "碌曲县" + }, { + "code": "623027", + "name": "夏河县" + }] + }] +}, { + "code": "63", + "name": "青海省", + "children": [{ + "code": "6301", + "name": "西宁市", + "children": [{ + "code": "630102", + "name": "城东区" + }, { + "code": "630103", + "name": "城中区" + }, { + "code": "630104", + "name": "城西区" + }, { + "code": "630105", + "name": "城北区" + }, { + "code": "630106", + "name": "湟中区" + }, { + "code": "630121", + "name": "大通回族土族自治县" + }, { + "code": "630123", + "name": "湟源县" + }] + }, { + "code": "6302", + "name": "海东市", + "children": [{ + "code": "630202", + "name": "乐都区" + }, { + "code": "630203", + "name": "平安区" + }, { + "code": "630222", + "name": "民和回族土族自治县" + }, { + "code": "630223", + "name": "互助土族自治县" + }, { + "code": "630224", + "name": "化隆回族自治县" + }, { + "code": "630225", + "name": "循化撒拉族自治县" + }] + }, { + "code": "6322", + "name": "海北藏族自治州", + "children": [{ + "code": "632221", + "name": "门源回族自治县" + }, { + "code": "632222", + "name": "祁连县" + }, { + "code": "632223", + "name": "海晏县" + }, { + "code": "632224", + "name": "刚察县" + }] + }, { + "code": "6323", + "name": "黄南藏族自治州", + "children": [{ + "code": "632321", + "name": "同仁县" + }, { + "code": "632322", + "name": "尖扎县" + }, { + "code": "632323", + "name": "泽库县" + }, { + "code": "632324", + "name": "河南蒙古族自治县" + }] + }, { + "code": "6325", + "name": "海南藏族自治州", + "children": [{ + "code": "632521", + "name": "共和县" + }, { + "code": "632522", + "name": "同德县" + }, { + "code": "632523", + "name": "贵德县" + }, { + "code": "632524", + "name": "兴海县" + }, { + "code": "632525", + "name": "贵南县" + }] + }, { + "code": "6326", + "name": "果洛藏族自治州", + "children": [{ + "code": "632621", + "name": "玛沁县" + }, { + "code": "632622", + "name": "班玛县" + }, { + "code": "632623", + "name": "甘德县" + }, { + "code": "632624", + "name": "达日县" + }, { + "code": "632625", + "name": "久治县" + }, { + "code": "632626", + "name": "玛多县" + }] + }, { + "code": "6327", + "name": "玉树藏族自治州", + "children": [{ + "code": "632701", + "name": "玉树市" + }, { + "code": "632722", + "name": "杂多县" + }, { + "code": "632723", + "name": "称多县" + }, { + "code": "632724", + "name": "治多县" + }, { + "code": "632725", + "name": "囊谦县" + }, { + "code": "632726", + "name": "曲麻莱县" + }] + }, { + "code": "6328", + "name": "海西蒙古族藏族自治州", + "children": [{ + "code": "632801", + "name": "格尔木市" + }, { + "code": "632802", + "name": "德令哈市" + }, { + "code": "632803", + "name": "茫崖市" + }, { + "code": "632821", + "name": "乌兰县" + }, { + "code": "632822", + "name": "都兰县" + }, { + "code": "632823", + "name": "天峻县" + }, { + "code": "632857", + "name": "大柴旦行政委员会" + }] + }] +}, { + "code": "64", + "name": "宁夏回族自治区", + "children": [{ + "code": "6401", + "name": "银川市", + "children": [{ + "code": "640104", + "name": "兴庆区" + }, { + "code": "640105", + "name": "西夏区" + }, { + "code": "640106", + "name": "金凤区" + }, { + "code": "640121", + "name": "永宁县" + }, { + "code": "640122", + "name": "贺兰县" + }, { + "code": "640181", + "name": "灵武市" + }] + }, { + "code": "6402", + "name": "石嘴山市", + "children": [{ + "code": "640202", + "name": "大武口区" + }, { + "code": "640205", + "name": "惠农区" + }, { + "code": "640221", + "name": "平罗县" + }] + }, { + "code": "6403", + "name": "吴忠市", + "children": [{ + "code": "640302", + "name": "利通区" + }, { + "code": "640303", + "name": "红寺堡区" + }, { + "code": "640323", + "name": "盐池县" + }, { + "code": "640324", + "name": "同心县" + }, { + "code": "640381", + "name": "青铜峡市" + }] + }, { + "code": "6404", + "name": "固原市", + "children": [{ + "code": "640402", + "name": "原州区" + }, { + "code": "640422", + "name": "西吉县" + }, { + "code": "640423", + "name": "隆德县" + }, { + "code": "640424", + "name": "泾源县" + }, { + "code": "640425", + "name": "彭阳县" + }] + }, { + "code": "6405", + "name": "中卫市", + "children": [{ + "code": "640502", + "name": "沙坡头区" + }, { + "code": "640521", + "name": "中宁县" + }, { + "code": "640522", + "name": "海原县" + }] + }] +}, { + "code": "65", + "name": "新疆维吾尔自治区", + "children": [{ + "code": "6501", + "name": "乌鲁木齐市", + "children": [{ + "code": "650102", + "name": "天山区" + }, { + "code": "650103", + "name": "沙依巴克区" + }, { + "code": "650104", + "name": "新市区" + }, { + "code": "650105", + "name": "水磨沟区" + }, { + "code": "650106", + "name": "头屯河区" + }, { + "code": "650107", + "name": "达坂城区" + }, { + "code": "650109", + "name": "米东区" + }, { + "code": "650121", + "name": "乌鲁木齐县" + }] + }, { + "code": "6502", + "name": "克拉玛依市", + "children": [{ + "code": "650202", + "name": "独山子区" + }, { + "code": "650203", + "name": "克拉玛依区" + }, { + "code": "650204", + "name": "白碱滩区" + }, { + "code": "650205", + "name": "乌尔禾区" + }] + }, { + "code": "6504", + "name": "吐鲁番市", + "children": [{ + "code": "650402", + "name": "高昌区" + }, { + "code": "650421", + "name": "鄯善县" + }, { + "code": "650422", + "name": "托克逊县" + }] + }, { + "code": "6505", + "name": "哈密市", + "children": [{ + "code": "650502", + "name": "伊州区" + }, { + "code": "650521", + "name": "巴里坤哈萨克自治县" + }, { + "code": "650522", + "name": "伊吾县" + }] + }, { + "code": "6523", + "name": "昌吉回族自治州", + "children": [{ + "code": "652301", + "name": "昌吉市" + }, { + "code": "652302", + "name": "阜康市" + }, { + "code": "652323", + "name": "呼图壁县" + }, { + "code": "652324", + "name": "玛纳斯县" + }, { + "code": "652325", + "name": "奇台县" + }, { + "code": "652327", + "name": "吉木萨尔县" + }, { + "code": "652328", + "name": "木垒哈萨克自治县" + }] + }, { + "code": "6527", + "name": "博尔塔拉蒙古自治州", + "children": [{ + "code": "652701", + "name": "博乐市" + }, { + "code": "652702", + "name": "阿拉山口市" + }, { + "code": "652722", + "name": "精河县" + }, { + "code": "652723", + "name": "温泉县" + }] + }, { + "code": "6528", + "name": "巴音郭楞蒙古自治州", + "children": [{ + "code": "652801", + "name": "库尔勒市" + }, { + "code": "652822", + "name": "轮台县" + }, { + "code": "652823", + "name": "尉犁县" + }, { + "code": "652824", + "name": "若羌县" + }, { + "code": "652825", + "name": "且末县" + }, { + "code": "652826", + "name": "焉耆回族自治县" + }, { + "code": "652827", + "name": "和静县" + }, { + "code": "652828", + "name": "和硕县" + }, { + "code": "652829", + "name": "博湖县" + }, { + "code": "652871", + "name": "库尔勒经济技术开发区" + }] + }, { + "code": "6529", + "name": "阿克苏地区", + "children": [{ + "code": "652901", + "name": "阿克苏市" + }, { + "code": "652902", + "name": "库车市" + }, { + "code": "652922", + "name": "温宿县" + }, { + "code": "652924", + "name": "沙雅县" + }, { + "code": "652925", + "name": "新和县" + }, { + "code": "652926", + "name": "拜城县" + }, { + "code": "652927", + "name": "乌什县" + }, { + "code": "652928", + "name": "阿瓦提县" + }, { + "code": "652929", + "name": "柯坪县" + }] + }, { + "code": "6530", + "name": "克孜勒苏柯尔克孜自治州", + "children": [{ + "code": "653001", + "name": "阿图什市" + }, { + "code": "653022", + "name": "阿克陶县" + }, { + "code": "653023", + "name": "阿合奇县" + }, { + "code": "653024", + "name": "乌恰县" + }] + }, { + "code": "6531", + "name": "喀什地区", + "children": [{ + "code": "653101", + "name": "喀什市" + }, { + "code": "653121", + "name": "疏附县" + }, { + "code": "653122", + "name": "疏勒县" + }, { + "code": "653123", + "name": "英吉沙县" + }, { + "code": "653124", + "name": "泽普县" + }, { + "code": "653125", + "name": "莎车县" + }, { + "code": "653126", + "name": "叶城县" + }, { + "code": "653127", + "name": "麦盖提县" + }, { + "code": "653128", + "name": "岳普湖县" + }, { + "code": "653129", + "name": "伽师县" + }, { + "code": "653130", + "name": "巴楚县" + }, { + "code": "653131", + "name": "塔什库尔干塔吉克自治县" + }] + }, { + "code": "6532", + "name": "和田地区", + "children": [{ + "code": "653201", + "name": "和田市" + }, { + "code": "653221", + "name": "和田县" + }, { + "code": "653222", + "name": "墨玉县" + }, { + "code": "653223", + "name": "皮山县" + }, { + "code": "653224", + "name": "洛浦县" + }, { + "code": "653225", + "name": "策勒县" + }, { + "code": "653226", + "name": "于田县" + }, { + "code": "653227", + "name": "民丰县" + }] + }, { + "code": "6540", + "name": "伊犁哈萨克自治州", + "children": [{ + "code": "654002", + "name": "伊宁市" + }, { + "code": "654003", + "name": "奎屯市" + }, { + "code": "654004", + "name": "霍尔果斯市" + }, { + "code": "654021", + "name": "伊宁县" + }, { + "code": "654022", + "name": "察布查尔锡伯自治县" + }, { + "code": "654023", + "name": "霍城县" + }, { + "code": "654024", + "name": "巩留县" + }, { + "code": "654025", + "name": "新源县" + }, { + "code": "654026", + "name": "昭苏县" + }, { + "code": "654027", + "name": "特克斯县" + }, { + "code": "654028", + "name": "尼勒克县" + }] + }, { + "code": "6542", + "name": "塔城地区", + "children": [{ + "code": "654201", + "name": "塔城市" + }, { + "code": "654202", + "name": "乌苏市" + }, { + "code": "654221", + "name": "额敏县" + }, { + "code": "654223", + "name": "沙湾县" + }, { + "code": "654224", + "name": "托里县" + }, { + "code": "654225", + "name": "裕民县" + }, { + "code": "654226", + "name": "和布克赛尔蒙古自治县" + }] + }, { + "code": "6543", + "name": "阿勒泰地区", + "children": [{ + "code": "654301", + "name": "阿勒泰市" + }, { + "code": "654321", + "name": "布尔津县" + }, { + "code": "654322", + "name": "富蕴县" + }, { + "code": "654323", + "name": "福海县" + }, { + "code": "654324", + "name": "哈巴河县" + }, { + "code": "654325", + "name": "青河县" + }, { + "code": "654326", + "name": "吉木乃县" + }] + }, { + "code": "6590", + "name": "自治区直辖县级行政区划", + "children": [{ + "code": "659001", + "name": "石河子市" + }, { + "code": "659002", + "name": "阿拉尔市" + }, { + "code": "659003", + "name": "图木舒克市" + }, { + "code": "659004", + "name": "五家渠市" + }, { + "code": "659005", + "name": "北屯市" + }, { + "code": "659006", + "name": "铁门关市" + }, { + "code": "659007", + "name": "双河市" + }, { + "code": "659008", + "name": "可克达拉市" + }, { + "code": "659009", + "name": "昆玉市" + }, { + "code": "659010", + "name": "胡杨河市" + }] + }] +}] diff --git a/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/piaoyi-cityPicker.vue b/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/piaoyi-cityPicker.vue new file mode 100644 index 0000000..c18ea5d --- /dev/null +++ b/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/piaoyi-cityPicker.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/uni_modules/piaoyi-cityPicker/package.json b/uni_modules/piaoyi-cityPicker/package.json new file mode 100644 index 0000000..08eac7d --- /dev/null +++ b/uni_modules/piaoyi-cityPicker/package.json @@ -0,0 +1,17 @@ +{ + "id": "piaoyi-cityPicker", + "name": " data-cityPicker省市区地址选择器", + "displayName": " data-cityPicker省市区地址选择器(兼容vue3)", + "version": "1.1.3", + "description": "常用省市区选择器,可反选,自定义模态框、兼容vue3", + "keywords": [ + "省市区", + "选择器", + "可反选", + "自定义模态框和弹框", + "兼容vue3" + ], + "dcloudext": { + "type": "component-vue" + } +} \ No newline at end of file diff --git a/uni_modules/piaoyi-cityPicker/readme.md b/uni_modules/piaoyi-cityPicker/readme.md new file mode 100644 index 0000000..ded085e --- /dev/null +++ b/uni_modules/piaoyi-cityPicker/readme.md @@ -0,0 +1,98 @@ +## 1.0.7(2023-09-15) +改为uni_modules规范 +### cityPicker 浮动菜单(兼容vue3) + +**使用方法:** + +``` + + + + + + +``` + +### 注:近期收到使用用户反馈,存在以下一个问题(如有好的建议,期待私信,谢谢) + +1、之前只支持默认值传入地区编码,已更新可以支持传入中文省市区数组 + +defaultValue可以传入defaultValue:['河北省','唐山市','丰南区']数组类型以及defaultValue: '420103'地区编码字符串类型 + +可以使用const reg =/([\u4e00-\u9fa5]+省|自治区|[\u4e00-\u9fa5]+市|[\u4e00-\u9fa5]+区)/g;将自己的省市区数据进行处理为数组再传入 + + +#### 事件说明 + +| 事件名 | 返回值 | 描述 | +| :---------: | :----: | :------------: | +| @confirm | 对象(code,完整地区名称) | 点击确定的回调 | +| @cancel | 无 | 点击取消的回调 | + +#### Prop + +| 参数名称 | 描述 | +| -------- | ------------------------------ | +| visible | 控制选择器显示和隐藏 | +| column | 可选值2和3,2是省市两列选择;3是省市区三列选择 | +| maskCloseAble | 点击模态框是否关闭弹框 | +| defaultValue | 初始地区编码(例:420102或者['河北省','唐山市','丰南区']) | + +### 可接定制化组件开发 +### 右侧有本人代表作小程序二维码,可以扫码体验 +### 如使用过程中有问题或有一些好的建议,欢迎加QQ群互相学习交流:120594820 \ No newline at end of file diff --git a/uni_modules/piaoyi-editor/changelog.md b/uni_modules/piaoyi-editor/changelog.md new file mode 100644 index 0000000..57eec83 --- /dev/null +++ b/uni_modules/piaoyi-editor/changelog.md @@ -0,0 +1,4 @@ +## 1.0.7(2023-12-05) +优化 +## 1.0.6(2023-12-05) +优化 diff --git a/uni_modules/piaoyi-editor/components/piaoyi-editor/color-picker.vue b/uni_modules/piaoyi-editor/components/piaoyi-editor/color-picker.vue new file mode 100644 index 0000000..8961742 --- /dev/null +++ b/uni_modules/piaoyi-editor/components/piaoyi-editor/color-picker.vue @@ -0,0 +1,784 @@ + + + + + diff --git a/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.css b/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.css new file mode 100644 index 0000000..9c5ab99 --- /dev/null +++ b/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.css @@ -0,0 +1,123 @@ +@font-face { + font-family: "iconfont"; /* Project id 4040150 */ + src: url('iconfont.woff2?t=1682491617906') format('woff2'), + url('iconfont.woff?t=1682491617906') format('woff'), + url('iconfont.ttf?t=1682491617906') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-checklist:before { + content: "\e600"; +} + +.icon-zitiyanse:before { + content: "\e646"; +} + +.icon-formatheader1:before { + content: "\e860"; +} + +.icon-formatheader2:before { + content: "\e861"; +} + +.icon-undo:before { + content: "\e787"; +} + +.icon-redo:before { + content: "\e788"; +} + +.icon-indent:before { + content: "\e7f3"; +} + +.icon-outdent:before { + content: "\e7f4"; +} + +.icon-zitijiacu:before { + content: "\ec83"; +} + +.icon-zuoyouduiqi:before { + content: "\ec87"; +} + +.icon-Character-Spacing:before { + content: "\ed91"; +} + +.icon-format:before { + content: "\e6da"; +} + +.icon-font-size:before { + content: "\e7b9"; +} + +.icon-duanhouju:before { + content: "\e61a"; +} + +.icon-duanqianju:before { + content: "\e61b"; +} + +.icon-shanchuxian:before { + content: "\e602"; +} + +.icon-charutupian:before { + content: "\e603"; +} + +.icon-fengexian:before { + content: "\e60e"; +} + +.icon-juzhongduiqi:before { + content: "\e620"; +} + +.icon-wuxupailie:before { + content: "\e63e"; +} + +.icon-youduiqi:before { + content: "\e64b"; +} + +.icon-youxupailie:before { + content: "\e64c"; +} + +.icon-zitixiahuaxian:before { + content: "\e657"; +} + +.icon-zitixieti:before { + content: "\e658"; +} + +.icon-zuoduiqi:before { + content: "\e65a"; +} + +.icon-LineHeight:before { + content: "\e624"; +} + +.icon-editor-background-color:before { + content: "\e829"; +} + diff --git a/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.ttf b/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..712351d5979807814b291be524691dcbb3b5020a GIT binary patch literal 6564 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 literal 0 HcmV?d00001 diff --git a/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.woff b/uni_modules/piaoyi-editor/components/piaoyi-editor/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..26895902e2d6092791e1cd6d1f5ad604ade7468a GIT binary patch literal 4076 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 literal 0 HcmV?d00001 diff --git a/uni_modules/piaoyi-editor/components/piaoyi-editor/piaoyi-editor.vue b/uni_modules/piaoyi-editor/components/piaoyi-editor/piaoyi-editor.vue new file mode 100644 index 0000000..64ff408 --- /dev/null +++ b/uni_modules/piaoyi-editor/components/piaoyi-editor/piaoyi-editor.vue @@ -0,0 +1,413 @@ + + + + + diff --git a/uni_modules/piaoyi-editor/package.json b/uni_modules/piaoyi-editor/package.json new file mode 100644 index 0000000..a690111 --- /dev/null +++ b/uni_modules/piaoyi-editor/package.json @@ -0,0 +1,15 @@ +{ + "id": "piaoyi-editor", + "name": "多功能富文本编辑器", + "displayName": "多功能富文本编辑器", + "version": "1.0.7", + "description": "富文本编辑器,内置上传图片以及更改颜色, 多样化等功能", + "keywords": [ + "富文本编辑器", + "上传图片", + "字体颜色" + ], + "dcloudext": { + "type": "component-vue" + } +} \ No newline at end of file diff --git a/uni_modules/piaoyi-editor/readme.md b/uni_modules/piaoyi-editor/readme.md new file mode 100644 index 0000000..debed2d --- /dev/null +++ b/uni_modules/piaoyi-editor/readme.md @@ -0,0 +1,95 @@ +### piaoyiEditor 富文本编辑器 + +**使用方法:** + +``` + + + + + + +``` + +#### 事件说明 +使用上传图片功能时需要注意查看代码里面的uni.uploadFile方法,因为它的返回值取决于自己后端接口的值,所以可以根据实际情况就行更改即可 + +| 事件名 | 返回值 | 描述 | +| :---------: | :----: | :------------: | +| @saveContens | {html: html片段, length: html长度} | 文本框内容回调 | + +#### Prop + +| 参数名称 | 默认值 | 描述 | +| -------- | ------------------------------ | +| maxlength| 300 | 输入最大长度 | +| readOnly | false | 是否只读 | +| api | 空 | 上传图片接口地址 | +| photoUrl | 空 | 服务器图片域名或者ip | +| name | 'file' | 上传图片接口的key | +| values | '' | 富文本编辑器默认值 | + +### 注:近期收到使用用户反馈,存在以下两个问题(如有好的建议,期待私信,谢谢) + +1、当组件在页面中部或者底部的时候,进入页面,页面会自动滚动到富文本编辑器的区域 +属于正常现象; +官网文档有这么一句话:编辑器聚焦时页面会被上推,系统行为以保证编辑区可见; +作者建议这种情况,进入页面初始设置富文本编辑器为只读,然后页面滚动到一定距离的时候取消这个只读; + +2、组件粘贴文字出现软键盘闪烁,导致文字粘贴不了 +目前暂未发现解决方法,本插件是在官方的editor基础上开发的,这个组件存在这个问题; +经测试长按出现粘贴后,手不松开滑动到粘贴字样上就不会出现闪烁,然后松开手,点击粘贴就可以; + +3、有些上传图片接口是需要token的,接口需要token的话可以在组件内搜索uni.uploadFile,加上headers头部参数 + +### 可接定制化组件开发 +### 右侧有本人代表作小程序二维码,可以扫码体验 +### 如使用过程中有问题或有一些好的建议,欢迎加QQ群互相学习交流:120594820 \ No newline at end of file diff --git a/uni_modules/qf-image-cropper/changelog.md b/uni_modules/qf-image-cropper/changelog.md new file mode 100644 index 0000000..0fa6898 --- /dev/null +++ b/uni_modules/qf-image-cropper/changelog.md @@ -0,0 +1,72 @@ +## 2.2.5(2024-07-30) +* 修复 当 checkRange=true 时,拖动四个伸缩角放大图片时还可能会超出或未到边界的问题 +* 修复 当 checkRange=false 时,图片旋转时会放大图片适应裁剪尺寸的问题 +* 修复 当 checkRange=true 时,图片旋转 90° 或 270° 进行缩放可能会无法拖动图片的问题 +## 2.2.4(2024-06-21) +* 新增 reverseRotatable 属性,是否支持逆向翻转 +* 修复 `2.1.7` 版本导致旋转后图片没有自动适配裁剪框的问题 + +## 2.2.3(2024-06-21) +* 新增 gpu 属性,是否开启硬件加速,图片缩放过程中如果出现元素的“留影”或“重影”效果,可通过该方式解决或减轻这一问题 +* 修复 组件使用 `v-if` 并设置 `src` 属性时可能会出现图片渲染位置存在偏差的问题 + +## 2.2.2(2024-06-21) +* 优化 组件实例 chooseImage 方法支持传参 +* 修复 组件使用 `v-if` 时组件无非正常渲染的问题 + +## 2.2.1(2024-06-15) +* 修复 H5平台不支持手势拖动图片的问题 + +## 2.2.0(2024-05-31) +* 修复 APP平台 `vue2` 项目因 `2.1.9` 版本修复 `vue3` 项目bug而引发的问题 + +## 2.1.9(2024-05-29) +* 修复 APP平台 `vue3` 项目因 uniapp `renderjs` 中未支持条件编译,导致运行了H5平台代码报错的问题 + +## 2.1.8(2024-05-29) +* 新增 zIndex 属性,调整组件层级 +* 新增 组件内容插槽 +* 优化 微信小程序平台动态修改元素style时的多余内容 + +## 2.1.7(2024-05-28) +* 新增 checkRange 属性,当 checkRange=false 时允许图片位置超出裁剪边界 +* 新增 minScale 属性,图片最小缩放倍数,当 minScale<0 时可使图片宽高不再受裁剪区域宽高限制 +* 新增 backgroundColor 属性,生成图片背景色,如果裁剪区域没有完全包含在图片中时,不设置该属性生成图片存在一定的透明块 +* 优化 动态修改图片宽高但没有传入src时,尺寸适应问题 +* 修复 APP平台通过 `this.$ownerInstance` 获取组件实例时机过早,其值为 `undefined` 导致报错界面没有正常渲染的问题 + +## 2.1.6(2023-04-16) +* 修复 组件使用 v-show 指令会导致选择图片后初始位置严重偏位的问题 + +## 2.1.5(2023-04-15) +* 新增 兼容APP平台 + +## 2.1.4(2023-03-13) +* 新增 fileType 属性,用于指定生成文件的类型,只支持 'jpg' 或 'png',默认为 'png' +* 新增 delay 属性,微信小程序平台使用 `Canvas 2D` 绘制时控制图片从绘制到生成所需时间 +* 优化 当生成图片的尺寸宽/高超过 Canvas 2D 最大限制(1365*1365)则将画布尺寸缩放在限制范围内绘制完成后输出目标尺寸 +* 优化 旋转图标指示方向与实际旋转方向不符 + +## 2.1.3(2023-02-06) +* 优化 vue3支持 + +## 2.1.2(2023-02-03) +* 新增 navigation 属性,H5平台当 showAngle 为 true 时,使用插件的页面在 `page.json` 中配置了 "navigationStyle": "custom" 时,必须将此值设为 false ,否则四个可拉伸角的触发位置会有偏差 +* 修复 H5平台部分设备(已知iPhone11以下机型)拍照的图片缩放时会闪动的问题 + +## 2.1.1(2022-12-06) +* 修复 横屏适配问题 + +## 2.1.0(2022-12-06) +* 新增 兼容H5平台,使用 renderjs 响应手势事件 + +## 2.0.0(2022-12-05) +* 重构 插件,使用 WXS 响应手势事件 +* 新增 图片翻转 +* 新增 拉伸裁剪框放大图片 +* 新增 监听PC鼠标滚轮触发缩放 +* 新增 圆形、圆角矩形的图片裁剪 +* 优化 图片缩放,移动端以双指触摸中心点为缩放中心点,PC端以鼠标所在点为缩放中心点 +* 优化 裁剪框样式 +* 优化 图片位置拖动 支持边界回弹效果(滑动时可滑出边界,释放时回弹到边界) +* 优化 生成图片使用新版 Canvas 2D 接口 diff --git a/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js b/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js new file mode 100644 index 0000000..becac19 --- /dev/null +++ b/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js @@ -0,0 +1,855 @@ +/** + * 图片编辑器-手势监听 + * 1. 支持编译到app-vue(uni-app 2.5.5及以上版本)、H5上 + */ +/** 图片偏移量 */ +var offset = { x: 0, y: 0 }; +/** 图片缩放比例 */ +var scale = 1; +/** 图片最小缩放比例 */ +var minScale = 1; +/** 图片旋转角度 */ +var rotate = 0; +/** 触摸点 */ +var touches = []; +/** 图片布局信息 */ +var img = {}; +/** 系统信息 */ +var sys = {}; +/** 裁剪区域布局信息 */ +var area = {}; +/** 触摸行为类型 */ +var touchType = ''; +/** 操作角的位置 */ +var activeAngle = 0; +/** 裁剪区域布局信息偏移量 */ +var areaOffset = { left: 0, right: 0, top: 0, bottom: 0 }; +/** 元素ID */ +var elIds = { + 'imageStyles': 'crop-image', + 'maskStylesList': 'crop-mask-block', + 'borderStyles': 'crop-border', + 'circleBoxStyles': 'crop-circle-box', + 'circleStyles': 'crop-circle', + 'gridStylesList': 'crop-grid', + 'angleStylesList': 'crop-angle', +} +/** 记录上次初始化时间戳,排除APP重复更新 */ +var timestamp = 0; +/** vue3 renderjs 条件编译无效,以此方式区别 APP 和 H5 */ +// #ifdef H5 +var platform = 'H5'; +// #endif +// #ifdef APP +var platform = 'APP'; +// #endif +/** 容错值 */ +var fault = 0.000001; +/** + * 获取a、b两数中的最小正数 + * @param a + * @param b + */ +function minimum(a, b) { + if (a > 0 && b < 0) return a; + if (a < 0 && b > 0) return b; + if (a > 0 && b > 0) return Math.min(a, b); + return 0; +} +/** + * 在容错访问内获取n近似值 + * @param n + */ +function num(n) { + var m = parseFloat((n).toFixed(6)); + return m === fault || m === -fault ? 0 : m; +} +/** + * 比较a值在容错值范围内是否等于b值 + * @param a + * @param b + */ +function equalsByFault(a, b) { + return Math.abs(a - b) <= fault; +} +/** + * 比较a值在容错值范围内是否小于b值 + * @param a + * @param b + */ +function lessThanByFault(a, b) { + var c = a - b; + return c < 0 ? c < -fault : c < fault; +} +/** + * 验证并获取有效最大值 + * @param v + * @param max + * @param isInclude + * @param x + * @param y + * @param rate + * @returns + */ +function validMax(v, max, isInclude, x, y, rate) { + if(typeof max === 'number') { + if(isInclude && equalsByFault(max, y)) { // 宽高不等时,x轴用y轴值要做等比例转换 + var n = num(max * rate); + if (n <= x) return n; // 转化后值在x轴最大值范围内 + return x; // 转化后值超出x轴最大值范围则用最大值 + } + return max; + } + return v; +} +/** + * 样式对象转字符串 + * @param {Object} style 样式对象 + */ +function styleToString(style) { + if(typeof style === 'string') return style; + var str = ''; + for (let k in style) { + str += k + ':' + style[k] + ';'; + } + return str; +} +/** + * + * @param {Object} instance 页面实例对象 + * @param {Object} key 要修改样式的key + * @param {Object|Array} style 样式 + */ +function setStyle(instance, key, style) { + // console.log('setStyle', instance, key, JSON.stringify(style)) + // #ifdef APP-PLUS + if(platform === 'APP') { + if(Object.prototype.toString.call(style) === '[object Array]') { + for (var i = 0, len = style.length; i < len; i++) { + var el = window.document.getElementById(elIds[key] + '-' + (i + 1)); + el && (el.style = styleToString(style[i])); + } + } else { + var el = window.document.getElementById(elIds[key]); + el && (el.style = styleToString(style)); + } + } + // #endif + // #ifdef H5 + if(platform === 'H5') instance[key] = style; + // #endif +} +/** + * 触发页面实例指定方法 + * @param {Object} instance 页面实例对象 + * @param {Object} name 方法名称 + * @param {Object} obj 传递参数 + */ +function callMethod(instance, name, obj) { + // #ifdef APP-PLUS + if(platform === 'APP') instance.callMethod(name, obj); + // #endif + // #ifdef H5 + if(platform === 'H5') instance[name](obj); + // #endif +} +/** + * 计算两点间距 + * @param {Object} touches 触摸点信息 + */ +function getDistanceByTouches(touches) { + // 根据勾股定理求两点间距离 + var a = touches[1].pageX - touches[0].pageX; + var b = touches[1].pageY - touches[0].pageY; + var c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); + // 求两点间的中点坐标 + // 1. a、b可能为负值 + // 2. 在求a、b时,如用touches[1]减touches[0],则求中点坐标也得用touches[1]减a/2、b/2 + // 3. 同理,在求a、b时,也可用touches[0]减touches[1],则求中点坐标也得用touches[0]减a/2、b/2 + var x = touches[1].pageX - a / 2; + var y = touches[1].pageY - b / 2; + return { c, x, y }; +}; + +/** + * 修正取值 + * @param {Object} a + * @param {Object} b + * @param {Object} c + * @param {Object} reverse 是否反向 + */ +function correctValue(a, b, c, reverse) { + return num(reverse ? Math.max(Math.min(a, b), c) : Math.min(Math.max(a, b), c)); +} + +/** + * 旋转90°或270°时检查边界:限制 x、y 拖动范围,禁止滑出边界 + * @param {Object} e 点坐标 + * @param {Object} xReverse x是否反向 + * @param {Object} yReverse y是否反向 + */ +function checkRotateRange(e, xReverse, yReverse) { + var o = num((img.height - img.width) / 2); // 宽高差值一半 + return { + x: correctValue(e.x, -img.height + o + area.width + area.left, area.left + o, xReverse), + y: correctValue(e.y, -img.width - o + area.height + area.top, area.top - o, yReverse) + }; +} + +/** + * 检查边界:限制 x、y 拖动范围,禁止滑出边界 + * @param {Object} e 点坐标 + */ +function checkRange(e) { + var r = rotate / 90 % 2; + if(r === 1) { // 因图片宽高可能不等,翻转 90° 或 270° 后图片宽高需反着计算,且左右和上下边界要根据差值做偏移 + if (area.width === area.height) { + return checkRotateRange(e, img.height < area.height, img.width < area.width); + } + var isInclude = img.height < area.width && img.width < area.height; // 图片是否包含在裁剪区域内 + if (img.width < area.height || img.height < area.width) { + if (area.width < area.height && img.width < img.height) { + return isInclude + ? checkRotateRange(e, area.width < area.height, area.width < area.height) + : checkRotateRange(e, false, true); + } + if (area.height < area.width && img.height < img.width) { + return isInclude + ? checkRotateRange(e, area.height < area.width, area.height < area.width) + : checkRotateRange(e, true, false); + } + } + if (img.height >= area.width && img.width >= area.height) { + return checkRotateRange(e, false, false); + } + if (isInclude) { + return area.height < area.width + ? checkRotateRange(e, true, true) + : checkRotateRange(e, area.width < area.height, area.width < area.height); + } + if (img.height < area.width && !img.width < area.height) { + return checkRotateRange(e, true, false); + } + if (!img.height < area.width && img.width < area.height) { + return checkRotateRange(e, false, true); + } + return checkRotateRange(e, img.height < area.height, img.width < area.width); + } + return { + x: correctValue(e.x, -img.width + area.width + area.left, area.left, img.width < area.width), + y: correctValue(e.y, -img.height + area.height + area.top, area.top, img.height < area.height) + } +}; +/** + * 变更图片布局信息 + * @param {Object} e 布局信息 + */ +function changeImageRect(e) { + // console.log('changeImageRect', e) + offset.x += e.x || 0; + offset.y += e.y || 0; + if(e.check && area.checkRange) { // 检查边界 + var point = checkRange(offset); + if(offset.x !== point.x || offset.y !== point.y) { + offset = point; + } + } + + // 因频繁修改 width/height 会造成大量的内存消耗,改为scale + // e.instance.imageStyles = { + // width: img.width + 'px', + // height: img.height + 'px', + // transform: 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + ox) + 'px) rotate(' + rotate +'deg)' + // }; + var ox = (img.width - img.oldWidth) / 2; + var oy = (img.height - img.oldHeight) / 2; + // e.instance.imageStyles = { + // width: img.oldWidth + 'px', + // height: img.oldHeight + 'px', + // transform: 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + oy) + 'px) rotate(' + rotate +'deg) scale(' + scale + ')' + // }; + setStyle(e.instance, 'imageStyles', { + width: img.oldWidth + 'px', + height: img.oldHeight + 'px', + transform: (img.gpu ? 'translateZ(0) ' : '') + 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + oy) + 'px' + ') rotate(' + rotate +'deg) scale(' + scale + ')' + }); + callMethod(e.instance, 'dataChange', { + width: img.width, + height: img.height, + x: offset.x, + y: offset.y, + rotate: rotate + }); +}; +/** + * 变更裁剪区域布局信息 + * @param {Object} e 布局信息 + */ +function changeAreaRect(e) { + // console.log('changeAreaRect', e) + // 变更蒙版样式 + setStyle(e.instance, 'maskStylesList', [ + { + left: 0, + width: (area.left + areaOffset.left) + 'px', + top: 0, + bottom: 0, + 'z-index': area.zIndex + 2 + }, + { + left: (area.right + areaOffset.right) + 'px', + right: 0, + top: 0, + bottom: 0, + 'z-index': area.zIndex + 2 + }, + { + left: (area.left + areaOffset.left) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + top: 0, + height: (area.top + areaOffset.top) + 'px', + 'z-index': area.zIndex + 2 + }, + { + left: (area.left + areaOffset.left) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + top: (area.bottom + areaOffset.bottom) + 'px', + // height: (area.top - areaOffset.bottom + sys.offsetBottom) + 'px', + bottom: 0, + 'z-index': area.zIndex + 2 + } + ]); + // 变更边框样式 + if(area.showBorder) { + setStyle(e.instance, 'borderStyles', { + left: (area.left + areaOffset.left) + 'px', + top: (area.top + areaOffset.top) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 3 + }); + } + + // 变更参考线样式 + if(area.showGrid) { + setStyle(e.instance, 'gridStylesList', [ + { + 'border-width': '1px 0 0 0', + left: (area.left + areaOffset.left) + 'px', + right: (area.right + areaOffset.right) + 'px', + top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) / 3 - 0.5) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '1px 0 0 0', + left: (area.left + areaOffset.left) + 'px', + right: (area.right + areaOffset.right) + 'px', + top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) * 2 / 3 - 0.5) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 1px 0 0', + top: (area.top + areaOffset.top) + 'px', + bottom: (area.bottom + areaOffset.bottom) + 'px', + left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) / 3 - 0.5) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 1px 0 0', + top: (area.top + areaOffset.top) + 'px', + bottom: (area.bottom + areaOffset.bottom) + 'px', + left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) * 2 / 3 - 0.5) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 3 + } + ]); + } + + // 变更四个伸缩角样式 + if(area.showAngle) { + setStyle(e.instance, 'angleStylesList', [ + { + 'border-width': area.angleBorderWidth + 'px 0 0 ' + area.angleBorderWidth + 'px', + left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px', + top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0 0', + left: (area.right + areaOffset.right - area.angleSize) + 'px', + top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px', + left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px', + top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0', + left: (area.right + areaOffset.right - area.angleSize) + 'px', + top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px', + 'z-index': area.zIndex + 3 + } + ]); + } + + // 变更圆角样式 + if(area.radius > 0) { + var radius = area.radius; + if(area.width === area.height && area.radius >= area.width / 2) { // 圆形 + radius = (area.width / 2); + } else { // 圆角矩形 + if(area.width !== area.height) { // 限制圆角半径不能超过短边的一半 + radius = Math.min(area.width / 2, area.height / 2, radius); + } + } + setStyle(e.instance, 'circleBoxStyles', { + left: (area.left + areaOffset.left) + 'px', + top: (area.top + areaOffset.top) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 2 + }); + setStyle(e.instance, 'circleStyles', { + 'box-shadow': '0 0 0 ' + Math.max(area.width, area.height) + 'px rgba(51, 51, 51, 0.8)', + 'border-radius': radius + 'px' + }); + } +}; +/** + * 缩放图片 + * @param {Object} e 布局信息 + */ +function scaleImage(e) { + // console.log('scaleImage', e) + var last = scale; + scale = Math.min(Math.max(e.scale + scale, minScale), img.maxScale); + if(last !== scale) { + img.width = num(img.oldWidth * scale); + img.height = num(img.oldHeight * scale); + // 参考问题:有一个长4000px、宽4000px的四方形ABCD,A点的坐标固定在(-2000,-2000), + // 该四边形上有一个点E,坐标为(-100,-300),将该四方形复制一份并缩小到90%后, + // 新四边形的A点坐标为多少时可使新四边形的E点与原四边形的E点重合? + // 预期效果:从图中选取某点(参照物)为中心点进行缩放,缩放时无论图像怎么变化,该点位置始终固定不变 + // 计算方法:以相同起点先计算缩放前后两点间的距离,再加上原图像偏移量即可 + e.x = num((e.x - offset.x) * (1 - scale / last)); + e.y = num((e.y - offset.y) * (1 - scale / last)); + changeImageRect(e); + return true; + } + return false; +}; +/** + * 获取触摸点在哪个角 + * @param {number} x 触摸点x轴坐标 + * @param {number} y 触摸点y轴坐标 + * @return {number} 角的位置:0=无;1=左上;2=右上;3=左下;4=右下; + */ +function getToucheAngle(x, y) { + // console.log('getToucheAngle', x, y, JSON.stringify(area)) + var o = area.angleBorderWidth; // 需扩大触发范围则把 o 值加大即可 + var oy = sys.navigation ? 0 : sys.windowTop; + if(y >= area.top - o + oy && y <= area.top + area.angleSize + o + oy) { + if(x >= area.left - o && x <= area.left + area.angleSize + o) { + return 1; // 左上角 + } else if(x >= area.right - area.angleSize - o && x <= area.right + o) { + return 2; // 右上角 + } + } else if(y >= area.bottom - area.angleSize - o + oy && y <= area.bottom + o + oy) { + if(x >= area.left - o && x <= area.left + area.angleSize + o) { + return 3; // 左下角 + } else if(x >= area.right - area.angleSize - o && x <= area.right + o) { + return 4; // 右下角 + } + } + return 0; // 无触摸到角 +}; +/** + * 重置数据 + */ +function resetData() { + offset = { x: 0, y: 0 }; + scale = 1; + minScale = img.minScale; + rotate = 0; +}; +function getTouchs(touches) { + var result = []; + var len = touches ? touches.length : 0 + for (var i = 0; i < len; i++) { + result[i] = { + pageX: touches[i].pageX, + // h5无标题栏时,窗口顶部距离仍为标题栏高度,且触摸点y轴坐标还是有标题栏的值,即减去标题栏高度的值 + pageY: touches[i].pageY + sys.windowTop + }; + } + return result; +}; +var mouseEvent = false; +export default { + data() { + return { + imageStyles: {}, + maskStylesList: [{}, {}, {}, {}], + borderStyles: {}, + gridStylesList: [{}, {}, {}, {}], + angleStylesList: [{}, {}, {}, {}], + circleBoxStyles: {}, + circleStyles: {} + } + }, + created() { + // 监听 PC 端鼠标滚轮 + // #ifdef H5 + platform === 'H5' && window.addEventListener('mousewheel', async (e) => { + var touchs = getTouchs([e]) + img.src && scaleImage({ + instance: await this.getInstance(), + check: true, + // 鼠标向上滚动时,deltaY 固定 -100,鼠标向下滚动时,deltaY 固定 100 + scale: e.deltaY > 0 ? -0.05 : 0.05, + x: touchs[0].pageX, + y: touchs[0].pageY + }); + }); + // #endif + }, + // #ifdef H5 + mounted() { + platform === 'H5' && this.initH5Events(); + }, + // #endif + setPlatform(p) { + platform = p; + }, + methods: { + // #ifdef H5 + getTouchEvent(e) { + e.touches = [ + { pageX: e.pageX, pageY: e.pageY } + ]; + return e; + }, + initH5Events() { + const preview = document.getElementById('pic-preview'); + preview?.addEventListener('mousedown', (e, ev) => { + mouseEvent = true; + this.touchstart(this.getTouchEvent(e)); + }); + preview?.addEventListener('mousemove', (e) => { + if (!mouseEvent) return; + this.touchmove(this.getTouchEvent(e)); + }); + preview?.addEventListener('mouseup', (e) => { + mouseEvent = false; + this.touchend(this.getTouchEvent(e)) + }); + preview?.addEventListener('mouseleave', (e) => { + mouseEvent = false; + this.touchend(this.getTouchEvent(e)) + }); + }, + // #endif + async getInstance() { + // #ifdef APP-PLUS + if(platform === 'APP') + return this.$ownerInstance + ? Promise.resolve(this.$ownerInstance) + : new Promise((resolve) => { + setTimeout(async () => { + resolve(await this.getInstance()); + }); + }); + // #endif + // #ifdef H5 + if(platform === 'H5') + return Promise.resolve(this); + // #endif + }, + /** + * 初始化:观察数据变更 + * @param {Object} newVal 新数据 + * @param {Object} oldVal 旧数据 + * @param {Object} o 组件实例对象 + */ + initObserver: async function(newVal, oldVal, o, i) { + // console.log('initObserver', newVal, oldVal, o, i) + if(newVal && (!img.src || timestamp !== newVal.timestamp)) { + timestamp = newVal.timestamp; + img = newVal.img; + sys = newVal.sys; + area = newVal.area; + minScale = img.minScale; + resetData(); + const instance = await this.getInstance() + img.src && changeImageRect({ + instance, + x: (sys.windowWidth - img.width) / 2, + y: (sys.windowHeight + sys.windowTop - sys.offsetBottom - img.height) / 2 + }); + changeAreaRect({ + instance + }); + } + }, + /** + * 鼠标滚轮滚动 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + mousewheel: function(e, o) { + // h5平台 wheel 事件无法判断滚轮滑动方向,需使用 mousewheel + }, + /** + * 触摸开始 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + touchstart: function(e, o) { + if(!img.src) return; + touches = getTouchs(e.touches); + activeAngle = area.showAngle ? getToucheAngle(touches[0].pageX, touches[0].pageY) : 0; + if(touches.length === 1 && activeAngle !== 0) { + touchType = 'stretch'; // 伸缩裁剪区域 + } else { + touchType = ''; + } + // console.log('touchstart', e, activeAngle) + }, + /** + * 触摸移动 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + touchmove: async function(e, o) { + if(!img.src) return; + // console.log('touchmove', e, o) + e.touches = getTouchs(e.touches); + if(touchType === 'stretch') { // 触摸四个角进行拉伸 + var point = e.touches[0]; + var start = touches[0]; + var x = point.pageX - start.pageX; + var y = point.pageY - start.pageY; + if(x !== 0 || y !== 0) { + var maxX = num(area.width * (1 - area.minScale)); + var maxY = num(area.height * (1 - area.minScale)); + // console.log(x, y, maxX, maxY, offset, area) + touches[0] = point; + var r = rotate / 90 % 2; + var m = r === 1 ? num((img.height - img.width) / 2) : 0; // 宽高差值一半 + var xCompare = r === 1 ? lessThanByFault(img.height, area.width) : lessThanByFault(img.width, area.width); + var yCompare = r === 1 ? lessThanByFault(img.width, area.height) : lessThanByFault(img.height, area.height) + var isInclude = xCompare && yCompare; + var isIntersect = area.checkRange && (xCompare || yCompare); // 图片是否包含在裁剪区域内 + var isReverse = !isInclude || num((offset.x - area.left) / area.width) <= num((offset.y - area.top) / area.height) || (area.width > area.height && img.width < img.height && r === 1); + switch(activeAngle) { + case 1: // 左上角 + x = num(x + areaOffset.left); + y = num(y + areaOffset.top); + if(x >= 0 && y >= 0) { // 有效滑动 + var t = num(offset.y + m - area.top); + var l = num(offset.x - m - area.left); + // && (offset.x + img.width < area.right || offset.y + img.height < area.bottom) + var max = isIntersect && ((l >= 0) || (t >= 0)) + ? minimum(t, l) + : false; + if(x > y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(x > maxX) x = maxX; + y = num(x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(y > maxY) y = maxY; + x = num(y * area.width / area.height); + } + areaOffset.left = x; + areaOffset.top = y; + } + break; + case 2: // 右上角 + x = num(x + areaOffset.right); + y = num(y + areaOffset.top); + if(x <= 0 && y >= 0) { // 有效滑动 + var w = (r === 1 ? img.height : img.width); + var t = num(offset.y + m - area.top); + var l = num(area.right + m - offset.x - w); + var max = isIntersect && ((t >= 0) || (l >= 0)) + ? minimum(t, l) + : false; + if(-x > y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(-x > maxX) x = -maxX; + y = num(-x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(y > maxY) y = maxY; + x = num(-y * area.width / area.height); + } + areaOffset.right = x; + areaOffset.top = y; + } + break; + case 3: // 左下角 + x += num(x + areaOffset.left); + y += num(y + areaOffset.bottom); + if(x >= 0 && y <= 0) { // 有效滑动 + var w = (r === 1 ? img.width : img.height); + var t = num(area.bottom - m - offset.y - w); + var l = num(offset.x - m - area.left); + var max = isIntersect && ((l >= 0) || (t >= 0)) + ? minimum(t, l) + : false; + if(x > -y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(x > maxX) x = maxX; + y = num(-x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(-y > maxY) y = -maxY; + x = num(-y * area.width / area.height); + } + areaOffset.left = x; + areaOffset.bottom = y; + } + break; + case 4: // 右下角 + x = num(x + areaOffset.right); + y = num(y + areaOffset.bottom); + if(x <= 0 && y <= 0) { // 有效滑动 + var w = (r === 1 ? img.height : img.width); + var h = (r === 1 ? img.width : img.height); + var t = num(area.bottom - offset.y - h - m); + var l = num(area.right + m - offset.x - w); + var max = isIntersect && ((l >= 0) || (t >= 0)) + ? minimum(t, l) + : false; + if(-x > -y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(-x > maxX) x = -maxX; + y = num(x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(-y > maxY) y = -maxY; + x = num(y * area.width / area.height); + } + areaOffset.right = x; + areaOffset.bottom = y; + } + break; + } + // console.log(x, y, JSON.stringify(areaOffset)) + changeAreaRect({ + instance: await this.getInstance(), + }); + // this.draw(); + } + } else if (e.touches.length == 2) { // 双点触摸缩放 + var start = getDistanceByTouches(touches); + var end = getDistanceByTouches(e.touches); + scaleImage({ + instance: await this.getInstance(), + check: !area.bounce, + scale: (end.c - start.c) / 100, + x: end.x, + y: end.y + }); + touchType = 'scale'; + } else if(touchType === 'scale') {// 从双点触摸变成单点触摸 / 从缩放变成拖动 + touchType = 'move'; + } else { + changeImageRect({ + instance: await this.getInstance(), + check: !area.bounce, + x: e.touches[0].pageX - touches[0].pageX, + y: e.touches[0].pageY - touches[0].pageY + }); + touchType = 'move'; + } + touches = e.touches; + }, + /** + * 触摸结束 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + touchend: async function(e, o) { + if(!img.src) return; + if(touchType === 'stretch') { // 拉伸裁剪区域的四个角缩放 + // 裁剪区域宽度被缩放到多少 + var left = areaOffset.left; + var right = areaOffset.right; + var top = areaOffset.top; + var bottom = areaOffset.bottom; + var w = area.width + right - left; + var h = area.height + bottom - top; + // 图像放大倍数 + var p = scale * (area.width / w) - scale; + // 复原裁剪区域 + areaOffset = { left: 0, right: 0, top: 0, bottom: 0 }; + changeAreaRect({ + instance: await this.getInstance(), + }); + scaleImage({ + instance: await this.getInstance(), + scale: p, + x: area.left + left + (1 === activeAngle || 3 === activeAngle ? w : 0), + y: area.top + top + (1 === activeAngle || 2 === activeAngle ? h : 0) + }); + } else if (area.bounce) { // 检查边界并矫正,实现拖动到边界时有回弹效果 + changeImageRect({ + instance: await this.getInstance(), + check: true + }); + } + }, + /** + * 顺时针翻转图片90° + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + rotateImage: async function(r) { + rotate = (rotate + (r || 90)) % 360; + + if(img.minScale >= 1 && area.checkRange) { + // 因图片宽高可能不等,翻转后图片宽高需足够填满裁剪区域 + minScale = 1; + if(img.width < area.height) { + minScale = area.height / img.oldWidth; + } else if(img.height < area.width) { + minScale = area.width / img.oldHeight; + } + if(minScale !== 1) { + scaleImage({ + instance: await this.getInstance(), + scale: minScale - scale, + x: sys.windowWidth / 2, + y: (sys.windowHeight - sys.offsetBottom) / 2 + }); + } + } + + // 由于拖动画布后会导致图片位置偏移,翻转时的旋转中心点需是图片区域+偏移区域的中心点 + // 翻转x轴中心点 = (超出裁剪区域右侧的图片宽度 - 超出裁剪区域左侧的图片宽度) / 2 + // 翻转y轴中心点 = (超出裁剪区域下方的图片宽度 - 超出裁剪区域上方的图片宽度) / 2 + var ox = ((offset.x + img.width - area.right) - (area.left - offset.x)) / 2; + var oy = ((offset.y + img.height - area.bottom) - (area.top - offset.y)) / 2; + changeImageRect({ + instance: await this.getInstance(), + check: true, + x: -ox - oy, + y: -oy + ox + }); + }, + rotateImage90: function() { + this.rotateImage(90) + }, + rotateImage270: function() { + this.rotateImage(270) + }, + } +} \ No newline at end of file diff --git a/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue b/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue new file mode 100644 index 0000000..bfb34fb --- /dev/null +++ b/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue @@ -0,0 +1,743 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs b/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs new file mode 100644 index 0000000..98a5116 --- /dev/null +++ b/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs @@ -0,0 +1,727 @@ +/** + * 图片编辑器-手势监听 + * 1. wxs 暂不支持 es6 语法 + * 2. 支持编译到微信小程序、QQ小程序、app-vue、H5上(uni-app 2.2.5及以上版本) + */ +/** 图片偏移量 */ +var offset = { x: 0, y: 0 }; +/** 图片缩放比例 */ +var scale = 1; +/** 图片最小缩放比例 */ +var minScale = 1; +/** 图片旋转角度 */ +var rotate = 0; +/** 触摸点 */ +var touches = []; +/** 图片布局信息 */ +var img = {}; +/** 系统信息 */ +var sys = {}; +/** 裁剪区域布局信息 */ +var area = {}; +/** 触摸行为类型 */ +var touchType = ''; +/** 操作角的位置 */ +var activeAngle = 0; +/** 裁剪区域布局信息偏移量 */ +var areaOffset = { left: 0, right: 0, top: 0, bottom: 0 }; +/** 容错值 */ +var fault = 0.000001; +/** + * 获取a、b两数中的最小正数 + * @param a + * @param b + */ +function minimum(a, b) { + if (a > 0 && b < 0) return a; + if (a < 0 && b > 0) return b; + if (a > 0 && b > 0) return Math.min(a, b); + return 0; +} +/** + * 在容错访问内获取n近似值 + * @param n + */ +function num(n) { + var m = parseFloat((n).toFixed(6)); + return m === fault || m === -fault ? 0 : m; +} +/** + * 比较a值在容错值范围内是否等于b值 + * @param a + * @param b + */ +function equalsByFault(a, b) { + return Math.abs(a - b) <= fault; +} +/** + * 比较a值在容错值范围内是否小于b值 + * @param a + * @param b + */ +function lessThanByFault(a, b) { + var c = a - b; + return c < 0 ? c < -fault : c < fault; +} +/** + * 验证并获取有效最大值 + * @param v + * @param max + * @param isInclude + * @param x + * @param y + * @param rate + * @returns + */ +function validMax(v, max, isInclude, x, y, rate) { + if(typeof max === 'number') { + if(isInclude && equalsByFault(max, y)) { // 宽高不等时,x轴用y轴值要做等比例转换 + var n = num(max * rate); + if (n <= x) return n; // 转化后值在x轴最大值范围内 + return x; // 转化后值超出x轴最大值范围则用最大值 + } + return max; + } + return v; +} +/** + * 计算两点间距 + * @param {Object} touches 触摸点信息 + */ +function getDistanceByTouches(touches) { + // 根据勾股定理求两点间距离 + var a = touches[1].pageX - touches[0].pageX; + var b = touches[1].pageY - touches[0].pageY; + var c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); + // 求两点间的中点坐标 + // 1. a、b可能为负值 + // 2. 在求a、b时,如用touches[1]减touches[0],则求中点坐标也得用touches[1]减a/2、b/2 + // 3. 同理,在求a、b时,也可用touches[0]减touches[1],则求中点坐标也得用touches[0]减a/2、b/2 + var x = touches[1].pageX - a / 2; + var y = touches[1].pageY - b / 2; + return { c, x, y }; +}; +/** + * 修正取值 + * @param {Object} a + * @param {Object} b + * @param {Object} c + * @param {Object} reverse 是否反向 + */ +function correctValue(a, b, c, reverse) { + return num(reverse ? Math.max(Math.min(a, b), c) : Math.min(Math.max(a, b), c)); +} + +/** + * 旋转90°或270°时检查边界:限制 x、y 拖动范围,禁止滑出边界 + * @param {Object} e 点坐标 + * @param {Object} xReverse x是否反向 + * @param {Object} yReverse y是否反向 + */ +function checkRotateRange(e, xReverse, yReverse) { + var o = num((img.height - img.width) / 2); // 宽高差值一半 + return { + x: correctValue(e.x, -img.height + o + area.width + area.left, area.left + o, xReverse), + y: correctValue(e.y, -img.width - o + area.height + area.top, area.top - o, yReverse) + }; +} + +/** + * 检查边界:限制 x、y 拖动范围,禁止滑出边界 + * @param {Object} e 点坐标 + */ +function checkRange(e) { + var r = rotate / 90 % 2; + if(r === 1) { // 因图片宽高可能不等,翻转 90° 或 270° 后图片宽高需反着计算,且左右和上下边界要根据差值做偏移 + if (area.width === area.height) { + return checkRotateRange(e, img.height < area.height, img.width < area.width); + } + var isInclude = img.height < area.width && img.width < area.height; // 图片是否包含在裁剪区域内 + if (img.width < area.height || img.height < area.width) { + if (area.width < area.height && img.width < img.height) { + return isInclude + ? checkRotateRange(e, area.width < area.height, area.width < area.height) + : checkRotateRange(e, false, true); + } + if (area.height < area.width && img.height < img.width) { + return isInclude + ? checkRotateRange(e, area.height < area.width, area.height < area.width) + : checkRotateRange(e, true, false); + } + } + if (img.height >= area.width && img.width >= area.height) { + return checkRotateRange(e, false, false); + } + if (isInclude) { + return area.height < area.width + ? checkRotateRange(e, true, true) + : checkRotateRange(e, area.width < area.height, area.width < area.height); + } + if (img.height < area.width && !img.width < area.height) { + return checkRotateRange(e, true, false); + } + if (!img.height < area.width && img.width < area.height) { + return checkRotateRange(e, false, true); + } + return checkRotateRange(e, img.height < area.height, img.width < area.width); + } + return { + x: correctValue(e.x, -img.width + area.width + area.left, area.left, img.width < area.width), + y: correctValue(e.y, -img.height + area.height + area.top, area.top, img.height < area.height) + }; +}; +/** + * 变更图片布局信息 + * @param {Object} e 布局信息 + */ +function changeImageRect(e) { + offset.x += e.x || 0; + offset.y += e.y || 0; + var image = e.instance.selectComponent('.crop-image'); + if(e.check && area.checkRange) { // 检查边界 + var point = checkRange(offset); + if(offset.x !== point.x || offset.y !== point.y) { + offset = point; + } + } + // image.setStyle({ + // width: img.width + 'px', + // height: img.height + 'px', + // transform: 'translate(' + offset.x + 'px, ' + offset.y + 'px) rotate(' + rotate +'deg)' + // }); + var ox = (img.width - img.oldWidth) / 2; + var oy = (img.height - img.oldHeight) / 2; + image.setStyle({ + width: img.oldWidth + 'px', + height: img.oldHeight + 'px', + transform: (img.gpu ? 'translateZ(0) ' : '') + 'translate(' + (offset.x + ox) + 'px, ' + (offset.y + oy) + 'px) rotate(' + rotate +'deg) scale(' + scale + ')' + }); + + e.instance.callMethod('dataChange', { + width: img.width, + height: img.height, + x: offset.x, + y: offset.y, + rotate: rotate + }); +}; +/** + * 变更裁剪区域布局信息 + * @param {Object} e 布局信息 + */ +function changeAreaRect(e) { + // 变更蒙版样式 + var masks = e.instance.selectAllComponents('.crop-mask-block'); + var maskStyles = [ + { + left: 0, + width: (area.left + areaOffset.left) + 'px', + top: 0, + bottom: 0, + 'z-index': area.zIndex + 2 + }, + { + left: (area.right + areaOffset.right) + 'px', + right: 0, + top: 0, + bottom: 0, + 'z-index': area.zIndex + 2 + }, + { + left: (area.left + areaOffset.left) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + top: 0, + height: (area.top + areaOffset.top) + 'px', + 'z-index': area.zIndex + 2 + }, + { + left: (area.left + areaOffset.left) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + top: (area.bottom + areaOffset.bottom) + 'px', + // height: (area.top - areaOffset.bottom + sys.offsetBottom) + 'px', + bottom: 0, + 'z-index': area.zIndex + 2 + } + ]; + var len = masks.length; + for (var i = 0; i < len; i++) { + masks[i].setStyle(maskStyles[i]); + } + + // 变更边框样式 + if(area.showBorder) { + var border = e.instance.selectComponent('.crop-border'); + border.setStyle({ + left: (area.left + areaOffset.left) + 'px', + top: (area.top + areaOffset.top) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 3 + }); + } + + // 变更参考线样式 + if(area.showGrid) { + var grids = e.instance.selectAllComponents('.crop-grid'); + var gridStyles = [ + { + 'border-width': '1px 0 0 0', + left: (area.left + areaOffset.left) + 'px', + right: (area.right + areaOffset.right) + 'px', + top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) / 3 - 0.5) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '1px 0 0 0', + left: (area.left + areaOffset.left) + 'px', + right: (area.right + areaOffset.right) + 'px', + top: (area.top + areaOffset.top + (area.height + areaOffset.bottom - areaOffset.top) * 2 / 3 - 0.5) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 1px 0 0', + top: (area.top + areaOffset.top) + 'px', + bottom: (area.bottom + areaOffset.bottom) + 'px', + left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) / 3 - 0.5) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 1px 0 0', + top: (area.top + areaOffset.top) + 'px', + bottom: (area.bottom + areaOffset.bottom) + 'px', + left: (area.left + areaOffset.left + (area.width + areaOffset.right - areaOffset.left) * 2 / 3 - 0.5) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 3 + } + ]; + var len = grids.length; + for (var i = 0; i < len; i++) { + grids[i].setStyle(gridStyles[i]); + } + } + + // 变更四个伸缩角样式 + if(area.showAngle) { + var angles = e.instance.selectAllComponents('.crop-angle'); + var angleStyles = [ + { + 'border-width': area.angleBorderWidth + 'px 0 0 ' + area.angleBorderWidth + 'px', + left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px', + top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0 0', + left: (area.right + areaOffset.right - area.angleSize) + 'px', + top: (area.top + areaOffset.top - area.angleBorderWidth) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px', + left: (area.left + areaOffset.left - area.angleBorderWidth) + 'px', + top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px', + 'z-index': area.zIndex + 3 + }, + { + 'border-width': '0 ' + area.angleBorderWidth + 'px ' + area.angleBorderWidth + 'px 0', + left: (area.right + areaOffset.right - area.angleSize) + 'px', + top: (area.bottom + areaOffset.bottom - area.angleSize) + 'px', + 'z-index': area.zIndex + 3 + } + ]; + var len = angles.length; + for (var i = 0; i < len; i++) { + angles[i].setStyle(angleStyles[i]); + } + } + + // 变更圆角样式 + if(area.radius > 0) { + var circleBox = e.instance.selectComponent('.crop-circle-box'); + var circle = e.instance.selectComponent('.crop-circle'); + var radius = area.radius; + if(area.width === area.height && area.radius >= area.width / 2) { // 圆形 + radius = (area.width / 2); + } else { // 圆角矩形 + if(area.width !== area.height) { // 限制圆角半径不能超过短边的一半 + radius = Math.min(area.width / 2, area.height / 2, radius); + } + } + circleBox.setStyle({ + left: (area.left + areaOffset.left) + 'px', + top: (area.top + areaOffset.top) + 'px', + width: (area.width + areaOffset.right - areaOffset.left) + 'px', + height: (area.height + areaOffset.bottom - areaOffset.top) + 'px', + 'z-index': area.zIndex + 2 + }); + circle.setStyle({ + 'box-shadow': '0 0 0 ' + Math.max(area.width, area.height) + 'px rgba(51, 51, 51, 0.8)', + 'border-radius': radius + 'px' + }); + } +}; +/** + * 缩放图片 + * @param {Object} e 布局信息 + */ +function scaleImage(e) { + var last = scale; + scale = Math.min(Math.max(e.scale + scale, minScale), img.maxScale); + if(last !== scale) { + img.width = num(img.oldWidth * scale); + img.height = num(img.oldHeight * scale); + // 参考问题:有一个长4000px、宽4000px的四方形ABCD,A点的坐标固定在(-2000,-2000), + // 该四边形上有一个点E,坐标为(-100,-300),将该四方形复制一份并缩小到90%后, + // 新四边形的A点坐标为多少时可使新四边形的E点与原四边形的E点重合? + // 预期效果:从图中选取某点(参照物)为中心点进行缩放,缩放时无论图像怎么变化,该点位置始终固定不变 + // 计算方法:以相同起点先计算缩放前后两点间的距离,再加上原图像偏移量即可 + e.x = num((e.x - offset.x) * (1 - scale / last)); + e.y = num((e.y - offset.y) * (1 - scale / last)); + changeImageRect(e); + return true; + } + return false; +}; +/** + * 获取触摸点在哪个角 + * @param {number} x 触摸点x轴坐标 + * @param {number} y 触摸点y轴坐标 + * @return {number} 角的位置:0=无;1=左上;2=右上;3=左下;4=右下; + */ +function getToucheAngle(x, y) { + // console.log('getToucheAngle', x, y, JSON.stringify(area)) + var o = area.angleBorderWidth; // 需扩大触发范围则把 o 值加大即可 + if(y >= area.top - o && y <= area.top + area.angleSize + o) { + if(x >= area.left - o && x <= area.left + area.angleSize + o) { + return 1; // 左上角 + } else if(x >= area.right - area.angleSize - o && x <= area.right + o) { + return 2; // 右上角 + } + } else if(y >= area.bottom - area.angleSize - o && y <= area.bottom + o) { + if(x >= area.left - o && x <= area.left + area.angleSize + o) { + return 3; // 左下角 + } else if(x >= area.right - area.angleSize - o && x <= area.right + o) { + return 4; // 右下角 + } + } + return 0; // 无触摸到角 +}; +/** + * 重置数据 + */ +function resetData() { + offset = { x: 0, y: 0 }; + scale = 1; + minScale = img.minScale; + rotate = 0; +}; +/** +* 顺时针翻转图片90° +* @param {Object} e 事件对象 +* @param {Object} o 组件实例对象 +*/ +function rotateImage(e, o, r) { + rotate = (rotate + r) % 360; + if(img.minScale >= 1 && area.checkRange) { + // 因图片宽高可能不等,翻转后图片宽高需足够填满裁剪区域 + minScale = 1; + if(img.width < area.height) { + minScale = area.height / img.oldWidth; + } else if(img.height < area.width) { + minScale = area.width / img.oldHeight; + } + if(minScale !== 1) { + scaleImage({ + instance: o, + scale: minScale - scale, + x: sys.windowWidth / 2, + y: (sys.windowHeight - sys.offsetBottom) / 2 + }); + } + } + + // 由于拖动画布后会导致图片位置偏移,翻转时的旋转中心点需是图片区域+偏移区域的中心点 + // 翻转x轴中心点 = (超出裁剪区域右侧的图片宽度 - 超出裁剪区域左侧的图片宽度) / 2 + // 翻转y轴中心点 = (超出裁剪区域下方的图片宽度 - 超出裁剪区域上方的图片宽度) / 2 + var ox = ((offset.x + img.width - area.right) - (area.left - offset.x)) / 2; + var oy = ((offset.y + img.height - area.bottom) - (area.top - offset.y)) / 2; + changeImageRect({ + instance: o, + check: true, + x: -ox - oy, + y: -oy + ox + }); +}; +module.exports = { + /** + * 初始化:观察数据变更 + * @param {Object} newVal 新数据 + * @param {Object} oldVal 旧数据 + * @param {Object} o 组件实例对象 + */ + initObserver: function(newVal, oldVal, o, i) { + if(newVal) { + img = newVal.img; + sys = newVal.sys; + area = newVal.area; + minScale = img.minScale; + resetData(); + img.src && changeImageRect({ + instance: o, + x: (sys.windowWidth - img.width) / 2, + y: (sys.windowHeight - sys.offsetBottom - img.height) / 2 + }); + changeAreaRect({ + instance: o + }); + // console.log('initRect', JSON.stringify(newVal)) + } + }, + /** + * 鼠标滚轮滚动 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + mousewheel: function(e, o) { + if(!img.src) return; + scaleImage({ + instance: o, + check: true, + // 鼠标向上滚动时,deltaY 固定 -100,鼠标向下滚动时,deltaY 固定 100 + scale: e.detail.deltaY > 0 ? -0.05 : 0.05, + x: e.touches[0].pageX, + y: e.touches[0].pageY + }); + }, + /** + * 触摸开始 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + touchstart: function(e, o) { + if(!img.src) return; + touches = e.touches; + activeAngle = area.showAngle ? getToucheAngle(touches[0].pageX, touches[0].pageY) : 0; + if(touches.length === 1 && activeAngle !== 0) { + touchType = 'stretch'; // 伸缩裁剪区域 + } else { + touchType = ''; + } + // console.log('touchstart', JSON.stringify(e), activeAngle) + }, + /** + * 触摸移动 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + touchmove: function(e, o) { + if(!img.src) return; + // console.log('touchmove', JSON.stringify(e), JSON.stringify(o)) + if(touchType === 'stretch') { // 触摸四个角进行拉伸 + var point = e.touches[0]; + var start = touches[0]; + var x = point.pageX - start.pageX; + var y = point.pageY - start.pageY; + if(x !== 0 || y !== 0) { + var maxX = num(area.width * (1 - area.minScale)); + var maxY = num(area.height * (1 - area.minScale)); + // console.log(x, y, maxX, maxY, offset, area) + touches[0] = point; + var r = rotate / 90 % 2; + var m = r === 1 ? num((img.height - img.width) / 2) : 0; // 宽高差值一半 + var xCompare = r === 1 ? lessThanByFault(img.height, area.width) : lessThanByFault(img.width, area.width); + var yCompare = r === 1 ? lessThanByFault(img.width, area.height) : lessThanByFault(img.height, area.height) + var isInclude = xCompare && yCompare; + var isIntersect = area.checkRange && (xCompare || yCompare); // 图片是否包含在裁剪区域内 + var isReverse = !isInclude || num((offset.x - area.left) / area.width) <= num((offset.y - area.top) / area.height) || (area.width > area.height && img.width < img.height && r === 1); + switch(activeAngle) { + case 1: // 左上角 + x = num(x + areaOffset.left); + y = num(y + areaOffset.top); + if(x >= 0 && y >= 0) { // 有效滑动 + var t = num(offset.y + m - area.top); + var l = num(offset.x - m - area.left); + // && (offset.x + img.width < area.right || offset.y + img.height < area.bottom) + var max = isIntersect && ((l >= 0) || (t >= 0)) + ? minimum(t, l) + : false; + if(x > y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(x > maxX) x = maxX; + y = num(x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(y > maxY) y = maxY; + x = num(y * area.width / area.height); + } + areaOffset.left = x; + areaOffset.top = y; + } + break; + case 2: // 右上角 + x = num(x + areaOffset.right); + y = num(y + areaOffset.top); + if(x <= 0 && y >= 0) { // 有效滑动 + var w = (r === 1 ? img.height : img.width); + var t = num(offset.y + m - area.top); + var l = num(area.right + m - offset.x - w); + var max = isIntersect && ((t >= 0) || (l >= 0)) + ? minimum(t, l) + : false; + // var max = isInclude && ((offset.x > 0 && offset.x + img.width <= area.right) || (offset.y > 0 && offset.y >= area.top)) + // ? minimum(offset.y - area.top, area.right - offset.x - img.width) + // : false; + // console.log(offset.x, offset.y, img.width, img.height, area.top, area.right, m, max) + // console.log(offset.y + m - area.top, area.right + m - offset.x - w) + if(-x > y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(-x > maxX) x = -maxX; + y = num(-x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(y > maxY) y = maxY; + x = num(-y * area.width / area.height); + } + areaOffset.right = x; + areaOffset.top = y; + } + break; + case 3: // 左下角 + x += num(x + areaOffset.left); + y += num(y + areaOffset.bottom); + if(x >= 0 && y <= 0) { // 有效滑动 + var w = (r === 1 ? img.width : img.height); + var t = num(area.bottom - m - offset.y - w); + var l = num(offset.x - m - area.left); + var max = isIntersect && ((l >= 0) || (t >= 0)) + ? minimum(t, l) + : false; + if(x > -y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(x > maxX) x = maxX; + y = num(-x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(-y > maxY) y = -maxY; + x = num(-y * area.width / area.height); + } + areaOffset.left = x; + areaOffset.bottom = y; + } + break; + case 4: // 右下角 + x = num(x + areaOffset.right); + y = num(y + areaOffset.bottom); + if(x <= 0 && y <= 0) { // 有效滑动 + var w = (r === 1 ? img.height : img.width); + var h = (r === 1 ? img.width : img.height); + var t = num(area.bottom - offset.y - h - m); + var l = num(area.right + m - offset.x - w); + var max = isIntersect && ((l >= 0) || (t >= 0)) + ? minimum(t, l) + : false; + if(-x > -y && isReverse) { // 以x轴滑动距离为缩放基准 + maxX = validMax(maxX, max, isInclude, l, t, area.width / area.height); + if(-x > maxX) x = -maxX; + y = num(x * area.height / area.width); + } else { // 以y轴滑动距离为缩放基准 + maxY = validMax(maxY, max, isInclude, t, l, area.height / area.width); + if(-y > maxY) y = -maxY; + x = num(y * area.width / area.height); + } + areaOffset.right = x; + areaOffset.bottom = y; + } + break; + } + // console.log(x, y, JSON.stringify(areaOffset)) + changeAreaRect({ + instance: o, + }); + // this.draw(); + } + } else if (e.touches.length == 2) { // 双点触摸缩放 + var start = getDistanceByTouches(touches); + var end = getDistanceByTouches(e.touches); + scaleImage({ + instance: o, + check: !area.bounce, + scale: (end.c - start.c) / 100, + x: end.x, + y: end.y + }); + touchType = 'scale'; + } else if(touchType === 'scale') {// 从双点触摸变成单点触摸 / 从缩放变成拖动 + touchType = 'move'; + } else { + changeImageRect({ + instance: o, + check: !area.bounce, + x: e.touches[0].pageX - touches[0].pageX, + y: e.touches[0].pageY - touches[0].pageY + }); + touchType = 'move'; + } + touches = e.touches; + }, + /** + * 触摸结束 + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + touchend: function(e, o) { + if(!img.src) return; + if(touchType === 'stretch') { // 拉伸裁剪区域的四个角缩放 + // 裁剪区域宽度被缩放到多少 + var left = areaOffset.left; + var right = areaOffset.right; + var top = areaOffset.top; + var bottom = areaOffset.bottom; + var w = area.width + right - left; + var h = area.height + bottom - top; + // 图像放大倍数 + var p = scale * (area.width / w) - scale; + // 复原裁剪区域 + areaOffset = { left: 0, right: 0, top: 0, bottom: 0 }; + changeAreaRect({ + instance: o, + }); + scaleImage({ + instance: o, + scale: p, + x: area.left + left + (1 === activeAngle || 3 === activeAngle ? w : 0), + y: area.top + top + (1 === activeAngle || 2 === activeAngle ? h : 0) + }); + } else if (area.bounce) { // 检查边界并矫正,实现拖动到边界时有回弹效果 + changeImageRect({ + instance: o, + check: true + }); + } + }, + /** + * 顺时针翻转图片90° + * @param {Object} e 事件对象 + * @param {Object} o 组件实例对象 + */ + rotateImage: function(e, o) { + rotateImage(e, o, 90); + }, + rotateImage90: function(e, o) { + rotateImage(e, o, 90) + }, + rotateImage270: function(e, o) { + rotateImage(e, o, 270) + }, + // 此处只用于对齐其他平台端的样式参数,防止异常,无作用 + imageStyles: '', + maskStylesList: ['', '', '', ''], + borderStyles: '', + gridStylesList: ['', '', '', ''], + angleStylesList: ['', '', '', ''], + circleBoxStyles: '', + circleStyles: '', +} \ No newline at end of file diff --git a/uni_modules/qf-image-cropper/package.json b/uni_modules/qf-image-cropper/package.json new file mode 100644 index 0000000..f101c5b --- /dev/null +++ b/uni_modules/qf-image-cropper/package.json @@ -0,0 +1,81 @@ +{ + "id": "qf-image-cropper", + "displayName": "图片裁剪插件", + "version": "2.2.5", + "description": "图片裁剪插件,支持自定义尺寸、定点等比例缩放、拖动、图片翻转、剪切圆形/圆角图片、定制样式,功能多性能高体验好注释全。", + "keywords": [ + "qf-image-cropper", + "图片裁剪", + "图片编辑", + "头像裁剪", + "小程序" +], + "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": [], + "encrypt": [], + "platforms": { + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "y", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "u", + "钉钉": "n", + "快手": "n", + "飞书": "n", + "京东": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/qf-image-cropper/readme.md b/uni_modules/qf-image-cropper/readme.md new file mode 100644 index 0000000..f39f645 --- /dev/null +++ b/uni_modules/qf-image-cropper/readme.md @@ -0,0 +1,97 @@ +# qf-image-cropper +## 图片裁剪插件 +uniapp微信小程序图片裁剪插件,支持自定义尺寸、定点等比例缩放、拖动、图片翻转、剪切圆形/圆角图片、定制样式,功能多性能高体验好注释全。 + +### 平台支持: +1. 支持微信小程序:移动端、PC端、开发者工具 +2. 支持H5平台(2.1.0版本起) +3. 支持APP平台(2.1.5版本起):Android、IOS +4. 其他平台暂未测试兼容性未知 + +### 支持功能: +1. 自定义裁剪尺寸 +2. 定点等比例缩放:移动端以双指触摸中心点为缩放中心点,PC端以鼠标所在点为缩放中心点 +3. 自由拖动:支持限制滑出边界,也支持回弹效果(滑动时可滑出边界,释放时回弹到边界) +4. 图片翻转:在裁剪尺寸非 1:1 的情况下,翻转时宽高无法铺满裁剪区域时,图片会自动放大到合适尺寸 +5. 裁剪生成新图片 +6. 本地选择图片 +7. 可定制样式:可自由选择是否渲染裁剪边框、可伸缩裁剪顶角、参考线 +8. 裁剪圆角图片:圆形、圆角矩形 + +### 属性说明 +| 属性名 | 类型 | 默认值 | 说明 | +|:---|:---|:---|:---| +| src | String | | 图片资源地址 | +| width | Number | 300 | 裁剪宽度 | +| height | Number | 300 | 裁剪高度 | +| showBorder | Boolean | true | 是否绘制裁剪区域边框 | +| showGrid | Boolean | true | 是否绘制裁剪区域网格参考线 | +| showAngle | Boolean | true | 是否展示四个支持伸缩的角 | +| areaScale | Number | 0.3 | 裁剪区域最小缩放倍数 | +| minScale | Number | 1 | 图片最小缩放倍数 | +| maxScale | Number | 5 | 图片最大缩放倍数 | +| checkRange | Boolean | true | 检查图片位置是否超出裁剪边界,如果超出则会矫正位置 | +| backgroundColor | String | | 生成图片背景色:如果裁剪区域没有完全包含在图片中时,不设置该属性则生成图片存在一定的透明块 | +| bounce | Boolean | true | 是否有回弹效果:当 checkRange 为 true 时有效,拖动时可以拖出边界,释放时会弹回边界 | +| rotatable | Boolean | true | 是否支持翻转 | +| reverseRotatable | Boolean | false | 是否支持逆向翻转 | +| choosable | Boolean | true | 是否支持从本地选择素材 | +| gpu | Boolean | false | 是否开启硬件加速,图片缩放过程中如果出现元素的“留影”或“重影”效果,可通过该方式解决或减轻这一问题 | +| angleSize | Number | 20 | 四个角尺寸,单位px | +| angleBorderWidth | Number | 2 | 四个角边框宽度,单位px | +| zIndex | Number/String | | 调整组件层级 | +| radius | Number | | 裁剪图片圆角半径,单位px | +| fileType | String | png | 生成文件的类型,只支持 'jpg' 或 'png'。默认为 'png' | +| delay | Number | 1000 | 图片从绘制到生成所需时间,单位ms
微信小程序平台使用 `Canvas 2D` 绘制时有效
如绘制大图或出现裁剪图片空白等情况应适当调大该值,因 `Canvas 2d` 采用同步绘制,需自己把控绘制完成时间 | +| navigation | Boolean | true | 页面是否是原生标题栏:
H5平台当 showAngle 为 true 时,使用插件的页面在 `page.json` 中配置了 `"navigationStyle": "custom"` 时,必须将此值设为 false ,否则四个可拉伸角的触发位置会有偏差。
注:因H5平台的窗口高度是包含标题栏的,而屏幕触摸点的坐标是不包含的 | +| @crop | EventHandle | | 剪裁完成后触发,event = { tempFilePath }。在H5平台下,tempFilePath 为 base64 | + +### 基本用法 +``` + + + +``` +通过ref组件实例可在进入页面后直接打开相册选择图片 +``` +mounted() { + this.$refs.qfImageCropper.chooseImage({ sourceType: ['album'] }); +} +``` +### 使用说明 +1.建议在`pages.json`中将引用插件的页面添加一下配置禁止下拉刷新和禁止页面滑动,防止出现性能或页面抖动等问题。 +``` +{ + "enablePullDownRefresh": false, + "disableScroll": true +} +``` +2.建议使用本插件不要设置过大宽高的目标图片尺寸,建议1365x1365以内,否则可能会导致如下问题: +``` +1.界面卡顿,内存占用过高 +2.生成图片失真(模糊) +3.确定裁剪后一直显示 `裁剪中...`,该问题是由 `uni.canvasToTempFilePath` 无法回调导致,不同平台不同设备限制可能有所不同。 +``` +3.如裁剪后的图片存在偏移的问题,请检查是否受自己项目中父组件或全局样式影响。 +4.src属性设置网络图片时,图片资源必须是能触发 `getImageInfo` API 的 success 回调才可用于插件裁剪。因此小程序平台获取网络图片信息需先配置download域名白名单才能生效。 +5.如果组件无法正常渲染且使用了 `v-if` 时,可尝试将 `v-if` 替换为 `v-show` +6.如果App端导入组件后无法正常渲染,请尝试重新运行 \ No newline at end of file diff --git a/uni_modules/qiun-data-charts/changelog.md b/uni_modules/qiun-data-charts/changelog.md new file mode 100644 index 0000000..4d470a4 --- /dev/null +++ b/uni_modules/qiun-data-charts/changelog.md @@ -0,0 +1,320 @@ +## 2.5.0-20230101(2023-01-01) +- 秋云图表组件 修改条件编译顺序,确保uniapp的cli方式的项目依赖不完整时可以正常显示 +- 秋云图表组件 恢复props属性directory的使用,以修复vue3项目中,开启echarts后,echarts目录识别错误的bug +- uCharts.js 修复区域图、混合图只有一个数据时图表显示不正确的bug +- uCharts.js 修复折线图、区域图中时间轴类别图表tooltip指示点显示不正确的bug +- uCharts.js 修复x轴使用labelCount时,并且boundaryGap = 'justify' 并且关闭Y轴显示的时候,最后一个坐标值不显示的bug +- uCharts.js 修复折线图只有一组数据时 ios16 渲染颜色不正确的bug +- uCharts.js 修复玫瑰图半径显示不正确的bug +- uCharts.js 柱状图、山峰图增加正负图功能,y轴网格如果需要显示0轴则由 min max 及 splitNumber 确定,后续版本优化自动显示0轴 +- uCharts.js 柱状图column增加 opts.extra.column.labelPosition,数据标签位置,有效值为 outside外部, insideTop内顶部, center内中间, bottom内底部 +- uCharts.js 雷达图radar增加 opts.extra.radar.labelShow,否显示各项标识文案是,默认true +- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.boxPadding,提示窗边框填充距离,默认3px +- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.fontSize,提示窗字体大小配置,默认13px +- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.lineHeight,提示窗文字行高,默认20px +- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.legendShow,是否显示左侧图例,默认true +- uCharts.js 提示窗tooltip增加 opts.extra.tooltip.legendShape,图例形状,图例标识样式,有效值为 auto自动跟随图例, diamond◆, circle●, triangle▲, square■, rect▬, line- +- uCharts.js 标记线markLine增加 opts.extra.markLine.labelFontSize,字体大小配置,默认13px +- uCharts.js 标记线markLine增加 opts.extra.markLine.labelPadding,标签边框内填充距离,默认6px +- uCharts.js 折线图line增加 opts.extra.line.linearType,渐变色类型,可选值 none关闭渐变色,custom 自定义渐变色。使用自定义渐变色时请赋值serie.linearColor作为颜色值 +- uCharts.js 折线图line增加 serie.linearColor,渐变色数组,格式为2维数组[起始位置,颜色值],例如[[0,'#0EE2F8'],[0.3,'#2BDCA8'],[0.6,'#1890FF'],[1,'#9A60B4']] +- uCharts.js 折线图line增加 opts.extra.line.onShadow,是否开启折线阴影,开启后请赋值serie.setShadow阴影设置 +- uCharts.js 折线图line增加 serie.setShadow,阴影配置,格式为4位数组:[offsetX,offsetY,blur,color] +- uCharts.js 折线图line增加 opts.extra.line.animation,动画效果方向,可选值为vertical 垂直动画效果,horizontal 水平动画效果 +- uCharts.js X轴xAxis增加 opts.xAxis.lineHeight,X轴字体行高,默认20px +- uCharts.js X轴xAxis增加 opts.xAxis.marginTop,X轴文字距离轴线的距离,默认0px +- uCharts.js X轴xAxis增加 opts.xAxis.title,当前X轴标题 +- uCharts.js X轴xAxis增加 opts.xAxis.titleFontSize,标题字体大小,默认13px +- uCharts.js X轴xAxis增加 opts.xAxis.titleOffsetY,标题纵向偏移距离,负数为向上偏移,正数向下偏移 +- uCharts.js X轴xAxis增加 opts.xAxis.titleOffsetX,标题横向偏移距离,负数为向左偏移,正数向右偏移 +- uCharts.js X轴xAxis增加 opts.xAxis.titleFontColor,标题字体颜色,默认#666666 + +## 报错TypeError: Cannot read properties of undefined (reading 'length') +- 如果是uni-modules版本组件,请先登录HBuilderX账号; +- 在HBuilderX中的manifest.json,点击重新获取uniapp的appid,或者删除appid重新粘贴,重新运行; +- 如果是cli项目请使用码云上的非uniCloud版本组件; +- 或者添加uniCloud的依赖; +- 或者使用原生uCharts; +## 2.4.5-20221130(2022-11-30) +- uCharts.js 优化tooltip当文字很多变为左侧显示时,如果画布仍显显示不下,提示框错位置变为以左侧0位置起画 +- uCharts.js 折线图修复特殊情况下只有单点数据,并改变线宽后点变为圆形的bug +- uCharts.js 修复Y轴disabled启用后无效并报错的bug +- uCharts.js 修复仪表盘起始结束角度特殊情况下显示不正确的bug +- uCharts.js 雷达图新增参数 opts.extra.radar.radius , 自定义雷达图半径 +- uCharts.js 折线图、区域图增加tooltip指示点,opts.extra.line.activeType/opts.extra.area.activeType,可选值"none"不启用激活指示点,"hollow"空心点模式,"solid"实心点模式 +## 2.4.4-20221102(2022-11-02) +- 秋云图表组件 修复使用echarts时reload、reshow无法调用重新渲染的bug,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/40) +- 秋云图表组件 修复使用echarts时,初始化时宽高不正确的bug,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/42) +- 秋云图表组件 修复uniapp的h5使用history模式时,无法加载echarts的bug +- 秋云图表组件 小程序端@complete、@scrollLeft、@scrollRight、@getTouchStart、@getTouchMove、@getTouchEnd事件增加opts参数传出,方便一些特殊需求的交互获取数据。 + +- uCharts.js 修复calTooltipYAxisData方法内formatter格式化方法未与y轴方法同步的问题,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/43) +- uCharts.js 地图新增参数opts.series[i].fillOpacity,以透明度方式来设置颜色过度效果,[详见码云PR](https://gitee.com/uCharts/uCharts/pulls/38) +- uCharts.js 地图新增参数opts.extra.map.active,是否启用点击激活变色 +- uCharts.js 地图新增参数opts.extra.map.activeTextColor,是否启用点击激活变色 +- uCharts.js 地图新增渲染完成事件renderComplete +- uCharts.js 漏斗图修复当部分数据相同时tooltip提示窗点击错误的bug +- uCharts.js 漏斗图新增参数series.data[i].centerText 居中标签文案 +- uCharts.js 漏斗图新增参数series.data[i].centerTextSize 居中标签文案字体大小,默认opts.fontSize +- uCharts.js 漏斗图新增参数series.data[i].centerTextColor 居中标签文案字体颜色,默认#FFFFFF +- uCharts.js 漏斗图新增参数opts.extra.funnel.minSize 最小值的最小宽度,默认0 +- uCharts.js 进度条新增参数opts.extra.arcbar.direction,动画方向,可选值为cw顺时针、ccw逆时针 +- uCharts.js 混合图新增参数opts.extra.mix.line.width,折线的宽度,默认2 +- uCharts.js 修复tooltip开启horizentalLine水平横线标注时,图表显示错位的bug +- uCharts.js 优化tooltip当文字很多变为左侧显示时,如果画布仍显显示不下,提示框错位置变为以左侧0位置起画 +- uCharts.js 修复开启滚动条后X轴文字超出绘图区域后的隐藏逻辑 +- uCharts.js 柱状图、条状图修复堆叠模式不能通过{value,color}赋值单个柱子颜色的问题 +- uCharts.js 气泡图修复不识别series.textSize和series.textColor的bug + +## 报错TypeError: Cannot read properties of undefined (reading 'length') +1. 如果是uni-modules版本组件,请先登录HBuilderX账号; +2. 在HBuilderX中的manifest.json,点击重新获取uniapp的appid,或者删除appid重新粘贴,重新运行; +3. 如果是cli项目请使用码云上的非uniCloud版本组件; +4. 或者添加uniCloud的依赖; +5. 或者使用原生uCharts; +## 2.4.3-20220505(2022-05-05) +- 秋云图表组件 修复开启canvas2d后将series赋值为空数组显示加载图标时,再次赋值后画布闪动的bug +- 秋云图表组件 修复升级hbx最新版后ECharts的highlight方法报错的bug +- uCharts.js 雷达图新增参数opts.extra.radar.gridEval,数据点位网格抽希,默认1 +- uCharts.js 雷达图新增参数opts.extra.radar.axisLabel, 是否显示刻度点值,默认false +- uCharts.js 雷达图新增参数opts.extra.radar.axisLabelTofix,刻度点值小数位数,默认0 +- uCharts.js 雷达图新增参数opts.extra.radar.labelPointShow,是否显示末端刻度圆点,默认false +- uCharts.js 雷达图新增参数opts.extra.radar.labelPointRadius,刻度圆点的半径,默认3 +- uCharts.js 雷达图新增参数opts.extra.radar.labelPointColor,刻度圆点的颜色,默认#cccccc +- uCharts.js 雷达图新增参数opts.extra.radar.linearType,渐变色类型,可选值"none"关闭渐变,"custom"开启渐变 +- uCharts.js 雷达图新增参数opts.extra.radar.customColor,自定义渐变颜色,数组类型对应series的数组长度以匹配不同series颜色的不同配色方案,例如["#FA7D8D", "#EB88E2"] +- uCharts.js 雷达图优化支持series.textColor、series.textSize属性 +- uCharts.js 柱状图中温度计式图标,优化支持全圆角类型,修复边框有缝隙的bug,详见官网【演示】中的温度计图表 +- uCharts.js 柱状图新增参数opts.extra.column.activeWidth,当前点击柱状图的背景宽度,默认一个单元格单位 +- uCharts.js 混合图增加opts.extra.mix.area.gradient 区域图是否开启渐变色 +- uCharts.js 混合图增加opts.extra.mix.area.opacity 区域图透明度,默认0.2 +- uCharts.js 饼图、圆环图、玫瑰图、漏斗图,增加opts.series[0].data[i].labelText,自定义标签文字,避免formatter格式化的繁琐,详见官网【演示】中的饼图 +- uCharts.js 饼图、圆环图、玫瑰图、漏斗图,增加opts.series[0].data[i].labelShow,自定义是否显示某一个指示标签,避免因饼图类别太多导致标签重复或者居多导致图形变形的问题,详见官网【演示】中的饼图 +- uCharts.js 增加opts.series[i].legendText/opts.series[0].data[i].legendText(与series.name同级)自定义图例显示文字的方法 +- uCharts.js 优化X轴、Y轴formatter格式化方法增加形参,统一为fromatter:function(value,index,opts){} +- uCharts.js 修复横屏模式下无法使用双指缩放方法的bug +- uCharts.js 修复当只有一条数据或者多条数据值相等的时候Y轴自动计算的最大值错误的bug +- 【官网模板】增加外部自定义图例与图表交互的例子,[点击跳转](https://www.ucharts.cn/v2/#/layout/info?id=2) + +## 注意:非unimodules 版本如因更新 hbx 至 3.4.7 导致报错如下,请到码云更新非 unimodules 版本组件,[点击跳转](https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6) +> Error in callback for immediate watcher "uchartsOpts": "SyntaxError: Unexpected token u in JSON at position 0" +## 2.4.2-20220421(2022-04-21) +- 秋云图表组件 修复HBX升级3.4.6.20220420版本后echarts报错的问题 +## 2.4.2-20220420(2022-04-20) +## 重要!此版本uCharts新增了很多功能,修复了诸多已知问题 +- 秋云图表组件 新增onzoom开启双指缩放功能(仅uCharts),前提需要直角坐标系类图表类型,并且ontouch为true、opts.enableScroll为true,详见实例项目K线图 +- 秋云图表组件 新增optsWatch是否监听opts变化,关闭optsWatch后,动态修改opts不会触发图表重绘 +- 秋云图表组件 修复开启canvas2d功能后,动态更新数据后画布闪动的bug +- 秋云图表组件 去除directory属性,改为自动获取echarts.min.js路径(升级不受影响) +- 秋云图表组件 增加getImage()方法及@getImage事件,通过ref调用getImage()方法获,触发@getImage事件获取当前画布的base64图片文件流。 +- 秋云图表组件 支付宝、字节跳动、飞书、快手小程序支持开启canvas2d同层渲染设置。 +- 秋云图表组件 新增加【非uniCloud】版本组件,避免有些不需要uniCloud的使用组件发布至小程序需要提交隐私声明问题,请到码云[【非uniCloud版本】](https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6),或npm[【非uniCloud版本】](https://www.npmjs.com/package/@qiun/uni-ucharts)下载使用。 +- uCharts.js 新增dobuleZoom双指缩放功能 +- uCharts.js 新增山峰图type="mount",数据格式为饼图类格式,不需要传入categories,具体详见新版官网在线演示 +- uCharts.js 修复折线图当数据中存在null时tooltip报错的bug +- uCharts.js 修复饼图类当画布比较小时自动计算的半径是负数报错的bug +- uCharts.js 统一各图表类型的series.formatter格式化方法的形参为(val, index, series, opts),方便格式化时有更多参数可用 +- uCharts.js 标记线功能增加labelText自定义显示文字,增加labelAlign标签显示位置(左侧或右侧),增加标签显示位置微调labelOffsetX、labelOffsetY +- uCharts.js 修复条状图当数值很小时开启圆角后样式错误的bug +- uCharts.js 修复X轴开启disabled后,X轴仍占用空间的bug +- uCharts.js 修复X轴开启滚动条并且开启rotateLabel后,X轴文字与滚动条重叠的bug +- uCharts.js 增加X轴rotateAngle文字旋转自定义角度,取值范围(-90至90) +- uCharts.js 修复地图文字标签层级显示不正确的bug +- uCharts.js 修复饼图、圆环图、玫瑰图当数据全部为0的时候不显示数据标签的bug +- uCharts.js 修复当opts.padding上边距为0时,Y轴顶部刻度标签位置不正确的bug + +## 另外我们还开发了各大原生小程序组件,已发布至码云和npm +[https://gitee.com/uCharts/uCharts](https://gitee.com/uCharts/uCharts) +[https://www.npmjs.com/~qiun](https://www.npmjs.com/~qiun) + +## 对于原生uCharts文档我们已上线新版官方网站,详情点击下面链接进入官网 +[https://www.uCharts.cn/v2/](https://www.ucharts.cn/v2/) +## 2.3.7-20220122(2022-01-22) +## 重要!使用vue3编译,请使用cli模式并升级至最新依赖,HbuilderX编译需要使用3.3.8以上版本 +- uCharts.js 修复uni-app平台组件模式使用vue3编译到小程序报错的bug。 +## 2.3.7-20220118(2022-01-18) +## 注意,使用vue3的前提是需要3.3.8.20220114-alpha版本的HBuilder! +## 2.3.67-20220118(2022-01-18) +- 秋云图表组件 组件初步支持vue3,全端编译会有些问题,具体详见下面修改: +1. 小程序端运行时,在uni_modules文件夹的qiun-data-charts.js中搜索 new uni_modules_qiunDataCharts_js_sdk_uCharts_uCharts.uCharts,将.uCharts去掉。 +2. 小程序端发行时,在uni_modules文件夹的qiun-data-charts.js中搜索 new e.uCharts,将.uCharts去掉,变为 new e。 +3. 如果觉得上述步骤比较麻烦,如果您的项目只编译到小程序端,可以修改u-charts.js最后一行导出方式,将 export default uCharts;变更为 export default { uCharts: uCharts }; 这样变更后,H5和App端的renderjs会有问题,请开发者自行选择。(此问题非组件问题,请等待DC官方修复Vue3的小程序端) +## 2.3.6-20220111(2022-01-11) +- 秋云图表组件 修改组件 props 属性中的 background 默认值为 rgba(0,0,0,0) +## 2.3.6-20211201(2021-12-01) +- uCharts.js 修复bar条状图开启圆角模式时,值很小时圆角渲染错误的bug +## 2.3.5-20211014(2021-10-15) +- uCharts.js 增加vue3的编译支持(仅原生uCharts,qiun-data-charts组件后续会支持,请关注更新) +## 2.3.4-20211012(2021-10-12) +- 秋云图表组件 修复 mac os x 系统 mouseover 事件丢失的 bug +## 2.3.3-20210706(2021-07-06) +- uCharts.js 增加雷达图开启数据点值(opts.dataLabel)的显示 +## 2.3.2-20210627(2021-06-27) +- 秋云图表组件 修复tooltipCustom个别情况下传值不正确报错TypeError: Cannot read property 'name' of undefined的bug +## 2.3.1-20210616(2021-06-16) +- uCharts.js 修复圆角柱状图使用4角圆角时,当数值过大时不正确的bug +## 2.3.0-20210612(2021-06-12) +- uCharts.js 【重要】uCharts增加nvue兼容,可在nvue项目中使用gcanvas组件渲染uCharts,[详见码云uCharts-demo-nvue](https://gitee.com/uCharts/uCharts) +- 秋云图表组件 增加tapLegend属性,是否开启图例点击交互事件 +- 秋云图表组件 getIndex事件中增加返回uCharts实例中的opts参数,以便在页面中调用参数 +- 示例项目 pages/other/other.vue增加app端自定义tooltip的方法,详见showOptsTooltip方法 +## 2.2.1-20210603(2021-06-03) +- uCharts.js 修复饼图、圆环图、玫瑰图,当起始角度不为0时,tooltip位置不准确的bug +- uCharts.js 增加温度计式柱状图开启顶部半圆形的配置 +## 2.2.0-20210529(2021-05-29) +- uCharts.js 增加条状图type="bar" +- 示例项目 pages/ucharts/ucharts.vue增加条状图的demo +## 2.1.7-20210524(2021-05-24) +- uCharts.js 修复大数据量模式下曲线图不平滑的bug +## 2.1.6-20210523(2021-05-23) +- 秋云图表组件 修复小程序端开启滚动条更新数据后滚动条位置不符合预期的bug +## 2.1.5-2021051702(2021-05-17) +- uCharts.js 修复自定义Y轴min和max值为0时不能正确显示的bug +## 2.1.5-20210517(2021-05-17) +- uCharts.js 修复Y轴自定义min和max时,未按指定的最大值最小值显示坐标轴刻度的bug +## 2.1.4-20210516(2021-05-16) +- 秋云图表组件 优化onWindowResize防抖方法 +- 秋云图表组件 修复APP端uCharts更新数据时,清空series显示loading图标后再显示图表,图表抖动的bug +- uCharts.js 修复开启canvas2d后,x轴、y轴、series自定义字体大小未按比例缩放的bug +- 示例项目 修复format-e.vue拼写错误导致app端使用uCharts渲染图表 +## 2.1.3-20210513(2021-05-13) +- 秋云图表组件 修改uCharts变更chartData数据为updateData方法,支持带滚动条的数据动态打点 +- 秋云图表组件 增加onWindowResize防抖方法 fix by ど誓言,如尘般染指流年づ +- 秋云图表组件 H5或者APP变更chartData数据显示loading图表时,原数据闪现的bug +- 秋云图表组件 props增加errorReload禁用错误点击重新加载的方法 +- uCharts.js 增加tooltip显示category(x轴对应点位)标题的功能,opts.extra.tooltip.showCategory,默认为false +- uCharts.js 修复mix混合图只有柱状图时,tooltip的分割线显示位置不正确的bug +- uCharts.js 修复开启滚动条,图表在拖动中动态打点,滚动条位置不正确的bug +- uCharts.js 修复饼图类数据格式为echarts数据格式,series为空数组报错的bug +- 示例项目 修改uCharts.js更新到v2.1.2版本后,@getIndex方法获取索引值变更为e.currentIndex.index +- 示例项目 pages/updata/updata.vue增加滚动条拖动更新(数据动态打点)的demo +- 示例项目 pages/other/other.vue增加errorReload禁用错误点击重新加载的demo +## 2.1.2-20210509(2021-05-09) +秋云图表组件 修复APP端初始化时就传入chartData或lacaldata不显示图表的bug +## 2.1.1-20210509(2021-05-09) +- 秋云图表组件 变更ECharts的eopts配置在renderjs内执行,支持在config-echarts.js配置文件内写function配置。 +- 秋云图表组件 修复APP端报错Prop being mutated: "onmouse"错误的bug。 +- 秋云图表组件 修复APP端报错Error: Not Found:Page[6][-1,27] at view.umd.min.js:1的bug。 +## 2.1.0-20210507(2021-05-07) +- 秋云图表组件 修复初始化时就有数据或者数据更新的时候loading加载动画闪动的bug +- uCharts.js 修复x轴format方法categories为字符串类型时返回NaN的bug +- uCharts.js 修复series.textColor、legend.fontColor未执行全局默认颜色的bug +## 2.1.0-20210506(2021-05-06) +- 秋云图表组件 修复极个别情况下报错item.properties undefined的bug +- 秋云图表组件 修复极个别情况下关闭加载动画reshow不起作用,无法显示图表的bug +- 示例项目 pages/ucharts/ucharts.vue 增加时间轴折线图(type="tline")、时间轴区域图(type="tarea")、散点图(type="scatter")、气泡图demo(type="bubble")、倒三角形漏斗图(opts.extra.funnel.type="triangle")、金字塔形漏斗图(opts.extra.funnel.type="pyramid") +- 示例项目 pages/format-u/format-u.vue 增加X轴format格式化示例 +- uCharts.js 升级至v2.1.0版本 +- uCharts.js 修复 玫瑰图面积模式点击tooltip位置不正确的bug +- uCharts.js 修复 玫瑰图点击图例,只剩一个类别显示空白的bug +- uCharts.js 修复 饼图类图点击图例,其他图表tooltip位置某些情况下不准的bug +- uCharts.js 修复 x轴为矢量轴(时间轴)情况下,点击tooltip位置不正确的bug +- uCharts.js 修复 词云图获取点击索引偶尔不准的bug +- uCharts.js 增加 直角坐标系图表X轴format格式化方法(原生uCharts.js用法请使用formatter) +- uCharts.js 增加 漏斗图扩展配置,倒三角形(opts.extra.funnel.type="triangle"),金字塔形(opts.extra.funnel.type="pyramid") +- uCharts.js 增加 散点图(opts.type="scatter")、气泡图(opts.type="bubble") +- 后期计划 完善散点图、气泡图,增加markPoints标记点,增加横向条状图。 +## 2.0.0-20210502(2021-05-02) +- uCharts.js 修复词云图获取点击索引不正确的bug +## 2.0.0-20210501(2021-05-01) +- 秋云图表组件 修复QQ小程序、百度小程序在关闭动画效果情况下,v-for循环使用图表,显示不正确的bug +## 2.0.0-20210426(2021-04-26) +- 秋云图表组件 修复QQ小程序不支持canvas2d的bug +- 秋云图表组件 修复钉钉小程序某些情况点击坐标计算错误的bug +- uCharts.js 增加 extra.column.categoryGap 参数,柱状图类每个category点位(X轴点)柱子组之间的间距 +- uCharts.js 增加 yAxis.data[i].titleOffsetY 参数,标题纵向偏移距离,负数为向上偏移,正数向下偏移 +- uCharts.js 增加 yAxis.data[i].titleOffsetX 参数,标题横向偏移距离,负数为向左偏移,正数向右偏移 +- uCharts.js 增加 extra.gauge.labelOffset 参数,仪表盘标签文字径向便宜距离,默认13px +## 2.0.0-20210422-2(2021-04-22) +秋云图表组件 修复 formatterAssign 未判断 args[key] == null 的情况导致栈溢出的 bug +## 2.0.0-20210422(2021-04-22) +- 秋云图表组件 修复H5、APP、支付宝小程序、微信小程序canvas2d模式下横屏模式的bug +## 2.0.0-20210421(2021-04-21) +- uCharts.js 修复多行图例的情况下,图例在上方或者下方时,图例float为左侧或者右侧时,第二行及以后的图例对齐方式不正确的bug +## 2.0.0-20210420(2021-04-20) +- 秋云图表组件 修复微信小程序开启canvas2d模式后,windows版微信小程序不支持canvas2d模式的bug +- 秋云图表组件 修改非uni_modules版本为v2.0版本qiun-data-charts组件 +## 2.0.0-20210419(2021-04-19) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。 +## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,如仍不好用,请重启电脑; +## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。 +## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。 +## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn) +## 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! +## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn) +## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +- uCharts.js 修复混合图中柱状图单独设置颜色不生效的bug +- uCharts.js 修复多Y轴单独设置fontSize时,开启canvas2d后,未对应放大字体的bug +## 2.0.0-20210418(2021-04-18) +- 秋云图表组件 增加directory配置,修复H5端history模式下如果发布到二级目录无法正确加载echarts.min.js的bug +## 2.0.0-20210416(2021-04-16) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。 +## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,如仍不好用,请重启电脑; +## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。 +## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。 +## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn) +## 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! +## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn) +## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +- 秋云图表组件 修复APP端某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员 +- 示例项目 修复APP端v-for循环某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员 +- uCharts.js 修复非直角坐标系tooltip提示窗右侧超出未变换方向显示的bug +## 2.0.0-20210415(2021-04-15) +- 秋云图表组件 修复H5端发布到二级目录下echarts无法加载的bug +- 秋云图表组件 修复某些情况下echarts.off('finished')移除监听事件报错的bug +## 2.0.0-20210414(2021-04-14) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。 +## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,如仍不好用,请重启电脑; +## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。 +## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。 +## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn) +## 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! +## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn) +## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +- 秋云图表组件 修复H5端在cli项目下ECharts引用地址错误的bug +- 示例项目 增加ECharts的formatter用法的示例(详见示例项目format-e.vue) +- uCharts.js 增加圆环图中心背景色的配置extra.ring.centerColor +- uCharts.js 修复微信小程序安卓端柱状图开启透明色后显示不正确的bug +## 2.0.0-20210413(2021-04-13) +- 秋云图表组件 修复百度小程序多个图表真机未能正确获取根元素dom尺寸的bug +- 秋云图表组件 修复百度小程序横屏模式方向不正确的bug +- 秋云图表组件 修改ontouch时,@getTouchStart@getTouchMove@getTouchEnd的触发条件 +- uCharts.js 修复饼图类数据格式series属性不生效的bug +- uCharts.js 增加时序区域图 详见示例项目中ucharts.vue +## 2.0.0-20210412-2(2021-04-12) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。 +## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX。如仍不好用,请重启电脑,此问题已于DCloud官方确认,HBuilderX下个版本会修复。 +## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn) +## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +- 秋云图表组件 修复uCharts在APP端横屏模式下不能正确渲染的bug +- 示例项目 增加ECharts柱状图渐变色、圆角柱状图、横向柱状图(条状图)的示例 +## 2.0.0-20210412(2021-04-12) +- 秋云图表组件 修复created中判断echarts导致APP端无法识别,改回mounted中判断echarts初始化 +- uCharts.js 修复2d模式下series.textOffset未乘像素比的bug +## 2.0.0-20210411(2021-04-11) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。 +## 初次使用如果提示未注册组件,请重启HBuilderX,并清空小程序开发者工具缓存。 +## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn) +## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +- uCharts.js 折线图区域图增加connectNulls断点续连的功能,详见示例项目中ucharts.vue +- 秋云图表组件 变更初始化方法为created,变更type2d默认值为true,优化2d模式下组件初始化后dom获取不到的bug +- 秋云图表组件 修复左右布局时,右侧图表点击坐标错误的bug,修复tooltip柱状图自定义颜色显示object的bug +## 2.0.0-20210410(2021-04-10) +- 修复左右布局时,右侧图表点击坐标错误的bug,修复柱状图自定义颜色tooltip显示object的bug +- 增加标记线及柱状图自定义颜色的demo +## 2.0.0-20210409(2021-04-08) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn) +## 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +- uCharts.js 修复钉钉小程序百度小程序measureText不准确的bug,修复2d模式下饼图类activeRadius为按比例放大的bug +- 修复组件在支付宝小程序端点击位置不准确的bug +## 2.0.0-20210408(2021-04-07) +- 修复组件在支付宝小程序端不能显示的bug(目前支付宝小程不能点击交互,后续修复) +- uCharts.js 修复高分屏下柱状图类,圆弧进度条 自定义宽度不能按比例放大的bug +## 2.0.0-20210407(2021-04-06) +## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn) +## 增加 通过tofix和unit快速格式化y轴的demo add by `howcode` +## 增加 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) +## 2.0.0-20210406(2021-04-05) +# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页 +## 2.0.0(2021-04-05) +# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页 diff --git a/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue b/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue new file mode 100644 index 0000000..5678f7d --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue @@ -0,0 +1,1618 @@ + + + + + + + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue b/uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue new file mode 100644 index 0000000..b15b19f --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue b/uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue new file mode 100644 index 0000000..b701394 --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue b/uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue new file mode 100644 index 0000000..7541b31 --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue b/uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue new file mode 100644 index 0000000..8e14db3 --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue b/uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue new file mode 100644 index 0000000..77c55b7 --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue b/uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue new file mode 100644 index 0000000..cb93a55 --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue @@ -0,0 +1,229 @@ + + + + diff --git a/uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue b/uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue new file mode 100644 index 0000000..7789060 --- /dev/null +++ b/uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js b/uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js new file mode 100644 index 0000000..7b8168f --- /dev/null +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js @@ -0,0 +1,422 @@ +/* + * uCharts® + * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台 + * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * 复制使用请保留本段注释,感谢支持开源! + * + * uCharts®官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ + +// 通用配置项 + +// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性 +const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc']; + +const cfe = { + //demotype为自定义图表类型 + "type": ["pie", "ring", "rose", "funnel", "line", "column", "area", "radar", "gauge","candle","demotype"], + //增加自定义图表类型,如果需要categories,请在这里加入您的图表类型例如最后的"demotype" + "categories": ["line", "column", "area", "radar", "gauge", "candle","demotype"], + //instance为实例变量承载属性,option为eopts承载属性,不要删除 + "instance": {}, + "option": {}, + //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换 + "formatter":{ + "tooltipDemo1":function(res){ + let result = '' + for (let i in res) { + if (i == 0) { + result += res[i].axisValueLabel + '年销售额' + } + let value = '--' + if (res[i].data !== null) { + value = res[i].data + } + // #ifdef H5 + result += '\n' + res[i].seriesName + ':' + value + ' 万元' + // #endif + + // #ifdef APP-PLUS + result += '
' + res[i].marker + res[i].seriesName + ':' + value + ' 万元' + // #endif + } + return result; + }, + legendFormat:function(name){ + return "自定义图例+"+name; + }, + yAxisFormatDemo:function (value, index) { + return value + '元'; + }, + seriesFormatDemo:function(res){ + return res.name + '年' + res.value + '元'; + } + }, + //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在eopts参数,会将demotype与eopts中option合并后渲染图表。 + "demotype":{ + "color": color, + //在这里填写echarts的option即可 + + }, + //下面是自定义配置,请添加项目所需的通用配置 + "column": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'axis' + }, + "grid": { + "top": 30, + "bottom": 50, + "right": 15, + "left": 40 + }, + "legend": { + "bottom": 'left', + }, + "toolbox": { + "show": false, + }, + "xAxis": { + "type": 'category', + "axisLabel": { + "color": '#666666' + }, + "axisLine": { + "lineStyle": { + "color": '#CCCCCC' + } + }, + "boundaryGap": true, + "data": [] + }, + "yAxis": { + "type": 'value', + "axisTick": { + "show": false, + }, + "axisLabel": { + "color": '#666666' + }, + "axisLine": { + "lineStyle": { + "color": '#CCCCCC' + } + }, + }, + "seriesTemplate": { + "name": '', + "type": 'bar', + "data": [], + "barwidth": 20, + "label": { + "show": true, + "color": "#666666", + "position": 'top', + }, + }, + }, + "line": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'axis' + }, + "grid": { + "top": 30, + "bottom": 50, + "right": 15, + "left": 40 + }, + "legend": { + "bottom": 'left', + }, + "toolbox": { + "show": false, + }, + "xAxis": { + "type": 'category', + "axisLabel": { + "color": '#666666' + }, + "axisLine": { + "lineStyle": { + "color": '#CCCCCC' + } + }, + "boundaryGap": true, + "data": [] + }, + "yAxis": { + "type": 'value', + "axisTick": { + "show": false, + }, + "axisLabel": { + "color": '#666666' + }, + "axisLine": { + "lineStyle": { + "color": '#CCCCCC' + } + }, + }, + "seriesTemplate": { + "name": '', + "type": 'line', + "data": [], + "barwidth": 20, + "label": { + "show": true, + "color": "#666666", + "position": 'top', + }, + }, + }, + "area": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'axis' + }, + "grid": { + "top": 30, + "bottom": 50, + "right": 15, + "left": 40 + }, + "legend": { + "bottom": 'left', + }, + "toolbox": { + "show": false, + }, + "xAxis": { + "type": 'category', + "axisLabel": { + "color": '#666666' + }, + "axisLine": { + "lineStyle": { + "color": '#CCCCCC' + } + }, + "boundaryGap": true, + "data": [] + }, + "yAxis": { + "type": 'value', + "axisTick": { + "show": false, + }, + "axisLabel": { + "color": '#666666' + }, + "axisLine": { + "lineStyle": { + "color": '#CCCCCC' + } + }, + }, + "seriesTemplate": { + "name": '', + "type": 'line', + "data": [], + "areaStyle": {}, + "label": { + "show": true, + "color": "#666666", + "position": 'top', + }, + }, + }, + "pie": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'item' + }, + "grid": { + "top": 40, + "bottom": 30, + "right": 15, + "left": 15 + }, + "legend": { + "bottom": 'left', + }, + "seriesTemplate": { + "name": '', + "type": 'pie', + "data": [], + "radius": '50%', + "label": { + "show": true, + "color": "#666666", + "position": 'top', + }, + }, + }, + "ring": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'item' + }, + "grid": { + "top": 40, + "bottom": 30, + "right": 15, + "left": 15 + }, + "legend": { + "bottom": 'left', + }, + "seriesTemplate": { + "name": '', + "type": 'pie', + "data": [], + "radius": ['40%', '70%'], + "avoidLabelOverlap": false, + "label": { + "show": true, + "color": "#666666", + "position": 'top', + }, + "labelLine": { + "show": true + }, + }, + }, + "rose": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'item' + }, + "legend": { + "top": 'bottom' + }, + "seriesTemplate": { + "name": '', + "type": 'pie', + "data": [], + "radius": "55%", + "center": ['50%', '50%'], + "roseType": 'area', + }, + }, + "funnel": { + "color": color, + "title": { + "text": '' + }, + "tooltip": { + "trigger": 'item', + "formatter": "{b} : {c}%" + }, + "legend": { + "top": 'bottom' + }, + "seriesTemplate": { + "name": '', + "type": 'funnel', + "left": '10%', + "top": 60, + "bottom": 60, + "width": '80%', + "min": 0, + "max": 100, + "minSize": '0%', + "maxSize": '100%', + "sort": 'descending', + "gap": 2, + "label": { + "show": true, + "position": 'inside' + }, + "labelLine": { + "length": 10, + "lineStyle": { + "width": 1, + "type": 'solid' + } + }, + "itemStyle": { + "bordercolor": '#fff', + "borderwidth": 1 + }, + "emphasis": { + "label": { + "fontSize": 20 + } + }, + "data": [], + }, + }, + "gauge": { + "color": color, + "tooltip": { + "formatter": '{a}
{b} : {c}%' + }, + "seriesTemplate": { + "name": '业务指标', + "type": 'gauge', + "detail": {"formatter": '{value}%'}, + "data": [{"value": 50, "name": '完成率'}] + }, + }, + "candle": { + "xAxis": { + "data": [] + }, + "yAxis": {}, + "color": color, + "title": { + "text": '' + }, + "dataZoom": [{ + "type": 'inside', + "xAxisIndex": [0, 1], + "start": 10, + "end": 100 + }, + { + "show": true, + "xAxisIndex": [0, 1], + "type": 'slider', + "bottom": 10, + "start": 10, + "end": 100 + } + ], + "seriesTemplate": { + "name": '', + "type": 'k', + "data": [], + }, + } +} + +export default cfe; \ No newline at end of file diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js b/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js new file mode 100644 index 0000000..17b28b3 --- /dev/null +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js @@ -0,0 +1,606 @@ +/* + * uCharts® + * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台 + * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * 复制使用请保留本段注释,感谢支持开源! + * + * uCharts®官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ + +// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性 +const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc']; + +//事件转换函数,主要用作格式化x轴为时间轴,根据需求自行修改 +const formatDateTime = (timeStamp, returnType)=>{ + var date = new Date(); + date.setTime(timeStamp * 1000); + var y = date.getFullYear(); + var m = date.getMonth() + 1; + m = m < 10 ? ('0' + m) : m; + var d = date.getDate(); + d = d < 10 ? ('0' + d) : d; + var h = date.getHours(); + h = h < 10 ? ('0' + h) : h; + var minute = date.getMinutes(); + var second = date.getSeconds(); + minute = minute < 10 ? ('0' + minute) : minute; + second = second < 10 ? ('0' + second) : second; + if(returnType == 'full'){return y + '-' + m + '-' + d + ' '+ h +':' + minute + ':' + second;} + if(returnType == 'y-m-d'){return y + '-' + m + '-' + d;} + if(returnType == 'h:m'){return h +':' + minute;} + if(returnType == 'h:m:s'){return h +':' + minute +':' + second;} + return [y, m, d, h, minute, second]; +} + +const cfu = { + //demotype为自定义图表类型,一般不需要自定义图表类型,只需要改根节点上对应的类型即可 + "type":["pie","ring","rose","word","funnel","map","arcbar","line","column","mount","bar","area","radar","gauge","candle","mix","tline","tarea","scatter","bubble","demotype"], + "range":["饼状图","圆环图","玫瑰图","词云图","漏斗图","地图","圆弧进度条","折线图","柱状图","山峰图","条状图","区域图","雷达图","仪表盘","K线图","混合图","时间轴折线","时间轴区域","散点图","气泡图","自定义类型"], + //增加自定义图表类型,如果需要categories,请在这里加入您的图表类型,例如最后的"demotype" + //自定义类型时需要注意"tline","tarea","scatter","bubble"等时间轴(矢量x轴)类图表,没有categories,不需要加入categories + "categories":["line","column","mount","bar","area","radar","gauge","candle","mix","demotype"], + //instance为实例变量承载属性,不要删除 + "instance":{}, + //option为opts及eopts承载属性,不要删除 + "option":{}, + //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换 + "formatter":{ + "yAxisDemo1":function(val, index, opts){return val+'元'}, + "yAxisDemo2":function(val, index, opts){return val.toFixed(2)}, + "xAxisDemo1":function(val, index, opts){return val+'年';}, + "xAxisDemo2":function(val, index, opts){return formatDateTime(val,'h:m')}, + "seriesDemo1":function(val, index, series, opts){return val+'元'}, + "tooltipDemo1":function(item, category, index, opts){ + if(index==0){ + return '随便用'+item.data+'年' + }else{ + return '其他我没改'+item.data+'天' + } + }, + "pieDemo":function(val, index, series, opts){ + if(index !== undefined){ + return series[index].name+':'+series[index].data+'元' + } + }, + }, + //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在opts参数,会将demotype与opts中option合并后渲染图表。 + "demotype":{ + //我这里把曲线图当做了自定义图表类型,您可以根据需要随意指定类型或配置 + "type": "line", + "color": color, + "padding": [15,10,0,15], + "xAxis": { + "disableGrid": true, + }, + "yAxis": { + "gridType": "dash", + "dashLength": 2, + }, + "legend": { + }, + "extra": { + "line": { + "type": "curve", + "width": 2 + }, + } + }, + //下面是自定义配置,请添加项目所需的通用配置 + "pie":{ + "type": "pie", + "color": color, + "padding": [5,5,5,5], + "extra": { + "pie": { + "activeOpacity": 0.5, + "activeRadius": 10, + "offsetAngle": 0, + "labelWidth": 15, + "border": true, + "borderWidth": 3, + "borderColor": "#FFFFFF" + }, + } + }, + "ring":{ + "type": "ring", + "color": color, + "padding": [5,5,5,5], + "rotate": false, + "dataLabel": true, + "legend": { + "show": true, + "position": "right", + "lineHeight": 25, + }, + "title": { + "name": "收益率", + "fontSize": 15, + "color": "#666666" + }, + "subtitle": { + "name": "70%", + "fontSize": 25, + "color": "#7cb5ec" + }, + "extra": { + "ring": { + "ringWidth":30, + "activeOpacity": 0.5, + "activeRadius": 10, + "offsetAngle": 0, + "labelWidth": 15, + "border": true, + "borderWidth": 3, + "borderColor": "#FFFFFF" + }, + }, + }, + "rose":{ + "type": "rose", + "color": color, + "padding": [5,5,5,5], + "legend": { + "show": true, + "position": "left", + "lineHeight": 25, + }, + "extra": { + "rose": { + "type": "area", + "minRadius": 50, + "activeOpacity": 0.5, + "activeRadius": 10, + "offsetAngle": 0, + "labelWidth": 15, + "border": false, + "borderWidth": 2, + "borderColor": "#FFFFFF" + }, + } + }, + "word":{ + "type": "word", + "color": color, + "extra": { + "word": { + "type": "normal", + "autoColors": false + } + } + }, + "funnel":{ + "type": "funnel", + "color": color, + "padding": [15,15,0,15], + "extra": { + "funnel": { + "activeOpacity": 0.3, + "activeWidth": 10, + "border": true, + "borderWidth": 2, + "borderColor": "#FFFFFF", + "fillOpacity": 1, + "labelAlign": "right" + }, + } + }, + "map":{ + "type": "map", + "color": color, + "padding": [0,0,0,0], + "dataLabel": true, + "extra": { + "map": { + "border": true, + "borderWidth": 1, + "borderColor": "#666666", + "fillOpacity": 0.6, + "activeBorderColor": "#F04864", + "activeFillColor": "#FACC14", + "activeFillOpacity": 1 + }, + } + }, + "arcbar":{ + "type": "arcbar", + "color": color, + "title": { + "name": "百分比", + "fontSize": 25, + "color": "#00FF00" + }, + "subtitle": { + "name": "默认标题", + "fontSize": 15, + "color": "#666666" + }, + "extra": { + "arcbar": { + "type": "default", + "width": 12, + "backgroundColor": "#E9E9E9", + "startAngle": 0.75, + "endAngle": 0.25, + "gap": 2 + } + } + }, + "line":{ + "type": "line", + "color": color, + "padding": [15,10,0,15], + "xAxis": { + "disableGrid": true, + }, + "yAxis": { + "gridType": "dash", + "dashLength": 2, + }, + "legend": { + }, + "extra": { + "line": { + "type": "straight", + "width": 2, + "activeType": "hollow" + }, + } + }, + "tline":{ + "type": "line", + "color": color, + "padding": [15,10,0,15], + "xAxis": { + "disableGrid": false, + "boundaryGap":"justify", + }, + "yAxis": { + "gridType": "dash", + "dashLength": 2, + "data":[ + { + "min":0, + "max":80 + } + ] + }, + "legend": { + }, + "extra": { + "line": { + "type": "curve", + "width": 2, + "activeType": "hollow" + }, + } + }, + "tarea":{ + "type": "area", + "color": color, + "padding": [15,10,0,15], + "xAxis": { + "disableGrid": true, + "boundaryGap":"justify", + }, + "yAxis": { + "gridType": "dash", + "dashLength": 2, + "data":[ + { + "min":0, + "max":80 + } + ] + }, + "legend": { + }, + "extra": { + "area": { + "type": "curve", + "opacity": 0.2, + "addLine": true, + "width": 2, + "gradient": true, + "activeType": "hollow" + }, + } + }, + "column":{ + "type": "column", + "color": color, + "padding": [15,15,0,5], + "xAxis": { + "disableGrid": true, + }, + "yAxis": { + "data":[{"min":0}] + }, + "legend": { + }, + "extra": { + "column": { + "type": "group", + "width": 30, + "activeBgColor": "#000000", + "activeBgOpacity": 0.08 + }, + } + }, + "mount":{ + "type": "mount", + "color": color, + "padding": [15,15,0,5], + "xAxis": { + "disableGrid": true, + }, + "yAxis": { + "data":[{"min":0}] + }, + "legend": { + }, + "extra": { + "mount": { + "type": "mount", + "widthRatio": 1.5, + }, + } + }, + "bar":{ + "type": "bar", + "color": color, + "padding": [15,30,0,5], + "xAxis": { + "boundaryGap":"justify", + "disableGrid":false, + "min":0, + "axisLine":false + }, + "yAxis": { + }, + "legend": { + }, + "extra": { + "bar": { + "type": "group", + "width": 30, + "meterBorde": 1, + "meterFillColor": "#FFFFFF", + "activeBgColor": "#000000", + "activeBgOpacity": 0.08 + }, + } + }, + "area":{ + "type": "area", + "color": color, + "padding": [15,15,0,15], + "xAxis": { + "disableGrid": true, + }, + "yAxis": { + "gridType": "dash", + "dashLength": 2, + }, + "legend": { + }, + "extra": { + "area": { + "type": "straight", + "opacity": 0.2, + "addLine": true, + "width": 2, + "gradient": false, + "activeType": "hollow" + }, + } + }, + "radar":{ + "type": "radar", + "color": color, + "padding": [5,5,5,5], + "dataLabel": false, + "legend": { + "show": true, + "position": "right", + "lineHeight": 25, + }, + "extra": { + "radar": { + "gridType": "radar", + "gridColor": "#CCCCCC", + "gridCount": 3, + "opacity": 0.2, + "max": 200, + "labelShow": true + }, + } + }, + "gauge":{ + "type": "gauge", + "color": color, + "title": { + "name": "66Km/H", + "fontSize": 25, + "color": "#2fc25b", + "offsetY": 50 + }, + "subtitle": { + "name": "实时速度", + "fontSize": 15, + "color": "#1890ff", + "offsetY": -50 + }, + "extra": { + "gauge": { + "type": "default", + "width": 30, + "labelColor": "#666666", + "startAngle": 0.75, + "endAngle": 0.25, + "startNumber": 0, + "endNumber": 100, + "labelFormat": "", + "splitLine": { + "fixRadius": 0, + "splitNumber": 10, + "width": 30, + "color": "#FFFFFF", + "childNumber": 5, + "childWidth": 12 + }, + "pointer": { + "width": 24, + "color": "auto" + } + } + } + }, + "candle":{ + "type": "candle", + "color": color, + "padding": [15,15,0,15], + "enableScroll": true, + "enableMarkLine": true, + "dataLabel": false, + "xAxis": { + "labelCount": 4, + "itemCount": 40, + "disableGrid": true, + "gridColor": "#CCCCCC", + "gridType": "solid", + "dashLength": 4, + "scrollShow": true, + "scrollAlign": "left", + "scrollColor": "#A6A6A6", + "scrollBackgroundColor": "#EFEBEF" + }, + "yAxis": { + }, + "legend": { + }, + "extra": { + "candle": { + "color": { + "upLine": "#f04864", + "upFill": "#f04864", + "downLine": "#2fc25b", + "downFill": "#2fc25b" + }, + "average": { + "show": true, + "name": ["MA5","MA10","MA30"], + "day": [5,10,20], + "color": ["#1890ff","#2fc25b","#facc14"] + } + }, + "markLine": { + "type": "dash", + "dashLength": 5, + "data": [ + { + "value": 2150, + "lineColor": "#f04864", + "showLabel": true + }, + { + "value": 2350, + "lineColor": "#f04864", + "showLabel": true + } + ] + } + } + }, + "mix":{ + "type": "mix", + "color": color, + "padding": [15,15,0,15], + "xAxis": { + "disableGrid": true, + }, + "yAxis": { + "disabled": false, + "disableGrid": false, + "splitNumber": 5, + "gridType": "dash", + "dashLength": 4, + "gridColor": "#CCCCCC", + "padding": 10, + "showTitle": true, + "data": [] + }, + "legend": { + }, + "extra": { + "mix": { + "column": { + "width": 20 + } + }, + } + }, + "scatter":{ + "type": "scatter", + "color":color, + "padding":[15,15,0,15], + "dataLabel":false, + "xAxis": { + "disableGrid": false, + "gridType":"dash", + "splitNumber":5, + "boundaryGap":"justify", + "min":0 + }, + "yAxis": { + "disableGrid": false, + "gridType":"dash", + }, + "legend": { + }, + "extra": { + "scatter": { + }, + } + }, + "bubble":{ + "type": "bubble", + "color":color, + "padding":[15,15,0,15], + "xAxis": { + "disableGrid": false, + "gridType":"dash", + "splitNumber":5, + "boundaryGap":"justify", + "min":0, + "max":250 + }, + "yAxis": { + "disableGrid": false, + "gridType":"dash", + "data":[{ + "min":0, + "max":150 + }] + }, + "legend": { + }, + "extra": { + "bubble": { + "border":2, + "opacity": 0.5, + }, + } + } +} + +export default cfu; \ No newline at end of file diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md b/uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md new file mode 100644 index 0000000..d307ba3 --- /dev/null +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md @@ -0,0 +1,5 @@ +# uCharts JSSDK说明 +1、如不使用uCharts组件,可直接引用u-charts.js,打包编译后会`自动压缩`,压缩后体积约为`120kb`。 +2、如果120kb的体积仍需压缩,请手到uCharts官网通过在线定制选择您需要的图表。 +3、config-ucharts.js为uCharts组件的用户配置文件,升级前请`自行备份config-ucharts.js`文件,以免被强制覆盖。 +4、config-echarts.js为ECharts组件的用户配置文件,升级前请`自行备份config-echarts.js`文件,以免被强制覆盖。 \ No newline at end of file diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js b/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js new file mode 100644 index 0000000..f78bde5 --- /dev/null +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js @@ -0,0 +1,7706 @@ +/* + * uCharts (R) + * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360/快手)、Vue、Taro等支持canvas的框架平台 + * Copyright (C) 2018-2022 QIUN (R) 秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * 复制使用请保留本段注释,感谢支持开源! + * + * uCharts (R) 官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ + +'use strict'; + +var config = { + version: 'v2.5.0-20230101', + yAxisWidth: 15, + xAxisHeight: 22, + padding: [10, 10, 10, 10], + rotate: false, + fontSize: 13, + fontColor: '#666666', + dataPointShape: ['circle', 'circle', 'circle', 'circle'], + color: ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'], + linearColor: ['#0EE2F8', '#2BDCA8', '#FA7D8D', '#EB88E2', '#2AE3A0', '#0EE2F8', '#EB88E2', '#6773E3', '#F78A85'], + pieChartLinePadding: 15, + pieChartTextPadding: 5, + titleFontSize: 20, + subtitleFontSize: 15, + radarLabelTextMargin: 13, +}; + +var assign = function(target, ...varArgs) { + if (target == null) { + throw new TypeError('[uCharts] Cannot convert undefined or null to object'); + } + if (!varArgs || varArgs.length <= 0) { + return target; + } + // 深度合并对象 + function deepAssign(obj1, obj2) { + for (let key in obj2) { + obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ? + deepAssign(obj1[key], obj2[key]) : obj1[key] = obj2[key]; + } + return obj1; + } + varArgs.forEach(val => { + target = deepAssign(target, val); + }); + return target; +}; + +var util = { + toFixed: function toFixed(num, limit) { + limit = limit || 2; + if (this.isFloat(num)) { + num = num.toFixed(limit); + } + return num; + }, + isFloat: function isFloat(num) { + return num % 1 !== 0; + }, + approximatelyEqual: function approximatelyEqual(num1, num2) { + return Math.abs(num1 - num2) < 1e-10; + }, + isSameSign: function isSameSign(num1, num2) { + return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2; + }, + isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) { + return this.isSameSign(p1.x, p2.x); + }, + isCollision: function isCollision(obj1, obj2) { + obj1.end = {}; + obj1.end.x = obj1.start.x + obj1.width; + obj1.end.y = obj1.start.y - obj1.height; + obj2.end = {}; + obj2.end.x = obj2.start.x + obj2.width; + obj2.end.y = obj2.start.y - obj2.height; + var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y; + return !flag; + } +}; + +//兼容H5点击事件 +function getH5Offset(e) { + e.mp = { + changedTouches: [] + }; + e.mp.changedTouches.push({ + x: e.offsetX, + y: e.offsetY + }); + return e; +} + +// hex 转 rgba +function hexToRgb(hexValue, opc) { + var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + var hex = hexValue.replace(rgx, function(m, r, g, b) { + return r + r + g + g + b + b; + }); + var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + var r = parseInt(rgb[1], 16); + var g = parseInt(rgb[2], 16); + var b = parseInt(rgb[3], 16); + return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')'; +} + +function findRange(num, type, limit) { + if (isNaN(num)) { + throw new Error('[uCharts] series数据需为Number格式'); + } + limit = limit || 10; + type = type ? type : 'upper'; + var multiple = 1; + while (limit < 1) { + limit *= 10; + multiple *= 10; + } + if (type === 'upper') { + num = Math.ceil(num * multiple); + } else { + num = Math.floor(num * multiple); + } + while (num % limit !== 0) { + if (type === 'upper') { + if (num == num + 1) { //修复数据值过大num++无效的bug by 向日葵 @xrk_jy + break; + } + num++; + } else { + num--; + } + } + return num / multiple; +} + +function calCandleMA(dayArr, nameArr, colorArr, kdata) { + let seriesTemp = []; + for (let k = 0; k < dayArr.length; k++) { + let seriesItem = { + data: [], + name: nameArr[k], + color: colorArr[k] + }; + for (let i = 0, len = kdata.length; i < len; i++) { + if (i < dayArr[k]) { + seriesItem.data.push(null); + continue; + } + let sum = 0; + for (let j = 0; j < dayArr[k]; j++) { + sum += kdata[i - j][1]; + } + seriesItem.data.push(+(sum / dayArr[k]).toFixed(3)); + } + seriesTemp.push(seriesItem); + } + return seriesTemp; +} + +function calValidDistance(self, distance, chartData, config, opts) { + var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3]; + var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length - 1); + if(opts.type == 'mount' && opts.extra && opts.extra.mount && opts.extra.mount.widthRatio && opts.extra.mount.widthRatio > 1){ + if(opts.extra.mount.widthRatio>2) opts.extra.mount.widthRatio = 2 + dataChartWidth += (opts.extra.mount.widthRatio - 1)*chartData.eachSpacing; + } + var validDistance = distance; + if (distance >= 0) { + validDistance = 0; + self.uevent.trigger('scrollLeft'); + self.scrollOption.position = 'left' + opts.xAxis.scrollPosition = 'left'; + } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) { + validDistance = dataChartAreaWidth - dataChartWidth; + self.uevent.trigger('scrollRight'); + self.scrollOption.position = 'right' + opts.xAxis.scrollPosition = 'right'; + } else { + self.scrollOption.position = distance + opts.xAxis.scrollPosition = distance; + } + return validDistance; +} + +function isInAngleRange(angle, startAngle, endAngle) { + function adjust(angle) { + while (angle < 0) { + angle += 2 * Math.PI; + } + while (angle > 2 * Math.PI) { + angle -= 2 * Math.PI; + } + return angle; + } + angle = adjust(angle); + startAngle = adjust(startAngle); + endAngle = adjust(endAngle); + if (startAngle > endAngle) { + endAngle += 2 * Math.PI; + if (angle < startAngle) { + angle += 2 * Math.PI; + } + } + return angle >= startAngle && angle <= endAngle; +} + +function createCurveControlPoints(points, i) { + function isNotMiddlePoint(points, i) { + if (points[i - 1] && points[i + 1]) { + return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y, + points[i + 1].y); + } else { + return false; + } + } + function isNotMiddlePointX(points, i) { + if (points[i - 1] && points[i + 1]) { + return points[i].x >= Math.max(points[i - 1].x, points[i + 1].x) || points[i].x <= Math.min(points[i - 1].x, + points[i + 1].x); + } else { + return false; + } + } + var a = 0.2; + var b = 0.2; + var pAx = null; + var pAy = null; + var pBx = null; + var pBy = null; + if (i < 1) { + pAx = points[0].x + (points[1].x - points[0].x) * a; + pAy = points[0].y + (points[1].y - points[0].y) * a; + } else { + pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a; + pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a; + } + + if (i > points.length - 3) { + var last = points.length - 1; + pBx = points[last].x - (points[last].x - points[last - 1].x) * b; + pBy = points[last].y - (points[last].y - points[last - 1].y) * b; + } else { + pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b; + pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b; + } + if (isNotMiddlePoint(points, i + 1)) { + pBy = points[i + 1].y; + } + if (isNotMiddlePoint(points, i)) { + pAy = points[i].y; + } + if (isNotMiddlePointX(points, i + 1)) { + pBx = points[i + 1].x; + } + if (isNotMiddlePointX(points, i)) { + pAx = points[i].x; + } + if (pAy >= Math.max(points[i].y, points[i + 1].y) || pAy <= Math.min(points[i].y, points[i + 1].y)) { + pAy = points[i].y; + } + if (pBy >= Math.max(points[i].y, points[i + 1].y) || pBy <= Math.min(points[i].y, points[i + 1].y)) { + pBy = points[i + 1].y; + } + if (pAx >= Math.max(points[i].x, points[i + 1].x) || pAx <= Math.min(points[i].x, points[i + 1].x)) { + pAx = points[i].x; + } + if (pBx >= Math.max(points[i].x, points[i + 1].x) || pBx <= Math.min(points[i].x, points[i + 1].x)) { + pBx = points[i + 1].x; + } + return { + ctrA: { + x: pAx, + y: pAy + }, + ctrB: { + x: pBx, + y: pBy + } + }; +} + + +function convertCoordinateOrigin(x, y, center) { + return { + x: center.x + x, + y: center.y - y + }; +} + +function avoidCollision(obj, target) { + if (target) { + // is collision test + while (util.isCollision(obj, target)) { + if (obj.start.x > 0) { + obj.start.y--; + } else if (obj.start.x < 0) { + obj.start.y++; + } else { + if (obj.start.y > 0) { + obj.start.y++; + } else { + obj.start.y--; + } + } + } + } + return obj; +} + +function fixPieSeries(series, opts, config){ + let pieSeriesArr = []; + if(series.length>0 && series[0].data.constructor.toString().indexOf('Array') > -1){ + opts._pieSeries_ = series; + let oldseries = series[0].data; + for (var i = 0; i < oldseries.length; i++) { + oldseries[i].formatter = series[0].formatter; + oldseries[i].data = oldseries[i].value; + pieSeriesArr.push(oldseries[i]); + } + opts.series = pieSeriesArr; + }else{ + pieSeriesArr = series; + } + return pieSeriesArr; +} + +function fillSeries(series, opts, config) { + var index = 0; + for (var i = 0; i < series.length; i++) { + let item = series[i]; + if (!item.color) { + item.color = config.color[index]; + index = (index + 1) % config.color.length; + } + if (!item.linearIndex) { + item.linearIndex = i; + } + if (!item.index) { + item.index = 0; + } + if (!item.type) { + item.type = opts.type; + } + if (typeof item.show == "undefined") { + item.show = true; + } + if (!item.type) { + item.type = opts.type; + } + if (!item.pointShape) { + item.pointShape = "circle"; + } + if (!item.legendShape) { + switch (item.type) { + case 'line': + item.legendShape = "line"; + break; + case 'column': + case 'bar': + item.legendShape = "rect"; + break; + case 'area': + case 'mount': + item.legendShape = "triangle"; + break; + default: + item.legendShape = "circle"; + } + } + } + return series; +} + +function fillCustomColor(linearType, customColor, series, config) { + var newcolor = customColor || []; + if (linearType == 'custom' && newcolor.length == 0 ) { + newcolor = config.linearColor; + } + if (linearType == 'custom' && newcolor.length < series.length) { + let chazhi = series.length - newcolor.length; + for (var i = 0; i < chazhi; i++) { + newcolor.push(config.linearColor[(i + 1) % config.linearColor.length]); + } + } + return newcolor; +} + +function getDataRange(minData, maxData) { + var limit = 0; + var range = maxData - minData; + if (range >= 10000) { + limit = 1000; + } else if (range >= 1000) { + limit = 100; + } else if (range >= 100) { + limit = 10; + } else if (range >= 10) { + limit = 5; + } else if (range >= 1) { + limit = 1; + } else if (range >= 0.1) { + limit = 0.1; + } else if (range >= 0.01) { + limit = 0.01; + } else if (range >= 0.001) { + limit = 0.001; + } else if (range >= 0.0001) { + limit = 0.0001; + } else if (range >= 0.00001) { + limit = 0.00001; + } else { + limit = 0.000001; + } + return { + minRange: findRange(minData, 'lower', limit), + maxRange: findRange(maxData, 'upper', limit) + }; +} + +function measureText(text, fontSize, context) { + var width = 0; + text = String(text); + // #ifdef MP-ALIPAY || MP-BAIDU || APP-NVUE + context = false; + // #endif + if (context !== false && context !== undefined && context.setFontSize && context.measureText) { + context.setFontSize(fontSize); + return context.measureText(text).width; + } else { + var text = text.split(''); + for (let i = 0; i < text.length; i++) { + let item = text[i]; + if (/[a-zA-Z]/.test(item)) { + width += 7; + } else if (/[0-9]/.test(item)) { + width += 5.5; + } else if (/\./.test(item)) { + width += 2.7; + } else if (/-/.test(item)) { + width += 3.25; + } else if (/:/.test(item)) { + width += 2.5; + } else if (/[\u4e00-\u9fa5]/.test(item)) { + width += 10; + } else if (/\(|\)/.test(item)) { + width += 3.73; + } else if (/\s/.test(item)) { + width += 2.5; + } else if (/%/.test(item)) { + width += 8; + } else { + width += 10; + } + } + return width * fontSize / 10; + } +} + +function dataCombine(series) { + return series.reduce(function(a, b) { + return (a.data ? a.data : a).concat(b.data); + }, []); +} + +function dataCombineStack(series, len) { + var sum = new Array(len); + for (var j = 0; j < sum.length; j++) { + sum[j] = 0; + } + for (var i = 0; i < series.length; i++) { + for (var j = 0; j < sum.length; j++) { + sum[j] += series[i].data[j]; + } + } + return series.reduce(function(a, b) { + return (a.data ? a.data : a).concat(b.data).concat(sum); + }, []); +} + +function getTouches(touches, opts, e) { + let x, y; + if (touches.clientX) { + if (opts.rotate) { + y = opts.height - touches.clientX * opts.pix; + x = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pix / 2) * (opts.pix - 1)) * opts.pix; + } else { + x = touches.clientX * opts.pix; + y = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pix / 2) * (opts.pix - 1)) * opts.pix; + } + } else { + if (opts.rotate) { + y = opts.height - touches.x * opts.pix; + x = touches.y * opts.pix; + } else { + x = touches.x * opts.pix; + y = touches.y * opts.pix; + } + } + return { + x: x, + y: y + } +} + +function getSeriesDataItem(series, index, group) { + var data = []; + var newSeries = []; + var indexIsArr = index.constructor.toString().indexOf('Array') > -1; + if(indexIsArr){ + let tempSeries = filterSeries(series); + for (var i = 0; i < group.length; i++) { + newSeries.push(tempSeries[group[i]]); + } + }else{ + newSeries = series; + }; + for (let i = 0; i < newSeries.length; i++) { + let item = newSeries[i]; + let tmpindex = -1; + if(indexIsArr){ + tmpindex = index[i]; + }else{ + tmpindex = index; + } + if (item.data[tmpindex] !== null && typeof item.data[tmpindex] !== 'undefined' && item.show) { + let seriesItem = {}; + seriesItem.color = item.color; + seriesItem.type = item.type; + seriesItem.style = item.style; + seriesItem.pointShape = item.pointShape; + seriesItem.disableLegend = item.disableLegend; + seriesItem.legendShape = item.legendShape; + seriesItem.name = item.name; + seriesItem.show = item.show; + seriesItem.data = item.formatter ? item.formatter(item.data[tmpindex]) : item.data[tmpindex]; + data.push(seriesItem); + } + } + return data; +} + +function getMaxTextListLength(list, fontSize, context) { + var lengthList = list.map(function(item) { + return measureText(item, fontSize, context); + }); + return Math.max.apply(null, lengthList); +} + +function getRadarCoordinateSeries(length) { + var eachAngle = 2 * Math.PI / length; + var CoordinateSeries = []; + for (var i = 0; i < length; i++) { + CoordinateSeries.push(eachAngle * i); + } + return CoordinateSeries.map(function(item) { + return -1 * item + Math.PI / 2; + }); +} + +function getToolTipData(seriesData, opts, index, group, categories) { + var option = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; + var calPoints = opts.chartData.calPoints?opts.chartData.calPoints:[]; + let points = {}; + if(group.length > 0){ + let filterPoints = []; + for (let i = 0; i < group.length; i++) { + filterPoints.push(calPoints[group[i]]) + } + points = filterPoints[0][index[0]]; + }else{ + for (let i = 0; i < calPoints.length; i++) { + if(calPoints[i][index]){ + points = calPoints[i][index]; + break; + } + } + }; + var textList = seriesData.map(function(item) { + let titleText = null; + if (opts.categories && opts.categories.length>0) { + titleText = categories[index]; + }; + return { + text: option.formatter ? option.formatter(item, titleText, index, opts) : item.name + ': ' + item.data, + color: item.color, + legendShape: opts.extra.tooltip.legendShape == 'auto'? item.legendShape : opts.extra.tooltip.legendShape + }; + }); + var offset = { + x: Math.round(points.x), + y: Math.round(points.y) + }; + return { + textList: textList, + offset: offset + }; +} + +function getMixToolTipData(seriesData, opts, index, categories) { + var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var points = opts.chartData.xAxisPoints[index] + opts.chartData.eachSpacing / 2; + var textList = seriesData.map(function(item) { + return { + text: option.formatter ? option.formatter(item, categories[index], index, opts) : item.name + ': ' + item.data, + color: item.color, + disableLegend: item.disableLegend ? true : false, + legendShape: opts.extra.tooltip.legendShape == 'auto'? item.legendShape : opts.extra.tooltip.legendShape + }; + }); + textList = textList.filter(function(item) { + if (item.disableLegend !== true) { + return item; + } + }); + var offset = { + x: Math.round(points), + y: 0 + }; + return { + textList: textList, + offset: offset + }; +} + +function getCandleToolTipData(series, seriesData, opts, index, categories, extra) { + var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; + var calPoints = opts.chartData.calPoints; + let upColor = extra.color.upFill; + let downColor = extra.color.downFill; + //颜色顺序为开盘,收盘,最低,最高 + let color = [upColor, upColor, downColor, upColor]; + var textList = []; + seriesData.map(function(item) { + if (index == 0) { + if (item.data[1] - item.data[0] < 0) { + color[1] = downColor; + } else { + color[1] = upColor; + } + } else { + if (item.data[0] < series[index - 1][1]) { + color[0] = downColor; + } + if (item.data[1] < item.data[0]) { + color[1] = downColor; + } + if (item.data[2] > series[index - 1][1]) { + color[2] = upColor; + } + if (item.data[3] < series[index - 1][1]) { + color[3] = downColor; + } + } + let text1 = { + text: '开盘:' + item.data[0], + color: color[0], + legendShape: opts.extra.tooltip.legendShape == 'auto'? item.legendShape : opts.extra.tooltip.legendShape + }; + let text2 = { + text: '收盘:' + item.data[1], + color: color[1], + legendShape: opts.extra.tooltip.legendShape == 'auto'? item.legendShape : opts.extra.tooltip.legendShape + }; + let text3 = { + text: '最低:' + item.data[2], + color: color[2], + legendShape: opts.extra.tooltip.legendShape == 'auto'? item.legendShape : opts.extra.tooltip.legendShape + }; + let text4 = { + text: '最高:' + item.data[3], + color: color[3], + legendShape: opts.extra.tooltip.legendShape == 'auto'? item.legendShape : opts.extra.tooltip.legendShape + }; + textList.push(text1, text2, text3, text4); + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + offset.x = Math.round(validCalPoints[0][0].x); + return { + textList: textList, + offset: offset + }; +} + +function filterSeries(series) { + let tempSeries = []; + for (let i = 0; i < series.length; i++) { + if (series[i].show == true) { + tempSeries.push(series[i]) + } + } + return tempSeries; +} + +function findCurrentIndex(currentPoints, calPoints, opts, config) { + var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var current={ index:-1, group:[] }; + var spacing = opts.chartData.eachSpacing / 2; + let xAxisPoints = []; + if (calPoints && calPoints.length > 0) { + if (!opts.categories) { + spacing = 0; + }else{ + for (let i = 1; i < opts.chartData.xAxisPoints.length; i++) { + xAxisPoints.push(opts.chartData.xAxisPoints[i] - spacing); + } + if ((opts.type == 'line' || opts.type == 'area') && opts.xAxis.boundaryGap == 'justify') { + xAxisPoints = opts.chartData.xAxisPoints; + } + } + if (isInExactChartArea(currentPoints, opts, config)) { + if (!opts.categories) { + let timePoints = Array(calPoints.length); + for (let i = 0; i < calPoints.length; i++) { + timePoints[i] = Array(calPoints[i].length) + for (let j = 0; j < calPoints[i].length; j++) { + timePoints[i][j] = (Math.abs(calPoints[i][j].x - currentPoints.x)); + } + }; + let pointValue = Array(timePoints.length); + let pointIndex = Array(timePoints.length); + for (let i = 0; i < timePoints.length; i++) { + pointValue[i] = Math.min.apply(null, timePoints[i]); + pointIndex[i] = timePoints[i].indexOf(pointValue[i]); + } + let minValue = Math.min.apply(null, pointValue); + current.index = []; + for (let i = 0; i < pointValue.length; i++) { + if(pointValue[i] == minValue){ + current.group.push(i); + current.index.push(pointIndex[i]); + } + }; + }else{ + xAxisPoints.forEach(function(item, index) { + if (currentPoints.x + offset + spacing > item) { + current.index = index; + } + }); + } + } + } + return current; +} + +function findBarChartCurrentIndex(currentPoints, calPoints, opts, config) { + var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var current={ index:-1, group:[] }; + var spacing = opts.chartData.eachSpacing / 2; + let yAxisPoints = opts.chartData.yAxisPoints; + if (calPoints && calPoints.length > 0) { + if (isInExactChartArea(currentPoints, opts, config)) { + yAxisPoints.forEach(function(item, index) { + if (currentPoints.y + offset + spacing > item) { + current.index = index; + } + }); + } + } + return current; +} + +function findLegendIndex(currentPoints, legendData, opts) { + let currentIndex = -1; + let gap = 0; + if (isInExactLegendArea(currentPoints, legendData.area)) { + let points = legendData.points; + let index = -1; + for (let i = 0, len = points.length; i < len; i++) { + let item = points[i]; + for (let j = 0; j < item.length; j++) { + index += 1; + let area = item[j]['area']; + if (area && currentPoints.x > area[0] - gap && currentPoints.x < area[2] + gap && currentPoints.y > area[1] - gap && currentPoints.y < area[3] + gap) { + currentIndex = index; + break; + } + } + } + return currentIndex; + } + return currentIndex; +} + +function isInExactLegendArea(currentPoints, area) { + return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y && currentPoints.y < area.end.y; +} + +function isInExactChartArea(currentPoints, opts, config) { + return currentPoints.x <= opts.width - opts.area[1] + 10 && currentPoints.x >= opts.area[3] - 10 && currentPoints.y >= opts.area[0] && currentPoints.y <= opts.height - opts.area[2]; +} + +function findRadarChartCurrentIndex(currentPoints, radarData, count) { + var eachAngleArea = 2 * Math.PI / count; + var currentIndex = -1; + if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) { + var fixAngle = function fixAngle(angle) { + if (angle < 0) { + angle += 2 * Math.PI; + } + if (angle > 2 * Math.PI) { + angle -= 2 * Math.PI; + } + return angle; + }; + var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x); + angle = -1 * angle; + if (angle < 0) { + angle += 2 * Math.PI; + } + var angleList = radarData.angleList.map(function(item) { + item = fixAngle(-1 * item); + return item; + }); + angleList.forEach(function(item, index) { + var rangeStart = fixAngle(item - eachAngleArea / 2); + var rangeEnd = fixAngle(item + eachAngleArea / 2); + if (rangeEnd < rangeStart) { + rangeEnd += 2 * Math.PI; + } + if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <= rangeEnd) { + currentIndex = index; + } + }); + } + return currentIndex; +} + +function findFunnelChartCurrentIndex(currentPoints, funnelData) { + var currentIndex = -1; + for (var i = 0, len = funnelData.series.length; i < len; i++) { + var item = funnelData.series[i]; + if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findWordChartCurrentIndex(currentPoints, wordData) { + var currentIndex = -1; + for (var i = 0, len = wordData.length; i < len; i++) { + var item = wordData[i]; + if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findMapChartCurrentIndex(currentPoints, opts) { + var currentIndex = -1; + var cData = opts.chartData.mapData; + var data = opts.series; + var tmp = pointToCoordinate(currentPoints.y, currentPoints.x, cData.bounds, cData.scale, cData.xoffset, cData.yoffset); + var poi = [tmp.x, tmp.y]; + for (var i = 0, len = data.length; i < len; i++) { + var item = data[i].geometry.coordinates; + if (isPoiWithinPoly(poi, item, opts.chartData.mapData.mercator)) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findRoseChartCurrentIndex(currentPoints, pieData, opts) { + var currentIndex = -1; + var series = getRoseDataPoints(opts._series_, opts.extra.rose.type, pieData.radius, pieData.radius); + if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) { + var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x); + angle = -angle; + if(opts.extra.rose && opts.extra.rose.offsetAngle){ + angle = angle - opts.extra.rose.offsetAngle * Math.PI / 180; + } + for (var i = 0, len = series.length; i < len; i++) { + if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._rose_proportion_ * 2 * Math.PI)) { + currentIndex = i; + break; + } + } + } + return currentIndex; +} + +function findPieChartCurrentIndex(currentPoints, pieData, opts) { + var currentIndex = -1; + var series = getPieDataPoints(pieData.series); + if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) { + var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x); + angle = -angle; + if(opts.extra.pie && opts.extra.pie.offsetAngle){ + angle = angle - opts.extra.pie.offsetAngle * Math.PI / 180; + } + if(opts.extra.ring && opts.extra.ring.offsetAngle){ + angle = angle - opts.extra.ring.offsetAngle * Math.PI / 180; + } + for (var i = 0, len = series.length; i < len; i++) { + if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._proportion_ * 2 * Math.PI)) { + currentIndex = i; + break; + } + } + } + return currentIndex; +} + +function isInExactPieChartArea(currentPoints, center, radius) { + return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2); +} + + +function splitPoints(points,eachSeries) { + var newPoints = []; + var items = []; + points.forEach(function(item, index) { + if(eachSeries.connectNulls){ + if (item !== null) { + items.push(item); + } + }else{ + if (item !== null) { + items.push(item); + } else { + if (items.length) { + newPoints.push(items); + } + items = []; + } + } + + }); + if (items.length) { + newPoints.push(items); + } + return newPoints; +} + + +function calLegendData(series, opts, config, chartData, context) { + let legendData = { + area: { + start: { + x: 0, + y: 0 + }, + end: { + x: 0, + y: 0 + }, + width: 0, + height: 0, + wholeWidth: 0, + wholeHeight: 0 + }, + points: [], + widthArr: [], + heightArr: [] + }; + if (opts.legend.show === false) { + chartData.legendData = legendData; + return legendData; + } + let padding = opts.legend.padding * opts.pix; + let margin = opts.legend.margin * opts.pix; + let fontSize = opts.legend.fontSize ? opts.legend.fontSize * opts.pix : config.fontSize; + let shapeWidth = 15 * opts.pix; + let shapeRight = 5 * opts.pix; + let lineHeight = Math.max(opts.legend.lineHeight * opts.pix, fontSize); + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + let legendList = []; + let widthCount = 0; + let widthCountArr = []; + let currentRow = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + const legendText = item.legendText ? item.legendText : item.name; + let itemWidth = shapeWidth + shapeRight + measureText(legendText || 'undefined', fontSize, context) + opts.legend.itemGap * opts.pix; + if (widthCount + itemWidth > opts.width - opts.area[1] - opts.area[3]) { + legendList.push(currentRow); + widthCountArr.push(widthCount - opts.legend.itemGap * opts.pix); + widthCount = itemWidth; + currentRow = [item]; + } else { + widthCount += itemWidth; + currentRow.push(item); + } + } + if (currentRow.length) { + legendList.push(currentRow); + widthCountArr.push(widthCount - opts.legend.itemGap * opts.pix); + legendData.widthArr = widthCountArr; + let legendWidth = Math.max.apply(null, widthCountArr); + switch (opts.legend.float) { + case 'left': + legendData.area.start.x = opts.area[3]; + legendData.area.end.x = opts.area[3] + legendWidth + 2 * padding; + break; + case 'right': + legendData.area.start.x = opts.width - opts.area[1] - legendWidth - 2 * padding; + legendData.area.end.x = opts.width - opts.area[1]; + break; + default: + legendData.area.start.x = (opts.width - legendWidth) / 2 - padding; + legendData.area.end.x = (opts.width + legendWidth) / 2 + padding; + } + legendData.area.width = legendWidth + 2 * padding; + legendData.area.wholeWidth = legendWidth + 2 * padding; + legendData.area.height = legendList.length * lineHeight + 2 * padding; + legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin; + legendData.points = legendList; + } + } else { + let len = series.length; + let maxHeight = opts.height - opts.area[0] - opts.area[2] - 2 * margin - 2 * padding; + let maxLength = Math.min(Math.floor(maxHeight / lineHeight), len); + legendData.area.height = maxLength * lineHeight + padding * 2; + legendData.area.wholeHeight = maxLength * lineHeight + padding * 2; + switch (opts.legend.float) { + case 'top': + legendData.area.start.y = opts.area[0] + margin; + legendData.area.end.y = opts.area[0] + margin + legendData.area.height; + break; + case 'bottom': + legendData.area.start.y = opts.height - opts.area[2] - margin - legendData.area.height; + legendData.area.end.y = opts.height - opts.area[2] - margin; + break; + default: + legendData.area.start.y = (opts.height - legendData.area.height) / 2; + legendData.area.end.y = (opts.height + legendData.area.height) / 2; + } + let lineNum = len % maxLength === 0 ? len / maxLength : Math.floor((len / maxLength) + 1); + let currentRow = []; + for (let i = 0; i < lineNum; i++) { + let temp = series.slice(i * maxLength, i * maxLength + maxLength); + currentRow.push(temp); + } + legendData.points = currentRow; + if (currentRow.length) { + for (let i = 0; i < currentRow.length; i++) { + let item = currentRow[i]; + let maxWidth = 0; + for (let j = 0; j < item.length; j++) { + let itemWidth = shapeWidth + shapeRight + measureText(item[j].name || 'undefined', fontSize, context) + opts.legend.itemGap * opts.pix; + if (itemWidth > maxWidth) { + maxWidth = itemWidth; + } + } + legendData.widthArr.push(maxWidth); + legendData.heightArr.push(item.length * lineHeight + padding * 2); + } + let legendWidth = 0 + for (let i = 0; i < legendData.widthArr.length; i++) { + legendWidth += legendData.widthArr[i]; + } + legendData.area.width = legendWidth - opts.legend.itemGap * opts.pix + 2 * padding; + legendData.area.wholeWidth = legendData.area.width + padding; + } + } + switch (opts.legend.position) { + case 'top': + legendData.area.start.y = opts.area[0] + margin; + legendData.area.end.y = opts.area[0] + margin + legendData.area.height; + break; + case 'bottom': + legendData.area.start.y = opts.height - opts.area[2] - legendData.area.height - margin; + legendData.area.end.y = opts.height - opts.area[2] - margin; + break; + case 'left': + legendData.area.start.x = opts.area[3]; + legendData.area.end.x = opts.area[3] + legendData.area.width; + break; + case 'right': + legendData.area.start.x = opts.width - opts.area[1] - legendData.area.width; + legendData.area.end.x = opts.width - opts.area[1]; + break; + } + chartData.legendData = legendData; + return legendData; +} + +function calCategoriesData(categories, opts, config, eachSpacing, context) { + var result = { + angle: 0, + xAxisHeight: opts.xAxis.lineHeight * opts.pix + opts.xAxis.marginTop * opts.pix + }; + var fontSize = opts.xAxis.fontSize * opts.pix; + var categoriesTextLenth = categories.map(function(item,index) { + var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item,index,opts) : item; + return measureText(String(xitem), fontSize, context); + }); + var maxTextLength = Math.max.apply(this, categoriesTextLenth); + if (opts.xAxis.rotateLabel == true) { + result.angle = opts.xAxis.rotateAngle * Math.PI / 180; + let tempHeight = opts.xAxis.marginTop * opts.pix * 2 + Math.abs(maxTextLength * Math.sin(result.angle)) + tempHeight = tempHeight < fontSize + opts.xAxis.marginTop * opts.pix * 2 ? tempHeight + opts.xAxis.marginTop * opts.pix * 2 : tempHeight; + result.xAxisHeight = tempHeight; + } + if (opts.enableScroll && opts.xAxis.scrollShow) { + result.xAxisHeight += 6 * opts.pix; + } + if (opts.xAxis.disabled){ + result.xAxisHeight = 0; + } + return result; +} + +function getXAxisTextList(series, opts, config, stack) { + var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + var data; + if (stack == 'stack') { + data = dataCombineStack(series, opts.categories.length); + } else { + data = dataCombine(series); + } + var sorted = []; + // remove null from data + data = data.filter(function(item) { + //return item !== null; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array') > -1) { + return item !== null; + } else { + return item.value !== null; + } + } else { + return item !== null; + } + }); + data.map(function(item) { + if (typeof item === 'object') { + if (item.constructor.toString().indexOf('Array') > -1) { + if (opts.type == 'candle') { + item.map(function(subitem) { + sorted.push(subitem); + }) + } else { + sorted.push(item[0]); + } + } else { + sorted.push(item.value); + } + } else { + sorted.push(item); + } + }) + + var minData = 0; + var maxData = 0; + if (sorted.length > 0) { + minData = Math.min.apply(this, sorted); + maxData = Math.max.apply(this, sorted); + } + //为了兼容v1.9.0之前的项目 + if (index > -1) { + if (typeof opts.xAxis.data[index].min === 'number') { + minData = Math.min(opts.xAxis.data[index].min, minData); + } + if (typeof opts.xAxis.data[index].max === 'number') { + maxData = Math.max(opts.xAxis.data[index].max, maxData); + } + } else { + if (typeof opts.xAxis.min === 'number') { + minData = Math.min(opts.xAxis.min, minData); + } + if (typeof opts.xAxis.max === 'number') { + maxData = Math.max(opts.xAxis.max, maxData); + } + } + if (minData === maxData) { + var rangeSpan = maxData || 10; + maxData += rangeSpan; + } + //var dataRange = getDataRange(minData, maxData); + var minRange = minData; + var maxRange = maxData; + var range = []; + var eachRange = (maxRange - minRange) / opts.xAxis.splitNumber; + for (var i = 0; i <= opts.xAxis.splitNumber; i++) { + range.push(minRange + eachRange * i); + } + return range; +} + +function calXAxisData(series, opts, config, context) { + //堆叠图重算Y轴 + var columnstyle = assign({}, { + type: "" + }, opts.extra.bar); + var result = { + angle: 0, + xAxisHeight: opts.xAxis.lineHeight * opts.pix + opts.xAxis.marginTop * opts.pix + }; + result.ranges = getXAxisTextList(series, opts, config, columnstyle.type); + result.rangesFormat = result.ranges.map(function(item) { + //item = opts.xAxis.formatter ? opts.xAxis.formatter(item) : util.toFixed(item, 2); + item = util.toFixed(item, 2); + return item; + }); + var xAxisScaleValues = result.ranges.map(function(item) { + // 如果刻度值是浮点数,则保留两位小数 + item = util.toFixed(item, 2); + // 若有自定义格式则调用自定义的格式化函数 + //item = opts.xAxis.formatter ? opts.xAxis.formatter(Number(item)) : item; + return item; + }); + result = Object.assign(result, getXAxisPoints(xAxisScaleValues, opts, config)); + // 计算X轴刻度的属性譬如每个刻度的间隔,刻度的起始点\结束点以及总长 + var eachSpacing = result.eachSpacing; + var textLength = xAxisScaleValues.map(function(item) { + return measureText(item, opts.xAxis.fontSize * opts.pix, context); + }); + if (opts.xAxis.disabled === true) { + result.xAxisHeight = 0; + } + return result; +} + +function getRadarDataPoints(angleList, center, radius, series, opts) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var radarOption = opts.extra.radar || {}; + radarOption.max = radarOption.max || 0; + var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series))); + var data = []; + for (let i = 0; i < series.length; i++) { + let each = series[i]; + let listItem = {}; + listItem.color = each.color; + listItem.legendShape = each.legendShape; + listItem.pointShape = each.pointShape; + listItem.data = []; + each.data.forEach(function(item, index) { + let tmp = {}; + tmp.angle = angleList[index]; + tmp.proportion = item / maxData; + tmp.value = item; + tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * process * Math.sin(tmp.angle), center); + listItem.data.push(tmp); + }); + data.push(listItem); + } + return data; +} + +function getPieDataPoints(series, radius) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var count = 0; + var _start_ = 0; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + count += item.data; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (count === 0) { + item._proportion_ = 1 / series.length * process; + } else { + item._proportion_ = item.data / count * process; + } + item._radius_ = radius; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item._start_ = _start_; + _start_ += 2 * item._proportion_ * Math.PI; + } + return series; +} + +function getFunnelDataPoints(series, radius, option, eachSpacing) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + for (let i = 0; i < series.length; i++) { + if(option.type == 'funnel'){ + series[i].radius = series[i].data / series[0].data * radius * process; + }else{ + series[i].radius = (eachSpacing * (series.length - i)) / (eachSpacing * series.length) * radius * process; + } + series[i]._proportion_ = series[i].data / series[0].data; + } + // if(option.type !== 'pyramid'){ + // series.reverse(); + // } + return series; +} + +function getRoseDataPoints(series, type, minRadius, radius) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var count = 0; + var _start_ = 0; + var dataArr = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + count += item.data; + dataArr.push(item.data); + } + var minData = Math.min.apply(null, dataArr); + var maxData = Math.max.apply(null, dataArr); + var radiusLength = radius - minRadius; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (count === 0) { + item._proportion_ = 1 / series.length * process; + item._rose_proportion_ = 1 / series.length * process; + } else { + item._proportion_ = item.data / count * process; + if(type == 'area'){ + item._rose_proportion_ = 1 / series.length * process; + }else{ + item._rose_proportion_ = item.data / count * process; + } + } + item._radius_ = minRadius + radiusLength * ((item.data - minData) / (maxData - minData)) || radius; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item._start_ = _start_; + _start_ += 2 * item._rose_proportion_ * Math.PI; + } + return series; +} + +function getArcbarDataPoints(series, arcbarOption) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + if (process == 1) { + process = 0.999999; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + let totalAngle; + if (arcbarOption.type == 'circle') { + totalAngle = 2; + } else { + if(arcbarOption.direction == 'ccw'){ + if (arcbarOption.startAngle < arcbarOption.endAngle) { + totalAngle = 2 + arcbarOption.startAngle - arcbarOption.endAngle; + } else { + totalAngle = arcbarOption.startAngle - arcbarOption.endAngle; + } + }else{ + if (arcbarOption.endAngle < arcbarOption.startAngle) { + totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle; + } else { + totalAngle = arcbarOption.startAngle - arcbarOption.endAngle; + } + } + } + item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle; + if(arcbarOption.direction == 'ccw'){ + item._proportion_ = arcbarOption.startAngle - totalAngle * item.data * process ; + } + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getGaugeArcbarDataPoints(series, arcbarOption) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + if (process == 1) { + process = 0.999999; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + let totalAngle; + if (arcbarOption.type == 'circle') { + totalAngle = 2; + } else { + if (arcbarOption.endAngle < arcbarOption.startAngle) { + totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle; + } else { + totalAngle = arcbarOption.startAngle - arcbarOption.endAngle; + } + } + item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle; + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getGaugeAxisPoints(categories, startAngle, endAngle) { + let totalAngle; + if (endAngle < startAngle) { + totalAngle = 2 + endAngle - startAngle; + } else { + totalAngle = startAngle - endAngle; + } + let tempStartAngle = startAngle; + for (let i = 0; i < categories.length; i++) { + categories[i].value = categories[i].value === null ? 0 : categories[i].value; + categories[i]._startAngle_ = tempStartAngle; + categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle; + if (categories[i]._endAngle_ >= 2) { + categories[i]._endAngle_ = categories[i]._endAngle_ % 2; + } + tempStartAngle = categories[i]._endAngle_; + } + return categories; +} + +function getGaugeDataPoints(series, categories, gaugeOption) { + let process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (gaugeOption.pointer.color == 'auto') { + for (let i = 0; i < categories.length; i++) { + if (item.data <= categories[i].value) { + item.color = categories[i].color; + break; + } + } + } else { + item.color = gaugeOption.pointer.color; + } + let totalAngle; + if (gaugeOption.endAngle < gaugeOption.startAngle) { + totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle; + } else { + totalAngle = gaugeOption.startAngle - gaugeOption.endAngle; + } + item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle; + item._oldAngle_ = gaugeOption.oldAngle; + if (gaugeOption.oldAngle < gaugeOption.endAngle) { + item._oldAngle_ += 2; + } + if (item.data >= gaugeOption.oldData) { + item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle; + } else { + item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process; + } + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getPieTextMaxLength(series, config, context, opts) { + series = getPieDataPoints(series); + let maxLength = 0; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + let text = item.formatter ? item.formatter(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%'; + maxLength = Math.max(maxLength, measureText(text, item.textSize * opts.pix || config.fontSize, context)); + } + return maxLength; +} + +function fixColumeData(points, eachSpacing, columnLen, index, config, opts) { + return points.map(function(item) { + if (item === null) { + return null; + } + var seriesGap = 0; + var categoryGap = 0; + if (opts.type == 'mix') { + seriesGap = opts.extra.mix.column.seriesGap * opts.pix || 0; + categoryGap = opts.extra.mix.column.categoryGap * opts.pix || 0; + } else { + seriesGap = opts.extra.column.seriesGap * opts.pix || 0; + categoryGap = opts.extra.column.categoryGap * opts.pix || 0; + } + seriesGap = Math.min(seriesGap, eachSpacing / columnLen) + categoryGap = Math.min(categoryGap, eachSpacing / columnLen) + item.width = Math.ceil((eachSpacing - 2 * categoryGap - seriesGap * (columnLen - 1)) / columnLen); + if (opts.extra.mix && opts.extra.mix.column.width && +opts.extra.mix.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.mix.column.width * opts.pix); + } + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width * opts.pix); + } + if (item.width <= 0) { + item.width = 1; + } + item.x += (index + 0.5 - columnLen / 2) * (item.width + seriesGap); + return item; + }); +} + +function fixBarData(points, eachSpacing, columnLen, index, config, opts) { + return points.map(function(item) { + if (item === null) { + return null; + } + var seriesGap = 0; + var categoryGap = 0; + seriesGap = opts.extra.bar.seriesGap * opts.pix || 0; + categoryGap = opts.extra.bar.categoryGap * opts.pix || 0; + seriesGap = Math.min(seriesGap, eachSpacing / columnLen) + categoryGap = Math.min(categoryGap, eachSpacing / columnLen) + item.width = Math.ceil((eachSpacing - 2 * categoryGap - seriesGap * (columnLen - 1)) / columnLen); + if (opts.extra.bar && opts.extra.bar.width && +opts.extra.bar.width > 0) { + item.width = Math.min(item.width, +opts.extra.bar.width * opts.pix); + } + if (item.width <= 0) { + item.width = 1; + } + item.y += (index + 0.5 - columnLen / 2) * (item.width + seriesGap); + return item; + }); +} + +function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) { + var categoryGap = opts.extra.column.categoryGap * opts.pix || 0; + return points.map(function(item) { + if (item === null) { + return null; + } + item.width = eachSpacing - 2 * categoryGap; + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width * opts.pix); + } + if (index > 0) { + item.width -= border; + } + return item; + }); +} + +function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) { + var categoryGap = opts.extra.column.categoryGap * opts.pix || 0; + return points.map(function(item, indexn) { + if (item === null) { + return null; + } + item.width = Math.ceil(eachSpacing - 2 * categoryGap); + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width * opts.pix); + } + if (item.width <= 0) { + item.width = 1; + } + return item; + }); +} + +function fixBarStackData(points, eachSpacing, columnLen, index, config, opts, series) { + var categoryGap = opts.extra.bar.categoryGap * opts.pix || 0; + return points.map(function(item, indexn) { + if (item === null) { + return null; + } + item.width = Math.ceil(eachSpacing - 2 * categoryGap); + if (opts.extra.bar && opts.extra.bar.width && +opts.extra.bar.width > 0) { + item.width = Math.min(item.width, +opts.extra.bar.width * opts.pix); + } + if (item.width <= 0) { + item.width = 1; + } + return item; + }); +} + +function getXAxisPoints(categories, opts, config) { + var spacingValid = opts.width - opts.area[1] - opts.area[3]; + var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length; + if ((opts.type == 'line' || opts.type == 'area' || opts.type == 'scatter' || opts.type == 'bubble' || opts.type == 'bar') && dataCount > 1 && opts.xAxis.boundaryGap == 'justify') { + dataCount -= 1; + } + var widthRatio = 0; + if(opts.type == 'mount' && opts.extra && opts.extra.mount && opts.extra.mount.widthRatio && opts.extra.mount.widthRatio > 1){ + if(opts.extra.mount.widthRatio>2) opts.extra.mount.widthRatio = 2 + widthRatio = opts.extra.mount.widthRatio - 1; + dataCount += widthRatio; + } + var eachSpacing = spacingValid / dataCount; + var xAxisPoints = []; + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + categories.forEach(function(item, index) { + xAxisPoints.push(startX + widthRatio / 2 * eachSpacing + index * eachSpacing); + }); + if (opts.xAxis.boundaryGap !== 'justify') { + if (opts.enableScroll === true) { + xAxisPoints.push(startX + widthRatio * eachSpacing + categories.length * eachSpacing); + } else { + xAxisPoints.push(endX); + } + } + return { + xAxisPoints: xAxisPoints, + startX: startX, + endX: endX, + eachSpacing: eachSpacing + }; +} + +function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var cPoints = []; + item.forEach(function(items, indexs) { + var point = {}; + point.x = xAxisPoints[index] + Math.round(eachSpacing / 2); + var value = items.value || items; + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + cPoints.push(point); + }); + points.push(cPoints); + } + }); + return points; +} + +function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var boundaryGap = 'center'; + if (opts.type == 'line' || opts.type == 'area' || opts.type == 'scatter' || opts.type == 'bubble' ) { + boundaryGap = opts.xAxis.boundaryGap; + } + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + var validWidth = opts.width - opts.area[1] - opts.area[3]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index]; + var value = item; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array') > -1) { + let xranges, xminRange, xmaxRange; + xranges = [].concat(opts.chartData.xAxisData.ranges); + xminRange = xranges.shift(); + xmaxRange = xranges.pop(); + value = item[1]; + point.x = opts.area[3] + validWidth * (item[0] - xminRange) / (xmaxRange - xminRange); + if(opts.type == 'bubble'){ + point.r = item[2]; + point.t = item[3]; + } + } else { + value = item.value; + } + } + if (boundaryGap == 'center') { + point.x += eachSpacing / 2; + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - height - opts.area[2]; + points.push(point); + } + }); + return points; +} + +function getLineDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, lineOption, process){ + var process = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 1; + var boundaryGap = opts.xAxis.boundaryGap; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + var validWidth = opts.width - opts.area[1] - opts.area[3]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + if(lineOption.animation == 'vertical'){ + point.x = xAxisPoints[index]; + var value = item; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array') > -1) { + let xranges, xminRange, xmaxRange; + xranges = [].concat(opts.chartData.xAxisData.ranges); + xminRange = xranges.shift(); + xmaxRange = xranges.pop(); + value = item[1]; + point.x = opts.area[3] + validWidth * (item[0] - xminRange) / (xmaxRange - xminRange); + } else { + value = item.value; + } + } + if (boundaryGap == 'center') { + point.x += eachSpacing / 2; + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - height - opts.area[2]; + points.push(point); + }else{ + point.x = xAxisPoints[0] + eachSpacing * index * process; + var value = item; + if (boundaryGap == 'center') { + point.x += eachSpacing / 2; + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + point.y = opts.height - height - opts.area[2]; + points.push(point); + } + } + }); + return points; +} + +function getColumnDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, zeroPoints, process){ + var process = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + var validWidth = opts.width - opts.area[1] - opts.area[3]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index]; + var value = item; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array') > -1) { + let xranges, xminRange, xmaxRange; + xranges = [].concat(opts.chartData.xAxisData.ranges); + xminRange = xranges.shift(); + xmaxRange = xranges.pop(); + value = item[1]; + point.x = opts.area[3] + validWidth * (item[0] - xminRange) / (xmaxRange - xminRange); + } else { + value = item.value; + } + } + point.x += eachSpacing / 2; + var height = validHeight * (value * process - minRange) / (maxRange - minRange); + point.y = opts.height - height - opts.area[2]; + points.push(point); + } + }); + return points; +} + +function getMountDataPoints(series, minRange, maxRange, xAxisPoints, eachSpacing, opts, mountOption, zeroPoints) { + var process = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + var validWidth = opts.width - opts.area[1] - opts.area[3]; + var mountWidth = eachSpacing * mountOption.widthRatio; + series.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index]; + point.x += eachSpacing / 2; + var value = item.data; + var height = validHeight * (value * process - minRange) / (maxRange - minRange); + point.y = opts.height - height - opts.area[2]; + point.value = value; + point.width = mountWidth; + points.push(point); + } + }); + return points; +} + +function getBarDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + var validWidth = opts.width - opts.area[1] - opts.area[3]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.y = yAxisPoints[index]; + var value = item; + if (typeof item === 'object' && item !== null) { + value = item.value; + } + var height = validWidth * (value - minRange) / (maxRange - minRange); + height *= process; + point.height = height; + point.value = value; + point.x = height + opts.area[3]; + points.push(point); + } + }); + return points; +} + +function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) { + var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index] + Math.round(eachSpacing / 2); + + if (seriesIndex > 0) { + var value = 0; + for (let i = 0; i <= seriesIndex; i++) { + value += stackSeries[i].data[index]; + } + var value0 = value - item; + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = validHeight * (value0 - minRange) / (maxRange - minRange); + } else { + var value = item; + if (typeof item === 'object' && item !== null) { + value = item.value; + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = 0; + } + var heightc = height0; + height *= process; + heightc *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + point.y0 = opts.height - Math.round(heightc) - opts.area[2]; + points.push(point); + } + }); + return points; +} + +function getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) { + var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1; + var points = []; + var validHeight = opts.width - opts.area[1] - opts.area[3]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.y = yAxisPoints[index]; + if (seriesIndex > 0) { + var value = 0; + for (let i = 0; i <= seriesIndex; i++) { + value += stackSeries[i].data[index]; + } + var value0 = value - item; + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = validHeight * (value0 - minRange) / (maxRange - minRange); + } else { + var value = item; + if (typeof item === 'object' && item !== null) { + value = item.value; + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = 0; + } + var heightc = height0; + height *= process; + heightc *= process; + point.height = height - heightc; + point.x = opts.area[3] + height; + point.x0 = opts.area[3] + heightc; + points.push(point); + } + }); + return points; +} + +function getYAxisTextList(series, opts, config, stack, yData) { + var index = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : -1; + var data; + if (stack == 'stack') { + data = dataCombineStack(series, opts.categories.length); + } else { + data = dataCombine(series); + } + var sorted = []; + // remove null from data + data = data.filter(function(item) { + //return item !== null; + if (typeof item === 'object' && item !== null) { + if (item.constructor.toString().indexOf('Array') > -1) { + return item !== null; + } else { + return item.value !== null; + } + } else { + return item !== null; + } + }); + data.map(function(item) { + if (typeof item === 'object') { + if (item.constructor.toString().indexOf('Array') > -1) { + if (opts.type == 'candle') { + item.map(function(subitem) { + sorted.push(subitem); + }) + } else { + sorted.push(item[1]); + } + } else { + sorted.push(item.value); + } + } else { + sorted.push(item); + } + }) + var minData = yData.min || 0; + var maxData = yData.max || 0; + if (sorted.length > 0) { + minData = Math.min.apply(this, sorted); + maxData = Math.max.apply(this, sorted); + } + if (minData === maxData) { + if(maxData == 0){ + maxData = 10; + }else{ + minData = 0; + } + } + var dataRange = getDataRange(minData, maxData); + var minRange = (yData.min === undefined || yData.min === null) ? dataRange.minRange : yData.min; + var maxRange = (yData.max === undefined || yData.max === null) ? dataRange.maxRange : yData.max; + var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber; + var range = []; + for (var i = 0; i <= opts.yAxis.splitNumber; i++) { + range.push(minRange + eachRange * i); + } + return range.reverse(); +} + +function calYAxisData(series, opts, config, context) { + //堆叠图重算Y轴 + var columnstyle = assign({}, { + type: "" + }, opts.extra.column); + //如果是多Y轴,重新计算 + var YLength = opts.yAxis.data.length; + var newSeries = new Array(YLength); + if (YLength > 0) { + for (let i = 0; i < YLength; i++) { + newSeries[i] = []; + for (let j = 0; j < series.length; j++) { + if (series[j].index == i) { + newSeries[i].push(series[j]); + } + } + } + var rangesArr = new Array(YLength); + var rangesFormatArr = new Array(YLength); + var yAxisWidthArr = new Array(YLength); + + for (let i = 0; i < YLength; i++) { + let yData = opts.yAxis.data[i]; + //如果总开关不显示,强制每个Y轴为不显示 + if (opts.yAxis.disabled == true) { + yData.disabled = true; + } + if(yData.type === 'categories'){ + if(!yData.formatter){ + yData.formatter = (val,index,opts) => {return val + (yData.unit || '')}; + } + yData.categories = yData.categories || opts.categories; + rangesArr[i] = yData.categories; + }else{ + if(!yData.formatter){ + yData.formatter = (val,index,opts) => {return util.toFixed(val, yData.tofix || 0) + (yData.unit || '')}; + } + rangesArr[i] = getYAxisTextList(newSeries[i], opts, config, columnstyle.type, yData, i); + } + let yAxisFontSizes = yData.fontSize * opts.pix || config.fontSize; + yAxisWidthArr[i] = { + position: yData.position ? yData.position : 'left', + width: 0 + }; + rangesFormatArr[i] = rangesArr[i].map(function(items,index) { + items = yData.formatter(items,index,opts); + yAxisWidthArr[i].width = Math.max(yAxisWidthArr[i].width, measureText(items, yAxisFontSizes, context) + 5); + return items; + }); + let calibration = yData.calibration ? 4 * opts.pix : 0; + yAxisWidthArr[i].width += calibration + 3 * opts.pix; + if (yData.disabled === true) { + yAxisWidthArr[i].width = 0; + } + } + } else { + var rangesArr = new Array(1); + var rangesFormatArr = new Array(1); + var yAxisWidthArr = new Array(1); + if(opts.type === 'bar'){ + rangesArr[0] = opts.categories; + if(!opts.yAxis.formatter){ + opts.yAxis.formatter = (val,index,opts) => {return val + (opts.yAxis.unit || '')} + } + }else{ + if(!opts.yAxis.formatter){ + opts.yAxis.formatter = (val,index,opts) => {return val.toFixed(opts.yAxis.tofix ) + (opts.yAxis.unit || '')} + } + rangesArr[0] = getYAxisTextList(series, opts, config, columnstyle.type, {}); + } + yAxisWidthArr[0] = { + position: 'left', + width: 0 + }; + var yAxisFontSize = opts.yAxis.fontSize * opts.pix || config.fontSize; + rangesFormatArr[0] = rangesArr[0].map(function(item,index) { + item = opts.yAxis.formatter(item,index,opts); + yAxisWidthArr[0].width = Math.max(yAxisWidthArr[0].width, measureText(item, yAxisFontSize, context) + 5); + return item; + }); + yAxisWidthArr[0].width += 3 * opts.pix; + if (opts.yAxis.disabled === true) { + yAxisWidthArr[0] = { + position: 'left', + width: 0 + }; + opts.yAxis.data[0] = { + disabled: true + }; + } else { + opts.yAxis.data[0] = { + disabled: false, + position: 'left', + max: opts.yAxis.max, + min: opts.yAxis.min, + formatter: opts.yAxis.formatter + }; + if(opts.type === 'bar'){ + opts.yAxis.data[0].categories = opts.categories; + opts.yAxis.data[0].type = 'categories'; + } + } + } + return { + rangesFormat: rangesFormatArr, + ranges: rangesArr, + yAxisWidth: yAxisWidthArr + }; +} + +function calTooltipYAxisData(point, series, opts, config, eachSpacing) { + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let minAxis = opts.area[0]; + let items = []; + for (let i = 0; i < ranges.length; i++) { + let maxVal = Math.max.apply(this, ranges[i]); + let minVal = Math.min.apply(this, ranges[i]); + let item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid; + item = opts.yAxis.data && opts.yAxis.data[i].formatter ? opts.yAxis.data[i].formatter(item, i, opts) : item.toFixed(0); + items.push(String(item)) + } + return items; +} + +function calMarkLineData(points, opts) { + let minRange, maxRange; + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + for (let i = 0; i < points.length; i++) { + points[i].yAxisIndex = points[i].yAxisIndex ? points[i].yAxisIndex : 0; + let range = [].concat(opts.chartData.yAxisData.ranges[points[i].yAxisIndex]); + minRange = range.pop(); + maxRange = range.shift(); + let height = spacingValid * (points[i].value - minRange) / (maxRange - minRange); + points[i].y = opts.height - Math.round(height) - opts.area[2]; + } + return points; +} + +function contextRotate(context, opts) { + if (opts.rotateLock !== true) { + context.translate(opts.height, 0); + context.rotate(90 * Math.PI / 180); + } else if (opts._rotate_ !== true) { + context.translate(opts.height, 0); + context.rotate(90 * Math.PI / 180); + opts._rotate_ = true; + } +} + +function drawPointShape(points, color, shape, context, opts) { + context.beginPath(); + if (opts.dataPointShapeType == 'hollow') { + context.setStrokeStyle(color); + context.setFillStyle(opts.background); + context.setLineWidth(2 * opts.pix); + } else { + context.setStrokeStyle("#ffffff"); + context.setFillStyle(color); + context.setLineWidth(1 * opts.pix); + } + if (shape === 'diamond') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y); + context.lineTo(item.x, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'circle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x + 2.5 * opts.pix, item.y); + context.arc(item.x, item.y, 3 * opts.pix, 0, 2 * Math.PI, false); + } + }); + } else if (shape === 'square') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x - 3.5, item.y - 3.5); + context.rect(item.x - 3.5, item.y - 3.5, 7, 7); + } + }); + } else if (shape === 'triangle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y + 4.5); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'none') { + return; + } + context.closePath(); + context.fill(); + context.stroke(); +} + +function drawActivePoint(points, color, shape, context, opts, option, seriesIndex) { + if(!opts.tooltip){ + return + } + if(opts.tooltip.group.length>0 && opts.tooltip.group.includes(seriesIndex) == false){ + return + } + var pointIndex = typeof opts.tooltip.index === 'number' ? opts.tooltip.index : opts.tooltip.index[opts.tooltip.group.indexOf(seriesIndex)]; + context.beginPath(); + if (option.activeType == 'hollow') { + context.setStrokeStyle(color); + context.setFillStyle(opts.background); + context.setLineWidth(2 * opts.pix); + } else { + context.setStrokeStyle("#ffffff"); + context.setFillStyle(color); + context.setLineWidth(1 * opts.pix); + } + if (shape === 'diamond') { + points.forEach(function(item, index) { + if (item !== null && pointIndex == index ) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y); + context.lineTo(item.x, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'circle') { + points.forEach(function(item, index) { + if (item !== null && pointIndex == index) { + context.moveTo(item.x + 2.5 * opts.pix, item.y); + context.arc(item.x, item.y, 3 * opts.pix, 0, 2 * Math.PI, false); + } + }); + } else if (shape === 'square') { + points.forEach(function(item, index) { + if (item !== null && pointIndex == index) { + context.moveTo(item.x - 3.5, item.y - 3.5); + context.rect(item.x - 3.5, item.y - 3.5, 7, 7); + } + }); + } else if (shape === 'triangle') { + points.forEach(function(item, index) { + if (item !== null && pointIndex == index) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y + 4.5); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'none') { + return; + } + context.closePath(); + context.fill(); + context.stroke(); +} + +function drawRingTitle(opts, config, context, center) { + var titlefontSize = opts.title.fontSize || config.titleFontSize; + var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize; + var title = opts.title.name || ''; + var subtitle = opts.subtitle.name || ''; + var titleFontColor = opts.title.color || opts.fontColor; + var subtitleFontColor = opts.subtitle.color || opts.fontColor; + var titleHeight = title ? titlefontSize : 0; + var subtitleHeight = subtitle ? subtitlefontSize : 0; + var margin = 5; + if (subtitle) { + var textWidth = measureText(subtitle, subtitlefontSize * opts.pix, context); + var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX|| 0) * opts.pix ; + var startY = center.y + subtitlefontSize * opts.pix / 2 + (opts.subtitle.offsetY || 0) * opts.pix; + if (title) { + startY += (titleHeight * opts.pix + margin) / 2; + } + context.beginPath(); + context.setFontSize(subtitlefontSize * opts.pix); + context.setFillStyle(subtitleFontColor); + context.fillText(subtitle, startX, startY); + context.closePath(); + context.stroke(); + } + if (title) { + var _textWidth = measureText(title, titlefontSize * opts.pix, context); + var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0); + var _startY = center.y + titlefontSize * opts.pix / 2 + (opts.title.offsetY || 0) * opts.pix; + if (subtitle) { + _startY -= (subtitleHeight * opts.pix + margin) / 2; + } + context.beginPath(); + context.setFontSize(titlefontSize * opts.pix); + context.setFillStyle(titleFontColor); + context.fillText(title, _startX, _startY); + context.closePath(); + context.stroke(); + } +} + +function drawPointText(points, series, config, context, opts) { + // 绘制数据文案 + var data = series.data; + var textOffset = series.textOffset ? series.textOffset : 0; + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + var fontSize = series.textSize ? series.textSize * opts.pix : config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(series.textColor || opts.fontColor); + var value = data[index] + if (typeof data[index] === 'object' && data[index] !== null) { + if (data[index].constructor.toString().indexOf('Array')>-1) { + value = data[index][1]; + } else { + value = data[index].value + } + } + var formatVal = series.formatter ? series.formatter(value,index,series,opts) : value; + context.setTextAlign('center'); + context.fillText(String(formatVal), item.x, item.y - 4 + textOffset * opts.pix); + context.closePath(); + context.stroke(); + context.setTextAlign('left'); + } + }); +} + +function drawColumePointText(points, series, config, context, opts) { + // 绘制数据文案 + var data = series.data; + var textOffset = series.textOffset ? series.textOffset : 0; + var Position = opts.extra.column.labelPosition; + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + var fontSize = series.textSize ? series.textSize * opts.pix : config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(series.textColor || opts.fontColor); + var value = data[index] + if (typeof data[index] === 'object' && data[index] !== null) { + if (data[index].constructor.toString().indexOf('Array')>-1) { + value = data[index][1]; + } else { + value = data[index].value + } + } + var formatVal = series.formatter ? series.formatter(value,index,series,opts) : value; + context.setTextAlign('center'); + var startY = item.y - 4 * opts.pix + textOffset * opts.pix; + if(item.y > series.zeroPoints){ + startY = item.y + textOffset * opts.pix + fontSize; + } + if(Position == 'insideTop'){ + startY = item.y + fontSize + textOffset * opts.pix; + if(item.y > series.zeroPoints){ + startY = item.y - textOffset * opts.pix - 4 * opts.pix; + } + } + if(Position == 'center'){ + startY = item.y + textOffset * opts.pix + (opts.height - opts.area[2] - item.y + fontSize)/2; + if(series.zeroPoints < opts.height - opts.area[2]){ + startY = item.y + textOffset * opts.pix + (series.zeroPoints - item.y + fontSize)/2; + } + if(item.y > series.zeroPoints){ + startY = item.y - textOffset * opts.pix - (item.y - series.zeroPoints - fontSize)/2; + } + if(opts.extra.column.type == 'stack'){ + startY = item.y + textOffset * opts.pix + (item.y0 - item.y + fontSize)/2; + } + } + if(Position == 'bottom'){ + startY = opts.height - opts.area[2] + textOffset * opts.pix - 4 * opts.pix; + if(series.zeroPoints < opts.height - opts.area[2]){ + startY = series.zeroPoints + textOffset * opts.pix - 4 * opts.pix; + } + if(item.y > series.zeroPoints){ + startY = series.zeroPoints - textOffset * opts.pix + fontSize + 2 * opts.pix; + } + if(opts.extra.column.type == 'stack'){ + startY = item.y0 + textOffset * opts.pix - 4 * opts.pix; + } + } + context.fillText(String(formatVal), item.x, startY); + context.closePath(); + context.stroke(); + context.setTextAlign('left'); + } + }); +} + +function drawMountPointText(points, series, config, context, opts, zeroPoints) { + // 绘制数据文案 + var data = series.data; + var textOffset = series.textOffset ? series.textOffset : 0; + var Position = opts.extra.mount.labelPosition; + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + var fontSize = series[index].textSize ? series[index].textSize * opts.pix : config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(series[index].textColor || opts.fontColor); + var value = item.value + var formatVal = series[index].formatter ? series[index].formatter(value,index,series,opts) : value; + context.setTextAlign('center'); + var startY = item.y - 4 * opts.pix + textOffset * opts.pix; + if(item.y > zeroPoints){ + startY = item.y + textOffset * opts.pix + fontSize; + } + context.fillText(String(formatVal), item.x, startY); + context.closePath(); + context.stroke(); + context.setTextAlign('left'); + } + }); +} + +function drawBarPointText(points, series, config, context, opts) { + // 绘制数据文案 + var data = series.data; + var textOffset = series.textOffset ? series.textOffset : 0; + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + var fontSize = series.textSize ? series.textSize * opts.pix : config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(series.textColor || opts.fontColor); + var value = data[index] + if (typeof data[index] === 'object' && data[index] !== null) { + value = data[index].value ; + } + var formatVal = series.formatter ? series.formatter(value,index,series,opts) : value; + context.setTextAlign('left'); + context.fillText(String(formatVal), item.x + 4 * opts.pix , item.y + fontSize / 2 - 3 ); + context.closePath(); + context.stroke(); + } + }); +} + +function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) { + radius -= gaugeOption.width / 2 + gaugeOption.labelOffset * opts.pix; + radius = radius < 10 ? 10 : radius; + let totalAngle; + if (gaugeOption.endAngle < gaugeOption.startAngle) { + totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle; + } else { + totalAngle = gaugeOption.startAngle - gaugeOption.endAngle; + } + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let totalNumber = gaugeOption.endNumber - gaugeOption.startNumber; + let splitNumber = totalNumber / gaugeOption.splitLine.splitNumber; + let nowAngle = gaugeOption.startAngle; + let nowNumber = gaugeOption.startNumber; + for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) { + var pos = { + x: radius * Math.cos(nowAngle * Math.PI), + y: radius * Math.sin(nowAngle * Math.PI) + }; + var labelText = gaugeOption.formatter ? gaugeOption.formatter(nowNumber,i,opts) : nowNumber; + pos.x += centerPosition.x - measureText(labelText, config.fontSize, context) / 2; + pos.y += centerPosition.y; + var startX = pos.x; + var startY = pos.y; + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(gaugeOption.labelColor || opts.fontColor); + context.fillText(labelText, startX, startY + config.fontSize / 2); + context.closePath(); + context.stroke(); + nowAngle += splitAngle; + if (nowAngle >= 2) { + nowAngle = nowAngle % 2; + } + nowNumber += splitNumber; + } +} + +function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) { + var radarOption = opts.extra.radar || {}; + angleList.forEach(function(angle, index) { + if(radarOption.labelPointShow === true && opts.categories[index] !== ''){ + var posPoint = { + x: radius * Math.cos(angle), + y: radius * Math.sin(angle) + }; + var posPointAxis = convertCoordinateOrigin(posPoint.x, posPoint.y, centerPosition); + context.setFillStyle(radarOption.labelPointColor); + context.beginPath(); + context.arc(posPointAxis.x, posPointAxis.y, radarOption.labelPointRadius * opts.pix, 0, 2 * Math.PI, false); + context.closePath(); + context.fill(); + } + if(radarOption.labelShow === true){ + var pos = { + x: (radius + config.radarLabelTextMargin * opts.pix) * Math.cos(angle), + y: (radius + config.radarLabelTextMargin * opts.pix) * Math.sin(angle) + }; + var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition); + var startX = posRelativeCanvas.x; + var startY = posRelativeCanvas.y; + if (util.approximatelyEqual(pos.x, 0)) { + startX -= measureText(opts.categories[index] || '', config.fontSize, context) / 2; + } else if (pos.x < 0) { + startX -= measureText(opts.categories[index] || '', config.fontSize, context); + } + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(radarOption.labelColor || opts.fontColor); + context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2); + context.closePath(); + context.stroke(); + } + }); + +} + +function drawPieText(series, opts, config, context, radius, center) { + var lineRadius = config.pieChartLinePadding; + var textObjectCollection = []; + var lastTextObject = null; + var seriesConvert = series.map(function(item,index) { + var text = item.formatter ? item.formatter(item,index,series,opts) : util.toFixed(item._proportion_.toFixed(4) * 100) + '%'; + text = item.labelText ? item.labelText : text; + var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2); + if (item._rose_proportion_) { + arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._rose_proportion_ / 2); + } + var color = item.color; + var radius = item._radius_; + return { + arc: arc, + text: text, + color: color, + radius: radius, + textColor: item.textColor, + textSize: item.textSize, + labelShow: item.labelShow + }; + }); + for (let i = 0; i < seriesConvert.length; i++) { + let item = seriesConvert[i]; + // line end + let orginX1 = Math.cos(item.arc) * (item.radius + lineRadius); + let orginY1 = Math.sin(item.arc) * (item.radius + lineRadius); + // line start + let orginX2 = Math.cos(item.arc) * item.radius; + let orginY2 = Math.sin(item.arc) * item.radius; + // text start + let orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding; + let orginY3 = orginY1; + let textWidth = measureText(item.text, item.textSize * opts.pix || config.fontSize, context); + let startY = orginY3; + if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, { + x: orginX3 + })) { + if (orginX3 > 0) { + startY = Math.min(orginY3, lastTextObject.start.y); + } else if (orginX1 < 0) { + startY = Math.max(orginY3, lastTextObject.start.y); + } else { + if (orginY3 > 0) { + startY = Math.max(orginY3, lastTextObject.start.y); + } else { + startY = Math.min(orginY3, lastTextObject.start.y); + } + } + } + if (orginX3 < 0) { + orginX3 -= textWidth; + } + let textObject = { + lineStart: { + x: orginX2, + y: orginY2 + }, + lineEnd: { + x: orginX1, + y: orginY1 + }, + start: { + x: orginX3, + y: startY + }, + width: textWidth, + height: config.fontSize, + text: item.text, + color: item.color, + textColor: item.textColor, + textSize: item.textSize + }; + lastTextObject = avoidCollision(textObject, lastTextObject); + textObjectCollection.push(lastTextObject); + } + for (let i = 0; i < textObjectCollection.length; i++) { + if(seriesConvert[i].labelShow === false){ + continue; + } + let item = textObjectCollection[i]; + let lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center); + let lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center); + let textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center); + context.setLineWidth(1 * opts.pix); + context.setFontSize(item.textSize * opts.pix || config.fontSize); + context.beginPath(); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.moveTo(lineStartPoistion.x, lineStartPoistion.y); + let curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x; + let textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5; + context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y); + context.moveTo(lineStartPoistion.x, lineStartPoistion.y); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(textPosition.x + item.width, textPosition.y); + context.arc(curveStartX, textPosition.y, 2 * opts.pix, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(item.textSize * opts.pix || config.fontSize); + context.setFillStyle(item.textColor || opts.fontColor); + context.fillText(item.text, textStartX, textPosition.y + 3); + context.closePath(); + context.stroke(); + context.closePath(); + } +} + +function drawToolTipSplitLine(offsetX, opts, config, context) { + var toolTipOption = opts.extra.tooltip || {}; + toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType; + toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength; + var startY = opts.area[0]; + var endY = opts.height - opts.area[2]; + if (toolTipOption.gridType == 'dash') { + context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]); + } + context.setStrokeStyle(toolTipOption.gridColor || '#cccccc'); + context.setLineWidth(1 * opts.pix); + context.beginPath(); + context.moveTo(offsetX, startY); + context.lineTo(offsetX, endY); + context.stroke(); + context.setLineDash([]); + if (toolTipOption.xAxisLabel) { + let labelText = opts.categories[opts.tooltip.index]; + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText, config.fontSize, context); + let textX = offsetX - 0.5 * textWidth; + let textY = endY + 2 * opts.pix; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity)); + context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground); + context.setLineWidth(1 * opts.pix); + context.rect(textX - toolTipOption.boxPadding * opts.pix, textY, textWidth + 2 * toolTipOption.boxPadding * opts.pix, config.fontSize + 2 * toolTipOption.boxPadding * opts.pix); + context.closePath(); + context.stroke(); + context.fill(); + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.labelFontColor || opts.fontColor); + context.fillText(String(labelText), textX, textY + toolTipOption.boxPadding * opts.pix + config.fontSize); + context.closePath(); + context.stroke(); + } +} + +function drawMarkLine(opts, config, context) { + let markLineOption = assign({}, { + type: 'solid', + dashLength: 4, + data: [] + }, opts.extra.markLine); + let startX = opts.area[3]; + let endX = opts.width - opts.area[1]; + let points = calMarkLineData(markLineOption.data, opts); + for (let i = 0; i < points.length; i++) { + let item = assign({}, { + lineColor: '#DE4A42', + showLabel: false, + labelFontSize: 13, + labelPadding: 6, + labelFontColor: '#666666', + labelBgColor: '#DFE8FF', + labelBgOpacity: 0.8, + labelAlign: 'left', + labelOffsetX: 0, + labelOffsetY: 0, + }, points[i]); + if (markLineOption.type == 'dash') { + context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]); + } + context.setStrokeStyle(item.lineColor); + context.setLineWidth(1 * opts.pix); + context.beginPath(); + context.moveTo(startX, item.y); + context.lineTo(endX, item.y); + context.stroke(); + context.setLineDash([]); + if (item.showLabel) { + let fontSize = item.labelFontSize * opts.pix; + let labelText = item.labelText ? item.labelText : item.value; + context.setFontSize(fontSize); + let textWidth = measureText(labelText, fontSize, context); + let bgWidth = textWidth + item.labelPadding * opts.pix * 2; + let bgStartX = item.labelAlign == 'left' ? opts.area[3] - bgWidth : opts.width - opts.area[1]; + bgStartX += item.labelOffsetX; + let bgStartY = item.y - 0.5 * fontSize - item.labelPadding * opts.pix; + bgStartY += item.labelOffsetY; + let textX = bgStartX + item.labelPadding * opts.pix; + let textY = item.y; + context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity)); + context.setStrokeStyle(item.labelBgColor); + context.setLineWidth(1 * opts.pix); + context.beginPath(); + context.rect(bgStartX, bgStartY, bgWidth, fontSize + 2 * item.labelPadding * opts.pix); + context.closePath(); + context.stroke(); + context.fill(); + context.setFontSize(fontSize); + context.setTextAlign('left'); + context.setFillStyle(item.labelFontColor); + context.fillText(String(labelText), textX, bgStartY + fontSize + item.labelPadding * opts.pix/2); + context.stroke(); + context.setTextAlign('left'); + } + } +} + +function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) { + var toolTipOption = assign({}, { + gridType: 'solid', + dashLength: 4 + }, opts.extra.tooltip); + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + if (toolTipOption.gridType == 'dash') { + context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]); + } + context.setStrokeStyle(toolTipOption.gridColor || '#cccccc'); + context.setLineWidth(1 * opts.pix); + context.beginPath(); + context.moveTo(startX, opts.tooltip.offset.y); + context.lineTo(endX, opts.tooltip.offset.y); + context.stroke(); + context.setLineDash([]); + if (toolTipOption.yAxisLabel) { + let boxPadding = toolTipOption.boxPadding * opts.pix; + let labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing); + let widthArr = opts.chartData.yAxisData.yAxisWidth; + let tStartLeft = opts.area[3]; + let tStartRight = opts.width - opts.area[1]; + for (let i = 0; i < labelText.length; i++) { + context.setFontSize(toolTipOption.fontSize * opts.pix); + let textWidth = measureText(labelText[i], toolTipOption.fontSize * opts.pix, context); + let bgStartX, bgEndX, bgWidth; + if (widthArr[i].position == 'left') { + bgStartX = tStartLeft - (textWidth + boxPadding * 2) - 2 * opts.pix; + bgEndX = Math.max(bgStartX, bgStartX + textWidth + boxPadding * 2); + } else { + bgStartX = tStartRight + 2 * opts.pix; + bgEndX = Math.max(bgStartX + widthArr[i].width, bgStartX + textWidth + boxPadding * 2); + } + bgWidth = bgEndX - bgStartX; + let textX = bgStartX + (bgWidth - textWidth) / 2; + let textY = opts.tooltip.offset.y; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity)); + context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground); + context.setLineWidth(1 * opts.pix); + context.rect(bgStartX, textY - 0.5 * config.fontSize - boxPadding, bgWidth, config.fontSize + 2 * boxPadding); + context.closePath(); + context.stroke(); + context.fill(); + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.labelFontColor || opts.fontColor); + context.fillText(labelText[i], textX, textY + 0.5 * config.fontSize); + context.closePath(); + context.stroke(); + if (widthArr[i].position == 'left') { + tStartLeft -= (widthArr[i].width + opts.yAxis.padding * opts.pix); + } else { + tStartRight += widthArr[i].width + opts.yAxis.padding * opts.pix; + } + } + } +} + +function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) { + var toolTipOption = assign({}, { + activeBgColor: '#000000', + activeBgOpacity: 0.08, + activeWidth: eachSpacing + }, opts.extra.column); + toolTipOption.activeWidth = toolTipOption.activeWidth > eachSpacing ? eachSpacing : toolTipOption.activeWidth; + var startY = opts.area[0]; + var endY = opts.height - opts.area[2]; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity)); + context.rect(offsetX - toolTipOption.activeWidth / 2, startY, toolTipOption.activeWidth, endY - startY); + context.closePath(); + context.fill(); + context.setFillStyle("#FFFFFF"); +} + +function drawBarToolTipSplitArea(offsetX, opts, config, context, eachSpacing) { + var toolTipOption = assign({}, { + activeBgColor: '#000000', + activeBgOpacity: 0.08 + }, opts.extra.bar); + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity)); + context.rect( startX ,offsetX - eachSpacing / 2 , endX - startX,eachSpacing); + context.closePath(); + context.fill(); + context.setFillStyle("#FFFFFF"); +} + + +function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) { + var toolTipOption = assign({}, { + showBox: true, + showArrow: true, + showCategory: false, + bgColor: '#000000', + bgOpacity: 0.7, + borderColor: '#000000', + borderWidth: 0, + borderRadius: 0, + borderOpacity: 0.7, + boxPadding: 3, + fontColor: '#FFFFFF', + fontSize: 13, + lineHeight: 20, + legendShow: true, + legendShape: 'auto', + splitLine: true, + }, opts.extra.tooltip); + if(toolTipOption.showCategory==true && opts.categories){ + textList.unshift({text:opts.categories[opts.tooltip.index],color:null}) + } + var fontSize = toolTipOption.fontSize * opts.pix; + var lineHeight = toolTipOption.lineHeight * opts.pix; + var boxPadding = toolTipOption.boxPadding * opts.pix; + var legendWidth = fontSize; + var legendMarginRight = 5 * opts.pix; + if(toolTipOption.legendShow == false){ + legendWidth = 0; + legendMarginRight = 0; + } + var arrowWidth = toolTipOption.showArrow ? 8 * opts.pix : 0; + var isOverRightBorder = false; + if (opts.type == 'line' || opts.type == 'mount' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') { + if (toolTipOption.splitLine == true) { + drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context); + } + } + offset = assign({ + x: 0, + y: 0 + }, offset); + offset.y -= 8 * opts.pix; + var textWidth = textList.map(function(item) { + return measureText(item.text, fontSize, context); + }); + var toolTipWidth = legendWidth + legendMarginRight + 4 * boxPadding + Math.max.apply(null, textWidth); + var toolTipHeight = 2 * boxPadding + textList.length * lineHeight; + if (toolTipOption.showBox == false) { + return + } + // if beyond the right border + if (offset.x - Math.abs(opts._scrollDistance_ || 0) + arrowWidth + toolTipWidth > opts.width) { + isOverRightBorder = true; + } + if (toolTipHeight + offset.y > opts.height) { + offset.y = opts.height - toolTipHeight; + } + // draw background rect + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.bgColor, toolTipOption.bgOpacity)); + context.setLineWidth(toolTipOption.borderWidth * opts.pix); + context.setStrokeStyle(hexToRgb(toolTipOption.borderColor, toolTipOption.borderOpacity)); + var radius = toolTipOption.borderRadius; + if (isOverRightBorder) { + // 增加左侧仍然超出的判断 + if(toolTipWidth + arrowWidth > opts.width){ + offset.x = opts.width + Math.abs(opts._scrollDistance_ || 0) + arrowWidth + (toolTipWidth - opts.width) + } + if(toolTipWidth > offset.x){ + offset.x = opts.width + Math.abs(opts._scrollDistance_ || 0) + arrowWidth + (toolTipWidth - opts.width) + } + if (toolTipOption.showArrow) { + context.moveTo(offset.x, offset.y + 10 * opts.pix); + context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pix + 5 * opts.pix); + } + context.arc(offset.x - arrowWidth - radius, offset.y + toolTipHeight - radius, radius, 0, Math.PI / 2, false); + context.arc(offset.x - arrowWidth - Math.round(toolTipWidth) + radius, offset.y + toolTipHeight - radius, radius, + Math.PI / 2, Math.PI, false); + context.arc(offset.x - arrowWidth - Math.round(toolTipWidth) + radius, offset.y + radius, radius, -Math.PI, -Math.PI / 2, false); + context.arc(offset.x - arrowWidth - radius, offset.y + radius, radius, -Math.PI / 2, 0, false); + if (toolTipOption.showArrow) { + context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pix - 5 * opts.pix); + context.lineTo(offset.x, offset.y + 10 * opts.pix); + } + } else { + if (toolTipOption.showArrow) { + context.moveTo(offset.x, offset.y + 10 * opts.pix); + context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pix - 5 * opts.pix); + } + context.arc(offset.x + arrowWidth + radius, offset.y + radius, radius, -Math.PI, -Math.PI / 2, false); + context.arc(offset.x + arrowWidth + Math.round(toolTipWidth) - radius, offset.y + radius, radius, -Math.PI / 2, 0, + false); + context.arc(offset.x + arrowWidth + Math.round(toolTipWidth) - radius, offset.y + toolTipHeight - radius, radius, 0, + Math.PI / 2, false); + context.arc(offset.x + arrowWidth + radius, offset.y + toolTipHeight - radius, radius, Math.PI / 2, Math.PI, false); + if (toolTipOption.showArrow) { + context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pix + 5 * opts.pix); + context.lineTo(offset.x, offset.y + 10 * opts.pix); + } + } + context.closePath(); + context.fill(); + if (toolTipOption.borderWidth > 0) { + context.stroke(); + } + // draw legend + if(toolTipOption.legendShow){ + textList.forEach(function(item, index) { + if (item.color !== null) { + context.beginPath(); + context.setFillStyle(item.color); + var startX = offset.x + arrowWidth + 2 * boxPadding; + var startY = offset.y + (lineHeight - fontSize) / 2 + lineHeight * index + boxPadding + 1; + if (isOverRightBorder) { + startX = offset.x - toolTipWidth - arrowWidth + 2 * boxPadding; + } + switch (item.legendShape) { + case 'line': + context.moveTo(startX, startY + 0.5 * legendWidth - 2 * opts.pix); + context.fillRect(startX, startY + 0.5 * legendWidth - 2 * opts.pix, legendWidth, 4 * opts.pix); + break; + case 'triangle': + context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix); + context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * legendWidth + 5 * opts.pix); + context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * legendWidth + 5 * opts.pix); + context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix); + break; + case 'diamond': + context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix); + context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * legendWidth); + context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth + 5 * opts.pix); + context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * legendWidth); + context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix); + break; + case 'circle': + context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth); + context.arc(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth, 5 * opts.pix, 0, 2 * Math.PI); + break; + case 'rect': + context.moveTo(startX, startY + 0.5 * legendWidth - 5 * opts.pix); + context.fillRect(startX, startY + 0.5 * legendWidth - 5 * opts.pix, 15 * opts.pix, 10 * opts.pix); + break; + case 'square': + context.moveTo(startX + 2 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix); + context.fillRect(startX + 2 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix, 10 * opts.pix, 10 * opts.pix); + break; + default: + context.moveTo(startX, startY + 0.5 * legendWidth - 5 * opts.pix); + context.fillRect(startX, startY + 0.5 * legendWidth - 5 * opts.pix, 15 * opts.pix, 10 * opts.pix); + } + context.closePath(); + context.fill(); + } + }); + } + + // draw text list + textList.forEach(function(item, index) { + var startX = offset.x + arrowWidth + 2 * boxPadding + legendWidth + legendMarginRight; + if (isOverRightBorder) { + startX = offset.x - toolTipWidth - arrowWidth + 2 * boxPadding + legendWidth + legendMarginRight; + } + var startY = offset.y + lineHeight * index + (lineHeight - fontSize)/2 - 1 + boxPadding + fontSize; + context.beginPath(); + context.setFontSize(fontSize); + context.setTextBaseline('normal'); + context.setFillStyle(toolTipOption.fontColor); + context.fillText(item.text, startX, startY); + context.closePath(); + context.stroke(); + }); +} + +function drawColumnDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let columnOption = assign({}, { + type: 'group', + width: eachSpacing / 2, + meterBorder: 4, + meterFillColor: '#FFFFFF', + barBorderCircle: false, + barBorderRadius: [], + seriesGap: 2, + linearType: 'none', + linearOpacity: 1, + customColor: [], + colorStop: 0, + labelPosition: 'outside' + }, opts.extra.column); + let calPoints = []; + context.save(); + let leftNum = -2; + let rightNum = xAxisPoints.length + 2; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2; + rightNum = leftNum + opts.xAxis.itemCount + 4; + } + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing); + } + columnOption.customColor = fillCustomColor(columnOption.linearType, columnOption.customColor, series, config); + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + + // 计算0轴坐标 + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let zeroHeight = spacingValid * (0 - minRange) / (maxRange - minRange); + let zeroPoints = opts.height - Math.round(zeroHeight) - opts.area[2]; + eachSeries.zeroPoints = zeroPoints; + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getColumnDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, zeroPoints, process); + var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(tooltipPoints); + points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts); + for (let i = 0; i < points.length; i++) { + let item = points[i]; + //fix issues/I27B1N yyoinge & Joeshu + if (item !== null && i > leftNum && i < rightNum) { + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.beginPath(); + var fillColor = item.color || eachSeries.color + var strokeColor = item.color || eachSeries.color + if (columnOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints); + //透明渐变 + if (columnOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, columnOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity)); + grd.addColorStop(columnOption.colorStop, hexToRgb(columnOption.customColor[eachSeries.linearIndex],columnOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + // 圆角边框 + if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle === true) { + const left = startX; + const top = item.y > zeroPoints ? zeroPoints : item.y; + const width = item.width; + const height = Math.abs(zeroPoints - item.y); + if (columnOption.barBorderCircle) { + columnOption.barBorderRadius = [width / 2, width / 2, 0, 0]; + } + if(item.y > zeroPoints){ + columnOption.barBorderRadius = [0, 0,width / 2, width / 2]; + } + let [r0, r1, r2, r3] = columnOption.barBorderRadius; + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; + r0 = r0 < 0 ? 0 : r0; + r1 = r1 < 0 ? 0 : r1; + r2 = r2 < 0 ? 0 : r2; + r3 = r3 < 0 ? 0 : r3; + context.arc(left + r0, top + r0, r0, -Math.PI, -Math.PI / 2); + context.arc(left + width - r1, top + r1, r1, -Math.PI / 2, 0); + context.arc(left + width - r2, top + height - r2, r2, 0, Math.PI / 2); + context.arc(left + r3, top + height - r3, r3, Math.PI / 2, Math.PI); + } else { + context.moveTo(startX, item.y); + context.lineTo(startX + item.width, item.y); + context.lineTo(startX + item.width, zeroPoints); + context.lineTo(startX, zeroPoints); + context.lineTo(startX, item.y); + context.setLineWidth(1) + context.setStrokeStyle(strokeColor); + } + context.setFillStyle(fillColor); + context.closePath(); + //context.stroke(); + context.fill(); + } + }; + break; + case 'stack': + // 绘制堆叠数据图 + var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(points); + points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series); + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + context.beginPath(); + var fillColor = item.color || eachSeries.color; + var startX = item.x - item.width / 2 + 1; + var height = opts.height - item.y - opts.area[2]; + var height0 = opts.height - item.y0 - opts.area[2]; + if (seriesIndex > 0) { + height -= height0; + } + context.setFillStyle(fillColor); + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + } + }; + break; + case 'meter': + // 绘制温度计数据图 + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meterBorder); + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + //画背景颜色 + context.beginPath(); + if (seriesIndex == 0 && columnOption.meterBorder > 0) { + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(columnOption.meterBorder * opts.pix); + } + if(seriesIndex == 0){ + context.setFillStyle(columnOption.meterFillColor); + }else{ + context.setFillStyle(item.color || eachSeries.color); + } + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle === true) { + const left = startX; + const top = item.y; + const width = item.width; + const height = zeroPoints - item.y; + if (columnOption.barBorderCircle) { + columnOption.barBorderRadius = [width / 2, width / 2, 0, 0]; + } + let [r0, r1, r2, r3] = columnOption.barBorderRadius; + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; + r0 = r0 < 0 ? 0 : r0; + r1 = r1 < 0 ? 0 : r1; + r2 = r2 < 0 ? 0 : r2; + r3 = r3 < 0 ? 0 : r3; + context.arc(left + r0, top + r0, r0, -Math.PI, -Math.PI / 2); + context.arc(left + width - r1, top + r1, r1, -Math.PI / 2, 0); + context.arc(left + width - r2, top + height - r2, r2, 0, Math.PI / 2); + context.arc(left + r3, top + height - r3, r3, Math.PI / 2, Math.PI); + context.fill(); + }else{ + context.moveTo(startX, item.y); + context.lineTo(startX + item.width, item.y); + context.lineTo(startX + item.width, zeroPoints); + context.lineTo(startX, zeroPoints); + context.lineTo(startX, item.y); + context.fill(); + } + if (seriesIndex == 0 && columnOption.meterBorder > 0) { + context.closePath(); + context.stroke(); + } + } + } + break; + } + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getColumnDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts); + drawColumePointText(points, eachSeries, config, context, opts); + break; + case 'stack': + var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + drawColumePointText(points, eachSeries, config, context, opts); + break; + case 'meter': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawColumePointText(points, eachSeries, config, context, opts); + break; + } + }); + } + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawMountDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let mountOption = assign({}, { + type: 'mount', + widthRatio: 1, + borderWidth: 1, + barBorderCircle: false, + barBorderRadius: [], + linearType: 'none', + linearOpacity: 1, + customColor: [], + colorStop: 0, + }, opts.extra.mount); + mountOption.widthRatio = mountOption.widthRatio <= 0 ? 0 : mountOption.widthRatio; + mountOption.widthRatio = mountOption.widthRatio >= 2 ? 2 : mountOption.widthRatio; + let calPoints = []; + context.save(); + let leftNum = -2; + let rightNum = xAxisPoints.length + 2; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2; + rightNum = leftNum + opts.xAxis.itemCount + 4; + } + mountOption.customColor = fillCustomColor(mountOption.linearType, mountOption.customColor, series, config); + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[0]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + + // 计算0轴坐标 + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let zeroHeight = spacingValid * (0 - minRange) / (maxRange - minRange); + let zeroPoints = opts.height - Math.round(zeroHeight) - opts.area[2]; + + var points = getMountDataPoints(series, minRange, maxRange, xAxisPoints, eachSpacing, opts, mountOption, zeroPoints, process); + switch (mountOption.type) { + case 'bar': + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + var startX = item.x - eachSpacing*mountOption.widthRatio/2; + var height = opts.height - item.y - opts.area[2]; + context.beginPath(); + var fillColor = item.color || series[i].color + var strokeColor = item.color || series[i].color + if (mountOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints); + //透明渐变 + if (mountOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)); + grd.addColorStop(mountOption.colorStop, hexToRgb(mountOption.customColor[series[i].linearIndex],mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + // 圆角边框 + if ((mountOption.barBorderRadius && mountOption.barBorderRadius.length === 4) || mountOption.barBorderCircle === true) { + const left = startX; + const top = item.y > zeroPoints ? zeroPoints : item.y; + const width = item.width; + const height = Math.abs(zeroPoints - item.y); + if (mountOption.barBorderCircle) { + mountOption.barBorderRadius = [width / 2, width / 2, 0, 0]; + } + if(item.y > zeroPoints){ + mountOption.barBorderRadius = [0, 0,width / 2, width / 2]; + } + let [r0, r1, r2, r3] = mountOption.barBorderRadius; + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; + r0 = r0 < 0 ? 0 : r0; + r1 = r1 < 0 ? 0 : r1; + r2 = r2 < 0 ? 0 : r2; + r3 = r3 < 0 ? 0 : r3; + context.arc(left + r0, top + r0, r0, -Math.PI, -Math.PI / 2); + context.arc(left + width - r1, top + r1, r1, -Math.PI / 2, 0); + context.arc(left + width - r2, top + height - r2, r2, 0, Math.PI / 2); + context.arc(left + r3, top + height - r3, r3, Math.PI / 2, Math.PI); + } else { + context.moveTo(startX, item.y); + context.lineTo(startX + item.width, item.y); + context.lineTo(startX + item.width, zeroPoints); + context.lineTo(startX, zeroPoints); + context.lineTo(startX, item.y); + } + context.setStrokeStyle(strokeColor); + context.setFillStyle(fillColor); + if(mountOption.borderWidth > 0){ + context.setLineWidth(mountOption.borderWidth * opts.pix); + context.closePath(); + context.stroke(); + } + context.fill(); + } + }; + break; + case 'triangle': + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + var startX = item.x - eachSpacing*mountOption.widthRatio/2; + var height = opts.height - item.y - opts.area[2]; + context.beginPath(); + var fillColor = item.color || series[i].color + var strokeColor = item.color || series[i].color + if (mountOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints); + //透明渐变 + if (mountOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)); + grd.addColorStop(mountOption.colorStop, hexToRgb(mountOption.customColor[series[i].linearIndex],mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + context.moveTo(startX, zeroPoints); + context.lineTo(item.x, item.y); + context.lineTo(startX + item.width, zeroPoints); + context.setStrokeStyle(strokeColor); + context.setFillStyle(fillColor); + if(mountOption.borderWidth > 0){ + context.setLineWidth(mountOption.borderWidth * opts.pix); + context.stroke(); + } + context.fill(); + } + }; + break; + case 'mount': + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + var startX = item.x - eachSpacing*mountOption.widthRatio/2; + var height = opts.height - item.y - opts.area[2]; + context.beginPath(); + var fillColor = item.color || series[i].color + var strokeColor = item.color || series[i].color + if (mountOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints); + //透明渐变 + if (mountOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)); + grd.addColorStop(mountOption.colorStop, hexToRgb(mountOption.customColor[series[i].linearIndex],mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + context.moveTo(startX, zeroPoints); + context.bezierCurveTo(item.x - item.width/4, zeroPoints, item.x - item.width/4, item.y, item.x, item.y); + context.bezierCurveTo(item.x + item.width/4, item.y, item.x + item.width/4, zeroPoints, startX + item.width, zeroPoints); + context.setStrokeStyle(strokeColor); + context.setFillStyle(fillColor); + if(mountOption.borderWidth > 0){ + context.setLineWidth(mountOption.borderWidth * opts.pix); + context.stroke(); + } + context.fill(); + } + }; + break; + case 'sharp': + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + var startX = item.x - eachSpacing*mountOption.widthRatio/2; + var height = opts.height - item.y - opts.area[2]; + context.beginPath(); + var fillColor = item.color || series[i].color + var strokeColor = item.color || series[i].color + if (mountOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints); + //透明渐变 + if (mountOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)); + grd.addColorStop(mountOption.colorStop, hexToRgb(mountOption.customColor[series[i].linearIndex],mountOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + context.moveTo(startX, zeroPoints); + context.quadraticCurveTo(item.x - 0, zeroPoints - height/4, item.x, item.y); + context.quadraticCurveTo(item.x + 0, zeroPoints - height/4, startX + item.width, zeroPoints) + context.setStrokeStyle(strokeColor); + context.setFillStyle(fillColor); + if(mountOption.borderWidth > 0){ + context.setLineWidth(mountOption.borderWidth * opts.pix); + context.stroke(); + } + context.fill(); + } + }; + break; + } + + if (opts.dataLabel !== false && process === 1) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[0]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var points = getMountDataPoints(series, minRange, maxRange, xAxisPoints, eachSpacing, opts, mountOption, zeroPoints, process); + drawMountPointText(points, series, config, context, opts, zeroPoints); + } + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: points, + eachSpacing: eachSpacing + }; +} + +function drawBarDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let yAxisPoints = []; + let eachSpacing = (opts.height - opts.area[0] - opts.area[2])/opts.categories.length; + for (let i = 0; i < opts.categories.length; i++) { + yAxisPoints.push(opts.area[0] + eachSpacing / 2 + eachSpacing * i); + } + let columnOption = assign({}, { + type: 'group', + width: eachSpacing / 2, + meterBorder: 4, + meterFillColor: '#FFFFFF', + barBorderCircle: false, + barBorderRadius: [], + seriesGap: 2, + linearType: 'none', + linearOpacity: 1, + customColor: [], + colorStop: 0, + }, opts.extra.bar); + let calPoints = []; + context.save(); + let leftNum = -2; + let rightNum = yAxisPoints.length + 2; + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawBarToolTipSplitArea(opts.tooltip.offset.y, opts, config, context, eachSpacing); + } + columnOption.customColor = fillCustomColor(columnOption.linearType, columnOption.customColor, series, config); + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.xAxisData.ranges); + maxRange = ranges.pop(); + minRange = ranges.shift(); + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getBarDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, process); + var tooltipPoints = getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(tooltipPoints); + points = fixBarData(points, eachSpacing, series.length, seriesIndex, config, opts); + for (let i = 0; i < points.length; i++) { + let item = points[i]; + //fix issues/I27B1N yyoinge & Joeshu + if (item !== null && i > leftNum && i < rightNum) { + //var startX = item.x - item.width / 2; + var startX = opts.area[3]; + var startY = item.y - item.width / 2; + var height = item.height; + context.beginPath(); + var fillColor = item.color || eachSeries.color + var strokeColor = item.color || eachSeries.color + if (columnOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, item.x, item.y); + //透明渐变 + if (columnOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, columnOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity)); + grd.addColorStop(columnOption.colorStop, hexToRgb(columnOption.customColor[eachSeries.linearIndex],columnOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + // 圆角边框 + if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle === true) { + const left = startX; + const width = item.width; + const top = item.y - item.width / 2; + const height = item.height; + if (columnOption.barBorderCircle) { + columnOption.barBorderRadius = [width / 2, width / 2, 0, 0]; + } + let [r0, r1, r2, r3] = columnOption.barBorderRadius; + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; + r0 = r0 < 0 ? 0 : r0; + r1 = r1 < 0 ? 0 : r1; + r2 = r2 < 0 ? 0 : r2; + r3 = r3 < 0 ? 0 : r3; + + context.arc(left + r3, top + r3, r3, -Math.PI, -Math.PI / 2); + context.arc(item.x - r0, top + r0, r0, -Math.PI / 2, 0); + context.arc(item.x - r1, top + width - r1, r1, 0, Math.PI / 2); + context.arc(left + r2, top + width - r2, r2, Math.PI / 2, Math.PI); + } else { + context.moveTo(startX, startY); + context.lineTo(item.x, startY); + context.lineTo(item.x, startY + item.width); + context.lineTo(startX, startY + item.width); + context.lineTo(startX, startY); + context.setLineWidth(1) + context.setStrokeStyle(strokeColor); + } + context.setFillStyle(fillColor); + context.closePath(); + //context.stroke(); + context.fill(); + } + }; + break; + case 'stack': + // 绘制堆叠数据图 + var points = getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(points); + points = fixBarStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series); + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + context.beginPath(); + var fillColor = item.color || eachSeries.color; + var startX = item.x0; + context.setFillStyle(fillColor); + context.moveTo(startX, item.y - item.width/2); + context.fillRect(startX, item.y - item.width/2, item.height , item.width); + context.closePath(); + context.fill(); + } + }; + break; + } + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.xAxisData.ranges); + maxRange = ranges.pop(); + minRange = ranges.shift(); + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getBarDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, process); + points = fixBarData(points, eachSpacing, series.length, seriesIndex, config, opts); + drawBarPointText(points, eachSeries, config, context, opts); + break; + case 'stack': + var points = getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + drawBarPointText(points, eachSeries, config, context, opts); + break; + } + }); + } + return { + yAxisPoints: yAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawCandleDataPoints(series, seriesMA, opts, config, context) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var candleOption = assign({}, { + color: {}, + average: {} + }, opts.extra.candle); + candleOption.color = assign({}, { + upLine: '#f04864', + upFill: '#f04864', + downLine: '#2fc25b', + downFill: '#2fc25b' + }, candleOption.color); + candleOption.average = assign({}, { + show: false, + name: [], + day: [], + color: config.color + }, candleOption.average); + opts.extra.candle = candleOption; + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let calPoints = []; + context.save(); + let leftNum = -2; + let rightNum = xAxisPoints.length + 2; + let leftSpace = 0; + let rightSpace = opts.width + eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2; + rightNum = leftNum + opts.xAxis.itemCount + 4; + leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3]; + rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing; + } + //画均线 + if (candleOption.average.show || seriesMA) { //Merge pull request !12 from 邱贵翔 + seriesMA.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + var splitPointList = splitPoints(points,eachSeries); + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(1); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint = 0; + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, + item.y); + } + } + context.moveTo(points[0].x, points[0].y); + } + context.closePath(); + context.stroke(); + } + }); + } + //画K线 + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + var splitPointList = splitPoints(points,eachSeries); + for (let i = 0; i < splitPointList[0].length; i++) { + if (i > leftNum && i < rightNum) { + let item = splitPointList[0][i]; + context.beginPath(); + //如果上涨 + if (data[i][1] - data[i][0] > 0) { + context.setStrokeStyle(candleOption.color.upLine); + context.setFillStyle(candleOption.color.upFill); + context.setLineWidth(1 * opts.pix); + context.moveTo(item[3].x, item[3].y); //顶点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点 + context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.lineTo(item[2].x, item[2].y); //底点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点 + context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.moveTo(item[3].x, item[3].y); //顶点 + } else { + context.setStrokeStyle(candleOption.color.downLine); + context.setFillStyle(candleOption.color.downFill); + context.setLineWidth(1 * opts.pix); + context.moveTo(item[3].x, item[3].y); //顶点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点 + context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.lineTo(item[2].x, item[2].y); //底点 + context.lineTo(item[1].x, item[1].y); //收盘中间点 + context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点 + context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点 + context.lineTo(item[0].x, item[0].y); //开盘中间点 + context.moveTo(item[3].x, item[3].y); //顶点 + } + context.closePath(); + context.fill(); + context.stroke(); + } + } + }); + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawAreaDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var areaOption = assign({}, { + type: 'straight', + opacity: 0.2, + addLine: false, + width: 2, + gradient: false, + activeType: 'none' + }, opts.extra.area); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let endY = opts.height - opts.area[2]; + let calPoints = []; + context.save(); + let leftSpace = 0; + let rightSpace = opts.width + eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3]; + rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing; + } + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + let data = eachSeries.data; + let points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + let splitPointList = splitPoints(points,eachSeries); + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + // 绘制区域数 + context.beginPath(); + context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + if (areaOption.gradient) { + let gradient = context.createLinearGradient(0, opts.area[0], 0, opts.height - opts.area[2]); + gradient.addColorStop('0', hexToRgb(eachSeries.color, areaOption.opacity)); + gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1)); + context.setFillStyle(gradient); + } else { + context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + } + context.setLineWidth(areaOption.width * opts.pix); + if (points.length > 1) { + let firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + context.moveTo(firstPoint.x, firstPoint.y); + let startPoint = 0; + if (areaOption.type === 'curve') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + let ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y); + } + }; + } + if (areaOption.type === 'straight') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + if (areaOption.type === 'step') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, points[j - 1].y); + context.lineTo(item.x, item.y); + } + }; + } + context.lineTo(lastPoint.x, endY); + context.lineTo(firstPoint.x, endY); + context.lineTo(firstPoint.x, firstPoint.y); + } else { + let item = points[0]; + context.moveTo(item.x - eachSpacing / 2, item.y); + // context.lineTo(item.x + eachSpacing / 2, item.y); + // context.lineTo(item.x + eachSpacing / 2, endY); + // context.lineTo(item.x - eachSpacing / 2, endY); + // context.moveTo(item.x - eachSpacing / 2, item.y); + } + context.closePath(); + context.fill(); + //画连线 + if (areaOption.addLine) { + if (eachSeries.lineType == 'dash') { + let dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8; + dashLength *= opts.pix; + context.setLineDash([dashLength, dashLength]); + } + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(areaOption.width * opts.pix); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + // context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint = 0; + if (areaOption.type === 'curve') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + let ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y); + } + }; + } + if (areaOption.type === 'straight') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + if (areaOption.type === 'step') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, points[j - 1].y); + context.lineTo(item.x, item.y); + } + }; + } + context.moveTo(points[0].x, points[0].y); + } + context.stroke(); + context.setLineDash([]); + } + } + //画点 + if (opts.dataPointShape !== false) { + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + drawActivePoint(points, eachSeries.color, eachSeries.pointShape, context, opts, areaOption,seriesIndex); + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context, opts); + }); + } + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawScatterDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var scatterOption = assign({}, { + type: 'circle' + }, opts.extra.scatter); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + var calPoints = []; + context.save(); + let leftSpace = 0; + let rightSpace = opts.width + eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3]; + rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing; + } + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setFillStyle(eachSeries.color); + context.setLineWidth(1 * opts.pix); + var shape = eachSeries.pointShape; + if (shape === 'diamond') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y); + context.lineTo(item.x, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'circle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x + 2.5 * opts.pix, item.y); + context.arc(item.x, item.y, 3 * opts.pix, 0, 2 * Math.PI, false); + } + }); + } else if (shape === 'square') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x - 3.5, item.y - 3.5); + context.rect(item.x - 3.5, item.y - 3.5, 7, 7); + } + }); + } else if (shape === 'triangle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y + 4.5); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'triangle') { + return; + } + context.closePath(); + context.fill(); + context.stroke(); + }); + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context, opts); + }); + } + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawBubbleDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var bubbleOption = assign({}, { + opacity: 1, + border:2 + }, opts.extra.bubble); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + var calPoints = []; + context.save(); + let leftSpace = 0; + let rightSpace = opts.width + eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3]; + rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing; + } + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(bubbleOption.border * opts.pix); + context.setFillStyle(hexToRgb(eachSeries.color, bubbleOption.opacity)); + points.forEach(function(item, index) { + context.moveTo(item.x + item.r, item.y); + context.arc(item.x, item.y, item.r * opts.pix, 0, 2 * Math.PI, false); + }); + context.closePath(); + context.fill(); + context.stroke(); + + if (opts.dataLabel !== false && process === 1) { + points.forEach(function(item, index) { + context.beginPath(); + var fontSize = eachSeries.textSize * opts.pix || config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(eachSeries.textColor || "#FFFFFF"); + context.setTextAlign('center'); + context.fillText(String(item.t), item.x, item.y + fontSize/2); + context.closePath(); + context.stroke(); + context.setTextAlign('left'); + }); + } + }); + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawLineDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var lineOption = assign({}, { + type: 'straight', + width: 2, + activeType: 'none', + linearType: 'none', + onShadow: false, + animation: 'vertical', + }, opts.extra.line); + lineOption.width *= opts.pix; + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + var calPoints = []; + context.save(); + let leftSpace = 0; + let rightSpace = opts.width + eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3]; + rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing; + } + series.forEach(function(eachSeries, seriesIndex) { + // 这段很神奇的代码用于解决ios16的setStrokeStyle失效的bug + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.moveTo(-10000, -10000); + context.lineTo(-10001, -10001); + context.stroke(); + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getLineDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, lineOption, process); + calPoints.push(points); + var splitPointList = splitPoints(points,eachSeries); + if (eachSeries.lineType == 'dash') { + let dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8; + dashLength *= opts.pix; + context.setLineDash([dashLength, dashLength]); + } + context.beginPath(); + var strokeColor = eachSeries.color; + if (lineOption.linearType !== 'none' && eachSeries.linearColor && eachSeries.linearColor.length > 0) { + var grd = context.createLinearGradient(opts.chartData.xAxisData.startX, opts.height/2, opts.chartData.xAxisData.endX, opts.height/2); + for (var i = 0; i < eachSeries.linearColor.length; i++) { + grd.addColorStop(eachSeries.linearColor[i][0], hexToRgb(eachSeries.linearColor[i][1], 1)); + } + strokeColor = grd + } + context.setStrokeStyle(strokeColor); + if (lineOption.onShadow == true && eachSeries.setShadow && eachSeries.setShadow.length > 0) { + context.setShadow(eachSeries.setShadow[0], eachSeries.setShadow[1], eachSeries.setShadow[2], eachSeries.setShadow[3]); + }else{ + context.setShadow(0, 0, 0, 'rgba(0,0,0,0)'); + } + context.setLineWidth(lineOption.width); + splitPointList.forEach(function(points, index) { + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + // context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint = 0; + if (lineOption.type === 'curve') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y); + } + }; + } + if (lineOption.type === 'straight') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + if (lineOption.type === 'step') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, points[j - 1].y); + context.lineTo(item.x, item.y); + } + }; + } + context.moveTo(points[0].x, points[0].y); + } + }); + context.stroke(); + context.setLineDash([]); + if (opts.dataPointShape !== false) { + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + drawActivePoint(points, eachSeries.color, eachSeries.pointShape, context, opts, lineOption); + }); + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context, opts); + }); + } + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing + }; +} + +function drawMixDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let columnOption = assign({}, { + width: eachSpacing / 2, + barBorderCircle: false, + barBorderRadius: [], + seriesGap: 2, + linearType: 'none', + linearOpacity: 1, + customColor: [], + colorStop: 0, + }, opts.extra.mix.column); + let areaOption = assign({}, { + opacity: 0.2, + gradient: false + }, opts.extra.mix.area); + let lineOption = assign({}, { + width: 2 + }, opts.extra.mix.line); + let endY = opts.height - opts.area[2]; + let calPoints = []; + var columnIndex = 0; + var columnLength = 0; + series.forEach(function(eachSeries, seriesIndex) { + if (eachSeries.type == 'column') { + columnLength += 1; + } + }); + context.save(); + let leftNum = -2; + let rightNum = xAxisPoints.length + 2; + let leftSpace = 0; + let rightSpace = opts.width + eachSpacing; + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2; + rightNum = leftNum + opts.xAxis.itemCount + 4; + leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3]; + rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing; + } + columnOption.customColor = fillCustomColor(columnOption.linearType, columnOption.customColor, series, config); + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + // 绘制柱状数据图 + if (eachSeries.type == 'column') { + points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts); + for (let i = 0; i < points.length; i++) { + let item = points[i]; + if (item !== null && i > leftNum && i < rightNum) { + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.beginPath(); + var fillColor = item.color || eachSeries.color + var strokeColor = item.color || eachSeries.color + if (columnOption.linearType !== 'none') { + var grd = context.createLinearGradient(startX, item.y, startX, opts.height - opts.area[2]); + //透明渐变 + if (columnOption.linearType == 'opacity') { + grd.addColorStop(0, hexToRgb(fillColor, columnOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } else { + grd.addColorStop(0, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity)); + grd.addColorStop(columnOption.colorStop, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity)); + grd.addColorStop(1, hexToRgb(fillColor, 1)); + } + fillColor = grd + } + // 圆角边框 + if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle) { + const left = startX; + const top = item.y; + const width = item.width; + const height = opts.height - opts.area[2] - item.y; + if (columnOption.barBorderCircle) { + columnOption.barBorderRadius = [width / 2, width / 2, 0, 0]; + } + let [r0, r1, r2, r3] = columnOption.barBorderRadius; + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; + r0 = r0 < 0 ? 0 : r0; + r1 = r1 < 0 ? 0 : r1; + r2 = r2 < 0 ? 0 : r2; + r3 = r3 < 0 ? 0 : r3; + context.arc(left + r0, top + r0, r0, -Math.PI, -Math.PI / 2); + context.arc(left + width - r1, top + r1, r1, -Math.PI / 2, 0); + context.arc(left + width - r2, top + height - r2, r2, 0, Math.PI / 2); + context.arc(left + r3, top + height - r3, r3, Math.PI / 2, Math.PI); + } else { + context.moveTo(startX, item.y); + context.lineTo(startX + item.width, item.y); + context.lineTo(startX + item.width, opts.height - opts.area[2]); + context.lineTo(startX, opts.height - opts.area[2]); + context.lineTo(startX, item.y); + context.setLineWidth(1) + context.setStrokeStyle(strokeColor); + } + context.setFillStyle(fillColor); + context.closePath(); + context.fill(); + } + } + columnIndex += 1; + } + //绘制区域图数据 + if (eachSeries.type == 'area') { + let splitPointList = splitPoints(points,eachSeries); + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + // 绘制区域数据 + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + if (areaOption.gradient) { + let gradient = context.createLinearGradient(0, opts.area[0], 0, opts.height - opts.area[2]); + gradient.addColorStop('0', hexToRgb(eachSeries.color, areaOption.opacity)); + gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1)); + context.setFillStyle(gradient); + } else { + context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + } + context.setLineWidth(2 * opts.pix); + if (points.length > 1) { + var firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + context.moveTo(firstPoint.x, firstPoint.y); + let startPoint = 0; + if (eachSeries.style === 'curve') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y); + } + }; + } else { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + }; + } + context.lineTo(lastPoint.x, endY); + context.lineTo(firstPoint.x, endY); + context.lineTo(firstPoint.x, firstPoint.y); + } else { + let item = points[0]; + context.moveTo(item.x - eachSpacing / 2, item.y); + // context.lineTo(item.x + eachSpacing / 2, item.y); + // context.lineTo(item.x + eachSpacing / 2, endY); + // context.lineTo(item.x - eachSpacing / 2, endY); + // context.moveTo(item.x - eachSpacing / 2, item.y); + } + context.closePath(); + context.fill(); + } + } + // 绘制折线数据图 + if (eachSeries.type == 'line') { + var splitPointList = splitPoints(points,eachSeries); + splitPointList.forEach(function(points, index) { + if (eachSeries.lineType == 'dash') { + let dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8; + dashLength *= opts.pix; + context.setLineDash([dashLength, dashLength]); + } + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(lineOption.width * opts.pix); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + // context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + let startPoint = 0; + if (eachSeries.style == 'curve') { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + var ctrlPoint = createCurveControlPoints(points, j - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, + item.x, item.y); + } + } + } else { + for (let j = 0; j < points.length; j++) { + let item = points[j]; + if (startPoint == 0 && item.x > leftSpace) { + context.moveTo(item.x, item.y); + startPoint = 1; + } + if (j > 0 && item.x > leftSpace && item.x < rightSpace) { + context.lineTo(item.x, item.y); + } + } + } + context.moveTo(points[0].x, points[0].y); + } + context.stroke(); + context.setLineDash([]); + }); + } + // 绘制点数据图 + if (eachSeries.type == 'point') { + eachSeries.addPoint = true; + } + if (eachSeries.addPoint == true && eachSeries.type !== 'column') { + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + }); + if (opts.dataLabel !== false && process === 1) { + var columnIndex = 0; + series.forEach(function(eachSeries, seriesIndex) { + let ranges, minRange, maxRange; + ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]); + minRange = ranges.pop(); + maxRange = ranges.shift(); + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + if (eachSeries.type !== 'column') { + drawPointText(points, eachSeries, config, context, opts); + } else { + points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts); + drawPointText(points, eachSeries, config, context, opts); + columnIndex += 1; + } + }); + } + context.restore(); + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + } +} + + +function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) { + var toolTipOption = opts.extra.tooltip || {}; + if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'mount' || opts.type == 'candle' || opts.type == 'mix')) { + drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) + } + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints); + } + context.restore(); + +} + +function drawXAxis(categories, opts, config, context) { + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + startX = xAxisData.startX, + endX = xAxisData.endX, + eachSpacing = xAxisData.eachSpacing; + var boundaryGap = 'center'; + if (opts.type == 'bar' || opts.type == 'line' || opts.type == 'area'|| opts.type == 'scatter' || opts.type == 'bubble') { + boundaryGap = opts.xAxis.boundaryGap; + } + var startY = opts.height - opts.area[2]; + var endY = opts.area[0]; + + //绘制滚动条 + if (opts.enableScroll && opts.xAxis.scrollShow) { + var scrollY = opts.height - opts.area[2] + config.xAxisHeight; + var scrollScreenWidth = endX - startX; + var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1); + if(opts.type == 'mount' && opts.extra && opts.extra.mount && opts.extra.mount.widthRatio && opts.extra.mount.widthRatio > 1){ + if(opts.extra.mount.widthRatio>2) opts.extra.mount.widthRatio = 2 + scrollTotalWidth += (opts.extra.mount.widthRatio - 1)*eachSpacing; + } + var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth; + var scrollLeft = 0; + if (opts._scrollDistance_) { + scrollLeft = -opts._scrollDistance_ * (scrollScreenWidth) / scrollTotalWidth; + } + context.beginPath(); + context.setLineCap('round'); + context.setLineWidth(6 * opts.pix); + context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF"); + context.moveTo(startX, scrollY); + context.lineTo(endX, scrollY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.setLineCap('round'); + context.setLineWidth(6 * opts.pix); + context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6"); + context.moveTo(startX + scrollLeft, scrollY); + context.lineTo(startX + scrollLeft + scrollWidth, scrollY); + context.stroke(); + context.closePath(); + context.setLineCap('butt'); + } + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) { + context.translate(opts._scrollDistance_, 0); + } + //绘制X轴刻度线 + if (opts.xAxis.calibration === true) { + context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc"); + context.setLineCap('butt'); + context.setLineWidth(1 * opts.pix); + xAxisPoints.forEach(function(item, index) { + if (index > 0) { + context.beginPath(); + context.moveTo(item - eachSpacing / 2, startY); + context.lineTo(item - eachSpacing / 2, startY + 3 * opts.pix); + context.closePath(); + context.stroke(); + } + }); + } + //绘制X轴网格 + if (opts.xAxis.disableGrid !== true) { + context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc"); + context.setLineCap('butt'); + context.setLineWidth(1 * opts.pix); + if (opts.xAxis.gridType == 'dash') { + context.setLineDash([opts.xAxis.dashLength * opts.pix, opts.xAxis.dashLength * opts.pix]); + } + opts.xAxis.gridEval = opts.xAxis.gridEval || 1; + xAxisPoints.forEach(function(item, index) { + if (index % opts.xAxis.gridEval == 0) { + context.beginPath(); + context.moveTo(item, startY); + context.lineTo(item, endY); + context.stroke(); + } + }); + context.setLineDash([]); + } + //绘制X轴文案 + if (opts.xAxis.disabled !== true) { + // 对X轴列表做抽稀处理 + //默认全部显示X轴标签 + let maxXAxisListLength = categories.length; + //如果设置了X轴单屏数量 + if (opts.xAxis.labelCount) { + //如果设置X轴密度 + if (opts.xAxis.itemCount) { + maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount); + } else { + maxXAxisListLength = opts.xAxis.labelCount; + } + maxXAxisListLength -= 1; + } + + let ratio = Math.ceil(categories.length / maxXAxisListLength); + + let newCategories = []; + let cgLength = categories.length; + for (let i = 0; i < cgLength; i++) { + if (i % ratio !== 0) { + newCategories.push(""); + } else { + newCategories.push(categories[i]); + } + } + newCategories[cgLength - 1] = categories[cgLength - 1]; + var xAxisFontSize = opts.xAxis.fontSize * opts.pix || config.fontSize; + if (config._xAxisTextAngle_ === 0) { + newCategories.forEach(function(item, index) { + var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item,index,opts) : item; + var offset = -measureText(String(xitem), xAxisFontSize, context) / 2; + if (boundaryGap == 'center') { + offset += eachSpacing / 2; + } + var scrollHeight = 0; + if (opts.xAxis.scrollShow) { + scrollHeight = 6 * opts.pix; + } + // 如果在主视图区域内 + var _scrollDistance_ = opts._scrollDistance_ || 0; + var truePoints = boundaryGap == 'center' ? xAxisPoints[index] + eachSpacing / 2 : xAxisPoints[index]; + if((truePoints - Math.abs(_scrollDistance_)) >= (opts.area[3] - 1) && (truePoints - Math.abs(_scrollDistance_)) <= (opts.width - opts.area[1] + 1)){ + context.beginPath(); + context.setFontSize(xAxisFontSize); + context.setFillStyle(opts.xAxis.fontColor || opts.fontColor); + context.fillText(String(xitem), xAxisPoints[index] + offset, startY + opts.xAxis.marginTop * opts.pix + (opts.xAxis.lineHeight - opts.xAxis.fontSize) * opts.pix / 2 + opts.xAxis.fontSize * opts.pix); + context.closePath(); + context.stroke(); + } + }); + } else { + newCategories.forEach(function(item, index) { + var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item) : item; + // 如果在主视图区域内 + var _scrollDistance_ = opts._scrollDistance_ || 0; + var truePoints = boundaryGap == 'center' ? xAxisPoints[index] + eachSpacing / 2 : xAxisPoints[index]; + if((truePoints - Math.abs(_scrollDistance_)) >= (opts.area[3] - 1) && (truePoints - Math.abs(_scrollDistance_)) <= (opts.width - opts.area[1] + 1)){ + context.save(); + context.beginPath(); + context.setFontSize(xAxisFontSize); + context.setFillStyle(opts.xAxis.fontColor || opts.fontColor); + var textWidth = measureText(String(xitem), xAxisFontSize, context); + var offsetX = xAxisPoints[index]; + if (boundaryGap == 'center') { + offsetX = xAxisPoints[index] + eachSpacing / 2; + } + var scrollHeight = 0; + if (opts.xAxis.scrollShow) { + scrollHeight = 6 * opts.pix; + } + var offsetY = startY + opts.xAxis.marginTop * opts.pix + xAxisFontSize - xAxisFontSize * Math.abs(Math.sin(config._xAxisTextAngle_)); + if(opts.xAxis.rotateAngle < 0){ + offsetX -= xAxisFontSize / 2; + textWidth = 0; + }else{ + offsetX += xAxisFontSize / 2; + textWidth = -textWidth; + } + context.translate(offsetX, offsetY); + context.rotate(-1 * config._xAxisTextAngle_); + context.fillText(String(xitem), textWidth , 0 ); + context.closePath(); + context.stroke(); + context.restore(); + } + }); + } + } + context.restore(); + + //画X轴标题 + if (opts.xAxis.title) { + context.beginPath(); + context.setFontSize(opts.xAxis.titleFontSize * opts.pix); + context.setFillStyle(opts.xAxis.titleFontColor); + context.fillText(String(opts.xAxis.title), opts.width - opts.area[1] + opts.xAxis.titleOffsetX * opts.pix,opts.height - opts.area[2] + opts.xAxis.marginTop * opts.pix + (opts.xAxis.lineHeight - opts.xAxis.titleFontSize) * opts.pix / 2 + (opts.xAxis.titleFontSize + opts.xAxis.titleOffsetY) * opts.pix); + context.closePath(); + context.stroke(); + } + + //绘制X轴轴线 + if (opts.xAxis.axisLine) { + context.beginPath(); + context.setStrokeStyle(opts.xAxis.axisLineColor); + context.setLineWidth(1 * opts.pix); + context.moveTo(startX, opts.height - opts.area[2]); + context.lineTo(endX, opts.height - opts.area[2]); + context.stroke(); + } +} + +function drawYAxisGrid(categories, opts, config, context) { + if (opts.yAxis.disableGrid === true) { + return; + } + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let eachSpacing = spacingValid / opts.yAxis.splitNumber; + let startX = opts.area[3]; + let xAxisPoints = opts.chartData.xAxisData.xAxisPoints, + xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing; + let TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1); + if(opts.type == 'mount' && opts.extra && opts.extra.mount && opts.extra.mount.widthRatio && opts.extra.mount.widthRatio > 1 ){ + if(opts.extra.mount.widthRatio>2) opts.extra.mount.widthRatio = 2 + TotalWidth += (opts.extra.mount.widthRatio - 1) * xAxiseachSpacing; + } + let endX = startX + TotalWidth; + let points = []; + let startY = 1 + if (opts.xAxis.axisLine === false) { + startY = 0 + } + for (let i = startY; i < opts.yAxis.splitNumber + 1; i++) { + points.push(opts.height - opts.area[2] - eachSpacing * i); + } + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) { + context.translate(opts._scrollDistance_, 0); + } + if (opts.yAxis.gridType == 'dash') { + context.setLineDash([opts.yAxis.dashLength * opts.pix, opts.yAxis.dashLength * opts.pix]); + } + context.setStrokeStyle(opts.yAxis.gridColor); + context.setLineWidth(1 * opts.pix); + points.forEach(function(item, index) { + context.beginPath(); + context.moveTo(startX, item); + context.lineTo(endX, item); + context.stroke(); + }); + context.setLineDash([]); + context.restore(); +} + +function drawYAxis(series, opts, config, context) { + if (opts.yAxis.disabled === true) { + return; + } + var spacingValid = opts.height - opts.area[0] - opts.area[2]; + var eachSpacing = spacingValid / opts.yAxis.splitNumber; + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + var endY = opts.height - opts.area[2]; + // set YAxis background + context.beginPath(); + context.setFillStyle(opts.background); + if (opts.enableScroll == true && opts.xAxis.scrollPosition && opts.xAxis.scrollPosition !== 'left') { + context.fillRect(0, 0, startX, endY + 2 * opts.pix); + } + if (opts.enableScroll == true && opts.xAxis.scrollPosition && opts.xAxis.scrollPosition !== 'right') { + context.fillRect(endX, 0, opts.width, endY + 2 * opts.pix); + } + context.closePath(); + context.stroke(); + + let tStartLeft = opts.area[3]; + let tStartRight = opts.width - opts.area[1]; + let tStartCenter = opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2; + if (opts.yAxis.data) { + for (let i = 0; i < opts.yAxis.data.length; i++) { + let yData = opts.yAxis.data[i]; + var points = []; + if(yData.type === 'categories'){ + for (let i = 0; i <= yData.categories.length; i++) { + points.push(opts.area[0] + spacingValid / yData.categories.length / 2 + spacingValid / yData.categories.length * i); + } + }else{ + for (let i = 0; i <= opts.yAxis.splitNumber; i++) { + points.push(opts.area[0] + eachSpacing * i); + } + } + if (yData.disabled !== true) { + let rangesFormat = opts.chartData.yAxisData.rangesFormat[i]; + let yAxisFontSize = yData.fontSize ? yData.fontSize * opts.pix : config.fontSize; + let yAxisWidth = opts.chartData.yAxisData.yAxisWidth[i]; + let textAlign = yData.textAlign || "right"; + //画Y轴刻度及文案 + rangesFormat.forEach(function(item, index) { + var pos = points[index]; + context.beginPath(); + context.setFontSize(yAxisFontSize); + context.setLineWidth(1 * opts.pix); + context.setStrokeStyle(yData.axisLineColor || '#cccccc'); + context.setFillStyle(yData.fontColor || opts.fontColor); + let tmpstrat = 0; + let gapwidth = 4 * opts.pix; + if (yAxisWidth.position == 'left') { + //画刻度线 + if (yData.calibration == true) { + context.moveTo(tStartLeft, pos); + context.lineTo(tStartLeft - 3 * opts.pix, pos); + gapwidth += 3 * opts.pix; + } + //画文字 + switch (textAlign) { + case "left": + context.setTextAlign('left'); + tmpstrat = tStartLeft - yAxisWidth.width + break; + case "right": + context.setTextAlign('right'); + tmpstrat = tStartLeft - gapwidth + break; + default: + context.setTextAlign('center'); + tmpstrat = tStartLeft - yAxisWidth.width / 2 + } + context.fillText(String(item), tmpstrat, pos + yAxisFontSize / 2 - 3 * opts.pix); + + } else if (yAxisWidth.position == 'right') { + //画刻度线 + if (yData.calibration == true) { + context.moveTo(tStartRight, pos); + context.lineTo(tStartRight + 3 * opts.pix, pos); + gapwidth += 3 * opts.pix; + } + switch (textAlign) { + case "left": + context.setTextAlign('left'); + tmpstrat = tStartRight + gapwidth + break; + case "right": + context.setTextAlign('right'); + tmpstrat = tStartRight + yAxisWidth.width + break; + default: + context.setTextAlign('center'); + tmpstrat = tStartRight + yAxisWidth.width / 2 + } + context.fillText(String(item), tmpstrat, pos + yAxisFontSize / 2 - 3 * opts.pix); + } else if (yAxisWidth.position == 'center') { + //画刻度线 + if (yData.calibration == true) { + context.moveTo(tStartCenter, pos); + context.lineTo(tStartCenter - 3 * opts.pix, pos); + gapwidth += 3 * opts.pix; + } + //画文字 + switch (textAlign) { + case "left": + context.setTextAlign('left'); + tmpstrat = tStartCenter - yAxisWidth.width + break; + case "right": + context.setTextAlign('right'); + tmpstrat = tStartCenter - gapwidth + break; + default: + context.setTextAlign('center'); + tmpstrat = tStartCenter - yAxisWidth.width / 2 + } + context.fillText(String(item), tmpstrat, pos + yAxisFontSize / 2 - 3 * opts.pix); + } + context.closePath(); + context.stroke(); + context.setTextAlign('left'); + }); + //画Y轴轴线 + if (yData.axisLine !== false) { + context.beginPath(); + context.setStrokeStyle(yData.axisLineColor || '#cccccc'); + context.setLineWidth(1 * opts.pix); + if (yAxisWidth.position == 'left') { + context.moveTo(tStartLeft, opts.height - opts.area[2]); + context.lineTo(tStartLeft, opts.area[0]); + } else if (yAxisWidth.position == 'right') { + context.moveTo(tStartRight, opts.height - opts.area[2]); + context.lineTo(tStartRight, opts.area[0]); + } else if (yAxisWidth.position == 'center') { + context.moveTo(tStartCenter, opts.height - opts.area[2]); + context.lineTo(tStartCenter, opts.area[0]); + } + context.stroke(); + } + //画Y轴标题 + if (opts.yAxis.showTitle) { + let titleFontSize = yData.titleFontSize * opts.pix || config.fontSize; + let title = yData.title; + context.beginPath(); + context.setFontSize(titleFontSize); + context.setFillStyle(yData.titleFontColor || opts.fontColor); + if (yAxisWidth.position == 'left') { + context.fillText(title, tStartLeft - measureText(title, titleFontSize, context) / 2 + (yData.titleOffsetX || 0), opts.area[0] - (10 - (yData.titleOffsetY || 0)) * opts.pix); + } else if (yAxisWidth.position == 'right') { + context.fillText(title, tStartRight - measureText(title, titleFontSize, context) / 2 + (yData.titleOffsetX || 0), opts.area[0] - (10 - (yData.titleOffsetY || 0)) * opts.pix); + } else if (yAxisWidth.position == 'center') { + context.fillText(title, tStartCenter - measureText(title, titleFontSize, context) / 2 + (yData.titleOffsetX || 0), opts.area[0] - (10 - (yData.titleOffsetY || 0)) * opts.pix); + } + context.closePath(); + context.stroke(); + } + if (yAxisWidth.position == 'left') { + tStartLeft -= (yAxisWidth.width + opts.yAxis.padding * opts.pix); + } else { + tStartRight += yAxisWidth.width + opts.yAxis.padding * opts.pix; + } + } + } + } + +} + +function drawLegend(series, opts, config, context, chartData) { + if (opts.legend.show === false) { + return; + } + let legendData = chartData.legendData; + let legendList = legendData.points; + let legendArea = legendData.area; + let padding = opts.legend.padding * opts.pix; + let fontSize = opts.legend.fontSize * opts.pix; + let shapeWidth = 15 * opts.pix; + let shapeRight = 5 * opts.pix; + let itemGap = opts.legend.itemGap * opts.pix; + let lineHeight = Math.max(opts.legend.lineHeight * opts.pix, fontSize); + //画背景及边框 + context.beginPath(); + context.setLineWidth(opts.legend.borderWidth * opts.pix); + context.setStrokeStyle(opts.legend.borderColor); + context.setFillStyle(opts.legend.backgroundColor); + context.moveTo(legendArea.start.x, legendArea.start.y); + context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height); + context.closePath(); + context.fill(); + context.stroke(); + legendList.forEach(function(itemList, listIndex) { + let width = 0; + let height = 0; + width = legendData.widthArr[listIndex]; + height = legendData.heightArr[listIndex]; + let startX = 0; + let startY = 0; + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + switch (opts.legend.float) { + case 'left': + startX = legendArea.start.x + padding; + break; + case 'right': + startX = legendArea.start.x + legendArea.width - width; + break; + default: + startX = legendArea.start.x + (legendArea.width - width) / 2; + } + startY = legendArea.start.y + padding + listIndex * lineHeight; + } else { + if (listIndex == 0) { + width = 0; + } else { + width = legendData.widthArr[listIndex - 1]; + } + startX = legendArea.start.x + padding + width; + startY = legendArea.start.y + padding + (legendArea.height - height) / 2; + } + context.setFontSize(config.fontSize); + for (let i = 0; i < itemList.length; i++) { + let item = itemList[i]; + item.area = [0, 0, 0, 0]; + item.area[0] = startX; + item.area[1] = startY; + item.area[3] = startY + lineHeight; + context.beginPath(); + context.setLineWidth(1 * opts.pix); + context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor); + context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor); + switch (item.legendShape) { + case 'line': + context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pix); + context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pix, 15 * opts.pix, 4 * opts.pix); + break; + case 'triangle': + context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix); + context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * lineHeight + 5 * opts.pix); + context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * lineHeight + 5 * opts.pix); + context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix); + break; + case 'diamond': + context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix); + context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * lineHeight); + context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight + 5 * opts.pix); + context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * lineHeight); + context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix); + break; + case 'circle': + context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight); + context.arc(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight, 5 * opts.pix, 0, 2 * Math.PI); + break; + case 'rect': + context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pix); + context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pix, 15 * opts.pix, 10 * opts.pix); + break; + case 'square': + context.moveTo(startX + 5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix); + context.fillRect(startX + 5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix, 10 * opts.pix, 10 * opts.pix); + break; + case 'none': + break; + default: + context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pix); + context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pix, 15 * opts.pix, 10 * opts.pix); + } + context.closePath(); + context.fill(); + context.stroke(); + startX += shapeWidth + shapeRight; + let fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2; + const legendText = item.legendText ? item.legendText : item.name; + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor); + context.fillText(legendText, startX, startY + fontTrans); + context.closePath(); + context.stroke(); + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + startX += measureText(legendText, fontSize, context) + itemGap; + item.area[2] = startX; + } else { + item.area[2] = startX + measureText(legendText, fontSize, context) + itemGap;; + startX -= shapeWidth + shapeRight; + startY += lineHeight; + } + } + }); +} + +function drawPieDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var pieOption = assign({}, { + activeOpacity: 0.5, + activeRadius: 10, + offsetAngle: 0, + labelWidth: 15, + ringWidth: 30, + customRadius: 0, + border: false, + borderWidth: 2, + borderColor: '#FFFFFF', + centerColor: '#FFFFFF', + linearType: 'none', + customColor: [], + }, opts.type == "pie" ? opts.extra.pie : opts.extra.ring); + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + if (config.pieChartLinePadding == 0) { + config.pieChartLinePadding = pieOption.activeRadius * opts.pix; + } + + var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding); + radius = radius < 10 ? 10 : radius; + if (pieOption.customRadius > 0) { + radius = pieOption.customRadius * opts.pix; + } + series = getPieDataPoints(series, radius, process); + var activeRadius = pieOption.activeRadius * opts.pix; + pieOption.customColor = fillCustomColor(pieOption.linearType, pieOption.customColor, series, config); + series = series.map(function(eachSeries) { + eachSeries._start_ += (pieOption.offsetAngle) * Math.PI / 180; + return eachSeries; + }); + series.forEach(function(eachSeries, seriesIndex) { + if (opts.tooltip) { + if (opts.tooltip.index == seriesIndex) { + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, pieOption.activeOpacity || 0.5)); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI); + context.closePath(); + context.fill(); + } + } + context.beginPath(); + context.setLineWidth(pieOption.borderWidth * opts.pix); + context.lineJoin = "round"; + context.setStrokeStyle(pieOption.borderColor); + var fillcolor = eachSeries.color; + if (pieOption.linearType == 'custom') { + var grd; + if(context.createCircularGradient){ + grd = context.createCircularGradient(centerPosition.x, centerPosition.y, eachSeries._radius_) + }else{ + grd = context.createRadialGradient(centerPosition.x, centerPosition.y, 0,centerPosition.x, centerPosition.y, eachSeries._radius_) + } + grd.addColorStop(0, hexToRgb(pieOption.customColor[eachSeries.linearIndex], 1)) + grd.addColorStop(1, hexToRgb(eachSeries.color, 1)) + fillcolor = grd + } + context.setFillStyle(fillcolor); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI); + context.closePath(); + context.fill(); + if (pieOption.border == true) { + context.stroke(); + } + }); + if (opts.type === 'ring') { + var innerPieWidth = radius * 0.6; + if (typeof pieOption.ringWidth === 'number' && pieOption.ringWidth > 0) { + innerPieWidth = Math.max(0, radius - pieOption.ringWidth * opts.pix); + } + context.beginPath(); + context.setFillStyle(pieOption.centerColor); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + } + if (opts.dataLabel !== false && process === 1) { + drawPieText(series, opts, config, context, radius, centerPosition); + } + if (process === 1 && opts.type === 'ring') { + drawRingTitle(opts, config, context, centerPosition); + } + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawRoseDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var roseOption = assign({}, { + type: 'area', + activeOpacity: 0.5, + activeRadius: 10, + offsetAngle: 0, + labelWidth: 15, + border: false, + borderWidth: 2, + borderColor: '#FFFFFF', + linearType: 'none', + customColor: [], + }, opts.extra.rose); + if (config.pieChartLinePadding == 0) { + config.pieChartLinePadding = roseOption.activeRadius * opts.pix; + } + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding); + radius = radius < 10 ? 10 : radius; + var minRadius = roseOption.minRadius || radius * 0.5; + if(radius < minRadius){ + radius = minRadius + 10; + } + series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process); + var activeRadius = roseOption.activeRadius * opts.pix; + roseOption.customColor = fillCustomColor(roseOption.linearType, roseOption.customColor, series, config); + series = series.map(function(eachSeries) { + eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180; + return eachSeries; + }); + series.forEach(function(eachSeries, seriesIndex) { + if (opts.tooltip) { + if (opts.tooltip.index == seriesIndex) { + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5)); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI); + context.closePath(); + context.fill(); + } + } + context.beginPath(); + context.setLineWidth(roseOption.borderWidth * opts.pix); + context.lineJoin = "round"; + context.setStrokeStyle(roseOption.borderColor); + var fillcolor = eachSeries.color; + if (roseOption.linearType == 'custom') { + var grd; + if(context.createCircularGradient){ + grd = context.createCircularGradient(centerPosition.x, centerPosition.y, eachSeries._radius_) + }else{ + grd = context.createRadialGradient(centerPosition.x, centerPosition.y, 0,centerPosition.x, centerPosition.y, eachSeries._radius_) + } + grd.addColorStop(0, hexToRgb(roseOption.customColor[eachSeries.linearIndex], 1)) + grd.addColorStop(1, hexToRgb(eachSeries.color, 1)) + fillcolor = grd + } + context.setFillStyle(fillcolor); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI); + context.closePath(); + context.fill(); + if (roseOption.border == true) { + context.stroke(); + } + }); + + if (opts.dataLabel !== false && process === 1) { + drawPieText(series, opts, config, context, radius, centerPosition); + } + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawArcbarDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var arcbarOption = assign({}, { + startAngle: 0.75, + endAngle: 0.25, + type: 'default', + direction: 'cw', + lineCap: 'round', + width: 12 , + gap: 2 , + linearType: 'none', + customColor: [], + }, opts.extra.arcbar); + series = getArcbarDataPoints(series, arcbarOption, process); + var centerPosition; + if (arcbarOption.centerX || arcbarOption.centerY) { + centerPosition = { + x: arcbarOption.centerX ? arcbarOption.centerX : opts.width / 2, + y: arcbarOption.centerY ? arcbarOption.centerY : opts.height / 2 + }; + } else { + centerPosition = { + x: opts.width / 2, + y: opts.height / 2 + }; + } + var radius; + if (arcbarOption.radius) { + radius = arcbarOption.radius; + } else { + radius = Math.min(centerPosition.x, centerPosition.y); + radius -= 5 * opts.pix; + radius -= arcbarOption.width / 2; + } + radius = radius < 10 ? 10 : radius; + arcbarOption.customColor = fillCustomColor(arcbarOption.linearType, arcbarOption.customColor, series, config); + + for (let i = 0; i < series.length; i++) { + let eachSeries = series[i]; + //背景颜色 + context.setLineWidth(arcbarOption.width * opts.pix); + context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9'); + context.setLineCap(arcbarOption.lineCap); + context.beginPath(); + if (arcbarOption.type == 'default') { + context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * Math.PI, arcbarOption.direction == 'ccw'); + } else { + context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i, 0, 2 * Math.PI, arcbarOption.direction == 'ccw'); + } + context.stroke(); + //进度条 + var fillColor = eachSeries.color + if(arcbarOption.linearType == 'custom'){ + var grd = context.createLinearGradient(centerPosition.x - radius, centerPosition.y, centerPosition.x + radius, centerPosition.y); + grd.addColorStop(1, hexToRgb(arcbarOption.customColor[eachSeries.linearIndex], 1)) + grd.addColorStop(0, hexToRgb(eachSeries.color, 1)) + fillColor = grd; + } + context.setLineWidth(arcbarOption.width * opts.pix); + context.setStrokeStyle(fillColor); + context.setLineCap(arcbarOption.lineCap); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * Math.PI, arcbarOption.direction == 'ccw'); + context.stroke(); + } + drawRingTitle(opts, config, context, centerPosition); + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawGaugeDataPoints(categories, series, opts, config, context) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var gaugeOption = assign({}, { + type: 'default', + startAngle: 0.75, + endAngle: 0.25, + width: 15, + labelOffset:13, + splitLine: { + fixRadius: 0, + splitNumber: 10, + width: 15, + color: '#FFFFFF', + childNumber: 5, + childWidth: 5 + }, + pointer: { + width: 15, + color: 'auto' + } + }, opts.extra.gauge); + if (gaugeOption.oldAngle == undefined) { + gaugeOption.oldAngle = gaugeOption.startAngle; + } + if (gaugeOption.oldData == undefined) { + gaugeOption.oldData = 0; + } + categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle); + var centerPosition = { + x: opts.width / 2, + y: opts.height / 2 + }; + var radius = Math.min(centerPosition.x, centerPosition.y); + radius -= 5 * opts.pix; + radius -= gaugeOption.width / 2; + radius = radius < 10 ? 10 : radius; + var innerRadius = radius - gaugeOption.width; + var totalAngle = 0; + //判断仪表盘的样式:default百度样式,progress新样式 + if (gaugeOption.type == 'progress') { + //## 第一步画中心圆形背景和进度条背景 + //中心圆形背景 + var pieRadius = radius - gaugeOption.width * 3; + context.beginPath(); + let gradient = context.createLinearGradient(centerPosition.x, centerPosition.y - pieRadius, centerPosition.x, centerPosition.y + pieRadius); + //配置渐变填充(起点:中心点向上减半径;结束点中心点向下加半径) + gradient.addColorStop('0', hexToRgb(series[0].color, 0.3)); + gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1)); + context.setFillStyle(gradient); + context.arc(centerPosition.x, centerPosition.y, pieRadius, 0, 2 * Math.PI, false); + context.fill(); + //画进度条背景 + context.setLineWidth(gaugeOption.width); + context.setStrokeStyle(hexToRgb(series[0].color, 0.3)); + context.setLineCap('round'); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, gaugeOption.endAngle * Math.PI, false); + context.stroke(); + //## 第二步画刻度线 + if (gaugeOption.endAngle < gaugeOption.startAngle) { + totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle; + } else { + totalAngle = gaugeOption.startAngle - gaugeOption.endAngle; + } + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber; + let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius; + let endX = -radius - gaugeOption.width - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + let len = gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; + let proc = series[0].data * process; + for (let i = 0; i < len; i++) { + context.beginPath(); + //刻度线随进度变色 + if (proc > (i / len)) { + context.setStrokeStyle(hexToRgb(series[0].color, 1)); + } else { + context.setStrokeStyle(hexToRgb(series[0].color, 0.3)); + } + context.setLineWidth(3 * opts.pix); + context.moveTo(startX, 0); + context.lineTo(endX, 0); + context.stroke(); + context.rotate(childAngle * Math.PI); + } + context.restore(); + //## 第三步画进度条 + series = getGaugeArcbarDataPoints(series, gaugeOption, process); + context.setLineWidth(gaugeOption.width); + context.setStrokeStyle(series[0].color); + context.setLineCap('round'); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, series[0]._proportion_ * Math.PI, false); + context.stroke(); + //## 第四步画指针 + let pointerRadius = radius - gaugeOption.width * 2.5; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((series[0]._proportion_ - 1) * Math.PI); + context.beginPath(); + context.setLineWidth(gaugeOption.width / 3); + let gradient3 = context.createLinearGradient(0, -pointerRadius * 0.6, 0, pointerRadius * 0.6); + gradient3.addColorStop('0', hexToRgb('#FFFFFF', 0)); + gradient3.addColorStop('0.5', hexToRgb(series[0].color, 1)); + gradient3.addColorStop('1.0', hexToRgb('#FFFFFF', 0)); + context.setStrokeStyle(gradient3); + context.arc(0, 0, pointerRadius, 0.85 * Math.PI, 1.15 * Math.PI, false); + context.stroke(); + context.beginPath(); + context.setLineWidth(1); + context.setStrokeStyle(series[0].color); + context.setFillStyle(series[0].color); + context.moveTo(-pointerRadius - gaugeOption.width / 3 / 2, -4); + context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2 - 4, 0); + context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, 4); + context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, -4); + context.stroke(); + context.fill(); + context.restore(); + //default百度样式 + } else { + //画背景 + context.setLineWidth(gaugeOption.width); + context.setLineCap('butt'); + for (let i = 0; i < categories.length; i++) { + let eachCategories = categories[i]; + context.beginPath(); + context.setStrokeStyle(eachCategories.color); + context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ * Math.PI, false); + context.stroke(); + } + context.save(); + //画刻度线 + if (gaugeOption.endAngle < gaugeOption.startAngle) { + totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle; + } else { + totalAngle = gaugeOption.startAngle - gaugeOption.endAngle; + } + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber; + let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius; + let endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width; + let childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth; + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) { + context.beginPath(); + context.setStrokeStyle(gaugeOption.splitLine.color); + context.setLineWidth(2 * opts.pix); + context.moveTo(startX, 0); + context.lineTo(endX, 0); + context.stroke(); + context.rotate(splitAngle * Math.PI); + } + context.restore(); + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + for (let i = 0; i < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; i++) { + context.beginPath(); + context.setStrokeStyle(gaugeOption.splitLine.color); + context.setLineWidth(1 * opts.pix); + context.moveTo(startX, 0); + context.lineTo(childendX, 0); + context.stroke(); + context.rotate(childAngle * Math.PI); + } + context.restore(); + //画指针 + series = getGaugeDataPoints(series, categories, gaugeOption, process); + for (let i = 0; i < series.length; i++) { + let eachSeries = series[i]; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((eachSeries._proportion_ - 1) * Math.PI); + context.beginPath(); + context.setFillStyle(eachSeries.color); + context.moveTo(gaugeOption.pointer.width, 0); + context.lineTo(0, -gaugeOption.pointer.width / 2); + context.lineTo(-innerRadius, 0); + context.lineTo(0, gaugeOption.pointer.width / 2); + context.lineTo(gaugeOption.pointer.width, 0); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFillStyle('#FFFFFF'); + context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false); + context.fill(); + context.restore(); + } + if (opts.dataLabel !== false) { + drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context); + } + } + //画仪表盘标题,副标题 + drawRingTitle(opts, config, context, centerPosition); + if (process === 1 && opts.type === 'gauge') { + opts.extra.gauge.oldAngle = series[0]._proportion_; + opts.extra.gauge.oldData = series[0].data; + } + return { + center: centerPosition, + radius: radius, + innerRadius: innerRadius, + categories: categories, + totalAngle: totalAngle + }; +} + +function drawRadarDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var radarOption = assign({}, { + gridColor: '#cccccc', + gridType: 'radar', + gridEval:1, + axisLabel:false, + axisLabelTofix:0, + labelShow:true, + labelColor:'#666666', + labelPointShow:false, + labelPointRadius:3, + labelPointColor:'#cccccc', + opacity: 0.2, + gridCount: 3, + border:false, + borderWidth:2, + linearType: 'none', + customColor: [], + }, opts.extra.radar); + var coordinateAngle = getRadarCoordinateSeries(opts.categories.length); + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + var xr = (opts.width - opts.area[1] - opts.area[3]) / 2 + var yr = (opts.height - opts.area[0] - opts.area[2]) / 2 + var radius = Math.min(xr - (getMaxTextListLength(opts.categories, config.fontSize, context) + config.radarLabelTextMargin), yr - config.radarLabelTextMargin); + radius -= config.radarLabelTextMargin * opts.pix; + radius = radius < 10 ? 10 : radius; + radius = radarOption.radius ? radarOption.radius : radius; + // 画分割线 + context.beginPath(); + context.setLineWidth(1 * opts.pix); + context.setStrokeStyle(radarOption.gridColor); + coordinateAngle.forEach(function(angle,index) { + var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition); + context.moveTo(centerPosition.x, centerPosition.y); + if (index % radarOption.gridEval == 0) { + context.lineTo(pos.x, pos.y); + } + }); + context.stroke(); + context.closePath(); + + // 画背景网格 + var _loop = function _loop(i) { + var startPos = {}; + context.beginPath(); + context.setLineWidth(1 * opts.pix); + context.setStrokeStyle(radarOption.gridColor); + if (radarOption.gridType == 'radar') { + coordinateAngle.forEach(function(angle, index) { + var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(angle), radius / + radarOption.gridCount * i * Math.sin(angle), centerPosition); + if (index === 0) { + startPos = pos; + context.moveTo(pos.x, pos.y); + } else { + context.lineTo(pos.x, pos.y); + } + }); + context.lineTo(startPos.x, startPos.y); + } else { + var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(1.5), radius / radarOption.gridCount * i * Math.sin(1.5), centerPosition); + context.arc(centerPosition.x, centerPosition.y, centerPosition.y - pos.y, 0, 2 * Math.PI, false); + } + context.stroke(); + context.closePath(); + }; + for (var i = 1; i <= radarOption.gridCount; i++) { + _loop(i); + } + radarOption.customColor = fillCustomColor(radarOption.linearType, radarOption.customColor, series, config); + var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process); + radarDataPoints.forEach(function(eachSeries, seriesIndex) { + // 绘制区域数据 + context.beginPath(); + context.setLineWidth(radarOption.borderWidth * opts.pix); + context.setStrokeStyle(eachSeries.color); + + var fillcolor = hexToRgb(eachSeries.color, radarOption.opacity); + if (radarOption.linearType == 'custom') { + var grd; + if(context.createCircularGradient){ + grd = context.createCircularGradient(centerPosition.x, centerPosition.y, radius) + }else{ + grd = context.createRadialGradient(centerPosition.x, centerPosition.y, 0,centerPosition.x, centerPosition.y, radius) + } + grd.addColorStop(0, hexToRgb(radarOption.customColor[series[seriesIndex].linearIndex], radarOption.opacity)) + grd.addColorStop(1, hexToRgb(eachSeries.color, radarOption.opacity)) + fillcolor = grd + } + + context.setFillStyle(fillcolor); + eachSeries.data.forEach(function(item, index) { + if (index === 0) { + context.moveTo(item.position.x, item.position.y); + } else { + context.lineTo(item.position.x, item.position.y); + } + }); + context.closePath(); + context.fill(); + if(radarOption.border === true){ + context.stroke(); + } + context.closePath(); + if (opts.dataPointShape !== false) { + var points = eachSeries.data.map(function(item) { + return item.position; + }); + drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts); + } + }); + // 画刻度值 + if(radarOption.axisLabel === true){ + const maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series))); + const stepLength = radius / radarOption.gridCount; + const fontSize = opts.fontSize * opts.pix; + context.setFontSize(fontSize); + context.setFillStyle(opts.fontColor); + context.setTextAlign('left'); + for (var i = 0; i < radarOption.gridCount + 1; i++) { + let label = i * maxData / radarOption.gridCount; + label = label.toFixed(radarOption.axisLabelTofix); + context.fillText(String(label), centerPosition.x + 3 * opts.pix, centerPosition.y - i * stepLength + fontSize / 2); + } + } + + // draw label text + drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context); + + // draw dataLabel + if (opts.dataLabel !== false && process === 1) { + radarDataPoints.forEach(function(eachSeries, seriesIndex) { + context.beginPath(); + var fontSize = eachSeries.textSize * opts.pix || config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(eachSeries.textColor || opts.fontColor); + eachSeries.data.forEach(function(item, index) { + //如果是中心点垂直的上下点位 + if(Math.abs(item.position.x - centerPosition.x)<2){ + //如果在上面 + if(item.position.y < centerPosition.y){ + context.setTextAlign('center'); + context.fillText(item.value, item.position.x, item.position.y - 4); + }else{ + context.setTextAlign('center'); + context.fillText(item.value, item.position.x, item.position.y + fontSize + 2); + } + }else{ + //如果在左侧 + if(item.position.x < centerPosition.x){ + context.setTextAlign('right'); + context.fillText(item.value, item.position.x - 4, item.position.y + fontSize / 2 - 2); + }else{ + context.setTextAlign('left'); + context.fillText(item.value, item.position.x + 4, item.position.y + fontSize / 2 - 2); + } + } + }); + context.closePath(); + context.stroke(); + }); + context.setTextAlign('left'); + } + + return { + center: centerPosition, + radius: radius, + angleList: coordinateAngle + }; +} + +// 经纬度转墨卡托 +function lonlat2mercator(longitude, latitude) { + var mercator = Array(2); + var x = longitude * 20037508.34 / 180; + var y = Math.log(Math.tan((90 + latitude) * Math.PI / 360)) / (Math.PI / 180); + y = y * 20037508.34 / 180; + mercator[0] = x; + mercator[1] = y; + return mercator; +} + +// 墨卡托转经纬度 +function mercator2lonlat(longitude, latitude) { + var lonlat = Array(2) + var x = longitude / 20037508.34 * 180; + var y = latitude / 20037508.34 * 180; + y = 180 / Math.PI * (2 * Math.atan(Math.exp(y * Math.PI / 180)) - Math.PI / 2); + lonlat[0] = x; + lonlat[1] = y; + return lonlat; +} + +function getBoundingBox(data) { + var bounds = {},coords; + bounds.xMin = 180; + bounds.xMax = 0; + bounds.yMin = 90; + bounds.yMax = 0 + for (var i = 0; i < data.length; i++) { + var coorda = data[i].geometry.coordinates + for (var k = 0; k < coorda.length; k++) { + coords = coorda[k]; + if (coords.length == 1) { + coords = coords[0] + } + for (var j = 0; j < coords.length; j++) { + var longitude = coords[j][0]; + var latitude = coords[j][1]; + var point = { + x: longitude, + y: latitude + } + bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x; + bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x; + bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y; + bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y; + } + } + } + return bounds; +} + +function coordinateToPoint(latitude, longitude, bounds, scale, xoffset, yoffset) { + return { + x: (longitude - bounds.xMin) * scale + xoffset, + y: (bounds.yMax - latitude) * scale + yoffset + }; +} + +function pointToCoordinate(pointY, pointX, bounds, scale, xoffset, yoffset) { + return { + x: (pointX - xoffset) / scale + bounds.xMin, + y: bounds.yMax - (pointY - yoffset) / scale + }; +} + +function isRayIntersectsSegment(poi, s_poi, e_poi) { + if (s_poi[1] == e_poi[1]) { + return false; + } + if (s_poi[1] > poi[1] && e_poi[1] > poi[1]) { + return false; + } + if (s_poi[1] < poi[1] && e_poi[1] < poi[1]) { + return false; + } + if (s_poi[1] == poi[1] && e_poi[1] > poi[1]) { + return false; + } + if (e_poi[1] == poi[1] && s_poi[1] > poi[1]) { + return false; + } + if (s_poi[0] < poi[0] && e_poi[1] < poi[1]) { + return false; + } + let xseg = e_poi[0] - (e_poi[0] - s_poi[0]) * (e_poi[1] - poi[1]) / (e_poi[1] - s_poi[1]); + if (xseg < poi[0]) { + return false; + } else { + return true; + } +} + +function isPoiWithinPoly(poi, poly, mercator) { + let sinsc = 0; + for (let i = 0; i < poly.length; i++) { + let epoly = poly[i][0]; + if (poly.length == 1) { + epoly = poly[i][0] + } + for (let j = 0; j < epoly.length - 1; j++) { + let s_poi = epoly[j]; + let e_poi = epoly[j + 1]; + if (mercator) { + s_poi = lonlat2mercator(epoly[j][0], epoly[j][1]); + e_poi = lonlat2mercator(epoly[j + 1][0], epoly[j + 1][1]); + } + if (isRayIntersectsSegment(poi, s_poi, e_poi)) { + sinsc += 1; + } + } + } + if (sinsc % 2 == 1) { + return true; + } else { + return false; + } +} + +function drawMapDataPoints(series, opts, config, context) { + var mapOption = assign({}, { + border: true, + mercator: false, + borderWidth: 1, + active:true, + borderColor: '#666666', + fillOpacity: 0.6, + activeBorderColor: '#f04864', + activeFillColor: '#facc14', + activeFillOpacity: 1 + }, opts.extra.map); + var coords, point; + var data = series; + var bounds = getBoundingBox(data); + if (mapOption.mercator) { + var max = lonlat2mercator(bounds.xMax, bounds.yMax) + var min = lonlat2mercator(bounds.xMin, bounds.yMin) + bounds.xMax = max[0] + bounds.yMax = max[1] + bounds.xMin = min[0] + bounds.yMin = min[1] + } + var xScale = opts.width / Math.abs(bounds.xMax - bounds.xMin); + var yScale = opts.height / Math.abs(bounds.yMax - bounds.yMin); + var scale = xScale < yScale ? xScale : yScale; + var xoffset = opts.width / 2 - Math.abs(bounds.xMax - bounds.xMin) / 2 * scale; + var yoffset = opts.height / 2 - Math.abs(bounds.yMax - bounds.yMin) / 2 * scale; + for (var i = 0; i < data.length; i++) { + context.beginPath(); + context.setLineWidth(mapOption.borderWidth * opts.pix); + context.setStrokeStyle(mapOption.borderColor); + context.setFillStyle(hexToRgb(series[i].color, series[i].fillOpacity||mapOption.fillOpacity)); + if (mapOption.active == true && opts.tooltip) { + if (opts.tooltip.index == i) { + context.setStrokeStyle(mapOption.activeBorderColor); + context.setFillStyle(hexToRgb(mapOption.activeFillColor, mapOption.activeFillOpacity)); + } + } + var coorda = data[i].geometry.coordinates + for (var k = 0; k < coorda.length; k++) { + coords = coorda[k]; + if (coords.length == 1) { + coords = coords[0] + } + for (var j = 0; j < coords.length; j++) { + var gaosi = Array(2); + if (mapOption.mercator) { + gaosi = lonlat2mercator(coords[j][0], coords[j][1]) + } else { + gaosi = coords[j] + } + point = coordinateToPoint(gaosi[1], gaosi[0], bounds, scale, xoffset, yoffset) + if (j === 0) { + context.beginPath(); + context.moveTo(point.x, point.y); + } else { + context.lineTo(point.x, point.y); + } + } + context.fill(); + if (mapOption.border == true) { + context.stroke(); + } + } + } + if (opts.dataLabel == true) { + for (var i = 0; i < data.length; i++) { + var centerPoint = data[i].properties.centroid; + if (centerPoint) { + if (mapOption.mercator) { + centerPoint = lonlat2mercator(data[i].properties.centroid[0], data[i].properties.centroid[1]) + } + point = coordinateToPoint(centerPoint[1], centerPoint[0], bounds, scale, xoffset, yoffset); + let fontSize = data[i].textSize * opts.pix || config.fontSize; + let fontColor = data[i].textColor || opts.fontColor; + if(mapOption.active && mapOption.activeTextColor && opts.tooltip && opts.tooltip.index == i){ + fontColor = mapOption.activeTextColor; + } + let text = data[i].properties.name; + context.beginPath(); + context.setFontSize(fontSize) + context.setFillStyle(fontColor) + context.fillText(text, point.x - measureText(text, fontSize, context) / 2, point.y + fontSize / 2); + context.closePath(); + context.stroke(); + } + } + } + opts.chartData.mapData = { + bounds: bounds, + scale: scale, + xoffset: xoffset, + yoffset: yoffset, + mercator: mapOption.mercator + } + drawToolTipBridge(opts, config, context, 1); + context.draw(); +} + +function normalInt(min, max, iter) { + iter = iter == 0 ? 1 : iter; + var arr = []; + for (var i = 0; i < iter; i++) { + arr[i] = Math.random(); + }; + return Math.floor(arr.reduce(function(i, j) { + return i + j + }) / iter * (max - min)) + min; +}; + +function collisionNew(area, points, width, height) { + var isIn = false; + for (let i = 0; i < points.length; i++) { + if (points[i].area) { + if (area[3] < points[i].area[1] || area[0] > points[i].area[2] || area[1] > points[i].area[3] || area[2] < points[i].area[0]) { + if (area[0] < 0 || area[1] < 0 || area[2] > width || area[3] > height) { + isIn = true; + break; + } else { + isIn = false; + } + } else { + isIn = true; + break; + } + } + } + return isIn; +}; + +function getWordCloudPoint(opts, type, context) { + let points = opts.series; + switch (type) { + case 'normal': + for (let i = 0; i < points.length; i++) { + let text = points[i].name; + let tHeight = points[i].textSize * opts.pix; + let tWidth = measureText(text, tHeight, context); + let x, y; + let area; + let breaknum = 0; + while (true) { + breaknum++; + x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2; + y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2; + area = [x - 5 + opts.width / 2, y - 5 - tHeight + opts.height / 2, x + tWidth + 5 + opts.width / 2, y + 5 + + opts.height / 2 + ]; + let isCollision = collisionNew(area, points, opts.width, opts.height); + if (!isCollision) break; + if (breaknum == 1000) { + area = [-100, -100, -100, -100]; + break; + } + }; + points[i].area = area; + } + break; + case 'vertical': + function Spin() { + //获取均匀随机值,是否旋转,旋转的概率为(1-0.5) + if (Math.random() > 0.7) { + return true; + } else { + return false + }; + }; + for (let i = 0; i < points.length; i++) { + let text = points[i].name; + let tHeight = points[i].textSize * opts.pix; + let tWidth = measureText(text, tHeight, context); + let isSpin = Spin(); + let x, y, area, areav; + let breaknum = 0; + while (true) { + breaknum++; + let isCollision; + if (isSpin) { + x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2; + y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2; + area = [y - 5 - tWidth + opts.width / 2, (-x - 5 + opts.height / 2), y + 5 + opts.width / 2, (-x + tHeight + 5 + opts.height / 2)]; + areav = [opts.width - (opts.width / 2 - opts.height / 2) - (-x + tHeight + 5 + opts.height / 2) - 5, (opts.height / 2 - opts.width / 2) + (y - 5 - tWidth + opts.width / 2) - 5, opts.width - (opts.width / 2 - opts.height / 2) - (-x + tHeight + 5 + opts.height / 2) + tHeight, (opts.height / 2 - opts.width / 2) + (y - 5 - tWidth + opts.width / 2) + tWidth + 5]; + isCollision = collisionNew(areav, points, opts.height, opts.width); + } else { + x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2; + y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2; + area = [x - 5 + opts.width / 2, y - 5 - tHeight + opts.height / 2, x + tWidth + 5 + opts.width / 2, y + 5 + opts.height / 2]; + isCollision = collisionNew(area, points, opts.width, opts.height); + } + if (!isCollision) break; + if (breaknum == 1000) { + area = [-1000, -1000, -1000, -1000]; + break; + } + }; + if (isSpin) { + points[i].area = areav; + points[i].areav = area; + } else { + points[i].area = area; + } + points[i].rotate = isSpin; + }; + break; + } + return points; +} + +function drawWordCloudDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let wordOption = assign({}, { + type: 'normal', + autoColors: true + }, opts.extra.word); + if (!opts.chartData.wordCloudData) { + opts.chartData.wordCloudData = getWordCloudPoint(opts, wordOption.type, context); + } + context.beginPath(); + context.setFillStyle(opts.background); + context.rect(0, 0, opts.width, opts.height); + context.fill(); + context.save(); + let points = opts.chartData.wordCloudData; + context.translate(opts.width / 2, opts.height / 2); + for (let i = 0; i < points.length; i++) { + context.save(); + if (points[i].rotate) { + context.rotate(90 * Math.PI / 180); + } + let text = points[i].name; + let tHeight = points[i].textSize * opts.pix; + let tWidth = measureText(text, tHeight, context); + context.beginPath(); + context.setStrokeStyle(points[i].color); + context.setFillStyle(points[i].color); + context.setFontSize(tHeight); + if (points[i].rotate) { + if (points[i].areav[0] > 0) { + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.strokeText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process); + } else { + context.fillText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process); + } + } else { + context.fillText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process); + } + } + } else { + if (points[i].area[0] > 0) { + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.strokeText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process); + } else { + context.fillText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process); + } + } else { + context.fillText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process); + } + } + } + context.stroke(); + context.restore(); + } + context.restore(); +} + +function drawFunnelDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let funnelOption = assign({}, { + type:'funnel', + activeWidth: 10, + activeOpacity: 0.3, + border: false, + borderWidth: 2, + borderColor: '#FFFFFF', + fillOpacity: 1, + minSize: 0, + labelAlign: 'right', + linearType: 'none', + customColor: [], + }, opts.extra.funnel); + let eachSpacing = (opts.height - opts.area[0] - opts.area[2]) / series.length; + let centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.height - opts.area[2] + }; + let activeWidth = funnelOption.activeWidth * opts.pix; + let radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth); + let seriesNew = getFunnelDataPoints(series, radius, funnelOption, eachSpacing, process); + context.save(); + context.translate(centerPosition.x, centerPosition.y); + funnelOption.customColor = fillCustomColor(funnelOption.linearType, funnelOption.customColor, series, config); + if(funnelOption.type == 'pyramid'){ + for (let i = 0; i < seriesNew.length; i++) { + if (i == seriesNew.length -1) { + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.beginPath(); + context.setFillStyle(hexToRgb(seriesNew[i].color, funnelOption.activeOpacity)); + context.moveTo(-activeWidth, -eachSpacing); + context.lineTo(-seriesNew[i].radius - activeWidth, 0); + context.lineTo(seriesNew[i].radius + activeWidth, 0); + context.lineTo(activeWidth, -eachSpacing); + context.lineTo(-activeWidth, -eachSpacing); + context.closePath(); + context.fill(); + } + } + seriesNew[i].funnelArea = [centerPosition.x - seriesNew[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + seriesNew[i].radius, centerPosition.y - eachSpacing * i]; + context.beginPath(); + context.setLineWidth(funnelOption.borderWidth * opts.pix); + context.setStrokeStyle(funnelOption.borderColor); + var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity); + if (funnelOption.linearType == 'custom') { + var grd = context.createLinearGradient(seriesNew[i].radius, -eachSpacing, -seriesNew[i].radius, -eachSpacing); + grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)); + grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + fillColor = grd + } + context.setFillStyle(fillColor); + context.moveTo(0, -eachSpacing); + context.lineTo(-seriesNew[i].radius, 0); + context.lineTo(seriesNew[i].radius, 0); + context.lineTo(0, -eachSpacing); + context.closePath(); + context.fill(); + if (funnelOption.border == true) { + context.stroke(); + } + } else { + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.beginPath(); + context.setFillStyle(hexToRgb(seriesNew[i].color, funnelOption.activeOpacity)); + context.moveTo(0, 0); + context.lineTo(-seriesNew[i].radius - activeWidth, 0); + context.lineTo(-seriesNew[i + 1].radius - activeWidth, -eachSpacing); + context.lineTo(seriesNew[i + 1].radius + activeWidth, -eachSpacing); + context.lineTo(seriesNew[i].radius + activeWidth, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + } + } + seriesNew[i].funnelArea = [centerPosition.x - seriesNew[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + seriesNew[i].radius, centerPosition.y - eachSpacing * i]; + context.beginPath(); + context.setLineWidth(funnelOption.borderWidth * opts.pix); + context.setStrokeStyle(funnelOption.borderColor); + var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity); + if (funnelOption.linearType == 'custom') { + var grd = context.createLinearGradient(seriesNew[i].radius, -eachSpacing, -seriesNew[i].radius, -eachSpacing); + grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)); + grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + fillColor = grd + } + context.setFillStyle(fillColor); + context.moveTo(0, 0); + context.lineTo(-seriesNew[i].radius, 0); + context.lineTo(-seriesNew[i + 1].radius, -eachSpacing); + context.lineTo(seriesNew[i + 1].radius, -eachSpacing); + context.lineTo(seriesNew[i].radius, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + if (funnelOption.border == true) { + context.stroke(); + } + } + context.translate(0, -eachSpacing) + } + }else{ + context.translate(0, - (seriesNew.length - 1) * eachSpacing); + for (let i = 0; i < seriesNew.length; i++) { + if (i == seriesNew.length - 1) { + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.beginPath(); + context.setFillStyle(hexToRgb(seriesNew[i].color, funnelOption.activeOpacity)); + context.moveTo(-activeWidth - funnelOption.minSize/2, 0); + context.lineTo(-seriesNew[i].radius - activeWidth, -eachSpacing); + context.lineTo(seriesNew[i].radius + activeWidth, -eachSpacing); + context.lineTo(activeWidth + funnelOption.minSize/2, 0); + context.lineTo(-activeWidth - funnelOption.minSize/2, 0); + context.closePath(); + context.fill(); + } + } + seriesNew[i].funnelArea = [centerPosition.x - seriesNew[i].radius, centerPosition.y - eachSpacing, centerPosition.x + seriesNew[i].radius, centerPosition.y ]; + context.beginPath(); + context.setLineWidth(funnelOption.borderWidth * opts.pix); + context.setStrokeStyle(funnelOption.borderColor); + var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity); + if (funnelOption.linearType == 'custom') { + var grd = context.createLinearGradient(seriesNew[i].radius, -eachSpacing, -seriesNew[i].radius, -eachSpacing); + grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)); + grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + fillColor = grd + } + context.setFillStyle(fillColor); + context.moveTo(0, 0); + context.lineTo(-funnelOption.minSize/2, 0); + context.lineTo(-seriesNew[i].radius, -eachSpacing); + context.lineTo(seriesNew[i].radius, -eachSpacing); + context.lineTo(funnelOption.minSize/2, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + if (funnelOption.border == true) { + context.stroke(); + } + } else { + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.beginPath(); + context.setFillStyle(hexToRgb(seriesNew[i].color, funnelOption.activeOpacity)); + context.moveTo(0, 0); + context.lineTo(-seriesNew[i + 1].radius - activeWidth, 0); + context.lineTo(-seriesNew[i].radius - activeWidth, -eachSpacing); + context.lineTo(seriesNew[i].radius + activeWidth, -eachSpacing); + context.lineTo(seriesNew[i + 1].radius + activeWidth, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + } + } + seriesNew[i].funnelArea = [centerPosition.x - seriesNew[i].radius, centerPosition.y - eachSpacing * (seriesNew.length - i), centerPosition.x + seriesNew[i].radius, centerPosition.y - eachSpacing * (seriesNew.length - i - 1)]; + context.beginPath(); + context.setLineWidth(funnelOption.borderWidth * opts.pix); + context.setStrokeStyle(funnelOption.borderColor); + var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity); + if (funnelOption.linearType == 'custom') { + var grd = context.createLinearGradient(seriesNew[i].radius, -eachSpacing, -seriesNew[i].radius, -eachSpacing); + grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)); + grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity)); + fillColor = grd + } + context.setFillStyle(fillColor); + context.moveTo(0, 0); + context.lineTo(-seriesNew[i + 1].radius, 0); + context.lineTo(-seriesNew[i].radius, -eachSpacing); + context.lineTo(seriesNew[i].radius, -eachSpacing); + context.lineTo(seriesNew[i + 1].radius, 0); + context.lineTo(0, 0); + context.closePath(); + context.fill(); + if (funnelOption.border == true) { + context.stroke(); + } + } + context.translate(0, eachSpacing) + } + } + + context.restore(); + if (opts.dataLabel !== false && process === 1) { + drawFunnelText(seriesNew, opts, context, eachSpacing, funnelOption.labelAlign, activeWidth, centerPosition); + } + if (process === 1) { + drawFunnelCenterText(seriesNew, opts, context, eachSpacing, funnelOption.labelAlign, activeWidth, centerPosition); + } + return { + center: centerPosition, + radius: radius, + series: seriesNew + }; +} + +function drawFunnelText(series, opts, context, eachSpacing, labelAlign, activeWidth, centerPosition) { + for (let i = 0; i < series.length; i++) { + let item = series[i]; + if(item.labelShow === false){ + continue; + } + let startX, endX, startY, fontSize; + let text = item.formatter ? item.formatter(item,i,series,opts) : util.toFixed(item._proportion_ * 100) + '%'; + text = item.labelText ? item.labelText : text; + if (labelAlign == 'right') { + if (i == series.length -1) { + startX = (item.funnelArea[2] + centerPosition.x) / 2; + } else { + startX = (item.funnelArea[2] + series[i + 1].funnelArea[2]) / 2; + } + endX = startX + activeWidth * 2; + startY = item.funnelArea[1] + eachSpacing / 2; + fontSize = item.textSize * opts.pix || opts.fontSize * opts.pix; + context.setLineWidth(1 * opts.pix); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.beginPath(); + context.moveTo(startX, startY); + context.lineTo(endX, startY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(endX, startY); + context.arc(endX, startY, 2 * opts.pix, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.textColor || opts.fontColor); + context.fillText(text, endX + 5, startY + fontSize / 2 - 2); + context.closePath(); + context.stroke(); + context.closePath(); + } + if (labelAlign == 'left') { + if (i == series.length -1) { + startX = (item.funnelArea[0] + centerPosition.x) / 2; + } else { + startX = (item.funnelArea[0] + series[i + 1].funnelArea[0]) / 2; + } + endX = startX - activeWidth * 2; + startY = item.funnelArea[1] + eachSpacing / 2; + fontSize = item.textSize * opts.pix || opts.fontSize * opts.pix; + context.setLineWidth(1 * opts.pix); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.beginPath(); + context.moveTo(startX, startY); + context.lineTo(endX, startY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(endX, startY); + context.arc(endX, startY, 2, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.textColor || opts.fontColor); + context.fillText(text, endX - 5 - measureText(text, fontSize, context), startY + fontSize / 2 - 2); + context.closePath(); + context.stroke(); + context.closePath(); + } + } +} + +function drawFunnelCenterText(series, opts, context, eachSpacing, labelAlign, activeWidth, centerPosition) { + for (let i = 0; i < series.length; i++) { + let item = series[i]; + let startY, fontSize; + if (item.centerText) { + startY = item.funnelArea[1] + eachSpacing / 2; + fontSize = item.centerTextSize * opts.pix || opts.fontSize * opts.pix; + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.centerTextColor || "#FFFFFF"); + context.fillText(item.centerText, centerPosition.x - measureText(item.centerText, fontSize, context) / 2, startY + fontSize / 2 - 2); + context.closePath(); + context.stroke(); + context.closePath(); + } + } +} + + +function drawCanvas(opts, context) { + context.save(); + context.translate(0, 0.5); + context.restore(); + context.draw(); +} + +var Timing = { + easeIn: function easeIn(pos) { + return Math.pow(pos, 3); + }, + easeOut: function easeOut(pos) { + return Math.pow(pos - 1, 3) + 1; + }, + easeInOut: function easeInOut(pos) { + if ((pos /= 0.5) < 1) { + return 0.5 * Math.pow(pos, 3); + } else { + return 0.5 * (Math.pow(pos - 2, 3) + 2); + } + }, + linear: function linear(pos) { + return pos; + } +}; + +function Animation(opts) { + this.isStop = false; + opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration; + opts.timing = opts.timing || 'easeInOut'; + var delay = 17; + function createAnimationFrame() { + if (typeof setTimeout !== 'undefined') { + return function(step, delay) { + setTimeout(function() { + var timeStamp = +new Date(); + step(timeStamp); + }, delay); + }; + } else if (typeof requestAnimationFrame !== 'undefined') { + return requestAnimationFrame; + } else { + return function(step) { + step(null); + }; + } + }; + var animationFrame = createAnimationFrame(); + var startTimeStamp = null; + var _step = function step(timestamp) { + if (timestamp === null || this.isStop === true) { + opts.onProcess && opts.onProcess(1); + opts.onAnimationFinish && opts.onAnimationFinish(); + return; + } + if (startTimeStamp === null) { + startTimeStamp = timestamp; + } + if (timestamp - startTimeStamp < opts.duration) { + var process = (timestamp - startTimeStamp) / opts.duration; + var timingFunction = Timing[opts.timing]; + process = timingFunction(process); + opts.onProcess && opts.onProcess(process); + animationFrame(_step, delay); + } else { + opts.onProcess && opts.onProcess(1); + opts.onAnimationFinish && opts.onAnimationFinish(); + } + }; + _step = _step.bind(this); + animationFrame(_step, delay); +} + +Animation.prototype.stop = function() { + this.isStop = true; +}; + +function drawCharts(type, opts, config, context) { + var _this = this; + var series = opts.series; + //兼容ECharts饼图类数据格式 + if (type === 'pie' || type === 'ring' || type === 'mount' || type === 'rose' || type === 'funnel') { + series = fixPieSeries(series, opts, config); + } + var categories = opts.categories; + if (type === 'mount') { + categories = []; + for (let j = 0; j < series.length; j++) { + if(series[j].show !== false) categories.push(series[j].name) + } + opts.categories = categories; + } + series = fillSeries(series, opts, config); + var duration = opts.animation ? opts.duration : 0; + _this.animationInstance && _this.animationInstance.stop(); + var seriesMA = null; + if (type == 'candle') { + let average = assign({}, opts.extra.candle.average); + if (average.show) { + seriesMA = calCandleMA(average.day, average.name, average.color, series[0].data); + seriesMA = fillSeries(seriesMA, opts, config); + opts.seriesMA = seriesMA; + } else if (opts.seriesMA) { + seriesMA = opts.seriesMA = fillSeries(opts.seriesMA, opts, config); + } else { + seriesMA = series; + } + } else { + seriesMA = series; + } + /* 过滤掉show=false的series */ + opts._series_ = series = filterSeries(series); + //重新计算图表区域 + opts.area = new Array(4); + //复位绘图区域 + for (let j = 0; j < 4; j++) { + opts.area[j] = opts.padding[j] * opts.pix; + } + //通过计算三大区域:图例、X轴、Y轴的大小,确定绘图区域 + var _calLegendData = calLegendData(seriesMA, opts, config, opts.chartData, context), + legendHeight = _calLegendData.area.wholeHeight, + legendWidth = _calLegendData.area.wholeWidth; + + switch (opts.legend.position) { + case 'top': + opts.area[0] += legendHeight; + break; + case 'bottom': + opts.area[2] += legendHeight; + break; + case 'left': + opts.area[3] += legendWidth; + break; + case 'right': + opts.area[1] += legendWidth; + break; + } + + let _calYAxisData = {}, + yAxisWidth = 0; + if (opts.type === 'line' || opts.type === 'column'|| opts.type === 'mount' || opts.type === 'area' || opts.type === 'mix' || opts.type === 'candle' || opts.type === 'scatter' || opts.type === 'bubble' || opts.type === 'bar') { + _calYAxisData = calYAxisData(series, opts, config, context); + yAxisWidth = _calYAxisData.yAxisWidth; + //如果显示Y轴标题 + if (opts.yAxis.showTitle) { + let maxTitleHeight = 0; + for (let i = 0; i < opts.yAxis.data.length; i++) { + maxTitleHeight = Math.max(maxTitleHeight, opts.yAxis.data[i].titleFontSize ? opts.yAxis.data[i].titleFontSize * opts.pix : config.fontSize) + } + opts.area[0] += maxTitleHeight; + } + let rightIndex = 0, + leftIndex = 0; + //计算主绘图区域左右位置 + for (let i = 0; i < yAxisWidth.length; i++) { + if (yAxisWidth[i].position == 'left') { + if (leftIndex > 0) { + opts.area[3] += yAxisWidth[i].width + opts.yAxis.padding * opts.pix; + } else { + opts.area[3] += yAxisWidth[i].width; + } + leftIndex += 1; + } else if (yAxisWidth[i].position == 'right') { + if (rightIndex > 0) { + opts.area[1] += yAxisWidth[i].width + opts.yAxis.padding * opts.pix; + } else { + opts.area[1] += yAxisWidth[i].width; + } + rightIndex += 1; + } + } + } else { + config.yAxisWidth = yAxisWidth; + } + opts.chartData.yAxisData = _calYAxisData; + + if (opts.categories && opts.categories.length && opts.type !== 'radar' && opts.type !== 'gauge' && opts.type !== 'bar') { + opts.chartData.xAxisData = getXAxisPoints(opts.categories, opts, config); + let _calCategoriesData = calCategoriesData(opts.categories, opts, config, opts.chartData.xAxisData.eachSpacing, context), + xAxisHeight = _calCategoriesData.xAxisHeight, + angle = _calCategoriesData.angle; + config.xAxisHeight = xAxisHeight; + config._xAxisTextAngle_ = angle; + opts.area[2] += xAxisHeight; + opts.chartData.categoriesData = _calCategoriesData; + } else { + if (opts.type === 'line' || opts.type === 'area' || opts.type === 'scatter' || opts.type === 'bubble' || opts.type === 'bar') { + opts.chartData.xAxisData = calXAxisData(series, opts, config, context); + categories = opts.chartData.xAxisData.rangesFormat; + let _calCategoriesData = calCategoriesData(categories, opts, config, opts.chartData.xAxisData.eachSpacing, context), + xAxisHeight = _calCategoriesData.xAxisHeight, + angle = _calCategoriesData.angle; + config.xAxisHeight = xAxisHeight; + config._xAxisTextAngle_ = angle; + opts.area[2] += xAxisHeight; + opts.chartData.categoriesData = _calCategoriesData; + } else { + opts.chartData.xAxisData = { + xAxisPoints: [] + }; + } + } + + //计算右对齐偏移距离 + if (opts.enableScroll && opts.xAxis.scrollAlign == 'right' && opts._scrollDistance_ === undefined) { + let offsetLeft = 0, + xAxisPoints = opts.chartData.xAxisData.xAxisPoints, + startX = opts.chartData.xAxisData.startX, + endX = opts.chartData.xAxisData.endX, + eachSpacing = opts.chartData.xAxisData.eachSpacing; + let totalWidth = eachSpacing * (xAxisPoints.length - 1); + let screenWidth = endX - startX; + offsetLeft = screenWidth - totalWidth; + _this.scrollOption.currentOffset = offsetLeft; + _this.scrollOption.startTouchX = offsetLeft; + _this.scrollOption.distance = 0; + _this.scrollOption.lastMoveTime = 0; + opts._scrollDistance_ = offsetLeft; + } + + if (type === 'pie' || type === 'ring' || type === 'rose') { + config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(seriesMA, config, context, opts); + } + + switch (type) { + case 'word': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawWordCloudDataPoints(series, opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'map': + context.clearRect(0, 0, opts.width, opts.height); + drawMapDataPoints(series, opts, config, context); + setTimeout(()=>{ + this.uevent.trigger('renderComplete'); + },50) + break; + case 'funnel': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.funnelData = drawFunnelDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'line': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process), + xAxisPoints = _drawLineDataPoints.xAxisPoints, + calPoints = _drawLineDataPoints.calPoints, + eachSpacing = _drawLineDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'scatter': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawScatterDataPoints = drawScatterDataPoints(series, opts, config, context, process), + xAxisPoints = _drawScatterDataPoints.xAxisPoints, + calPoints = _drawScatterDataPoints.calPoints, + eachSpacing = _drawScatterDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'bubble': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawBubbleDataPoints = drawBubbleDataPoints(series, opts, config, context, process), + xAxisPoints = _drawBubbleDataPoints.xAxisPoints, + calPoints = _drawBubbleDataPoints.calPoints, + eachSpacing = _drawBubbleDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'mix': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawMixDataPoints = drawMixDataPoints(series, opts, config, context, process), + xAxisPoints = _drawMixDataPoints.xAxisPoints, + calPoints = _drawMixDataPoints.calPoints, + eachSpacing = _drawMixDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'column': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process), + xAxisPoints = _drawColumnDataPoints.xAxisPoints, + calPoints = _drawColumnDataPoints.calPoints, + eachSpacing = _drawColumnDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'mount': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawMountDataPoints = drawMountDataPoints(series, opts, config, context, process), + xAxisPoints = _drawMountDataPoints.xAxisPoints, + calPoints = _drawMountDataPoints.calPoints, + eachSpacing = _drawMountDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'bar': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawXAxis(categories, opts, config, context); + var _drawBarDataPoints = drawBarDataPoints(series, opts, config, context, process), + yAxisPoints = _drawBarDataPoints.yAxisPoints, + calPoints = _drawBarDataPoints.calPoints, + eachSpacing = _drawBarDataPoints.eachSpacing; + opts.chartData.yAxisPoints = yAxisPoints; + opts.chartData.xAxisPoints = opts.chartData.xAxisData.xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, yAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'area': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process), + xAxisPoints = _drawAreaDataPoints.xAxisPoints, + calPoints = _drawAreaDataPoints.calPoints, + eachSpacing = _drawAreaDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'ring': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.pieData = drawPieDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'pie': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.pieData = drawPieDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'rose': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.pieData = drawRoseDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'radar': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process); + drawLegend(opts.series, opts, config, context, opts.chartData); + drawToolTipBridge(opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'arcbar': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.arcbarData = drawArcbarDataPoints(series, opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'gauge': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + opts.chartData.gaugeData = drawGaugeDataPoints(categories, series, opts, config, context, process); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + case 'candle': + this.animationInstance = new Animation({ + timing: opts.timing, + duration: duration, + onProcess: function onProcess(process) { + context.clearRect(0, 0, opts.width, opts.height); + if (opts.rotate) { + contextRotate(context, opts); + } + drawYAxisGrid(categories, opts, config, context); + drawXAxis(categories, opts, config, context); + var _drawCandleDataPoints = drawCandleDataPoints(series, seriesMA, opts, config, context, process), + xAxisPoints = _drawCandleDataPoints.xAxisPoints, + calPoints = _drawCandleDataPoints.calPoints, + eachSpacing = _drawCandleDataPoints.eachSpacing; + opts.chartData.xAxisPoints = xAxisPoints; + opts.chartData.calPoints = calPoints; + opts.chartData.eachSpacing = eachSpacing; + drawYAxis(series, opts, config, context); + if (opts.enableMarkLine !== false && process === 1) { + drawMarkLine(opts, config, context); + } + if (seriesMA) { + drawLegend(seriesMA, opts, config, context, opts.chartData); + } else { + drawLegend(opts.series, opts, config, context, opts.chartData); + } + drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints); + drawCanvas(opts, context); + }, + onAnimationFinish: function onAnimationFinish() { + _this.uevent.trigger('renderComplete'); + } + }); + break; + } +} + +function uChartsEvent() { + this.events = {}; +} + +uChartsEvent.prototype.addEventListener = function(type, listener) { + this.events[type] = this.events[type] || []; + this.events[type].push(listener); +}; + +uChartsEvent.prototype.delEventListener = function(type) { + this.events[type] = []; +}; + +uChartsEvent.prototype.trigger = function() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + var type = args[0]; + var params = args.slice(1); + if (!!this.events[type]) { + this.events[type].forEach(function(listener) { + try { + listener.apply(null, params); + } catch (e) { + //console.log('[uCharts] '+e); + } + }); + } +}; + +var uCharts = function uCharts(opts) { + opts.pix = opts.pixelRatio ? opts.pixelRatio : 1; + opts.fontSize = opts.fontSize ? opts.fontSize : 13; + opts.fontColor = opts.fontColor ? opts.fontColor : config.fontColor; + if (opts.background == "" || opts.background == "none") { + opts.background = "#FFFFFF" + } + opts.title = assign({}, opts.title); + opts.subtitle = assign({}, opts.subtitle); + opts.duration = opts.duration ? opts.duration : 1000; + opts.yAxis = assign({}, { + data: [], + showTitle: false, + disabled: false, + disableGrid: false, + gridSet: 'number', + splitNumber: 5, + gridType: 'solid', + dashLength: 4 * opts.pix, + gridColor: '#cccccc', + padding: 10, + fontColor: '#666666' + }, opts.yAxis); + opts.xAxis = assign({}, { + rotateLabel: false, + rotateAngle:45, + disabled: false, + disableGrid: false, + splitNumber: 5, + calibration:false, + fontColor: '#666666', + fontSize: 13, + lineHeight: 20, + marginTop: 0, + gridType: 'solid', + dashLength: 4, + scrollAlign: 'left', + boundaryGap: 'center', + axisLine: true, + axisLineColor: '#cccccc', + titleFontSize: 13, + titleOffsetY: 0, + titleOffsetX: 0, + titleFontColor: '#666666' + }, opts.xAxis); + opts.xAxis.scrollPosition = opts.xAxis.scrollAlign; + opts.legend = assign({}, { + show: true, + position: 'bottom', + float: 'center', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: 'rgba(0,0,0,0)', + borderWidth: 0, + padding: 5, + margin: 5, + itemGap: 10, + fontSize: opts.fontSize, + lineHeight: opts.fontSize, + fontColor: opts.fontColor, + formatter: {}, + hiddenColor: '#CECECE' + }, opts.legend); + opts.extra = assign({ + tooltip:{ + legendShape: 'auto' + } + }, opts.extra); + opts.rotate = opts.rotate ? true : false; + opts.animation = opts.animation ? true : false; + opts.rotate = opts.rotate ? true : false; + opts.canvas2d = opts.canvas2d ? true : false; + + let config$$1 = assign({}, config); + config$$1.color = opts.color ? opts.color : config$$1.color; + if (opts.type == 'pie') { + config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.pie.labelWidth * opts.pix || config$$1.pieChartLinePadding * opts.pix; + } + if (opts.type == 'ring') { + config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.ring.labelWidth * opts.pix || config$$1.pieChartLinePadding * opts.pix; + } + if (opts.type == 'rose') { + config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.rose.labelWidth * opts.pix || config$$1.pieChartLinePadding * opts.pix; + } + config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding * opts.pix; + + //屏幕旋转 + config$$1.rotate = opts.rotate; + if (opts.rotate) { + let tempWidth = opts.width; + let tempHeight = opts.height; + opts.width = tempHeight; + opts.height = tempWidth; + } + + //适配高分屏 + opts.padding = opts.padding ? opts.padding : config$$1.padding; + config$$1.yAxisWidth = config.yAxisWidth * opts.pix; + config$$1.fontSize = opts.fontSize * opts.pix; + config$$1.titleFontSize = config.titleFontSize * opts.pix; + config$$1.subtitleFontSize = config.subtitleFontSize * opts.pix; + if(!opts.context){ + throw new Error('[uCharts] 未获取到context!注意:v2.0版本后,需要自行获取canvas的绘图上下文并传入opts.context!'); + } + this.context = opts.context; + if (!this.context.setTextAlign) { + this.context.setStrokeStyle = function(e) { + return this.strokeStyle = e; + } + this.context.setLineWidth = function(e) { + return this.lineWidth = e; + } + this.context.setLineCap = function(e) { + return this.lineCap = e; + } + this.context.setFontSize = function(e) { + return this.font = e + "px sans-serif"; + } + this.context.setFillStyle = function(e) { + return this.fillStyle = e; + } + this.context.setTextAlign = function(e) { + return this.textAlign = e; + } + this.context.setTextBaseline = function(e) { + return this.textBaseline = e; + } + this.context.setShadow = function(offsetX,offsetY,blur,color) { + this.shadowColor = color; + this.shadowOffsetX = offsetX; + this.shadowOffsetY = offsetY; + this.shadowBlur = blur; + } + this.context.draw = function() {} + } + //兼容NVUEsetLineDash + if(!this.context.setLineDash){ + this.context.setLineDash = function(e) {} + } + opts.chartData = {}; + this.uevent = new uChartsEvent(); + this.scrollOption = { + currentOffset: 0, + startTouchX: 0, + distance: 0, + lastMoveTime: 0 + }; + this.opts = opts; + this.config = config$$1; + drawCharts.call(this, opts.type, opts, config$$1, this.context); +}; + +uCharts.prototype.updateData = function() { + let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.opts = assign({}, this.opts, data); + this.opts.updateData = true; + let scrollPosition = data.scrollPosition || 'current'; + switch (scrollPosition) { + case 'current': + this.opts._scrollDistance_ = this.scrollOption.currentOffset; + break; + case 'left': + this.opts._scrollDistance_ = 0; + this.scrollOption = { + currentOffset: 0, + startTouchX: 0, + distance: 0, + lastMoveTime: 0 + }; + break; + case 'right': + let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config, this.context), yAxisWidth = _calYAxisData.yAxisWidth; + this.config.yAxisWidth = yAxisWidth; + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let totalWidth = eachSpacing * (xAxisPoints.length - 1); + let screenWidth = endX - startX; + offsetLeft = screenWidth - totalWidth; + this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: offsetLeft, + distance: 0, + lastMoveTime: 0 + }; + this.opts._scrollDistance_ = offsetLeft; + break; + } + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}; + +uCharts.prototype.zoom = function() { + var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount; + if (this.opts.enableScroll !== true) { + console.log('[uCharts] 请启用滚动条后使用') + return; + } + //当前屏幕中间点 + let centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round(this.opts.xAxis.itemCount / 2); + this.opts.animation = false; + this.opts.xAxis.itemCount = val.itemCount; + //重新计算x轴偏移距离 + let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config, this.context), + yAxisWidth = _calYAxisData.yAxisWidth; + this.config.yAxisWidth = yAxisWidth; + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), + xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let centerLeft = eachSpacing * centerPoint; + let screenWidth = endX - startX; + let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1); + offsetLeft = screenWidth / 2 - centerLeft; + if (offsetLeft > 0) { + offsetLeft = 0; + } + if (offsetLeft < MaxLeft) { + offsetLeft = MaxLeft; + } + this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: 0, + distance: 0, + lastMoveTime: 0 + }; + calValidDistance(this, offsetLeft, this.opts.chartData, this.config, this.opts); + this.opts._scrollDistance_ = offsetLeft; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}; + +uCharts.prototype.dobuleZoom = function(e) { + if (this.opts.enableScroll !== true) { + console.log('[uCharts] 请启用滚动条后使用') + return; + } + const tcs = e.changedTouches; + if (tcs.length < 2) { + return; + } + for (var i = 0; i < tcs.length; i++) { + tcs[i].x = tcs[i].x ? tcs[i].x : tcs[i].clientX; + tcs[i].y = tcs[i].y ? tcs[i].y : tcs[i].clientY; + } + const ntcs = [getTouches(tcs[0], this.opts, e),getTouches(tcs[1], this.opts, e)]; + const xlength = Math.abs(ntcs[0].x - ntcs[1].x); + // 记录初始的两指之间的数据 + if(!this.scrollOption.moveCount){ + let cts0 = {changedTouches:[{x:tcs[0].x,y:this.opts.area[0] / this.opts.pix + 2}]}; + let cts1 = {changedTouches:[{x:tcs[1].x,y:this.opts.area[0] / this.opts.pix + 2}]}; + if(this.opts.rotate){ + cts0 = {changedTouches:[{x:this.opts.height / this.opts.pix - this.opts.area[0] / this.opts.pix - 2,y:tcs[0].y}]}; + cts1 = {changedTouches:[{x:this.opts.height / this.opts.pix - this.opts.area[0] / this.opts.pix - 2,y:tcs[1].y}]}; + } + const moveCurrent1 = this.getCurrentDataIndex(cts0).index; + const moveCurrent2 = this.getCurrentDataIndex(cts1).index; + const moveCount = Math.abs(moveCurrent1 - moveCurrent2); + this.scrollOption.moveCount = moveCount; + this.scrollOption.moveCurrent1 = Math.min(moveCurrent1, moveCurrent2); + this.scrollOption.moveCurrent2 = Math.max(moveCurrent1, moveCurrent2); + return; + } + + let currentEachSpacing = xlength / this.scrollOption.moveCount; + let itemCount = (this.opts.width - this.opts.area[1] - this.opts.area[3]) / currentEachSpacing; + itemCount = itemCount <= 2 ? 2 : itemCount; + itemCount = itemCount >= this.opts.categories.length ? this.opts.categories.length : itemCount; + this.opts.animation = false; + this.opts.xAxis.itemCount = itemCount; + // 重新计算滚动条偏移距离 + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), + xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let currentLeft = eachSpacing * this.scrollOption.moveCurrent1; + let screenWidth = endX - startX; + let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1); + offsetLeft = -currentLeft+Math.min(ntcs[0].x,ntcs[1].x)-this.opts.area[3]-eachSpacing; + if (offsetLeft > 0) { + offsetLeft = 0; + } + if (offsetLeft < MaxLeft) { + offsetLeft = MaxLeft; + } + this.scrollOption.currentOffset= offsetLeft; + this.scrollOption.startTouchX= 0; + this.scrollOption.distance=0; + calValidDistance(this, offsetLeft, this.opts.chartData, this.config, this.opts); + this.opts._scrollDistance_ = offsetLeft; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +} + +uCharts.prototype.stopAnimation = function() { + this.animationInstance && this.animationInstance.stop(); +}; + +uCharts.prototype.addEventListener = function(type, listener) { + this.uevent.addEventListener(type, listener); +}; + +uCharts.prototype.delEventListener = function(type) { + this.uevent.delEventListener(type); +}; + +uCharts.prototype.getCurrentDataIndex = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + let _touches$ = getTouches(touches, this.opts, e); + if (this.opts.type === 'pie' || this.opts.type === 'ring') { + return findPieChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.pieData, this.opts); + } else if (this.opts.type === 'rose') { + return findRoseChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.pieData, this.opts); + } else if (this.opts.type === 'radar') { + return findRadarChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.radarData, this.opts.categories.length); + } else if (this.opts.type === 'funnel') { + return findFunnelChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.funnelData); + } else if (this.opts.type === 'map') { + return findMapChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts); + } else if (this.opts.type === 'word') { + return findWordChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.wordCloudData); + } else if (this.opts.type === 'bar') { + return findBarChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset)); + } else { + return findCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset)); + } + } + return -1; +}; + +uCharts.prototype.getLegendDataIndex = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + let _touches$ = getTouches(touches, this.opts, e); + return findLegendIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.legendData); + } + return -1; +}; + +uCharts.prototype.touchLegend = function(e) { + var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + var _touches$ = getTouches(touches, this.opts, e); + var index = this.getLegendDataIndex(e); + if (index >= 0) { + if (this.opts.type == 'candle') { + this.opts.seriesMA[index].show = !this.opts.seriesMA[index].show; + } else { + this.opts.series[index].show = !this.opts.series[index].show; + } + this.opts.animation = option.animation ? true : false; + this.opts._scrollDistance_ = this.scrollOption.currentOffset; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); + } + } + +}; + +uCharts.prototype.showToolTip = function(e) { + var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (!touches) { + console.log("[uCharts] 未获取到event坐标信息"); + } + var _touches$ = getTouches(touches, this.opts, e); + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column' || this.opts.type === 'scatter' || this.opts.type === 'bubble') { + var current = this.getCurrentDataIndex(e); + var index = option.index == undefined ? current.index : option.index; + if (index > -1 || index.length>0) { + var seriesData = getSeriesDataItem(this.opts.series, index, current.group); + if (seriesData.length !== 0) { + var _getToolTipData = getToolTipData(seriesData, this.opts, index, current.group, this.opts.categories, option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: option.textList !== undefined ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index, + group: current.group + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'mount') { + var index = option.index == undefined ? this.getCurrentDataIndex(e).index : option.index; + if (index > -1) { + var opts = assign({}, this.opts, {animation: false}); + var seriesData = assign({}, opts._series_[index]); + var textList = [{ + text: option.formatter ? option.formatter(seriesData, undefined, index, opts) : seriesData.name + ': ' + seriesData.data, + color: seriesData.color, + legendShape: this.opts.extra.tooltip.legendShape == 'auto' ? seriesData.legendShape : this.opts.extra.tooltip.legendShape + }]; + var offset = { + x: opts.chartData.calPoints[index].x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'bar') { + var current = this.getCurrentDataIndex(e); + var index = option.index == undefined ? current.index : option.index; + if (index > -1 || index.length>0) { + var seriesData = getSeriesDataItem(this.opts.series, index, current.group); + if (seriesData.length !== 0) { + var _getToolTipData = getToolTipData(seriesData, this.opts, index, current.group, this.opts.categories, option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.x = _touches$.x; + opts.tooltip = { + textList: option.textList !== undefined ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'mix') { + var current = this.getCurrentDataIndex(e); + var index = option.index == undefined ? current.index : option.index; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getMixToolTipData = getMixToolTipData(seriesData, this.opts, index, this.opts.categories, option), + textList = _getMixToolTipData.textList, + offset = _getMixToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'candle') { + var current = this.getCurrentDataIndex(e); + var index = option.index == undefined ? current.index : option.index; + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts, index, this.opts.categories, this.opts.extra.candle, option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose' || this.opts.type === 'funnel') { + var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index; + if (index > -1) { + var opts = assign({}, this.opts, {animation: false}); + var seriesData = assign({}, opts._series_[index]); + var textList = [{ + text: option.formatter ? option.formatter(seriesData, undefined, index, opts) : seriesData.name + ': ' + seriesData.data, + color: seriesData.color, + legendShape: this.opts.extra.tooltip.legendShape == 'auto' ? seriesData.legendShape : this.opts.extra.tooltip.legendShape + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'map') { + var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index; + if (index > -1) { + var opts = assign({}, this.opts, {animation: false}); + var seriesData = assign({}, this.opts.series[index]); + seriesData.name = seriesData.properties.name + var textList = [{ + text: option.formatter ? option.formatter(seriesData, undefined, index, this.opts) : seriesData.name, + color: seriesData.color, + legendShape: this.opts.extra.tooltip.legendShape == 'auto' ? seriesData.legendShape : this.opts.extra.tooltip.legendShape + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + opts.updateData = false; + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'word') { + var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index; + if (index > -1) { + var opts = assign({}, this.opts, {animation: false}); + var seriesData = assign({}, this.opts.series[index]); + var textList = [{ + text: option.formatter ? option.formatter(seriesData, undefined, index, this.opts) : seriesData.name, + color: seriesData.color, + legendShape: this.opts.extra.tooltip.legendShape == 'auto' ? seriesData.legendShape : this.opts.extra.tooltip.legendShape + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + opts.updateData = false; + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'radar') { + var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index; + if (index > -1) { + var opts = assign({}, this.opts, {animation: false}); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var textList = seriesData.map((item) => { + return { + text: option.formatter ? option.formatter(item, this.opts.categories[index], index, this.opts) : item.name + ': ' + item.data, + color: item.color, + legendShape: this.opts.extra.tooltip.legendShape == 'auto' ? item.legendShape : this.opts.extra.tooltip.legendShape + }; + }); + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: option.textList ? option.textList : textList, + offset: option.offset !== undefined ? option.offset : offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } +}; + +uCharts.prototype.translate = function(distance) { + this.scrollOption = { + currentOffset: distance, + startTouchX: distance, + distance: 0, + lastMoveTime: 0 + }; + let opts = assign({}, this.opts, { + _scrollDistance_: distance, + animation: false + }); + drawCharts.call(this, this.opts.type, opts, this.config, this.context); +}; + +uCharts.prototype.scrollStart = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + var _touches$ = getTouches(touches, this.opts, e); + if (touches && this.opts.enableScroll === true) { + this.scrollOption.startTouchX = _touches$.x; + } +}; + +uCharts.prototype.scroll = function(e) { + if (this.scrollOption.lastMoveTime === 0) { + this.scrollOption.lastMoveTime = Date.now(); + } + let Limit = this.opts.touchMoveLimit || 60; + let currMoveTime = Date.now(); + let duration = currMoveTime - this.scrollOption.lastMoveTime; + if (duration < Math.floor(1000 / Limit)) return; + if (this.scrollOption.startTouchX == 0) return; + this.scrollOption.lastMoveTime = currMoveTime; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches && this.opts.enableScroll === true) { + var _touches$ = getTouches(touches, this.opts, e); + var _distance; + _distance = _touches$.x - this.scrollOption.startTouchX; + var currentOffset = this.scrollOption.currentOffset; + var validDistance = calValidDistance(this, currentOffset + _distance, this.opts.chartData, this.config, this.opts); + this.scrollOption.distance = _distance = validDistance - currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset + _distance, + animation: false + }); + this.opts = opts; + drawCharts.call(this, opts.type, opts, this.config, this.context); + return currentOffset + _distance; + } +}; + +uCharts.prototype.scrollEnd = function(e) { + if (this.opts.enableScroll === true) { + var _scrollOption = this.scrollOption, + currentOffset = _scrollOption.currentOffset, + distance = _scrollOption.distance; + this.scrollOption.currentOffset = currentOffset + distance; + this.scrollOption.distance = 0; + this.scrollOption.moveCount = 0; + } +}; + +export default uCharts; \ No newline at end of file diff --git a/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.min.js b/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.min.js new file mode 100644 index 0000000..0902ecd --- /dev/null +++ b/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.min.js @@ -0,0 +1,18 @@ +/* + * uCharts (R) + * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360/快手)、Vue、Taro等支持canvas的框架平台 + * Copyright (C) 2021 QIUN (R) 秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * 复制使用请保留本段注释,感谢支持开源! + * + * uCharts (R) 官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ +"use strict";var config={version:"v2.5.0-20230101",yAxisWidth:15,xAxisHeight:22,padding:[10,10,10,10],rotate:false,fontSize:13,fontColor:"#666666",dataPointShape:["circle","circle","circle","circle"],color:["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],linearColor:["#0EE2F8","#2BDCA8","#FA7D8D","#EB88E2","#2AE3A0","#0EE2F8","#EB88E2","#6773E3","#F78A85"],pieChartLinePadding:15,pieChartTextPadding:5,titleFontSize:20,subtitleFontSize:15,radarLabelTextMargin:13};var assign=function(e,...t){if(e==null){throw new TypeError("[uCharts] Cannot convert undefined or null to object")}if(!t||t.length<=0){return e}function i(e,a){for(let t in a){e[t]=e[t]&&e[t].toString()==="[object Object]"?i(e[t],a[t]):e[t]=a[t]}return e}t.forEach(t=>{e=i(e,t)});return e};var util={toFixed:function t(e,a){a=a||2;if(this.isFloat(e)){e=e.toFixed(a)}return e},isFloat:function t(e){return e%1!==0},approximatelyEqual:function t(e,a){return Math.abs(e-a)<1e-10},isSameSign:function t(e,a){return Math.abs(e)===e&&Math.abs(a)===a||Math.abs(e)!==e&&Math.abs(a)!==a},isSameXCoordinateArea:function t(e,a){return this.isSameSign(e.x,a.x)},isCollision:function t(e,a){e.end={};e.end.x=e.start.x+e.width;e.end.y=e.start.y-e.height;a.end={};a.end.x=a.start.x+a.width;a.end.y=a.start.y-a.height;var i=a.start.x>e.end.x||a.end.xe.start.y||a.start.y1){if(r.extra.mount.widthRatio>2)r.extra.mount.widthRatio=2;n+=(r.extra.mount.widthRatio-1)*a.eachSpacing}var l=e;if(e>=0){l=0;t.uevent.trigger("scrollLeft");t.scrollOption.position="left";r.xAxis.scrollPosition="left"}else if(Math.abs(e)>=n-o){l=o-n;t.uevent.trigger("scrollRight");t.scrollOption.position="right";r.xAxis.scrollPosition="right"}else{t.scrollOption.position=e;r.xAxis.scrollPosition=e}return l}function isInAngleRange(t,e,a){function i(t){while(t<0){t+=2*Math.PI}while(t>2*Math.PI){t-=2*Math.PI}return t}t=i(t);e=i(e);a=i(a);if(e>a){a+=2*Math.PI;if(t=e&&t<=a}function createCurveControlPoints(t,e){function a(t,e){if(t[e-1]&&t[e+1]){return t[e].y>=Math.max(t[e-1].y,t[e+1].y)||t[e].y<=Math.min(t[e-1].y,t[e+1].y)}else{return false}}function c(t,e){if(t[e-1]&&t[e+1]){return t[e].x>=Math.max(t[e-1].x,t[e+1].x)||t[e].x<=Math.min(t[e-1].x,t[e+1].x)}else{return false}}var i=.2;var r=.2;var o=null;var n=null;var l=null;var s=null;if(e<1){o=t[0].x+(t[1].x-t[0].x)*i;n=t[0].y+(t[1].y-t[0].y)*i}else{o=t[e].x+(t[e+1].x-t[e-1].x)*i;n=t[e].y+(t[e+1].y-t[e-1].y)*i}if(e>t.length-3){var h=t.length-1;l=t[h].x-(t[h].x-t[h-1].x)*r;s=t[h].y-(t[h].y-t[h-1].y)*r}else{l=t[e+1].x-(t[e+2].x-t[e].x)*r;s=t[e+1].y-(t[e+2].y-t[e].y)*r}if(a(t,e+1)){s=t[e+1].y}if(a(t,e)){n=t[e].y}if(c(t,e+1)){l=t[e+1].x}if(c(t,e)){o=t[e].x}if(n>=Math.max(t[e].y,t[e+1].y)||n<=Math.min(t[e].y,t[e+1].y)){n=t[e].y}if(s>=Math.max(t[e].y,t[e+1].y)||s<=Math.min(t[e].y,t[e+1].y)){s=t[e+1].y}if(o>=Math.max(t[e].x,t[e+1].x)||o<=Math.min(t[e].x,t[e+1].x)){o=t[e].x}if(l>=Math.max(t[e].x,t[e+1].x)||l<=Math.min(t[e].x,t[e+1].x)){l=t[e+1].x}return{ctrA:{x:o,y:n},ctrB:{x:l,y:s}}}function convertCoordinateOrigin(t,e,a){return{x:a.x+t,y:a.y-e}}function avoidCollision(t,e){if(e){while(util.isCollision(t,e)){if(t.start.x>0){t.start.y--}else if(t.start.x<0){t.start.y++}else{if(t.start.y>0){t.start.y++}else{t.start.y--}}}}return t}function fixPieSeries(e,a,t){let i=[];if(e.length>0&&e[0].data.constructor.toString().indexOf("Array")>-1){a._pieSeries_=e;let t=e[0].data;for(var r=0;r=1e4){a=1e3}else if(i>=1e3){a=100}else if(i>=100){a=10}else if(i>=10){a=5}else if(i>=1){a=1}else if(i>=.1){a=.1}else if(i>=.01){a=.01}else if(i>=.001){a=.001}else if(i>=1e-4){a=1e-4}else if(i>=1e-5){a=1e-5}else{a=1e-6}return{minRange:findRange(t,"lower",a),maxRange:findRange(e,"upper",a)}}function measureText(a,t,e){var i=0;a=String(a);e=false;if(e!==false&&e!==undefined&&e.setFontSize&&e.measureText){e.setFontSize(t);return e.measureText(a).width}else{var a=a.split("");for(let e=0;e-1;if(n){let t=filterSeries(e);for(var l=0;l5&&arguments[5]!==undefined?arguments[5]:{};var l=a.chartData.calPoints?a.chartData.calPoints:[];let s={};if(r.length>0){let e=[];for(let t=0;t0){e=o[i]}return{text:n.formatter?n.formatter(t,e,i,a):t.name+": "+t.data,color:t.color,legendShape:a.extra.tooltip.legendShape=="auto"?t.legendShape:a.extra.tooltip.legendShape}});var h={x:Math.round(s.x),y:Math.round(s.y)};return{textList:e,offset:h}}function getMixToolTipData(t,e,a,i){var r=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var o=e.chartData.xAxisPoints[a]+e.chartData.eachSpacing/2;var n=t.map(function(t){return{text:r.formatter?r.formatter(t,i[a],a,e):t.name+": "+t.data,color:t.color,disableLegend:t.disableLegend?true:false,legendShape:e.extra.tooltip.legendShape=="auto"?t.legendShape:e.extra.tooltip.legendShape}});n=n.filter(function(t){if(t.disableLegend!==true){return t}});var l={x:Math.round(o),y:0};return{textList:n,offset:l}}function getCandleToolTipData(o,e,n,l,i,t){var r=arguments.length>6&&arguments[6]!==undefined?arguments[6]:{};var a=n.chartData.calPoints;let s=t.color.upFill;let h=t.color.downFill;let c=[s,s,h,s];var d=[];e.map(function(t){if(l==0){if(t.data[1]-t.data[0]<0){c[1]=h}else{c[1]=s}}else{if(t.data[0]o[l-1][1]){c[2]=s}if(t.data[3]4&&arguments[4]!==undefined?arguments[4]:0;var l={index:-1,group:[]};var i=e.chartData.eachSpacing/2;let r=[];if(n&&n.length>0){if(!e.categories){i=0}else{for(let t=1;tt){l.index=e}})}}}return l}function findBarChartCurrentIndex(a,t,e,i){var r=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;var o={index:-1,group:[]};var n=e.chartData.eachSpacing/2;let l=e.chartData.yAxisPoints;if(t&&t.length>0){if(isInExactChartArea(a,e,i)){l.forEach(function(t,e){if(a.y+r+n>t){o.index=e}})}}return o}function findLegendIndex(o,t,e){let n=-1;let l=0;if(isInExactLegendArea(o,t.area)){let i=t.points;let r=-1;for(let t=0,e=i.length;tt[0]-l&&o.xt[1]-l&&o.ye.start.x&&t.xe.start.y&&t.y=e.area[3]-10&&t.y>=e.area[0]&&t.y<=e.height-e.area[2]}function findRadarChartCurrentIndex(t,e,a){var r=2*Math.PI/a;var o=-1;if(isInExactPieChartArea(t,e.center,e.radius)){var n=function t(e){if(e<0){e+=2*Math.PI}if(e>2*Math.PI){e-=2*Math.PI}return e};var l=Math.atan2(e.center.y-t.y,t.x-e.center.x);l=-1*l;if(l<0){l+=2*Math.PI}var i=e.angleList.map(function(t){t=n(-1*t);return t});i.forEach(function(t,e){var a=n(t-r/2);var i=n(t+r/2);if(i=a&&l<=i||l+2*Math.PI>=a&&l+2*Math.PI<=i){o=e}})}return o}function findFunnelChartCurrentIndex(t,e){var a=-1;for(var i=0,r=e.series.length;io.funnelArea[0]&&t.xo.funnelArea[1]&&t.yo.area[0]&&t.xo.area[1]&&t.ys.width-s.area[1]-s.area[3]){i.push(n);o.push(r-s.legend.itemGap*s.pix);r=e;n=[t]}else{r+=e;n.push(t)}}if(n.length){i.push(n);o.push(r-s.legend.itemGap*s.pix);c.widthArr=o;let t=Math.max.apply(null,o);switch(s.legend.float){case"left":c.area.start.x=s.area[3];c.area.end.x=s.area[3]+t+2*d;break;case"right":c.area.start.x=s.width-s.area[1]-t-2*d;c.area.end.x=s.width-s.area[1];break;default:c.area.start.x=(s.width-t)/2-d;c.area.end.x=(s.width+t)/2+d}c.area.width=t+2*d;c.area.wholeWidth=t+2*d;c.area.height=i.length*u+2*d;c.area.wholeHeight=i.length*u+2*d+2*x;c.points=i}}else{let t=l.length;let e=s.height-s.area[0]-s.area[2]-2*x-2*d;let a=Math.min(Math.floor(e/u),t);c.area.height=a*u+d*2;c.area.wholeHeight=a*u+d*2;switch(s.legend.float){case"top":c.area.start.y=s.area[0]+x;c.area.end.y=s.area[0]+x+c.area.height;break;case"bottom":c.area.start.y=s.height-s.area[2]-x-c.area.height;c.area.end.y=s.height-s.area[2]-x;break;default:c.area.start.y=(s.height-c.area.height)/2;c.area.end.y=(s.height+c.area.height)/2}let i=t%a===0?t/a:Math.floor(t/a+1);let r=[];for(let e=0;ei){i=t}}c.widthArr.push(i);c.heightArr.push(a.length*u+d*2)}let e=0;for(let t=0;t4&&arguments[4]!==undefined?arguments[4]:-1;var i;if(c=="stack"){i=dataCombineStack(t,e.categories.length)}else{i=dataCombine(t)}var r=[];i=i.filter(function(t){if(typeof t==="object"&&t!==null){if(t.constructor.toString().indexOf("Array")>-1){return t!==null}else{return t.value!==null}}else{return t!==null}});i.map(function(t){if(typeof t==="object"){if(t.constructor.toString().indexOf("Array")>-1){if(e.type=="candle"){t.map(function(t){r.push(t)})}else{r.push(t[0])}}else{r.push(t.value)}}else{r.push(t)}});var o=0;var n=0;if(r.length>0){o=Math.min.apply(this,r);n=Math.max.apply(this,r)}if(a>-1){if(typeof e.xAxis.data[a].min==="number"){o=Math.min(e.xAxis.data[a].min,o)}if(typeof e.xAxis.data[a].max==="number"){n=Math.max(e.xAxis.data[a].max,n)}}else{if(typeof e.xAxis.min==="number"){o=Math.min(e.xAxis.min,o)}if(typeof e.xAxis.max==="number"){n=Math.max(e.xAxis.max,n)}}if(o===n){var d=n||10;n+=d}var l=o;var x=n;var f=[];var p=(x-l)/e.xAxis.splitNumber;for(var s=0;s<=e.xAxis.splitNumber;s++){f.push(l+p*s)}return f}function calXAxisData(t,e,a,i){var r=assign({},{type:""},e.extra.bar);var o={angle:0,xAxisHeight:e.xAxis.lineHeight*e.pix+e.xAxis.marginTop*e.pix};o.ranges=getXAxisTextList(t,e,a,r.type);o.rangesFormat=o.ranges.map(function(t){t=util.toFixed(t,2);return t});var n=o.ranges.map(function(t){t=util.toFixed(t,2);return t});o=Object.assign(o,getXAxisPoints(n,e,a));var l=o.eachSpacing;var s=n.map(function(t){return measureText(t,e.xAxis.fontSize*e.pix,i)});if(e.xAxis.disabled===true){o.xAxisHeight=0}return o}function getRadarDataPoints(r,o,n,a,t){var l=arguments.length>5&&arguments[5]!==undefined?arguments[5]:1;var e=t.extra.radar||{};e.max=e.max||0;var s=Math.max(e.max,Math.max.apply(null,dataCombine(a)));var h=[];for(let e=0;e2&&arguments[2]!==undefined?arguments[2]:1;var o=0;var n=0;for(let e=0;e4&&arguments[4]!==undefined?arguments[4]:1;for(let t=0;t4&&arguments[4]!==undefined?arguments[4]:1;var l=0;var s=0;var h=[];for(let e=0;e2&&arguments[2]!==undefined?arguments[2]:1;if(o==1){o=.999999}for(let a=0;a=2){t._proportion_=t._proportion_%2}}return i}function getGaugeArcbarDataPoints(i,r){var o=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;if(o==1){o=.999999}for(let a=0;a=2){t._proportion_=t._proportion_%2}}return i}function getGaugeAxisPoints(e,a,t){let i;if(t=2){e[t]._endAngle_=e[t]._endAngle_%2}r=e[t]._endAngle_}return e}function getGaugeDataPoints(i,r,o){let n=arguments.length>3&&arguments[3]!==undefined?arguments[3]:1;for(let a=0;a=o.oldData){e._proportion_=(e._endAngle_-e._oldAngle_)*n+o.oldAngle}else{e._proportion_=e._oldAngle_-(e._oldAngle_-e._endAngle_)*n}if(e._proportion_>=2){e._proportion_=e._proportion_%2}}return i}function getPieTextMaxLength(i,r,o,n){i=getPieDataPoints(i);let l=0;for(let a=0;a0){t.width=Math.min(t.width,+n.extra.mix.column.width*n.pix)}if(n.extra.column&&n.extra.column.width&&+n.extra.column.width>0){t.width=Math.min(t.width,+n.extra.column.width*n.pix)}if(t.width<=0){t.width=1}t.x+=(o+.5-r/2)*(t.width+e);return t})}function fixBarData(t,i,r,o,e,n){return t.map(function(t){if(t===null){return null}var e=0;var a=0;e=n.extra.bar.seriesGap*n.pix||0;a=n.extra.bar.categoryGap*n.pix||0;e=Math.min(e,i/r);a=Math.min(a,i/r);t.width=Math.ceil((i-2*a-e*(r-1))/r);if(n.extra.bar&&n.extra.bar.width&&+n.extra.bar.width>0){t.width=Math.min(t.width,+n.extra.bar.width*n.pix)}if(t.width<=0){t.width=1}t.y+=(o+.5-r/2)*(t.width+e);return t})}function fixColumeMeterData(t,e,a,i,r,o,n){var l=o.extra.column.categoryGap*o.pix||0;return t.map(function(t){if(t===null){return null}t.width=e-2*l;if(o.extra.column&&o.extra.column.width&&+o.extra.column.width>0){t.width=Math.min(t.width,+o.extra.column.width*o.pix)}if(i>0){t.width-=n}return t})}function fixColumeStackData(t,a,e,i,r,o,n){var l=o.extra.column.categoryGap*o.pix||0;return t.map(function(t,e){if(t===null){return null}t.width=Math.ceil(a-2*l);if(o.extra.column&&o.extra.column.width&&+o.extra.column.width>0){t.width=Math.min(t.width,+o.extra.column.width*o.pix)}if(t.width<=0){t.width=1}return t})}function fixBarStackData(t,a,e,i,r,o,n){var l=o.extra.bar.categoryGap*o.pix||0;return t.map(function(t,e){if(t===null){return null}t.width=Math.ceil(a-2*l);if(o.extra.bar&&o.extra.bar.width&&+o.extra.bar.width>0){t.width=Math.min(t.width,+o.extra.bar.width*o.pix)}if(t.width<=0){t.width=1}return t})}function getXAxisPoints(t,e,h){var a=e.width-e.area[1]-e.area[3];var i=e.enableScroll?Math.min(e.xAxis.itemCount,t.length):t.length;if((e.type=="line"||e.type=="area"||e.type=="scatter"||e.type=="bubble"||e.type=="bar")&&i>1&&e.xAxis.boundaryGap=="justify"){i-=1}var r=0;if(e.type=="mount"&&e.extra&&e.extra.mount&&e.extra.mount.widthRatio&&e.extra.mount.widthRatio>1){if(e.extra.mount.widthRatio>2)e.extra.mount.widthRatio=2;r=e.extra.mount.widthRatio-1;i+=r}var o=a/i;var n=[];var l=e.area[3];var s=e.width-e.area[1];t.forEach(function(t,e){n.push(l+r/2*o+e*o)});if(e.xAxis.boundaryGap!=="justify"){if(e.enableScroll===true){n.push(l+r*o+t.length*o)}else{n.push(s)}}return{xAxisPoints:n,startX:l,endX:s,eachSpacing:o}}function getCandleDataPoints(t,l,s,h,c,d,a){var x=arguments.length>7&&arguments[7]!==undefined?arguments[7]:1;var e=[];var f=d.height-d.area[0]-d.area[2];t.forEach(function(t,o){if(t===null){e.push(null)}else{var n=[];t.forEach(function(t,e){var a={};a.x=h[o]+Math.round(c/2);var i=t.value||t;var r=f*(i-l)/(s-l);r*=x;a.y=d.height-Math.round(r)-d.area[2];n.push(a)});e.push(n)}});return e}function getDataPoints(t,a,n,l,s,h,e){var c=arguments.length>7&&arguments[7]!==undefined?arguments[7]:1;var d="center";if(h.type=="line"||h.type=="area"||h.type=="scatter"||h.type=="bubble"){d=h.xAxis.boundaryGap}var x=[];var f=h.height-h.area[0]-h.area[2];var p=h.width-h.area[1]-h.area[3];t.forEach(function(i,t){if(i===null){x.push(null)}else{var r={};r.color=i.color;r.x=l[t];var o=i;if(typeof i==="object"&&i!==null){if(i.constructor.toString().indexOf("Array")>-1){let t,e,a;t=[].concat(h.chartData.xAxisData.ranges);e=t.shift();a=t.pop();o=i[1];r.x=h.area[3]+p*(i[0]-e)/(a-e);if(h.type=="bubble"){r.r=i[2];r.t=i[3]}}else{o=i.value}}if(d=="center"){r.x+=s/2}var e=f*(o-a)/(n-a);e*=c;r.y=h.height-e-h.area[2];x.push(r)}});return x}function getLineDataPoints(t,a,n,l,s,h,e,p,c){var c=arguments.length>8&&arguments[8]!==undefined?arguments[8]:1;var d=h.xAxis.boundaryGap;var x=[];var f=h.height-h.area[0]-h.area[2];var u=h.width-h.area[1]-h.area[3];t.forEach(function(i,t){if(i===null){x.push(null)}else{var r={};r.color=i.color;if(p.animation=="vertical"){r.x=l[t];var o=i;if(typeof i==="object"&&i!==null){if(i.constructor.toString().indexOf("Array")>-1){let t,e,a;t=[].concat(h.chartData.xAxisData.ranges);e=t.shift();a=t.pop();o=i[1];r.x=h.area[3]+u*(i[0]-e)/(a-e)}else{o=i.value}}if(d=="center"){r.x+=s/2}var e=f*(o-a)/(n-a);e*=c;r.y=h.height-e-h.area[2];x.push(r)}else{r.x=l[0]+s*t*c;var o=i;if(d=="center"){r.x+=s/2}var e=f*(o-a)/(n-a);r.y=h.height-e-h.area[2];x.push(r)}}});return x}function getColumnDataPoints(t,a,n,l,s,h,e,i,c){var c=arguments.length>8&&arguments[8]!==undefined?arguments[8]:1;var d=[];var x=h.height-h.area[0]-h.area[2];var f=h.width-h.area[1]-h.area[3];t.forEach(function(i,t){if(i===null){d.push(null)}else{var r={};r.color=i.color;r.x=l[t];var o=i;if(typeof i==="object"&&i!==null){if(i.constructor.toString().indexOf("Array")>-1){let t,e,a;t=[].concat(h.chartData.xAxisData.ranges);e=t.shift();a=t.pop();o=i[1];r.x=h.area[3]+f*(i[0]-e)/(a-e)}else{o=i.value}}r.x+=s/2;var e=x*(o*c-a)/(n-a);r.y=h.height-e-h.area[2];d.push(r)}});return d}function getMountDataPoints(t,o,n,l,s,h,e,a){var c=arguments.length>8&&arguments[8]!==undefined?arguments[8]:1;var d=[];var x=h.height-h.area[0]-h.area[2];var i=h.width-h.area[1]-h.area[3];var f=s*e.widthRatio;t.forEach(function(t,e){if(t===null){d.push(null)}else{var a={};a.color=t.color;a.x=l[e];a.x+=s/2;var i=t.data;var r=x*(i*c-o)/(n-o);a.y=h.height-r-h.area[2];a.value=i;a.width=f;d.push(a)}});return d}function getBarDataPoints(t,o,n,l,e,s,a){var h=arguments.length>7&&arguments[7]!==undefined?arguments[7]:1;var c=[];var i=s.height-s.area[0]-s.area[2];var d=s.width-s.area[1]-s.area[3];t.forEach(function(t,e){if(t===null){c.push(null)}else{var a={};a.color=t.color;a.y=l[e];var i=t;if(typeof t==="object"&&t!==null){i=t.value}var r=d*(i-o)/(n-o);r*=h;a.height=r;a.value=i;a.x=r+s.area[3];c.push(a)}});return c}function getStackDataPoints(t,s,h,c,g,d,e,x,y){var f=arguments.length>9&&arguments[9]!==undefined?arguments[9]:1;var p=[];var u=d.height-d.area[0]-d.area[2];t.forEach(function(t,e){if(t===null){p.push(null)}else{var a={};a.color=t.color;a.x=c[e]+Math.round(g/2);if(x>0){var i=0;for(let t=0;t<=x;t++){i+=y[t].data[e]}var r=i-t;var o=u*(i-s)/(h-s);var n=u*(r-s)/(h-s)}else{var i=t;if(typeof t==="object"&&t!==null){i=t.value}var o=u*(i-s)/(h-s);var n=0}var l=n;o*=f;l*=f;a.y=d.height-Math.round(o)-d.area[2];a.y0=d.height-Math.round(l)-d.area[2];p.push(a)}});return p}function getBarStackDataPoints(t,s,h,c,e,d,a,x,g){var f=arguments.length>9&&arguments[9]!==undefined?arguments[9]:1;var p=[];var u=d.width-d.area[1]-d.area[3];t.forEach(function(t,e){if(t===null){p.push(null)}else{var a={};a.color=t.color;a.y=c[e];if(x>0){var i=0;for(let t=0;t<=x;t++){i+=g[t].data[e]}var r=i-t;var o=u*(i-s)/(h-s);var n=u*(r-s)/(h-s)}else{var i=t;if(typeof t==="object"&&t!==null){i=t.value}var o=u*(i-s)/(h-s);var n=0}var l=n;o*=f;l*=f;a.height=o-l;a.x=d.area[3]+o;a.x0=d.area[3]+l;p.push(a)}});return p}function getYAxisTextList(t,e,h,c,a){var d=arguments.length>5&&arguments[5]!==undefined?arguments[5]:-1;var i;if(c=="stack"){i=dataCombineStack(t,e.categories.length)}else{i=dataCombine(t)}var r=[];i=i.filter(function(t){if(typeof t==="object"&&t!==null){if(t.constructor.toString().indexOf("Array")>-1){return t!==null}else{return t.value!==null}}else{return t!==null}});i.map(function(t){if(typeof t==="object"){if(t.constructor.toString().indexOf("Array")>-1){if(e.type=="candle"){t.map(function(t){r.push(t)})}else{r.push(t[1])}}else{r.push(t.value)}}else{r.push(t)}});var o=a.min||0;var n=a.max||0;if(r.length>0){o=Math.min.apply(this,r);n=Math.max.apply(this,r)}if(o===n){if(n==0){n=10}else{o=0}}var l=getDataRange(o,n);var x=a.min===undefined||a.min===null?l.minRange:a.min;var f=a.max===undefined||a.max===null?l.maxRange:a.max;var p=(f-x)/e.yAxis.splitNumber;var u=[];for(var s=0;s<=e.yAxis.splitNumber;s++){u.push(x+p*s)}return u.reverse()}function calYAxisData(a,o,e,n){var l=assign({},{type:""},o.extra.column);var t=o.yAxis.data.length;var s=new Array(t);if(t>0){for(let e=0;e{return t+(i.unit||"")}}i.categories=i.categories||o.categories;h[r]=i.categories}else{if(!i.formatter){i.formatter=(t,e,a)=>{return util.toFixed(t,i.tofix||0)+(i.unit||"")}}h[r]=getYAxisTextList(s[r],o,e,l.type,i,r)}let a=i.fontSize*o.pix||e.fontSize;d[r]={position:i.position?i.position:"left",width:0};c[r]=h[r].map(function(t,e){t=i.formatter(t,e,o);d[r].width=Math.max(d[r].width,measureText(t,a,n)+5);return t});let t=i.calibration?4*o.pix:0;d[r].width+=t+3*o.pix;if(i.disabled===true){d[r].width=0}}}else{var h=new Array(1);var c=new Array(1);var d=new Array(1);if(o.type==="bar"){h[0]=o.categories;if(!o.yAxis.formatter){o.yAxis.formatter=(t,e,a)=>{return t+(a.yAxis.unit||"")}}}else{if(!o.yAxis.formatter){o.yAxis.formatter=(t,e,a)=>{return t.toFixed(a.yAxis.tofix)+(a.yAxis.unit||"")}}h[0]=getYAxisTextList(a,o,e,l.type,{})}d[0]={position:"left",width:0};var i=o.yAxis.fontSize*o.pix||e.fontSize;c[0]=h[0].map(function(t,e){t=o.yAxis.formatter(t,e,o);d[0].width=Math.max(d[0].width,measureText(t,i,n)+5);return t});d[0].width+=3*o.pix;if(o.yAxis.disabled===true){d[0]={position:"left",width:0};o.yAxis.data[0]={disabled:true}}else{o.yAxis.data[0]={disabled:false,position:"left",max:o.yAxis.max,min:o.yAxis.min,formatter:o.yAxis.formatter};if(o.type==="bar"){o.yAxis.data[0].categories=o.categories;o.yAxis.data[0].type="categories"}}}return{rangesFormat:c,ranges:h,yAxisWidth:d}}function calTooltipYAxisData(r,t,o,e,a){let n=[].concat(o.chartData.yAxisData.ranges);let l=o.height-o.area[0]-o.area[2];let s=o.area[0];let h=[];for(let i=0;i0&&r.tooltip.group.includes(n)==false){return}var l=typeof r.tooltip.index==="number"?r.tooltip.index:r.tooltip.index[r.tooltip.group.indexOf(n)];i.beginPath();if(o.activeType=="hollow"){i.setStrokeStyle(e);i.setFillStyle(r.background);i.setLineWidth(2*r.pix)}else{i.setStrokeStyle("#ffffff");i.setFillStyle(e);i.setLineWidth(1*r.pix)}if(a==="diamond"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x,t.y-4.5);i.lineTo(t.x-4.5,t.y);i.lineTo(t.x,t.y+4.5);i.lineTo(t.x+4.5,t.y);i.lineTo(t.x,t.y-4.5)}})}else if(a==="circle"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x+2.5*r.pix,t.y);i.arc(t.x,t.y,3*r.pix,0,2*Math.PI,false)}})}else if(a==="square"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x-3.5,t.y-3.5);i.rect(t.x-3.5,t.y-3.5,7,7)}})}else if(a==="triangle"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x,t.y-4.5);i.lineTo(t.x-4.5,t.y+4.5);i.lineTo(t.x+4.5,t.y+4.5);i.lineTo(t.x,t.y-4.5)}})}else if(a==="none"){return}i.closePath();i.fill();i.stroke()}function drawRingTitle(t,e,a,i){var r=t.title.fontSize||e.titleFontSize;var o=t.subtitle.fontSize||e.subtitleFontSize;var n=t.title.name||"";var l=t.subtitle.name||"";var c=t.title.color||t.fontColor;var d=t.subtitle.color||t.fontColor;var x=n?r:0;var f=l?o:0;var s=5;if(l){var p=measureText(l,o*t.pix,a);var u=i.x-p/2+(t.subtitle.offsetX||0)*t.pix;var h=i.y+o*t.pix/2+(t.subtitle.offsetY||0)*t.pix;if(n){h+=(x*t.pix+s)/2}a.beginPath();a.setFontSize(o*t.pix);a.setFillStyle(d);a.fillText(l,u,h);a.closePath();a.stroke()}if(n){var g=measureText(n,r*t.pix,a);var y=i.x-g/2+(t.title.offsetX||0);var v=i.y+r*t.pix/2+(t.title.offsetY||0)*t.pix;if(l){v-=(f*t.pix+s)/2}a.beginPath();a.setFontSize(r*t.pix);a.setFillStyle(c);a.fillText(n,y,v);a.closePath();a.stroke()}}function drawPointText(t,o,n,l,s){var h=o.data;var c=o.textOffset?o.textOffset:0;t.forEach(function(t,e){if(t!==null){l.beginPath();var a=o.textSize?o.textSize*s.pix:n.fontSize;l.setFontSize(a);l.setFillStyle(o.textColor||s.fontColor);var i=h[e];if(typeof h[e]==="object"&&h[e]!==null){if(h[e].constructor.toString().indexOf("Array")>-1){i=h[e][1]}else{i=h[e].value}}var r=o.formatter?o.formatter(i,e,o,s):i;l.setTextAlign("center");l.fillText(String(r),t.x,t.y-4+c*s.pix);l.closePath();l.stroke();l.setTextAlign("left")}})}function drawColumePointText(t,n,l,s,h){var c=n.data;var d=n.textOffset?n.textOffset:0;var x=h.extra.column.labelPosition;t.forEach(function(t,e){if(t!==null){s.beginPath();var a=n.textSize?n.textSize*h.pix:l.fontSize;s.setFontSize(a);s.setFillStyle(n.textColor||h.fontColor);var i=c[e];if(typeof c[e]==="object"&&c[e]!==null){if(c[e].constructor.toString().indexOf("Array")>-1){i=c[e][1]}else{i=c[e].value}}var r=n.formatter?n.formatter(i,e,n,h):i;s.setTextAlign("center");var o=t.y-4*h.pix+d*h.pix;if(t.y>n.zeroPoints){o=t.y+d*h.pix+a}if(x=="insideTop"){o=t.y+a+d*h.pix;if(t.y>n.zeroPoints){o=t.y-d*h.pix-4*h.pix}}if(x=="center"){o=t.y+d*h.pix+(h.height-h.area[2]-t.y+a)/2;if(n.zeroPointsn.zeroPoints){o=t.y-d*h.pix-(t.y-n.zeroPoints-a)/2}if(h.extra.column.type=="stack"){o=t.y+d*h.pix+(t.y0-t.y+a)/2}}if(x=="bottom"){o=h.height-h.area[2]+d*h.pix-4*h.pix;if(n.zeroPointsn.zeroPoints){o=n.zeroPoints-d*h.pix+a+2*h.pix}if(h.extra.column.type=="stack"){o=t.y0+d*h.pix-4*h.pix}}s.fillText(String(r),t.x,o);s.closePath();s.stroke();s.setTextAlign("left")}})}function drawMountPointText(t,n,l,s,h,c){var e=n.data;var d=n.textOffset?n.textOffset:0;var a=h.extra.mount.labelPosition;t.forEach(function(t,e){if(t!==null){s.beginPath();var a=n[e].textSize?n[e].textSize*h.pix:l.fontSize;s.setFontSize(a);s.setFillStyle(n[e].textColor||h.fontColor);var i=t.value;var r=n[e].formatter?n[e].formatter(i,e,n,h):i;s.setTextAlign("center");var o=t.y-4*h.pix+d*h.pix;if(t.y>c){o=t.y+d*h.pix+a}s.fillText(String(r),t.x,o);s.closePath();s.stroke();s.setTextAlign("left")}})}function drawBarPointText(t,o,n,l,s){var h=o.data;var e=o.textOffset?o.textOffset:0;t.forEach(function(t,e){if(t!==null){l.beginPath();var a=o.textSize?o.textSize*s.pix:n.fontSize;l.setFontSize(a);l.setFillStyle(o.textColor||s.fontColor);var i=h[e];if(typeof h[e]==="object"&&h[e]!==null){i=h[e].value}var r=o.formatter?o.formatter(i,e,o,s):i;l.setTextAlign("left");l.fillText(String(r),t.x+4*s.pix,t.y+a/2-3);l.closePath();l.stroke()}})}function drawGaugeLabel(e,a,i,r,o,n){a-=e.width/2+e.labelOffset*r.pix;a=a<10?10:a;let t;if(e.endAngle=2){l=l%2}s+=x}}function drawRadarLabel(t,s,h,c,d,x){var f=c.extra.radar||{};t.forEach(function(t,e){if(f.labelPointShow===true&&c.categories[e]!==""){var a={x:s*Math.cos(t),y:s*Math.sin(t)};var i=convertCoordinateOrigin(a.x,a.y,h);x.setFillStyle(f.labelPointColor);x.beginPath();x.arc(i.x,i.y,f.labelPointRadius*c.pix,0,2*Math.PI,false);x.closePath();x.fill()}if(f.labelShow===true){var r={x:(s+d.radarLabelTextMargin*c.pix)*Math.cos(t),y:(s+d.radarLabelTextMargin*c.pix)*Math.sin(t)};var o=convertCoordinateOrigin(r.x,r.y,h);var n=o.x;var l=o.y;if(util.approximatelyEqual(r.x,0)){n-=measureText(c.categories[e]||"",d.fontSize,x)/2}else if(r.x<0){n-=measureText(c.categories[e]||"",d.fontSize,x)}x.beginPath();x.setFontSize(d.fontSize);x.setFillStyle(f.labelColor||c.fontColor);x.fillText(c.categories[e]||"",n,l+d.fontSize/2);x.closePath();x.stroke()}})}function drawPieText(n,d,x,f,t,l){var p=x.pieChartLinePadding;var u=[];var g=null;var y=n.map(function(t,e){var a=t.formatter?t.formatter(t,e,n,d):util.toFixed(t._proportion_.toFixed(4)*100)+"%";a=t.labelText?t.labelText:a;var i=2*Math.PI-(t._start_+2*Math.PI*t._proportion_/2);if(t._rose_proportion_){i=2*Math.PI-(t._start_+2*Math.PI*t._rose_proportion_/2)}var r=t.color;var o=t._radius_;return{arc:i,text:a,color:r,radius:o,textColor:t.textColor,textSize:t.textSize,labelShow:t.labelShow}});for(let c=0;c=0?e+x.pieChartTextPadding:e-x.pieChartTextPadding;let n=a;let l=measureText(t.text,t.textSize*d.pix||x.fontSize,f);let s=n;if(g&&util.isSameXCoordinateArea(g.start,{x:o})){if(o>0){s=Math.min(n,g.start.y)}else if(e<0){s=Math.max(n,g.start.y)}else{if(n>0){s=Math.max(n,g.start.y)}else{s=Math.min(n,g.start.y)}}}if(o<0){o-=l}let h={lineStart:{x:i,y:r},lineEnd:{x:e,y:a},start:{x:o,y:s},width:l,height:x.fontSize,text:t.text,color:t.color,textColor:t.textColor,textSize:t.textSize};g=avoidCollision(h,g);u.push(g)}for(let n=0;nr?r:o.activeWidth;var n=e.area[0];var l=e.height-e.area[2];i.beginPath();i.setFillStyle(hexToRgb(o.activeBgColor,o.activeBgOpacity));i.rect(t-o.activeWidth/2,n,o.activeWidth,l-n);i.closePath();i.fill();i.setFillStyle("#FFFFFF")}function drawBarToolTipSplitArea(t,e,a,i,r){var o=assign({},{activeBgColor:"#000000",activeBgOpacity:.08},e.extra.bar);var n=e.area[3];var l=e.width-e.area[1];i.beginPath();i.setFillStyle(hexToRgb(o.activeBgColor,o.activeBgOpacity));i.rect(n,t-r/2,l-n,r);i.closePath();i.fill();i.setFillStyle("#FFFFFF")}function drawToolTip(e,r,o,a,n,i,f){var l=assign({},{showBox:true,showArrow:true,showCategory:false,bgColor:"#000000",bgOpacity:.7,borderColor:"#000000",borderWidth:0,borderRadius:0,borderOpacity:.7,boxPadding:3,fontColor:"#FFFFFF",fontSize:13,lineHeight:20,legendShow:true,legendShape:"auto",splitLine:true},o.extra.tooltip);if(l.showCategory==true&&o.categories){e.unshift({text:o.categories[o.tooltip.index],color:null})}var s=l.fontSize*o.pix;var p=l.lineHeight*o.pix;var h=l.boxPadding*o.pix;var c=s;var u=5*o.pix;if(l.legendShow==false){c=0;u=0}var d=l.showArrow?8*o.pix:0;var g=false;if(o.type=="line"||o.type=="mount"||o.type=="area"||o.type=="candle"||o.type=="mix"){if(l.splitLine==true){drawToolTipSplitLine(o.tooltip.offset.x,o,a,n)}}r=assign({x:0,y:0},r);r.y-=8*o.pix;var y=e.map(function(t){return measureText(t.text,s,n)});var x=c+u+4*h+Math.max.apply(null,y);var v=2*h+e.length*p;if(l.showBox==false){return}if(r.x-Math.abs(o._scrollDistance_||0)+d+x>o.width){g=true}if(v+r.y>o.height){r.y=o.height-v}n.beginPath();n.setFillStyle(hexToRgb(l.bgColor,l.bgOpacity));n.setLineWidth(l.borderWidth*o.pix);n.setStrokeStyle(hexToRgb(l.borderColor,l.borderOpacity));var t=l.borderRadius;if(g){if(x+d>o.width){r.x=o.width+Math.abs(o._scrollDistance_||0)+d+(x-o.width)}if(x>r.x){r.x=o.width+Math.abs(o._scrollDistance_||0)+d+(x-o.width)}if(l.showArrow){n.moveTo(r.x,r.y+10*o.pix);n.lineTo(r.x-d,r.y+10*o.pix+5*o.pix)}n.arc(r.x-d-t,r.y+v-t,t,0,Math.PI/2,false);n.arc(r.x-d-Math.round(x)+t,r.y+v-t,t,Math.PI/2,Math.PI,false);n.arc(r.x-d-Math.round(x)+t,r.y+t,t,-Math.PI,-Math.PI/2,false);n.arc(r.x-d-t,r.y+t,t,-Math.PI/2,0,false);if(l.showArrow){n.lineTo(r.x-d,r.y+10*o.pix-5*o.pix);n.lineTo(r.x,r.y+10*o.pix)}}else{if(l.showArrow){n.moveTo(r.x,r.y+10*o.pix);n.lineTo(r.x+d,r.y+10*o.pix-5*o.pix)}n.arc(r.x+d+t,r.y+t,t,-Math.PI,-Math.PI/2,false);n.arc(r.x+d+Math.round(x)-t,r.y+t,t,-Math.PI/2,0,false);n.arc(r.x+d+Math.round(x)-t,r.y+v-t,t,0,Math.PI/2,false);n.arc(r.x+d+t,r.y+v-t,t,Math.PI/2,Math.PI,false);if(l.showArrow){n.lineTo(r.x+d,r.y+10*o.pix+5*o.pix);n.lineTo(r.x,r.y+10*o.pix)}}n.closePath();n.fill();if(l.borderWidth>0){n.stroke()}if(l.legendShow){e.forEach(function(t,e){if(t.color!==null){n.beginPath();n.setFillStyle(t.color);var a=r.x+d+2*h;var i=r.y+(p-s)/2+p*e+h+1;if(g){a=r.x-x-d+2*h}switch(t.legendShape){case"line":n.moveTo(a,i+.5*c-2*o.pix);n.fillRect(a,i+.5*c-2*o.pix,c,4*o.pix);break;case"triangle":n.moveTo(a+7.5*o.pix,i+.5*c-5*o.pix);n.lineTo(a+2.5*o.pix,i+.5*c+5*o.pix);n.lineTo(a+12.5*o.pix,i+.5*c+5*o.pix);n.lineTo(a+7.5*o.pix,i+.5*c-5*o.pix);break;case"diamond":n.moveTo(a+7.5*o.pix,i+.5*c-5*o.pix);n.lineTo(a+2.5*o.pix,i+.5*c);n.lineTo(a+7.5*o.pix,i+.5*c+5*o.pix);n.lineTo(a+12.5*o.pix,i+.5*c);n.lineTo(a+7.5*o.pix,i+.5*c-5*o.pix);break;case"circle":n.moveTo(a+7.5*o.pix,i+.5*c);n.arc(a+7.5*o.pix,i+.5*c,5*o.pix,0,2*Math.PI);break;case"rect":n.moveTo(a,i+.5*c-5*o.pix);n.fillRect(a,i+.5*c-5*o.pix,15*o.pix,10*o.pix);break;case"square":n.moveTo(a+2*o.pix,i+.5*c-5*o.pix);n.fillRect(a+2*o.pix,i+.5*c-5*o.pix,10*o.pix,10*o.pix);break;default:n.moveTo(a,i+.5*c-5*o.pix);n.fillRect(a,i+.5*c-5*o.pix,15*o.pix,10*o.pix)}n.closePath();n.fill()}})}e.forEach(function(t,e){var a=r.x+d+2*h+c+u;if(g){a=r.x-x-d+2*h+c+u}var i=r.y+p*e+(p-s)/2-1+h+s;n.beginPath();n.setFontSize(s);n.setTextBaseline("normal");n.setFillStyle(l.fontColor);n.fillText(t.text,a,i);n.closePath();n.stroke()})}function drawColumnDataPoints(T,b,S,w){let A=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let t=b.chartData.xAxisData,P=t.xAxisPoints,C=t.eachSpacing;let D=assign({},{type:"group",width:C/2,meterBorder:4,meterFillColor:"#FFFFFF",barBorderCircle:false,barBorderRadius:[],seriesGap:2,linearType:"none",linearOpacity:1,customColor:[],colorStop:0,labelPosition:"outside"},b.extra.column);let M=[];w.save();let L=-2;let F=P.length+2;if(b._scrollDistance_&&b._scrollDistance_!==0&&b.enableScroll===true){w.translate(b._scrollDistance_,0);L=Math.floor(-b._scrollDistance_/C)-2;F=L+b.xAxis.itemCount+4}if(b.tooltip&&b.tooltip.textList&&b.tooltip.textList.length&&A===1){drawToolTipSplitArea(b.tooltip.offset.x,b,S,w,C)}D.customColor=fillCustomColor(D.linearType,D.customColor,T,S);T.forEach(function(a,i){let e,t,o;e=[].concat(b.chartData.yAxisData.ranges[a.index]);t=e.pop();o=e.shift();let x=b.height-b.area[0]-b.area[2];let f=x*(0-t)/(o-t);let n=b.height-Math.round(f)-b.area[2];a.zeroPoints=n;var p=a.data;switch(D.type){case"group":var r=getColumnDataPoints(p,t,o,P,C,b,S,n,A);var u=getStackDataPoints(p,t,o,P,C,b,S,i,T,A);M.push(u);r=fixColumeData(r,C,T.length,i,S,b);for(let t=0;tL&&tn?n:o.y;const d=o.width;const s=Math.abs(n-o.y);if(D.barBorderCircle){D.barBorderRadius=[d/2,d/2,0,0]}if(o.y>n){D.barBorderRadius=[0,0,d/2,d/2]}let[t,e,a,i]=D.barBorderRadius;let r=Math.min(d/2,s/2);t=t>r?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;w.arc(h+t,c+t,t,-Math.PI,-Math.PI/2);w.arc(h+d-e,c+e,e,-Math.PI/2,0);w.arc(h+d-a,c+s-a,a,0,Math.PI/2);w.arc(h+i,c+s-i,i,Math.PI/2,Math.PI)}else{w.moveTo(l,o.y);w.lineTo(l+o.width,o.y);w.lineTo(l+o.width,n);w.lineTo(l,n);w.lineTo(l,o.y);w.setLineWidth(1);w.setStrokeStyle(y)}w.setFillStyle(g);w.closePath();w.fill()}};break;case"stack":var r=getStackDataPoints(p,t,o,P,C,b,S,i,T,A);M.push(r);r=fixColumeStackData(r,C,T.length,i,S,b,T);for(let e=0;eL&&e0){s-=m}w.setFillStyle(g);w.moveTo(l,t.y);w.fillRect(l,t.y,t.width,s);w.closePath();w.fill()}};break;case"meter":var r=getDataPoints(p,t,o,P,C,b,S,A);M.push(r);r=fixColumeMeterData(r,C,T.length,i,S,b,D.meterBorder);for(let t=0;tL&&t0){w.setStrokeStyle(a.color);w.setLineWidth(D.meterBorder*b.pix)}if(i==0){w.setFillStyle(D.meterFillColor)}else{w.setFillStyle(o.color||a.color)}var l=o.x-o.width/2;var s=b.height-o.y-b.area[2];if(D.barBorderRadius&&D.barBorderRadius.length===4||D.barBorderCircle===true){const h=l;const c=o.y;const d=o.width;const s=n-o.y;if(D.barBorderCircle){D.barBorderRadius=[d/2,d/2,0,0]}let[t,e,a,i]=D.barBorderRadius;let r=Math.min(d/2,s/2);t=t>r?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;w.arc(h+t,c+t,t,-Math.PI,-Math.PI/2);w.arc(h+d-e,c+e,e,-Math.PI/2,0);w.arc(h+d-a,c+s-a,a,0,Math.PI/2);w.arc(h+i,c+s-i,i,Math.PI/2,Math.PI);w.fill()}else{w.moveTo(l,o.y);w.lineTo(l+o.width,o.y);w.lineTo(l+o.width,n);w.lineTo(l,n);w.lineTo(l,o.y);w.fill()}if(i==0&&D.meterBorder>0){w.closePath();w.stroke()}}}break}});if(b.dataLabel!==false&&A===1){T.forEach(function(t,e){let a,i,r;a=[].concat(b.chartData.yAxisData.ranges[t.index]);i=a.pop();r=a.shift();var o=t.data;switch(D.type){case"group":var n=getColumnDataPoints(o,i,r,P,C,b,S,A);n=fixColumeData(n,C,T.length,e,S,b);drawColumePointText(n,t,S,w,b);break;case"stack":var n=getStackDataPoints(o,i,r,P,C,b,S,e,T,A);drawColumePointText(n,t,S,w,b);break;case"meter":var n=getDataPoints(o,i,r,P,C,b,S,A);drawColumePointText(n,t,S,w,b);break}})}w.restore();return{xAxisPoints:P,calPoints:M,eachSpacing:C}}function drawMountDataPoints(i,r,o,n){let f=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let t=r.chartData.xAxisData,p=t.xAxisPoints,l=t.eachSpacing;let s=assign({},{type:"mount",widthRatio:1,borderWidth:1,barBorderCircle:false,barBorderRadius:[],linearType:"none",linearOpacity:1,customColor:[],colorStop:0},r.extra.mount);s.widthRatio=s.widthRatio<=0?0:s.widthRatio;s.widthRatio=s.widthRatio>=2?2:s.widthRatio;let e=[];n.save();let u=-2;let g=p.length+2;if(r._scrollDistance_&&r._scrollDistance_!==0&&r.enableScroll===true){n.translate(r._scrollDistance_,0);u=Math.floor(-r._scrollDistance_/l)-2;g=u+r.xAxis.itemCount+4}s.customColor=fillCustomColor(s.linearType,s.customColor,i,o);let y,v,m;y=[].concat(r.chartData.yAxisData.ranges[0]);v=y.pop();m=y.shift();let T=r.height-r.area[0]-r.area[2];let b=T*(0-v)/(m-v);let h=r.height-Math.round(b)-r.area[2];var c=getMountDataPoints(i,v,m,p,l,r,s,h,f);switch(s.type){case"bar":for(let t=0;tu&&th?h:o.y;const C=o.width;const S=Math.abs(h-o.y);if(s.barBorderCircle){s.barBorderRadius=[C/2,C/2,0,0]}if(o.y>h){s.barBorderRadius=[0,0,C/2,C/2]}let[t,e,a,i]=s.barBorderRadius;let r=Math.min(C/2,S/2);t=t>r?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;n.arc(A+t,P+t,t,-Math.PI,-Math.PI/2);n.arc(A+C-e,P+e,e,-Math.PI/2,0);n.arc(A+C-a,P+S-a,a,0,Math.PI/2);n.arc(A+i,P+S-i,i,Math.PI/2,Math.PI)}else{n.moveTo(d,o.y);n.lineTo(d+o.width,o.y);n.lineTo(d+o.width,h);n.lineTo(d,h);n.lineTo(d,o.y)}n.setStrokeStyle(w);n.setFillStyle(a);if(s.borderWidth>0){n.setLineWidth(s.borderWidth*r.pix);n.closePath();n.stroke()}n.fill()}};break;case"triangle":for(let e=0;eu&&e0){n.setLineWidth(s.borderWidth*r.pix);n.stroke()}n.fill()}};break;case"mount":for(let e=0;eu&&e0){n.setLineWidth(s.borderWidth*r.pix);n.stroke()}n.fill()}};break;case"sharp":for(let e=0;eu&&e0){n.setLineWidth(s.borderWidth*r.pix);n.stroke()}n.fill()}};break}if(r.dataLabel!==false&&f===1){let t,e,a;t=[].concat(r.chartData.yAxisData.ranges[0]);e=t.pop();a=t.shift();var c=getMountDataPoints(i,e,a,p,l,r,s,h,f);drawMountPointText(c,i,o,n,r,h)}n.restore();return{xAxisPoints:p,calPoints:c,eachSpacing:l}}function drawBarDataPoints(y,v,m,T){let b=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let S=[];let w=(v.height-v.area[0]-v.area[2])/v.categories.length;for(let t=0;tC&&tr?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;T.arc(g+i,c+i,i,-Math.PI,-Math.PI/2);T.arc(o.x-t,c+t,t,-Math.PI/2,0);T.arc(o.x-e,c+h-e,e,0,Math.PI/2);T.arc(g+a,c+h-a,a,Math.PI/2,Math.PI)}else{T.moveTo(n,r);T.lineTo(o.x,r);T.lineTo(o.x,r+o.width);T.lineTo(n,r+o.width);T.lineTo(n,r);T.setLineWidth(1);T.setStrokeStyle(u)}T.setFillStyle(l);T.closePath();T.fill()}};break;case"stack":var i=getBarStackDataPoints(x,e,d,S,w,v,m,t,y,b);P.push(i);i=fixBarStackData(i,w,y.length,t,m,v,y);for(let e=0;eC&&e5&&arguments[5]!==undefined?arguments[5]:1;var s=assign({},{color:{},average:{}},h.extra.candle);s.color=assign({},{upLine:"#f04864",upFill:"#f04864",downLine:"#2fc25b",downFill:"#2fc25b"},s.color);s.average=assign({},{show:false,name:[],day:[],color:c.color},s.average);h.extra.candle=s;let a=h.chartData.xAxisData,x=a.xAxisPoints,f=a.eachSpacing;let y=[];d.save();let p=-2;let v=x.length+2;let u=0;let m=h.width+f;if(h._scrollDistance_&&h._scrollDistance_!==0&&h.enableScroll===true){d.translate(h._scrollDistance_,0);p=Math.floor(-h._scrollDistance_/f)-2;v=p+h.xAxis.itemCount+4;u=-h._scrollDistance_-f*2+h.area[3];m=u+(h.xAxis.itemCount+4)*f}if(s.average.show||t){t.forEach(function(e,t){let a,i,r;a=[].concat(h.chartData.yAxisData.ranges[e.index]);i=a.pop();r=a.shift();var o=e.data;var n=getDataPoints(o,i,r,x,f,h,c,g);var l=splitPoints(n,e);for(let t=0;tu){d.moveTo(t.x,t.y);a=1}if(e>0&&t.x>u&&t.xp&&e0){d.setStrokeStyle(s.color.upLine);d.setFillStyle(s.color.upFill);d.setLineWidth(1*h.pix);d.moveTo(t[3].x,t[3].y);d.lineTo(t[1].x,t[1].y);d.lineTo(t[1].x-f/4,t[1].y);d.lineTo(t[0].x-f/4,t[0].y);d.lineTo(t[0].x,t[0].y);d.lineTo(t[2].x,t[2].y);d.lineTo(t[0].x,t[0].y);d.lineTo(t[0].x+f/4,t[0].y);d.lineTo(t[1].x+f/4,t[1].y);d.lineTo(t[1].x,t[1].y);d.moveTo(t[3].x,t[3].y)}else{d.setStrokeStyle(s.color.downLine);d.setFillStyle(s.color.downFill);d.setLineWidth(1*h.pix);d.moveTo(t[3].x,t[3].y);d.lineTo(t[0].x,t[0].y);d.lineTo(t[0].x-f/4,t[0].y);d.lineTo(t[1].x-f/4,t[1].y);d.lineTo(t[1].x,t[1].y);d.lineTo(t[2].x,t[2].y);d.lineTo(t[1].x,t[1].y);d.lineTo(t[1].x+f/4,t[1].y);d.lineTo(t[0].x+f/4,t[0].y);d.lineTo(t[0].x,t[0].y);d.moveTo(t[3].x,t[3].y)}d.closePath();d.fill();d.stroke()}}});d.restore();return{xAxisPoints:x,calPoints:y,eachSpacing:f}}function drawAreaDataPoints(t,s,h,c){var d=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var x=assign({},{type:"straight",opacity:.2,addLine:false,width:2,gradient:false,activeType:"none"},s.extra.area);let e=s.chartData.xAxisData,f=e.xAxisPoints,p=e.eachSpacing;let y=s.height-s.area[2];let v=[];c.save();let u=0;let g=s.width+p;if(s._scrollDistance_&&s._scrollDistance_!==0&&s.enableScroll===true){c.translate(s._scrollDistance_,0);u=-s._scrollDistance_-p*2+s.area[3];g=u+(s.xAxis.itemCount+4)*p}t.forEach(function(e,t){let a,i,r;a=[].concat(s.chartData.yAxisData.ranges[e.index]);i=a.pop();r=a.shift();let o=e.data;let n=getDataPoints(o,i,r,f,p,s,h,d);v.push(n);let l=splitPoints(n,e);for(let t=0;t1){let t=r[0];let e=r[r.length-1];c.moveTo(t.x,t.y);let i=0;if(x.type==="curve"){for(let a=0;au){c.moveTo(e.x,e.y);i=1}if(a>0&&e.x>u&&e.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.xu){c.moveTo(e.x,e.y);i=1}if(a>0&&e.x>u&&e.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.x4&&arguments[4]!==undefined?arguments[4]:1;var i=assign({},{type:"circle"},s.extra.scatter);let e=s.chartData.xAxisData,x=e.xAxisPoints,f=e.eachSpacing;var r=[];c.save();let a=0;let o=s.width+f;if(s._scrollDistance_&&s._scrollDistance_!==0&&s.enableScroll===true){c.translate(s._scrollDistance_,0);a=-s._scrollDistance_-f*2+s.area[3];o=a+(s.xAxis.itemCount+4)*f}t.forEach(function(t,e){let a,i,r;a=[].concat(s.chartData.yAxisData.ranges[t.index]);i=a.pop();r=a.shift();var o=t.data;var n=getDataPoints(o,i,r,x,f,s,h,d);c.beginPath();c.setStrokeStyle(t.color);c.setFillStyle(t.color);c.setLineWidth(1*s.pix);var l=t.pointShape;if(l==="diamond"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x,t.y-4.5);c.lineTo(t.x-4.5,t.y);c.lineTo(t.x,t.y+4.5);c.lineTo(t.x+4.5,t.y);c.lineTo(t.x,t.y-4.5)}})}else if(l==="circle"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x+2.5*s.pix,t.y);c.arc(t.x,t.y,3*s.pix,0,2*Math.PI,false)}})}else if(l==="square"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x-3.5,t.y-3.5);c.rect(t.x-3.5,t.y-3.5,7,7)}})}else if(l==="triangle"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x,t.y-4.5);c.lineTo(t.x-4.5,t.y+4.5);c.lineTo(t.x+4.5,t.y+4.5);c.lineTo(t.x,t.y-4.5)}})}else if(l==="triangle"){return}c.closePath();c.fill();c.stroke()});if(s.dataLabel!==false&&d===1){t.forEach(function(t,e){let a,i,r;a=[].concat(s.chartData.yAxisData.ranges[t.index]);i=a.pop();r=a.shift();var o=t.data;var n=getDataPoints(o,i,r,x,f,s,h,d);drawPointText(n,t,h,c,s)})}c.restore();return{xAxisPoints:x,calPoints:r,eachSpacing:f}}function drawBubbleDataPoints(a,l,s,h){var c=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var d=assign({},{opacity:1,border:2},l.extra.bubble);let t=l.chartData.xAxisData,x=t.xAxisPoints,f=t.eachSpacing;var i=[];h.save();let e=0;let r=l.width+f;if(l._scrollDistance_&&l._scrollDistance_!==0&&l.enableScroll===true){h.translate(l._scrollDistance_,0);e=-l._scrollDistance_-f*2+l.area[3];r=e+(l.xAxis.itemCount+4)*f}a.forEach(function(i,t){let e,a,r;e=[].concat(l.chartData.yAxisData.ranges[i.index]);a=e.pop();r=e.shift();var o=i.data;var n=getDataPoints(o,a,r,x,f,l,s,c);h.beginPath();h.setStrokeStyle(i.color);h.setLineWidth(d.border*l.pix);h.setFillStyle(hexToRgb(i.color,d.opacity));n.forEach(function(t,e){h.moveTo(t.x+t.r,t.y);h.arc(t.x,t.y,t.r*l.pix,0,2*Math.PI,false)});h.closePath();h.fill();h.stroke();if(l.dataLabel!==false&&c===1){n.forEach(function(t,e){h.beginPath();var a=i.textSize*l.pix||s.fontSize;h.setFontSize(a);h.setFillStyle(i.textColor||"#FFFFFF");h.setTextAlign("center");h.fillText(String(t.t),t.x,t.y+a/2);h.closePath();h.stroke();h.setTextAlign("left")})}});h.restore();return{xAxisPoints:x,calPoints:i,eachSpacing:f}}function drawLineDataPoints(t,d,x,f){var p=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var u=assign({},{type:"straight",width:2,activeType:"none",linearType:"none",onShadow:false,animation:"vertical"},d.extra.line);u.width*=d.pix;let e=d.chartData.xAxisData,g=e.xAxisPoints,y=e.eachSpacing;var T=[];f.save();let v=0;let m=d.width+y;if(d._scrollDistance_&&d._scrollDistance_!==0&&d.enableScroll===true){f.translate(d._scrollDistance_,0);v=-d._scrollDistance_-y*2+d.area[3];m=v+(d.xAxis.itemCount+4)*y}t.forEach(function(e,c){f.beginPath();f.setStrokeStyle(e.color);f.moveTo(-1e4,-1e4);f.lineTo(-10001,-10001);f.stroke();let t,a,i;t=[].concat(d.chartData.yAxisData.ranges[e.index]);a=t.pop();i=t.shift();var r=e.data;var o=getLineDataPoints(r,a,i,g,y,d,x,u,p);T.push(o);var n=splitPoints(o,e);if(e.lineType=="dash"){let t=e.dashLength?e.dashLength:8;t*=d.pix;f.setLineDash([t,t])}f.beginPath();var l=e.color;if(u.linearType!=="none"&&e.linearColor&&e.linearColor.length>0){var s=f.createLinearGradient(d.chartData.xAxisData.startX,d.height/2,d.chartData.xAxisData.endX,d.height/2);for(var h=0;h0){f.setShadow(e.setShadow[0],e.setShadow[1],e.setShadow[2],e.setShadow[3])}else{f.setShadow(0,0,0,"rgba(0,0,0,0)")}f.setLineWidth(u.width);n.forEach(function(i,t){if(i.length===1){f.moveTo(i[0].x,i[0].y)}else{f.moveTo(i[0].x,i[0].y);let a=0;if(u.type==="curve"){for(let e=0;ev){f.moveTo(t.x,t.y);a=1}if(e>0&&t.x>v&&t.xv){f.moveTo(t.x,t.y);a=1}if(e>0&&t.x>v&&t.xv){f.moveTo(t.x,t.y);a=1}if(e>0&&t.x>v&&t.x4&&arguments[4]!==undefined?arguments[4]:1;let e=v.chartData.xAxisData,b=e.xAxisPoints,S=e.eachSpacing;let w=assign({},{width:S/2,barBorderCircle:false,barBorderRadius:[],seriesGap:2,linearType:"none",linearOpacity:1,customColor:[],colorStop:0},v.extra.mix.column);let A=assign({},{opacity:.2,gradient:false},v.extra.mix.area);let M=assign({},{width:2},v.extra.mix.line);let L=v.height-v.area[2];let F=[];var _=0;var k=0;t.forEach(function(t,e){if(t.type=="column"){k+=1}});T.save();let R=-2;let I=b.length+2;let P=0;let C=v.width+S;if(v._scrollDistance_&&v._scrollDistance_!==0&&v.enableScroll===true){T.translate(v._scrollDistance_,0);R=Math.floor(-v._scrollDistance_/S)-2;I=R+v.xAxis.itemCount+4;P=-v._scrollDistance_-S*2+v.area[3];C=P+(v.xAxis.itemCount+4)*S}w.customColor=fillCustomColor(w.linearType,w.customColor,t,m);t.forEach(function(n,t){let o,x,f;o=[].concat(v.chartData.yAxisData.ranges[n.index]);x=o.pop();f=o.shift();var p=n.data;var a=getDataPoints(p,x,f,b,S,v,m,D);F.push(a);if(n.type=="column"){a=fixColumeData(a,S,k,_,m,v);for(let t=0;tR&&tr?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;T.arc(h+t,c+t,t,-Math.PI,-Math.PI/2);T.arc(h+d-e,c+e,e,-Math.PI/2,0);T.arc(h+d-a,c+s-a,a,0,Math.PI/2);T.arc(h+i,c+s-i,i,Math.PI/2,Math.PI)}else{T.moveTo(l,o.y);T.lineTo(l+o.width,o.y);T.lineTo(l+o.width,v.height-v.area[2]);T.lineTo(l,v.height-v.area[2]);T.lineTo(l,o.y);T.setLineWidth(1);T.setStrokeStyle(u)}T.setFillStyle(e);T.closePath();T.fill()}}_+=1}if(n.type=="area"){let e=splitPoints(a,n);for(let t=0;t1){var r=i[0];let t=i[i.length-1];T.moveTo(r.x,r.y);let a=0;if(n.style==="curve"){for(let e=0;eP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.xP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.xP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.xP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.x1){if(h.extra.mount.widthRatio>2)h.extra.mount.widthRatio=2;l+=(h.extra.mount.widthRatio-1)*f}var s=n*n/l;var y=0;if(h._scrollDistance_){y=-h._scrollDistance_*n/l}d.beginPath();d.setLineCap("round");d.setLineWidth(6*h.pix);d.setStrokeStyle(h.xAxis.scrollBackgroundColor||"#EFEBEF");d.moveTo(t,o);d.lineTo(a,o);d.stroke();d.closePath();d.beginPath();d.setLineCap("round");d.setLineWidth(6*h.pix);d.setStrokeStyle(h.xAxis.scrollColor||"#A6A6A6");d.moveTo(t+y,o);d.lineTo(t+y+s,o);d.stroke();d.closePath();d.setLineCap("butt")}d.save();if(h._scrollDistance_&&h._scrollDistance_!==0){d.translate(h._scrollDistance_,0)}if(h.xAxis.calibration===true){d.setStrokeStyle(h.xAxis.gridColor||"#cccccc");d.setLineCap("butt");d.setLineWidth(1*h.pix);x.forEach(function(t,e){if(e>0){d.beginPath();d.moveTo(t-f/2,u);d.lineTo(t-f/2,u+3*h.pix);d.closePath();d.stroke()}})}if(h.xAxis.disableGrid!==true){d.setStrokeStyle(h.xAxis.gridColor||"#cccccc");d.setLineCap("butt");d.setLineWidth(1*h.pix);if(h.xAxis.gridType=="dash"){d.setLineDash([h.xAxis.dashLength*h.pix,h.xAxis.dashLength*h.pix])}h.xAxis.gridEval=h.xAxis.gridEval||1;x.forEach(function(t,e){if(e%h.xAxis.gridEval==0){d.beginPath();d.moveTo(t,u);d.lineTo(t,i);d.stroke()}});d.setLineDash([])}if(h.xAxis.disabled!==true){let t=r.length;if(h.xAxis.labelCount){if(h.xAxis.itemCount){t=Math.ceil(r.length/h.xAxis.itemCount*h.xAxis.labelCount)}else{t=h.xAxis.labelCount}t-=1}let e=Math.ceil(r.length/t);let a=[];let i=r.length;for(let t=0;t=h.area[3]-1&&n-Math.abs(o)<=h.width-h.area[1]+1){d.beginPath();d.setFontSize(g);d.setFillStyle(h.xAxis.fontColor||h.fontColor);d.fillText(String(a),x[e]+i,u+h.xAxis.marginTop*h.pix+(h.xAxis.lineHeight-h.xAxis.fontSize)*h.pix/2+h.xAxis.fontSize*h.pix);d.closePath();d.stroke()}})}else{a.forEach(function(t,e){var a=h.xAxis.formatter?h.xAxis.formatter(t):t;var i=h._scrollDistance_||0;var r=p=="center"?x[e]+f/2:x[e];if(r-Math.abs(i)>=h.area[3]-1&&r-Math.abs(i)<=h.width-h.area[1]+1){d.save();d.beginPath();d.setFontSize(g);d.setFillStyle(h.xAxis.fontColor||h.fontColor);var o=measureText(String(a),g,d);var n=x[e];if(p=="center"){n=x[e]+f/2}var l=0;if(h.xAxis.scrollShow){l=6*h.pix}var s=u+h.xAxis.marginTop*h.pix+g-g*Math.abs(Math.sin(c._xAxisTextAngle_));if(h.xAxis.rotateAngle<0){n-=g/2;o=0}else{n+=g/2;o=-o}d.translate(n,s);d.rotate(-1*c._xAxisTextAngle_);d.fillText(String(a),o,0);d.closePath();d.stroke();d.restore()}})}}d.restore();if(h.xAxis.title){d.beginPath();d.setFontSize(h.xAxis.titleFontSize*h.pix);d.setFillStyle(h.xAxis.titleFontColor);d.fillText(String(h.xAxis.title),h.width-h.area[1]+h.xAxis.titleOffsetX*h.pix,h.height-h.area[2]+h.xAxis.marginTop*h.pix+(h.xAxis.lineHeight-h.xAxis.titleFontSize)*h.pix/2+(h.xAxis.titleFontSize+h.xAxis.titleOffsetY)*h.pix);d.closePath();d.stroke()}if(h.xAxis.axisLine){d.beginPath();d.setStrokeStyle(h.xAxis.axisLineColor);d.setLineWidth(1*h.pix);d.moveTo(t,h.height-h.area[2]);d.lineTo(a,h.height-h.area[2]);d.stroke()}}function drawYAxisGrid(c,e,d,a){if(e.yAxis.disableGrid===true){return}let t=e.height-e.area[0]-e.area[2];let i=t/e.yAxis.splitNumber;let r=e.area[3];let o=e.chartData.xAxisData.xAxisPoints,n=e.chartData.xAxisData.eachSpacing;let l=n*(o.length-1);if(e.type=="mount"&&e.extra&&e.extra.mount&&e.extra.mount.widthRatio&&e.extra.mount.widthRatio>1){if(e.extra.mount.widthRatio>2)e.extra.mount.widthRatio=2;l+=(e.extra.mount.widthRatio-1)*n}let x=r+l;let s=[];let h=1;if(e.xAxis.axisLine===false){h=0}for(let t=h;t4&&arguments[4]!==undefined?arguments[4]:1;var n=assign({},{activeOpacity:.5,activeRadius:10,offsetAngle:0,labelWidth:15,ringWidth:30,customRadius:0,border:false,borderWidth:2,borderColor:"#FFFFFF",centerColor:"#FFFFFF",linearType:"none",customColor:[]},r.type=="pie"?r.extra.pie:r.extra.ring);var l={x:r.area[3]+(r.width-r.area[1]-r.area[3])/2,y:r.area[0]+(r.height-r.area[0]-r.area[2])/2};if(e.pieChartLinePadding==0){e.pieChartLinePadding=n.activeRadius*r.pix}var i=Math.min((r.width-r.area[1]-r.area[3])/2-e.pieChartLinePadding-e.pieChartTextPadding-e._pieTextMaxLength_,(r.height-r.area[0]-r.area[2])/2-e.pieChartLinePadding-e.pieChartTextPadding);i=i<10?10:i;if(n.customRadius>0){i=n.customRadius*r.pix}t=getPieDataPoints(t,i,a);var h=n.activeRadius*r.pix;n.customColor=fillCustomColor(n.linearType,n.customColor,t,e);t=t.map(function(t){t._start_+=n.offsetAngle*Math.PI/180;return t});t.forEach(function(t,e){if(r.tooltip){if(r.tooltip.index==e){o.beginPath();o.setFillStyle(hexToRgb(t.color,n.activeOpacity||.5));o.moveTo(l.x,l.y);o.arc(l.x,l.y,t._radius_+h,t._start_,t._start_+2*t._proportion_*Math.PI);o.closePath();o.fill()}}o.beginPath();o.setLineWidth(n.borderWidth*r.pix);o.lineJoin="round";o.setStrokeStyle(n.borderColor);var a=t.color;if(n.linearType=="custom"){var i;if(o.createCircularGradient){i=o.createCircularGradient(l.x,l.y,t._radius_)}else{i=o.createRadialGradient(l.x,l.y,0,l.x,l.y,t._radius_)}i.addColorStop(0,hexToRgb(n.customColor[t.linearIndex],1));i.addColorStop(1,hexToRgb(t.color,1));a=i}o.setFillStyle(a);o.moveTo(l.x,l.y);o.arc(l.x,l.y,t._radius_,t._start_,t._start_+2*t._proportion_*Math.PI);o.closePath();o.fill();if(n.border==true){o.stroke()}});if(r.type==="ring"){var s=i*.6;if(typeof n.ringWidth==="number"&&n.ringWidth>0){s=Math.max(0,i-n.ringWidth*r.pix)}o.beginPath();o.setFillStyle(n.centerColor);o.moveTo(l.x,l.y);o.arc(l.x,l.y,s,0,2*Math.PI);o.closePath();o.fill()}if(r.dataLabel!==false&&a===1){drawPieText(t,r,e,o,i,l)}if(a===1&&r.type==="ring"){drawRingTitle(r,e,o,l)}return{center:l,radius:i,series:t}}function drawRoseDataPoints(t,r,e,o){var a=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var n=assign({},{type:"area",activeOpacity:.5,activeRadius:10,offsetAngle:0,labelWidth:15,border:false,borderWidth:2,borderColor:"#FFFFFF",linearType:"none",customColor:[]},r.extra.rose);if(e.pieChartLinePadding==0){e.pieChartLinePadding=n.activeRadius*r.pix}var l={x:r.area[3]+(r.width-r.area[1]-r.area[3])/2,y:r.area[0]+(r.height-r.area[0]-r.area[2])/2};var i=Math.min((r.width-r.area[1]-r.area[3])/2-e.pieChartLinePadding-e.pieChartTextPadding-e._pieTextMaxLength_,(r.height-r.area[0]-r.area[2])/2-e.pieChartLinePadding-e.pieChartTextPadding);i=i<10?10:i;var s=n.minRadius||i*.5;if(i4&&arguments[4]!==undefined?arguments[4]:1;var o=assign({},{startAngle:.75,endAngle:.25,type:"default",direction:"cw",lineCap:"round",width:12,gap:2,linearType:"none",customColor:[]},i.extra.arcbar);a=getArcbarDataPoints(a,o,e);var n;if(o.centerX||o.centerY){n={x:o.centerX?o.centerX:i.width/2,y:o.centerY?o.centerY:i.height/2}}else{n={x:i.width/2,y:i.height/2}}var l;if(o.radius){l=o.radius}else{l=Math.min(n.x,n.y);l-=5*i.pix;l-=o.width/2}l=l<10?10:l;o.customColor=fillCustomColor(o.linearType,o.customColor,a,t);for(let e=0;e5&&arguments[5]!==undefined?arguments[5]:1;var f=assign({},{type:"default",startAngle:.75,endAngle:.25,width:15,labelOffset:13,splitLine:{fixRadius:0,splitNumber:10,width:15,color:"#FFFFFF",childNumber:5,childWidth:5},pointer:{width:15,color:"auto"}},c.extra.gauge);if(f.oldAngle==undefined){f.oldAngle=f.startAngle}if(f.oldData==undefined){f.oldData=0}n=getGaugeAxisPoints(n,f.startAngle,f.endAngle);var p={x:c.width/2,y:c.height/2};var u=Math.min(p.x,p.y);u-=5*c.pix;u-=f.width/2;u=u<10?10:u;var g=u-f.width;var y=0;if(f.type=="progress"){var v=u-f.width*3;d.beginPath();let t=d.createLinearGradient(p.x,p.y-v,p.x,p.y+v);t.addColorStop("0",hexToRgb(h[0].color,.3));t.addColorStop("1.0",hexToRgb("#FFFFFF",.1));d.setFillStyle(t);d.arc(p.x,p.y,v,0,2*Math.PI,false);d.fill();d.setLineWidth(f.width);d.setStrokeStyle(hexToRgb(h[0].color,.3));d.setLineCap("round");d.beginPath();d.arc(p.x,p.y,g,f.startAngle*Math.PI,f.endAngle*Math.PI,false);d.stroke();if(f.endAnglet/o){d.setStrokeStyle(hexToRgb(h[0].color,1))}else{d.setStrokeStyle(hexToRgb(h[0].color,.3))}d.setLineWidth(3*c.pix);d.moveTo(i,0);d.lineTo(r,0);d.stroke();d.rotate(a*Math.PI)}d.restore();h=getGaugeArcbarDataPoints(h,f,x);d.setLineWidth(f.width);d.setStrokeStyle(h[0].color);d.setLineCap("round");d.beginPath();d.arc(p.x,p.y,g,f.startAngle*Math.PI,h[0]._proportion_*Math.PI,false);d.stroke();let l=u-f.width*2.5;d.save();d.translate(p.x,p.y);d.rotate((h[0]._proportion_-1)*Math.PI);d.beginPath();d.setLineWidth(f.width/3);let s=d.createLinearGradient(0,-l*.6,0,l*.6);s.addColorStop("0",hexToRgb("#FFFFFF",0));s.addColorStop("0.5",hexToRgb(h[0].color,1));s.addColorStop("1.0",hexToRgb("#FFFFFF",0));d.setStrokeStyle(s);d.arc(0,0,l,.85*Math.PI,1.15*Math.PI,false);d.stroke();d.beginPath();d.setLineWidth(1);d.setStrokeStyle(h[0].color);d.setFillStyle(h[0].color);d.moveTo(-l-f.width/3/2,-4);d.lineTo(-l-f.width/3/2-4,0);d.lineTo(-l-f.width/3/2,4);d.lineTo(-l-f.width/3/2,-4);d.stroke();d.fill();d.restore()}else{d.setLineWidth(f.width);d.setLineCap("butt");for(let e=0;e4&&arguments[4]!==undefined?arguments[4]:1;var s=assign({},{gridColor:"#cccccc",gridType:"radar",gridEval:1,axisLabel:false,axisLabelTofix:0,labelShow:true,labelColor:"#666666",labelPointShow:false,labelPointRadius:3,labelPointColor:"#cccccc",opacity:.2,gridCount:3,border:false,borderWidth:2,linearType:"none",customColor:[]},n.extra.radar);var a=getRadarCoordinateSeries(n.categories.length);var h={x:n.area[3]+(n.width-n.area[1]-n.area[3])/2,y:n.area[0]+(n.height-n.area[0]-n.area[2])/2};var r=(n.width-n.area[1]-n.area[3])/2;var d=(n.height-n.area[0]-n.area[2])/2;var c=Math.min(r-(getMaxTextListLength(n.categories,i.fontSize,l)+i.radarLabelTextMargin),d-i.radarLabelTextMargin);c-=i.radarLabelTextMargin*n.pix;c=c<10?10:c;c=s.radius?s.radius:c;l.beginPath();l.setLineWidth(1*n.pix);l.setStrokeStyle(s.gridColor);a.forEach(function(t,e){var a=convertCoordinateOrigin(c*Math.cos(t),c*Math.sin(t),h);l.moveTo(h.x,h.y);if(e%s.gridEval==0){l.lineTo(a.x,a.y)}});l.stroke();l.closePath();var x=function t(i){var r={};l.beginPath();l.setLineWidth(1*n.pix);l.setStrokeStyle(s.gridColor);if(s.gridType=="radar"){a.forEach(function(t,e){var a=convertCoordinateOrigin(c/s.gridCount*i*Math.cos(t),c/s.gridCount*i*Math.sin(t),h);if(e===0){r=a;l.moveTo(a.x,a.y)}else{l.lineTo(a.x,a.y)}});l.lineTo(r.x,r.y)}else{var e=convertCoordinateOrigin(c/s.gridCount*i*Math.cos(1.5),c/s.gridCount*i*Math.sin(1.5),h);l.arc(h.x,h.y,h.y-e.y,0,2*Math.PI,false)}l.stroke();l.closePath()};for(var e=1;e<=s.gridCount;e++){x(e)}s.customColor=fillCustomColor(s.linearType,s.customColor,o,i);var f=getRadarDataPoints(a,h,c,o,n,t);f.forEach(function(t,e){l.beginPath();l.setLineWidth(s.borderWidth*n.pix);l.setStrokeStyle(t.color);var a=hexToRgb(t.color,s.opacity);if(s.linearType=="custom"){var i;if(l.createCircularGradient){i=l.createCircularGradient(h.x,h.y,c)}else{i=l.createRadialGradient(h.x,h.y,0,h.x,h.y,c)}i.addColorStop(0,hexToRgb(s.customColor[o[e].linearIndex],s.opacity));i.addColorStop(1,hexToRgb(t.color,s.opacity));a=i}l.setFillStyle(a);t.data.forEach(function(t,e){if(e===0){l.moveTo(t.position.x,t.position.y)}else{l.lineTo(t.position.x,t.position.y)}});l.closePath();l.fill();if(s.border===true){l.stroke()}l.closePath();if(n.dataPointShape!==false){var r=t.data.map(function(t){return t.position});drawPointShape(r,t.color,t.pointShape,l,n)}});if(s.axisLabel===true){const p=Math.max(s.max,Math.max.apply(null,dataCombine(o)));const u=c/s.gridCount;const g=n.fontSize*n.pix;l.setFontSize(g);l.setFillStyle(n.fontColor);l.setTextAlign("left");for(var e=0;eh.x?e.xMax:h.x;e.yMin=e.yMinh.y?e.yMax:h.y}}}return e}function coordinateToPoint(t,e,a,i,r,o){return{x:(e-a.xMin)*i+r,y:(a.yMax-t)*i+o}}function pointToCoordinate(t,e,a,i,r,o){return{x:(e-r)/i+a.xMin,y:a.yMax-(t-o)/i}}function isRayIntersectsSegment(t,e,a){if(e[1]==a[1]){return false}if(e[1]>t[1]&&a[1]>t[1]){return false}if(e[1]t[1]){return false}if(a[1]==t[1]&&e[1]>t[1]){return false}if(e[0]a[t].area[2]||e[1]>a[t].area[3]||e[2]i||e[3]>r){o=true;break}else{o=false}}else{o=true;break}}}return o}function getWordCloudPoint(c,t,d){let x=c.series;switch(t){case"normal":for(let l=0;l.7){return true}else{return false}};for(let h=0;h4&&arguments[4]!==undefined?arguments[4]:1;let a=assign({},{type:"normal",autoColors:true},r.extra.word);if(!r.chartData.wordCloudData){r.chartData.wordCloudData=getWordCloudPoint(r,a.type,o)}o.beginPath();o.setFillStyle(r.background);o.rect(0,0,r.width,r.height);o.fill();o.save();let l=r.chartData.wordCloudData;o.translate(r.width/2,r.height/2);for(let i=0;i0){if(r.tooltip){if(r.tooltip.index==i){o.strokeText(t,(l[i].areav[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].areav[1]+5+e-r.height/2)*n)}else{o.fillText(t,(l[i].areav[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].areav[1]+5+e-r.height/2)*n)}}else{o.fillText(t,(l[i].areav[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].areav[1]+5+e-r.height/2)*n)}}}else{if(l[i].area[0]>0){if(r.tooltip){if(r.tooltip.index==i){o.strokeText(t,(l[i].area[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].area[1]+5+e-r.height/2)*n)}else{o.fillText(t,(l[i].area[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].area[1]+5+e-r.height/2)*n)}}else{o.fillText(t,(l[i].area[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].area[1]+5+e-r.height/2)*n)}}}o.stroke();o.restore()}o.restore()}function drawFunnelDataPoints(t,e,c,a){let d=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let i=assign({},{type:"funnel",activeWidth:10,activeOpacity:.3,border:false,borderWidth:2,borderColor:"#FFFFFF",fillOpacity:1,minSize:0,labelAlign:"right",linearType:"none",customColor:[]},e.extra.funnel);let r=(e.height-e.area[0]-e.area[2])/t.length;let o={x:e.area[3]+(e.width-e.area[1]-e.area[3])/2,y:e.height-e.area[2]};let n=i.activeWidth*e.pix;let x=Math.min((e.width-e.area[1]-e.area[3])/2-n,(e.height-e.area[0]-e.area[2])/2-n);let l=getFunnelDataPoints(t,x,i,r,d);a.save();a.translate(o.x,o.y);i.customColor=fillCustomColor(i.linearType,i.customColor,t,c);if(i.type=="pyramid"){for(let t=0;t0){l.area[3]+=i[t].width+l.yAxis.padding*l.pix}else{l.area[3]+=i[t].width}a+=1}else if(i[t].position=="right"){if(e>0){l.area[1]+=i[t].width+l.yAxis.padding*l.pix}else{l.area[1]+=i[t].width}e+=1}}}else{n.yAxisWidth=i}l.chartData.yAxisData=f;if(l.categories&&l.categories.length&&l.type!=="radar"&&l.type!=="gauge"&&l.type!=="bar"){l.chartData.xAxisData=getXAxisPoints(l.categories,l,n);let t=calCategoriesData(l.categories,l,n,l.chartData.xAxisData.eachSpacing,s),e=t.xAxisHeight,a=t.angle;n.xAxisHeight=e;n._xAxisTextAngle_=a;l.area[2]+=e;l.chartData.categoriesData=t}else{if(l.type==="line"||l.type==="area"||l.type==="scatter"||l.type==="bubble"||l.type==="bar"){l.chartData.xAxisData=calXAxisData(c,l,n,s);d=l.chartData.xAxisData.rangesFormat;let t=calCategoriesData(d,l,n,l.chartData.xAxisData.eachSpacing,s),e=t.xAxisHeight,a=t.angle;n.xAxisHeight=e;n._xAxisTextAngle_=a;l.area[2]+=e;l.chartData.categoriesData=t}else{l.chartData.xAxisData={xAxisPoints:[]}}}if(l.enableScroll&&l.xAxis.scrollAlign=="right"&&l._scrollDistance_===undefined){let t=0,e=l.chartData.xAxisData.xAxisPoints,a=l.chartData.xAxisData.startX,i=l.chartData.xAxisData.endX,r=l.chartData.xAxisData.eachSpacing;let o=r*(e.length-1);let n=i-a;t=n-o;h.scrollOption.currentOffset=t;h.scrollOption.startTouchX=t;h.scrollOption.distance=0;h.scrollOption.lastMoveTime=0;l._scrollDistance_=t}if(t==="pie"||t==="ring"||t==="rose"){n._pieTextMaxLength_=l.dataLabel===false?0:getPieTextMaxLength(x,n,s,l)}switch(t){case"word":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function(t){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawWordCloudDataPoints(c,l,n,s,t);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"map":s.clearRect(0,0,l.width,l.height);drawMapDataPoints(c,l,n,s);setTimeout(()=>{this.uevent.trigger("renderComplete")},50);break;case"funnel":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function(t){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.funnelData=drawFunnelDataPoints(c,l,n,s,t);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,t);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"line":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawLineDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"scatter":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawScatterDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"bubble":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawBubbleDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"mix":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawMixDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"column":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawColumnDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"mount":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawMountDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"bar":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawXAxis(d,l,n,s);var a=drawBarDataPoints(c,l,n,s,e),i=a.yAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.yAxisPoints=i;l.chartData.xAxisPoints=l.chartData.xAxisData.xAxisPoints;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"area":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawAreaDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"ring":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.pieData=drawPieDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"pie":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.pieData=drawPieDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"rose":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.pieData=drawRoseDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"radar":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.radarData=drawRadarDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"arcbar":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.arcbarData=drawArcbarDataPoints(c,l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"gauge":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.gaugeData=drawGaugeDataPoints(d,c,l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"candle":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawCandleDataPoints(c,x,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}if(x){drawLegend(x,l,n,s,l.chartData)}else{drawLegend(l.series,l,n,s,l.chartData)}drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break}}function uChartsEvent(){this.events={}}uChartsEvent.prototype.addEventListener=function(t,e){this.events[t]=this.events[t]||[];this.events[t].push(e)};uChartsEvent.prototype.delEventListener=function(t){this.events[t]=[]};uChartsEvent.prototype.trigger=function(){for(var t=arguments.length,e=Array(t),a=0;a0&&arguments[0]!==undefined?arguments[0]:{};this.opts=assign({},this.opts,t);this.opts.updateData=true;let c=t.scrollPosition||"current";switch(c){case"current":this.opts._scrollDistance_=this.scrollOption.currentOffset;break;case"left":this.opts._scrollDistance_=0;this.scrollOption={currentOffset:0,startTouchX:0,distance:0,lastMoveTime:0};break;case"right":let t=calYAxisData(this.opts.series,this.opts,this.config,this.context),e=t.yAxisWidth;this.config.yAxisWidth=e;let a=0;let i=getXAxisPoints(this.opts.categories,this.opts,this.config),r=i.xAxisPoints,o=i.startX,n=i.endX,l=i.eachSpacing;let s=l*(r.length-1);let h=n-o;a=h-s;this.scrollOption={currentOffset:a,startTouchX:a,distance:0,lastMoveTime:0};this.opts._scrollDistance_=a;break}drawCharts.call(this,this.opts.type,this.opts,this.config,this.context)};uCharts.prototype.zoom=function(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:this.opts.xAxis.itemCount;if(this.opts.enableScroll!==true){console.log("[uCharts] 请启用滚动条后使用");return}let e=Math.round(Math.abs(this.scrollOption.currentOffset)/this.opts.chartData.eachSpacing)+Math.round(this.opts.xAxis.itemCount/2);this.opts.animation=false;this.opts.xAxis.itemCount=t.itemCount;let a=calYAxisData(this.opts.series,this.opts,this.config,this.context),i=a.yAxisWidth;this.config.yAxisWidth=i;let r=0;let o=getXAxisPoints(this.opts.categories,this.opts,this.config),h=o.xAxisPoints,c=o.startX,d=o.endX,n=o.eachSpacing;let x=n*e;let l=d-c;let s=l-n*(h.length-1);r=l/2-x;if(r>0){r=0}if(r=this.opts.categories.length?this.opts.categories.length:r;this.opts.animation=false;this.opts.xAxis.itemCount=r;let o=0;let n=getXAxisPoints(this.opts.categories,this.opts,this.config),x=n.xAxisPoints,f=n.startX,p=n.endX,l=n.eachSpacing;let u=l*this.scrollOption.moveCurrent1;let g=p-f;let y=g-l*(x.length-1);o=-u+Math.min(i[0].x,i[1].x)-this.opts.area[3]-l;if(o>0){o=0}if(o1&&arguments[1]!==undefined?arguments[1]:{};var a=null;if(t.changedTouches){a=t.changedTouches[0]}else{a=t.mp.changedTouches[0]}if(a){var i=getTouches(a,this.opts,t);var r=this.getLegendDataIndex(t);if(r>=0){if(this.opts.type=="candle"){this.opts.seriesMA[r].show=!this.opts.seriesMA[r].show}else{this.opts.series[r].show=!this.opts.series[r].show}this.opts.animation=e.animation?true:false;this.opts._scrollDistance_=this.scrollOption.currentOffset;drawCharts.call(this,this.opts.type,this.opts,this.config,this.context)}}};uCharts.prototype.showToolTip=function(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var c=null;if(t.changedTouches){c=t.changedTouches[0]}else{c=t.mp.changedTouches[0]}if(!c){console.log("[uCharts] 未获取到event坐标信息")}var a=getTouches(c,this.opts,t);var d=this.scrollOption.currentOffset;var i=assign({},this.opts,{_scrollDistance_:d,animation:false});if(this.opts.type==="line"||this.opts.type==="area"||this.opts.type==="column"||this.opts.type==="scatter"||this.opts.type==="bubble"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1||o.length>0){var n=getSeriesDataItem(this.opts.series,o,r.group);if(n.length!==0){var l=getToolTipData(n,this.opts,o,r.group,this.opts.categories,e),s=l.textList,h=l.offset;h.y=a.y;i.tooltip={textList:e.textList!==undefined?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o,group:r.group}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="mount"){var o=e.index==undefined?this.getCurrentDataIndex(t).index:e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},i._series_[o]);var s=[{text:e.formatter?e.formatter(n,undefined,o,i):n.name+": "+n.data,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:i.chartData.calPoints[o].x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="bar"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1||o.length>0){var n=getSeriesDataItem(this.opts.series,o,r.group);if(n.length!==0){var l=getToolTipData(n,this.opts,o,r.group,this.opts.categories,e),s=l.textList,h=l.offset;h.x=a.x;i.tooltip={textList:e.textList!==undefined?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="mix"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1){var d=this.scrollOption.currentOffset;var i=assign({},this.opts,{_scrollDistance_:d,animation:false});var n=getSeriesDataItem(this.opts.series,o);if(n.length!==0){var x=getMixToolTipData(n,this.opts,o,this.opts.categories,e),s=x.textList,h=x.offset;h.y=a.y;i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="candle"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1){var d=this.scrollOption.currentOffset;var i=assign({},this.opts,{_scrollDistance_:d,animation:false});var n=getSeriesDataItem(this.opts.series,o);if(n.length!==0){var l=getCandleToolTipData(this.opts.series[0].data,n,this.opts,o,this.opts.categories,this.opts.extra.candle,e),s=l.textList,h=l.offset;h.y=a.y;i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="pie"||this.opts.type==="ring"||this.opts.type==="rose"||this.opts.type==="funnel"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},i._series_[o]);var s=[{text:e.formatter?e.formatter(n,undefined,o,i):n.name+": "+n.data,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="map"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},this.opts.series[o]);n.name=n.properties.name;var s=[{text:e.formatter?e.formatter(n,undefined,o,this.opts):n.name,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}i.updateData=false;drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="word"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},this.opts.series[o]);var s=[{text:e.formatter?e.formatter(n,undefined,o,this.opts):n.name,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}i.updateData=false;drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="radar"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=getSeriesDataItem(this.opts.series,o);if(n.length!==0){var s=n.map(t=>{return{text:e.formatter?e.formatter(t,this.opts.categories[o],o,this.opts):t.name+": "+t.data,color:t.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?t.legendShape:this.opts.extra.tooltip.legendShape}});var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}};uCharts.prototype.translate=function(t){this.scrollOption={currentOffset:t,startTouchX:t,distance:0,lastMoveTime:0};let e=assign({},this.opts,{_scrollDistance_:t,animation:false});drawCharts.call(this,this.opts.type,e,this.config,this.context)};uCharts.prototype.scrollStart=function(t){var e=null;if(t.changedTouches){e=t.changedTouches[0]}else{e=t.mp.changedTouches[0]}var a=getTouches(e,this.opts,t);if(e&&this.opts.enableScroll===true){this.scrollOption.startTouchX=a.x}};uCharts.prototype.scroll=function(t){if(this.scrollOption.lastMoveTime===0){this.scrollOption.lastMoveTime=Date.now()}let e=this.opts.touchMoveLimit||60;let a=Date.now();let i=a-this.scrollOption.lastMoveTime;if(i=0){var o="touchend"!==n?e.targetTouches[0]:e.changedTouches[0];o&&st(t,o,e,i)}else st(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&gw.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function ht(t,e,i){pw?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function ct(t,e,i){pw?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}function dt(t){return 2===t.which||3===t.which}function ft(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}function pt(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function gt(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:mt}}function mt(t){mw(this.event)}function vt(){}function yt(t,e,i){if(t[t.rectHover?"rectContain":"contain"](e,i)){for(var n,o=t;o;){if(o.clipPath&&!o.clipPath.contain(e,i))return!1;o.silent&&(n=!0),o=o.parent}return!n||xw}return!1}function xt(){var t=new bw(6);return _t(t),t}function _t(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function wt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function bt(t,e,i){var n=e[0]*i[0]+e[2]*i[1],o=e[1]*i[0]+e[3]*i[1],a=e[0]*i[2]+e[2]*i[3],r=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=o,t[2]=a,t[3]=r,t[4]=s,t[5]=l,t}function St(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t}function Mt(t,e,i){var n=e[0],o=e[2],a=e[4],r=e[1],s=e[3],l=e[5],u=Math.sin(i),h=Math.cos(i);return t[0]=n*h+r*u,t[1]=-n*u+r*h,t[2]=o*h+s*u,t[3]=-o*u+h*s,t[4]=h*a+u*l,t[5]=h*l-u*a,t}function It(t,e,i){var n=i[0],o=i[1];return t[0]=e[0]*n,t[1]=e[1]*o,t[2]=e[2]*n,t[3]=e[3]*o,t[4]=e[4]*n,t[5]=e[5]*o,t}function Tt(t,e){var i=e[0],n=e[2],o=e[4],a=e[1],r=e[3],s=e[5],l=i*r-a*n;return l?(l=1/l,t[0]=r*l,t[1]=-a*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-r*o)*l,t[5]=(a*o-i*s)*l,t):null}function At(t){var e=xt();return wt(e,t),e}function Dt(t){return t>Iw||t<-Iw}function Ct(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function Lt(t){return(t=Math.round(t))<0?0:t>255?255:t}function kt(t){return(t=Math.round(t))<0?0:t>360?360:t}function Pt(t){return t<0?0:t>1?1:t}function Nt(t){return Lt(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function Ot(t){return Pt(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function Et(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function Rt(t,e,i){return t+(e-t)*i}function zt(t,e,i,n,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=o,t}function Bt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Vt(t,e){Vw&&Bt(Vw,e),Vw=Bw.put(t,Vw||e.slice())}function Gt(t,e){if(t){e=e||[];var i=Bw.get(t);if(i)return Bt(e,i);var n=(t+="").replace(/ /g,"").toLowerCase();if(n in zw)return Bt(e,zw[n]),Vt(t,e),e;if("#"!==n.charAt(0)){var o=n.indexOf("("),a=n.indexOf(")");if(-1!==o&&a+1===n.length){var r=n.substr(0,o),s=n.substr(o+1,a-(o+1)).split(","),l=1;switch(r){case"rgba":if(4!==s.length)return void zt(e,0,0,0,1);l=Ot(s.pop());case"rgb":return 3!==s.length?void zt(e,0,0,0,1):(zt(e,Nt(s[0]),Nt(s[1]),Nt(s[2]),l),Vt(t,e),e);case"hsla":return 4!==s.length?void zt(e,0,0,0,1):(s[3]=Ot(s[3]),Ft(s,e),Vt(t,e),e);case"hsl":return 3!==s.length?void zt(e,0,0,0,1):(Ft(s,e),Vt(t,e),e);default:return}}zt(e,0,0,0,1)}else{if(4===n.length)return(u=parseInt(n.substr(1),16))>=0&&u<=4095?(zt(e,(3840&u)>>4|(3840&u)>>8,240&u|(240&u)>>4,15&u|(15&u)<<4,1),Vt(t,e),e):void zt(e,0,0,0,1);if(7===n.length){var u=parseInt(n.substr(1),16);return u>=0&&u<=16777215?(zt(e,(16711680&u)>>16,(65280&u)>>8,255&u,1),Vt(t,e),e):void zt(e,0,0,0,1)}}}}function Ft(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=Ot(t[1]),o=Ot(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return e=e||[],zt(e,Lt(255*Et(r,a,i+1/3)),Lt(255*Et(r,a,i)),Lt(255*Et(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Wt(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,a=t[2]/255,r=Math.min(n,o,a),s=Math.max(n,o,a),l=s-r,u=(s+r)/2;if(0===l)e=0,i=0;else{i=u<.5?l/(s+r):l/(2-s-r);var h=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-a)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+h-d:a===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,u];return null!=t[3]&&f.push(t[3]),f}}function Ht(t,e){var i=Gt(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,i[n]>255?i[n]=255:t[n]<0&&(i[n]=0);return qt(i,4===i.length?"rgba":"rgb")}}function Zt(t){var e=Gt(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Ut(t,e,i){if(e&&e.length&&t>=0&&t<=1){i=i||[];var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=e[o],s=e[a],l=n-o;return i[0]=Lt(Rt(r[0],s[0],l)),i[1]=Lt(Rt(r[1],s[1],l)),i[2]=Lt(Rt(r[2],s[2],l)),i[3]=Pt(Rt(r[3],s[3],l)),i}}function Xt(t,e,i){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=Gt(e[o]),s=Gt(e[a]),l=n-o,u=qt([Lt(Rt(r[0],s[0],l)),Lt(Rt(r[1],s[1],l)),Lt(Rt(r[2],s[2],l)),Pt(Rt(r[3],s[3],l))],"rgba");return i?{color:u,leftIndex:o,rightIndex:a,value:n}:u}}function jt(t,e,i,n){if(t=Gt(t))return t=Wt(t),null!=e&&(t[0]=kt(e)),null!=i&&(t[1]=Ot(i)),null!=n&&(t[2]=Ot(n)),qt(Ft(t),"rgba")}function Yt(t,e){if((t=Gt(t))&&null!=e)return t[3]=Pt(e),qt(t,"rgba")}function qt(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}}function Kt(t,e){return t[e]}function $t(t,e,i){t[e]=i}function Jt(t,e,i){return(e-t)*i+t}function Qt(t,e,i){return i>.5?e:t}function te(t,e,i,n,o){var a=t.length;if(1===o)for(s=0;so)t.length=o;else for(r=n;r=0&&!(m[i]<=e);i--);i=Math.min(i,u-2)}else{for(i=L;ie);i++);i=Math.min(i-1,u-2)}L=i,k=e;var n=m[i+1]-m[i];if(0!==n)if(I=(e-m[i])/n,l)if(A=v[i],T=v[0===i?i:i-1],D=v[i>u-2?u-1:i+1],C=v[i>u-3?u-1:i+2],d)ne(T,A,D,C,I,I*I,I*I*I,r(t,o),g);else{if(f)a=ne(T,A,D,C,I,I*I,I*I*I,P,1),a=re(P);else{if(p)return Qt(A,D,I);a=oe(T,A,D,C,I,I*I,I*I*I)}s(t,o,a)}else if(d)te(v[i],v[i+1],I,r(t,o),g);else{var a;if(f)te(v[i],v[i+1],I,P,1),a=re(P);else{if(p)return Qt(v[i],v[i+1],I);a=Jt(v[i],v[i+1],I)}s(t,o,a)}},ondestroy:i});return e&&"spline"!==e&&(N.easing=e),N}}}function ue(t,e,i,n,o,a,r,s){_(n)?(a=o,o=n,n=0):x(o)?(a=o,o="linear",n=0):x(n)?(a=n,n=0):x(i)?(a=i,i=500):i||(i=500),t.stopAnimation(),he(t,"",t,e,i,n,s);var l=t.animators.slice(),u=l.length;u||a&&a();for(var h=0;h0&&t.animate(e,!1).when(null==o?500:o,s).delay(a||0)}function ce(t,e,i,n){if(e){var o={};o[e]={},o[e][i]=n,t.attr(o)}else t.attr(i,n)}function de(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}function fe(t){for(var e=0;t>=eb;)e|=1&t,t>>=1;return t+e}function pe(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o=0;)o++;return o-e}function ge(t,e,i){for(i--;e>>1])<0?l=a:s=a+1;var u=n-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=r}}function ve(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])>0){for(s=n-o;l0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}else{for(s=o+1;ls&&(l=s);var u=r;r=o-l,l=o-u}for(r++;r>>1);a(t,e[i+h])>0?r=h+1:l=h}return l}function ye(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])<0){for(s=o+1;ls&&(l=s);var u=r;r=o-l,l=o-u}else{for(s=n-o;l=0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}for(r++;r>>1);a(t,e[i+h])<0?l=h:r=h+1}return l}function xe(t,e){function i(i){var s=a[i],u=r[i],h=a[i+1],c=r[i+1];r[i]=u+c,i===l-3&&(a[i+1]=a[i+2],r[i+1]=r[i+2]),l--;var d=ye(t[h],t,s,u,0,e);s+=d,0!==(u-=d)&&0!==(c=ve(t[s+u-1],t,h,c,c-1,e))&&(u<=c?n(s,u,h,c):o(s,u,h,c))}function n(i,n,o,a){var r=0;for(r=0;r=ib||f>=ib);if(p)break;g<0&&(g=0),g+=2}if((s=g)<1&&(s=1),1===n){for(r=0;r=0;r--)t[f+r]=t[d+r];if(0===n){v=!0;break}}if(t[c--]=u[h--],1==--a){v=!0;break}if(0!=(m=a-ve(t[l],u,0,a,a-1,e))){for(a-=m,f=(c-=m)+1,d=(h-=m)+1,r=0;r=ib||m>=ib);if(v)break;p<0&&(p=0),p+=2}if((s=p)<1&&(s=1),1===a){for(f=(c-=n)+1,d=(l-=n)+1,r=n-1;r>=0;r--)t[f+r]=t[d+r];t[c]=u[h]}else{if(0===a)throw new Error;for(d=c-(a-1),r=0;r=0;r--)t[f+r]=t[d+r];t[c]=u[h]}else for(d=c-(a-1),r=0;r1;){var t=l-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]r[t+1])break;i(t)}},this.forceMergeRuns=function(){for(;l>1;){var t=l-2;t>0&&r[t-1]s&&(l=s),me(t,i,i+l,i+a,e),a=l}r.pushRun(i,a),r.mergeRuns(),o-=a,i+=a}while(0!==o);r.forceMergeRuns()}}function we(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function be(t,e,i){var n=null==e.x?0:e.x,o=null==e.x2?1:e.x2,a=null==e.y?0:e.y,r=null==e.y2?0:e.y2;return e.global||(n=n*i.width+i.x,o=o*i.width+i.x,a=a*i.height+i.y,r=r*i.height+i.y),n=isNaN(n)?0:n,o=isNaN(o)?1:o,a=isNaN(a)?0:a,r=isNaN(r)?0:r,t.createLinearGradient(n,a,o,r)}function Se(t,e,i){var n=i.width,o=i.height,a=Math.min(n,o),r=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;return e.global||(r=r*n+i.x,s=s*o+i.y,l*=a),t.createRadialGradient(r,s,0,r,s,l)}function Me(){return!1}function Ie(t,e,i){var n=iw(),o=e.getWidth(),a=e.getHeight(),r=n.style;return r&&(r.position="absolute",r.left=0,r.top=0,r.width=o+"px",r.height=a+"px",n.setAttribute("data-zr-dom-id",t)),n.width=o*i,n.height=a*i,n}function Te(t){if("string"==typeof t){var e=mb.get(t);return e&&e.image}return t}function Ae(t,e,i,n,o){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!i)return e;var a=mb.get(t),r={hostEl:i,cb:n,cbPayload:o};return a?!Ce(e=a.image)&&a.pending.push(r):((e=new Image).onload=e.onerror=De,mb.put(t,e.__cachedImgObj={image:e,pending:[r]}),e.src=e.__zrImageSrc=t),e}return t}return e}function De(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;exb&&(yb=0,vb={}),yb++,vb[i]=o,o}function ke(t,e,i,n,o,a,r,s){return r?Ne(t,e,i,n,o,a,r,s):Pe(t,e,i,n,o,a,s)}function Pe(t,e,i,n,o,a,r){var s=He(t,e,o,a,r),l=Le(t,e);o&&(l+=o[1]+o[3]);var u=s.outerHeight,h=new de(Oe(0,l,i),Ee(0,u,n),l,u);return h.lineHeight=s.lineHeight,h}function Ne(t,e,i,n,o,a,r,s){var l=Ze(t,{rich:r,truncate:s,font:e,textAlign:i,textPadding:o,textLineHeight:a}),u=l.outerWidth,h=l.outerHeight;return new de(Oe(0,u,i),Ee(0,h,n),u,h)}function Oe(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function Ee(t,e,i){return"middle"===i?t-=e/2:"bottom"===i&&(t-=e),t}function Re(t,e,i){var n=e.x,o=e.y,a=e.height,r=e.width,s=a/2,l="left",u="top";switch(t){case"left":n-=i,o+=s,l="right",u="middle";break;case"right":n+=i+r,o+=s,u="middle";break;case"top":n+=r/2,o-=i,l="center",u="bottom";break;case"bottom":n+=r/2,o+=a+i,l="center";break;case"inside":n+=r/2,o+=s,l="center",u="middle";break;case"insideLeft":n+=i,o+=s,u="middle";break;case"insideRight":n+=r-i,o+=s,l="right",u="middle";break;case"insideTop":n+=r/2,o+=i,l="center";break;case"insideBottom":n+=r/2,o+=a-i,l="center",u="bottom";break;case"insideTopLeft":n+=i,o+=i;break;case"insideTopRight":n+=r-i,o+=i,l="right";break;case"insideBottomLeft":n+=i,o+=a-i,u="bottom";break;case"insideBottomRight":n+=r-i,o+=a-i,l="right",u="bottom"}return{x:n,y:o,textAlign:l,textVerticalAlign:u}}function ze(t,e,i,n,o){if(!e)return"";var a=(t+"").split("\n");o=Be(e,i,n,o);for(var r=0,s=a.length;r=r;l++)s-=r;var u=Le(i,e);return u>s&&(i="",u=0),s=t-u,n.ellipsis=i,n.ellipsisWidth=u,n.contentWidth=s,n.containerWidth=t,n}function Ve(t,e){var i=e.containerWidth,n=e.font,o=e.contentWidth;if(!i)return"";var a=Le(t,n);if(a<=i)return t;for(var r=0;;r++){if(a<=o||r>=e.maxIterations){t+=e.ellipsis;break}var s=0===r?Ge(t,o,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*o/a):0;a=Le(t=t.substr(0,s),n)}return""===t&&(t=e.placeholder),t}function Ge(t,e,i,n){for(var o=0,a=0,r=t.length;au)t="",r=[];else if(null!=h)for(var c=Be(h-(i?i[1]+i[3]:0),e,o.ellipsis,{minChar:o.minChar,placeholder:o.placeholder}),d=0,f=r.length;do&&Ue(i,t.substring(o,a)),Ue(i,n[2],n[1]),o=_b.lastIndex}of)return{lines:[],width:0,height:0};k.textWidth=Le(k.text,_);var b=y.textWidth,S=null==b||"auto"===b;if("string"==typeof b&&"%"===b.charAt(b.length-1))k.percentWidth=b,u.push(k),b=0;else{if(S){b=k.textWidth;var M=y.textBackgroundColor,I=M&&M.image;I&&Ce(I=Te(I))&&(b=Math.max(b,I.width*w/I.height))}var T=x?x[1]+x[3]:0;b+=T;var C=null!=d?d-m:null;null!=C&&Cl&&(i*=l/(c=i+n),n*=l/c),o+a>l&&(o*=l/(c=o+a),a*=l/c),n+o>u&&(n*=u/(c=n+o),o*=u/c),i+a>u&&(i*=u/(c=i+a),a*=u/c),t.moveTo(r+i,s),t.lineTo(r+l-n,s),0!==n&&t.arc(r+l-n,s+n,n,-Math.PI/2,0),t.lineTo(r+l,s+u-o),0!==o&&t.arc(r+l-o,s+u-o,o,0,Math.PI/2),t.lineTo(r+a,s+u),0!==a&&t.arc(r+a,s+u-a,a,Math.PI/2,Math.PI),t.lineTo(r,s+i),0!==i&&t.arc(r+i,s+i,i,Math.PI,1.5*Math.PI)}function Ye(t){return qe(t),d(t.rich,qe),t}function qe(t){if(t){t.font=Xe(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||Mb[e]?e:"left";var i=t.textVerticalAlign||t.textBaseline;"center"===i&&(i="middle"),t.textVerticalAlign=null==i||Ib[i]?i:"top",t.textPadding&&(t.textPadding=L(t.textPadding))}}function Ke(t,e,i,n,o,a){n.rich?Je(t,e,i,n,o,a):$e(t,e,i,n,o,a)}function $e(t,e,i,n,o,a){var r,s=ii(n),l=!1,u=e.__attrCachedBy===rb.PLAIN_TEXT;a!==sb?(a&&(r=a.style,l=!s&&u&&r),e.__attrCachedBy=s?rb.NONE:rb.PLAIN_TEXT):u&&(e.__attrCachedBy=rb.NONE);var h=n.font||Sb;l&&h===(r.font||Sb)||(e.font=h);var c=t.__computedFont;t.__styleFont!==h&&(t.__styleFont=h,c=t.__computedFont=e.font);var d=n.textPadding,f=n.textLineHeight,p=t.__textCotentBlock;p&&!t.__dirtyText||(p=t.__textCotentBlock=He(i,c,d,f,n.truncate));var g=p.outerHeight,m=p.lines,v=p.lineHeight,y=ai(g,n,o),x=y.baseX,_=y.baseY,w=y.textAlign||"left",b=y.textVerticalAlign;ti(e,n,o,x,_);var S=Ee(_,g,b),M=x,I=S;if(s||d){var T=Le(i,c);d&&(T+=d[1]+d[3]);var A=Oe(x,T,w);s&&ni(t,e,n,A,S,T,g),d&&(M=hi(x,w,d),I+=d[0])}e.textAlign=w,e.textBaseline="middle",e.globalAlpha=n.opacity||1;for(B=0;B=0&&"right"===(_=b[C]).textAlign;)ei(t,e,_,n,M,v,D,"right"),I-=_.width,D-=_.width,C--;for(A+=(a-(A-m)-(y-D)-I)/2;T<=C;)ei(t,e,_=b[T],n,M,v,A+_.width/2,"center"),A+=_.width,T++;v+=M}}function ti(t,e,i,n,o){if(i&&e.textRotation){var a=e.textOrigin;"center"===a?(n=i.width/2+i.x,o=i.height/2+i.y):a&&(n=a[0]+i.x,o=a[1]+i.y),t.translate(n,o),t.rotate(-e.textRotation),t.translate(-n,-o)}}function ei(t,e,i,n,o,a,r,s){var l=n.rich[i.styleName]||{};l.text=i.text;var u=i.textVerticalAlign,h=a+o/2;"top"===u?h=a+i.height/2:"bottom"===u&&(h=a+o-i.height/2),!i.isLineHolder&&ii(l)&&ni(t,e,l,"right"===s?r-i.width:"center"===s?r-i.width/2:r,h-i.height/2,i.width,i.height);var c=i.textPadding;c&&(r=hi(r,s,c),h-=i.height/2-c[2]-i.textHeight/2),ri(e,"shadowBlur",D(l.textShadowBlur,n.textShadowBlur,0)),ri(e,"shadowColor",l.textShadowColor||n.textShadowColor||"transparent"),ri(e,"shadowOffsetX",D(l.textShadowOffsetX,n.textShadowOffsetX,0)),ri(e,"shadowOffsetY",D(l.textShadowOffsetY,n.textShadowOffsetY,0)),ri(e,"textAlign",s),ri(e,"textBaseline","middle"),ri(e,"font",i.font||Sb);var d=si(l.textStroke||n.textStroke,p),f=li(l.textFill||n.textFill),p=A(l.textStrokeWidth,n.textStrokeWidth);d&&(ri(e,"lineWidth",p),ri(e,"strokeStyle",d),e.strokeText(i.text,r,h)),f&&(ri(e,"fillStyle",f),e.fillText(i.text,r,h))}function ii(t){return!!(t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor)}function ni(t,e,i,n,o,a,r){var s=i.textBackgroundColor,l=i.textBorderWidth,u=i.textBorderColor,h=_(s);if(ri(e,"shadowBlur",i.textBoxShadowBlur||0),ri(e,"shadowColor",i.textBoxShadowColor||"transparent"),ri(e,"shadowOffsetX",i.textBoxShadowOffsetX||0),ri(e,"shadowOffsetY",i.textBoxShadowOffsetY||0),h||l&&u){e.beginPath();var c=i.textBorderRadius;c?je(e,{x:n,y:o,width:a,height:r,r:c}):e.rect(n,o,a,r),e.closePath()}if(h)if(ri(e,"fillStyle",s),null!=i.fillOpacity){f=e.globalAlpha;e.globalAlpha=i.fillOpacity*i.opacity,e.fill(),e.globalAlpha=f}else e.fill();else if(w(s)){var d=s.image;(d=Ae(d,null,t,oi,s))&&Ce(d)&&e.drawImage(d,n,o,a,r)}if(l&&u)if(ri(e,"lineWidth",l),ri(e,"strokeStyle",u),null!=i.strokeOpacity){var f=e.globalAlpha;e.globalAlpha=i.strokeOpacity*i.opacity,e.stroke(),e.globalAlpha=f}else e.stroke()}function oi(t,e){e.image=t}function ai(t,e,i){var n=e.x||0,o=e.y||0,a=e.textAlign,r=e.textVerticalAlign;if(i){var s=e.textPosition;if(s instanceof Array)n=i.x+ui(s[0],i.width),o=i.y+ui(s[1],i.height);else{var l=Re(s,i,e.textDistance);n=l.x,o=l.y,a=a||l.textAlign,r=r||l.textVerticalAlign}var u=e.textOffset;u&&(n+=u[0],o+=u[1])}return{baseX:n,baseY:o,textAlign:a,textVerticalAlign:r}}function ri(t,e,i){return t[e]=ab(t,e,i),t[e]}function si(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function li(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function ui(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function hi(t,e,i){return"right"===e?t-i[1]:"center"===e?t+i[3]/2-i[1]/2:t+i[3]}function ci(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function di(t){t=t||{},Kw.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new ub(t.style,this),this._rect=null,this.__clipPaths=[]}function fi(t){di.call(this,t)}function pi(t){return parseInt(t,10)}function gi(t){return!!t&&(!!t.__builtin__||"function"==typeof t.resize&&"function"==typeof t.refresh)}function mi(t,e,i){return Cb.copy(t.getBoundingRect()),t.transform&&Cb.applyTransform(t.transform),Lb.width=e,Lb.height=i,!Cb.intersect(Lb)}function vi(t,e){if(t===e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i=i.length&&i.push({option:t})}}),i}function Ni(t){var e=R();Zb(t,function(t,i){var n=t.exist;n&&e.set(n.id,t)}),Zb(t,function(t,i){var n=t.option;k(!n||null==n.id||!e.get(n.id)||e.get(n.id)===t,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&e.set(n.id,t),!t.keyInfo&&(t.keyInfo={})}),Zb(t,function(t,i){var n=t.exist,o=t.option,a=t.keyInfo;if(Ub(o)){if(a.name=null!=o.name?o.name+"":n?n.name:jb+i,n)a.id=n.id;else if(null!=o.id)a.id=o.id+"";else{var r=0;do{a.id="\0"+a.name+"\0"+r++}while(e.get(a.id))}e.set(a.id,t)}})}function Oi(t){var e=t.name;return!(!e||!e.indexOf(jb))}function Ei(t){return Ub(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Ri(t,e){function i(t,e,i){for(var n=0,o=t.length;n-rS&&trS||t<-rS}function tn(t,e,i,n,o){var a=1-o;return a*a*(a*t+3*o*e)+o*o*(o*n+3*a*i)}function en(t,e,i,n,o){var a=1-o;return 3*(((e-t)*a+2*(i-e)*o)*a+(n-i)*o*o)}function nn(t,e,i,n,o,a){var r=n+3*(e-i)-t,s=3*(i-2*e+t),l=3*(e-t),u=t-o,h=s*s-3*r*l,c=s*l-9*r*u,d=l*l-3*s*u,f=0;if(Ji(h)&&Ji(c))Ji(s)?a[0]=0:(M=-l/s)>=0&&M<=1&&(a[f++]=M);else{var p=c*c-4*h*d;if(Ji(p)){var g=c/h,m=-g/2;(M=-s/r+g)>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m)}else if(p>0){var v=aS(p),y=h*s+1.5*r*(-c+v),x=h*s+1.5*r*(-c-v);(M=(-s-((y=y<0?-oS(-y,uS):oS(y,uS))+(x=x<0?-oS(-x,uS):oS(x,uS))))/(3*r))>=0&&M<=1&&(a[f++]=M)}else{var _=(2*h*s-3*r*c)/(2*aS(h*h*h)),w=Math.acos(_)/3,b=aS(h),S=Math.cos(w),M=(-s-2*b*S)/(3*r),m=(-s+b*(S+lS*Math.sin(w)))/(3*r),I=(-s+b*(S-lS*Math.sin(w)))/(3*r);M>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m),I>=0&&I<=1&&(a[f++]=I)}}return f}function on(t,e,i,n,o){var a=6*i-12*e+6*t,r=9*e+3*n-3*t-9*i,s=3*e-3*t,l=0;if(Ji(r))Qi(a)&&(c=-s/a)>=0&&c<=1&&(o[l++]=c);else{var u=a*a-4*r*s;if(Ji(u))o[0]=-a/(2*r);else if(u>0){var h=aS(u),c=(-a+h)/(2*r),d=(-a-h)/(2*r);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function an(t,e,i,n,o,a){var r=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,u=(s-r)*o+r,h=(l-s)*o+s,c=(h-u)*o+u;a[0]=t,a[1]=r,a[2]=u,a[3]=c,a[4]=c,a[5]=h,a[6]=l,a[7]=n}function rn(t,e,i,n,o,a,r,s,l,u,h){var c,d,f,p,g,m=.005,v=1/0;hS[0]=l,hS[1]=u;for(var y=0;y<1;y+=.05)cS[0]=tn(t,i,o,r,y),cS[1]=tn(e,n,a,s,y),(p=hw(hS,cS))=0&&p=0&&c<=1&&(o[l++]=c);else{var u=r*r-4*a*s;if(Ji(u))(c=-r/(2*a))>=0&&c<=1&&(o[l++]=c);else if(u>0){var h=aS(u),c=(-r+h)/(2*a),d=(-r-h)/(2*a);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function hn(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function cn(t,e,i,n,o){var a=(e-t)*n+t,r=(i-e)*n+e,s=(r-a)*n+a;o[0]=t,o[1]=a,o[2]=s,o[3]=s,o[4]=r,o[5]=i}function dn(t,e,i,n,o,a,r,s,l){var u,h=.005,c=1/0;hS[0]=r,hS[1]=s;for(var d=0;d<1;d+=.05)cS[0]=sn(t,i,o,d),cS[1]=sn(e,n,a,d),(m=hw(hS,cS))=0&&m1e-4)return s[0]=t-i,s[1]=e-n,l[0]=t+i,void(l[1]=e+n);if(yS[0]=mS(o)*i+t,yS[1]=gS(o)*n+e,xS[0]=mS(a)*i+t,xS[1]=gS(a)*n+e,u(s,yS,xS),h(l,yS,xS),(o%=vS)<0&&(o+=vS),(a%=vS)<0&&(a+=vS),o>a&&!r?a+=vS:oo&&(_S[0]=mS(f)*i+t,_S[1]=gS(f)*n+e,u(s,_S,s),h(l,_S,l))}function yn(t,e,i,n,o,a,r){if(0===o)return!1;var s=o,l=0,u=t;if(r>e+s&&r>n+s||rt+s&&a>i+s||ae+c&&h>n+c&&h>a+c&&h>s+c||ht+c&&u>i+c&&u>o+c&&u>r+c||ue+u&&l>n+u&&l>a+u||lt+u&&s>i+u&&s>o+u||si||h+uo&&(o+=zS);var d=Math.atan2(l,s);return d<0&&(d+=zS),d>=n&&d<=o||d+zS>=n&&d+zS<=o}function Sn(t,e,i,n,o,a){if(a>e&&a>n||ao?r:0}function Mn(t,e){return Math.abs(t-e)e&&u>n&&u>a&&u>s||u1&&In(),c=tn(e,n,a,s,WS[0]),p>1&&(d=tn(e,n,a,s,WS[1]))),2===p?me&&s>n&&s>a||s=0&&u<=1){for(var h=0,c=sn(e,n,a,u),d=0;di||s<-i)return 0;u=Math.sqrt(i*i-s*s);FS[0]=-u,FS[1]=u;var l=Math.abs(n-o);if(l<1e-4)return 0;if(l%VS<1e-4){n=0,o=VS;p=a?1:-1;return r>=FS[0]+t&&r<=FS[1]+t?p:0}if(a){var u=n;n=wn(o),o=wn(u)}else n=wn(n),o=wn(o);n>o&&(o+=VS);for(var h=0,c=0;c<2;c++){var d=FS[c];if(d+t>r){var f=Math.atan2(s,d),p=a?1:-1;f<0&&(f=VS+f),(f>=n&&f<=o||f+VS>=n&&f+VS<=o)&&(f>Math.PI/2&&f<1.5*Math.PI&&(p=-p),h+=p)}}return h}function Cn(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,u=0,h=0;h1&&(i||(a+=Sn(r,s,l,u,n,o))),1===h&&(l=r=t[h],u=s=t[h+1]),c){case BS.M:r=l=t[h++],s=u=t[h++];break;case BS.L:if(i){if(yn(r,s,t[h],t[h+1],e,n,o))return!0}else a+=Sn(r,s,t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case BS.C:if(i){if(xn(r,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],e,n,o))return!0}else a+=Tn(r,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case BS.Q:if(i){if(_n(r,s,t[h++],t[h++],t[h],t[h+1],e,n,o))return!0}else a+=An(r,s,t[h++],t[h++],t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case BS.A:var d=t[h++],f=t[h++],p=t[h++],g=t[h++],m=t[h++],v=t[h++];h+=1;var y=1-t[h++],x=Math.cos(m)*p+d,_=Math.sin(m)*g+f;h>1?a+=Sn(r,s,x,_,n,o):(l=x,u=_);var w=(n-d)*g/p+d;if(i){if(bn(d,f,g,m,m+v,y,e,w,o))return!0}else a+=Dn(d,f,g,m,m+v,y,w,o);r=Math.cos(m+v)*p+d,s=Math.sin(m+v)*g+f;break;case BS.R:l=r=t[h++],u=s=t[h++];var x=l+t[h++],_=u+t[h++];if(i){if(yn(l,u,x,u,e,n,o)||yn(x,u,x,_,e,n,o)||yn(x,_,l,_,e,n,o)||yn(l,_,l,u,e,n,o))return!0}else a+=Sn(x,u,x,_,n,o),a+=Sn(l,_,l,u,n,o);break;case BS.Z:if(i){if(yn(r,s,l,u,e,n,o))return!0}else a+=Sn(r,s,l,u,n,o);r=l,s=u}}return i||Mn(s,u)||(a+=Sn(r,s,l,u,n,o)||0),0!==a}function Ln(t,e,i){return Cn(t,0,!1,e,i)}function kn(t,e,i,n){return Cn(t,e,!0,i,n)}function Pn(t){di.call(this,t),this.path=null}function Nn(t,e,i,n,o,a,r,s,l,u,h){var c=l*(tM/180),d=QS(c)*(t-i)/2+JS(c)*(e-n)/2,f=-1*JS(c)*(t-i)/2+QS(c)*(e-n)/2,p=d*d/(r*r)+f*f/(s*s);p>1&&(r*=$S(p),s*=$S(p));var g=(o===a?-1:1)*$S((r*r*(s*s)-r*r*(f*f)-s*s*(d*d))/(r*r*(f*f)+s*s*(d*d)))||0,m=g*r*f/s,v=g*-s*d/r,y=(t+i)/2+QS(c)*m-JS(c)*v,x=(e+n)/2+JS(c)*m+QS(c)*v,_=nM([1,0],[(d-m)/r,(f-v)/s]),w=[(d-m)/r,(f-v)/s],b=[(-1*d-m)/r,(-1*f-v)/s],S=nM(w,b);iM(w,b)<=-1&&(S=tM),iM(w,b)>=1&&(S=0),0===a&&S>0&&(S-=2*tM),1===a&&S<0&&(S+=2*tM),h.addData(u,y,x,r,s,_,S,c,a)}function On(t){if(!t)return new ES;for(var e,i=0,n=0,o=i,a=n,r=new ES,s=ES.CMD,l=t.match(oM),u=0;u=2){if(o&&"spline"!==o){var a=fM(n,o,i,e.smoothConstraint);t.moveTo(n[0][0],n[0][1]);for(var r=n.length,s=0;s<(i?r:r-1);s++){var l=a[2*s],u=a[2*s+1],h=n[(s+1)%r];t.bezierCurveTo(l[0],l[1],u[0],u[1],h[0],h[1])}}else{"spline"===o&&(n=dM(n,i)),t.moveTo(n[0][0],n[0][1]);for(var s=1,c=n.length;s=0)?(i={textFill:null,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth},t.textFill="#fff",null==t.textStroke&&(t.textStroke=a,null==t.textStrokeWidth&&(t.textStrokeWidth=2))):null!=a&&(i={textFill:null},t.textFill=a),i&&(t.insideRollback=i)}}function bo(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth,t.insideRollback=null)}function So(t,e){var i=e||e.getModel("textStyle");return P([t.fontStyle||i&&i.getShallow("fontStyle")||"",t.fontWeight||i&&i.getShallow("fontWeight")||"",(t.fontSize||i&&i.getShallow("fontSize")||12)+"px",t.fontFamily||i&&i.getShallow("fontFamily")||"sans-serif"].join(" "))}function Mo(t,e,i,n,o,a){if("function"==typeof o&&(a=o,o=null),n&&n.isAnimationEnabled()){var r=t?"Update":"",s=n.getShallow("animationDuration"+r),l=n.getShallow("animationEasing"+r),u=n.getShallow("animationDelay"+r);"function"==typeof u&&(u=u(o,n.getAnimationDelayParams?n.getAnimationDelayParams(e,o):null)),"function"==typeof s&&(s=s(o)),s>0?e.animateTo(i,s,u||0,l,a,!!a):(e.stopAnimation(),e.attr(i),a&&a())}else e.stopAnimation(),e.attr(i),a&&a()}function Io(t,e,i,n,o){Mo(!0,t,e,i,n,o)}function To(t,e,i,n,o){Mo(!1,t,e,i,n,o)}function Ao(t,e){for(var i=_t([]);t&&t!==e;)bt(i,t.getLocalTransform(),i),t=t.parent;return i}function Do(t,e,i){return e&&!c(e)&&(e=Tw.getLocalTransform(e)),i&&(e=Tt([],e)),Q([],t,e)}function Co(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=["left"===t?-n:"right"===t?n:0,"top"===t?-o:"bottom"===t?o:0];return a=Do(a,e,i),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function Lo(t,e,i,n){function o(t){var e={position:F(t.position),rotation:t.rotation};return t.shape&&(e.shape=a({},t.shape)),e}if(t&&e){var r=function(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=r[t.anid];if(e){var n=o(t);t.attr(o(e)),Io(t,n,i,t.dataIndex)}}})}}function ko(t,e){return f(t,function(t){var i=t[0];i=LM(i,e.x),i=kM(i,e.x+e.width);var n=t[1];return n=LM(n,e.y),n=kM(n,e.y+e.height),[i,n]})}function Po(t,e,i){var n=(e=a({rectHover:!0},e)).style={strokeNoScale:!0};if(i=i||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(n.image=t.slice(8),r(n,i),new fi(e)):Xn(t.replace("path://",""),e,i,"center")}function No(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}function Oo(t,e,i){for(var n=0;n0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function Vo(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?zo(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function Go(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Fo(t){return t.sort(function(t,e){return t-e}),t}function Wo(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Ho(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var o=e.indexOf(".");return o<0?0:e.length-1-o}function Zo(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),a=Math.round(i(Math.abs(e[1]-e[0]))/n),r=Math.min(Math.max(-o+a,0),20);return isFinite(r)?r:20}function Uo(t,e,i){if(!t[e])return 0;var n=p(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return 0;for(var o=Math.pow(10,i),a=f(t,function(t){return(isNaN(t)?0:t)/n*o*100}),r=100*o,s=f(a,function(t){return Math.floor(t)}),l=p(s,function(t,e){return t+e},0),u=f(a,function(t,e){return t-s[e]});lh&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/o}function Xo(t){var e=2*Math.PI;return(t%e+e)%e}function jo(t){return t>-UM&&t=-20?+t.toFixed(n<0?-n:0):t}function Jo(t){function e(t,i,n){return t.interval[n]=0}function ta(t){return isNaN(t)?"-":(t=(t+"").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function ea(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function ia(t){return null==t?"":(t+"").replace(KM,function(t,e){return $M[e]})}function na(t,e,i){y(e)||(e=[e]);var n=e.length;if(!n)return"";for(var o=e[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:i}}:""}function ra(t,e){return t+="","0000".substr(0,e-t.length)+t}function sa(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Yo(e),o=i?"UTC":"",a=n["get"+o+"FullYear"](),r=n["get"+o+"Month"]()+1,s=n["get"+o+"Date"](),l=n["get"+o+"Hours"](),u=n["get"+o+"Minutes"](),h=n["get"+o+"Seconds"](),c=n["get"+o+"Milliseconds"]();return t=t.replace("MM",ra(r,2)).replace("M",r).replace("yyyy",a).replace("yy",a%100).replace("dd",ra(s,2)).replace("d",s).replace("hh",ra(l,2)).replace("h",l).replace("mm",ra(u,2)).replace("m",u).replace("ss",ra(h,2)).replace("s",h).replace("SSS",ra(c,3))}function la(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function ua(t,e,i,n,o){var a=0,r=0;null==n&&(n=1/0),null==o&&(o=1/0);var s=0;e.eachChild(function(l,u){var h,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===t){var m=f.width+(g?-g.x+f.x:0);(h=a+m)>n||l.newline?(a=0,h=m,r+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(g?-g.y+f.y:0);(c=r+v)>o||l.newline?(a+=s+i,r=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=r,"horizontal"===t?a=h+i:r=c+i)})}function ha(t,e,i){var n=e.width,o=e.height,a=Vo(t.x,n),r=Vo(t.y,o),s=Vo(t.x2,n),l=Vo(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=qM(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}function ca(t,e,i){i=qM(i||0);var n=e.width,o=e.height,a=Vo(t.left,n),r=Vo(t.top,o),s=Vo(t.right,n),l=Vo(t.bottom,o),u=Vo(t.width,n),h=Vo(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(u)&&(u=n-s-d-a),isNaN(h)&&(h=o-l-c-r),null!=f&&(isNaN(u)&&isNaN(h)&&(f>n/o?u=.8*n:h=.8*o),isNaN(u)&&(u=f*h),isNaN(h)&&(h=u/f)),isNaN(a)&&(a=n-s-u-d),isNaN(r)&&(r=o-l-h-c),t.left||t.right){case"center":a=n/2-u/2-i[3];break;case"right":a=n-u-d}switch(t.top||t.bottom){case"middle":case"center":r=o/2-h/2-i[0];break;case"bottom":r=o-h-c}a=a||0,r=r||0,isNaN(u)&&(u=n-d-a-(s||0)),isNaN(h)&&(h=o-c-r-(l||0));var p=new de(a+i[3],r+i[0],u,h);return p.margin=i,p}function da(t,e,i,n,o){var a=!o||!o.hv||o.hv[0],s=!o||!o.hv||o.hv[1],l=o&&o.boundingMode||"all";if(a||s){var u;if("raw"===l)u="group"===t.type?new de(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(u=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();(u=u.clone()).applyTransform(h)}e=ca(r({width:u.width,height:u.height},e),i,n);var c=t.position,d=a?e.x-u.x:0,f=s?e.y-u.y:0;t.attr("position","raw"===l?[d,f]:[c[0]+d,c[1]+f])}}function fa(t,e){return null!=t[oI[e][0]]||null!=t[oI[e][1]]&&null!=t[oI[e][2]]}function pa(t,e,i){function n(i,n){var r={},l=0,u={},h=0;if(iI(i,function(e){u[e]=t[e]}),iI(i,function(t){o(e,t)&&(r[t]=u[t]=e[t]),a(r,t)&&l++,a(u,t)&&h++}),s[n])return a(e,i[1])?u[i[2]]=null:a(e,i[2])&&(u[i[1]]=null),u;if(2!==h&&l){if(l>=2)return r;for(var c=0;ce)return t[n];return t[i-1]}function ya(t){var e=t.get("coordinateSystem"),i={coordSysName:e,coordSysDims:[],axisMap:R(),categoryAxisMap:R()},n=fI[e];if(n)return n(t,i,i.axisMap,i.categoryAxisMap),i}function xa(t){return"category"===t.get("type")}function _a(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===vI?{}:[]),this.sourceFormat=t.sourceFormat||yI,this.seriesLayoutBy=t.seriesLayoutBy||_I,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&R(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}function wa(t){var e=t.option.source,i=yI;if(S(e))i=xI;else if(y(e)){0===e.length&&(i=gI);for(var n=0,o=e.length;n=e:"max"===i?t<=e:t===e}function Xa(t,e){return t.join(",")===e.join(",")}function ja(t,e){AI(e=e||{},function(e,i){if(null!=e){var n=t[i];if(lI.hasClass(i)){e=Di(e);var o=Pi(n=Di(n),e);t[i]=CI(o,function(t){return t.option&&t.exist?LI(t.exist,t.option,!0):t.exist||t.option})}else t[i]=LI(n,e,!0)}})}function Ya(t){var e=t&&t.itemStyle;if(e)for(var i=0,o=OI.length;i=0;p--){var g=t[p];if(s||(d=g.data.rawIndexOf(g.stackedByDimension,c)),d>=0){var m=g.data.getByRawIndex(g.stackResultDimension,d);if(h>=0&&m>0||h<=0&&m<0){h+=m,f=m;break}}}return n[0]=h,n[1]=f,n});r.hostModel.setData(l),e.data=l})}function rr(t,e){_a.isInstance(t)||(t=_a.seriesDataToSource(t)),this._source=t;var i=this._data=t.data,n=t.sourceFormat;n===xI&&(this._offset=0,this._dimSize=e,this._data=i),a(this,GI[n===gI?n+"_"+t.seriesLayoutBy:n])}function sr(){return this._data.length}function lr(t){return this._data[t]}function ur(t){for(var e=0;ee.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Mr(t,e){d(t.CHANGABLE_METHODS,function(i){t.wrapMethod(i,v(Ir,e))})}function Ir(t){var e=Tr(t);e&&e.setOutputEnd(this.count())}function Tr(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var o=n.agentStubMap;o&&(n=o.get(t.uid))}return n}}function Ar(){this.group=new tb,this.uid=Ro("viewChart"),this.renderTask=gr({plan:Lr,reset:kr}),this.renderTask.context={view:this}}function Dr(t,e){if(t&&(t.trigger(e),"group"===t.type))for(var i=0;i=0?n():c=setTimeout(n,-a),u=o};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function Nr(t,e,i,n){var o=t[e];if(o){var a=o[iT]||o,r=o[oT];if(o[nT]!==i||r!==n){if(null==i||!n)return t[e]=a;(o=t[e]=Pr(a,i,"debounce"===n))[iT]=a,o[oT]=n,o[nT]=i}return o}}function Or(t,e){var i=t[e];i&&i[iT]&&(t[e]=i[iT])}function Er(t,e,i,n){this.ecInstance=t,this.api=e,this.unfinished;var i=this._dataProcessorHandlers=i.slice(),n=this._visualHandlers=n.slice();this._allHandlers=i.concat(n),this._stageTaskMap=R()}function Rr(t,e,i,n,o){function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}o=o||{};var r;d(e,function(e,s){if(!o.visualType||o.visualType===e.visualType){var l=t._stageTaskMap.get(e.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,d=h.agentStubMap;d.each(function(t){a(o,t)&&(t.dirty(),c=!0)}),c&&h.dirty(),hT(h,n);var f=t.getPerformArgs(h,o.block);d.each(function(t){t.perform(f)}),r|=h.perform(f)}else u&&u.each(function(s,l){a(o,s)&&s.dirty();var u=t.getPerformArgs(s,o.block);u.skip=!e.performRawSeries&&i.isSeriesFiltered(s.context.model),hT(s,n),r|=s.perform(u)})}}),t.unfinished|=r}function zr(t,e,i,n,o){function a(i){var a=i.uid,s=r.get(a)||r.set(a,gr({plan:Hr,reset:Zr,count:Xr}));s.context={model:i,ecModel:n,api:o,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:t},jr(t,i,s)}var r=i.seriesTaskMap||(i.seriesTaskMap=R()),s=e.seriesType,l=e.getTargetSeries;e.createOnAllSeries?n.eachRawSeries(a):s?n.eachRawSeriesByType(s,a):l&&l(n,o).each(a);var u=t._pipelineMap;r.each(function(t,e){u.get(e)||(t.dispose(),r.removeKey(e))})}function Br(t,e,i,n,o){function a(e){var i=e.uid,n=s.get(i);n||(n=s.set(i,gr({reset:Gr,onDirty:Wr})),r.dirty()),n.context={model:e,overallProgress:h,modifyOutputEnd:c},n.agent=r,n.__block=h,jr(t,e,n)}var r=i.overallTask=i.overallTask||gr({reset:Vr});r.context={ecModel:n,api:o,overallReset:e.overallReset,scheduler:t};var s=r.agentStubMap=r.agentStubMap||R(),l=e.seriesType,u=e.getTargetSeries,h=!0,c=e.modifyOutputEnd;l?n.eachRawSeriesByType(l,a):u?u(n,o).each(a):(h=!1,d(n.getSeries(),a));var f=t._pipelineMap;s.each(function(t,e){f.get(e)||(t.dispose(),r.dirty(),s.removeKey(e))})}function Vr(t){t.overallReset(t.ecModel,t.api,t.payload)}function Gr(t,e){return t.overallProgress&&Fr}function Fr(){this.agent.dirty(),this.getDownstream().dirty()}function Wr(){this.agent&&this.agent.dirty()}function Hr(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Zr(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Di(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?f(e,function(t,e){return Ur(e)}):cT}function Ur(t){return function(e,i){var n=i.data,o=i.resetDefines[t];if(o&&o.dataEach)for(var a=e.start;a0?parseInt(n,10)/100:n?parseFloat(n):0;var o=i.getAttribute("stop-color")||"#000000";e.addColorStop(n,o)}i=i.nextSibling}}function Qr(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),r(e.__inheritedStyle,t.__inheritedStyle))}function ts(t){for(var e=P(t).split(_T),i=[],n=0;n0;a-=2){var r=o[a],s=o[a-1];switch(n=n||xt(),s){case"translate":r=P(r).split(_T),St(n,n,[parseFloat(r[0]),parseFloat(r[1]||0)]);break;case"scale":r=P(r).split(_T),It(n,n,[parseFloat(r[0]),parseFloat(r[1]||r[0])]);break;case"rotate":r=P(r).split(_T),Mt(n,n,parseFloat(r[0]));break;case"skew":r=P(r).split(_T),console.warn("Skew transform is not supported yet");break;case"matrix":r=P(r).split(_T);n[0]=parseFloat(r[0]),n[1]=parseFloat(r[1]),n[2]=parseFloat(r[2]),n[3]=parseFloat(r[3]),n[4]=parseFloat(r[4]),n[5]=parseFloat(r[5])}}e.setLocalTransform(n)}}function os(t){var e=t.getAttribute("style"),i={};if(!e)return i;var n={};TT.lastIndex=0;for(var o;null!=(o=TT.exec(e));)n[o[1]]=o[2];for(var a in ST)ST.hasOwnProperty(a)&&null!=n[a]&&(i[ST[a]]=n[a]);return i}function as(t,e,i){var n=e/t.width,o=i/t.height,a=Math.min(n,o);return{scale:[a,a],position:[-(t.x+t.width/2)*a+e/2,-(t.y+t.height/2)*a+i/2]}}function rs(t,e){return(new $r).parse(t,e)}function ss(t){return function(e,i,n){e=e&&e.toLowerCase(),fw.prototype[t].call(this,e,i,n)}}function ls(){fw.call(this)}function us(t,e,n){function o(t,e){return t.__prio-e.__prio}n=n||{},"string"==typeof e&&(e=JT[e]),this.id,this.group,this._dom=t;var a=this._zr=Ii(t,{renderer:n.renderer||"canvas",devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=Pr(m(a.flush,a),17),(e=i(e))&&BI(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new Fa;var r=this._api=As(this);_e($T,o),_e(YT,o),this._scheduler=new Er(this,r,YT,$T),fw.call(this,this._ecEventProcessor=new Ds),this._messageCenter=new ls,this._initEvents(),this.resize=m(this.resize,this),this._pendingActions=[],a.animation.on("frame",this._onframe,this),vs(a,this),N(this)}function hs(t,e,i){var n,o=this._model,a=this._coordSysMgr.getCoordinateSystems();e=Vi(o,e);for(var r=0;re.get("hoverLayerThreshold")&&!U_.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function Is(t,e){var i=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.style.blend!==i&&t.setStyle("blend",i),t.eachPendingDisplayable&&t.eachPendingDisplayable(function(t){t.setStyle("blend",i)})})}function Ts(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function As(t){var e=t._coordSysMgr;return a(new Ga(t),{getCoordinateSystems:m(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e.parent}}})}function Ds(){this.eventInfo}function Cs(t){function e(t,e){for(var n=0;n65535?dA:pA}function Js(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function Qs(t,e){d(gA.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods,d(mA,function(n){t[n]=i(e[n])}),t._calculationInfo=a(e._calculationInfo)}function tl(t,e,i,n,o){var a=cA[e.type],r=n-1,s=e.name,l=t[s][r];if(l&&l.length=0?this._indices[t]:-1}function al(t,e){var i=t._idList[e];return null==i&&(i=il(t,t._idDimIdx,e)),null==i&&(i=hA+e),i}function rl(t){return y(t)||(t=[t]),t}function sl(t,e){var i=t.dimensions,n=new vA(f(i,t.getDimensionInfo,t),t.hostModel);Qs(n,t);for(var o=n._storage={},a=t._storage,r=0;r=0?(o[s]=ll(a[s]),n._rawExtent[s]=ul(),n._extent[s]=null):o[s]=a[s])}return n}function ll(t){for(var e=new Array(t.length),i=0;in&&(r=o.interval=n);var s=o.intervalPrecision=Ml(r);return Tl(o.niceTickExtent=[MA(Math.ceil(t[0]/r)*r,s),MA(Math.floor(t[1]/r)*r,s)],t),o}function Ml(t){return Ho(t)+2}function Il(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function Tl(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Il(t,0,e),Il(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Al(t,e,i,n){var o=[];if(!t)return o;e[0]1e4)return[];return e[1]>(o.length?o[o.length-1]:i[1])&&o.push(e[1]),o}function Dl(t){return t.get("stack")||AA+t.seriesIndex}function Cl(t){return t.dim+t.index}function Ll(t){var e=[],i=t.axis;if("category"===i.type){for(var n=i.getBandWidth(),o=0;o=0?"p":"n",b=m;p&&(o[r][_]||(o[r][_]={p:m,n:m}),b=o[r][_][w]);var S,M,I,T;if(g)S=b,M=(A=i.dataToPoint([x,_]))[1]+l,I=A[0]-m,T=u,Math.abs(I)a[1]?(n=a[1],o=a[0]):(n=a[0],o=a[1]);var r=e.toGlobalCoord(e.dataToCoord(0));return ro&&(r=o),r}function Vl(t,e){return VA(t,BA(e))}function Gl(t,e){var i,n,o,a=t.type,r=e.getMin(),s=e.getMax(),l=null!=r,u=null!=s,h=t.getExtent();"ordinal"===a?i=e.getCategories().length:(y(n=e.get("boundaryGap"))||(n=[n||0,n||0]),"boolean"==typeof n[0]&&(n=[0,0]),n[0]=Vo(n[0],1),n[1]=Vo(n[1],1),o=h[1]-h[0]||Math.abs(h[0])),null==r&&(r="ordinal"===a?i?0:NaN:h[0]-n[0]*o),null==s&&(s="ordinal"===a?i?i-1:NaN:h[1]+n[1]*o),"dataMin"===r?r=h[0]:"function"==typeof r&&(r=r({min:h[0],max:h[1]})),"dataMax"===s?s=h[1]:"function"==typeof s&&(s=s({min:h[0],max:h[1]})),(null==r||!isFinite(r))&&(r=NaN),(null==s||!isFinite(s))&&(s=NaN),t.setBlank(I(r)||I(s)||"ordinal"===a&&!t.getOrdinalMeta().categories.length),e.getNeedCrossZero()&&(r>0&&s>0&&!l&&(r=0),r<0&&s<0&&!u&&(s=0));var c=e.ecModel;if(c&&"time"===a){var f,p=kl("bar",c);if(d(p,function(t){f|=t.getBaseAxis()===e.axis}),f){var g=Pl(p),m=Fl(r,s,e,g);r=m.min,s=m.max}}return[r,s]}function Fl(t,e,i,n){var o=i.axis.getExtent(),a=o[1]-o[0],r=Ol(n,i.axis);if(void 0===r)return{min:t,max:e};var s=1/0;d(r,function(t){s=Math.min(t.offset,s)});var l=-1/0;d(r,function(t){l=Math.max(t.offset+t.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/a)-h;return e+=c*(l/u),t-=c*(s/u),{min:t,max:e}}function Wl(t,e){var i=Gl(t,e),n=null!=e.getMin(),o=null!=e.getMax(),a=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var r=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:a,fixMin:n,fixMax:o,minInterval:"interval"===r||"time"===r?e.get("minInterval"):null,maxInterval:"interval"===r||"time"===r?e.get("maxInterval"):null});var s=e.get("interval");null!=s&&t.setInterval&&t.setInterval(s)}function Hl(t,e){if(e=e||t.get("type"))switch(e){case"category":return new SA(t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),[1/0,-1/0]);case"value":return new TA;default:return(xl.getClass(e)||TA).create(t)}}function Zl(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)}function Ul(t){var e=t.getLabelModel().get("formatter"),i="category"===t.type?t.scale.getExtent()[0]:null;return"string"==typeof e?e=function(e){return function(i){return i=t.scale.getLabel(i),e.replace("{value}",null!=i?i:"")}}(e):"function"==typeof e?function(n,o){return null!=i&&(o=n-i),e(Xl(t,n),o)}:function(e){return t.scale.getLabel(e)}}function Xl(t,e){return"category"===t.type?t.scale.getLabel(e):e}function jl(t){var e=t.model,i=t.scale;if(e.get("axisLabel.show")&&!i.isBlank()){var n,o,a="category"===t.type,r=i.getExtent();o=a?i.count():(n=i.getTicks()).length;var s,l=t.getLabelModel(),u=Ul(t),h=1;o>40&&(h=Math.ceil(o/40));for(var c=0;c>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}function ou(t){return"category"===t.type?ru(t):uu(t)}function au(t,e){return"category"===t.type?lu(t,e):{ticks:t.scale.getTicks()}}function ru(t){var e=t.getLabelModel(),i=su(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:i.labelCategoryInterval}:i}function su(t,e){var i=hu(t,"labels"),n=ql(e),o=cu(i,n);if(o)return o;var a,r;return a=x(n)?vu(t,n):mu(t,r="auto"===n?fu(t):n),du(i,n,{labels:a,labelCategoryInterval:r})}function lu(t,e){var i=hu(t,"ticks"),n=ql(e),o=cu(i,n);if(o)return o;var a,r;if(e.get("show")&&!t.scale.isBlank()||(a=[]),x(n))a=vu(t,n,!0);else if("auto"===n){var s=su(t,t.getLabelModel());r=s.labelCategoryInterval,a=f(s.labels,function(t){return t.tickValue})}else a=mu(t,r=n,!0);return du(i,n,{ticks:a,tickCategoryInterval:r})}function uu(t){var e=t.scale.getTicks(),i=Ul(t);return{labels:f(e,function(e,n){return{formattedLabel:i(e,n),rawLabel:t.scale.getLabel(e),tickValue:e}})}}function hu(t,e){return nD(t)[e]||(nD(t)[e]=[])}function cu(t,e){for(var i=0;i40&&(s=Math.max(1,Math.floor(r/40)));for(var l=a[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(n)),c=Math.abs(u*Math.sin(n)),d=0,f=0;l<=a[1];l+=s){var p=0,g=0,m=ke(i(l),e.font,"center","top");p=1.3*m.width,g=1.3*m.height,d=Math.max(d,p,7),f=Math.max(f,g,7)}var v=d/h,y=f/c;isNaN(v)&&(v=1/0),isNaN(y)&&(y=1/0);var x=Math.max(0,Math.floor(Math.min(v,y))),_=nD(t.model),w=_.lastAutoInterval,b=_.lastTickCount;return null!=w&&null!=b&&Math.abs(w-x)<=1&&Math.abs(b-r)<=1&&w>x?x=w:(_.lastTickCount=r,_.lastAutoInterval=x),x}function gu(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function mu(t,e,i){function n(t){l.push(i?t:{formattedLabel:o(t),rawLabel:a.getLabel(t),tickValue:t})}var o=Ul(t),a=t.scale,r=a.getExtent(),s=t.getLabelModel(),l=[],u=Math.max((e||0)+1,1),h=r[0],c=a.count();0!==h&&u>1&&c/u>2&&(h=Math.round(Math.ceil(h/u)*u));var d=Kl(t),f=s.get("showMinLabel")||d,p=s.get("showMaxLabel")||d;f&&h!==r[0]&&n(r[0]);for(var g=h;g<=r[1];g+=u)n(g);return p&&g!==r[1]&&n(r[1]),l}function vu(t,e,i){var n=t.scale,o=Ul(t),a=[];return d(n.getTicks(),function(t){var r=n.getLabel(t);e(t,r)&&a.push(i?t:{formattedLabel:o(t),rawLabel:r,tickValue:t})}),a}function yu(t,e){var i=(t[1]-t[0])/e/2;t[0]+=i,t[1]-=i}function xu(t,e,i,n,o){function a(t,e){return h?t>e:t0&&(t.coord-=u/(2*(e+1)))}),s={coord:e[r-1].coord+u},e.push(s)}var h=l[0]>l[1];a(e[0].coord,l[0])&&(o?e[0].coord=l[0]:e.shift()),o&&a(l[0],e[0].coord)&&e.unshift({coord:l[0]}),a(l[1],s.coord)&&(o?s.coord=l[1]:e.pop()),o&&a(s.coord,l[1])&&e.push({coord:l[1]})}}function _u(t,e){var i=t.mapDimension("defaultedLabel",!0),n=i.length;if(1===n)return fr(t,e,i[0]);if(n){for(var o=[],a=0;a0?i=n[0]:n[1]<0&&(i=n[1]),i}function Ou(t,e,i,n){var o=NaN;t.stacked&&(o=i.get(i.getCalculationInfo("stackedOverDimension"),n)),isNaN(o)&&(o=t.valueStart);var a=t.baseDataOffset,r=[];return r[a]=i.get(t.baseDim,n),r[1-a]=o,e.dataToPoint(r)}function Eu(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}function Ru(t){return isNaN(t[0])||isNaN(t[1])}function zu(t,e,i,n,o,a,r,s,l,u,h){return"none"!==u&&u?Bu.apply(this,arguments):Vu.apply(this,arguments)}function Bu(t,e,i,n,o,a,r,s,l,u,h){for(var c=0,d=i,f=0;f=o||d<0)break;if(Ru(p)){if(h){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]);else if(l>0){var g=e[c],m="y"===u?1:0,v=(p[m]-g[m])*l;_D(bD,g),bD[m]=g[m]+v,_D(SD,p),SD[m]=p[m]-v,t.bezierCurveTo(bD[0],bD[1],SD[0],SD[1],p[0],p[1])}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Vu(t,e,i,n,o,a,r,s,l,u,h){for(var c=0,d=i,f=0;f=o||d<0)break;if(Ru(p)){if(h){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]),_D(bD,p);else if(l>0){var g=d+a,m=e[g];if(h)for(;m&&Ru(e[g]);)m=e[g+=a];var v=.5,y=e[c];if(!(m=e[g])||Ru(m))_D(SD,p);else{Ru(m)&&!h&&(m=p),U(wD,m,y);var x,_;if("x"===u||"y"===u){var w="x"===u?0:1;x=Math.abs(p[w]-y[w]),_=Math.abs(p[w]-m[w])}else x=uw(p,y),_=uw(p,m);xD(SD,p,wD,-l*(1-(v=_/(_+x))))}vD(bD,bD,s),yD(bD,bD,r),vD(SD,SD,s),yD(SD,SD,r),t.bezierCurveTo(bD[0],bD[1],SD[0],SD[1],p[0],p[1]),xD(bD,p,wD,l*v)}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Gu(t,e){var i=[1/0,1/0],n=[-1/0,-1/0];if(e)for(var o=0;on[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}function Fu(t,e){if(t.length===e.length){for(var i=0;ie[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function Zu(t,e,i){if(!i.valueDim)return[];for(var n=[],o=0,a=e.count();oa[1]&&a.reverse();var r=o.getExtent(),s=Math.PI/180;i&&(a[0]-=.5,a[1]+=.5);var l=new hM({shape:{cx:Go(t.cx,1),cy:Go(t.cy,1),r0:Go(a[0],1),r:Go(a[1],1),startAngle:-r[0]*s,endAngle:-r[1]*s,clockwise:o.inverse}});return e&&(l.shape.endAngle=-r[0]*s,To(l,{shape:{endAngle:-r[1]*s}},n)),l}function ju(t,e,i,n){return"polar"===t.type?Xu(t,e,i,n):Uu(t,e,i,n)}function Yu(t,e,i){for(var n=e.getBaseAxis(),o="x"===n.dim||"radius"===n.dim?0:1,a=[],r=0;r=0;a--){var r=i[a].dimension,s=t.dimensions[r],l=t.getDimensionInfo(s);if("x"===(n=l&&l.coordDim)||"y"===n){o=i[a];break}}if(o){var u=e.getAxis(n),h=f(o.stops,function(t){return{coord:u.toGlobalCoord(u.dataToCoord(t.value)),color:t.color}}),c=h.length,p=o.outerColors.slice();c&&h[0].coord>h[c-1].coord&&(h.reverse(),p.reverse());var g=h[0].coord-10,m=h[c-1].coord+10,v=m-g;if(v<.001)return"transparent";d(h,function(t){t.offset=(t.coord-g)/v}),h.push({offset:c?h[c-1].offset:.5,color:p[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:p[0]||"transparent"});var y=new TM(0,0,0,0,h,!0);return y[n]=g,y[n+"2"]=m,y}}}function Ku(t,e,i){var n=t.get("showAllSymbol"),o="auto"===n;if(!n||o){var a=i.getAxesByScale("ordinal")[0];if(a&&(!o||!$u(a,e))){var r=e.mapDimension(a.dim),s={};return d(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(r,t))}}}}function $u(t,e){var i=t.getExtent(),n=Math.abs(i[1]-i[0])/t.scale.count();isNaN(n)&&(n=0);for(var o=e.count(),a=Math.max(1,Math.round(o/5)),r=0;rn)return!1;return!0}function Ju(t){return this._axes[t]}function Qu(t){LD.call(this,t)}function th(t,e){return e.type||(e.data?"category":"value")}function eh(t,e,i){return t.getCoordSysModel()===e}function ih(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}function nh(t,e,i,n){function o(t){return t.dim+"_"+t.index}i.getAxesOnZeroOf=function(){return a?[a]:[]};var a,r=t[e],s=i.model,l=s.get("axisLine.onZero"),u=s.get("axisLine.onZeroAxisIndex");if(l){if(null!=u)oh(r[u])&&(a=r[u]);else for(var h in r)if(r.hasOwnProperty(h)&&oh(r[h])&&!n[o(r[h])]){a=r[h];break}a&&(n[o(a)]=!0)}}function oh(t){return t&&"category"!==t.type&&"time"!==t.type&&Zl(t)}function ah(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function rh(t,e){return f(VD,function(e){return t.getReferringComponents(e)[0]})}function sh(t){return"cartesian2d"===t.get("coordinateSystem")}function lh(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e}function uh(t,e,i,n){var o,a,r=Xo(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;return jo(r-GD/2)?(a=l?"bottom":"top",o="center"):jo(r-1.5*GD)?(a=l?"top":"bottom",o="center"):(a="middle",o=r<1.5*GD&&r>GD/2?l?"left":"right":l?"right":"left"),{rotation:r,textAlign:o,textVerticalAlign:a}}function hh(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}function ch(t,e,i){if(!Kl(t.axis)){var n=t.get("axisLabel.showMinLabel"),o=t.get("axisLabel.showMaxLabel");e=e||[],i=i||[];var a=e[0],r=e[1],s=e[e.length-1],l=e[e.length-2],u=i[0],h=i[1],c=i[i.length-1],d=i[i.length-2];!1===n?(dh(a),dh(u)):fh(a,r)&&(n?(dh(r),dh(h)):(dh(a),dh(u))),!1===o?(dh(s),dh(c)):fh(l,s)&&(o?(dh(l),dh(d)):(dh(s),dh(c)))}}function dh(t){t&&(t.ignore=!0)}function fh(t,e,i){var n=t&&t.getBoundingRect().clone(),o=e&&e.getBoundingRect().clone();if(n&&o){var a=_t([]);return Mt(a,a,-t.rotation),n.applyTransform(bt([],a,t.getLocalTransform())),o.applyTransform(bt([],a,e.getLocalTransform())),n.intersect(o)}}function ph(t){return"middle"===t||"center"===t}function gh(t,e,i){var n=e.axis;if(e.get("axisTick.show")&&!n.scale.isBlank()){for(var o=e.getModel("axisTick"),a=o.getModel("lineStyle"),s=o.get("length"),l=n.getTicksCoords(),u=[],h=[],c=t._transform,d=[],f=0;f=0||t===e}function Sh(t){var e=Mh(t);if(e){var i=e.axisPointerModel,n=e.axis.scale,o=i.option,a=i.get("status"),r=i.get("value");null!=r&&(r=n.parse(r));var s=Th(i);null==a&&(o.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r0?"bottom":"top":o.width>0?"left":"right";l||kh(t.style,d,n,u,a,i,p),fo(t,d)}function Rh(t,e){var i=t.get(tC)||0;return Math.min(i,Math.abs(e.width),Math.abs(e.height))}function zh(t,e,i){var n=t.getData(),o=[],a=n.getLayout("valueAxisHorizontal")?1:0;o[1-a]=n.getLayout("valueAxisStart");var r=new nC({shape:{points:n.getLayout("largePoints")},incremental:!!i,__startPoint:o,__valueIdx:a});e.add(r),Bh(r,t,n)}function Bh(t,e,i){var n=i.getVisual("borderColor")||i.getVisual("color"),o=e.getModel("itemStyle").getItemStyle(["color","borderColor"]);t.useStyle(o),t.style.fill=null,t.style.stroke=n,t.style.lineWidth=i.getLayout("barWidth")}function Vh(t,e,i,n){var o=e.getData(),a=this.dataIndex,r=o.getName(a),s=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:r,seriesId:e.id}),o.each(function(t){Gh(o.getItemGraphicEl(t),o.getItemLayout(t),e.isSelected(o.getName(t)),s,i)})}function Gh(t,e,i,n,o){var a=(e.startAngle+e.endAngle)/2,r=Math.cos(a),s=Math.sin(a),l=i?n:0,u=[r*l,s*l];o?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function Fh(t,e){function i(){a.ignore=a.hoverIgnore,r.ignore=r.hoverIgnore}function n(){a.ignore=a.normalIgnore,r.ignore=r.normalIgnore}tb.call(this);var o=new hM({z2:2}),a=new gM,r=new rM;this.add(o),this.add(a),this.add(r),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function Wh(t,e,i,n,o,a,r){function s(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function l(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=r&&(d=r-10),!e&&d<=r&&(d=r+10),t[s].x=i+d*a,r=d}}t.sort(function(t,e){return t.y-e.y});for(var u,h=0,c=t.length,d=[],f=[],p=0;pe&&a+1t[a].y+t[a].height)return void s(a,n/2);s(i-1,n/2)}(p,c,-u),h=t[p].y+t[p].height;r-h<0&&s(c-1,h-r);for(p=0;p=i?f.push(t[p]):d.push(t[p]);l(d,!1,e,i,n,o),l(f,!0,e,i,n,o)}function Hh(t,e,i,n,o,a){for(var r=[],s=[],l=0;l3?1.4:o>1?1.2:1.1;hc(this,"zoom","zoomOnMouseWheel",t,{scale:n>0?s:1/s,originX:a,originY:r})}if(i){var l=Math.abs(n);hc(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(n>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:a,originY:r})}}}function uc(t){ic(this._zr,"globalPan")||hc(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY})}function hc(t,e,i,n,o){t.pointerChecker&&t.pointerChecker(n,o.originX,o.originY)&&(mw(n.event),cc(t,e,i,n,o))}function cc(t,e,i,n,o){o.isAvailableBehavior=m(dc,null,i,n),t.trigger(e,o)}function dc(t,e,i){var n=i[t];return!t||n&&(!_(n)||e.event[n+"Key"])}function fc(t,e,i){var n=t.target,o=n.position;o[0]+=e,o[1]+=i,n.dirty()}function pc(t,e,i,n){var o=t.target,a=t.zoomLimit,r=o.position,s=o.scale,l=t.zoom=t.zoom||1;if(l*=e,a){var u=a.min||0,h=a.max||1/0;l=Math.max(Math.min(h,l),u)}var c=l/t.zoom;t.zoom=l,r[0]-=(i-r[0])*(c-1),r[1]-=(n-r[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}function gc(t,e,i){var n=e.getComponentByElement(t.topTarget),o=n&&n.coordinateSystem;return n&&n!==i&&!RC[n.mainType]&&o&&o.model!==i}function mc(t,e){var i=t.getItemStyle(),n=t.get("areaColor");return null!=n&&(i.fill=n),i}function vc(t,e,i,n,o){i.off("click"),i.off("mousedown"),e.get("selectedMode")&&(i.on("mousedown",function(){t._mouseDownFlag=!0}),i.on("click",function(a){if(t._mouseDownFlag){t._mouseDownFlag=!1;for(var r=a.target;!r.__regions;)r=r.parent;if(r){var s={type:("geo"===e.mainType?"geo":"map")+"ToggleSelect",batch:f(r.__regions,function(t){return{name:t.name,from:o.uid}})};s[e.mainType+"Id"]=e.id,n.dispatchAction(s),yc(e,i)}}}))}function yc(t,e){e.eachChild(function(e){d(e.__regions,function(i){e.trigger(t.isSelected(i.name)?"emphasis":"normal")})})}function xc(t,e){var i=new tb;this.uid=Ro("ec_map_draw"),this._controller=new oc(t.getZr()),this._controllerHost={target:e?i:null},this.group=i,this._updateGroup=e,this._mouseDownFlag,this._mapName,this._initialized,i.add(this._regionsGroup=new tb),i.add(this._backgroundGroup=new tb)}function _c(t){var e=this[zC];e&&e.recordVersion===this[BC]&&wc(e,t)}function wc(t,e){var i=t.circle,n=t.labelModel,o=t.hoverLabelModel,a=t.emphasisText,r=t.normalText;e?(i.style.extendFrom(mo({},o,{text:o.get("show")?a:null},{isRectText:!0,useInsideStyle:!1},!0)),i.__mapOriginalZ2=i.z2,i.z2+=NM):(mo(i.style,n,{text:n.get("show")?r:null,textPosition:n.getShallow("position")||"bottom"},{isRectText:!0,useInsideStyle:!1}),i.dirty(!1),null!=i.__mapOriginalZ2&&(i.z2=i.__mapOriginalZ2,i.__mapOriginalZ2=null))}function bc(t,e,i){var n=t.getZoom(),o=t.getCenter(),a=e.zoom,r=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){r[0]-=e.dx,r[1]-=e.dy;o=t.pointToData(r);t.setCenter(o)}if(null!=a){if(i){var s=i.min||0,l=i.max||1/0;a=Math.max(Math.min(n*a,l),s)/n}t.scale[0]*=a,t.scale[1]*=a;var u=t.position,h=(e.originX-u[0])*(a-1),c=(e.originY-u[1])*(a-1);u[0]-=h,u[1]-=c,t.updateTransform();o=t.pointToData(r);t.setCenter(o),t.setZoom(a*n)}return{center:t.getCenter(),zoom:t.getZoom()}}function Sc(){Tw.call(this)}function Mc(t){this.name=t,this.zoomLimit,Tw.call(this),this._roamTransformable=new Sc,this._rawTransformable=new Sc,this._center,this._zoom}function Ic(t,e,i,n){var o=i.seriesModel,a=o?o.coordinateSystem:null;return a===this?a[t](n):null}function Tc(t,e,i,n){Mc.call(this,t),this.map=e;var o=OC.load(e,i);this._nameCoordMap=o.nameCoordMap,this._regionsMap=o.regionsMap,this._invertLongitute=null==n||n,this.regions=o.regions,this._rect=o.boundingRect}function Ac(t,e,i,n){var o=i.geoModel,a=i.seriesModel,r=o?o.coordinateSystem:a?a.coordinateSystem||(a.getReferringComponents("geo")[0]||{}).coordinateSystem:null;return r===this?r[t](n):null}function Dc(t,e){var i=t.get("boundingCoords");if(null!=i){var n=i[0],o=i[1];isNaN(n[0])||isNaN(n[1])||isNaN(o[0])||isNaN(o[1])||this.setBoundingRect(n[0],n[1],o[0]-n[0],o[1]-n[1])}var a,r=this.getBoundingRect(),s=t.get("layoutCenter"),l=t.get("layoutSize"),u=e.getWidth(),h=e.getHeight(),c=r.width/r.height*this.aspectScale,d=!1;s&&l&&(s=[Vo(s[0],u),Vo(s[1],h)],l=Vo(l,Math.min(u,h)),isNaN(s[0])||isNaN(s[1])||isNaN(l)||(d=!0));if(d){var f={};c>1?(f.width=l,f.height=l/c):(f.height=l,f.width=l*c),f.y=s[1]-f.height/2,f.x=s[0]-f.width/2}else(a=t.getBoxLayoutParams()).aspect=c,f=ca(a,{width:u,height:h});this.setViewRect(f.x,f.y,f.width,f.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function Cc(t,e){d(e.get("geoCoord"),function(e,i){t.addGeoCoord(i,e)})}function Lc(t,e){var i={};return d(t,function(t){t.each(t.mapDimension("value"),function(e,n){var o="ec-"+t.getName(n);i[o]=i[o]||[],isNaN(e)||i[o].push(e)})}),t[0].map(t[0].mapDimension("value"),function(n,o){for(var a="ec-"+t[0].getName(o),r=0,s=1/0,l=-1/0,u=i[a].length,h=0;h=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},n.push(a)}}function Wc(t,e){var i=t.isExpand?t.children:[],n=t.parentNode.children,o=t.hierNode.i?n[t.hierNode.i-1]:null;if(i.length){jc(t);var a=(i[0].hierNode.prelim+i[i.length-1].hierNode.prelim)/2;o?(t.hierNode.prelim=o.hierNode.prelim+e(t,o),t.hierNode.modifier=t.hierNode.prelim-a):t.hierNode.prelim=a}else o&&(t.hierNode.prelim=o.hierNode.prelim+e(t,o));t.parentNode.hierNode.defaultAncestor=Yc(t,o,t.parentNode.hierNode.defaultAncestor||n[0],e)}function Hc(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function Zc(t){return arguments.length?t:Qc}function Uc(t,e){var i={};return t-=Math.PI/2,i.x=e*Math.cos(t),i.y=e*Math.sin(t),i}function Xc(t,e){return ca(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function jc(t){for(var e=t.children,i=e.length,n=0,o=0;--i>=0;){var a=e[i];a.hierNode.prelim+=n,a.hierNode.modifier+=n,o+=a.hierNode.change,n+=a.hierNode.shift+o}}function Yc(t,e,i,n){if(e){for(var o=t,a=t,r=a.parentNode.children[0],s=e,l=o.hierNode.modifier,u=a.hierNode.modifier,h=r.hierNode.modifier,c=s.hierNode.modifier;s=qc(s),a=Kc(a),s&&a;){o=qc(o),r=Kc(r),o.hierNode.ancestor=t;var d=s.hierNode.prelim+c-a.hierNode.prelim-u+n(s,a);d>0&&(Jc($c(s,t,i),t,d),u+=d,l+=d),c+=s.hierNode.modifier,u+=a.hierNode.modifier,l+=o.hierNode.modifier,h+=r.hierNode.modifier}s&&!qc(o)&&(o.hierNode.thread=s,o.hierNode.modifier+=c-l),a&&!Kc(r)&&(r.hierNode.thread=a,r.hierNode.modifier+=u-h,i=t)}return i}function qc(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function Kc(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function $c(t,e,i){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:i}function Jc(t,e,i){var n=i/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=n,e.hierNode.shift+=i,e.hierNode.modifier+=i,e.hierNode.prelim+=i,t.hierNode.change+=n}function Qc(t,e){return t.parentNode===e.parentNode?1:2}function td(t,e){var i=t.getItemLayout(e);return i&&!isNaN(i.x)&&!isNaN(i.y)&&"none"!==t.getItemVisual(e,"symbol")}function ed(t,e,i){return i.itemModel=e,i.itemStyle=e.getModel("itemStyle").getItemStyle(),i.hoverItemStyle=e.getModel("emphasis.itemStyle").getItemStyle(),i.lineStyle=e.getModel("lineStyle").getLineStyle(),i.labelModel=e.getModel("label"),i.hoverLabelModel=e.getModel("emphasis.label"),!1===t.isExpand&&0!==t.children.length?i.symbolInnerColor=i.itemStyle.fill:i.symbolInnerColor="#fff",i}function id(t,e,i,n,o,a){var s=!i,l=t.tree.getNodeByDataIndex(e),a=ed(l,l.getModel(),a),u=t.tree.root,h=l.parentNode===u?l:l.parentNode||l,c=t.getItemGraphicEl(h.dataIndex),d=h.getLayout(),f=c?{x:c.position[0],y:c.position[1],rawX:c.__radialOldRawX,rawY:c.__radialOldRawY}:d,p=l.getLayout();s?(i=new wu(t,e,a)).attr("position",[f.x,f.y]):i.updateData(t,e,a),i.__radialOldRawX=i.__radialRawX,i.__radialOldRawY=i.__radialRawY,i.__radialRawX=p.rawX,i.__radialRawY=p.rawY,n.add(i),t.setItemGraphicEl(e,i),Io(i,{position:[p.x,p.y]},o);var g=i.getSymbolPath();if("radial"===a.layout){var m,v,y=u.children[0],x=y.getLayout(),_=y.children.length;if(p.x===x.x&&!0===l.isExpand){var w={};w.x=(y.children[0].getLayout().x+y.children[_-1].getLayout().x)/2,w.y=(y.children[0].getLayout().y+y.children[_-1].getLayout().y)/2,(m=Math.atan2(w.y-x.y,w.x-x.x))<0&&(m=2*Math.PI+m),(v=w.xx.x)||(m-=Math.PI);var b=v?"left":"right";g.setStyle({textPosition:b,textRotation:-m,textOrigin:"center",verticalAlign:"middle"})}if(l.parentNode&&l.parentNode!==u){var S=i.__edge;S||(S=i.__edge=new bM({shape:od(a,f,f),style:r({opacity:0,strokeNoScale:!0},a.lineStyle)})),Io(S,{shape:od(a,d,p),style:{opacity:1}},o),n.add(S)}}function nd(t,e,i,n,o,a){for(var r,s=t.tree.getNodeByDataIndex(e),l=t.tree.root,a=ed(s,s.getModel(),a),u=s.parentNode===l?s:s.parentNode||s;null==(r=u.getLayout());)u=u.parentNode===l?u:u.parentNode||u;Io(i,{position:[r.x+1,r.y+1]},o,function(){n.remove(i),t.setItemGraphicEl(e,null)}),i.fadeOut(null,{keepLabel:!0});var h=i.__edge;h&&Io(h,{shape:od(a,r,r),style:{opacity:0}},o,function(){n.remove(h)})}function od(t,e,i){var n,o,a,r,s,l,u,h,c=t.orient;if("radial"===t.layout){s=e.rawX,u=e.rawY,l=i.rawX,h=i.rawY;var d=Uc(s,u),f=Uc(s,u+(h-u)*t.curvature),p=Uc(l,h+(u-h)*t.curvature),g=Uc(l,h);return{x1:d.x,y1:d.y,x2:g.x,y2:g.y,cpx1:f.x,cpy1:f.y,cpx2:p.x,cpy2:p.y}}return s=e.x,u=e.y,l=i.x,h=i.y,"LR"!==c&&"RL"!==c||(n=s+(l-s)*t.curvature,o=u,a=l+(s-l)*t.curvature,r=h),"TB"!==c&&"BT"!==c||(n=s,o=u+(h-u)*t.curvature,a=l,r=h+(u-h)*t.curvature),{x1:s,y1:u,x2:l,y2:h,cpx1:n,cpy1:o,cpx2:a,cpy2:r}}function ad(t,e,i){for(var n,o=[t],a=[];n=o.pop();)if(a.push(n),n.isExpand){var r=n.children;if(r.length)for(var s=0;s=0;a--)n.push(o[a])}}function sd(t,e){var i=Xc(t,e);t.layoutInfo=i;var n=t.get("layout"),o=0,a=0,r=null;"radial"===n?(o=2*Math.PI,a=Math.min(i.height,i.width)/2,r=Zc(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(o=i.width,a=i.height,r=Zc());var s=t.getData().tree.root,l=s.children[0];if(l){Fc(s),ad(l,Wc,r),s.hierNode.modifier=-l.hierNode.prelim,rd(l,Hc);var u=l,h=l,c=l;rd(l,function(t){var e=t.getLayout().x;eh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)});var d=u===h?1:r(u,h)/2,f=d-u.getLayout().x,p=0,g=0,m=0,v=0;if("radial"===n)p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),rd(l,function(t){m=(t.getLayout().x+f)*p,v=(t.depth-1)*g;var e=Uc(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)});else{var y=t.getOrient();"RL"===y||"LR"===y?(g=a/(h.getLayout().x+d+f),p=o/(c.depth-1||1),rd(l,function(t){v=(t.getLayout().x+f)*g,m="LR"===y?(t.depth-1)*p:o-(t.depth-1)*p,t.setLayout({x:m,y:v},!0)})):"TB"!==y&&"BT"!==y||(p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),rd(l,function(t){m=(t.getLayout().x+f)*p,v="TB"===y?(t.depth-1)*g:a-(t.depth-1)*g,t.setLayout({x:m,y:v},!0)}))}}}function ld(t,e,i){if(t&&l(e,t.type)>=0){var n=i.getData().tree.root,o=t.targetNode;if("string"==typeof o&&(o=n.getNodeById(o)),o&&n.contains(o))return{node:o};var a=t.targetNodeId;if(null!=a&&(o=n.getNodeById(a)))return{node:o}}}function ud(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function hd(t,e){return l(ud(t),e)>=0}function cd(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}function dd(t){var e=0;d(t.children,function(t){dd(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function fd(t,e){var i=e.get("color");if(i){var n;return d(t=t||[],function(t){var e=new No(t),i=e.get("color");(e.get("itemStyle.color")||i&&"none"!==i)&&(n=!0)}),n||((t[0]||(t[0]={})).color=i.slice()),t}}function pd(t){this.group=new tb,t.add(this.group)}function gd(t,e,i,n,o,a){var r=[[o?t:t-UC,e],[t+i,e],[t+i,e+n],[o?t:t-UC,e+n]];return!a&&r.splice(2,0,[t+i+UC,e+n/2]),!o&&r.push([t,e+n/2]),r}function md(t,e,i){t.eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&cd(i,e)}}function vd(){var t,e=[],i={};return{add:function(t,n,o,a,r){return _(a)&&(r=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:o,delay:a,easing:r}),!0)},done:function(e){return t=e,this},start:function(){for(var n=e.length,o=0,a=e.length;o=0;a--)null==i[a]&&(delete n[e[a]],e.pop())}function bd(t,e){var i=t.visual,n=[];w(i)?sL(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),Ld(t,n)}function Sd(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n("color",t(i("color"),e))},_doMap:Dd([0,1])}}function Md(t){var e=this.option.visual;return e[Math.round(Bo(t,[0,1],[0,e.length-1],!0))]||{}}function Id(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function Td(t){var e=this.option.visual;return e[this.option.loop&&t!==uL?t%e.length:t]}function Ad(){return this.option.visual[0]}function Dd(t){return{linear:function(e){return Bo(e,t,this.option.visual,!0)},category:Td,piecewise:function(e,i){var n=Cd.call(this,i);return null==n&&(n=Bo(e,t,this.option.visual,!0)),n},fixed:Ad}}function Cd(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=i[hL.findPieceIndex(t,i)];if(n&&n.visual)return n.visual[this.type]}}function Ld(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=f(e,function(t){return Gt(t)})),e}function kd(t,e,i){return t?e<=i:e=o.length||t===o[t.depth])&&Pd(t,Vd(r,h,t,e,g,a),i,n,o,a)})}else l=Od(h),t.setVisual("color",l)}}function Nd(t,e,i,n){var o=a({},e);return d(["color","colorAlpha","colorSaturation"],function(a){var r=t.get(a,!0);null==r&&i&&(r=i[a]),null==r&&(r=e[a]),null==r&&(r=n.get(a)),null!=r&&(o[a]=r)}),o}function Od(t){var e=Rd(t,"color");if(e){var i=Rd(t,"colorAlpha"),n=Rd(t,"colorSaturation");return n&&(e=jt(e,null,null,n)),i&&(e=Yt(e,i)),e}}function Ed(t,e){return null!=e?jt(e,null,null,t):null}function Rd(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function zd(t,e,i,n,o,a){if(a&&a.length){var r=Bd(e,"color")||null!=o.color&&"none"!==o.color&&(Bd(e,"colorAlpha")||Bd(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),u=i.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:r.name,dataExtent:u,visual:r.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new hL(c);return d.__drColorMappingBy=h,d}}}function Bd(t,e){var i=t.get(e);return fL(i)&&i.length?{name:e,range:i}:null}function Vd(t,e,i,n,o,r){var s=a({},e);if(o){var l=o.type,u="color"===l&&o.__drColorMappingBy,h="index"===u?n:"id"===u?r.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));s[l]=o.mapValueToVisual(h)}return s}function Gd(t,e,i,n){var o,a;if(!t.isRemoved()){var r=t.getLayout();o=r.width,a=r.height;var s=(f=t.getModel()).get(_L),l=f.get(wL)/2,u=Kd(f),h=Math.max(s,u),c=s-l,d=h-l,f=t.getModel();t.setLayout({borderWidth:s,upperHeight:h,upperLabelHeight:u},!0);var p=(o=mL(o-2*c,0))*(a=mL(a-c-d,0)),g=Fd(t,f,p,e,i,n);if(g.length){var m={x:c,y:d,width:o,height:a},v=vL(o,a),y=1/0,x=[];x.area=0;for(var _=0,w=g.length;_=0;l--){var u=o["asc"===n?r-l-1:l].getValue();u/i*es[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}function Ud(t,e,i){for(var n,o=0,a=1/0,r=0,s=t.length;ro&&(o=n));var l=t.area*t.area,u=e*e*i;return l?mL(u*o/l,l/(u*a)):1/0}function Xd(t,e,i,n,o){var a=e===i.width?0:1,r=1-a,s=["x","y"],l=["width","height"],u=i[s[a]],h=e?t.area/e:0;(o||h>i[l[r]])&&(h=i[l[r]]);for(var c=0,d=t.length;cXM&&(u=XM),a=s}u=0?n+=u:n-=u:p>=0?n-=u:n+=u}return n}function pf(t,e){return t.getVisual("opacity")||t.getModel().get(e)}function gf(t,e,i){var n=t.getGraphicEl(),o=pf(t,e);null!=i&&(null==o&&(o=1),o*=i),n.downplay&&n.downplay(),n.traverse(function(t){if("group"!==t.type){var e=t.lineLabelOriginalOpacity;null!=e&&null==i||(e=o),t.setStyle("opacity",e)}})}function mf(t,e){var i=pf(t,e),n=t.getGraphicEl();n.highlight&&n.highlight(),n.traverse(function(t){"group"!==t.type&&t.setStyle("opacity",i)})}function vf(t){return t instanceof Array||(t=[t,t]),t}function yf(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),xf(i)}}function xf(t){t.eachEdge(function(t){var e=t.getModel().get("lineStyle.curveness")||0,i=F(t.node1.getLayout()),n=F(t.node2.getLayout()),o=[i,n];+e&&o.push([(i[0]+n[0])/2-(i[1]-n[1])*e,(i[1]+n[1])/2-(n[0]-i[0])*e]),t.setLayout(o)})}function _f(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=e.getBoundingRect(),n=t.getData(),o=n.graph,a=0,r=n.getSum("value"),s=2*Math.PI/(r||n.count()),l=i.width/2+i.x,u=i.height/2+i.y,h=Math.min(i.width,i.height)/2;o.eachNode(function(t){var e=t.getValue("value");a+=s*(r?e:1)/2,t.setLayout([h*Math.cos(a)+l,h*Math.sin(a)+u]),a+=s*(r?e:1)/2}),n.setLayout({cx:l,cy:u}),o.eachEdge(function(t){var e,i=t.getModel().get("lineStyle.curveness")||0,n=F(t.node1.getLayout()),o=F(t.node2.getLayout()),a=(n[0]+o[0])/2,r=(n[1]+o[1])/2;+i&&(e=[l*(i*=3)+a*(1-i),u*i+r*(1-i)]),t.setLayout([n,o,e])})}}function wf(t,e,i){for(var n=i.rect,o=n.width,a=n.height,r=[n.x+o/2,n.y+a/2],s=null==i.gravity?.1:i.gravity,l=0;l0?-1:i<0?1:e?-1:1}}function Pf(t,e){return Math.min(e[1],Math.max(e[0],t))}function Nf(t,e,i){this._axesMap=R(),this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}function Of(t,e){return ek(ik(t,e[0]),e[1])}function Ef(t,e){var i=e.layoutLength/(e.axisCount-1);return{position:i*t,axisNameAvailableWidth:i,axisLabelShow:!0}}function Rf(t,e){var i,n,o=e.layoutLength,a=e.axisExpandWidth,r=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,h=!1;return tmk}function $f(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function Jf(t,e,i,n){var o=new tb;return o.add(new yM({name:"main",style:ip(i),silent:!0,draggable:!0,cursor:"move",drift:uk(t,e,o,"nswe"),ondragend:uk(qf,e,{isEnd:!0})})),hk(n,function(i){o.add(new yM({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:uk(t,e,o,i),ondragend:uk(qf,e,{isEnd:!0})}))}),o}function Qf(t,e,i,n){var o=n.brushStyle.lineWidth||0,a=fk(o,vk),r=i[0][0],s=i[1][0],l=r-o/2,u=s-o/2,h=i[0][1],c=i[1][1],d=h-a+o/2,f=c-a+o/2,p=h-r,g=c-s,m=p+o,v=g+o;ep(t,e,"main",r,s,p,g),n.transformable&&(ep(t,e,"w",l,u,a,v),ep(t,e,"e",d,u,a,v),ep(t,e,"n",l,u,m,a),ep(t,e,"s",l,f,m,a),ep(t,e,"nw",l,u,a,a),ep(t,e,"ne",d,u,a,a),ep(t,e,"sw",l,f,a,a),ep(t,e,"se",d,f,a,a))}function tp(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(ip(i)),o.attr({silent:!n,cursor:n?"move":"default"}),hk(["w","e","n","s","se","sw","ne","nw"],function(i){var o=e.childOfName(i),a=ap(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?_k[a]+"-resize":null})})}function ep(t,e,i,n,o,a,r){var s=e.childOfName(i);s&&s.setShape(hp(up(t,e,[[n,o],[n+a,o+r]])))}function ip(t){return r({strokeNoScale:!0},t.brushStyle)}function np(t,e,i,n){var o=[dk(t,i),dk(e,n)],a=[fk(t,i),fk(e,n)];return[[o[0],a[0]],[o[1],a[1]]]}function op(t){return Ao(t.group)}function ap(t,e){if(e.length>1)return("e"===(n=[ap(t,(e=e.split(""))[0]),ap(t,e[1])])[0]||"w"===n[0])&&n.reverse(),n.join("");var i={left:"w",right:"e",top:"n",bottom:"s"},n=Co({w:"left",e:"right",n:"top",s:"bottom"}[e],op(t));return i[n]}function rp(t,e,i,n,o,a,r,s){var l=n.__brushOption,u=t(l.range),h=lp(i,a,r);hk(o.split(""),function(t){var e=xk[t];u[e[0]][e[1]]+=h[e[0]]}),l.range=e(np(u[0][0],u[1][0],u[0][1],u[1][1])),Zf(i,n),qf(i,{isEnd:!1})}function sp(t,e,i,n,o){var a=e.__brushOption.range,r=lp(t,i,n);hk(a,function(t){t[0]+=r[0],t[1]+=r[1]}),Zf(t,e),qf(t,{isEnd:!1})}function lp(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),a=n.transformCoordToLocal(0,0);return[o[0]-a[0],o[1]-a[1]]}function up(t,e,n){var o=jf(t,e);return o&&!0!==o?o.clipPath(n,t._transform):i(n)}function hp(t){var e=dk(t[0][0],t[1][0]),i=dk(t[0][1],t[1][1]);return{x:e,y:i,width:fk(t[0][0],t[1][0])-e,height:fk(t[0][1],t[1][1])-i}}function cp(t,e,i){if(t._brushType){var n=t._zr,o=t._covers,a=Xf(t,e,i);if(!t._dragging)for(var r=0;r0;a--)Yp(s,l*=.99,r),jp(s,o,i,n,r),tg(s,l,r),jp(s,o,i,n,r)}function Up(t,e){var i=[],n="vertical"===e?"y":"x",o=Zi(t,function(t){return t.getLayout()[n]});return o.keys.sort(function(t,e){return t-e}),d(o.keys,function(t){i.push(o.buckets.get(t))}),i}function Xp(t,e,i,n,o,a,r){var s=[];d(e,function(t){var e=t.length,i=0,l=0;d(t,function(t){i+=t.getLayout().value}),l="vertical"===r?(o-(e-1)*a)/i:(n-(e-1)*a)/i,s.push(l)}),s.sort(function(t,e){return t-e});var l=s[0];d(e,function(t){d(t,function(t,e){var i=t.getLayout().value*l;"vertical"===r?(t.setLayout({x:e},!0),t.setLayout({dx:i},!0)):(t.setLayout({y:e},!0),t.setLayout({dy:i},!0))})}),d(i,function(t){var e=+t.getValue()*l;t.setLayout({dy:e},!0)})}function jp(t,e,i,n,o){d(t,function(t){var a,r,s,l=0,u=t.length;if("vertical"===o){var h;for(t.sort(function(t,e){return t.getLayout().x-e.getLayout().x}),s=0;s0&&(h=a.getLayout().x+r,a.setLayout({x:h},!0)),l=a.getLayout().x+a.getLayout().dx+e;if((r=l-e-n)>0)for(h=a.getLayout().x-r,a.setLayout({x:h},!0),l=h,s=u-2;s>=0;--s)(r=(a=t[s]).getLayout().x+a.getLayout().dx+e-l)>0&&(h=a.getLayout().x-r,a.setLayout({x:h},!0)),l=a.getLayout().x}else{var c;for(t.sort(function(t,e){return t.getLayout().y-e.getLayout().y}),s=0;s0&&(c=a.getLayout().y+r,a.setLayout({y:c},!0)),l=a.getLayout().y+a.getLayout().dy+e;if((r=l-e-i)>0)for(c=a.getLayout().y-r,a.setLayout({y:c},!0),l=c,s=u-2;s>=0;--s)(r=(a=t[s]).getLayout().y+a.getLayout().dy+e-l)>0&&(c=a.getLayout().y-r,a.setLayout({y:c},!0)),l=a.getLayout().y}})}function Yp(t,e,i){d(t.slice().reverse(),function(t){d(t,function(t){if(t.outEdges.length){var n=Qp(t.outEdges,qp,i)/Qp(t.outEdges,Jp,i);if("vertical"===i){var o=t.getLayout().x+(n-$p(t,i))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(n-$p(t,i))*e;t.setLayout({y:a},!0)}}})})}function qp(t,e){return $p(t.node2,e)*t.getValue()}function Kp(t,e){return $p(t.node1,e)*t.getValue()}function $p(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function Jp(t){return t.getValue()}function Qp(t,e,i){for(var n=0,o=t.length,a=-1;++a0?"P":"N",a=n.getVisual("borderColor"+o)||n.getVisual("color"+o),r=i.getModel(Gk).getItemStyle(Wk);e.useStyle(r),e.style.fill=null,e.style.stroke=a}function fg(t,e,i,n,o){return i>n?-1:i0?t.get(o,e-1)<=n?1:-1:1}function pg(t,e){var i,n=t.getBaseAxis(),o="category"===n.type?n.getBandWidth():(i=n.getExtent(),Math.abs(i[1]-i[0])/e.count()),a=Vo(A(t.get("barMaxWidth"),o),o),r=Vo(A(t.get("barMinWidth"),1),o),s=t.get("barWidth");return null!=s?Vo(s,o):Math.max(Math.min(o/2,a),r)}function gg(t){return y(t)||(t=[+t,+t]),t}function mg(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?e.color:null,fill:"fill"===e.brushType?e.color:null}})})}function vg(t,e){tb.call(this);var i=new wu(t,e),n=new tb;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}function yg(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=f(e,function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),o([e,t[0],t[1]])}))}function xg(t,e,i){tb.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}function _g(t,e,i){tb.call(this),this._createPolyline(t,e,i)}function wg(t,e,i){xg.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}function bg(){this.group=new tb}function Sg(t){return t instanceof Array||(t=[t,t]),t}function Mg(){var t=iw();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}function Ig(t,e,i){var n=t[1]-t[0],o=(e=f(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}})).length,a=0;return function(t){for(n=a;n=0;n--){var r=e[n].interval;if(r[0]<=t&&t<=r[1]){a=n;break}}return n>=0&&n=e[0]&&t<=e[1]}}function Ag(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}function Dg(t,e,i,n){var o=t.getItemLayout(e),a=i.get("symbolRepeat"),r=i.get("symbolClip"),s=i.get("symbolPosition")||"start",l=(i.get("symbolRotate")||0)*Math.PI/180||0,u=i.get("symbolPatternSize")||2,h=i.isAnimationEnabled(),c={dataIndex:e,layout:o,itemModel:i,symbolType:t.getItemVisual(e,"symbol")||"circle",color:t.getItemVisual(e,"color"),symbolClip:r,symbolRepeat:a,symbolRepeatDirection:i.get("symbolRepeatDirection"),symbolPatternSize:u,rotation:l,animationModel:h?i:null,hoverAnimation:h&&i.get("hoverAnimation"),z2:i.getShallow("z",!0)||0};Cg(i,a,o,n,c),kg(t,e,o,a,r,c.boundingLength,c.pxSign,u,n,c),Pg(i,c.symbolScale,l,n,c);var d=c.symbolSize,f=i.get("symbolOffset");return y(f)&&(f=[Vo(f[0],d[0]),Vo(f[1],d[1])]),Ng(i,d,o,a,r,f,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,n,c),c}function Cg(t,e,i,n,o){var a,r=n.valueDim,s=t.get("symbolBoundingData"),l=n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),u=l.toGlobalCoord(l.dataToCoord(0)),h=1-+(i[r.wh]<=0);if(y(s)){var c=[Lg(l,s[0])-u,Lg(l,s[1])-u];c[1]0?1:a<0?-1:0}function Lg(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function kg(t,e,i,n,o,a,r,s,l,u){var h=l.valueDim,c=l.categoryDim,d=Math.abs(i[c.wh]),f=t.getItemVisual(e,"symbolSize");y(f)?f=f.slice():(null==f&&(f="100%"),f=[f,f]),f[c.index]=Vo(f[c.index],d),f[h.index]=Vo(f[h.index],n?d:Math.abs(a)),u.symbolSize=f,(u.symbolScale=[f[0]/s,f[1]/s])[h.index]*=(l.isHorizontal?-1:1)*r}function Pg(t,e,i,n,o){var a=t.get(cP)||0;a&&(fP.attr({scale:e.slice(),rotation:i}),fP.updateTransform(),a/=fP.getLineScale(),a*=e[n.valueDim.index]),o.valueLineWidth=a}function Ng(t,e,i,n,o,r,s,l,u,h,c,d){var f=c.categoryDim,p=c.valueDim,g=d.pxSign,m=Math.max(e[p.index]+l,0),v=m;if(n){var y=Math.abs(u),x=T(t.get("symbolMargin"),"15%")+"",_=!1;x.lastIndexOf("!")===x.length-1&&(_=!0,x=x.slice(0,x.length-1)),x=Vo(x,e[p.index]);var w=Math.max(m+2*x,0),b=_?0:2*x,S=Qo(n),M=S?n:Kg((y+b)/w);w=m+2*(x=(y-M*m)/2/(_?M:M-1)),b=_?0:2*x,S||"fixed"===n||(M=h?Kg((Math.abs(h)+b)/w):0),v=M*w-b,d.repeatTimes=M,d.symbolMargin=x}var I=g*(v/2),A=d.pathPosition=[];A[f.index]=i[f.wh]/2,A[p.index]="start"===s?I:"end"===s?u-I:u/2,r&&(A[0]+=r[0],A[1]+=r[1]);var D=d.bundlePosition=[];D[f.index]=i[f.xy],D[p.index]=i[p.xy];var C=d.barRectShape=a({},i);C[p.wh]=g*Math.max(Math.abs(i[p.wh]),Math.abs(A[p.index]+I)),C[f.wh]=i[f.wh];var L=d.clipShape={};L[f.xy]=-i[f.xy],L[f.wh]=c.ecSize[f.wh],L[p.xy]=0,L[p.wh]=i[p.wh]}function Og(t){var e=t.symbolPatternSize,i=Jl(t.symbolType,-e/2,-e/2,e,e,t.color);return i.attr({culling:!0}),"image"!==i.type&&i.setStyle({strokeNoScale:!0}),i}function Eg(t,e,i,n){function o(t){var e=l.slice(),n=i.pxSign,o=t;return("start"===i.symbolRepeatDirection?n>0:n<0)&&(o=h-1-t),e[u.index]=d*(o-h/2+.5)+l[u.index],{position:e,scale:i.symbolScale.slice(),rotation:i.rotation}}var a=t.__pictorialBundle,r=i.symbolSize,s=i.valueLineWidth,l=i.pathPosition,u=e.valueDim,h=i.repeatTimes||0,c=0,d=r[e.valueDim.index]+s+2*i.symbolMargin;for(jg(t,function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=h,c0)],d=t.__pictorialBarRect;kh(d.style,h,a,n,e.seriesModel,o,c),fo(d,h)}function Kg(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}function $g(t,e,i){this.dimension="single",this.dimensions=["single"],this._axis=null,this._rect,this._init(t,e,i),this.model=t}function Jg(t,e){e=e||{};var i=t.coordinateSystem,n=t.axis,o={},a=n.position,r=n.orient,s=i.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],u={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};o.position=["vertical"===r?u.vertical[a]:l[0],"horizontal"===r?u.horizontal[a]:l[3]];var h={horizontal:0,vertical:1};o.rotation=Math.PI/2*h[r];var c={top:-1,bottom:1,right:1,left:-1};o.labelDirection=o.tickDirection=o.nameDirection=c[a],t.get("axisTick.inside")&&(o.tickDirection=-o.tickDirection),T(e.labelInside,t.get("axisLabel.inside"))&&(o.labelDirection=-o.labelDirection);var d=e.rotate;return null==d&&(d=t.get("axisLabel.rotate")),o.labelRotation="top"===a?-d:d,o.z2=1,o}function Qg(t,e,i,n,o){var r=t.axis;if(!r.scale.isBlank()&&r.containData(e))if(t.involveSeries){var s=tm(e,t),l=s.payloadBatch,u=s.snapToValue;l[0]&&null==o.seriesIndex&&a(o,l[0]),!n&&t.snap&&r.containData(u)&&null!=u&&(e=u),i.showPointer(t,e,l,o),i.showTooltip(t,s,u)}else i.showPointer(t,e)}function tm(t,e){var i=e.axis,n=i.dim,o=t,a=[],r=Number.MAX_VALUE,s=-1;return _P(e.seriesModels,function(e,l){var u,h,c=e.getData().mapDimension(n,!0);if(e.getAxisTooltipData){var d=e.getAxisTooltipData(c,t,i);h=d.dataIndices,u=d.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===i.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var f=t-u,p=Math.abs(f);p<=r&&((p=0&&s<0)&&(r=p,s=f,o=u,a.length=0),_P(h,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:o}}function em(t,e,i,n){t[e.key]={value:i,payloadBatch:n}}function im(t,e,i,n){var o=i.payloadBatch,a=e.axis,r=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&o.length){var l=e.coordSys.model,u=Ah(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:a.dim,axisIndex:r.componentIndex,axisType:r.type,axisId:r.id,value:n,valueLabelOpt:{precision:s.get("label.precision"),formatter:s.get("label.formatter")},seriesDataIndices:o.slice()})}}function nm(t,e,i){var n=i.axesInfo=[];_P(e,function(e,i){var o=e.axisPointerModel.option,a=t[i];a?(!e.useHandle&&(o.status="show"),o.value=a.value,o.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(o.status="hide"),"show"===o.status&&n.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:o.value})})}function om(t,e,i,n){if(!lm(e)&&t.list.length){var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}else n({type:"hideTip"})}function am(t,e,i){var n=i.getZr(),o=bP(n).axisPointerLastHighlights||{},a=bP(n).axisPointerLastHighlights={};_P(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&_P(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t})});var r=[],s=[];d(o,function(t,e){!a[e]&&s.push(t)}),d(a,function(t,e){!o[e]&&r.push(t)}),s.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:s}),r.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:r})}function rm(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}function sm(t){var e=t.axis.model,i={},n=i.axisDim=t.axis.dim;return i.axisIndex=i[n+"AxisIndex"]=e.componentIndex,i.axisName=i[n+"AxisName"]=e.name,i.axisId=i[n+"AxisId"]=e.id,i}function lm(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function um(t,e,i){if(!U_.node){var n=e.getZr();SP(n).records||(SP(n).records={}),hm(n,e),(SP(n).records[t]||(SP(n).records[t]={})).handler=i}}function hm(t,e){function i(i,n){t.on(i,function(i){var o=pm(e);MP(SP(t).records,function(t){t&&n(t,i,o.dispatchAction)}),cm(o.pendings,e)})}SP(t).initialized||(SP(t).initialized=!0,i("click",v(fm,"click")),i("mousemove",v(fm,"mousemove")),i("globalout",dm))}function cm(t,e){var i,n=t.showTip.length,o=t.hideTip.length;n?i=t.showTip[n-1]:o&&(i=t.hideTip[o-1]),i&&(i.dispatchAction=null,e.dispatchAction(i))}function dm(t,e,i){t.handler("leave",null,i)}function fm(t,e,i,n){e.handler(t,i,n)}function pm(t){var e={showTip:[],hideTip:[]},i=function(n){var o=e[n.type];o?o.push(n):(n.dispatchAction=i,t.dispatchAction(n))};return{dispatchAction:i,pendings:e}}function gm(t,e){if(!U_.node){var i=e.getZr();(SP(i).records||{})[t]&&(SP(i).records[t]=null)}}function mm(){}function vm(t,e,i,n){ym(TP(i).lastProp,n)||(TP(i).lastProp=n,e?Io(i,n,t):(i.stopAnimation(),i.attr(n)))}function ym(t,e){if(w(t)&&w(e)){var i=!0;return d(e,function(e,n){i=i&&ym(t[n],e)}),!!i}return t===e}function xm(t,e){t[e.get("label.show")?"show":"hide"]()}function _m(t){return{position:t.position.slice(),rotation:t.rotation||0}}function wm(t,e,i){var n=e.get("z"),o=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=o&&(t.zlevel=o),t.silent=i)})}function bm(t){var e,i=t.get("type"),n=t.getModel(i+"Style");return"line"===i?(e=n.getLineStyle()).fill=null:"shadow"===i&&((e=n.getAreaStyle()).stroke=null),e}function Sm(t,e,i,n,o){var a=Im(i.get("value"),e.axis,e.ecModel,i.get("seriesDataIndices"),{precision:i.get("label.precision"),formatter:i.get("label.formatter")}),r=i.getModel("label"),s=qM(r.get("padding")||0),l=r.getFont(),u=ke(a,l),h=o.position,c=u.width+s[1]+s[3],d=u.height+s[0]+s[2],f=o.align;"right"===f&&(h[0]-=c),"center"===f&&(h[0]-=c/2);var p=o.verticalAlign;"bottom"===p&&(h[1]-=d),"middle"===p&&(h[1]-=d/2),Mm(h,c,d,n);var g=r.get("backgroundColor");g&&"auto"!==g||(g=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:c,height:d,r:r.get("borderRadius")},position:h.slice(),style:{text:a,textFont:l,textFill:r.getTextColor(),textPosition:"inside",fill:g,stroke:r.get("borderColor")||"transparent",lineWidth:r.get("borderWidth")||0,shadowBlur:r.get("shadowBlur"),shadowColor:r.get("shadowColor"),shadowOffsetX:r.get("shadowOffsetX"),shadowOffsetY:r.get("shadowOffsetY")},z2:10}}function Mm(t,e,i,n){var o=n.getWidth(),a=n.getHeight();t[0]=Math.min(t[0]+e,o)-e,t[1]=Math.min(t[1]+i,a)-i,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function Im(t,e,i,n,o){t=e.scale.parse(t);var a=e.scale.getLabel(t,{precision:o.precision}),r=o.formatter;if(r){var s={value:Xl(e,t),seriesData:[]};d(n,function(t){var e=i.getSeriesByIndex(t.seriesIndex),n=t.dataIndexInside,o=e&&e.getDataParams(n);o&&s.seriesData.push(o)}),_(r)?a=r.replace("{value}",a):x(r)&&(a=r(s))}return a}function Tm(t,e,i){var n=xt();return Mt(n,n,i.rotation),St(n,n,i.position),Do([t.dataToCoord(e),(i.labelOffset||0)+(i.labelDirection||1)*(i.labelMargin||0)],n)}function Am(t,e,i,n,o,a){var r=FD.innerTextLayout(i.rotation,0,i.labelDirection);i.labelMargin=o.get("label.margin"),Sm(e,n,o,a,{position:Tm(n.axis,t,i),align:r.textAlign,verticalAlign:r.textVerticalAlign})}function Dm(t,e,i){return i=i||0,{x1:t[i],y1:t[1-i],x2:e[i],y2:e[1-i]}}function Cm(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}function Lm(t,e,i,n,o,a){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:a,clockwise:!0}}function km(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}function Pm(t){return"x"===t.dim?0:1}function Nm(t){return t.isHorizontal()?0:1}function Om(t,e){var i=t.getRect();return[i[kP[e]],i[kP[e]]+i[PP[e]]]}function Em(t,e,i){var n=new yM({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return To(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}function Rm(t,e,i){if(t.count())for(var n,o=e.coordinateSystem,a=e.getLayerSeries(),r=t.mapDimension("single"),s=t.mapDimension("value"),l=f(a,function(e){return f(e.indices,function(e){var i=o.dataToPoint(t.get(r,e));return i[1]=t.get(s,e),i})}),u=zm(l),h=u.y0,c=i/u.max,d=a.length,p=a[0].indices.length,g=0;ga&&(a=u),n.push(u)}for(var h=0;ha&&(a=d)}return r.y0=o,r.max=a,r}function Bm(t){var e=0;d(t.children,function(t){Bm(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function Vm(t,e,i){function n(){r.ignore=r.hoverIgnore}function o(){r.ignore=r.normalIgnore}tb.call(this);var a=new hM({z2:zP});a.seriesIndex=e.seriesIndex;var r=new rM({z2:BP,silent:t.getModel("label").get("silent")});this.add(a),this.add(r),this.updateData(!0,t,"normal",e,i),this.on("emphasis",n).on("normal",o).on("mouseover",n).on("mouseout",o)}function Gm(t,e,i){var n=t.getVisual("color"),o=t.getVisual("visualMeta");o&&0!==o.length||(n=null);var a=t.getModel("itemStyle").get("color");if(a)return a;if(n)return n;if(0===t.depth)return i.option.color[0];var r=i.option.color.length;return a=i.option.color[Fm(t)%r]}function Fm(t){for(var e=t;e.depth>1;)e=e.parentNode;return l(t.getAncestors()[0].children,e)}function Wm(t,e,i){return i!==RP.NONE&&(i===RP.SELF?t===e:i===RP.ANCESTOR?t===e||t.isAncestorOf(e):t===e||t.isDescendantOf(e))}function Hm(t,e,i){e.getData().setItemVisual(t.dataIndex,"color",i)}function Zm(t,e){var i=t.children||[];t.children=Um(i,e),i.length&&d(t.children,function(t){Zm(t,e)})}function Um(t,e){if("function"==typeof e)return t.sort(e);var i="asc"===e;return t.sort(function(t,e){var n=(t.getValue()-e.getValue())*(i?1:-1);return 0===n?(t.dataIndex-e.dataIndex)*(i?-1:1):n})}function Xm(t,e){return e=e||[0,0],f(["x","y"],function(i,n){var o=this.getAxis(i),a=e[n],r=t[n]/2;return"category"===o.type?o.getBandWidth():Math.abs(o.dataToCoord(a-r)-o.dataToCoord(a+r))},this)}function jm(t,e){return e=e||[0,0],f([0,1],function(i){var n=e[i],o=t[i]/2,a=[],r=[];return a[i]=n-o,r[i]=n+o,a[1-i]=r[1-i]=e[1-i],Math.abs(this.dataToPoint(a)[i]-this.dataToPoint(r)[i])},this)}function Ym(t,e){var i=this.getAxis(),n=e instanceof Array?e[0]:e,o=(t instanceof Array?t[0]:t)/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))}function qm(t,e){return f(["Radius","Angle"],function(i,n){var o=this["get"+i+"Axis"](),a=e[n],r=t[n]/2,s="dataTo"+i,l="category"===o.type?o.getBandWidth():Math.abs(o[s](a-r)-o[s](a+r));return"Angle"===i&&(l=l*Math.PI/180),l},this)}function Km(t){var e,i=t.type;if("path"===i){var n=t.shape,o=null!=n.width&&null!=n.height?{x:n.x||0,y:n.y||0,width:n.width,height:n.height}:null,a=lv(n);(e=Xn(a,null,o,n.layout||"center")).__customPathData=a}else"image"===i?(e=new fi({})).__customImagePath=t.style.image:"text"===i?(e=new rM({})).__customText=t.style.text:e=new(0,zM[i.charAt(0).toUpperCase()+i.slice(1)]);return e.__customGraphicType=i,e.name=t.name,e}function $m(t,e,n,o,a,r,s){var l={},u=n.style||{};if(n.shape&&(l.shape=i(n.shape)),n.position&&(l.position=n.position.slice()),n.scale&&(l.scale=n.scale.slice()),n.origin&&(l.origin=n.origin.slice()),n.rotation&&(l.rotation=n.rotation),"image"===t.type&&n.style){h=l.style={};d(["x","y","width","height"],function(e){Jm(e,h,u,t.style,r)})}if("text"===t.type&&n.style){var h=l.style={};d(["x","y"],function(e){Jm(e,h,u,t.style,r)}),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke)}if("group"!==t.type&&(t.useStyle(u),r)){t.style.opacity=0;var c=u.opacity;null==c&&(c=1),To(t,{style:{opacity:c}},o,e)}r?t.attr(l):Io(t,l,o,e),n.hasOwnProperty("z2")&&t.attr("z2",n.z2||0),n.hasOwnProperty("silent")&&t.attr("silent",n.silent),n.hasOwnProperty("invisible")&&t.attr("invisible",n.invisible),n.hasOwnProperty("ignore")&&t.attr("ignore",n.ignore),n.hasOwnProperty("info")&&t.attr("info",n.info);var f=n.styleEmphasis,p=!1===f;t.__cusHasEmphStl&&null==f||!t.__cusHasEmphStl&&p||(ro(t,f),t.__cusHasEmphStl=!p),s&&po(t,!p)}function Jm(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function Qm(t,e,i,n){function o(t){null==t&&(t=h),v&&(c=e.getItemModel(t),d=c.getModel(UP),f=c.getModel(XP),p=e.getItemVisual(t,"color"),v=!1)}var s=t.get("renderItem"),l=t.coordinateSystem,u={};l&&(u=l.prepareCustoms?l.prepareCustoms():YP[l.type](l));var h,c,d,f,p,g=r({getWidth:n.getWidth,getHeight:n.getHeight,getZr:n.getZr,getDevicePixelRatio:n.getDevicePixelRatio,value:function(t,i){return null==i&&(i=h),e.get(e.getDimension(t||0),i)},style:function(i,n){null==n&&(n=h),o(n);var r=c.getModel(HP).getItemStyle();null!=p&&(r.fill=p);var s=e.getItemVisual(n,"opacity");return null!=s&&(r.opacity=s),mo(r,d,null,{autoColor:p,isRectText:!0}),r.text=d.getShallow("show")?A(t.getFormattedLabel(n,"normal"),_u(e,n)):null,i&&a(r,i),r},styleEmphasis:function(i,n){null==n&&(n=h),o(n);var r=c.getModel(ZP).getItemStyle();return mo(r,f,null,{isRectText:!0},!0),r.text=f.getShallow("show")?D(t.getFormattedLabel(n,"emphasis"),t.getFormattedLabel(n,"normal"),_u(e,n)):null,i&&a(r,i),r},visual:function(t,i){return null==i&&(i=h),e.getItemVisual(i,t)},barLayout:function(t){if(l.getBaseAxis)return Ll(r({axis:l.getBaseAxis()},t),n)},currentSeriesIndices:function(){return i.getCurrentSeriesIndices()},font:function(t){return So(t,i)}},u.api||{}),m={context:{},seriesId:t.id,seriesName:t.name,seriesIndex:t.seriesIndex,coordSys:u.coordSys,dataInsideLength:e.count(),encode:tv(t.getData())},v=!0;return function(t,i){return h=t,v=!0,s&&s(r({dataIndexInside:t,dataIndex:e.getRawIndex(t),actionType:i?i.type:null},m),g)}}function tv(t){var e={};return d(t.dimensions,function(i,n){var o=t.getDimensionInfo(i);if(!o.isExtraCoord){var a=o.coordDim;(e[a]=e[a]||[])[o.coordDimIndex]=n}}),e}function ev(t,e,i,n,o,a){return(t=iv(t,e,i,n,o,a,!0))&&a.setItemGraphicEl(e,t),t}function iv(t,e,i,n,o,a,r){var s=!i,l=(i=i||{}).type,u=i.shape,h=i.style;if(t&&(s||null!=l&&l!==t.__customGraphicType||"path"===l&&uv(u)&&lv(u)!==t.__customPathData||"image"===l&&hv(h,"image")&&h.image!==t.__customImagePath||"text"===l&&hv(u,"text")&&h.text!==t.__customText)&&(o.remove(t),t=null),!s){var c=!t;return!t&&(t=Km(i)),$m(t,e,i,n,a,c,r),"group"===l&&nv(t,e,i,n,a),o.add(t),t}}function nv(t,e,i,n,o){var a=i.children,r=a?a.length:0,s=i.$mergeChildren,l="byName"===s||i.diffChildrenByName,u=!1===s;if(r||l||u)if(l)ov({oldChildren:t.children()||[],newChildren:a||[],dataIndex:e,animatableModel:n,group:t,data:o});else{u&&t.removeAll();for(var h=0;hn?t-=l+a:t+=a),null!=r&&(e+u+r>o?e-=u+r:e+=r),[t,e]}function Ov(t,e,i,n,o){var a=i.getOuterSize(),r=a.width,s=a.height;return t=Math.min(t+r,n)-r,e=Math.min(e+s,o)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function Ev(t,e,i){var n=i[0],o=i[1],a=0,r=0,s=e.width,l=e.height;switch(t){case"inside":a=e.x+s/2-n/2,r=e.y+l/2-o/2;break;case"top":a=e.x+s/2-n/2,r=e.y-o-5;break;case"bottom":a=e.x+s/2-n/2,r=e.y+l+5;break;case"left":a=e.x-n-5,r=e.y+l/2-o/2;break;case"right":a=e.x+s+5,r=e.y+l/2-o/2}return[a,r]}function Rv(t){return"center"===t||"middle"===t}function zv(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}function Bv(t){return t.dim}function Vv(t,e){var i={};d(t,function(t,e){var n=t.getData(),o=t.coordinateSystem.getBaseAxis(),a=o.getExtent(),r="category"===o.type?o.getBandWidth():Math.abs(a[1]-a[0])/n.count(),s=i[Bv(o)]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},l=s.stacks;i[Bv(o)]=s;var u=zv(t);l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var h=Vo(t.get("barWidth"),r),c=Vo(t.get("barMaxWidth"),r),d=t.get("barGap"),f=t.get("barCategoryGap");h&&!l[u].width&&(h=Math.min(s.remainedWidth,h),l[u].width=h,s.remainedWidth-=h),c&&(l[u].maxWidth=c),null!=d&&(s.gap=d),null!=f&&(s.categoryGap=f)});var n={};return d(i,function(t,e){n[e]={};var i=t.stacks,o=t.bandWidth,a=Vo(t.categoryGap,o),r=Vo(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,u=(s-a)/(l+(l-1)*r);u=Math.max(u,0),d(i,function(t,e){var i=t.maxWidth;i&&ie[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function jv(t){return t.getRadiusAxis().inverse?0:1}function Yv(t){var e=t[0],i=t[t.length-1];e&&i&&Math.abs(Math.abs(e.coord-i.coord)-360)<1e-4&&t.pop()}function qv(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotate:e.getModel("axisLabel").get("rotate"),z2:1}}function Kv(t,e,i,n,o){var a=e.axis,r=a.dataToCoord(t),s=n.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,h,c=n.getRadiusAxis().getExtent();if("radius"===a.dim){var d=xt();Mt(d,d,s),St(d,d,[n.cx,n.cy]),l=Do([r,-o],d);var f=e.getModel("axisLabel").get("rotate")||0,p=FD.innerTextLayout(s,f*Math.PI/180,-1);u=p.textAlign,h=p.textVerticalAlign}else{var g=c[1];l=n.coordToPoint([g+o,r]);var m=n.cx,v=n.cy;u=Math.abs(l[0]-m)/g<.3?"center":l[0]>m?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}function $v(t,e){e.update="updateView",Es(e,function(e,i){var n={};return i.eachComponent({mainType:"geo",query:e},function(i){i[t](e.name),d(i.coordinateSystem.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}function Jv(t){var e={};d(t,function(t){e[t]=1}),t.length=0,d(e,function(e,i){t.push(i)})}function Qv(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function ty(t,e,n){function o(){var t=function(){};return t.prototype.__hidden=t.prototype,new t}var a={};return MN(e,function(e){var r=a[e]=o();MN(t[e],function(t,o){if(hL.isValidType(o)){var a={type:o,visual:t};n&&n(a,e),r[o]=new hL(a),"opacity"===o&&((a=i(a)).type="colorAlpha",r.__hidden.__alphaForOpacity=new hL(a))}})}),a}function ey(t,e,n){var o;d(n,function(t){e.hasOwnProperty(t)&&Qv(e[t])&&(o=!0)}),o&&d(n,function(n){e.hasOwnProperty(n)&&Qv(e[n])?t[n]=i(e[n]):delete t[n]})}function iy(t,e,i,n,o,a){function r(t){return i.getItemVisual(h,t)}function s(t,e){i.setItemVisual(h,t,e)}function l(t,l){h=null==a?t:l;var c=i.getRawDataItem(h);if(!c||!1!==c.visualMap)for(var d=n.call(o,t),f=e[d],p=u[d],g=0,m=p.length;g1)return!1;var h=uy(i-t,o-t,n-e,a-e)/l;return!(h<0||h>1)}function ly(t){return t<=1e-6&&t>=-1e-6}function uy(t,e,i,n){return t*n-e*i}function hy(t,e,i){var n=this._targetInfoList=[],o={},a=dy(e,t);TN(PN,function(t,e){(!i||!i.include||AN(i.include,e)>=0)&&t(a,n,o)})}function cy(t){return t[0]>t[1]&&t.reverse(),t}function dy(t,e){return Vi(t,e,{includeMainTypes:LN})}function fy(t,e,i,n){var o=i.getAxis(["x","y"][t]),a=cy(f([0,1],function(t){return e?o.coordToData(o.toLocalCoord(n[t])):o.toGlobalCoord(o.dataToCoord(n[t]))})),r=[];return r[t]=a,r[1-t]=[NaN,NaN],{values:a,xyMinMax:r}}function py(t,e,i,n){return[e[0]-n[t]*i[0],e[1]-n[t]*i[1]]}function gy(t,e){var i=my(t),n=my(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}function my(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}function vy(t,e,i,n,o){if(o){var a=t.getZr();a[VN]||(a[BN]||(a[BN]=yy),Nr(a,BN,i,e)(t,n))}}function yy(t,e){if(!t.isDisposed()){var i=t.getZr();i[VN]=!0,t.dispatchAction({type:"brushSelect",batch:e}),i[VN]=!1}}function xy(t,e,i,n){for(var o=0,a=e.length;o=0}function Ny(t,e,i){function n(t,e){return l(e.nodes,t)>=0}function o(t,n){var o=!1;return e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]&&(o=!0)})}),o}function a(t,n){n.nodes.push(t),e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){var r={nodes:[],records:{}};if(e(function(t){r.records[t.name]={}}),!i)return r;a(i,r);var s;do{s=!1,t(function(t){!n(t,r)&&o(t,r)&&(a(t,r),s=!0)})}while(s);return r}}function Oy(t,e,i){var n=[1/0,-1/0];return $N(i,function(t){var i=t.getData();i&&$N(i.mapDimension(e,!0),function(t){var e=i.getApproximateExtent(t);e[0]n[1]&&(n[1]=e[1])})}),n[1]0?0:NaN);var r=i.getMax(!0);return null!=r&&"dataMax"!==r&&"function"!=typeof r?e[1]=r:o&&(e[1]=a>0?a-1:NaN),i.get("scale",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function Ry(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var a=Zo(o,[0,500]);a=Math.min(a,20);var r=e||0===n[0]&&100===n[1];i.setRange(r?null:+o[0].toFixed(a),r?null:+o[1].toFixed(a))}}function zy(t){var e=t._minMaxSpan={},i=t._dataZoomModel;$N(["min","max"],function(n){e[n+"Span"]=i.get(n+"Span");var o=i.get(n+"ValueSpan");if(null!=o&&(e[n+"ValueSpan"]=o,null!=(o=t.getAxisModel().axis.scale.parse(o)))){var a=t._dataExtent;e[n+"Span"]=Bo(a[0]+o,a,[0,100],!0)}})}function By(t){var e={};return tO(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function Vy(t,e){var i=t._rangePropMode,n=t.get("rangeMode");tO([["start","startValue"],["end","endValue"]],function(t,o){var a=null!=e[t[0]],r=null!=e[t[1]];a&&!r?i[o]="percent":!a&&r?i[o]="value":n?i[o]=n[o]:a&&(i[o]="percent")})}function Gy(t){return{x:"y",y:"x",radius:"angle",angle:"radius"}[t]}function Fy(t){return"vertical"===t?"ns-resize":"ew-resize"}function Wy(t,e){var i=Uy(t),n=e.dataZoomId,o=e.coordId;d(i,function(t,i){var a=t.dataZoomInfos;a[n]&&l(e.allCoordIds,o)<0&&(delete a[n],t.count--)}),jy(i);var a=i[o];a||((a=i[o]={coordId:o,dataZoomInfos:{},count:0}).controller=Xy(t,a),a.dispatchAction=v(Yy,t)),!a.dataZoomInfos[n]&&a.count++,a.dataZoomInfos[n]=e;var r=qy(a.dataZoomInfos);a.controller.enable(r.controlType,r.opt),a.controller.setPointerChecker(e.containsPoint),Nr(a,"dispatchAction",e.dataZoomModel.get("throttle",!0),"fixRate")}function Hy(t,e){var i=Uy(t);d(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),jy(i)}function Zy(t){return t.type+"\0_"+t.id}function Uy(t){var e=t.getZr();return e[fO]||(e[fO]={})}function Xy(t,e){var i=new oc(t.getZr());return d(["pan","zoom","scrollMove"],function(t){i.on(t,function(i){var n=[];d(e.dataZoomInfos,function(o){if(i.isAvailableBehavior(o.dataZoomModel.option)){var a=(o.getRange||{})[t],r=a&&a(e.controller,i);!o.dataZoomModel.get("disabled",!0)&&r&&n.push({dataZoomId:o.dataZoomId,start:r[0],end:r[1]})}}),n.length&&e.dispatchAction(n)})}),i}function jy(t){d(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function Yy(t,e){t.dispatchAction({type:"dataZoom",batch:e})}function qy(t){var e,i={type_true:2,type_move:1,type_false:0,type_undefined:-1},n=!0;return d(t,function(t){var o=t.dataZoomModel,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i["type_"+a]>i["type_"+e]&&(e=a),n&=o.get("preventDefaultMouseMove",!0)}),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!n}}}function Ky(t){return function(e,i,n,o){var a=this._range,r=a.slice(),s=e.axisModels[0];if(s){var l=t(r,s,e,i,n,o);return QL(l,r,[0,100],"all"),this._range=r,a[0]!==r[0]||a[1]!==r[1]?r:void 0}}}function $y(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}function Jy(t,e,i,n){for(var o=e.targetVisuals[n],a=hL.prepareVisualTypes(o),r={color:t.getData().getVisual("color")},s=0,l=a.length;s=0&&(r[a]=+r[a].toFixed(h)),r}function fx(t,e){var n=t.getData(),o=t.coordinateSystem;if(e&&!cx(e)&&!y(e.coord)&&o){var a=o.dimensions,r=px(e,n,o,t);if((e=i(e)).type&&YO[e.type]&&r.baseAxis&&r.valueAxis){var s=XO(a,r.baseAxis.dim),l=XO(a,r.valueAxis.dim);e.coord=YO[e.type](n,r.baseDataDim,r.valueDataDim,s,l),e.value=e.coord[l]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)YO[u[h]]&&(u[h]=yx(n,n.mapDimension(a[h]),u[h]));e.coord=u}}return e}function px(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(gx(n,o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=e.mapDimension(o.baseAxis.dim)):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=e.mapDimension(o.baseAxis.dim),o.valueDataDim=e.mapDimension(o.valueAxis.dim)),o}function gx(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var o=0;o=0)return!0}function Yx(t){for(var e=t.split(/\n+/g),i=[],n=f(Xx(e.shift()).split(pE),function(t){return{name:t,data:[]}}),o=0;o=0&&!i[o][n];o--);if(o<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(a){var r=a.getPercentRange();i[0][n]={dataZoomId:n,start:r[0],end:r[1]}}}}),i.push(e)}function t_(t){var e=n_(t),i=e[e.length-1];e.length>1&&e.pop();var n={};return gE(i,function(t,i){for(var o=e.length-1;o>=0;o--)if(t=e[o][i]){n[i]=t;break}}),n}function e_(t){t[mE]=null}function i_(t){return n_(t).length}function n_(t){var e=t[mE];return e||(e=t[mE]=[{}]),e}function o_(t,e,i){(this._brushController=new zf(i.getZr())).on("brush",m(this._onBrush,this)).mount(),this._isZoomActive}function a_(t){var e={};return d(["xAxisIndex","yAxisIndex"],function(i){e[i]=t[i],null==e[i]&&(e[i]="all"),(!1===e[i]||"none"===e[i])&&(e[i]=[])}),e}function r_(t,e){t.setIconStatus("back",i_(e)>1?"emphasis":"normal")}function s_(t,e,i,n,o){var a=i._isZoomActive;n&&"takeGlobalCursor"===n.type&&(a="dataZoomSelect"===n.key&&n.dataZoomSelectActive),i._isZoomActive=a,t.setIconStatus("zoom",a?"emphasis":"normal");var r=new hy(a_(t.option),e,{include:["grid"]});i._brushController.setPanels(r.makePanelOpts(o,function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"})).enableBrush(!!a&&{brushType:"auto",brushStyle:{lineWidth:0,fill:"rgba(0,0,0,0.2)"}})}function l_(t){this.model=t}function u_(t){return SE(t)}function h_(){if(!TE&&AE){TE=!0;var t=AE.styleSheets;t.length<31?AE.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}}function c_(t){return parseInt(t,10)}function d_(t,e){h_(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromStorage,a=e.addToStorage;e.delFromStorage=function(t){o.call(e,t),t&&t.onRemove&&t.onRemove(n)},e.addToStorage=function(t){t.onAdd&&t.onAdd(n),a.call(e,t)},this._firstPaint=!0}function f_(t){return function(){Yw('In IE8.0 VML mode painter not support method "'+t+'"')}}function p_(t){return document.createElementNS(sR,t)}function g_(t){return cR(1e4*t)/1e4}function m_(t){return t-vR}function v_(t,e){var i=e?t.textFill:t.fill;return null!=i&&i!==hR}function y_(t,e){var i=e?t.textStroke:t.stroke;return null!=i&&i!==hR}function x_(t,e){e&&__(t,"transform","matrix("+uR.call(e,",")+")")}function __(t,e,i){(!i||"linear"!==i.type&&"radial"!==i.type)&&t.setAttribute(e,i)}function w_(t,e,i){t.setAttributeNS("http://www.w3.org/1999/xlink",e,i)}function b_(t,e,i,n){if(v_(e,i)){var o=i?e.textFill:e.fill;o="transparent"===o?hR:o,"none"!==t.getAttribute("clip-path")&&o===hR&&(o="rgba(0, 0, 0, 0.002)"),__(t,"fill",o),__(t,"fill-opacity",null!=e.fillOpacity?e.fillOpacity*e.opacity:e.opacity)}else __(t,"fill",hR);if(y_(e,i)){var a=i?e.textStroke:e.stroke;__(t,"stroke",a="transparent"===a?hR:a),__(t,"stroke-width",(i?e.textStrokeWidth:e.lineWidth)/(!i&&e.strokeNoScale?n.getLineScale():1)),__(t,"paint-order",i?"stroke":"fill"),__(t,"stroke-opacity",null!=e.strokeOpacity?e.strokeOpacity:e.opacity),e.lineDash?(__(t,"stroke-dasharray",e.lineDash.join(",")),__(t,"stroke-dashoffset",cR(e.lineDashOffset||0))):__(t,"stroke-dasharray",""),e.lineCap&&__(t,"stroke-linecap",e.lineCap),e.lineJoin&&__(t,"stroke-linejoin",e.lineJoin),e.miterLimit&&__(t,"stroke-miterlimit",e.miterLimit)}else __(t,"stroke",hR)}function S_(t){for(var e=[],i=t.data,n=t.len(),o=0;o=gR||!m_(g)&&(d>-pR&&d<0||d>pR)==!!p;var y=g_(s+u*fR(c)),x=g_(l+h*dR(c));m&&(d=p?gR-1e-4:1e-4-gR,v=!0,9===o&&e.push("M",y,x));var _=g_(s+u*fR(c+d)),w=g_(l+h*dR(c+d));e.push("A",g_(u),g_(h),cR(f*mR),+v,+p,_,w);break;case lR.Z:a="Z";break;case lR.R:var _=g_(i[o++]),w=g_(i[o++]),b=g_(i[o++]),S=g_(i[o++]);e.push("M",_,w,"L",_+b,w,"L",_+b,w+S,"L",_,w+S,"L",_,w)}a&&e.push(a);for(var M=0;M=11),domSupported:"undefined"!=typeof document}}(navigator.userAgent),X_={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},j_={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},Y_=Object.prototype.toString,q_=Array.prototype,K_=q_.forEach,$_=q_.filter,J_=q_.slice,Q_=q_.map,tw=q_.reduce,ew={},iw=function(){return ew.createCanvas()};ew.createCanvas=function(){return document.createElement("canvas")};var nw,ow="__ec_primitive__";E.prototype={constructor:E,get:function(t){return this.data.hasOwnProperty(t)?this.data[t]:null},set:function(t,e){return this.data[t]=e},each:function(t,e){void 0!==e&&(t=m(t,e));for(var i in this.data)this.data.hasOwnProperty(i)&&t(this.data[i],i)},removeKey:function(t){delete this.data[t]}};var aw=(Object.freeze||Object)({$override:e,clone:i,merge:n,mergeAll:o,extend:a,defaults:r,createCanvas:iw,getContext:s,indexOf:l,inherits:u,mixin:h,isArrayLike:c,each:d,map:f,reduce:p,filter:g,find:function(t,e,i){if(t&&e)for(var n=0,o=t.length;n3&&(n=dw.call(n,1));for(var a=e.length,r=0;r4&&(n=dw.call(n,1,n.length-1));for(var a=n[n.length-1],r=e.length,s=0;s1&&n&&n.length>1){var a=ft(n)/ft(o);!isFinite(a)&&(a=1),e.pinchScale=a;var r=pt(n);return e.pinchX=r[0],e.pinchY=r[1],{type:"pinch",target:t[0].target,event:e}}}}},xw="silent";vt.prototype.dispose=function(){};var _w=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],ww=function(t,e,i,n){fw.call(this),this.storage=t,this.painter=e,this.painterRoot=n,i=i||new vt,this.proxy=null,this._hovered={},this._lastTouchMoment,this._lastX,this._lastY,this._gestureMgr,it.call(this),this.setHandlerProxy(i)};ww.prototype={constructor:ww,setHandlerProxy:function(t){this.proxy&&this.proxy.dispose(),t&&(d(_w,function(e){t.on&&t.on(e,this[e],this)},this),t.handler=this),this.proxy=t},mousemove:function(t){var e=t.zrX,i=t.zrY,n=this._hovered,o=n.target;o&&!o.__zr&&(o=(n=this.findHover(n.x,n.y)).target);var a=this._hovered=this.findHover(e,i),r=a.target,s=this.proxy;s.setCursor&&s.setCursor(r?r.cursor:"default"),o&&r!==o&&this.dispatchToElement(n,"mouseout",t),this.dispatchToElement(a,"mousemove",t),r&&r!==o&&this.dispatchToElement(a,"mouseover",t)},mouseout:function(t){this.dispatchToElement(this._hovered,"mouseout",t);var e,i=t.toElement||t.relatedTarget;do{i=i&&i.parentNode}while(i&&9!==i.nodeType&&!(e=i===this.painterRoot));!e&&this.trigger("globalout",{event:t})},resize:function(t){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){var n=(t=t||{}).target;if(!n||!n.silent){for(var o="on"+e,a=gt(e,t,i);n&&(n[o]&&(a.cancelBubble=n[o].call(n,a)),n.trigger(e,a),n=n.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[o]&&t[o].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o={x:t,y:e},a=n.length-1;a>=0;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=yt(n[a],t,e))&&(!o.topTarget&&(o.topTarget=n[a]),r!==xw)){o.target=n[a];break}}return o},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new vw);var i=this._gestureMgr;"start"===e&&i.clear();var n=i.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&i.clear(),n){var o=n.type;t.gestureEvent=o,this.dispatchToElement({target:n.target},o,n.event)}}},d(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){ww.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY),n=i.target;if("mousedown"===t)this._downEl=n,this._downPoint=[e.zrX,e.zrY],this._upEl=n;else if("mouseup"===t)this._upEl=n;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||uw(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(i,t,e)}}),h(ww,fw),h(ww,it);var bw="undefined"==typeof Float32Array?Array:Float32Array,Sw=(Object.freeze||Object)({create:xt,identity:_t,copy:wt,mul:bt,translate:St,rotate:Mt,scale:It,invert:Tt,clone:At}),Mw=_t,Iw=5e-5,Tw=function(t){(t=t||{}).position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},Aw=Tw.prototype;Aw.transform=null,Aw.needLocalTransform=function(){return Dt(this.rotation)||Dt(this.position[0])||Dt(this.position[1])||Dt(this.scale[0]-1)||Dt(this.scale[1]-1)};var Dw=[];Aw.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;if(i||e){n=n||xt(),i?this.getLocalTransform(n):Mw(n),e&&(i?bt(n,t.transform,n):wt(n,t.transform)),this.transform=n;var o=this.globalScaleRatio;if(null!=o&&1!==o){this.getGlobalScale(Dw);var a=Dw[0]<0?-1:1,r=Dw[1]<0?-1:1,s=((Dw[0]-a)*o+a)/Dw[0]||0,l=((Dw[1]-r)*o+r)/Dw[1]||0;n[0]*=s,n[1]*=s,n[2]*=l,n[3]*=l}this.invTransform=this.invTransform||xt(),Tt(this.invTransform,n)}else n&&Mw(n)},Aw.getLocalTransform=function(t){return Tw.getLocalTransform(this,t)},Aw.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},Aw.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var Cw=[],Lw=xt();Aw.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],i=t[2]*t[2]+t[3]*t[3],n=this.position,o=this.scale;Dt(e-1)&&(e=Math.sqrt(e)),Dt(i-1)&&(i=Math.sqrt(i)),t[0]<0&&(e=-e),t[3]<0&&(i=-i),n[0]=t[4],n[1]=t[5],o[0]=e,o[1]=i,this.rotation=Math.atan2(-t[1]/i,t[0]/e)}},Aw.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(bt(Cw,t.invTransform,e),e=Cw);var i=this.origin;i&&(i[0]||i[1])&&(Lw[4]=i[0],Lw[5]=i[1],bt(Cw,e,Lw),Cw[4]-=i[0],Cw[5]-=i[1],e=Cw),this.setLocalTransform(e)}},Aw.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},Aw.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&Q(i,i,n),i},Aw.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&Q(i,i,n),i},Tw.getLocalTransform=function(t,e){Mw(e=e||[]);var i=t.origin,n=t.scale||[1,1],o=t.rotation||0,a=t.position||[0,0];return i&&(e[4]-=i[0],e[5]-=i[1]),It(e,e,n),o&&Mt(e,e,o),i&&(e[4]+=i[0],e[5]+=i[1]),e[4]+=a[0],e[5]+=a[1],e};var kw={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-kw.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*kw.bounceIn(2*t):.5*kw.bounceOut(2*t-1)+.5}};Ct.prototype={constructor:Ct,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)this._pausedTime+=e;else{var i=(t-this._startTime-this._pausedTime)/this._life;if(!(i<0)){i=Math.min(i,1);var n=this.easing,o="string"==typeof n?kw[n]:n,a="function"==typeof o?o(i):i;return this.fire("frame",a),1===i?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){this[t="on"+t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var Pw=function(){this.head=null,this.tail=null,this._len=0},Nw=Pw.prototype;Nw.insert=function(t){var e=new Ow(t);return this.insertEntry(e),e},Nw.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Nw.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Nw.len=function(){return this._len},Nw.clear=function(){this.head=this.tail=null,this._len=0};var Ow=function(t){this.value=t,this.next,this.prev},Ew=function(t){this._list=new Pw,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Rw=Ew.prototype;Rw.put=function(t,e){var i=this._list,n=this._map,o=null;if(null==n[t]){var a=i.len(),r=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=i.head;i.remove(s),delete n[s.key],o=s.value,this._lastRemovedEntry=s}r?r.value=e:r=new Ow(e),r.key=t,i.insertEntry(r),n[t]=r}return o},Rw.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},Rw.clear=function(){this._list.clear(),this._map={}};var zw={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},Bw=new Ew(20),Vw=null,Gw=Ut,Fw=Xt,Ww=(Object.freeze||Object)({parse:Gt,lift:Ht,toHex:Zt,fastLerp:Ut,fastMapToColor:Gw,lerp:Xt,mapToColor:Fw,modifyHSL:jt,modifyAlpha:Yt,stringify:qt}),Hw=Array.prototype.slice,Zw=function(t,e,i,n){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||Kt,this._setter=n||$t,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Zw.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:ae(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;t=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new de(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},de.create=function(t){return new de(t.x,t.y,t.width,t.height)};var tb=function(t){t=t||{},Kw.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};tb.prototype={constructor:tb,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof tb&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,n=this._children,o=l(n,t);return o<0?this:(n.splice(o,1),t.parent=null,i&&(i.delFromStorage(t),t instanceof tb&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e=0&&(this.delFromStorage(t),this._roots.splice(o,1),t instanceof tb&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t&&(t.__storage=this,t.dirty(!1)),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:we};var ob={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1},ab=function(t,e,i){return ob.hasOwnProperty(e)?i*=t.dpr:i},rb={NONE:0,STYLE_BIND:1,PLAIN_TEXT:2},sb=9,lb=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],ub=function(t){this.extendFrom(t,!1)};ub.prototype={constructor:ub,fill:"#000",stroke:null,opacity:1,fillOpacity:null,strokeOpacity:null,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,i){var n=this,o=i&&i.style,a=!o||t.__attrCachedBy!==rb.STYLE_BIND;t.__attrCachedBy=rb.STYLE_BIND;for(var r=0;r0},extendFrom:function(t,e){if(t)for(var i in t)!t.hasOwnProperty(i)||!0!==e&&(!1===e?this.hasOwnProperty(i):null==t[i])||(this[i]=t[i])},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,i){for(var n=("radial"===e.type?Se:be)(t,e,i),o=e.colorStops,a=0;a=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i15)break}s.__drawIndex=m,s.__drawIndex0&&t>n[0]){for(r=0;rt);r++);a=i[n[r]]}if(n.splice(r+1,0,t),i[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else Yw("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n0?.01:0),this._needsManuallyCompositing),a.__builtin__||Yw("ZLevel "+s+" has been used by unkown layer "+a.id),a!==i&&(a.__used=!0,a.__startIndex!==o&&(a.__dirty=!0),a.__startIndex=o,a.incremental?a.__drawIndex=-1:a.__drawIndex=o,e(o),i=a),r.__dirty&&(a.__dirty=!0,a.incremental&&a.__drawIndex<0&&(a.__drawIndex=o))}e(o),this.eachBuiltinLayer(function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},setBackgroundColor:function(t){this._backgroundColor=t},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?n(i[t],e,!0):i[t]=e;for(var o=0;o=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i=0||n&&l(n,r)<0)){var s=e.getShallow(r);null!=s&&(o[t[a][0]]=s)}}return o}},tS=Qb([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),eS={getLineStyle:function(t){var e=tS(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}},iS=Qb([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),nS={getAreaStyle:function(t,e){return iS(this,t,e)}},oS=Math.pow,aS=Math.sqrt,rS=1e-8,sS=1e-4,lS=aS(3),uS=1/3,hS=V(),cS=V(),dS=V(),fS=Math.min,pS=Math.max,gS=Math.sin,mS=Math.cos,vS=2*Math.PI,yS=V(),xS=V(),_S=V(),wS=[],bS=[],SS={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},MS=[],IS=[],TS=[],AS=[],DS=Math.min,CS=Math.max,LS=Math.cos,kS=Math.sin,PS=Math.sqrt,NS=Math.abs,OS="undefined"!=typeof Float32Array,ES=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};ES.prototype={constructor:ES,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=NS(1/Xw/t)||0,this._uy=NS(1/Xw/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(SS.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=NS(t-this._xi)>this._ux||NS(e-this._yi)>this._uy||this._len<5;return this.addData(SS.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(SS.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(SS.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(SS.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=LS(o)*i+t,this._yi=kS(o)*i+e,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(SS.R,t,e,i,n),this},closePath:function(){this.addData(SS.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;i0&&f<=t||h<0&&f>=t||0===h&&(c>0&&p<=e||c<0&&p>=e);)f+=h*(i=r[n=this._dashIdx]),p+=c*i,this._dashIdx=(n+1)%g,h>0&&fl||c>0&&pu||s[n%2?"moveTo":"lineTo"](h>=0?DS(f,t):CS(f,t),c>=0?DS(p,e):CS(p,e));h=f-t,c=p-e,this._dashOffset=-PS(h*h+c*c)},_dashedBezierTo:function(t,e,i,n,o,a){var r,s,l,u,h,c=this._dashSum,d=this._dashOffset,f=this._lineDash,p=this._ctx,g=this._xi,m=this._yi,v=tn,y=0,x=this._dashIdx,_=f.length,w=0;for(d<0&&(d=c+d),d%=c,r=0;r<1;r+=.1)s=v(g,t,i,o,r+.1)-v(g,t,i,o,r),l=v(m,e,n,a,r+.1)-v(m,e,n,a,r),y+=PS(s*s+l*l);for(;x<_&&!((w+=f[x])>d);x++);for(r=(w-d)/y;r<=1;)u=v(g,t,i,o,r),h=v(m,e,n,a,r),x%2?p.moveTo(u,h):p.lineTo(u,h),r+=f[x]/y,x=(x+1)%_;x%2!=0&&p.lineTo(o,a),s=o-u,l=a-h,this._dashOffset=-PS(s*s+l*l)},_dashedQuadraticTo:function(t,e,i,n){var o=i,a=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,OS&&(this.data=new Float32Array(t)))},getBoundingRect:function(){MS[0]=MS[1]=TS[0]=TS[1]=Number.MAX_VALUE,IS[0]=IS[1]=AS[0]=AS[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,o=0,a=0;al||NS(r-o)>u||c===h-1)&&(t.lineTo(a,r),n=a,o=r);break;case SS.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case SS.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case SS.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],w=g>m?g:m,b=g>m?1:g/m,S=g>m?m/g:1,M=v+y;Math.abs(g-m)>.001?(t.translate(f,p),t.rotate(x),t.scale(b,S),t.arc(0,0,w,v,M,1-_),t.scale(1/b,1/S),t.rotate(-x),t.translate(-f,-p)):t.arc(f,p,w,v,M,1-_),1===c&&(e=LS(v)*g+f,i=kS(v)*m+p),n=LS(M)*g+f,o=kS(M)*m+p;break;case SS.R:e=n=s[c],i=o=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case SS.Z:t.closePath(),n=e,o=i}}}},ES.CMD=SS;var RS=2*Math.PI,zS=2*Math.PI,BS=ES.CMD,VS=2*Math.PI,GS=1e-4,FS=[-1,-1,-1],WS=[-1,-1],HS=fb.prototype.getCanvasPattern,ZS=Math.abs,US=new ES(!0);Pn.prototype={constructor:Pn,type:"path",__dirtyPath:!0,strokeContainThreshold:5,subPixelOptimize:!1,brush:function(t,e){var i=this.style,n=this.path||US,o=i.hasStroke(),a=i.hasFill(),r=i.fill,s=i.stroke,l=a&&!!r.colorStops,u=o&&!!s.colorStops,h=a&&!!r.image,c=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=i.getGradient(t,r,d)),u&&(d=d||this.getBoundingRect(),this._strokeGradient=i.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:h&&(t.fillStyle=HS.call(r,t)),u?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=HS.call(s,t));var f=i.lineDash,p=i.lineDashOffset,g=!!t.setLineDash,m=this.getGlobalScale();if(n.setScale(m[0],m[1]),this.__dirtyPath||f&&!g&&o?(n.beginPath(t),f&&!g&&(n.setLineDash(f),n.setLineDashOffset(p)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a)if(null!=i.fillOpacity){v=t.globalAlpha;t.globalAlpha=i.fillOpacity*i.opacity,n.fill(t),t.globalAlpha=v}else n.fill(t);if(f&&g&&(t.setLineDash(f),t.lineDashOffset=p),o)if(null!=i.strokeOpacity){var v=t.globalAlpha;t.globalAlpha=i.strokeOpacity*i.opacity,n.stroke(t),t.globalAlpha=v}else n.stroke(t);f&&g&&t.setLineDash([]),null!=i.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))},buildPath:function(t,e,i){},createPathProxy:function(){this.path=new ES},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;n||(n=this.path=new ES),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var a=e.lineWidth,r=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),r>1e-10&&(o.width+=a/r,o.height+=a/r,o.x-=a/r/2,o.y-=a/r/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var a=this.path.data;if(o.hasStroke()){var r=o.lineWidth,s=o.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(o.hasFill()||(r=Math.max(r,this.strokeContainThreshold)),kn(a,r/s,t,e)))return!0}if(o.hasFill())return Ln(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):di.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(w(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&ZS(t[0]-1)>1e-10&&ZS(t[3]-1)>1e-10?Math.sqrt(ZS(t[0]*t[3]-t[2]*t[1])):1}},Pn.extend=function(t){var e=function(e){Pn.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var n=this.shape;for(var o in i)!n.hasOwnProperty(o)&&i.hasOwnProperty(o)&&(n[o]=i[o])}t.init&&t.init.call(this,e)};u(e,Pn);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},u(Pn,di);var XS=ES.CMD,jS=[[],[],[]],YS=Math.sqrt,qS=Math.atan2,KS=function(t,e){var i,n,o,a,r,s,l=t.data,u=XS.M,h=XS.C,c=XS.L,d=XS.R,f=XS.A,p=XS.Q;for(o=0,a=0;o=11?function(){var e,i=this.__clipPaths,n=this.style;if(i)for(var o=0;oi-2?i-1:c+1],u=t[c>i-3?i-1:c+2]);var p=d*d,g=d*p;n.push([Bn(s[0],f[0],l[0],u[0],d,p,g),Bn(s[1],f[1],l[1],u[1],d,p,g)])}return n},fM=function(t,e,i,n){var o,a,r,s,l=[],u=[],h=[],c=[];if(n){r=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;d=i&&a>=o)return{x:i,y:o,width:n-i,height:a-o}},createIcon:Po,Group:tb,Image:fi,Text:rM,Circle:sM,Sector:hM,Ring:cM,Polygon:pM,Polyline:gM,Rect:yM,Line:_M,BezierCurve:bM,Arc:SM,IncrementalDisplayable:Zn,CompoundPath:MM,LinearGradient:TM,RadialGradient:AM,BoundingRect:de}),BM=["textStyle","color"],VM={getTextColor:function(t){var e=this.ecModel;return this.getShallow("color")||(!t&&e?e.get(BM):null)},getFont:function(){return So({fontStyle:this.getShallow("fontStyle"),fontWeight:this.getShallow("fontWeight"),fontSize:this.getShallow("fontSize"),fontFamily:this.getShallow("fontFamily")},this.ecModel)},getTextRect:function(t){return ke(t,this.getFont(),this.getShallow("align"),this.getShallow("verticalAlign")||this.getShallow("baseline"),this.getShallow("padding"),this.getShallow("lineHeight"),this.getShallow("rich"),this.getShallow("truncateText"))}},GM=Qb([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]),FM={getItemStyle:function(t,e){var i=GM(this,t,e),n=this.getBorderLineDash();return n&&(i.lineDash=n),i},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}},WM=h,HM=Bi();No.prototype={constructor:No,init:null,mergeOption:function(t){n(this.option,t,!0)},get:function(t,e){return null==t?this.option:Oo(this.option,this.parsePath(t),!e&&Eo(this,t))},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=!e&&Eo(this,t);return null==n&&o&&(n=o.getShallow(t)),n},getModel:function(t,e){var i,n=null==t?this.option:Oo(this.option,t=this.parsePath(t));return e=e||(i=Eo(this,t))&&i.getModel(t),new No(n,e,this.ecModel)},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){return new(0,this.constructor)(i(this.option))},setReadOnly:function(t){},parsePath:function(t){return"string"==typeof t&&(t=t.split(".")),t},customizeGetParent:function(t){HM(this).getParent=t},isAnimationEnabled:function(){if(!U_.node){if(null!=this.option.animation)return!!this.option.animation;if(this.parentModel)return this.parentModel.isAnimationEnabled()}}},ji(No),Yi(No),WM(No,eS),WM(No,nS),WM(No,VM),WM(No,FM);var ZM=0,UM=1e-4,XM=9007199254740991,jM=/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,YM=(Object.freeze||Object)({linearMap:Bo,parsePercent:Vo,round:Go,asc:Fo,getPrecision:Wo,getPrecisionSafe:Ho,getPixelPrecision:Zo,getPercentWithPrecision:Uo,MAX_SAFE_INTEGER:XM,remRadian:Xo,isRadianAroundZero:jo,parseDate:Yo,quantity:qo,nice:$o,quantile:function(t,e){var i=(t.length-1)*e+1,n=Math.floor(i),o=+t[n-1],a=i-n;return a?o+a*(t[n]-o):o},reformIntervals:Jo,isNumeric:Qo}),qM=L,KM=/([&<>"'])/g,$M={"&":"&","<":"<",">":">",'"':""","'":"'"},JM=["a","b","c","d","e","f","g"],QM=function(t,e){return"{"+t+(null==e?"":e)+"}"},tI=ze,eI=(Object.freeze||Object)({addCommas:ta,toCamelCase:ea,normalizeCssArray:qM,encodeHTML:ia,formatTpl:na,formatTplSimple:oa,getTooltipMarker:aa,formatTime:sa,capitalFirst:la,truncateText:tI,getTextBoundingRect:function(t){return ke(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)},getTextRect:function(t,e,i,n,o,a,r,s){return ke(t,e,i,n,o,s,a,r)}}),iI=d,nI=["left","right","top","bottom","width","height"],oI=[["width","left","right"],["height","top","bottom"]],aI=ua,rI=(v(ua,"vertical"),v(ua,"horizontal"),{getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}),sI=Bi(),lI=No.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){No.call(this,t,e,i,n),this.uid=Ro("ec_cpt_model")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,o=i?ga(t):{};n(t,e.getTheme().get(this.mainType)),n(t,this.getDefaultOption()),i&&pa(t,o,i)},mergeOption:function(t,e){n(this.option,t,!0);var i=this.layoutMode;i&&pa(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){var t=sI(this);if(!t.defaultOption){for(var e=[],i=this.constructor;i;){var o=i.prototype.defaultOption;o&&e.push(o),i=i.superClass}for(var a={},r=e.length-1;r>=0;r--)a=n(a,e[r],!0);t.defaultOption=a}return t.defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});$i(lI,{registerWhenExtend:!0}),function(t){var e={};t.registerSubTypeDefaulter=function(t,i){t=Ui(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=Ui(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o}}(lI),function(t,e){function i(t){var i={},a=[];return d(t,function(r){var s=n(i,r),u=o(s.originalDeps=e(r),t);s.entryCount=u.length,0===s.entryCount&&a.push(r),d(u,function(t){l(s.predecessor,t)<0&&s.predecessor.push(t);var e=n(i,t);l(e.successor,t)<0&&e.successor.push(r)})}),{graph:i,noEntryList:a}}function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function o(t,e){var i=[];return d(t,function(t){l(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,n,o){function a(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}if(t.length){var r=i(e),s=r.graph,l=r.noEntryList,u={};for(d(t,function(t){u[t]=!0});l.length;){var h=l.pop(),c=s[h],f=!!u[h];f&&(n.call(o,h,c.originalDeps.slice()),delete u[h]),d(c.successor,f?function(t){u[t]=!0,a(t)}:a)}d(u,function(){throw new Error("Circle dependency may exists")})}}}(lI,function(t){var e=[];return d(lI.getClassesByMainType(t),function(t){e=e.concat(t.prototype.dependencies||[])}),e=f(e,function(t){return Ui(t).main}),"dataset"!==t&&l(e,"dataset")<=0&&e.unshift("dataset"),e}),h(lI,rI);var uI="";"undefined"!=typeof navigator&&(uI=navigator.platform||"");var hI={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],gradientColor:["#f6efa6","#d88273","#bf444c"],textStyle:{fontFamily:uI.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},cI=Bi(),dI={clearColorPalette:function(){cI(this).colorIdx=0,cI(this).colorNameMap={}},getColorFromPalette:function(t,e,i){var n=cI(e=e||this),o=n.colorIdx||0,a=n.colorNameMap=n.colorNameMap||{};if(a.hasOwnProperty(t))return a[t];var r=Di(this.get("color",!0)),s=this.get("colorLayer",!0),l=null!=i&&s?va(s,i):r;if((l=l||r)&&l.length){var u=l[o];return t&&(a[t]=u),n.colorIdx=(o+1)%l.length,u}}},fI={cartesian2d:function(t,e,i,n){var o=t.getReferringComponents("xAxis")[0],a=t.getReferringComponents("yAxis")[0];e.coordSysDims=["x","y"],i.set("x",o),i.set("y",a),xa(o)&&(n.set("x",o),e.firstCategoryDimIndex=0),xa(a)&&(n.set("y",a),e.firstCategoryDimIndex=1)},singleAxis:function(t,e,i,n){var o=t.getReferringComponents("singleAxis")[0];e.coordSysDims=["single"],i.set("single",o),xa(o)&&(n.set("single",o),e.firstCategoryDimIndex=0)},polar:function(t,e,i,n){var o=t.getReferringComponents("polar")[0],a=o.findAxisModel("radiusAxis"),r=o.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],i.set("radius",a),i.set("angle",r),xa(a)&&(n.set("radius",a),e.firstCategoryDimIndex=0),xa(r)&&(n.set("angle",r),e.firstCategoryDimIndex=1)},geo:function(t,e,i,n){e.coordSysDims=["lng","lat"]},parallel:function(t,e,i,n){var o=t.ecModel,a=o.getComponent("parallel",t.get("parallelIndex")),r=e.coordSysDims=a.dimensions.slice();d(a.parallelAxisIndex,function(t,a){var s=o.getComponent("parallelAxis",t),l=r[a];i.set(l,s),xa(s)&&null==e.firstCategoryDimIndex&&(n.set(l,s),e.firstCategoryDimIndex=a)})}},pI="original",gI="arrayRows",mI="objectRows",vI="keyedColumns",yI="unknown",xI="typedArray",_I="column",wI="row";_a.seriesDataToSource=function(t){return new _a({data:t,sourceFormat:S(t)?xI:pI,fromDataset:!1})},Yi(_a);var bI=Bi(),SI="\0_ec_inner",MI=No.extend({init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new No(i),this._optionManager=n},setOption:function(t,e){k(!(SI in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):Ea.call(this,n),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(this.mergeOption(o),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&d(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){var e=this.option,o=this._componentsMap,r=[];Sa(this),d(t,function(t,o){null!=t&&(lI.hasClass(o)?o&&r.push(o):e[o]=null==e[o]?i(t):n(e[o],t,!0))}),lI.topologicalTravel(r,lI.getAllClassMainTypes(),function(i,n){var r=Di(t[i]),s=Pi(o.get(i),r);Ni(s),d(s,function(t,e){var n=t.option;w(n)&&(t.keyInfo.mainType=i,t.keyInfo.subType=za(i,n,t.exist))});var l=Ra(o,n);e[i]=[],o.set(i,[]),d(s,function(t,n){var r=t.exist,s=t.option;if(k(w(s)||r,"Empty component definition"),s){var u=lI.getClass(i,t.keyInfo.subType,!0);if(r&&r instanceof u)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var h=a({dependentModels:l,componentIndex:n},t.keyInfo);a(r=new u(s,this,this,h),h),r.init(s,this,this,h),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);o.get(i)[n]=r,e[i][n]=r.option},this),"series"===i&&Ba(this,o.get("series"))},this),this._seriesIndicesMap=R(this._seriesIndices=this._seriesIndices||[])},getOption:function(){var t=i(this.option);return d(t,function(e,i){if(lI.hasClass(i)){for(var n=(e=Di(e)).length-1;n>=0;n--)Ei(e[n])&&e.splice(n,1);t[i]=e}}),delete t[SI],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap.get(t);if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var r;if(null!=i)y(i)||(i=[i]),r=g(f(i,function(t){return a[t]}),function(t){return!!t});else if(null!=n){var s=y(n);r=g(a,function(t){return s&&l(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var u=y(o);r=g(a,function(t){return u&&l(o,t.name)>=0||!u&&t.name===o})}else r=a.slice();return Va(r,t)},findComponents:function(t){var e=t.query,i=t.mainType,n=function(t){var e=i+"Index",n=i+"Id",o=i+"Name";return!t||null==t[e]&&null==t[n]&&null==t[o]?null:{mainType:i,index:t[e],id:t[n],name:t[o]}}(e);return function(e){return t.filter?g(e,t.filter):e}(Va(n?this.queryComponents(n):this._componentsMap.get(i),t))},eachComponent:function(t,e,i){var n=this._componentsMap;"function"==typeof t?(i=e,e=t,n.each(function(t,n){d(t,function(t,o){e.call(i,n,t,o)})})):_(t)?d(n.get(t),e,i):w(t)&&d(this.findComponents(t),e,i)},getSeriesByName:function(t){return g(this._componentsMap.get("series"),function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){return g(this._componentsMap.get("series"),function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get("series").slice()},getSeriesCount:function(){return this._componentsMap.get("series").length},eachSeries:function(t,e){d(this._seriesIndices,function(i){var n=this._componentsMap.get("series")[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){d(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,i){d(this._seriesIndices,function(n){var o=this._componentsMap.get("series")[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return d(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return null==this._seriesIndicesMap.get(t.componentIndex)},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){Ba(this,g(this._componentsMap.get("series"),t,e))},restoreData:function(t){var e=this._componentsMap;Ba(this,e.get("series"));var i=[];e.each(function(t,e){i.push(e)}),lI.topologicalTravel(i,lI.getAllClassMainTypes(),function(i,n){d(e.get(i),function(e){("series"!==i||!Na(e,t))&&e.restoreData()})})}});h(MI,dI);var II=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"],TI={};Fa.prototype={constructor:Fa,create:function(t,e){var i=[];d(TI,function(n,o){var a=n.create(t,e);i=i.concat(a||[])}),this._coordinateSystems=i},update:function(t,e){d(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},Fa.register=function(t,e){TI[t]=e},Fa.get=function(t){return TI[t]};var AI=d,DI=i,CI=f,LI=n,kI=/^(min|max)?(.+)$/;Wa.prototype={constructor:Wa,setOption:function(t,e){t&&d(Di(t.series),function(t){t&&t.data&&S(t.data)&&N(t.data)}),t=DI(t,!0);var i=this._optionBackup,n=Ha.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(ja(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=CI(e.timelineOptions,DI),this._mediaList=CI(e.mediaList,DI),this._mediaDefault=DI(e.mediaDefault),this._currentMediaIndices=[],DI(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=DI(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],r=[];if(!n.length&&!o)return r;for(var s=0,l=n.length;s=1)&&(t=1),t}var i=this._upstream,n=t&&t.skip;if(this._dirty&&i){var o=this.context;o.data=o.outputData=i.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!n&&(a=this._plan(this.context));var r=e(this._modBy),s=this._modDataCount||0,l=e(t&&t.modBy),u=t&&t.modDataCount||0;r===l&&s===u||(a="reset");var h;(this._dirty||"reset"===a)&&(this._dirty=!1,h=yr(this,n)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=i?i._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,f=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!n&&(h||d=i?null:t1&&a>0?e:t}};return s}();UI.dirty=function(){this._dirty=!0,this._onDirty&&this._onDirty(this.context)},UI.unfinished=function(){return this._progress&&this._dueIndex":"\n",s="richText"===n,l={},u=0,h=this.getData(),c=h.mapDimension("defaultedTooltip",!0),f=c.length,g=this.getRawValue(t),m=y(g),v=h.getItemVisual(t,"color");w(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var x=(f>1||m&&!f?function(i){function o(t,i){var o=h.getDimensionInfo(i);if(o&&!1!==o.otherDims.tooltip){var c=o.type,d="sub"+a.seriesIndex+"at"+u,p=aa({color:v,type:"subItem",renderMode:n,markerId:d}),g="string"==typeof p?p:p.content,m=(r?g+ia(o.displayName||"-")+": ":"")+ia("ordinal"===c?t+"":"time"===c?e?"":sa("yyyy/MM/dd hh:mm:ss",t):ta(t));m&&f.push(m),s&&(l[d]=v,++u)}}var r=p(i,function(t,e,i){var n=h.getDimensionInfo(i);return t|=n&&!1!==n.tooltip&&null!=n.displayName},0),f=[];c.length?d(c,function(e){o(fr(h,t,e),e)}):d(i,o);var g=r?s?"\n":"
":"",m=g+f.join(g||", ");return{renderMode:n,content:m,style:l}}(g):o(f?fr(h,t,c[0]):m?g[0]:g)).content,_=a.seriesIndex+"at"+u,b=aa({color:v,type:"item",renderMode:n,markerId:_});l[_]=v,++u;var S=h.getName(t),M=this.name;Oi(this)||(M=""),M=M?ia(M)+(e?": ":r):"";var I="string"==typeof b?b:b.content;return{html:e?I+M+x:M+I+(S?ia(S)+": "+x:x),markers:l}},isAnimationEnabled:function(){if(U_.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,o=dI.getColorFromPalette.call(this,t,e,i);return o||(o=n.getColorFromPalette(t,e,i)),o},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});h(YI,ZI),h(YI,dI);var qI=function(){this.group=new tb,this.uid=Ro("viewComponent")};qI.prototype={constructor:qI,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){},filterForExposedEvent:null};var KI=qI.prototype;KI.updateView=KI.updateLayout=KI.updateVisual=function(t,e,i,n){},ji(qI),$i(qI,{registerWhenExtend:!0});var $I=function(){var t=Bi();return function(e){var i=t(e),n=e.pipelineContext,o=i.large,a=i.progressiveRender,r=i.large=n.large,s=i.progressiveRender=n.progressiveRender;return!!(o^r||a^s)&&"reset"}},JI=Bi(),QI=$I();Ar.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){Cr(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){Cr(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};var tT=Ar.prototype;tT.updateView=tT.updateLayout=tT.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},ji(Ar),$i(Ar,{registerWhenExtend:!0}),Ar.markUpdateMethod=function(t,e){JI(t).updateMethod=e};var eT={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},iT="\0__throttleOriginMethod",nT="\0__throttleRate",oT="\0__throttleType",aT={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var i=t.getData(),n=(t.visualColorAccessPath||"itemStyle.color").split("."),o=t.get(n)||t.getColorFromPalette(t.name,null,e.getSeriesCount());if(i.setVisual("color",o),!e.isSeriesFiltered(t)){"function"!=typeof o||o instanceof IM||i.each(function(e){i.setItemVisual(e,"color",o(t.getDataParams(e)))});return{dataEach:i.hasItemOption?function(t,e){var i=t.getItemModel(e).get(n,!0);null!=i&&t.setItemVisual(e,"color",i)}:null}}}},rT={toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}},sT=function(t,e){function i(t,e){if("string"!=typeof t)return t;var i=t;return d(e,function(t,e){i=i.replace(new RegExp("\\{\\s*"+e+"\\s*\\}","g"),t)}),i}function n(t){var e=a.get(t);if(null==e){for(var i=t.split("."),n=rT.aria,o=0;o1?"series.multiple.prefix":"series.single.prefix"),{seriesCount:r}),e.eachSeries(function(t,e){if(e1?"multiple":"single")+".";a=i(a=n(s?u+"withName":u+"withoutName"),{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:o(t.subType)});var c=t.getData();window.data=c,c.count()>l?a+=i(n("data.partialData"),{displayCnt:l}):a+=n("data.allData");for(var d=[],p=0;pi.blockIndex?i.step:null,a=n&&n.modDataCount;return{step:o,modBy:null!=a?Math.ceil(a/o):null,modDataCount:a}}},uT.getPipeline=function(t){return this._pipelineMap.get(t)},uT.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData().count(),o=i.progressiveEnabled&&e.incrementalPrepareRender&&n>=i.threshold,a=t.get("large")&&n>=t.get("largeThreshold"),r="mod"===t.get("progressiveChunkMode")?n:null;t.pipelineContext=i.context={progressiveRender:o,modDataCount:r,large:a}},uT.restorePipelines=function(t){var e=this,i=e._pipelineMap=R();t.eachSeries(function(t){var n=t.getProgressive(),o=t.uid;i.set(o,{id:o,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:n&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(n||700),count:0}),jr(e,t,t.dataTask)})},uT.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.ecInstance.getModel(),i=this.api;d(this._allHandlers,function(n){var o=t.get(n.uid)||t.set(n.uid,[]);n.reset&&zr(this,n,o,e,i),n.overallReset&&Br(this,n,o,e,i)},this)},uT.prepareView=function(t,e,i,n){var o=t.renderTask,a=o.context;a.model=e,a.ecModel=i,a.api=n,o.__block=!t.incrementalPrepareRender,jr(this,e,o)},uT.performDataProcessorTasks=function(t,e){Rr(this,this._dataProcessorHandlers,t,e,{block:!0})},uT.performVisualTasks=function(t,e,i){Rr(this,this._visualHandlers,t,e,i)},uT.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},uT.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var hT=uT.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},cT=Ur(0);Er.wrapStageHandler=function(t,e){return x(t)&&(t={overallReset:t,seriesType:Yr(t)}),t.uid=Ro("stageHandler"),e&&(t.visualType=e),t};var dT,fT={},pT={};qr(fT,MI),qr(pT,Ga),fT.eachSeriesByType=fT.eachRawSeriesByType=function(t){dT=t},fT.eachComponent=function(t){"series"===t.mainType&&t.subType&&(dT=t.subType)};var gT=["#37A2DA","#32C5E9","#67E0E3","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#E062AE","#E690D1","#e7bcf3","#9d96f5","#8378EA","#96BFFF"],mT={color:gT,colorLayer:[["#37A2DA","#ffd85c","#fd7b5f"],["#37A2DA","#67E0E3","#FFDB5C","#ff9f7f","#E062AE","#9d96f5"],["#37A2DA","#32C5E9","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#e7bcf3","#8378EA","#96BFFF"],gT]},vT=["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78","#73a373","#73b9bc","#7289ab","#91ca8c","#f49f42"],yT={color:vT,backgroundColor:"#333",tooltip:{axisPointer:{lineStyle:{color:"#eee"},crossStyle:{color:"#eee"}}},legend:{textStyle:{color:"#eee"}},textStyle:{color:"#eee"},title:{textStyle:{color:"#eee"}},toolbox:{iconStyle:{normal:{borderColor:"#eee"}}},dataZoom:{textStyle:{color:"#eee"}},visualMap:{textStyle:{color:"#eee"}},timeline:{lineStyle:{color:"#eee"},itemStyle:{normal:{color:vT[1]}},label:{normal:{textStyle:{color:"#eee"}}},controlStyle:{normal:{color:"#eee",borderColor:"#eee"}}},timeAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},logAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},valueAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},categoryAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},line:{symbol:"circle"},graph:{color:vT},gauge:{title:{textStyle:{color:"#eee"}}},candlestick:{itemStyle:{normal:{color:"#FD1050",color0:"#0CF49B",borderColor:"#FD1050",borderColor0:"#0CF49B"}}}};yT.categoryAxis.splitLine.show=!1,lI.extend({type:"dataset",defaultOption:{seriesLayoutBy:_I,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){wa(this)}}),qI.extend({type:"dataset"});var xT=Pn.extend({type:"ellipse",shape:{cx:0,cy:0,rx:0,ry:0},buildPath:function(t,e){var i=.5522848,n=e.cx,o=e.cy,a=e.rx,r=e.ry,s=a*i,l=r*i;t.moveTo(n-a,o),t.bezierCurveTo(n-a,o-l,n-s,o-r,n,o-r),t.bezierCurveTo(n+s,o-r,n+a,o-l,n+a,o),t.bezierCurveTo(n+a,o+l,n+s,o+r,n,o+r),t.bezierCurveTo(n-s,o+r,n-a,o+l,n-a,o),t.closePath()}}),_T=/[\s,]+/;$r.prototype.parse=function(t,e){e=e||{};var i=Kr(t);if(!i)throw new Error("Illegal svg");var n=new tb;this._root=n;var o=i.getAttribute("viewBox")||"",a=parseFloat(i.getAttribute("width")||e.width),r=parseFloat(i.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(r)&&(r=null),es(i,n,null,!0);for(var s=i.firstChild;s;)this._parseNode(s,n),s=s.nextSibling;var l,u;if(o){var h=P(o).split(_T);h.length>=4&&(l={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(l&&null!=a&&null!=r&&(u=as(l,a,r),!e.ignoreViewBox)){var c=n;(n=new tb).add(c),c.scale=u.scale.slice(),c.position=u.position.slice()}return e.ignoreRootClip||null==a||null==r||n.setClipPath(new yM({shape:{x:0,y:0,width:a,height:r}})),{root:n,width:a,height:r,viewBoxRect:l,viewBoxTransform:u}},$r.prototype._parseNode=function(t,e){var i=t.nodeName.toLowerCase();"defs"===i?this._isDefine=!0:"text"===i&&(this._isText=!0);var n;if(this._isDefine){if(r=bT[i]){var o=r.call(this,t),a=t.getAttribute("id");a&&(this._defs[a]=o)}}else{var r=wT[i];r&&(n=r.call(this,t,e),e.add(n))}for(var s=t.firstChild;s;)1===s.nodeType&&this._parseNode(s,n),3===s.nodeType&&this._isText&&this._parseText(s,n),s=s.nextSibling;"defs"===i?this._isDefine=!1:"text"===i&&(this._isText=!1)},$r.prototype._parseText=function(t,e){if(1===t.nodeType){var i=t.getAttribute("dx")||0,n=t.getAttribute("dy")||0;this._textX+=parseFloat(i),this._textY+=parseFloat(n)}var o=new rM({style:{text:t.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});Qr(e,o),es(t,o,this._defs);var a=o.style.fontSize;a&&a<9&&(o.style.fontSize=9,o.scale=o.scale||[1,1],o.scale[0]*=a/9,o.scale[1]*=a/9);var r=o.getBoundingRect();return this._textX+=r.width,e.add(o),o};var wT={g:function(t,e){var i=new tb;return Qr(e,i),es(t,i,this._defs),i},rect:function(t,e){var i=new yM;return Qr(e,i),es(t,i,this._defs),i.setShape({x:parseFloat(t.getAttribute("x")||0),y:parseFloat(t.getAttribute("y")||0),width:parseFloat(t.getAttribute("width")||0),height:parseFloat(t.getAttribute("height")||0)}),i},circle:function(t,e){var i=new sM;return Qr(e,i),es(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),r:parseFloat(t.getAttribute("r")||0)}),i},line:function(t,e){var i=new _M;return Qr(e,i),es(t,i,this._defs),i.setShape({x1:parseFloat(t.getAttribute("x1")||0),y1:parseFloat(t.getAttribute("y1")||0),x2:parseFloat(t.getAttribute("x2")||0),y2:parseFloat(t.getAttribute("y2")||0)}),i},ellipse:function(t,e){var i=new xT;return Qr(e,i),es(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),rx:parseFloat(t.getAttribute("rx")||0),ry:parseFloat(t.getAttribute("ry")||0)}),i},polygon:function(t,e){var i=t.getAttribute("points");i&&(i=ts(i));var n=new pM({shape:{points:i||[]}});return Qr(e,n),es(t,n,this._defs),n},polyline:function(t,e){var i=new Pn;Qr(e,i),es(t,i,this._defs);var n=t.getAttribute("points");return n&&(n=ts(n)),new gM({shape:{points:n||[]}})},image:function(t,e){var i=new fi;return Qr(e,i),es(t,i,this._defs),i.setStyle({image:t.getAttribute("xlink:href"),x:t.getAttribute("x"),y:t.getAttribute("y"),width:t.getAttribute("width"),height:t.getAttribute("height")}),i},text:function(t,e){var i=t.getAttribute("x")||0,n=t.getAttribute("y")||0,o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0;this._textX=parseFloat(i)+parseFloat(o),this._textY=parseFloat(n)+parseFloat(a);var r=new tb;return Qr(e,r),es(t,r,this._defs),r},tspan:function(t,e){var i=t.getAttribute("x"),n=t.getAttribute("y");null!=i&&(this._textX=parseFloat(i)),null!=n&&(this._textY=parseFloat(n));var o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0,r=new tb;return Qr(e,r),es(t,r,this._defs),this._textX+=o,this._textY+=a,r},path:function(t,e){var i=Rn(t.getAttribute("d")||"");return Qr(e,i),es(t,i,this._defs),i}},bT={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||0,10),i=parseInt(t.getAttribute("y1")||0,10),n=parseInt(t.getAttribute("x2")||10,10),o=parseInt(t.getAttribute("y2")||0,10),a=new TM(e,i,n,o);return Jr(t,a),a},radialgradient:function(t){}},ST={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-align":"textAlign","alignment-baseline":"textBaseline"},MT=/url\(\s*#(.*?)\)/,IT=/(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,TT=/([^\s:;]+)\s*:\s*([^:;]+)/g,AT=R(),DT={registerMap:function(t,e,i){var n;return y(e)?n=e:e.svg?n=[{type:"svg",source:e.svg,specialAreas:e.specialAreas}]:(e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),n=[{type:"geoJSON",source:e,specialAreas:i}]),d(n,function(t){var e=t.type;"geoJson"===e&&(e=t.type="geoJSON"),(0,CT[e])(t)}),AT.set(t,n)},retrieveMap:function(t){return AT.get(t)}},CT={geoJSON:function(t){var e=t.source;t.geoJSON=_(e)?"undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")():e},svg:function(t){t.svgXML=Kr(t.source)}},LT=k,kT=d,PT=x,NT=w,OT=lI.parseClassType,ET={zrender:"4.0.6"},RT=1e3,zT=1e3,BT=3e3,VT={PROCESSOR:{FILTER:RT,STATISTIC:5e3},VISUAL:{LAYOUT:zT,GLOBAL:2e3,CHART:BT,COMPONENT:4e3,BRUSH:5e3}},GT="__flagInMainProcess",FT="__optionUpdated",WT=/^[a-zA-Z0-9_]+$/;ls.prototype.on=ss("on"),ls.prototype.off=ss("off"),ls.prototype.one=ss("one"),h(ls,fw);var HT=us.prototype;HT._onframe=function(){if(!this._disposed){var t=this._scheduler;if(this[FT]){var e=this[FT].silent;this[GT]=!0,cs(this),ZT.update.call(this),this[GT]=!1,this[FT]=!1,gs.call(this,e),ms.call(this,e)}else if(t.unfinished){var i=1,n=this._model;this._api;t.unfinished=!1;do{var o=+new Date;t.performSeriesTasks(n),t.performDataProcessorTasks(n),fs(this,n),t.performVisualTasks(n),bs(this,this._model,0,"remain"),i-=+new Date-o}while(i>0&&t.unfinished);t.unfinished||this._zr.flush()}}},HT.getDom=function(){return this._dom},HT.getZr=function(){return this._zr},HT.setOption=function(t,e,i){var n;if(NT(e)&&(i=e.lazyUpdate,n=e.silent,e=e.notMerge),this[GT]=!0,!this._model||e){var o=new Wa(this._api),a=this._theme,r=this._model=new MI(null,null,a,o);r.scheduler=this._scheduler,r.init(null,null,a,o)}this._model.setOption(t,qT),i?(this[FT]={silent:n},this[GT]=!1):(cs(this),ZT.update.call(this),this._zr.flush(),this[FT]=!1,this[GT]=!1,gs.call(this,n),ms.call(this,n))},HT.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},HT.getModel=function(){return this._model},HT.getOption=function(){return this._model&&this._model.getOption()},HT.getWidth=function(){return this._zr.getWidth()},HT.getHeight=function(){return this._zr.getHeight()},HT.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},HT.getRenderedCanvas=function(t){if(U_.canvasSupported)return(t=t||{}).pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor"),this._zr.painter.getRenderedCanvas(t)},HT.getSvgDataUrl=function(){if(U_.svgSupported){var t=this._zr;return d(t.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),t.painter.pathToDataUrl()}},HT.getDataURL=function(t){var e=(t=t||{}).excludeComponents,i=this._model,n=[],o=this;kT(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var a="svg"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return kT(n,function(t){t.group.ignore=!1}),a},HT.getConnectedDataURL=function(t){if(U_.canvasSupported){var e=this.group,n=Math.min,o=Math.max;if(eA[e]){var a=1/0,r=1/0,s=-1/0,l=-1/0,u=[],h=t&&t.pixelRatio||1;d(tA,function(h,c){if(h.group===e){var d=h.getRenderedCanvas(i(t)),f=h.getDom().getBoundingClientRect();a=n(f.left,a),r=n(f.top,r),s=o(f.right,s),l=o(f.bottom,l),u.push({dom:d,left:f.left,top:f.top})}});var c=(s*=h)-(a*=h),f=(l*=h)-(r*=h),p=iw();p.width=c,p.height=f;var g=Ii(p);return kT(u,function(t){var e=new fi({style:{x:t.left*h-a,y:t.top*h-r,image:t.dom}});g.add(e)}),g.refreshImmediately(),p.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},HT.convertToPixel=v(hs,"convertToPixel"),HT.convertFromPixel=v(hs,"convertFromPixel"),HT.containPixel=function(t,e){var i;return t=Vi(this._model,t),d(t,function(t,n){n.indexOf("Models")>=0&&d(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if("seriesModels"===n){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(i|=a.containPoint(e,t))}},this)},this),!!i},HT.getVisual=function(t,e){var i=(t=Vi(this._model,t,{defaultMainType:"series"})).seriesModel.getData(),n=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?i.indexOfRawIndex(t.dataIndex):null;return null!=n?i.getItemVisual(n,e):i.getVisual(e)},HT.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},HT.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var ZT={prepareAndUpdate:function(t){cs(this),ZT.update.call(this,t)},update:function(t){var e=this._model,i=this._api,n=this._zr,o=this._coordSysMgr,a=this._scheduler;if(e){a.restoreData(e,t),a.performSeriesTasks(e),o.create(e,i),a.performDataProcessorTasks(e,t),fs(this,e),o.update(e,i),xs(e),a.performVisualTasks(e,t),_s(this,e,i,t);var r=e.get("backgroundColor")||"transparent";if(U_.canvasSupported)n.setBackgroundColor(r);else{var s=Gt(r);r=qt(s,"rgb"),0===s[3]&&(r="transparent")}Ss(e,i)}},updateTransform:function(t){var e=this._model,i=this,n=this._api;if(e){var o=[];e.eachComponent(function(a,r){var s=i.getViewOfComponentModel(r);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(r,e,n,t);l&&l.update&&o.push(s)}else o.push(s)});var a=R();e.eachSeries(function(o){var r=i._chartsMap[o.__viewId];if(r.updateTransform){var s=r.updateTransform(o,e,n,t);s&&s.update&&a.set(o.uid,1)}else a.set(o.uid,1)}),xs(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0,dirtyMap:a}),bs(i,e,0,t,a),Ss(e,this._api)}},updateView:function(t){var e=this._model;e&&(Ar.markUpdateMethod(t,"updateView"),xs(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),_s(this,this._model,this._api,t),Ss(e,this._api))},updateVisual:function(t){ZT.update.call(this,t)},updateLayout:function(t){ZT.update.call(this,t)}};HT.resize=function(t){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[GT]=!0,i&&cs(this),ZT.update.call(this),this[GT]=!1,gs.call(this,n),ms.call(this,n)}},HT.showLoading=function(t,e){if(NT(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),QT[t]){var i=QT[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},HT.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},HT.makeActionFromEvent=function(t){var e=a({},t);return e.type=jT[t.type],e},HT.dispatchAction=function(t,e){NT(e)||(e={silent:!!e}),XT[t.type]&&this._model&&(this[GT]?this._pendingActions.push(t):(ps.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&U_.browser.weChat&&this._throttledZrFlush(),gs.call(this,e.silent),ms.call(this,e.silent)))},HT.appendData=function(t){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0},HT.on=ss("on"),HT.off=ss("off"),HT.one=ss("one");var UT=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];HT._initEvents=function(){kT(UT,function(t){var e=function(e){var i,n=this.getModel(),o=e.target;if("globalout"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType,o)||{}}else o&&o.eventData&&(i=a({},o.eventData));if(i){var s=i.componentType,l=i.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=i.seriesIndex);var u=s&&null!=l&&n.getComponent(s,l),h=u&&this["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];i.event=e,i.type=t,this._ecEventProcessor.eventInfo={targetEl:o,packedEvent:i,model:u,view:h},this.trigger(t,i)}};e.zrEventfulCallAtLast=!0,this._zr.on(t,e,this)},this),kT(jT,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},HT.isDisposed=function(){return this._disposed},HT.clear=function(){this.setOption({series:[]},!0)},HT.dispose=function(){if(!this._disposed){this._disposed=!0,Fi(this.getDom(),oA,"");var t=this._api,e=this._model;kT(this._componentsViews,function(i){i.dispose(e,t)}),kT(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete tA[this.id]}},h(us,fw),Ds.prototype={constructor:Ds,normalizeQuery:function(t){var e={},i={},n={};if(_(t)){var o=OT(t);e.mainType=o.main||null,e.subType=o.sub||null}else{var a=["Index","Name","Id"],r={name:1,dataIndex:1,dataType:1};d(t,function(t,o){for(var s=!1,l=0;l0&&h===o.length-u.length){var c=o.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}r.hasOwnProperty(o)&&(i[o]=t,s=!0),s||(n[o]=t)})}return{cptQuery:e,dataQuery:i,otherQuery:n}},filter:function(t,e,i){function n(t,e,i,n){return null==t[i]||e[n||i]===t[i]}var o=this.eventInfo;if(!o)return!0;var a=o.targetEl,r=o.packedEvent,s=o.model,l=o.view;if(!s||!l)return!0;var u=e.cptQuery,h=e.dataQuery;return n(u,s,"mainType")&&n(u,s,"subType")&&n(u,s,"index","componentIndex")&&n(u,s,"name")&&n(u,s,"id")&&n(h,r,"name")&&n(h,r,"dataIndex")&&n(h,r,"dataType")&&(!l.filterForExposedEvent||l.filterForExposedEvent(t,e.otherQuery,a,r))},afterTrigger:function(){this.eventInfo=null}};var XT={},jT={},YT=[],qT=[],KT=[],$T=[],JT={},QT={},tA={},eA={},iA=new Date-0,nA=new Date-0,oA="_echarts_instance_",aA=Ls;Bs(2e3,aT),Ns(BI),Os(5e3,function(t){var e=R();t.eachSeries(function(t){var i=t.get("stack");if(i){var n=e.get(i)||e.set(i,[]),o=t.getData(),a={stackResultDimension:o.getCalculationInfo("stackResultDimension"),stackedOverDimension:o.getCalculationInfo("stackedOverDimension"),stackedDimension:o.getCalculationInfo("stackedDimension"),stackedByDimension:o.getCalculationInfo("stackedByDimension"),isStackedByIndex:o.getCalculationInfo("isStackedByIndex"),data:o,seriesModel:t};if(!a.stackedDimension||!a.isStackedByIndex&&!a.stackedByDimension)return;n.length&&o.setCalculationInfo("stackedOnSeries",n[n.length-1].seriesModel),n.push(a)}}),e.each(ar)}),Gs("default",function(t,e){r(e=e||{},{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new yM({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),n=new SM({shape:{startAngle:-lT/2,endAngle:-lT/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),o=new yM({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});n.animateShape(!0).when(1e3,{endAngle:3*lT/2}).start("circularInOut"),n.animateShape(!0).when(1e3,{startAngle:3*lT/2}).delay(300).start("circularInOut");var a=new tb;return a.add(n),a.add(o),a.add(i),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;n.setShape({cx:e,cy:a});var r=n.shape.r;o.setShape({x:e-r,y:a-r,width:2*r,height:2*r}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a}),Es({type:"highlight",event:"highlight",update:"highlight"},B),Es({type:"downplay",event:"downplay",update:"downplay"},B),Ps("light",mT),Ps("dark",yT);var rA={};Xs.prototype={constructor:Xs,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t=this._old,e=this._new,i={},n=[],o=[];for(js(t,{},n,"_oldKeyGetter",this),js(e,i,o,"_newKeyGetter",this),a=0;ax[1]&&(x[1]=y)}e&&(this._nameList[d]=e[f])}this._rawCount=this._count=l,this._extent={},el(this)},yA._initDataFromProvider=function(t,e){if(!(t>=e)){for(var i,n=this._chunkSize,o=this._rawData,a=this._storage,r=this.dimensions,s=r.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!o.pure){var I=u[v];if(m&&null==I)if(null!=m.name)u[v]=I=m.name;else if(null!=i){var T=r[i],A=a[T][y];if(A){I=A[x];var D=l[T].ordinalMeta;D&&D.categories.length&&(I=D.categories[I])}}var C=null==m?null:m.id;null==C&&null!=I&&(d[I]=d[I]||0,C=I,d[I]>0&&(C+="__ec__"+d[I]),d[I]++),null!=C&&(h[v]=C)}}!o.persistent&&o.clean&&o.clean(),this._rawCount=this._count=e,this._extent={},el(this)}},yA.count=function(){return this._count},yA.getIndices=function(){var t=this._indices;if(t){var e=t.constructor,i=this._count;if(e===Array){n=new e(i);for(o=0;o=0&&e=0&&ea&&(a=s)}return i=[o,a],this._extent[t]=i,i},yA.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},yA.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},yA.getCalculationInfo=function(t){return this._calculationInfo[t]},yA.setCalculationInfo=function(t,e){lA(t)?a(this._calculationInfo,t):this._calculationInfo[t]=e},yA.getSum=function(t){var e=0;if(this._storage[t])for(var i=0,n=this.count();i=this._rawCount||t<0)return-1;var e=this._indices,i=e[t];if(null!=i&&it))return a;o=a-1}}return-1},yA.indicesOfNearest=function(t,e,i){var n=[];if(!this._storage[t])return n;null==i&&(i=1/0);for(var o=Number.MAX_VALUE,a=-1,r=0,s=this.count();r=0&&a<0)&&(o=u,a=l,n.length=0),n.push(r))}return n},yA.getRawIndex=nl,yA.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],i=0;i=l&&w<=u||isNaN(w))&&(a[r++]=c),c++;h=!0}else if(2===n){for(var d=this._storage[s],v=this._storage[e[1]],y=t[e[1]][0],x=t[e[1]][1],f=0;f=l&&w<=u||isNaN(w))&&(b>=y&&b<=x||isNaN(b))&&(a[r++]=c),c++}h=!0}}if(!h)if(1===n)for(m=0;m=l&&w<=u||isNaN(w))&&(a[r++]=M)}else for(m=0;mt[I][1])&&(S=!1)}S&&(a[r++]=this.getRawIndex(m))}return rb[1]&&(b[1]=w)}}}return o},yA.downSample=function(t,e,i,n){for(var o=sl(this,[t]),a=o._storage,r=[],s=Math.floor(1/e),l=a[t],u=this.count(),h=this._chunkSize,c=o._rawExtent[t],d=new($s(this))(u),f=0,p=0;pu-p&&(s=u-p,r.length=s);for(var g=0;gc[1]&&(c[1]=x),d[f++]=_}return o._count=f,o._indices=d,o.getRawIndex=ol,o},yA.getItemModel=function(t){var e=this.hostModel;return new No(this.getRawDataItem(t),e,e&&e.ecModel)},yA.diff=function(t){var e=this;return new Xs(t?t.getIndices():[],this.getIndices(),function(e){return al(t,e)},function(t){return al(e,t)})},yA.getVisual=function(t){var e=this._visual;return e&&e[t]},yA.setVisual=function(t,e){if(lA(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},yA.setLayout=function(t,e){if(lA(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},yA.getLayout=function(t){return this._layout[t]},yA.getItemLayout=function(t){return this._itemLayouts[t]},yA.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?a(this._itemLayouts[t]||{},e):e},yA.clearItemLayouts=function(){this._itemLayouts.length=0},yA.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},yA.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},o=this.hasItemVisual;if(this._itemVisuals[t]=n,lA(e))for(var a in e)e.hasOwnProperty(a)&&(n[a]=e[a],o[a]=!0);else n[e]=i,o[e]=!0},yA.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};var xA=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};yA.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,"group"===e.type&&e.traverse(xA,e)),this._graphicEls[t]=e},yA.getItemGraphicEl=function(t){return this._graphicEls[t]},yA.eachItemGraphicEl=function(t,e){d(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},yA.cloneShallow=function(t){if(!t){var e=f(this.dimensions,this.getDimensionInfo,this);t=new vA(e,this.hostModel)}if(t._storage=this._storage,Qs(t,this),this._indices){var i=this._indices.constructor;t._indices=new i(this._indices)}else t._indices=null;return t.getRawIndex=t._indices?ol:nl,t},yA.wrapMethod=function(t,e){var i=this[t];"function"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(C(arguments)))})},yA.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],yA.CHANGABLE_METHODS=["filterSelf","selectRange"];var _A=function(t,e){return e=e||{},hl(e.coordDimensions||[],t,{dimsDef:e.dimensionsDefine||t.dimensionsDefine,encodeDef:e.encodeDefine||t.encodeDefine,dimCount:e.dimensionsCount,generateCoord:e.generateCoord,generateCoordCount:e.generateCoordCount})};xl.prototype.parse=function(t){return t},xl.prototype.getSetting=function(t){return this._setting[t]},xl.prototype.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},xl.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},xl.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},xl.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},xl.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},xl.prototype.getExtent=function(){return this._extent.slice()},xl.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},xl.prototype.isBlank=function(){return this._isBlank},xl.prototype.setBlank=function(t){this._isBlank=t},xl.prototype.getLabel=null,ji(xl),$i(xl,{registerWhenExtend:!0}),_l.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&f(i,bl);return new _l({categories:n,needCollect:!n,deduplication:!1!==e.dedplication})};var wA=_l.prototype;wA.getOrdinal=function(t){return wl(this).get(t)},wA.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=wl(this);return null==(e=n.get(t))&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=NaN),e};var bA=xl.prototype,SA=xl.extend({type:"ordinal",init:function(t,e){t&&!y(t)||(t=new _l({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),bA.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return bA.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(bA.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:B,niceExtent:B});SA.create=function(){return new SA};var MA=Go,IA=Go,TA=xl.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),TA.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Ml(t)},getTicks:function(){return Al(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getLabel:function(t,e){if(null==t)return"";var i=e&&e.precision;return null==i?i=Ho(t)||0:"auto"===i&&(i=this._intervalPrecision),t=IA(t,i,!0),ta(t)},niceTicks:function(t,e,i){t=t||5;var n=this._extent,o=n[1]-n[0];if(isFinite(o)){o<0&&(o=-o,n.reverse());var a=Sl(n,t,e,i);this._intervalPrecision=a.intervalPrecision,this._interval=a.interval,this._niceExtent=a.niceTickExtent}},niceExtent:function(t){var e=this._extent;if(e[0]===e[1])if(0!==e[0]){var i=e[0];t.fixMax?e[0]-=i/2:(e[1]+=i/2,e[0]-=i/2)}else e[1]=1;var n=e[1]-e[0];isFinite(n)||(e[0]=0,e[1]=1),this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var o=this._interval;t.fixMin||(e[0]=IA(Math.floor(e[0]/o)*o)),t.fixMax||(e[1]=IA(Math.ceil(e[1]/o)*o))}});TA.create=function(){return new TA};var AA="__ec_stack_",DA="undefined"!=typeof Float32Array?Float32Array:Array,CA={seriesType:"bar",plan:$I(),reset:function(t){if(Rl(t)&&zl(t)){var e=t.getData(),i=t.coordinateSystem,n=i.getBaseAxis(),o=i.getOtherAxis(n),a=e.mapDimension(o.dim),r=e.mapDimension(n.dim),s=o.isHorizontal(),l=s?0:1,u=Ol(Pl([t]),n,t).width;return u>.5||(u=.5),{progress:function(t,e){for(var n,h=new DA(2*t.count),c=[],d=[],f=0;null!=(n=t.next());)d[l]=e.get(a,n),d[1-l]=e.get(r,n),c=i.dataToPoint(d,null,c),h[f++]=c[0],h[f++]=c[1];e.setLayout({largePoints:h,barWidth:u,valueAxisStart:Bl(0,o),valueAxisHorizontal:s})}}}}},LA=TA.prototype,kA=Math.ceil,PA=Math.floor,NA=function(t,e,i,n){for(;i>>1;t[o][1]i&&(a=i);var r=EA.length,s=NA(EA,a,0,r),l=EA[Math.min(s,r-1)],u=l[1];"year"===l[0]&&(u*=$o(o/u/t,!0));var h=this.getSetting("useUTC")?0:60*new Date(+n[0]||+n[1]).getTimezoneOffset()*1e3,c=[Math.round(kA((n[0]-h)/u)*u+h),Math.round(PA((n[1]-h)/u)*u+h)];Tl(c,n),this._stepLvl=l,this._interval=u,this._niceExtent=c},parse:function(t){return+Yo(t)}});d(["contain","normalize"],function(t){OA.prototype[t]=function(e){return LA[t].call(this,this.parse(e))}});var EA=[["hh:mm:ss",1e3],["hh:mm:ss",5e3],["hh:mm:ss",1e4],["hh:mm:ss",15e3],["hh:mm:ss",3e4],["hh:mm\nMM-dd",6e4],["hh:mm\nMM-dd",3e5],["hh:mm\nMM-dd",6e5],["hh:mm\nMM-dd",9e5],["hh:mm\nMM-dd",18e5],["hh:mm\nMM-dd",36e5],["hh:mm\nMM-dd",72e5],["hh:mm\nMM-dd",216e5],["hh:mm\nMM-dd",432e5],["MM-dd\nyyyy",864e5],["MM-dd\nyyyy",1728e5],["MM-dd\nyyyy",2592e5],["MM-dd\nyyyy",3456e5],["MM-dd\nyyyy",432e6],["MM-dd\nyyyy",5184e5],["week",6048e5],["MM-dd\nyyyy",864e6],["week",12096e5],["week",18144e5],["month",26784e5],["week",36288e5],["month",53568e5],["week",6048e6],["quarter",8208e6],["month",107136e5],["month",13392e6],["half-year",16416e6],["month",214272e5],["month",26784e6],["year",32832e6]];OA.create=function(t){return new OA({useUTC:t.ecModel.get("useUTC")})};var RA=xl.prototype,zA=TA.prototype,BA=Ho,VA=Go,GA=Math.floor,FA=Math.ceil,WA=Math.pow,HA=Math.log,ZA=xl.extend({type:"log",base:10,$constructor:function(){xl.apply(this,arguments),this._originalScale=new TA},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return f(zA.getTicks.call(this),function(n){var o=Go(WA(this.base,n));return o=n===e[0]&&t.__fixMin?Vl(o,i[0]):o,o=n===e[1]&&t.__fixMax?Vl(o,i[1]):o},this)},getLabel:zA.getLabel,scale:function(t){return t=RA.scale.call(this,t),WA(this.base,t)},setExtent:function(t,e){var i=this.base;t=HA(t)/HA(i),e=HA(e)/HA(i),zA.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=RA.getExtent.call(this);e[0]=WA(t,e[0]),e[1]=WA(t,e[1]);var i=this._originalScale,n=i.getExtent();return i.__fixMin&&(e[0]=Vl(e[0],n[0])),i.__fixMax&&(e[1]=Vl(e[1],n[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=HA(t[0])/HA(e),t[1]=HA(t[1])/HA(e),RA.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=qo(i);for(t/i*n<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var o=[Go(FA(e[0]/n)*n),Go(GA(e[1]/n)*n)];this._interval=n,this._niceExtent=o}},niceExtent:function(t){zA.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});d(["contain","normalize"],function(t){ZA.prototype[t]=function(e){return e=HA(e)/HA(this.base),RA[t].call(this,e)}}),ZA.create=function(){return new ZA};var UA={getMin:function(t){var e=this.option,i=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=i&&"dataMin"!==i&&"function"!=typeof i&&!I(i)&&(i=this.axis.scale.parse(i)),i},getMax:function(t){var e=this.option,i=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=i&&"dataMax"!==i&&"function"!=typeof i&&!I(i)&&(i=this.axis.scale.parse(i)),i},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},getCoordSysModel:B,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},XA=Un({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n+a),t.lineTo(i-o,n+a),t.closePath()}}),jA=Un({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.lineTo(i-o,n),t.closePath()}}),YA=Un({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,a=Math.max(o,e.height),r=o/2,s=r*r/(a-r),l=n-a+r+s,u=Math.asin(s/r),h=Math.cos(u)*r,c=Math.sin(u),d=Math.cos(u),f=.6*r,p=.7*r;t.moveTo(i-h,l+s),t.arc(i,l,r,Math.PI-u,2*Math.PI+u),t.bezierCurveTo(i+h-c*f,l+s+d*f,i,n-p,i,n),t.bezierCurveTo(i,n-p,i-h+c*f,l+s+d*f,i-h,l+s),t.closePath()}}),qA=Un({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,a=e.y,r=n/3*2;t.moveTo(o,a),t.lineTo(o+r,a+i),t.lineTo(o,a+i/4*3),t.lineTo(o-r,a+i),t.lineTo(o,a),t.closePath()}}),KA={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var a=Math.min(i,n);o.x=t,o.y=e,o.width=a,o.height=a},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},$A={};d({line:_M,rect:yM,roundRect:yM,square:yM,circle:sM,diamond:jA,pin:YA,arrow:qA,triangle:XA},function(t,e){$A[e]=new t});var JA=Un({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style;"pin"===this.shape.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,o=$A[n];"none"!==e.symbolType&&(o||(o=$A[n="rect"]),KA[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),QA={isDimensionStacked:pl,enableDataStack:fl,getStackedDimension:gl},tD=(Object.freeze||Object)({createList:function(t){return ml(t.getSource(),t)},getLayoutRect:ca,dataStack:QA,createScale:function(t,e){var i=e;No.isInstance(e)||h(i=new No(e),UA);var n=Hl(i);return n.setExtent(t[0],t[1]),Wl(n,i),n},mixinAxisModelCommonMethods:function(t){h(t,UA)},completeDimensions:hl,createDimensions:_A,createSymbol:Jl}),eD=1e-8;eu.prototype={constructor:eu,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],a=[],r=this.geometries,s=0;s0}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates,o=[];"Polygon"===i.type&&o.push({type:"polygon",exterior:n[0],interiors:n.slice(1)}),"MultiPolygon"===i.type&&d(n,function(t){t[0]&&o.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})});var a=new eu(e.name,o,e.cp);return a.properties=e,a})},nD=Bi(),oD=[0,1],aD=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1};aD.prototype={constructor:aD,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return Zo(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,n=this.scale;return t=n.normalize(t),this.onBand&&"ordinal"===n.type&&yu(i=i.slice(),n.count()),Bo(t,oD,i,e)},coordToData:function(t,e){var i=this._extent,n=this.scale;this.onBand&&"ordinal"===n.type&&yu(i=i.slice(),n.count());var o=Bo(t,i,oD,e);return this.scale.scale(o)},pointToData:function(t,e){},getTicksCoords:function(t){var e=(t=t||{}).tickModel||this.getTickModel(),i=au(this,e),n=f(i.ticks,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this),o=e.get("alignWithLabel");return xu(this,n,i.tickCategoryInterval,o,t.clamp),n},getViewLabels:function(){return ou(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return pu(this)}};var rD=iD,sD={};d(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],function(t){sD[t]=aw[t]});var lD={};d(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],function(t){lD[t]=zM[t]}),YI.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return ml(this.getSource(),this)},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{position:"top"},lineStyle:{width:2,type:"solid"},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});var uD=wu.prototype,hD=wu.getSymbolSize=function(t,e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array?i.slice():[+i,+i]};uD._createSymbol=function(t,e,i,n,o){this.removeAll();var a=Jl(t,-1,-1,2,2,e.getItemVisual(i,"color"),o);a.attr({z2:100,culling:!0,scale:bu(n)}),a.drift=Su,this._symbolType=t,this.add(a)},uD.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},uD.getSymbolPath=function(){return this.childAt(0)},uD.getScale=function(){return this.childAt(0).scale},uD.highlight=function(){this.childAt(0).trigger("emphasis")},uD.downplay=function(){this.childAt(0).trigger("normal")},uD.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},uD.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":"pointer"},uD.updateData=function(t,e,i){this.silent=!1;var n=t.getItemVisual(e,"symbol")||"circle",o=t.hostModel,a=hD(t,e),r=n!==this._symbolType;if(r){var s=t.getItemVisual(e,"symbolKeepAspect");this._createSymbol(n,t,e,a,s)}else(l=this.childAt(0)).silent=!1,Io(l,{scale:bu(a)},o,e);if(this._updateCommon(t,e,a,i),r){var l=this.childAt(0),u=i&&i.fadeIn,h={scale:l.scale.slice()};u&&(h.style={opacity:l.style.opacity}),l.scale=[0,0],u&&(l.style.opacity=0),To(l,h,o,e)}this._seriesModel=o};var cD=["itemStyle"],dD=["emphasis","itemStyle"],fD=["label"],pD=["emphasis","label"];uD._updateCommon=function(t,e,i,n){var o=this.childAt(0),r=t.hostModel,s=t.getItemVisual(e,"color");"image"!==o.type&&o.useStyle({strokeNoScale:!0});var l=n&&n.itemStyle,u=n&&n.hoverItemStyle,h=n&&n.symbolRotate,c=n&&n.symbolOffset,d=n&&n.labelModel,f=n&&n.hoverLabelModel,p=n&&n.hoverAnimation,g=n&&n.cursorStyle;if(!n||t.hasItemOption){var m=n&&n.itemModel?n.itemModel:t.getItemModel(e);l=m.getModel(cD).getItemStyle(["color"]),u=m.getModel(dD).getItemStyle(),h=m.getShallow("symbolRotate"),c=m.getShallow("symbolOffset"),d=m.getModel(fD),f=m.getModel(pD),p=m.getShallow("hoverAnimation"),g=m.getShallow("cursor")}else u=a({},u);var v=o.style;o.attr("rotation",(h||0)*Math.PI/180||0),c&&o.attr("position",[Vo(c[0],i[0]),Vo(c[1],i[1])]),g&&o.attr("cursor",g),o.setColor(s,n&&n.symbolInnerColor),o.setStyle(l);var y=t.getItemVisual(e,"opacity");null!=y&&(v.opacity=y);var x=t.getItemVisual(e,"liftZ"),_=o.__z2Origin;null!=x?null==_&&(o.__z2Origin=o.z2,o.z2+=x):null!=_&&(o.z2=_,o.__z2Origin=null);var w=n&&n.useNameLabel;go(v,u,d,f,{labelFetcher:r,labelDataIndex:e,defaultText:function(e,i){return w?t.getName(e):_u(t,e)},isRectText:!0,autoColor:s}),o.off("mouseover").off("mouseout").off("emphasis").off("normal"),o.hoverStyle=u,fo(o),o.__symbolOriginalScale=bu(i),p&&r.isAnimationEnabled()&&o.on("mouseover",Mu).on("mouseout",Iu).on("emphasis",Tu).on("normal",Au)},uD.fadeOut=function(t,e){var i=this.childAt(0);this.silent=i.silent=!0,!(e&&e.keepLabel)&&(i.style.text=null),Io(i,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},u(wu,tb);var gD=Du.prototype;gD.updateData=function(t,e){e=Lu(e);var i=this.group,n=t.hostModel,o=this._data,a=this._symbolCtor,r=ku(t);o||i.removeAll(),t.diff(o).add(function(n){var o=t.getItemLayout(n);if(Cu(t,o,n,e)){var s=new a(t,n,r);s.attr("position",o),t.setItemGraphicEl(n,s),i.add(s)}}).update(function(s,l){var u=o.getItemGraphicEl(l),h=t.getItemLayout(s);Cu(t,h,s,e)?(u?(u.updateData(t,s,r),Io(u,{position:h},n)):(u=new a(t,s)).attr("position",h),i.add(u),t.setItemGraphicEl(s,u)):i.remove(u)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},gD.isPersistent=function(){return!0},gD.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr("position",n)})},gD.incrementalPrepareUpdate=function(t){this._seriesScope=ku(t),this._data=null,this.group.removeAll()},gD.incrementalUpdate=function(t,e,i){i=Lu(i);for(var n=t.start;n0&&Ru(i[o-1]);o--);for(;n0&&Ru(i[a-1]);a--);for(;o=0){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;(r=new wu(o,a)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else Ar.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=zi(o,n);if(null!=a&&a>=0){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else Ar.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new MD({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new ID({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_updateAnimation:function(t,e,i,n,o,a){var r=this._polyline,s=this._polygon,l=t.hostModel,u=mD(this._data,t,this._stackedOnPoints,e,this._coordSys,i,this._valueOrigin,a),h=u.current,c=u.stackedOnCurrent,d=u.next,f=u.stackedOnNext;o&&(h=Yu(u.current,i,o),c=Yu(u.stackedOnCurrent,i,o),d=Yu(u.next,i,o),f=Yu(u.stackedOnNext,i,o)),r.shape.__points=u.current,r.shape.points=h,Io(r,{shape:{points:d}},l),s&&(s.setShape({points:h,stackedOnPoints:c}),Io(s,{shape:{points:d,stackedOnPoints:f}},l));for(var p=[],g=u.status,m=0;me&&(e=t[i]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},u(kD,aD);var PD={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},ND={};ND.categoryAxis=n({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},PD),ND.valueAxis=n({boundaryGap:[0,0],splitNumber:5},PD),ND.timeAxis=r({scale:!0,min:"dataMin",max:"dataMax"},ND.valueAxis),ND.logAxis=r({scale:!0,logBase:10},ND.valueAxis);var OD=["value","category","time","log"],ED=function(t,e,i,a){d(OD,function(r){e.extend({type:t+"Axis."+r,mergeDefaultAndTheme:function(e,o){var a=this.layoutMode,s=a?ga(e):{};n(e,o.getTheme().get(r+"Axis")),n(e,this.getDefaultOption()),e.type=i(t,e),a&&pa(e,s,a)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=_l.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:o([{},ND[r+"Axis"],a],!0)})}),lI.registerSubTypeDefaulter(t+"Axis",v(i,t))},RD=lI.extend({type:"cartesian2dAxis",axis:null,init:function(){RD.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){RD.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){RD.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});n(RD.prototype,UA);var zD={offset:0};ED("x",RD,th,zD),ED("y",RD,th,zD),lI.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var BD=ih.prototype;BD.type="grid",BD.axisPointerEnabled=!0,BD.getRect=function(){return this._rect},BD.update=function(t,e){var i=this._axesMap;this._updateScale(t,this.model),d(i.x,function(t){Wl(t.scale,t.model)}),d(i.y,function(t){Wl(t.scale,t.model)});var n={};d(i.x,function(t){nh(i,"y",t,n)}),d(i.y,function(t){nh(i,"x",t,n)}),this.resize(this.model,e)},BD.resize=function(t,e,i){function n(){d(a,function(t){var e=t.isHorizontal(),i=e?[0,o.width]:[0,o.height],n=t.inverse?1:0;t.setExtent(i[n],i[1-n]),ah(t,e?o.x:o.y)})}var o=ca(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;n(),!i&&t.get("containLabel")&&(d(a,function(t){if(!t.model.get("axisLabel.inside")){var e=jl(t);if(e){var i=t.isHorizontal()?"height":"width",n=t.model.get("axisLabel.margin");o[i]-=e[i]+n,"top"===t.position?o.y+=e.height+n:"left"===t.position&&(o.x+=e.width+n)}}}),n())},BD.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},BD.getAxes=function(){return this._axesList.slice()},BD.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}w(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,o=this._coordsList;nu[1]?-1:1,c=["start"===o?u[0]-h*l:"end"===o?u[1]+h*l:(u[0]+u[1])/2,ph(o)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*GD/180);var f;ph(o)?n=HD(t.rotation,null!=d?d:t.rotation,r):(n=uh(t,o,d||0,u),null!=(f=t.axisNameAvailableWidth)&&(f=Math.abs(f/Math.sin(n.rotation)),!isFinite(f)&&(f=null)));var p=s.getFont(),g=e.get("nameTruncate",!0)||{},m=g.ellipsis,v=T(t.nameTruncateMaxWidth,g.maxWidth,f),y=null!=m&&null!=v?tI(i,v,p,m,{minChar:2,placeholder:g.placeholder}):i,x=e.get("tooltip",!0),_=e.mainType,w={componentType:_,name:i,$vars:["name"]};w[_+"Index"]=e.componentIndex;var b=new rM({anid:"name",__fullText:i,__truncatedText:y,position:c,rotation:n.rotation,silent:hh(e),z2:1,tooltip:x&&x.show?a({content:i,formatter:function(){return i},formatterParams:w},x):null});mo(b.style,s,{text:y,textFont:p,textFill:s.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:n.textAlign,textVerticalAlign:n.textVerticalAlign}),e.get("triggerEvent")&&(b.eventData=lh(e),b.eventData.targetType="axisName",b.eventData.name=i),this._dumbGroup.add(b),b.updateTransform(),this.group.add(b),b.decomposeTransform()}}},HD=FD.innerTextLayout=function(t,e,i){var n,o,a=Xo(e-t);return jo(a)?(o=i>0?"top":"bottom",n="center"):jo(a-GD)?(o=i>0?"bottom":"top",n="center"):(o="middle",n=a>0&&a0?"right":"left":i>0?"left":"right"),{rotation:a,textAlign:n,textVerticalAlign:o}},ZD=d,UD=v,XD=Ws({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,i,n){this.axisPointerClass&&Sh(t),XD.superApply(this,"render",arguments),Dh(this,t,0,i,0,!0)},updateAxisPointer:function(t,e,i,n,o){Dh(this,t,0,i,0,!1)},remove:function(t,e){var i=this._axisPointer;i&&i.remove(e),XD.superApply(this,"remove",arguments)},dispose:function(t,e){Ch(this,e),XD.superApply(this,"dispose",arguments)}}),jD=[];XD.registerAxisPointerClass=function(t,e){jD[t]=e},XD.getAxisPointerClass=function(t){return t&&jD[t]};var YD=["axisLine","axisTickLabel","axisName"],qD=["splitArea","splitLine"],KD=XD.extend({type:"cartesianAxis",axisPointerClass:"CartesianAxisPointer",render:function(t,e,i,n){this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new tb,this.group.add(this._axisGroup),t.get("show")){var a=t.getCoordSysModel(),r=Lh(a,t),s=new FD(t,r);d(YD,s.add,s),this._axisGroup.add(s.getGroup()),d(qD,function(e){t.get(e+".show")&&this["_"+e](t,a)},this),Lo(o,this._axisGroup,t),KD.superCall(this,"render",t,e,i,n)}},remove:function(){this._splitAreaColors=null},_splitLine:function(t,e){var i=t.axis;if(!i.scale.isBlank()){var n=t.getModel("splitLine"),o=n.getModel("lineStyle"),a=o.get("color");a=y(a)?a:[a];for(var s=e.coordinateSystem.getRect(),l=i.isHorizontal(),u=0,h=i.getTicksCoords({tickModel:n}),c=[],d=[],f=o.getLineStyle(),p=0;p1){var c;"string"==typeof o?c=DD[o]:"function"==typeof o&&(c=o),c&&t.setData(n.downSample(n.mapDimension(s.dim),1/h,c,CD))}}}}}("line"));var $D=YI.extend({type:"series.__base_bar__",getInitialData:function(t,e){return ml(this.getSource(),this)},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var i=e.dataToPoint(e.clampData(t)),n=this.getData(),o=n.getLayout("offset"),a=n.getLayout("size");return i[e.getBaseAxis().isHorizontal()?0:1]+=o+a/2,i}return[NaN,NaN]},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",itemStyle:{},emphasis:{}}});$D.extend({type:"series.bar",dependencies:["grid","polar"],brushSelector:"rect",getProgressive:function(){return!!this.get("large")&&this.get("progressive")},getProgressiveThreshold:function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t}});var JD=Qb([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),QD={getBarItemStyle:function(t){var e=JD(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}},tC=["itemStyle","barBorderWidth"];a(No.prototype,QD),Zs({type:"bar",render:function(t,e,i){this._updateDrawMode(t);var n=t.get("coordinateSystem");return"cartesian2d"!==n&&"polar"!==n||(this._isLargeDraw?this._renderLarge(t,e,i):this._renderNormal(t,e,i)),this.group},incrementalPrepareRender:function(t,e,i){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e,i,n){this._incrementalRenderLarge(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t,e,i){var n,o=this.group,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.getBaseAxis();"cartesian2d"===s.type?n=l.isHorizontal():"polar"===s.type&&(n="angle"===l.dim);var u=t.isAnimationEnabled()?t:null;a.diff(r).add(function(e){if(a.hasValue(e)){var i=a.getItemModel(e),r=iC[s.type](a,e,i),l=eC[s.type](a,e,i,r,n,u);a.setItemGraphicEl(e,l),o.add(l),Eh(l,a,e,i,r,t,n,"polar"===s.type)}}).update(function(e,i){var l=r.getItemGraphicEl(i);if(a.hasValue(e)){var h=a.getItemModel(e),c=iC[s.type](a,e,h);l?Io(l,{shape:c},u,e):l=eC[s.type](a,e,h,c,n,u,!0),a.setItemGraphicEl(e,l),o.add(l),Eh(l,a,e,h,c,t,n,"polar"===s.type)}else o.remove(l)}).remove(function(t){var e=r.getItemGraphicEl(t);"cartesian2d"===s.type?e&&Nh(t,u,e):e&&Oh(t,u,e)}).execute(),this._data=a},_renderLarge:function(t,e,i){this._clear(),zh(t,this.group)},_incrementalRenderLarge:function(t,e){zh(e,this.group,!0)},dispose:B,remove:function(t){this._clear(t)},_clear:function(t){var e=this.group,i=this._data;t&&t.get("animation")&&i&&!this._isLargeDraw?i.eachItemGraphicEl(function(e){"sector"===e.type?Oh(e.dataIndex,t,e):Nh(e.dataIndex,t,e)}):e.removeAll(),this._data=null}});var eC={cartesian2d:function(t,e,i,n,o,r,s){var l=new yM({shape:a({},n)});if(r){var u=l.shape,h=o?"height":"width",c={};u[h]=0,c[h]=n[h],zM[s?"updateProps":"initProps"](l,{shape:c},r,e)}return l},polar:function(t,e,i,n,o,a,s){var l=n.startAngle0?1:-1,r=n.height>0?1:-1;return{x:n.x+a*o/2,y:n.y+r*o/2,width:n.width-a*o,height:n.height-r*o}},polar:function(t,e,i){var n=t.getItemLayout(e);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle}}},nC=Pn.extend({type:"largeBar",shape:{points:[]},buildPath:function(t,e){for(var i=e.points,n=this.__startPoint,o=this.__valueIdx,a=0;a0&&"scale"!==u){var d=o.getItemLayout(0),f=Math.max(i.getWidth(),i.getHeight())/2,p=m(r.removeClipPath,r);r.setClipPath(this._createClipPath(d.cx,d.cy,f,d.startAngle,d.clockwise,p,t))}else r.removeClipPath();this._data=o}},dispose:function(){},_createClipPath:function(t,e,i,n,o,a,r){var s=new hM({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return To(s,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},r,a),s},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var lC=function(t,e){d(e,function(e){e.update="updateView",Es(e,function(i,n){var o={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name,i.dataIndex);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})},uC=function(t){return{getTargetSeries:function(e){var i={},n=R();return e.eachSeriesByType(t,function(t){t.__paletteScope=i,n.set(t.uid,t)}),n},reset:function(t,e){var i=t.getRawData(),n={},o=t.getData();o.each(function(t){var e=o.getRawIndex(t);n[e]=t}),i.each(function(e){var a=n[e],r=null!=a&&o.getItemVisual(a,"color",!0);if(r)i.setItemVisual(e,"color",r);else{var s=i.getItemModel(e).get("itemStyle.color")||t.getColorFromPalette(i.getName(e)||e+"",t.__paletteScope,i.count());i.setItemVisual(e,"color",s),null!=a&&o.setItemVisual(a,"color",s)}})}}},hC=function(t,e,i,n){var o,a,r=t.getData(),s=[],l=!1;r.each(function(i){var n,u,h,c,d=r.getItemLayout(i),f=r.getItemModel(i),p=f.getModel("label"),g=p.get("position")||f.get("emphasis.label.position"),m=f.getModel("labelLine"),v=m.get("length"),y=m.get("length2"),x=(d.startAngle+d.endAngle)/2,_=Math.cos(x),w=Math.sin(x);o=d.cx,a=d.cy;var b="inside"===g||"inner"===g;if("center"===g)n=d.cx,u=d.cy,c="center";else{var S=(b?(d.r+d.r0)/2*_:d.r*_)+o,M=(b?(d.r+d.r0)/2*w:d.r*w)+a;if(n=S+3*_,u=M+3*w,!b){var I=S+_*(v+e-d.r),T=M+w*(v+e-d.r),A=I+(_<0?-1:1)*y,D=T;n=A+(_<0?-5:5),u=D,h=[[S,M],[I,T],[A,D]]}c=b?"center":_>0?"left":"right"}var C=p.getFont(),L=p.get("rotate")?_<0?-x+Math.PI:-x:0,k=ke(t.getFormattedLabel(i,"normal")||r.getName(i),C,c,"top");l=!!L,d.label={x:n,y:u,position:g,height:k.height,len:v,len2:y,linePoints:h,textAlign:c,verticalAlign:"middle",rotation:L,inside:b},b||s.push(d.label)}),!l&&t.get("avoidLabelOverlap")&&Hh(s,o,a,e,i,n)},cC=2*Math.PI,dC=Math.PI/180,fC=function(t){return{seriesType:t,reset:function(t,e){var i=e.findComponents({mainType:"legend"});if(i&&i.length){var n=t.getData();n.filterSelf(function(t){for(var e=n.getName(t),o=0;o=0;s--){var l=2*s,u=n[l]-a/2,h=n[l+1]-r/2;if(t>=u&&e>=h&&t<=u+a&&e<=h+r)return s}return-1}}),gC=Uh.prototype;gC.isPersistent=function(){return!this._incremental},gC.updateData=function(t){this.group.removeAll();var e=new pC({rectHover:!0,cursor:"default"});e.setShape({points:t.getLayout("symbolPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},gC.updateLayout=function(t){if(!this._incremental){var e=t.getLayout("symbolPoints");this.group.eachChild(function(t){if(null!=t.startIndex){var i=2*(t.endIndex-t.startIndex),n=4*t.startIndex*2;e=new Float32Array(e.buffer,n,i)}t.setShape("points",e)})}},gC.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>2e6?(this._incremental||(this._incremental=new Zn({silent:!0})),this.group.add(this._incremental)):this._incremental=null},gC.incrementalUpdate=function(t,e){var i;this._incremental?(i=new pC,this._incremental.addDisplayable(i,!0)):((i=new pC({rectHover:!0,cursor:"default",startIndex:t.start,endIndex:t.end})).incremental=!0,this.group.add(i)),i.setShape({points:e.getLayout("symbolPoints")}),this._setCommon(i,e,!!this._incremental)},gC._setCommon=function(t,e,i){var n=e.hostModel,o=e.getVisual("symbolSize");t.setShape("size",o instanceof Array?o:[o,o]),t.symbolProxy=Jl(e.getVisual("symbol"),0,0,0,0),t.setColor=t.symbolProxy.setColor;var a=t.shape.size[0]<4;t.useStyle(n.getModel("itemStyle").getItemStyle(a?["color","shadowBlur","shadowColor"]:["color"]));var r=e.getVisual("color");r&&t.setColor(r),i||(t.seriesIndex=n.seriesIndex,t.on("mousemove",function(e){t.dataIndex=null;var i=t.findDataIndex(e.offsetX,e.offsetY);i>=0&&(t.dataIndex=i+(t.startIndex||0))}))},gC.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},gC._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()},Zs({type:"scatter",render:function(t,e,i){var n=t.getData();this._updateSymbolDraw(n,t).updateData(n),this._finished=!0},incrementalPrepareRender:function(t,e,i){var n=t.getData();this._updateSymbolDraw(n,t).incrementalPrepareUpdate(n),this._finished=!1},incrementalRender:function(t,e,i){this._symbolDraw.incrementalUpdate(t,e.getData()),this._finished=t.end===e.getData().count()},updateTransform:function(t,e,i){var n=t.getData();if(this.group.dirty(),!this._finished||n.count()>1e4||!this._symbolDraw.isPersistent())return{update:!0};var o=AD().reset(t);o.progress&&o.progress({start:0,end:n.count()},n),this._symbolDraw.updateLayout(n)},_updateSymbolDraw:function(t,e){var i=this._symbolDraw,n=e.pipelineContext.large;return i&&n===this._isLargeDraw||(i&&i.remove(),i=this._symbolDraw=n?new Uh:new Du,this._isLargeDraw=n,this.group.removeAll()),this.group.add(i.group),i},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},dispose:function(){}}),Bs(TD("scatter","circle")),zs(AD("scatter")),u(Xh,aD),jh.prototype.getIndicatorAxes=function(){return this._indicatorAxes},jh.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},jh.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e].angle;return[this.cx+t*Math.cos(i),this.cy-t*Math.sin(i)]},jh.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,a=Math.atan2(-i,e),r=1/0,s=-1,l=0;ln[0]&&isFinite(c)&&isFinite(n[0]))}else{r.getTicks().length-1>a&&(u=i(u));var d=Math.round((n[0]+n[1])/2/u)*u,f=Math.round(a/2);r.setExtent(Go(d-f*u),Go(d+(a-f)*u)),r.setInterval(u)}})},jh.dimensions=[],jh.create=function(t,e){var i=[];return t.eachComponent("radar",function(n){var o=new jh(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeriesByType("radar",function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])}),i},Fa.register("radar",jh);var mC=ND.valueAxis,vC=(Fs({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),o=this.get("scale"),s=this.get("axisLine"),l=this.get("axisTick"),u=this.get("axisLabel"),h=this.get("name"),c=this.get("name.show"),d=this.get("name.formatter"),p=this.get("nameGap"),g=this.get("triggerEvent"),m=f(this.get("indicator")||[],function(f){null!=f.max&&f.max>0&&!f.min?f.min=0:null!=f.min&&f.min<0&&!f.max&&(f.max=0);var m=h;if(null!=f.color&&(m=r({color:f.color},h)),f=n(i(f),{boundaryGap:t,splitNumber:e,scale:o,axisLine:s,axisTick:l,axisLabel:u,name:f.text,nameLocation:"end",nameGap:p,nameTextStyle:m,triggerEvent:g},!1),c||(f.name=""),"string"==typeof d){var v=f.name;f.name=d.replace("{value}",null!=v?v:"")}else"function"==typeof d&&(f.name=d(f.name,f));var y=a(new No(f,null,this.ecModel),UA);return y.mainType="radar",y.componentIndex=this.componentIndex,y},this);this.getIndicatorModels=function(){return m}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:n({lineStyle:{color:"#bbb"}},mC.axisLine),axisLabel:Yh(mC.axisLabel,!1),axisTick:Yh(mC.axisTick,!1),splitLine:Yh(mC.splitLine,!0),splitArea:Yh(mC.splitArea,!0),indicator:[]}}),["axisLine","axisTickLabel","axisName"]);Ws({type:"radar",render:function(t,e,i){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem;d(f(e.getIndicatorAxes(),function(t){return new FD(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})}),function(t){d(vC,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=i.getIndicatorAxes();if(n.length){var o=t.get("shape"),a=t.getModel("splitLine"),s=t.getModel("splitArea"),l=a.getModel("lineStyle"),u=s.getModel("areaStyle"),h=a.get("show"),c=s.get("show"),p=l.get("color"),g=u.get("color");p=y(p)?p:[p],g=y(g)?g:[g];var m=[],v=[];if("circle"===o)for(var x=n[0].getTicksCoords(),_=i.cx,w=i.cy,b=0;b"+f(i,function(i,n){var o=e.get(e.mapDimension(i.dim),t);return ia(i.name+" : "+o)}).join("
")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{width:2,type:"solid"},label:{position:"top"},symbol:"emptyCircle",symbolSize:4}});Zs({type:"radar",render:function(t,e,n){function o(t,e){var i=t.getItemVisual(e,"symbol")||"circle",n=t.getItemVisual(e,"color");if("none"!==i){var o=qh(t.getItemVisual(e,"symbolSize")),a=Jl(i,-1,-1,2,2,n);return a.attr({style:{strokeNoScale:!0},z2:100,scale:[o[0]/2,o[1]/2]}),a}}function a(e,i,n,a,r,s){n.removeAll();for(var l=0;l"+ia(n+" : "+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}}}}),aC);var EC="\0_ec_interaction_mutex";Es({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),h(oc,fw);var RC={axisPointer:1,tooltip:1,brush:1};xc.prototype={constructor:xc,draw:function(t,e,i,n,o){var a="geo"===t.mainType,r=t.getData&&t.getData();a&&e.eachComponent({mainType:"series",subType:"map"},function(e){r||e.getHostGeoModel()!==t||(r=e.getData())});var s=t.coordinateSystem;this._updateBackground(s);var l=this._regionsGroup,u=this.group,h=s.scale,c={position:s.position,scale:h};!l.childAt(0)||o?u.attr(c):Io(u,c,t),l.removeAll();var f=["itemStyle"],p=["emphasis","itemStyle"],g=["label"],m=["emphasis","label"],v=R();d(s.regions,function(e){var i=v.get(e.name)||v.set(e.name,new tb),n=new MM({shape:{paths:[]}});i.add(n);var o,s=(C=t.getRegionModel(e.name)||t).getModel(f),u=C.getModel(p),c=mc(s),y=mc(u),x=C.getModel(g),_=C.getModel(m);if(r){o=r.indexOfName(e.name);var w=r.getItemVisual(o,"color",!0);w&&(c.fill=w)}d(e.geometries,function(t){if("polygon"===t.type){n.shape.paths.push(new pM({shape:{points:t.exterior}}));for(var e=0;e<(t.interiors?t.interiors.length:0);e++)n.shape.paths.push(new pM({shape:{points:t.interiors[e]}}))}}),n.setStyle(c),n.style.strokeNoScale=!0,n.culling=!0;var b=x.get("show"),S=_.get("show"),M=r&&isNaN(r.get(r.mapDimension("value"),o)),I=r&&r.getItemLayout(o);if(a||M&&(b||S)||I&&I.showLabel){var T,A=a?e.name:o;(!r||o>=0)&&(T=t);var D=new rM({position:e.center.slice(),scale:[1/h[0],1/h[1]],z2:10,silent:!0});go(D.style,D.hoverStyle={},x,_,{labelFetcher:T,labelDataIndex:A,defaultText:e.name,useInsideStyle:!1},{textAlign:"center",textVerticalAlign:"middle"}),i.add(D)}if(r)r.setItemGraphicEl(o,i);else{var C=t.getRegionModel(e.name);n.eventData={componentType:"geo",componentIndex:t.componentIndex,geoIndex:t.componentIndex,name:e.name,region:C&&C.option||{}}}(i.__regions||(i.__regions=[])).push(e),fo(i,y,{hoverSilentOnTouch:!!t.get("selectedMode")}),l.add(i)}),this._updateController(t,e,i),vc(this,t,l,i,n),yc(t,l)},remove:function(){this._regionsGroup.removeAll(),this._backgroundGroup.removeAll(),this._controller.dispose(),this._mapName&&OC.removeGraphic(this._mapName,this.uid),this._mapName=null,this._controllerHost={}},_updateBackground:function(t){var e=t.map;this._mapName!==e&&d(OC.makeGraphic(e,this.uid),function(t){this._backgroundGroup.add(t)},this),this._mapName=e},_updateController:function(t,e,i){function n(){var e={type:"geoRoam",componentType:l};return e[l+"Id"]=t.id,e}var o=t.coordinateSystem,r=this._controller,s=this._controllerHost;s.zoomLimit=t.get("scaleLimit"),s.zoom=o.getZoom(),r.enable(t.get("roam")||!1);var l=t.mainType;r.off("pan").on("pan",function(t){this._mouseDownFlag=!1,fc(s,t.dx,t.dy),i.dispatchAction(a(n(),{dx:t.dx,dy:t.dy}))},this),r.off("zoom").on("zoom",function(t){if(this._mouseDownFlag=!1,pc(s,t.scale,t.originX,t.originY),i.dispatchAction(a(n(),{zoom:t.scale,originX:t.originX,originY:t.originY})),this._updateGroup){var e=this.group.scale;this._regionsGroup.traverse(function(t){"text"===t.type&&t.attr("scale",[1/e[0],1/e[1]])})}},this),r.setPointerChecker(function(e,n,a){return o.getViewRectAfterRoam().contain(n,a)&&!gc(e,i,t)})}};var zC="__seriesMapHighDown",BC="__seriesMapCallKey";Zs({type:"map",render:function(t,e,i,n){if(!n||"mapToggleSelect"!==n.type||n.from!==this.uid){var o=this.group;if(o.removeAll(),!t.getHostGeoModel()){if(n&&"geoRoam"===n.type&&"series"===n.componentType&&n.seriesId===t.id)(a=this._mapDraw)&&o.add(a.group);else if(t.needsDrawMap){var a=this._mapDraw||new xc(i,!0);o.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,i)}}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var n=t.originalData,o=this.group;n.each(n.mapDimension("value"),function(e,i){if(!isNaN(e)){var r=n.getItemLayout(i);if(r&&r.point){var s=r.point,l=r.offset,u=new sM({style:{fill:t.getData().getVisual("color")},shape:{cx:s[0]+9*l,cy:s[1],r:3},silent:!0,z2:8+(l?0:NM+1)});if(!l){var h=t.mainSeries.getData(),c=n.getName(i),d=h.indexOfName(c),f=n.getItemModel(i),p=f.getModel("label"),g=f.getModel("emphasis.label"),m=h.getItemGraphicEl(d),y=A(t.getFormattedLabel(d,"normal"),c),x=A(t.getFormattedLabel(d,"emphasis"),y),_=m[zC],w=Math.random();if(!_){_=m[zC]={};var b=v(_c,!0),S=v(_c,!1);m.on("mouseover",b).on("mouseout",S).on("emphasis",b).on("normal",S)}m[BC]=w,a(_,{recordVersion:w,circle:u,labelModel:p,hoverLabelModel:g,emphasisText:x,normalText:y}),wc(_,!1)}o.add(u)}}})}}),Es({type:"geoRoam",event:"geoRoam",update:"updateTransform"},function(t,e){var i=t.componentType||"series";e.eachComponent({mainType:i,query:t},function(e){var n=e.coordinateSystem;if("geo"===n.type){var o=bc(n,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(o.center),e.setZoom&&e.setZoom(o.zoom),"series"===i&&d(e.seriesGroup,function(t){t.setCenter(o.center),t.setZoom(o.zoom)})}})});var VC=Q;h(Sc,Tw),Mc.prototype={constructor:Mc,type:"view",dimensions:["x","y"],setBoundingRect:function(t,e,i,n){return this._rect=new de(t,e,i,n),this._rect},getBoundingRect:function(){return this._rect},setViewRect:function(t,e,i,n){this.transformTo(t,e,i,n),this._viewRect=new de(t,e,i,n)},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),a=this._rawTransformable;a.transform=o.calculateTransform(new de(t,e,i,n)),a.decomposeTransform(),this._updateTransform()},setCenter:function(t){t&&(this._center=t,this._updateCenterAndZoom())},setZoom:function(t){t=t||1;var e=this.zoomLimit;e&&(null!=e.max&&(t=Math.min(e.max,t)),null!=e.min&&(t=Math.max(e.min,t))),this._zoom=t,this._updateCenterAndZoom()},getDefaultCenter:function(){var t=this.getBoundingRect();return[t.x+t.width/2,t.y+t.height/2]},getCenter:function(){return this._center||this.getDefaultCenter()},getZoom:function(){return this._zoom||1},getRoamTransform:function(){return this._roamTransformable.getLocalTransform()},_updateCenterAndZoom:function(){var t=this._rawTransformable.getLocalTransform(),e=this._roamTransformable,i=this.getDefaultCenter(),n=this.getCenter(),o=this.getZoom();n=Q([],n,t),i=Q([],i,t),e.origin=n,e.position=[i[0]-n[0],i[1]-n[1]],e.scale=[o,o],this._updateTransform()},_updateTransform:function(){var t=this._roamTransformable,e=this._rawTransformable;e.parent=t,t.updateTransform(),e.updateTransform(),wt(this.transform||(this.transform=[]),e.transform||xt()),this._rawTransform=e.getLocalTransform(),this.invTransform=this.invTransform||[],Tt(this.invTransform,this.transform),this.decomposeTransform()},getViewRect:function(){return this._viewRect},getViewRectAfterRoam:function(){var t=this.getBoundingRect().clone();return t.applyTransform(this.transform),t},dataToPoint:function(t,e,i){var n=e?this._rawTransform:this.transform;return i=i||[],n?VC(i,t,n):G(i,t)},pointToData:function(t){var e=this.invTransform;return e?VC([],t,e):[t[0],t[1]]},convertToPixel:v(Ic,"dataToPoint"),convertFromPixel:v(Ic,"pointToData"),containPoint:function(t){return this.getViewRectAfterRoam().contain(t[0],t[1])}},h(Mc,Tw),Tc.prototype={constructor:Tc,type:"geo",dimensions:["lng","lat"],containCoord:function(t){for(var e=this.regions,i=0;ie&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e,i=this.hostTree,n=i.data.getItemModel(this.dataIndex),o=this.getLevelModel();return o||0!==this.children.length&&(0===this.children.length||!1!==this.isExpand)||(e=this.getLeavesModel()),n.getModel(t,(o||e||i.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},getLeavesModel:function(){return this.hostTree.leavesModel},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)},isAncestorOf:function(t){for(var e=t.parentNode;e;){if(e===this)return!0;e=e.parentNode}return!1},isDescendantOf:function(t){return t!==this&&t.isAncestorOf(this)}},Vc.prototype={constructor:Vc,type:"tree",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;ia&&(a=t.depth)});var r=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:a;return o.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),o.data},getOrient:function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+"."+a,n=n.parentNode;return ia(a+(isNaN(o)||null==o?"":" : "+o))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5},label:{show:!0,color:"#555"},leaves:{label:{show:!0}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}}),Zs({type:"tree",init:function(t,e){this._oldTree,this._mainGroup=new tb,this._controller=new oc(e.getZr()),this._controllerHost={target:this.group},this.group.add(this._mainGroup)},render:function(t,e,i,n){var o=t.getData(),a=t.layoutInfo,r=this._mainGroup,s=t.get("layout");"radial"===s?r.attr("position",[a.x+a.width/2,a.y+a.height/2]):r.attr("position",[a.x,a.y]),this._updateViewCoordSys(t),this._updateController(t,e,i);var l=this._data,u={expandAndCollapse:t.get("expandAndCollapse"),layout:s,orient:t.getOrient(),curvature:t.get("lineStyle.curveness"),symbolRotate:t.get("symbolRotate"),symbolOffset:t.get("symbolOffset"),hoverAnimation:t.get("hoverAnimation"),useNameLabel:!0,fadeIn:!0};o.diff(l).add(function(e){td(o,e)&&id(o,e,null,r,t,u)}).update(function(e,i){var n=l.getItemGraphicEl(i);td(o,e)?id(o,e,n,r,t,u):n&&nd(l,i,n,r,t,u)}).remove(function(e){var i=l.getItemGraphicEl(e);i&&nd(l,e,i,r,t,u)}).execute(),this._nodeScaleRatio=t.get("nodeScaleRatio"),this._updateNodeAndLinkScale(t),!0===u.expandAndCollapse&&o.eachItemGraphicEl(function(e,n){e.off("click").on("click",function(){i.dispatchAction({type:"treeExpandAndCollapse",seriesId:t.id,dataIndex:n})})}),this._data=o},_updateViewCoordSys:function(t){var e=t.getData(),i=[];e.each(function(t){var n=e.getItemLayout(t);!n||isNaN(n.x)||isNaN(n.y)||i.push([+n.x,+n.y])});var n=[],o=[];fn(i,n,o),o[0]-n[0]==0&&(o[0]+=1,n[0]-=1),o[1]-n[1]==0&&(o[1]+=1,n[1]-=1);var a=t.coordinateSystem=new Mc;a.zoomLimit=t.get("scaleLimit"),a.setBoundingRect(n[0],n[1],o[0]-n[0],o[1]-n[1]),a.setCenter(t.get("center")),a.setZoom(t.get("zoom")),this.group.attr({position:a.position,scale:a.scale}),this._viewCoordSys=a},_updateController:function(t,e,i){var n=this._controller,o=this._controllerHost,a=this.group;n.setPointerChecker(function(e,n,o){var r=a.getBoundingRect();return r.applyTransform(a.transform),r.contain(n,o)&&!gc(e,i,t)}),n.enable(t.get("roam")),o.zoomLimit=t.get("scaleLimit"),o.zoom=t.coordinateSystem.getZoom(),n.off("pan").off("zoom").on("pan",function(e){fc(o,e.dx,e.dy),i.dispatchAction({seriesId:t.id,type:"treeRoam",dx:e.dx,dy:e.dy})},this).on("zoom",function(e){pc(o,e.scale,e.originX,e.originY),i.dispatchAction({seriesId:t.id,type:"treeRoam",zoom:e.scale,originX:e.originX,originY:e.originY}),this._updateNodeAndLinkScale(t)},this)},_updateNodeAndLinkScale:function(t){var e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr("scale",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,o=n&&n[0]||1;return((e.getZoom()-1)*i+1)/o},dispose:function(){this._controller&&this._controller.dispose(),this._controllerHost={}},remove:function(){this._mainGroup.removeAll(),this._data=null}}),Es({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=t.dataIndex,n=e.getData().tree.getNodeByDataIndex(i);n.isExpand=!n.isExpand})}),Es({type:"treeRoam",event:"treeRoam",update:"none"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=bc(e.coordinateSystem,t);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)})});Bs(TD("tree","circle")),zs(function(t,e){t.eachSeriesByType("tree",function(t){sd(t,e)})}),YI.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};dd(i);var n=t.levels||[];n=t.levels=fd(n,e);var o={};return o.levels=n,Vc.createTree(i,this,o).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=ta(y(i)?i[0]:i);return ia(e.getName(t)+": "+n)},getDataParams:function(t){var e=YI.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=cd(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},a(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=R(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var UC=5;pd.prototype={constructor:pd,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&i){var r=o.getModel("itemStyle"),s=r.getModel("textStyle"),l={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),da(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a=0,s=e.emptyItemWidth,l=t.get("breadcrumb.height"),u=ha(e.pos,e.box),h=e.totalWidth,c=e.renderList,d=c.length-1;d>=0;d--){var f=c[d],p=f.node,g=f.width,m=f.text;h>u.width&&(h-=g-s,g=s,m=null);var y=new pM({shape:{points:gd(a,0,g,l,d===c.length-1,0===d)},style:r(i.getItemStyle(),{lineJoin:"bevel",text:m,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:v(o,p)});this.group.add(y),md(y,t,p),a+=g+8}},remove:function(){this.group.removeAll()}};var XC=m,jC=tb,YC=yM,qC=d,KC=["label"],$C=["emphasis","label"],JC=["upperLabel"],QC=["emphasis","upperLabel"],tL=10,eL=1,iL=2,nL=Qb([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),oL=function(t){var e=nL(t);return e.stroke=e.fill=e.lineWidth=null,e};Zs({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(l(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=ld(n,["treemapZoomToNode","treemapRootToNode"],t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,u=this._storage,h="treemapRootToNode"===a&&o&&u?{rootNodeGroup:u.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,c=this._giveContainerGroup(r),d=this._doRender(c,t,h);s||a&&"treemapZoomToNode"!==a&&"treemapRootToNode"!==a?d.renderFinally():this._doAnimation(c,d,t,h),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new jC,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){function n(t,e,i,o,a){function r(t){return t.getId()}function s(r,s){var l=null!=r?t[r]:null,u=null!=s?e[s]:null,c=h(l,u,i,a);c&&n(l&&l.viewChildren||[],u&&u.viewChildren||[],c,o,a+1)}o?(e=t,qC(t,function(t,e){!t.isRemoved()&&s(e,e)})):new Xs(e,t,r,r).add(s).update(s).remove(v(s,null)).execute()}var o=e.getData().tree,a=this._oldTree,r={nodeGroup:[],background:[],content:[]},s={nodeGroup:[],background:[],content:[]},l=this._storage,u=[],h=v(yd,e,s,l,i,r,u);n(o.root?[o.root]:[],a&&a.root?[a.root]:[],t,o===a||!a,0);var c=function(t){var e={nodeGroup:[],background:[],content:[]};return t&&qC(t,function(t,i){var n=e[i];qC(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}(l);return this._oldTree=o,this._storage=s,{lastsForAnimation:r,willDeleteEls:c,renderFinally:function(){qC(c,function(t){qC(t,function(t){t.parent&&t.parent.remove(t)})}),qC(u,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,e,i,n){if(i.get("animation")){var o=i.get("animationDurationUpdate"),r=i.get("animationEasing"),s=vd();qC(e.willDeleteEls,function(t,e){qC(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&"drillDown"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var u=0,h=0;l.__tmWillDelete||(u=l.__tmNodeWidth/2,h=l.__tmNodeHeight/2),a="nodeGroup"===e?{position:[u,h],style:{opacity:0}}:{shape:{x:u,y:h,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),qC(this._storage,function(t,i){qC(t,function(t,n){var l=e.lastsForAnimation[i][n],u={};l&&("nodeGroup"===i?l.old&&(u.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(u.shape=a({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),u.style={opacity:1}):1!==t.style.opacity&&(u.style={opacity:1})),s.add(t,u,o,r))})},this),this._state="animating",s.done(XC(function(){this._state="ready",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||((e=this._controller=new oc(t.getZr())).enable(this.seriesModel.get("roam")),e.on("pan",XC(this._onPan,this)),e.on("zoom",XC(this._onZoom,this)));var i=new de(0,0,t.getWidth(),t.getHeight());e.setPointerChecker(function(t,e,n){return i.contain(e,n)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t){if("animating"!==this._state&&(Math.abs(t.dx)>3||Math.abs(t.dy)>3)){var e=this.seriesModel.getData().tree.root;if(!e)return;var i=e.getLayout();if(!i)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:i.x+t.dx,y:i.y+t.dy,width:i.width,height:i.height}})}},_onZoom:function(t){var e=t.originX,i=t.originY;if("animating"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var a=new de(o.x,o.y,o.width,o.height),r=this.seriesModel.layoutInfo;e-=r.x,i-=r.y;var s=xt();St(s,s,[-e,-i]),It(s,s,[t.scale,t.scale]),St(s,s,[e,i]),a.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:a.x,y:a.y,width:a.width,height:a.height}})}},_initEvents:function(t){t.on("click",function(t){if("ready"===this._state){var e=this.seriesModel.get("nodeClick",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if("zoomToNode"===e)this._zoomToNode(i);else if("link"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),a=o.get("link",!0),r=o.get("target",!0)||"blank";a&&window.open(a,r)}}}}},this)},_renderBreadcrumb:function(t,e,i){i||(i=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(i={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new pd(this.group))).render(t,e,i.node,XC(function(e){"animating"!==this._state&&(hd(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))},this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var a=o.transformCoordToLocal(t,e),r=o.shape;if(!(r.x<=a[0]&&a[0]<=r.x+r.width&&r.y<=a[1]&&a[1]<=r.y+r.height))return!1;i={node:n,offsetX:a[0],offsetY:a[1]}}},this),i}});for(var aL=["treemapZoomToNode","treemapRender","treemapMove"],rL=0;rL=0&&t.call(e,i[o],o)},TL.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},TL.breadthFirstTraverse=function(t,e,i,n){if(Jd.isInstance(e)||(e=this._nodesMap[$d(e)]),e){for(var o="out"===i?"outEdges":"in"===i?"inEdges":"edges",a=0;a=0&&i.node2.dataIndex>=0});for(var o=0,a=n.length;o=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};h(Jd,AL("hostGraph","data")),h(Qd,AL("hostGraph","edgeData")),IL.Node=Jd,IL.Edge=Qd,Yi(Jd),Yi(Qd);var DL=function(t,e,i,n,o){for(var a=new IL(n),r=0;r "+f)),h++)}var p,g=i.get("coordinateSystem");if("cartesian2d"===g||"polar"===g)p=ml(t,i);else{var m=Fa.get(g),v=m&&"view"!==m.type?m.dimensions||[]:[];l(v,"value")<0&&v.concat(["value"]);var y=_A(t,{coordDimensions:v});(p=new vA(y,i)).initData(t)}var x=new vA(["value"],i);return x.initData(u,s),o&&o(p,x),kc({mainData:p,struct:a,structAttr:"graph",datas:{node:p,edge:x},datasAttr:{node:"data",edge:"edgeData"}}),a.update(),a},CL=Hs({type:"series.graph",init:function(t){CL.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){CL.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){CL.superApply(this,"mergeDefaultAndTheme",arguments),Ci(t,["edgeLabel"],["show"])},getInitialData:function(t,e){var i=t.edges||t.links||[],n=t.data||t.nodes||[],o=this;if(n&&i)return DL(n,i,this,!0,function(t,i){function n(t){return(t=this.parsePath(t))&&"label"===t[0]?r:t&&"emphasis"===t[0]&&"label"===t[1]?l:this.parentModel}t.wrapMethod("getItemModel",function(t){var e=o._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var a=o.getModel("edgeLabel"),r=new No({label:a.option},a.parentModel,e),s=o.getModel("emphasis.edgeLabel"),l=new No({emphasis:{label:s.option}},s.parentModel,e);i.wrapMethod("getItemModel",function(t){return t.customizeGetParent(n),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getData(),o=this.getDataParams(t,i),a=n.graph.getEdgeByIndex(t),r=n.getName(a.node1.dataIndex),s=n.getName(a.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=ia(l.join(" > ")),o.value&&(l+=" : "+ia(o.value)),l}return CL.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=f(this.option.categories||[],function(t){return null!=t.value?t:a({value:0},t)}),e=new vA(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return CL.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle"},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{label:{show:!0}}}}),LL=_M.prototype,kL=bM.prototype,PL=Un({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){(tf(e)?LL:kL).buildPath(t,e)},pointAt:function(t){return tf(this.shape)?LL.pointAt.call(this,t):kL.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=tf(e)?[e.x2-e.x1,e.y2-e.y1]:kL.tangentAt.call(this,t);return q(i,i)}}),NL=["fromSymbol","toSymbol"],OL=rf.prototype;OL.beforeUpdate=function(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var o=1,a=this.parent;a;)a.scale&&(o/=a.scale[0]),a=a.parent;var r=t.childOfName("line");if(this.__dirty||r.__dirty){var s=r.shape.percent,l=r.pointAt(0),u=r.pointAt(s),h=U([],u,l);if(q(h,h),e&&(e.attr("position",l),c=r.tangentAt(0),e.attr("rotation",Math.PI/2-Math.atan2(c[1],c[0])),e.attr("scale",[o*s,o*s])),i){i.attr("position",u);var c=r.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(c[1],c[0])),i.attr("scale",[o*s,o*s])}if(!n.ignore){n.attr("position",u);var d,f,p,g=5*o;if("end"===n.__position)d=[h[0]*g+u[0],h[1]*g+u[1]],f=h[0]>.8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var m=s/2,v=[(c=r.tangentAt(m))[1],-c[0]],y=r.pointAt(m);v[1]>0&&(v[0]=-v[0],v[1]=-v[1]),d=[y[0]+v[0]*g,y[1]+v[1]*g],f="center",p="bottom";var x=-Math.atan2(c[1],c[0]);u[0].8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||p,textAlign:n.__textAlign||f},position:d,scale:[o,o]})}}}},OL._createLine=function(t,e,i){var n=t.hostModel,o=of(t.getItemLayout(e));o.shape.percent=0,To(o,{shape:{percent:1}},n,e),this.add(o);var a=new rM({name:"label",lineLabelOriginalOpacity:1});this.add(a),d(NL,function(i){var n=nf(i,t,e);this.add(n),this[ef(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},OL.updateData=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=t.getItemLayout(e),r={shape:{}};af(r.shape,a),Io(o,r,n,e),d(NL,function(i){var n=t.getItemVisual(e,i),o=ef(i);if(this[o]!==n){this.remove(this.childOfName(i));var a=nf(i,t,e);this.add(a)}this[o]=n},this),this._updateCommonStl(t,e,i)},OL._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=i&&i.lineStyle,s=i&&i.hoverLineStyle,l=i&&i.labelModel,u=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var h=t.getItemModel(e);a=h.getModel("lineStyle").getLineStyle(),s=h.getModel("emphasis.lineStyle").getLineStyle(),l=h.getModel("label"),u=h.getModel("emphasis.label")}var c=t.getItemVisual(e,"color"),f=D(t.getItemVisual(e,"opacity"),a.opacity,1);o.useStyle(r({strokeNoScale:!0,fill:"none",stroke:c,opacity:f},a)),o.hoverStyle=s,d(NL,function(t){var e=this.childOfName(t);e&&(e.setColor(c),e.setStyle({opacity:f}))},this);var p,g,m=l.getShallow("show"),v=u.getShallow("show"),y=this.childOfName("label");if((m||v)&&(p=c||"#000",null==(g=n.getFormattedLabel(e,"normal",t.dataType)))){var x=n.getRawValue(e);g=null==x?t.getName(e):isFinite(x)?Go(x):x}var _=m?g:null,w=v?A(n.getFormattedLabel(e,"emphasis",t.dataType),g):null,b=y.style;null==_&&null==w||(mo(y.style,l,{text:_},{autoColor:p}),y.__textAlign=b.textAlign,y.__verticalAlign=b.textVerticalAlign,y.__position=l.get("position")||"middle"),y.hoverStyle=null!=w?{text:w,textFill:u.getTextColor(!0),fontStyle:u.getShallow("fontStyle"),fontWeight:u.getShallow("fontWeight"),fontSize:u.getShallow("fontSize"),fontFamily:u.getShallow("fontFamily")}:{text:null},y.ignore=!m&&!v,fo(this)},OL.highlight=function(){this.trigger("emphasis")},OL.downplay=function(){this.trigger("normal")},OL.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},OL.setLinePoints=function(t){var e=this.childOfName("line");af(e.shape,t),e.dirty()},u(rf,tb);var EL=sf.prototype;EL.isPersistent=function(){return!0},EL.updateData=function(t){var e=this,i=e.group,n=e._lineData;e._lineData=t,n||i.removeAll();var o=hf(t);t.diff(n).add(function(i){lf(e,t,i,o)}).update(function(i,a){uf(e,n,t,a,i,o)}).remove(function(t){i.remove(n.getItemGraphicEl(t))}).execute()},EL.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},EL.incrementalPrepareUpdate=function(t){this._seriesScope=hf(t),this._lineData=null,this.group.removeAll()},EL.incrementalUpdate=function(t,e){for(var i=t.start;i=o/3?1:2),l=e.y-n(r)*a*(a>=o/3?1:2);r=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(r)*a,e.y+n(r)*a),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(r)*a,e.y-n(r)*a),t.lineTo(s,l)}}),YL=2*Math.PI,qL=(Ar.extend({type:"gauge",render:function(t,e,i){this.group.removeAll();var n=t.get("axisLine.lineStyle.color"),o=Sf(t,i);this._renderMain(t,e,i,n,o)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var a=this.group,r=t.getModel("axisLine").getModel("lineStyle"),s=t.get("clockwise"),l=-t.get("startAngle")/180*Math.PI,u=-t.get("endAngle")/180*Math.PI,h=(u-l)%YL,c=l,d=r.get("width"),f=0;f=t&&(0===e?0:n[e-1][0]).4?"bottom":"middle",textAlign:A<-.4?"left":A>.4?"right":"center"},{autoColor:P}),silent:!0}))}if(g.get("show")&&T!==v){for(var N=0;N<=y;N++){var A=Math.cos(w),D=Math.sin(w),O=new _M({shape:{x1:A*c+u,y1:D*c+h,x2:A*(c-_)+u,y2:D*(c-_)+h},silent:!0,style:I});"auto"===I.stroke&&O.setStyle({stroke:n((T+N/y)/v)}),l.add(O),w+=S}w-=S}else w+=b}},_renderPointer:function(t,e,i,n,o,a,r,s){var l=this.group,u=this._data;if(t.get("pointer.show")){var h=[+t.get("min"),+t.get("max")],c=[a,r],d=t.getData(),f=d.mapDimension("value");d.diff(u).add(function(e){var i=new jL({shape:{angle:a}});To(i,{shape:{angle:Bo(d.get(f,e),h,c,!0)}},t),l.add(i),d.setItemGraphicEl(e,i)}).update(function(e,i){var n=u.getItemGraphicEl(i);Io(n,{shape:{angle:Bo(d.get(f,e),h,c,!0)}},t),l.add(n),d.setItemGraphicEl(e,n)}).remove(function(t){var e=u.getItemGraphicEl(t);l.remove(e)}).execute(),d.eachItemGraphicEl(function(t,e){var i=d.getItemModel(e),a=i.getModel("pointer");t.setShape({x:o.cx,y:o.cy,width:Vo(a.get("width"),o.r),r:Vo(a.get("length"),o.r)}),t.useStyle(i.getModel("itemStyle").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",n(Bo(d.get(f,e),h,[0,1],!0))),fo(t,i.getModel("emphasis.itemStyle").getItemStyle())}),this._data=d}else u&&u.eachItemGraphicEl(function(t){l.remove(t)})},_renderTitle:function(t,e,i,n,o){var a=t.getData(),r=a.mapDimension("value"),s=t.getModel("title");if(s.get("show")){var l=s.get("offsetCenter"),u=o.cx+Vo(l[0],o.r),h=o.cy+Vo(l[1],o.r),c=+t.get("min"),d=+t.get("max"),f=n(Bo(t.getData().get(r,0),[c,d],[0,1],!0));this.group.add(new rM({silent:!0,style:mo({},s,{x:u,y:h,text:a.getName(0),textAlign:"center",textVerticalAlign:"middle"},{autoColor:f,forceRich:!0})}))}},_renderDetail:function(t,e,i,n,o){var a=t.getModel("detail"),r=+t.get("min"),s=+t.get("max");if(a.get("show")){var l=a.get("offsetCenter"),u=o.cx+Vo(l[0],o.r),h=o.cy+Vo(l[1],o.r),c=Vo(a.get("width"),o.r),d=Vo(a.get("height"),o.r),f=t.getData(),p=f.get(f.mapDimension("value"),0),g=n(Bo(p,[r,s],[0,1],!0));this.group.add(new rM({silent:!0,style:mo({},a,{x:u,y:h,text:Mf(p,a.get("formatter")),textWidth:isNaN(c)?null:c,textHeight:isNaN(d)?null:d,textAlign:"center",textVerticalAlign:"middle"},{autoColor:g,forceRich:!0})}))}}}),Hs({type:"series.funnel",init:function(t){qL.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()},this._defaultLabelLine(t)},getInitialData:function(t,e){return oC(this,["value"])},_defaultLabelLine:function(t){Ci(t,"labelLine",["show"]);var e=t.labelLine,i=t.emphasis.labelLine;e.show=e.show&&t.label.show,i.show=i.show&&t.emphasis.label.show},getDataParams:function(t){var e=this.getData(),i=qL.superCall(this,"getDataParams",t),n=e.mapDimension("value"),o=e.getSum(n);return i.percent=o?+(e.get(n,t)/o*100).toFixed(2):0,i.$vars.push("percent"),i},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}}}})),KL=If.prototype,$L=["itemStyle","opacity"];KL.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=t.getItemModel(e).get($L);l=null==l?1:l,n.useStyle({}),i?(n.setShape({points:s.points}),n.setStyle({opacity:0}),To(n,{style:{opacity:l}},o,e)):Io(n,{style:{opacity:l},shape:{points:s.points}},o,e);var u=a.getModel("itemStyle"),h=t.getItemVisual(e,"color");n.setStyle(r({lineJoin:"round",fill:h},u.getItemStyle(["opacity"]))),n.hoverStyle=u.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),fo(this)},KL._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,"color");Io(i,{shape:{points:r.linePoints||r.linePoints}},o,e),Io(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel("label"),u=a.getModel("emphasis.label"),h=a.getModel("labelLine"),c=a.getModel("emphasis.labelLine"),s=t.getItemVisual(e,"color");go(n.style,n.hoverStyle={},l,u,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign}),n.ignore=n.normalIgnore=!l.get("show"),n.hoverIgnore=!u.get("show"),i.ignore=i.normalIgnore=!h.get("show"),i.hoverIgnore=!c.get("show"),i.setStyle({stroke:s}),i.setStyle(h.getModel("lineStyle").getLineStyle()),i.hoverStyle=c.getModel("lineStyle").getLineStyle()},u(If,tb);Ar.extend({type:"funnel",render:function(t,e,i){var n=t.getData(),o=this._data,a=this.group;n.diff(o).add(function(t){var e=new If(n,t);n.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=o.getItemGraphicEl(e);i.updateData(n,t),a.add(i),n.setItemGraphicEl(t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=n},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});Bs(uC("funnel")),zs(function(t,e,i){t.eachSeriesByType("funnel",function(t){var i=t.getData(),n=i.mapDimension("value"),o=t.get("sort"),a=Tf(t,e),r=Af(i,o),s=[Vo(t.get("minSize"),a.width),Vo(t.get("maxSize"),a.width)],l=i.getDataExtent(n),u=t.get("min"),h=t.get("max");null==u&&(u=Math.min(l[0],0)),null==h&&(h=l[1]);var c=t.get("funnelAlign"),d=t.get("gap"),f=(a.height-d*(i.count()-1))/i.count(),p=a.y,g=function(t,e){var o,r=Bo(i.get(n,t)||0,[u,h],s,!0);switch(c){case"left":o=a.x;break;case"center":o=a.x+(a.width-r)/2;break;case"right":o=a.x+a.width-r}return[[o,e],[o+r,e]]};"ascending"===o&&(f=-f,d=-d,p+=a.height,r=r.reverse());for(var m=0;ma&&(e[1-n]=e[n]+h.sign*a),e},tk=d,ek=Math.min,ik=Math.max,nk=Math.floor,ok=Math.ceil,ak=Go,rk=Math.PI;Nf.prototype={type:"parallel",constructor:Nf,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;tk(n,function(t,i){var n=o[i],a=e.getComponent("parallelAxis",n),r=this._axesMap.set(t,new JL(t,Hl(a),[0,0],a.get("type"),n)),s="category"===r.type;r.onBand=s&&a.get("boundaryGap"),r.inverse=a.get("inverse"),a.axis=r,r.model=a,r.coordinateSystem=a.coordinateSystem=this},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},containPoint:function(t){var e=this._makeLayoutInfo(),i=e.axisBase,n=e.layoutBase,o=e.pixelDimIndex,a=t[1-o],r=t[o];return a>=i&&a<=i+e.axisLength&&r>=n&&r<=n+e.layoutLength},getModel:function(){return this._model},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();tk(this.dimensions,function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(n,n.mapDimension(t)),Wl(e.scale,e.model)},this)}},this)},resize:function(t,e){this._rect=ca(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},getRect:function(){return this._rect},_makeLayoutInfo:function(){var t,e=this._model,i=this._rect,n=["x","y"],o=["width","height"],a=e.get("layout"),r="horizontal"===a?0:1,s=i[o[r]],l=[0,s],u=this.dimensions.length,h=Of(e.get("axisExpandWidth"),l),c=Of(e.get("axisExpandCount")||0,[0,u]),d=e.get("axisExpandable")&&u>3&&u>c&&c>1&&h>0&&s>0,f=e.get("axisExpandWindow");f?(t=Of(f[1]-f[0],l),f[1]=f[0]+t):(t=Of(h*(c-1),l),(f=[h*(e.get("axisExpandCenter")||nk(u/2))-t/2])[1]=f[0]+t);var p=(s-t)/(u-c);p<3&&(p=0);var g=[nk(ak(f[0]/h,1))+1,ok(ak(f[1]/h,1))-1],m=p/h*f[0];return{layout:a,pixelDimIndex:r,layoutBase:i[n[r]],layoutLength:s,axisBase:i[n[1-r]],axisLength:i[o[1-r]],axisExpandable:d,axisExpandWidth:h,axisCollapseWidth:p,axisExpandWindow:f,axisCount:u,winInnerIndices:g,axisExpandWindow0Pos:m}},_layoutAxes:function(){var t=this._rect,e=this._axesMap,i=this.dimensions,n=this._makeLayoutInfo(),o=n.layout;e.each(function(t){var e=[0,n.axisLength],i=t.inverse?1:0;t.setExtent(e[i],e[1-i])}),tk(i,function(e,i){var a=(n.axisExpandable?Rf:Ef)(i,n),r={horizontal:{x:a.position,y:n.axisLength},vertical:{x:0,y:a.position}},s={horizontal:rk/2,vertical:0},l=[r[o].x+t.x,r[o].y+t.y],u=s[o],h=xt();Mt(h,h,u),St(h,h,l),this._axesLayout[e]={position:l,rotation:u,transform:h,axisNameAvailableWidth:a.axisNameAvailableWidth,axisLabelShow:a.axisLabelShow,nameTruncateMaxWidth:a.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}},this)},getAxis:function(t){return this._axesMap.get(t)},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},eachActiveState:function(t,e,i,n){null==i&&(i=0),null==n&&(n=t.count());var o=this._axesMap,a=this.dimensions,r=[],s=[];d(a,function(e){r.push(t.mapDimension(e)),s.push(o.get(e).model)});for(var l=this.hasAxisBrushed(),u=i;uo*(1-h[0])?(l="jump",r=s-o*(1-h[2])):(r=s-o*h[1])>=0&&(r=s-o*(1-h[1]))<=0&&(r=0),(r*=e.axisExpandWidth/u)?QL(r,n,a,"all"):l="none";else{o=n[1]-n[0];(n=[ik(0,a[1]*s/o-o/2)])[1]=ek(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},Fa.register("parallel",{create:function(t,e){var i=[];return t.eachComponent("parallel",function(n,o){var a=new Nf(n,t,e);a.name="parallel_"+o,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if("parallel"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}});var sk=lI.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return Qb([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=i(t);if(e)for(var n=e.length-1;n>=0;n--)Fo(e[n])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var i=e[0];if(i[0]<=t&&t<=i[1])return"active"}else for(var n=0,o=e.length;n5)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==n.behavior&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&Ip(this,"mousemove")){var e=this._model,i=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),n=i.behavior;"jump"===n&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===n?null:{axisExpandWindow:i.axisExpandWindow,animation:"jump"===n&&null})}}};Ns(function(t){Cf(t),Lf(t)}),YI.extend({type:"series.parallel",dependencies:["parallel"],visualColorAccessPath:"lineStyle.color",getInitialData:function(t,e){var i=this.getSource();return Tp(i,this),ml(i,this)},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:"parallel",parallelIndex:0,label:{show:!1},inactiveOpacity:.05,activeOpacity:1,lineStyle:{width:1,opacity:.45,type:"solid"},emphasis:{label:{show:!1}},progressive:500,smooth:!1,animationEasing:"linear"}});var Dk=.3,Ck=(Ar.extend({type:"parallel",init:function(){this._dataGroup=new tb,this.group.add(this._dataGroup),this._data,this._initialized},render:function(t,e,i,n){var o=this._dataGroup,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.dimensions,u=kp(t);if(a.diff(r).add(function(t){Pp(Lp(a,o,t,l,s),a,t,u)}).update(function(e,i){var o=r.getItemGraphicEl(i),h=Cp(a,e,l,s);a.setItemGraphicEl(e,o),Io(o,{shape:{points:h}},n&&!1===n.animation?null:t,e),Pp(o,a,e,u)}).remove(function(t){var e=r.getItemGraphicEl(t);o.remove(e)}).execute(),!this._initialized){this._initialized=!0;var h=Dp(s,t,function(){setTimeout(function(){o.removeClipPath()})});o.setClipPath(h)}this._data=a},incrementalPrepareRender:function(t,e,i){this._initialized=!0,this._data=null,this._dataGroup.removeAll()},incrementalRender:function(t,e,i){for(var n=e.getData(),o=e.coordinateSystem,a=o.dimensions,r=kp(e),s=t.start;sn&&(n=e)}),d(e,function(e){var o=new hL({type:"color",mappingMethod:"linear",dataExtent:[i,n],visual:t.get("color")}).mapValueToVisual(e.getLayout().value);e.setVisual("color",o);var a=e.getModel().get("itemStyle.color");null!=a&&e.setVisual("color",a)})}})});var Ok={_baseAxisDim:null,getInitialData:function(t,e){var i,n,o=e.getComponent("xAxis",this.get("xAxisIndex")),a=e.getComponent("yAxis",this.get("yAxisIndex")),r=o.get("type"),s=a.get("type");"category"===r?(t.layout="horizontal",i=o.getOrdinalMeta(),n=!0):"category"===s?(t.layout="vertical",i=a.getOrdinalMeta(),n=!0):t.layout=t.layout||"horizontal";var l=["x","y"],u="horizontal"===t.layout?0:1,h=this._baseAxisDim=l[u],c=l[1-u],f=[o,a],p=f[u].get("type"),g=f[1-u].get("type"),m=t.data;if(m&&n){var v=[];d(m,function(t,e){var i;t.value&&y(t.value)?(i=t.value.slice(),t.value.unshift(e)):y(t)?(i=t.slice(),t.unshift(e)):i=t,v.push(i)}),t.data=v}var x=this.defaultValueDimensions;return oC(this,{coordDimensions:[{name:h,type:qs(p),ordinalMeta:i,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:c,type:qs(g),dimsDef:x.slice()}],dimensionsCount:x.length+1})},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}};h(YI.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}}),Ok,!0);var Ek=["itemStyle"],Rk=["emphasis","itemStyle"],zk=(Ar.extend({type:"boxplot",render:function(t,e,i){var n=t.getData(),o=this.group,a=this._data;this._data||o.removeAll();var r="horizontal"===t.get("layout")?1:0;n.diff(a).add(function(t){if(n.hasValue(t)){var e=ig(n.getItemLayout(t),n,t,r,!0);n.setItemGraphicEl(t,e),o.add(e)}}).update(function(t,e){var i=a.getItemGraphicEl(e);if(n.hasValue(t)){var s=n.getItemLayout(t);i?ng(s,i,n,t):i=ig(s,n,t,r),o.add(i),n.setItemGraphicEl(t,i)}else o.remove(i)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&o.remove(e)}).execute(),this._data=n},remove:function(t){var e=this.group,i=this._data;this._data=null,i&&i.eachItemGraphicEl(function(t){t&&e.remove(t)})},dispose:B}),Pn.extend({type:"boxplotBoxPath",shape:{},buildPath:function(t,e){var i=e.points,n=0;for(t.moveTo(i[n][0],i[n][1]),n++;n<4;n++)t.lineTo(i[n][0],i[n][1]);for(t.closePath();n0?jk:Yk)}function n(t,e){return e.get(t>0?Uk:Xk)}var o=t.getData(),a=t.pipelineContext.large;if(o.setVisual({legendSymbol:"roundRect",colorP:i(1,t),colorN:i(-1,t),borderColorP:n(1,t),borderColorN:n(-1,t)}),!e.isSeriesFiltered(t))return!a&&{progress:function(t,e){for(var o;null!=(o=t.next());){var a=e.getItemModel(o),r=e.getItemLayout(o).sign;e.setItemVisual(o,{color:i(r,a),borderColor:n(r,a)})}}}}},Kk="undefined"!=typeof Float32Array?Float32Array:Array,$k={seriesType:"candlestick",plan:$I(),reset:function(t){var e=t.coordinateSystem,i=t.getData(),n=pg(t,i),o=0,a=1,r=["x","y"],s=i.mapDimension(r[o]),l=i.mapDimension(r[a],!0),u=l[0],h=l[1],c=l[2],d=l[3];if(i.setLayout({candleWidth:n,isSimpleBox:n<=1.3}),!(null==s||l.length<4))return{progress:t.pipelineContext.large?function(t,i){for(var n,r,l=new Kk(5*t.count),f=0,p=[],g=[];null!=(r=t.next());){var m=i.get(s,r),v=i.get(u,r),y=i.get(h,r),x=i.get(c,r),_=i.get(d,r);isNaN(m)||isNaN(x)||isNaN(_)?(l[f++]=NaN,f+=4):(l[f++]=fg(i,r,v,y,h),p[o]=m,p[a]=x,n=e.dataToPoint(p,null,g),l[f++]=n?n[0]:NaN,l[f++]=n?n[1]:NaN,p[a]=_,n=e.dataToPoint(p,null,g),l[f++]=n?n[1]:NaN)}i.setLayout("largePoints",l)}:function(t,i){function r(t,i){var n=[];return n[o]=i,n[a]=t,isNaN(i)||isNaN(t)?[NaN,NaN]:e.dataToPoint(n)}function l(t,e,i){var a=e.slice(),r=e.slice();a[o]=Jn(a[o]+n/2,1,!1),r[o]=Jn(r[o]-n/2,1,!0),i?t.push(a,r):t.push(r,a)}function f(t){return t[o]=Jn(t[o],1),t}for(var p;null!=(p=t.next());){var g=i.get(s,p),m=i.get(u,p),v=i.get(h,p),y=i.get(c,p),x=i.get(d,p),_=Math.min(m,v),w=Math.max(m,v),b=r(_,g),S=r(w,g),M=r(y,g),I=r(x,g),T=[];l(T,S,0),l(T,b,1),T.push(f(I),f(S),f(M),f(b)),i.setItemLayout(p,{sign:fg(i,p,m,v,h),initBaseline:m>v?S[a]:b[a],ends:T,brushRect:function(t,e,i){var s=r(t,i),l=r(e,i);return s[o]-=n/2,l[o]-=n/2,{x:s[0],y:s[1],width:a?n:l[0]-s[0],height:a?l[1]-s[1]:n}}(y,x,g)})}}}}};Ns(function(t){t&&y(t.series)&&d(t.series,function(t){w(t)&&"k"===t.type&&(t.type="candlestick")})}),Bs(qk),zs($k),YI.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){return ml(this.getSource(),this)},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}});var Jk=vg.prototype;Jk.stopEffectAnimation=function(){this.childAt(1).removeAll()},Jk.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),o=0;o<3;o++){var a=Jl(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var r=-o/3*t.period+t.effectOffset;a.animate("",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(r).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(r).start(),n.add(a)}mg(n,t)},Jk.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=["symbolType","period","rippleScale"],o=0;o "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}}),iP=xg.prototype;iP.createLine=function(t,e,i){return new rf(t,e,i)},iP._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),o=i.get("symbol");y(n)||(n=[n,n]);var a=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=Jl(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",a),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(a),r.attr("scale",n),this._symbolType=o,this._updateEffectAnimation(t,i,e))},iP._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,a=t.getItemLayout(i),r=1e3*e.get("period"),s=e.get("loop"),l=e.get("constantSpeed"),u=T(e.get("delay"),function(e){return e/t.count()*r/3}),h="function"==typeof u;if(n.ignore=!0,this.updateAnimationPoints(n,a),l>0&&(r=this.getLineLength(n)/l*1e3),r!==this._period||s!==this._loop){n.stopAnimation();var c=u;h&&(c=u(i)),n.__t>0&&(c=-r*n.__t),n.__t=0;var d=n.animate("",s).when(r,{__t:1}).delay(c).during(function(){o.updateSymbolPosition(n)});s||d.done(function(){o.remove(n)}),d.start()}this._period=r,this._loop=s}},iP.getLineLength=function(t){return uw(t.__p1,t.__cp1)+uw(t.__cp1,t.__p2)},iP.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},iP.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},iP.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,a=t.position,r=sn,s=ln;a[0]=r(e[0],n[0],i[0],o),a[1]=r(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),u=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(u,l)-Math.PI/2,t.ignore=!1},iP.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel("effect");this._updateEffectAnimation(t,i,e)},u(xg,tb);var nP=_g.prototype;nP._createPolyline=function(t,e,i){var n=t.getItemLayout(e),o=new gM({shape:{points:n}});this.add(o),this._updateCommonStl(t,e,i)},nP.updateData=function(t,e,i){var n=t.hostModel;Io(this.childAt(0),{shape:{points:t.getItemLayout(e)}},n,e),this._updateCommonStl(t,e,i)},nP._updateCommonStl=function(t,e,i){var n=this.childAt(0),o=t.getItemModel(e),a=t.getItemVisual(e,"color"),s=i&&i.lineStyle,l=i&&i.hoverLineStyle;i&&!t.hasItemOption||(s=o.getModel("lineStyle").getLineStyle(),l=o.getModel("emphasis.lineStyle").getLineStyle()),n.useStyle(r({strokeNoScale:!0,fill:"none",stroke:a},s)),n.hoverStyle=l,fo(this)},nP.updateLayout=function(t,e){this.childAt(0).setShape("points",t.getItemLayout(e))},u(_g,tb);var oP=wg.prototype;oP.createLine=function(t,e,i){return new _g(t,e,i)},oP.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;re);r++);r=Math.min(r-1,o-2)}J(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},u(wg,xg);var aP=Un({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var i=e.segs,n=e.curveness;if(e.polyline)for(r=0;r0){t.moveTo(i[r++],i[r++]);for(var a=1;a0){var c=(s+u)/2-(l-h)*n,d=(l+h)/2-(u-s)*n;t.quadraticCurveTo(c,d,u,h)}else t.lineTo(u,h)}},findDataIndex:function(t,e){var i=this.shape,n=i.segs,o=i.curveness;if(i.polyline)for(var a=0,r=0;r0)for(var l=n[r++],u=n[r++],h=1;h0){if(_n(l,u,(l+c)/2-(u-d)*o,(u+d)/2-(c-l)*o,c,d))return a}else if(yn(l,u,c,d))return a;a++}return-1}}),rP=bg.prototype;rP.isPersistent=function(){return!this._incremental},rP.updateData=function(t){this.group.removeAll();var e=new aP({rectHover:!0,cursor:"default"});e.setShape({segs:t.getLayout("linesPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},rP.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>5e5?(this._incremental||(this._incremental=new Zn({silent:!0})),this.group.add(this._incremental)):this._incremental=null},rP.incrementalUpdate=function(t,e){var i=new aP;i.setShape({segs:e.getLayout("linesPoints")}),this._setCommon(i,e,!!this._incremental),this._incremental?this._incremental.addDisplayable(i,!0):(i.rectHover=!0,i.cursor="default",i.__startIndex=t.start,this.group.add(i))},rP.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},rP._setCommon=function(t,e,i){var n=e.hostModel;t.setShape({polyline:n.get("polyline"),curveness:n.get("lineStyle.curveness")}),t.useStyle(n.getModel("lineStyle").getLineStyle()),t.style.strokeNoScale=!0;var o=e.getVisual("color");o&&t.setStyle("stroke",o),t.setStyle("fill"),i||(t.seriesIndex=n.seriesIndex,t.on("mousemove",function(e){t.dataIndex=null;var i=t.findDataIndex(e.offsetX,e.offsetY);i>0&&(t.dataIndex=i+t.__startIndex)}))},rP._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()};var sP={seriesType:"lines",plan:$I(),reset:function(t){var e=t.coordinateSystem,i=t.get("polyline"),n=t.pipelineContext.large;return{progress:function(o,a){var r=[];if(n){var s,l=o.end-o.start;if(i){for(var u=0,h=o.start;h0){var I=a(v)?s:l;v>0&&(v=v*S+b),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*v*256}else _+=4}return c.putImageData(y,0,0),h},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=iw()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext("2d");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),a=[0,0,0,0],r=0,s=0;s<256;s++)e[i](s/255,!0,a),o[r++]=a[0],o[r++]=a[1],o[r++]=a[2],o[r++]=a[3];return o}},Zs({type:"heatmap",render:function(t,e,i){var n;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll(),this._incrementalDisplayable=null;var o=t.coordinateSystem;"cartesian2d"===o.type||"calendar"===o.type?this._renderOnCartesianAndCalendar(t,i,0,t.getData().count()):Ag(o)&&this._renderOnGeo(o,t,n,i)},incrementalPrepareRender:function(t,e,i){this.group.removeAll()},incrementalRender:function(t,e,i,n){e.coordinateSystem&&this._renderOnCartesianAndCalendar(e,n,t.start,t.end,!0)},_renderOnCartesianAndCalendar:function(t,e,i,n,o){var r,s,l=t.coordinateSystem;if("cartesian2d"===l.type){var u=l.getAxis("x"),h=l.getAxis("y");r=u.getBandWidth(),s=h.getBandWidth()}for(var c=this.group,d=t.getData(),f=t.getModel("itemStyle").getItemStyle(["color"]),p=t.getModel("emphasis.itemStyle").getItemStyle(),g=t.getModel("label"),m=t.getModel("emphasis.label"),v=l.type,y="cartesian2d"===v?[d.mapDimension("x"),d.mapDimension("y"),d.mapDimension("value")]:[d.mapDimension("time"),d.mapDimension("value")],x=i;x=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},Fa.register("single",{create:function(t,e){var i=[];return t.eachComponent("singleAxis",function(n,o){var a=new $g(n,t,e);a.name="single_"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if("singleAxis"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"singleAxis",index:e.get("singleAxisIndex"),id:e.get("singleAxisId")})[0];e.coordinateSystem=i&&i.coordinateSystem}}),i},dimensions:$g.prototype.dimensions});var gP=["axisLine","axisTickLabel","axisName"],mP=XD.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(t,e,i,n){var o=this.group;o.removeAll();var a=Jg(t),r=new FD(t,a);d(gP,r.add,r),o.add(r.getGroup()),t.get("splitLine.show")&&this._splitLine(t),mP.superCall(this,"render",t,e,i,n)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var i=t.getModel("splitLine"),n=i.getModel("lineStyle"),o=n.get("width"),a=n.get("color");a=a instanceof Array?a:[a];for(var r=t.coordinateSystem.getRect(),s=e.isHorizontal(),l=[],u=0,h=e.getTicksCoords({tickModel:i}),c=[],d=[],f=0;f=0)&&i({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){gm(e.getZr(),"axisPointer"),IP.superApply(this._model,"remove",arguments)},dispose:function(t,e){gm("axisPointer",e),IP.superApply(this._model,"dispose",arguments)}}),TP=Bi(),AP=i,DP=m;(mm.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,i,n){var o=e.get("value"),a=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=i,n||this._lastValue!==o||this._lastStatus!==a){this._lastValue=o,this._lastStatus=a;var r=this._group,s=this._handle;if(!a||"hide"===a)return r&&r.hide(),void(s&&s.hide());r&&r.show(),s&&s.show();var l={};this.makeElOption(l,o,t,e,i);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(i),this._lastGraphicKey=u;var h=this._moveAnimation=this.determineAnimation(t,e);if(r){var c=v(vm,e,h);this.updatePointerEl(r,l,c,e),this.updateLabelEl(r,l,c,e)}else r=this._group=new tb,this.createPointerEl(r,l,t,e),this.createLabelEl(r,l,t,e),i.getZr().add(r);wm(r,e,!0),this._renderHandle(o)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var i=e.get("animation"),n=t.axis,o="category"===n.type,a=e.get("snap");if(!a&&!o)return!1;if("auto"===i||null==i){var r=this.animationThreshold;if(o&&n.getBandWidth()>r)return!0;if(a){var s=Mh(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1}return!0===i},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=TP(t).pointerEl=new zM[o.type](AP(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=TP(t).labelEl=new yM(AP(e.label));t.add(o),xm(o,n)}},updatePointerEl:function(t,e,i){var n=TP(t).pointerEl;n&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=TP(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),xm(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,i=this._api.getZr(),n=this._handle,o=e.getModel("handle"),a=e.get("status");if(!o.get("show")||!a||"hide"===a)return n&&i.remove(n),void(this._handle=null);var r;this._handle||(r=!0,n=this._handle=Po(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){mw(t.event)},onmousedown:DP(this._onHandleDragMove,this,0,0),drift:DP(this._onHandleDragMove,this),ondragend:DP(this._onHandleDragEnd,this)}),i.add(n)),wm(n,e,!1);var s=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];n.setStyle(o.getItemStyle(null,s));var l=o.get("size");y(l)||(l=[l,l]),n.attr("scale",[l[0]/2,l[1]/2]),Nr(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,r)}},_moveHandleToValue:function(t,e){vm(this._axisPointerModel,!e&&this._moveAnimation,this._handle,_m(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(_m(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(_m(n)),TP(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=mm,ji(mm);var CP=mm.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get("type"),l=km(r,a).getOtherAxis(a).getGlobalExtent(),u=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var h=bm(n),c=LP[s](a,u,l,h);c.style=h,t.graphicKey=c.type,t.pointer=c}Am(e,t,Lh(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=Lh(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:Tm(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=km(a,o).getOtherAxis(o).getGlobalExtent(),l="x"===o.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(r[1],u[l]),u[l]=Math.max(r[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];var d=[{verticalAlign:"middle"},{align:"center"}];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:d[l]}}}),LP={line:function(t,e,i,n){var o=Dm([e,i[0]],[e,i[1]],Pm(t));return Kn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=Math.max(1,t.getBandWidth()),a=i[1]-i[0];return{type:"Rect",shape:Cm([e-o/2,i[0]],[o,a],Pm(t))}}};XD.registerAxisPointerClass("CartesianAxisPointer",CP),Ns(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!y(e)&&(t.axisPointer.link=[e])}}),Os(VT.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=vh(t,e)}),Es({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,o=[t.x,t.y],a=t,r=t.dispatchAction||m(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){lm(o)&&(o=xP({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=lm(o),u=a.axesInfo,h=s.axesInfo,c="leave"===n||lm(o),d={},f={},p={list:[],map:{}},g={showPointer:wP(em,f),showTooltip:wP(im,p)};_P(s.coordSysMap,function(t,e){var i=l||t.containPoint(o);_P(s.coordSysAxesInfo[e],function(t,e){var n=t.axis,a=rm(u,t);if(!c&&i&&(!u||a)){var r=a&&a.value;null!=r||l||(r=n.pointToData(o)),null!=r&&Qg(t,r,g,!1,d)}})});var v={};return _P(h,function(t,e){var i=t.linkGroup;i&&!f[e]&&_P(i.axesInfo,function(e,n){var o=f[n];if(e!==t&&o){var a=o.value;i.mapper&&(a=t.axis.scale.parse(i.mapper(a,sm(e),sm(t)))),v[t.key]=a}})}),_P(v,function(t,e){Qg(h[e],t,g,!0,d)}),nm(f,h,d),om(p,o,t,r),am(h,0,i),d}});var kP=["x","y"],PP=["width","height"],NP=mm.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=Om(r,1-Nm(a)),l=r.dataToPoint(e)[0],u=n.get("type");if(u&&"none"!==u){var h=bm(n),c=OP[u](a,l,s,h);c.style=h,t.graphicKey=c.type,t.pointer=c}Am(e,t,Jg(i),i,n,o)},getHandleTransform:function(t,e,i){var n=Jg(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:Tm(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=Nm(o),s=Om(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var u=Om(a,1-r),h=(u[1]+u[0])/2,c=[h,h];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),OP={line:function(t,e,i,n){var o=Dm([e,i[0]],[e,i[1]],Nm(t));return Kn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:"Rect",shape:Cm([e-o/2,i[0]],[o,a],Nm(t))}}};XD.registerAxisPointerClass("SingleAxisPointer",NP),Ws({type:"single"});var EP=YI.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){EP.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()}},fixData:function(t){var e=t.length,i=[];Zi(t,function(t){return t[2]}).buckets.each(function(t,e){i.push({name:e,dataList:t})});for(var n=i.length,o=-1,a=-1,r=0;ro&&(o=s,a=r)}for(var l=0;lMath.PI/2?"right":"left"):x&&"center"!==x?"left"===x?(f=u.r0+y,p>Math.PI/2&&(x="right")):"right"===x&&(f=u.r-y,p>Math.PI/2&&(x="left")):(f=(u.r+u.r0)/2,x="center"),d.attr("style",{text:l,textAlign:x,textVerticalAlign:n("verticalAlign")||"middle",opacity:n("opacity")});var _=f*g+u.cx,w=f*m+u.cy;d.attr("position",[_,w]);var b=n("rotate"),S=0;"radial"===b?(S=-p)<-Math.PI/2&&(S+=Math.PI):"tangential"===b?(S=Math.PI/2-p)>Math.PI/2?S-=Math.PI:S<-Math.PI/2&&(S+=Math.PI):"number"==typeof b&&(S=b*Math.PI/180),d.attr("rotation",S)},VP._initEvents=function(t,e,i,n){t.off("mouseover").off("mouseout").off("emphasis").off("normal");var o=this,a=function(){o.onEmphasis(n)},r=function(){o.onNormal()};i.isAnimationEnabled()&&t.on("mouseover",a).on("mouseout",r).on("emphasis",a).on("normal",r).on("downplay",function(){o.onDownplay()}).on("highlight",function(){o.onHighlight()})},u(Vm,tb);Ar.extend({type:"sunburst",init:function(){},render:function(t,e,i,n){function o(i,n){if(c||!i||i.getValue()||(i=null),i!==l&&n!==l)if(n&&n.piece)i?(n.piece.updateData(!1,i,"normal",t,e),s.setItemGraphicEl(i.dataIndex,n.piece)):a(n);else if(i){var o=new Vm(i,t,e);h.add(o),s.setItemGraphicEl(i.dataIndex,o)}}function a(t){t&&t.piece&&(h.remove(t.piece),t.piece=null)}var r=this;this.seriesModel=t,this.api=i,this.ecModel=e;var s=t.getData(),l=s.tree.root,u=t.getViewRoot(),h=this.group,c=t.get("renderLabelForZeroData"),d=[];u.eachNode(function(t){d.push(t)});var f=this._oldChildren||[];if(function(t,e){function i(t){return t.getId()}function n(i,n){o(null==i?null:t[i],null==n?null:e[n])}0===t.length&&0===e.length||new Xs(e,t,i,i).add(n).update(n).remove(v(n,null)).execute()}(d,f),function(i,n){if(n.depth>0){r.virtualPiece?r.virtualPiece.updateData(!1,i,"normal",t,e):(r.virtualPiece=new Vm(i,t,e),h.add(r.virtualPiece)),n.piece._onclickEvent&&n.piece.off("click",n.piece._onclickEvent);var o=function(t){r._rootToNode(n.parentNode)};n.piece._onclickEvent=o,r.virtualPiece.on("click",o)}else r.virtualPiece&&(h.remove(r.virtualPiece),r.virtualPiece=null)}(l,u),n&&n.highlight&&n.highlight.piece){var p=t.getShallow("highlightPolicy");n.highlight.piece.onEmphasis(p)}else if(n&&n.unhighlight){var g=this.virtualPiece;!g&&l.children.length&&(g=l.children[0].piece),g&&g.onNormal()}this._initEvents(),this._oldChildren=d},dispose:function(){},_initEvents:function(){var t=this,e=function(e){var i=!1;t.seriesModel.getViewRoot().eachNode(function(n){if(!i&&n.piece&&n.piece.childAt(0)===e.target){var o=n.getModel().get("nodeClick");if("rootToNode"===o)t._rootToNode(n);else if("link"===o){var a=n.getModel(),r=a.get("link");if(r){var s=a.get("target",!0)||"_blank";window.open(r,s)}}i=!0}})};this.group._onclickEvent&&this.group.off("click",this.group._onclickEvent),this.group.on("click",e),this.group._onclickEvent=e},_rootToNode:function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:"sunburstRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var GP="sunburstRootToNode";Es({type:GP,update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){var n=ld(t,[GP],e);if(n){var o=e.getViewRoot();o&&(t.direction=hd(o,n.node)?"rollUp":"drillDown"),e.resetViewRoot(n.node)}})});var FP="sunburstHighlight";Es({type:FP,update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){var n=ld(t,[FP],e);n&&(t.highlight=n.node)})});Es({type:"sunburstUnhighlight",update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){t.unhighlight=!0})});var WP=Math.PI/180;Bs(v(uC,"sunburst")),zs(v(function(t,e,i,n){e.eachSeriesByType(t,function(t){var e=t.get("center"),n=t.get("radius");y(n)||(n=[0,n]),y(e)||(e=[e,e]);var o=i.getWidth(),a=i.getHeight(),r=Math.min(o,a),s=Vo(e[0],o),l=Vo(e[1],a),u=Vo(n[0],r/2),h=Vo(n[1],r/2),c=-t.get("startAngle")*WP,f=t.get("minAngle")*WP,p=t.getData().tree.root,g=t.getViewRoot(),m=g.depth,v=t.get("sort");null!=v&&Zm(g,v);var x=0;d(g.children,function(t){!isNaN(t.getValue())&&x++});var _=g.getValue(),w=Math.PI/(_||x)*2,b=g.depth>0,S=g.height-(b?-1:1),M=(h-u)/(S||1),I=t.get("clockwise"),T=t.get("stillShowZeroSum"),A=I?1:-1,D=function(t,e){if(t){var i=e;if(t!==p){var n=t.getValue(),o=0===_&&T?w:n*w;on[1]&&n.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:n[1],r0:n[0]},api:{coord:m(function(n){var o=e.dataToRadius(n[0]),a=i.dataToAngle(n[1]),r=t.coordToPoint([o,a]);return r.push(o,a*Math.PI/180),r}),size:m(qm,t)}}},calendar:function(t){var e=t.getRect(),i=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:i.start,end:i.end,weeks:i.weeks,dayCount:i.allDay}},api:{coord:function(e,i){return t.dataToPoint(e,i)}}}}};YI.extend({type:"series.custom",dependencies:["grid","polar","geo","singleAxis","calendar"],defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,useTransform:!0},getInitialData:function(t,e){return ml(this.getSource(),this)},getDataParams:function(t,e,i){var n=YI.prototype.getDataParams.apply(this,arguments);return i&&(n.info=i.info),n}}),Ar.extend({type:"custom",_data:null,render:function(t,e,i,n){var o=this._data,a=t.getData(),r=this.group,s=Qm(t,a,e,i);a.diff(o).add(function(e){ev(null,e,s(e,n),t,r,a)}).update(function(e,i){ev(o.getItemGraphicEl(i),e,s(e,n),t,r,a)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&r.remove(e)}).execute(),this._data=a},incrementalPrepareRender:function(t,e,i){this.group.removeAll(),this._data=null},incrementalRender:function(t,e,i,n,o){for(var a=e.getData(),r=Qm(e,a,i,n),s=t.start;s=0;l--)null==o[l]?o.splice(l,1):delete o[l].$action},_flatten:function(t,e,i){d(t,function(t){if(t){i&&(t.parentOption=i),e.push(t);var n=t.children;"group"===t.type&&n&&this._flatten(n,e,t),delete t.children}},this)},useElOptionsToUpdate:function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t}});Ws({type:"graphic",init:function(t,e){this._elMap=R(),this._lastGraphicModel},render:function(t,e,i){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t),this._relocate(t,i)},_updateElements:function(t){var e=t.useElOptionsToUpdate();if(e){var i=this._elMap,n=this.group;d(e,function(e){var o=e.$action,a=e.id,r=i.get(a),s=e.parentId,l=null!=s?i.get(s):n,u=e.style;"text"===e.type&&u&&(e.hv&&e.hv[1]&&(u.textVerticalAlign=u.textBaseline=null),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke));var h=fv(e);o&&"merge"!==o?"replace"===o?(dv(r,i),cv(a,l,h,i)):"remove"===o&&dv(r,i):r?r.attr(h):cv(a,l,h,i);var c=i.get(a);c&&(c.__ecGraphicWidth=e.width,c.__ecGraphicHeight=e.height,yv(c,t))})}},_relocate:function(t,e){for(var i=t.option.elements,n=this.group,o=this._elMap,a=i.length-1;a>=0;a--){var r=i[a],s=o.get(r.id);if(s){var l=s.parent;da(s,r,l===n?{width:e.getWidth(),height:e.getHeight()}:{width:l.__ecGraphicWidth||0,height:l.__ecGraphicHeight||0},null,{hv:r.hv,boundingMode:r.bounding})}}},_clear:function(){var t=this._elMap;t.each(function(e){dv(e,t)}),this._elMap=R()},dispose:function(){this._clear()}});var KP=Fs({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){KP.superCall(this,"mergeOption",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,i=0;i=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});Es("legendToggleSelect","legendselectchanged",v(xv,"toggleSelected")),Es("legendSelect","legendselected",v(xv,"select")),Es("legendUnSelect","legendunselected",v(xv,"unSelect"));var $P=v,JP=d,QP=tb,tN=Ws({type:"legend.plain",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new QP),this._backgroundEl,this._isFirstRender=!0},getContentGroup:function(){return this._contentGroup},render:function(t,e,i){var n=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var o=t.get("align");o&&"auto"!==o||(o="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left"),this.renderInner(o,t,e,i);var a=t.getBoxLayoutParams(),s={width:i.getWidth(),height:i.getHeight()},l=t.get("padding"),u=ca(a,s,l),h=this.layoutInner(t,o,u,n),c=ca(r({width:h.width,height:h.height},a),s,l);this.group.attr("position",[c.x-h.x,c.y-h.y]),this.group.add(this._backgroundEl=wv(h,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl)},renderInner:function(t,e,i,n){var o=this.getContentGroup(),a=R(),r=e.get("selectedMode"),s=[];i.eachRawSeries(function(t){!t.get("legendHoverLink")&&s.push(t.id)}),JP(e.getData(),function(l,u){var h=l.get("name");if(this.newlineDisabled||""!==h&&"\n"!==h){var c=i.getSeriesByName(h)[0];if(!a.get(h))if(c){var d=c.getData(),f=d.getVisual("color");"function"==typeof f&&(f=f(c.getDataParams(0)));var p=d.getVisual("legendSymbol")||"roundRect",g=d.getVisual("symbol");this._createItem(h,u,l,e,p,g,t,f,r).on("click",$P(bv,h,n)).on("mouseover",$P(Sv,c.name,null,n,s)).on("mouseout",$P(Mv,c.name,null,n,s)),a.set(h,!0)}else i.eachRawSeries(function(i){if(!a.get(h)&&i.legendDataProvider){var o=i.legendDataProvider(),c=o.indexOfName(h);if(c<0)return;var d=o.getItemVisual(c,"color");this._createItem(h,u,l,e,"roundRect",null,t,d,r).on("click",$P(bv,h,n)).on("mouseover",$P(Sv,null,h,n,s)).on("mouseout",$P(Mv,null,h,n,s)),a.set(h,!0)}},this)}else o.add(new QP({newline:!0}))},this)},_createItem:function(t,e,i,n,o,r,s,l,u){var h=n.get("itemWidth"),c=n.get("itemHeight"),d=n.get("inactiveColor"),f=n.get("symbolKeepAspect"),p=n.isSelected(t),g=new QP,m=i.getModel("textStyle"),v=i.get("icon"),y=i.getModel("tooltip"),x=y.parentModel;if(o=v||o,g.add(Jl(o,0,0,h,c,p?l:d,null==f||f)),!v&&r&&(r!==o||"none"===r)){var _=.8*c;"none"===r&&(r="circle"),g.add(Jl(r,(h-_)/2,(c-_)/2,_,_,p?l:d,null==f||f))}var w="left"===s?h+5:-5,b=s,S=n.get("formatter"),M=t;"string"==typeof S&&S?M=S.replace("{name}",null!=t?t:""):"function"==typeof S&&(M=S(t)),g.add(new rM({style:mo({},m,{text:M,x:w,y:c/2,textFill:p?m.getTextColor():d,textAlign:b,textVerticalAlign:"middle"})}));var I=new yM({shape:g.getBoundingRect(),invisible:!0,tooltip:y.get("show")?a({content:t,formatter:x.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:n.componentIndex,name:t,$vars:["name"]}},y.option):null});return g.add(I),g.eachChild(function(t){t.silent=!0}),I.silent=!u,this.getContentGroup().add(g),fo(g),g.__legendDataIndex=e,g},layoutInner:function(t,e,i){var n=this.getContentGroup();aI(t.get("orient"),n,t.get("itemGap"),i.width,i.height);var o=n.getBoundingRect();return n.attr("position",[-o.x,-o.y]),this.group.getBoundingRect()},remove:function(){this.getContentGroup().removeAll(),this._isFirstRender=!0}});Os(function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;ii[l],p=[-c.x,-c.y];n||(p[s]=o.position[s]);var g=[0,0],m=[-d.x,-d.y],v=A(t.get("pageButtonGap",!0),t.get("itemGap",!0));f&&("end"===t.get("pageButtonPosition",!0)?m[s]+=i[l]-d[l]:g[s]+=d[l]+v),m[1-s]+=c[u]/2-d[u]/2,o.attr("position",p),a.attr("position",g),r.attr("position",m);var y=this.group.getBoundingRect();if((y={x:0,y:0})[l]=f?i[l]:c[l],y[u]=Math.max(c[u],d[u]),y[h]=Math.min(0,d[h]+m[1-s]),a.__rectSize=i[l],f){var x={x:0,y:0};x[l]=Math.max(i[l]-d[l]-v,0),x[u]=y[u],a.setClipPath(new yM({shape:x})),a.__rectSize=x[l]}else r.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var _=this._getPageInfo(t);return null!=_.pageIndex&&Io(o,{position:_.contentPosition},!!f&&t),this._updatePageInfoView(t,_),y},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(t,e){var i=this._controllerGroup;d(["pagePrev","pageNext"],function(n){var o=null!=e[n+"DataIndex"],a=i.childOfName(n);a&&(a.setStyle("fill",o?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=o?"pointer":"default")});var n=i.childOfName("pageText"),o=t.get("pageFormatter"),a=e.pageIndex,r=null!=a?a+1:0,s=e.pageCount;n&&o&&n.setStyle("text",_(o)?o.replace("{current}",r).replace("{total}",s):o({current:r,total:s}))},_getPageInfo:function(t){function e(t){if(t){var e=t.getBoundingRect(),i=e[l]+t.position[r];return{s:i,e:i+e[s],i:t.__legendDataIndex}}}function i(t,e){return t.e>=e&&t.s<=e+a}var n=t.get("scrollDataIndex",!0),o=this.getContentGroup(),a=this._containerGroup.__rectSize,r=t.getOrient().index,s=nN[r],l=oN[r],u=this._findTargetItemIndex(n),h=o.children(),c=h[u],d=h.length,f=d?1:0,p={contentPosition:o.position.slice(),pageCount:f,pageIndex:f-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!c)return p;var g=e(c);p.contentPosition[r]=-g.s;for(var m=u+1,v=g,y=g,x=null;m<=d;++m)(!(x=e(h[m]))&&y.e>v.s+a||x&&!i(x,v.s))&&(v=y.i>v.i?y:x)&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=v.i),++p.pageCount),y=x;for(var m=u-1,v=g,y=g,x=null;m>=-1;--m)(x=e(h[m]))&&i(y,x.s)||!(v.i=0;){var r=o.indexOf("|}"),s=o.substr(a+"{marker".length,r-a-"{marker".length);s.indexOf("sub")>-1?n["marker"+s]={textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:e[s],textOffset:[3,0]}:n["marker"+s]={textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:e[s]},a=(o=o.substr(r+1)).indexOf("{marker")}this.el=new rM({style:{rich:n,text:t,textLineHeight:20,textBackgroundColor:i.get("backgroundColor"),textBorderRadius:i.get("borderRadius"),textFill:i.get("textStyle.color"),textPadding:i.get("padding")},z:i.get("z")}),this._zr.add(this.el);var l=this;this.el.on("mouseover",function(){l._enterable&&(clearTimeout(l._hideTimeout),l._show=!0),l._inContent=!0}),this.el.on("mouseout",function(){l._enterable&&l._show&&l.hideLater(l._hideDelay),l._inContent=!1})},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el.getBoundingRect();return[t.width,t.height]},moveTo:function(t,e){this.el&&this.el.attr("position",[t,e])},hide:function(){this.el?this.el.hide():true,this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(m(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){return this.getSize()}};var uN=m,hN=d,cN=Vo,dN=new yM({shape:{x:-1,y:-1,width:2,height:2}});Ws({type:"tooltip",init:function(t,e){if(!U_.node){var i=t.getComponent("tooltip").get("renderMode");this._renderMode=Hi(i);var n;"html"===this._renderMode?(n=new Cv(e.getDom(),e),this._newLine="
"):(n=new Lv(e),this._newLine="\n"),this._tooltipContent=n}},render:function(t,e,i){if(!U_.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var n=this._tooltipContent;n.update(),n.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel.get("triggerOn");um("itemTooltip",this._api,uN(function(e,i,n){"none"!==t&&(t.indexOf(e)>=0?this._tryShow(i,n):"leave"===e&&this._hide(n))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,i=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var n=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){n.manuallyShowTip(t,e,i,{x:n._lastX,y:n._lastY})})}},manuallyShowTip:function(t,e,i,n){if(n.from!==this.uid&&!U_.node){var o=Pv(n,i);this._ticket="";var a=n.dataByCoordSys;if(n.tooltip&&null!=n.x&&null!=n.y){var r=dN;r.position=[n.x,n.y],r.update(),r.tooltip=n.tooltip,this._tryShow({offsetX:n.x,offsetY:n.y,target:r},o)}else if(a)this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,event:{},dataByCoordSys:n.dataByCoordSys,tooltipOption:n.tooltipOption},o);else if(null!=n.seriesIndex){if(this._manuallyAxisShowTip(t,e,i,n))return;var s=xP(n,e),l=s.point[0],u=s.point[1];null!=l&&null!=u&&this._tryShow({offsetX:l,offsetY:u,position:n.position,target:s.el,event:{}},o)}else null!=n.x&&null!=n.y&&(i.dispatchAction({type:"updateAxisPointer",x:n.x,y:n.y}),this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,target:i.getZr().findHover(n.x,n.y).target,event:{}},o))}},manuallyHideTip:function(t,e,i,n){var o=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,n.from!==this.uid&&this._hide(Pv(n,i))},_manuallyAxisShowTip:function(t,e,i,n){var o=n.seriesIndex,a=n.dataIndex,r=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=o&&null!=a&&null!=r){var s=e.getSeriesByIndex(o);if(s&&"axis"===(t=kv([s.getData().getItemModel(a),s,(s.coordinateSystem||{}).model,t])).get("trigger"))return i.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:a,position:n.position}),!0}},_tryShow:function(t,e){var i=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var n=t.dataByCoordSys;n&&n.length?this._showAxisTooltip(n,t):i&&null!=i.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,i,e)):i&&i.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,i,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var i=t.get("showDelay");e=m(e,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(e,i):e()},_showAxisTooltip:function(t,e){var i=this._ecModel,o=this._tooltipModel,a=[e.offsetX,e.offsetY],r=[],s=[],l=kv([e.tooltipOption,o]),u=this._renderMode,h=this._newLine,c={};hN(t,function(t){hN(t.dataByAxis,function(t){var e=i.getComponent(t.axisDim+"Axis",t.axisIndex),o=t.value,a=[];if(e&&null!=o){var l=Im(o,e.axis,i,t.seriesDataIndices,t.valueLabelOpt);d(t.seriesDataIndices,function(r){var h=i.getSeriesByIndex(r.seriesIndex),d=r.dataIndexInside,f=h&&h.getDataParams(d);if(f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=Xl(e.axis,o),f.axisValueLabel=l,f){s.push(f);var p,g=h.formatTooltip(d,!0,null,u);if(w(g)){p=g.html;var m=g.markers;n(c,m)}else p=g;a.push(p)}});var f=l;"html"!==u?r.push(a.join(h)):r.push((f?ia(f)+h:"")+a.join(h))}})},this),r.reverse(),r=r.join(this._newLine+this._newLine);var f=e.position;this._showOrMove(l,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(l,f,a[0],a[1],this._tooltipContent,s):this._showTooltipContent(l,r,s,Math.random(),a[0],a[1],f,void 0,c)})},_showSeriesItemTooltip:function(t,e,i){var n=this._ecModel,o=e.seriesIndex,a=n.getSeriesByIndex(o),r=e.dataModel||a,s=e.dataIndex,l=e.dataType,u=r.getData(),h=kv([u.getItemModel(s),r,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=h.get("trigger");if(null==c||"item"===c){var d,f,p=r.getDataParams(s,l),g=r.formatTooltip(s,!1,l,this._renderMode);w(g)?(d=g.html,f=g.markers):(d=g,f=null);var m="item_"+r.name+"_"+s;this._showOrMove(h,function(){this._showTooltipContent(h,d,p,m,t.offsetX,t.offsetY,t.position,t.target,f)}),i({type:"showTip",dataIndexInside:s,dataIndex:u.getRawIndex(s),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(t,e,i){var n=e.tooltip;if("string"==typeof n){var o=n;n={content:o,formatter:o}}var a=new No(n,this._tooltipModel,this._ecModel),r=a.get("content"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,r,a.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)}),i({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,i,n,o,a,r,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent,h=t.get("formatter");r=r||t.get("position");var c=e;if(h&&"string"==typeof h)c=na(h,i,!0);else if("function"==typeof h){var d=uN(function(e,n){e===this._ticket&&(u.setContent(n,l,t),this._updatePosition(t,r,o,a,u,i,s))},this);this._ticket=n,c=h(i,n,d)}u.setContent(c,l,t),u.show(t),this._updatePosition(t,r,o,a,u,i,s)}},_updatePosition:function(t,e,i,n,o,a,r){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=o.getSize(),h=t.get("align"),c=t.get("verticalAlign"),d=r&&r.getBoundingRect().clone();if(r&&d.applyTransform(r.transform),"function"==typeof e&&(e=e([i,n],a,o.el,d,{viewSize:[s,l],contentSize:u.slice()})),y(e))i=cN(e[0],s),n=cN(e[1],l);else if(w(e)){e.width=u[0],e.height=u[1];var f=ca(e,{width:s,height:l});i=f.x,n=f.y,h=null,c=null}else"string"==typeof e&&r?(i=(p=Ev(e,d,u))[0],n=p[1]):(i=(p=Nv(i,n,o,s,l,h?null:20,c?null:20))[0],n=p[1]);if(h&&(i-=Rv(h)?u[0]/2:"right"===h?u[0]:0),c&&(n-=Rv(c)?u[1]/2:"bottom"===c?u[1]:0),t.get("confine")){var p=Ov(i,n,o,s,l);i=p[0],n=p[1]}o.moveTo(i,n)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,i=!!e&&e.length===t.length;return i&&hN(e,function(e,n){var o=e.dataByAxis||{},a=(t[n]||{}).dataByAxis||[];(i&=o.length===a.length)&&hN(o,function(t,e){var n=a[e]||{},o=t.seriesDataIndices||[],r=n.seriesDataIndices||[];(i&=t.value===n.value&&t.axisType===n.axisType&&t.axisId===n.axisId&&o.length===r.length)&&hN(o,function(t,e){var n=r[e];i&=t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})})}),this._lastDataByCoordSys=t,!!i},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){U_.node||(this._tooltipContent.hide(),gm("itemTooltip",e))}}),Es({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},function(){}),Es({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},function(){}),Gv.prototype={constructor:Gv,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToRadius:aD.prototype.dataToCoord,radiusToData:aD.prototype.coordToData},u(Gv,aD);var fN=Bi();Fv.prototype={constructor:Fv,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToAngle:aD.prototype.dataToCoord,angleToData:aD.prototype.coordToData,calculateCategoryInterval:function(){var t=this,e=t.getLabelModel(),i=t.scale,n=i.getExtent(),o=i.count();if(n[1]-n[0]<1)return 0;var a=n[0],r=t.dataToCoord(a+1)-t.dataToCoord(a),s=Math.abs(r),l=ke(a,e.getFont(),"center","top"),u=Math.max(l.height,7)/s;isNaN(u)&&(u=1/0);var h=Math.max(0,Math.floor(u)),c=fN(t.model),d=c.lastAutoInterval,f=c.lastTickCount;return null!=d&&null!=f&&Math.abs(d-h)<=1&&Math.abs(f-o)<=1&&d>h?h=d:(c.lastTickCount=o,c.lastAutoInterval=h),h}},u(Fv,aD);var pN=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new Gv,this._angleAxis=new Fv,this._radiusAxis.polar=this._angleAxis.polar=this};pN.prototype={type:"polar",axisPointerEnabled:!0,constructor:pN,dimensions:["radius","angle"],model:null,containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxes:function(){return[this._radiusAxis,this._angleAxis]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},getTooltipAxes:function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),a=Math.min(o[0],o[1]),r=Math.max(o[0],o[1]);n.inverse?a=r-360:r=a+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,u=lr;)l+=360*u;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI;return[Math.cos(i)*e+this.cx,-Math.sin(i)*e+this.cy]}};var gN=lI.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});n(gN.prototype,UA);var mN={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};ED("angle",gN,Wv,mN.angle),ED("radius",gN,Wv,mN.radius),Fs({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}});var vN={dimensions:pN.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent("polar",function(t,n){var o=new pN(n);o.update=Zv;var a=o.getRadiusAxis(),r=o.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");Uv(a,s),Uv(r,l),Hv(o,t,e),i.push(o),t.coordinateSystem=o,o.model=t}),t.eachSeries(function(e){if("polar"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};Fa.register("polar",vN);var yN=["axisLine","axisLabel","axisTick","splitLine","splitArea"];XD.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,o=n.polar,a=o.getRadiusAxis().getExtent(),r=n.getTicksCoords(),s=f(n.getViewLabels(),function(t){return(t=i(t)).coord=n.dataToCoord(t.tickValue),t});Yv(s),Yv(r),d(yN,function(e){!t.get(e+".show")||n.scale.isBlank()&&"axisLine"!==e||this["_"+e](t,o,r,a,s)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel("axisLine.lineStyle"),a=new sM({shape:{cx:e.cx,cy:e.cy,r:n[jv(e)]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n){var o=t.getModel("axisTick"),a=(o.get("inside")?-1:1)*o.get("length"),s=n[jv(e)],l=f(i,function(t){return new _M({shape:Xv(e,[s,s+a],t.coord)})});this.group.add(OM(l,{style:r(o.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(t,e,i,n,o){var a=t.getCategories(!0),r=t.getModel("axisLabel"),s=r.get("margin");d(o,function(i,o){var l=r,u=i.tickValue,h=n[jv(e)],c=e.coordToPoint([h+s,i.coord]),d=e.cx,f=e.cy,p=Math.abs(c[0]-d)/h<.3?"center":c[0]>d?"left":"right",g=Math.abs(c[1]-f)/h<.3?"middle":c[1]>f?"top":"bottom";a&&a[u]&&a[u].textStyle&&(l=new No(a[u].textStyle,r,r.ecModel));var m=new rM({silent:!0});this.group.add(m),mo(m.style,l,{x:c[0],y:c[1],textFill:l.getTextColor()||t.get("axisLine.lineStyle.color"),text:i.formattedLabel,textAlign:p,textVerticalAlign:g})},this)},_splitLine:function(t,e,i,n){var o=t.getModel("splitLine").getModel("lineStyle"),a=o.get("color"),s=0;a=a instanceof Array?a:[a];for(var l=[],u=0;u=0?"p":"n",M=y;v&&(n[r][b]||(n[r][b]={p:y,n:y}),M=n[r][b][S]);var I,T,A,D;if("radius"===h.dim){var C=h.dataToRadius(w)-y,L=a.dataToAngle(b);Math.abs(C)=0},kN.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=dy(e,t),o=0;o=0||AN(n,t.getAxis("y").model)>=0)&&a.push(t)}),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:a[0],coordSyses:a,getPanelRect:ON.grid,xAxisDeclared:r[t.id],yAxisDeclared:s[t.id]})}))},geo:function(t,e){TN(t.geoModels,function(t){var i=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:i,coordSyses:[i],getPanelRect:ON.geo})})}},NN=[function(t,e){var i=t.xAxisModel,n=t.yAxisModel,o=t.gridModel;return!o&&i&&(o=i.axis.grid.model),!o&&n&&(o=n.axis.grid.model),o&&o===e.gridModel},function(t,e){var i=t.geoModel;return i&&i===e.geoModel}],ON={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Ao(t)),e}},EN={lineX:DN(fy,0),lineY:DN(fy,1),rect:function(t,e,i){var n=e[CN[t]]([i[0][0],i[1][0]]),o=e[CN[t]]([i[0][1],i[1][1]]),a=[cy([n[0],o[0]]),cy([n[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,i){var n=[[1/0,-1/0],[1/0,-1/0]];return{values:f(i,function(i){var o=e[CN[t]](i);return n[0][0]=Math.min(n[0][0],o[0]),n[1][0]=Math.min(n[1][0],o[1]),n[0][1]=Math.max(n[0][1],o[0]),n[1][1]=Math.max(n[1][1],o[1]),o}),xyMinMax:n}}},RN={lineX:DN(py,0),lineY:DN(py,1),rect:function(t,e,i){return[[t[0][0]-i[0]*e[0][0],t[0][1]-i[0]*e[0][1]],[t[1][0]-i[1]*e[1][0],t[1][1]-i[1]*e[1][1]]]},polygon:function(t,e,i){return f(t,function(t,n){return[t[0]-i[0]*e[n][0],t[1]-i[1]*e[n][1]]})}},zN=["inBrush","outOfBrush"],BN="__ecBrushSelect",VN="__ecInBrushSelectEvent",GN=VT.VISUAL.BRUSH;zs(GN,function(t,e,i){t.eachComponent({mainType:"brush"},function(e){i&&"takeGlobalCursor"===i.type&&e.setBrushOption("brush"===i.key?i.brushOption:{brushType:!1}),(e.brushTargetManager=new hy(e.option,t)).setInputRanges(e.areas,t)})}),Bs(GN,function(t,e,n){var o,a,s=[];t.eachComponent({mainType:"brush"},function(e,n){function l(t){return"all"===m||v[t]}function u(t){return!!t.length}function h(t,e){var i=t.coordinateSystem;w|=i.hasAxisBrushed(),l(e)&&i.eachActiveState(t.getData(),function(t,e){"active"===t&&(x[e]=1)})}function c(i,n,o){var a=_y(i);if(a&&!wy(e,n)&&(d(b,function(n){a[n.brushType]&&e.brushTargetManager.controlSeries(n,i,t)&&o.push(n),w|=u(o)}),l(n)&&u(o))){var r=i.getData();r.each(function(t){xy(a,o,r,t)&&(x[t]=1)})}}var p={brushId:e.id,brushIndex:n,brushName:e.name,areas:i(e.areas),selected:[]};s.push(p);var g=e.option,m=g.brushLink,v=[],x=[],_=[],w=0;n||(o=g.throttleType,a=g.throttleDelay);var b=f(e.areas,function(t){return by(r({boundingRect:FN[t.brushType](t)},t))}),S=ty(e.option,zN,function(t){t.mappingMethod="fixed"});y(m)&&d(m,function(t){v[t]=1}),t.eachSeries(function(t,e){var i=_[e]=[];"parallel"===t.subType?h(t,e):c(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};p.selected.push(i);var n=_y(t),o=_[e],a=t.getData(),r=l(e)?function(t){return x[t]?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"}:function(t){return xy(n,o,a,t)?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"};(l(e)?w:u(o))&&iy(zN,S,a,r)})}),vy(e,o,a,s,n)});var FN={lineX:B,lineY:B,rect:function(t){return Sy(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;ne[0][1]&&(e[0][1]=a[0]),a[1]e[1][1]&&(e[1][1]=a[1])}return e&&Sy(e)}},WN=["#ddd"];Fs({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&ey(i,t,["inBrush","outOfBrush"]);var n=i.inBrush=i.inBrush||{};i.outOfBrush=i.outOfBrush||{color:WN},n.hasOwnProperty("liftZ")||(n.liftZ=5)},setAreas:function(t){t&&(this.areas=f(t,function(t){return My(this.option,t)},this))},setBrushOption:function(t){this.brushOption=My(this.option,t),this.brushType=this.brushOption.brushType}});Ws({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new zf(e.getZr())).on("brush",m(this._onBrush,this)).mount()},render:function(t){return this.model=t,Iy.apply(this,arguments)},updateTransform:Iy,updateView:Iy,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:n,areas:i(t),$from:n})}}),Es({type:"brush",event:"brush"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(e){e.setAreas(t.areas)})}),Es({type:"brushSelect",event:"brushSelected",update:"none"},function(){});var HN={},ZN=rT.toolbox.brush;Dy.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:i(ZN.title)};var UN=Dy.prototype;UN.render=UN.updateView=function(t,e,i){var n,o,a;e.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,d(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===n)?"emphasis":"normal")})},UN.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return d(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},UN.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},Ty("brush",Dy),Ns(function(t,e){var i=t&&t.brush;if(y(i)||(i=i?[i]:[]),i.length){var n=[];d(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;y(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),Jv(s),e&&!s.length&&s.push.apply(s,SN)}});Cy.prototype={constructor:Cy,type:"calendar",dimensions:["time","value"],getDimensionsInfo:function(){return[{name:"time",type:"time"},"value"]},getRangeInfo:function(){return this._rangeInfo},getModel:function(){return this._model},getRect:function(){return this._rect},getCellWidth:function(){return this._sw},getCellHeight:function(){return this._sh},getOrient:function(){return this._orient},getFirstDayOfWeek:function(){return this._firstDayOfWeek},getDateInfo:function(t){var e=(t=Yo(t)).getFullYear(),i=t.getMonth()+1;i=i<10?"0"+i:i;var n=t.getDate();n=n<10?"0"+n:n;var o=t.getDay();return o=Math.abs((o+7-this.getFirstDayOfWeek())%7),{y:e,m:i,d:n,day:o,time:t.getTime(),formatedDate:e+"-"+i+"-"+n,date:t}},getNextNDay:function(t,e){return 0===(e=e||0)?this.getDateInfo(t):((t=new Date(this.getDateInfo(t).time)).setDate(t.getDate()+e),this.getDateInfo(t))},update:function(t,e){function i(t,e){return null!=t[e]&&"auto"!==t[e]}this._firstDayOfWeek=+this._model.getModel("dayLabel").get("firstDay"),this._orient=this._model.get("orient"),this._lineWidth=this._model.getModel("itemStyle").getItemStyle().lineWidth||0,this._rangeInfo=this._getRangeInfo(this._initRangeOption());var n=this._rangeInfo.weeks||1,o=["width","height"],a=this._model.get("cellSize").slice(),r=this._model.getBoxLayoutParams(),s="horizontal"===this._orient?[n,7]:[7,n];d([0,1],function(t){i(a,t)&&(r[o[t]]=a[t]*s[t])});var l={width:e.getWidth(),height:e.getHeight()},u=this._rect=ca(r,l);d([0,1],function(t){i(a,t)||(a[t]=u[o[t]]/s[t])}),this._sw=a[0],this._sh=a[1]},dataToPoint:function(t,e){y(t)&&(t=t[0]),null==e&&(e=!0);var i=this.getDateInfo(t),n=this._rangeInfo,o=i.formatedDate;if(e&&!(i.time>=n.start.time&&i.timea.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();if(n.setDate(o+i-1),n.getDate()!==a)for(var r=n.getTime()-t[1].time>0?1:-1;n.getDate()!==a&&(n.getTime()-t[1].time)*r>0;)i-=r,n.setDate(o+i-1);var s=Math.floor((i+t[0].day+6)/7),l=e?1-s:s-1;return e&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:i,weeks:s,nthWeek:l,fweek:t[0].day,lweek:t[1].day}},_getDateByWeeksAndDay:function(t,e,i){var n=this._getRangeInfo(i);if(t>n.weeks||0===t&&en.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},Cy.dimensions=Cy.prototype.dimensions,Cy.getDimensionsInfo=Cy.prototype.getDimensionsInfo,Cy.create=function(t,e){var i=[];return t.eachComponent("calendar",function(n){var o=new Cy(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("calendarIndex")||0])}),i},Fa.register("calendar",Cy);var XN=lI.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var o=ga(t);XN.superApply(this,"init",arguments),ky(t,o)},mergeOption:function(t,e){XN.superApply(this,"mergeOption",arguments),ky(this.option,t)}}),jN={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},YN={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};Ws({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel("itemStyle").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,u=new yM({shape:{x:l[0],y:l[1],width:a,height:r},cursor:"default",style:o});i.add(u)}},_renderLines:function(t,e,i,n){function o(e){a._firstDayOfMonth.push(r.getDateInfo(e)),a._firstDayPoints.push(r.dataToRect([e],!1).tl);var o=a._getLinePointsOfOneWeek(t,e,i);a._tlpoints.push(o[0]),a._blpoints.push(o[o.length-1]),l&&a._drawSplitline(o,s,n)}var a=this,r=t.coordinateSystem,s=t.getModel("splitLine.lineStyle").getLineStyle(),l=t.get("splitLine.show"),u=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var h=e.start,c=0;h.time<=e.end.time;c++){o(h.formatedDate),0===c&&(h=r.getDateInfo(e.start.y+"-"+e.start.m));var d=h.date;d.setMonth(d.getMonth()+1),h=r.getDateInfo(d)}o(r.getNextNDay(e.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,u,i),s,n),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,u,i),s,n)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o="horizontal"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new gM({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return o},_formatterLabel:function(t,e){return"string"==typeof t&&t?oa(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=["center","bottom"];"bottom"===n?(e[1]+=o,a=["center","top"]):"left"===n?e[0]-=o:"right"===n?(e[0]+=o,a=["center","top"]):e[1]-=o;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel("yearLabel");if(o.get("show")){var a=o.get("margin"),r=o.get("position");r||(r="horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===i?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=o.get("formatter"),p={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(f,p),m=new rM({z2:30});mo(m.style,o,{text:g}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=o,e&&(a="center"),"start"===n&&(r="bottom")):(s+=o,e&&(r="middle"),"start"===n&&(a="right")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var o=n.get("nameMap"),r=n.get("margin"),s=n.get("position"),l=n.get("align"),u=[this._tlpoints,this._blpoints];_(o)&&(o=jN[o.toUpperCase()]||[]);var h="start"===s?0:1,c="horizontal"===e?0:1;r="start"===s?-r:r;for(var d="center"===l,f=0;f=r[0]&&t<=r[1]}if(t===this._dataZoomModel){var n=this._dimName,o=this.getTargetSeriesModels(),a=t.get("filterMode"),r=this._valueWindow;"none"!==a&&$N(o,function(t){var e=t.getData(),o=e.mapDimension(n,!0);o.length&&("weakFilter"===a?e.filterSelf(function(t){for(var i,n,a,s=0;sr[1];if(u&&!h&&!c)return!0;u&&(a=!0),h&&(i=!0),c&&(n=!0)}return a&&i&&n}):$N(o,function(n){if("empty"===a)t.setData(e.map(n,function(t){return i(t)?t:NaN}));else{var o={};o[n]=r,e.selectRange(o)}}),$N(o,function(t){e.setApproximateExtent(r,t)}))})}}};var tO=d,eO=KN,iO=Fs({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=By(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=By(t);n(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;U_.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),Vy(this,t),tO([["start","startValue"],["end","endValue"]],function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var a=this.dependentModels[e.axis][i],r=a.__dzAxisProxy||(a.__dzAxisProxy=new QN(e.name,i,this,o));t[e.name+"_"+i]=r},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();eO(function(e){var i=e.axisIndex;t[i]=Di(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;eO(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option,n=this.dependentModels;if(t){var o="vertical"===e?"y":"x";n[o+"Axis"].length?(i[o+"AxisIndex"]=[0],t=!1):tO(n.singleAxis,function(n){t&&n.get("orient",!0)===e&&(i.singleAxisIndex=[n.componentIndex],t=!1)})}t&&eO(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var a=0,r=o.length;a0?100:20}},getFirstTargetAxisModel:function(){var t;return eO(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;eO(function(n){tO(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},getAxisModel:function(t,e){var i=this.getAxisProxy(t,e);return i&&i.getAxisModel()},setRawRange:function(t,e){var i=this.option;tO([["start","startValue"],["end","endValue"]],function(e){null==t[e[0]]&&null==t[e[1]]||(i[e[0]]=t[e[0]],i[e[1]]=t[e[1]])},this),!e&&Vy(this,t)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var i in e)if(e.hasOwnProperty(i)&&e[i].hostedBy(this))return e[i];for(var i in e)if(e.hasOwnProperty(i)&&!e[i].hostedBy(this))return e[i]},getRangePropMode:function(){return this._rangePropMode.slice()}}),nO=qI.extend({type:"dataZoom",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetCoordInfo:function(){function t(t,e,i,n){for(var o,a=0;a0&&e%g)p+=f;else{var i=null==t||isNaN(t)||""===t,n=i?0:aO(t,a,u,!0);i&&!l&&e?(c.push([c[c.length-1][0],0]),d.push([d[d.length-1][0],0])):!i&&l&&(c.push([p,0]),d.push([p,0])),c.push([p,n]),d.push([p,n]),p+=f,l=i}});var m=this.dataZoomModel;this._displayables.barGroup.add(new pM({shape:{points:c},style:r({fill:m.get("dataBackgroundColor")},m.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new gM({shape:{points:d},style:m.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var i,n=this.ecModel;return t.eachTargetAxis(function(o,a){d(t.getAxisProxy(o.name,a).getTargetSeriesModels(),function(t){if(!(i||!0!==e&&l(cO,t.get("type"))<0)){var r,s=n.getComponent(o.axis,a).axis,u=Gy(o.name),h=t.coordinateSystem;null!=u&&h.getOtherAxis&&(r=h.getOtherAxis(s).inverse),u=t.getData().mapDimension(u),i={thisAxis:s,series:t,thisDim:o.name,otherDim:u,otherAxisInverse:r}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new oO({draggable:!0,cursor:Fy(this._orient),drift:sO(this._onDragMove,this,"all"),onmousemove:function(t){mw(t.event)},ondragstart:sO(this._showDataInfo,this,!0),ondragend:sO(this._onDragEnd,this),onmouseover:sO(this._showDataInfo,this,!0),onmouseout:sO(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new oO($n({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}}))),lO([0,1],function(t){var o=Po(a.get("handleIcon"),{cursor:Fy(this._orient),draggable:!0,drift:sO(this._onDragMove,this,t),onmousemove:function(t){mw(t.event)},ondragend:sO(this._onDragEnd,this),onmouseover:sO(this._showDataInfo,this,!0),onmouseout:sO(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),r=o.getBoundingRect();this._handleHeight=Vo(a.get("handleSize"),this._size[1]),this._handleWidth=r.width/r.height*this._handleHeight,o.setStyle(a.getModel("handleStyle").getItemStyle());var s=a.get("handleColor");null!=s&&(o.style.fill=s),n.add(e[t]=o);var l=a.textStyleModel;this.group.add(i[t]=new rM({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:l.getTextColor(),textFont:l.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[aO(t[0],[0,100],e,!0),aO(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this.dataZoomModel,n=this._handleEnds,o=this._getViewExtent(),a=i.findRepresentativeAxisProxy().getMinMaxSpan(),r=[0,100];QL(e,n,o,i.get("zoomLock")?"all":t,null!=a.minSpan?aO(a.minSpan,r,o,!0):null,null!=a.maxSpan?aO(a.maxSpan,r,o,!0):null);var s=this._range,l=this._range=rO([aO(n[0],o,r,!0),aO(n[1],o,r,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},_updateView:function(t){var e=this._displayables,i=this._handleEnds,n=rO(i.slice()),o=this._size;lO([0,1],function(t){var n=e.handles[t],a=this._handleHeight;n.attr({scale:[a/2,a/2],position:[i[t],o[1]/2-a/2]})},this),e.filler.setShape({x:n[0],y:0,width:n[1]-n[0],height:o[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){function e(t){var e=Ao(n.handles[t].parent,this.group),i=Co(0===t?"right":"left",e),s=this._handleWidth/2+hO,l=Do([c[t]+(0===t?-s:s),this._size[1]/2],e);o[t].setStyle({x:l[0],y:l[1],textVerticalAlign:a===uO?"middle":i,textAlign:a===uO?i:"center",text:r[t]})}var i=this.dataZoomModel,n=this._displayables,o=n.handleLabels,a=this._orient,r=["",""];if(i.get("showDetail")){var s=i.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,u=this._range,h=t?s.calculateDataWindow({start:u[0],end:u[1]}).valueWindow:s.getDataValueWindow();r=[this._formatLabel(h[0],l),this._formatLabel(h[1],l)]}}var c=rO(this._handleEnds.slice());e.call(this,0),e.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),o=i.get("labelPrecision");null!=o&&"auto"!==o||(o=e.getPixelPrecision());var a=null==t||isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(o,20));return x(n)?n(t,a):_(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=Do([e,i],this._displayables.barGroup.getLocalTransform(),!0),o=this._updateInterval(t,n[0]),a=this.dataZoomModel.get("realtime");this._updateView(!a),o&&a&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),!this.dataZoomModel.get("realtime")&&this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,i=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(i[0]<0||i[0]>e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2,a=this._updateInterval("all",i[0]-o);this._updateView(),a&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var t;if(lO(this.getTargetCoordInfo(),function(e){if(!t&&e.length){var i=e[0].model.coordinateSystem;t=i.getRect&&i.getRect()}}),!t){var e=this.api.getWidth(),i=this.api.getHeight();t={x:.2*e,y:.2*i,width:.6*e,height:.6*i}}return t}});iO.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var fO="\0_ec_dataZoom_roams",pO=m,gO=nO.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,i,n){gO.superApply(this,"render",arguments),this._range=t.getPercentRange(),d(this.getTargetCoordInfo(),function(e,n){var o=f(e,function(t){return Zy(t.model)});d(e,function(e){var a=e.model,r={};d(["pan","zoom","scrollMove"],function(t){r[t]=pO(mO[t],this,e,n)},this),Wy(i,{coordId:Zy(a),allCoordIds:o,containsPoint:function(t,e,i){return a.coordinateSystem.containPoint([e,i])},dataZoomId:t.id,dataZoomModel:t,getRange:r})},this)},this)},dispose:function(){Hy(this.api,this.dataZoomModel.id),gO.superApply(this,"dispose",arguments),this._range=null}}),mO={zoom:function(t,e,i,n){var o=this._range,a=o.slice(),r=t.axisModels[0];if(r){var s=vO[e](null,[n.originX,n.originY],r,i,t),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(a[1]-a[0])+a[0],u=Math.max(1/n.scale,0);a[0]=(a[0]-l)*u+l,a[1]=(a[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return QL(0,a,[0,100],0,h.minSpan,h.maxSpan),this._range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}},pan:Ky(function(t,e,i,n,o,a){var r=vO[n]([a.oldX,a.oldY],[a.newX,a.newY],e,o,i);return r.signal*(t[1]-t[0])*r.pixel/r.pixelLength}),scrollMove:Ky(function(t,e,i,n,o,a){return vO[n]([0,0],[a.scrollDelta,a.scrollDelta],e,o,i).signal*(t[1]-t[0])*a.scrollDelta})},vO={grid:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],"x"===a.dim?(r.pixel=e[0]-t[0],r.pixelLength=s.width,r.pixelStart=s.x,r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=s.height,r.pixelStart=s.y,r.signal=a.inverse?-1:1),r},polar:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(r.pixel=e[0]-t[0],r.pixelLength=l[1]-l[0],r.pixelStart=l[0],r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=u[1]-u[0],r.pixelStart=u[0],r.signal=a.inverse?-1:1),r},singleAxis:function(t,e,i,n,o){var a=i.axis,r=o.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===a.orient?(s.pixel=e[0]-t[0],s.pixelLength=r.width,s.pixelStart=r.x,s.signal=a.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=r.height,s.pixelStart=r.y,s.signal=a.inverse?-1:1),s}};Os({getTargetSeries:function(t){var e=R();return t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){d(n.getAxisProxy(t.name,i).getTargetSeriesModels(),function(t){e.set(t.uid,t)})})}),e},modifyOutputEnd:!0,overallReset:function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).reset(n,e)}),t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).filterData(n,e)})}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]},!0)})}}),Es("dataZoom",function(t,e){var i=Ny(m(e.eachComponent,e,"dataZoom"),KN,function(t,e){return t.get(e.axisIndex)}),n=[];e.eachComponent({mainType:"dataZoom",query:t},function(t,e){n.push.apply(n,i(t).nodes)}),d(n,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})});var yO=d,xO=function(t){var e=t&&t.visualMap;y(e)||(e=e?[e]:[]),yO(e,function(t){if(t){$y(t,"splitList")&&!$y(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&y(e)&&yO(e,function(t){w(t)&&($y(t,"start")&&!$y(t,"min")&&(t.min=t.start),$y(t,"end")&&!$y(t,"max")&&(t.max=t.end))})}})};lI.registerSubTypeDefaulter("visualMap",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"});var _O=VT.VISUAL.COMPONENT;Bs(_O,{createOnAllSeries:!0,reset:function(t,e){var i=[];return e.eachComponent("visualMap",function(e){var n=t.pipelineContext;!e.isTargetSeries(t)||n&&n.large||i.push(ny(e.stateList,e.targetVisuals,m(e.getValueState,e),e.getDataDimension(t.getData())))}),i}}),Bs(_O,{createOnAllSeries:!0,reset:function(t,e){var i=t.getData(),n=[];e.eachComponent("visualMap",function(e){if(e.isTargetSeries(t)){var o=e.getVisualMeta(m(Jy,null,t,e))||{stops:[],outerColors:[]},a=e.getDataDimension(i),r=i.getDimensionInfo(a);null!=r&&(o.dimension=r.index,n.push(o))}}),t.getData().setVisual("visualMeta",n)}});var wO={get:function(t,e,n){var o=i((bO[t]||{})[e]);return n&&y(o)?o[o.length-1]:o}},bO={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},SO=hL.mapVisual,MO=hL.eachVisual,IO=y,TO=d,AO=Fo,DO=Bo,CO=B,LO=Fs({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-1/0,1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:"all",min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;U_.canvasSupported||(i.realtime=!1),!e&&ey(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=m(t,this),this.controllerVisuals=ty(this.option.controller,e,t),this.targetVisuals=ty(this.option.target,e,t)},getTargetSeriesIndices:function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries(function(t,i){e.push(i)}):e=Di(t),e},eachTargetSeries:function(t,e){d(this.getTargetSeriesIndices(),function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===l[0]?"min":t===l[1]?"max":(+t).toFixed(Math.min(s,20))}var o,a,r=this.option,s=r.precision,l=this.dataBound,u=r.formatter;return i=i||["<",">"],y(t)&&(t=t.slice(),o=!0),a=e?t:o?[n(t[0]),n(t[1])]:n(t),_(u)?u.replace("{value}",o?a[0]:a).replace("{value2}",o?a[1]:a):x(u)?o?u(t[0],t[1]):u(t):o?t[0]===l[0]?i[0]+" "+a[1]:t[1]===l[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a},resetExtent:function(){var t=this.option,e=AO([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,i=t.dimensions;if(null!=e||i.length){if(null!=e)return t.getDimension(e);for(var n=t.dimensions,o=n.length-1;o>=0;o--){var a=n[o];if(!t.getDimensionInfo(a).isCalculationCoord)return a}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){IO(o.color)&&!t.inRange&&(t.inRange={color:o.color.slice().reverse()}),t.inRange=t.inRange||{color:e.get("gradientColor")},TO(this.stateList,function(e){var i=t[e];if(_(i)){var n=wO.get(i,"active",l);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}var e=this.ecModel,o=this.option,a={inRange:o.inRange,outOfRange:o.outOfRange},r=o.target||(o.target={}),s=o.controller||(o.controller={});n(r,a),n(s,a);var l=this.isCategory();t.call(this,r),t.call(this,s),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},TO(n,function(t,e){if(hL.isValidType(e)){var i=wO.get(e,"inactive",l);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}.call(this,r,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,o=this.get("inactiveColor");TO(this.stateList,function(a){var r=this.itemSize,s=t[a];s||(s=t[a]={color:l?o:[o]}),null==s.symbol&&(s.symbol=e&&i(e)||(l?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=n&&i(n)||(l?r[0]:[r[0],r[0]])),s.symbol=SO(s.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var u=s.symbolSize;if(null!=u){var h=-1/0;MO(u,function(t){t>h&&(h=t)}),s.symbolSize=SO(u,function(t){return DO(t,[0,h],[0,r[0]],!0)})}},this)}.call(this,s)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:CO,getValueState:CO,getVisualMeta:CO}),kO=[20,140],PO=LO.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:null},optionUpdated:function(t,e){PO.superApply(this,"optionUpdated",arguments),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){PO.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=kO[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=kO[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):y(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){LO.prototype.completeVisualOption.apply(this,arguments),d(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Fo((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},this),e.push({seriesId:i.id,dataIndex:n})},this),e},getVisualMeta:function(t){function e(e,i){o.push({value:e,color:t(e,i)})}for(var i=Qy(0,0,this.getExtent()),n=Qy(0,0,this.option.range.slice()),o=[],a=0,r=0,s=n.length,l=i.length;rt[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new tb("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,a=i.handleLabels;EO([0,1],function(r){var s=o[r];s.setStyle("fill",e.handlesColor[r]),s.position[1]=t[r];var l=Do(i.handleLabelPoints[r],Ao(s,this.group));a[r].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[r]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===r?"bottom":"top":"left",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=OO(t,a,s,!0),u=this._shapes,h=u.indicator;if(h){h.position[1]=l,h.attr("invisible",!1),h.setShape("points",ox(!!i,n,l,r[1]));var c={convertOpacityToAlpha:!0},d=this.getControllerVisual(t,"color",c);h.setStyle("fill",d);var f=Do(u.indicatorLabelPoint,Ao(h,this.group)),p=u.indicatorLabel;p.attr("invisible",!1);var g=this._applyTransform("left",u.barGroup),m=this._orient;p.setStyle({text:(i||"")+o.formatValueText(e),textVerticalAlign:"horizontal"===m?g:"middle",textAlign:"horizontal"===m?"center":g,x:f[0],y:f[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=RO(zO(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on("mouseout",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=RO(zO(o[0],t),o[1]);var r=ax(i,a,o),s=[t-r,t+r],l=OO(t,o,a,!0),u=[OO(s[0],o,a,!0),OO(s[1],o,a,!0)];s[0]o[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",r):u[1]===1/0?this._showIndicator(l,u[0],"> ",r):this._showIndicator(l,l,"≈ ",r));var h=this._hoverLinkDataIndices,c=[];(e||rx(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(u));var d=Ri(h,c);this._dispatchHighDown("downplay",ex(d[0])),this._dispatchHighDown("highlight",ex(d[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target,i=this.visualMapModel;if(e&&null!=e.dataIndex){var n=this.ecModel.getSeriesByIndex(e.seriesIndex);if(i.isTargetSeries(n)){var o=n.getData(e.dataType),a=o.get(i.getDataDimension(o),e.dataIndex,!0);isNaN(a)||this._showIndicator(a,a)}}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",ex(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=Ao(e,n?null:this.group);return zM[y(t)?"applyTransform":"transformDirection"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});Es({type:"selectDataRange",event:"dataRangeSelected",update:"update"},function(t,e){e.eachComponent({mainType:"visualMap",query:t},function(e){e.setSelected(t.selected)})}),Ns(xO);var FO=LO.extend({type:"visualMap.piecewise",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieceList:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0,showLabel:null},optionUpdated:function(t,e){FO.superApply(this,"optionUpdated",arguments),this._pieceList=[],this.resetExtent();var n=this._mode=this._determineMode();WO[this._mode].call(this),this._resetSelected(t,e);var o=this.option.categories;this.resetVisual(function(t,e){"categories"===n?(t.mappingMethod="category",t.categories=i(o)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=f(this._pieceList,function(t){var t=i(t);return"inRange"!==e&&(t.visual=null),t}))})},completeVisualOption:function(){function t(t,e,i){return t&&t[e]&&(w(t[e])?t[e].hasOwnProperty(i):t[e]===i)}var e=this.option,i={},n=hL.listVisualTypes(),o=this.isCategory();d(e.pieces,function(t){d(n,function(e){t.hasOwnProperty(e)&&(i[e]=1)})}),d(i,function(i,n){var a=0;d(this.stateList,function(i){a|=t(e,i,n)||t(e.target,i,n)},this),!a&&d(this.stateList,function(t){(e[t]||(e[t]={}))[n]=wO.get(n,"inRange"===t?"active":"inactive",o)})},this),LO.prototype.completeVisualOption.apply(this,arguments)},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,d(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),"single"===i.selectedMode){var a=!1;d(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(a?o[i]=!1:a=!0)},this)}},getSelectedMapKey:function(t){return"categories"===this._mode?t.value+"":t.index+""},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=i(t)},getValueState:function(t){var e=hL.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){hL.findPieceIndex(e,this._pieceList)===t&&n.push(i)},this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=i[0]===-1/0&&i[1]===1/0?0:(i[0]+i[1])/2}return e},getVisualMeta:function(t){function e(e,a){var r=o.getRepresentValue({interval:e});a||(a=o.getValueState(r));var s=t(r,a);e[0]===-1/0?n[0]=s:e[1]===1/0?n[1]=s:i.push({value:e[0],color:s},{value:e[1],color:s})}if(!this.isCategory()){var i=[],n=[],o=this,a=this._pieceList.slice();if(a.length){var r=a[0].interval[0];r!==-1/0&&a.unshift({interval:[-1/0,r]}),(r=a[a.length-1].interval[1])!==1/0&&a.push({interval:[r,1/0]})}else a.push({interval:[-1/0,1/0]});var s=-1/0;return d(a,function(t){var i=t.interval;i&&(i[0]>s&&e([s,i[0]],"outOfRange"),e(i.slice()),s=i[1])},this),{stops:i,outerColors:n}}}}),WO={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+o;r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};NO.extend({type:"visualMap.piecewise",doRender:function(){var t=this.group;t.removeAll();var e=this.visualMapModel,i=e.get("textGap"),n=e.textStyleModel,o=n.getFont(),a=n.getTextColor(),r=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),u=l.endsText,h=T(e.get("showLabel",!0),!u);u&&this._renderEndsText(t,u[0],s,h,r),d(l.viewPieceList,function(n){var l=n.piece,u=new tb;u.onclick=m(this._onItemClick,this,l),this._enableHoverLink(u,n.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(u,c,[0,0,s[0],s[1]]),h){var d=this.visualMapModel.getValueState(c);u.add(new rM({style:{x:"right"===r?-i:s[0]+i,y:s[1]/2,text:l.text,textVerticalAlign:"middle",textAlign:r,textFont:o,textFill:a,opacity:"outOfRange"===d?.5:1}}))}t.add(u)},this),u&&this._renderEndsText(t,u[1],s,h,r),aI(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:ex(i.findTargetDataIndices(e))})}t.on("mouseover",m(i,this,"highlight")).on("mouseout",m(i,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return tx(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new tb,r=this.visualMapModel.textStyleModel;a.add(new rM({style:{x:n?"right"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?o:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=f(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),o=t.get("inverse");return("horizontal"===n?o:!o)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(Jl(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,n=e.option,o=i(n.selected),a=e.getSelectedMapKey(t);"single"===n.selectedMode?(o[a]=!0,d(o,function(t,e){o[e]=e===a})):o[a]=!o[a],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}});Ns(xO);var HO=ta,ZO=ia,UO=Fs({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},isAnimationEnabled:function(){if(U_.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e,i,n){var o=this.constructor,r=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType,!0),s=t[r];i&&i.data?(s?s.mergeOption(i,e,!0):(n&&ux(i),d(i.data,function(t){t instanceof Array?(ux(t[0]),ux(t[1])):ux(t)}),a(s=new o(i,this,e),{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),t[r]=s):t[r]=null},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=y(i)?f(i,HO).join(", "):HO(i),o=e.getName(t),a=ZO(this.name);return(null!=i||o)&&(a+="
"),o&&(a+=ZO(o),null!=i&&(a+=" : ")),null!=i&&(a+=ZO(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});h(UO,ZI),UO.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var XO=l,jO=v,YO={min:jO(dx,"min"),max:jO(dx,"max"),average:jO(dx,"average")},qO=Ws({type:"marker",init:function(){this.markerGroupMap=R()},render:function(t,e,i){var n=this.markerGroupMap;n.each(function(t){t.__keep=!1});var o=this.type+"Model";e.eachSeries(function(t){var n=t[o];n&&this.renderSeries(t,n,e,i)},this),n.each(function(t){!t.__keep&&this.group.remove(t.group)},this)},renderSeries:function(){}});qO.extend({type:"markPoint",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(xx(e.getData(),t,i),this.markerGroupMap.get(t.id).updateLayout(e))},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,r=t.getData(),s=this.markerGroupMap,l=s.get(a)||s.set(a,new Du),u=_x(o,t,e);e.setData(u),xx(e.getData(),t,n),u.each(function(t){var i=u.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),u.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.color")||r.getVisual("color"),symbol:i.getShallow("symbol")})}),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),l.__keep=!0,l.group.silent=e.get("silent")||t.get("silent")}}),Ns(function(t){t.markPoint=t.markPoint||{}}),UO.extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end"},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"}});var KO=function(t,e,o,r){var s=t.getData(),l=r.type;if(!y(r)&&("min"===l||"max"===l||"average"===l||"median"===l||null!=r.xAxis||null!=r.yAxis)){var u,h;if(null!=r.yAxis||null!=r.xAxis)u=null!=r.yAxis?"y":"x",e.getAxis(u),h=T(r.yAxis,r.xAxis);else{var c=px(r,s,e,t);u=c.valueDataDim,c.valueAxis,h=yx(s,u,l)}var d="x"===u?0:1,f=1-d,p=i(r),g={};p.type=null,p.coord=[],g.coord=[],p.coord[f]=-1/0,g.coord[f]=1/0;var m=o.get("precision");m>=0&&"number"==typeof h&&(h=+h.toFixed(Math.min(m,20))),p.coord[d]=g.coord[d]=h,r=[p,g,{type:l,valueIndex:r.valueIndex,value:h}]}return r=[fx(t,r[0]),fx(t,r[1]),a({},r[2])],r[2].type=r[2].type||"",n(r[2],r[0]),n(r[2],r[1]),r};qO.extend({type:"markLine",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,a=e.__to;o.each(function(e){Ix(o,e,!0,t,i),Ix(a,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),a.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var a=e.getItemModel(i);Ix(e,i,o,t,n),e.setItemVisual(i,{symbolSize:a.get("symbolSize")||g[o?0:1],symbol:a.get("symbol",!0)||p[o?0:1],color:a.get("itemStyle.color")||s.getVisual("color")})}var a=t.coordinateSystem,r=t.id,s=t.getData(),l=this.markerGroupMap,u=l.get(r)||l.set(r,new sf);this.group.add(u.group);var h=Tx(a,t,e),c=h.from,d=h.to,f=h.line;e.__from=c,e.__to=d,e.setData(f);var p=e.get("symbol"),g=e.get("symbolSize");y(p)||(p=[p,p]),"number"==typeof g&&(g=[g,g]),h.from.each(function(t){o(c,t,!0),o(d,t,!1)}),f.each(function(t){var e=f.getItemModel(t).get("lineStyle.color");f.setItemVisual(t,{color:e||c.getItemVisual(t,"color")}),f.setItemLayout(t,[c.getItemLayout(t),d.getItemLayout(t)]),f.setItemVisual(t,{fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolSize:d.getItemVisual(t,"symbolSize"),toSymbol:d.getItemVisual(t,"symbol")})}),u.updateData(f),h.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),u.__keep=!0,u.group.silent=e.get("silent")||t.get("silent")}}),Ns(function(t){t.markLine=t.markLine||{}}),UO.extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}}});var $O=function(t,e,i,n){var a=fx(t,n[0]),r=fx(t,n[1]),s=T,l=a.coord,u=r.coord;l[0]=s(l[0],-1/0),l[1]=s(l[1],-1/0),u[0]=s(u[0],1/0),u[1]=s(u[1],1/0);var h=o([{},a,r]);return h.coord=[a.coord,r.coord],h.x0=a.x,h.y0=a.y,h.x1=r.x,h.y1=r.y,h},JO=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];qO.extend({type:"markArea",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=f(JO,function(o){return Lx(n,e,o,t,i)});n.setItemLayout(e,o),n.getItemGraphicEl(e).setShape("points",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,s=t.getData(),l=this.markerGroupMap,u=l.get(a)||l.set(a,{group:new tb});this.group.add(u.group),u.__keep=!0;var h=kx(o,t,e);e.setData(h),h.each(function(e){h.setItemLayout(e,f(JO,function(i){return Lx(h,e,i,t,n)})),h.setItemVisual(e,{color:s.getVisual("color")})}),h.diff(u.__data).add(function(t){var e=new pM({shape:{points:h.getItemLayout(t)}});h.setItemGraphicEl(t,e),u.group.add(e)}).update(function(t,i){var n=u.__data.getItemGraphicEl(i);Io(n,{shape:{points:h.getItemLayout(t)}},e,t),u.group.add(n),h.setItemGraphicEl(t,n)}).remove(function(t){var e=u.__data.getItemGraphicEl(t);u.group.remove(e)}).execute(),h.eachItemGraphicEl(function(t,i){var n=h.getItemModel(i),o=n.getModel("label"),a=n.getModel("emphasis.label"),s=h.getItemVisual(i,"color");t.useStyle(r(n.getModel("itemStyle").getItemStyle(),{fill:Yt(s,.4),stroke:s})),t.hoverStyle=n.getModel("emphasis.itemStyle").getItemStyle(),go(t.style,t.hoverStyle,o,a,{labelFetcher:e,labelDataIndex:i,defaultText:h.getName(i)||"",isRectText:!0,autoColor:s}),fo(t,{}),t.dataModel=e}),u.__data=h,u.group.silent=e.get("silent")||t.get("silent")}}),Ns(function(t){t.markArea=t.markArea||{}});lI.registerSubTypeDefaulter("timeline",function(){return"slider"}),Es({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),r({currentIndex:i.option.currentIndex},t)}),Es({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var QO=lI.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){QO.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],n=t.axisType,o=this._names=[];if("category"===n){var a=[];d(e,function(t,e){var n,r=Li(t);w(t)?(n=i(t)).value=e:n=e,a.push(n),_(r)||null!=r&&!isNaN(r)||(r=""),o.push(r+"")}),e=a}var r={category:"ordinal",time:"time"}[n]||"number";(this._data=new vA([{name:"value",type:r}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});h(QO.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),ZI);var tE=qI.extend({type:"timeline"}),eE=function(t,e,i,n){aD.call(this,t,e,i),this.type=n||"value",this.model=null};eE.prototype={constructor:eE,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},u(eE,aD);var iE=m,nE=d,oE=Math.PI;tE.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var o=this._layout(t,i),a=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return ia(s.scale.getLabel(t))},nE(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](o,a,s,t)},this),this._renderAxisLabel(o,r,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),o=Ex(t,e);null==i||"auto"===i?i="horizontal"===n?o.y+o.height/2=0||"+"===i?"left":"right"},r={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},s={horizontal:0,vertical:oE/2},l="vertical"===n?o.height:o.width,u=t.getModel("controlStyle"),h=u.get("show",!0),c=h?u.get("itemSize"):0,d=h?u.get("itemGap"):0,f=c+d,p=t.get("label.rotate")||0;p=p*oE/180;var g,m,v,y,x=u.get("position",!0),_=h&&u.get("showPlayBtn",!0),w=h&&u.get("showPrevBtn",!0),b=h&&u.get("showNextBtn",!0),S=0,M=l;return"left"===x||"bottom"===x?(_&&(g=[0,0],S+=f),w&&(m=[S,0],S+=f),b&&(v=[M-c,0],M-=f)):(_&&(g=[M-c,0],M-=f),w&&(m=[0,0],S+=f),b&&(v=[M-c,0],M-=f)),y=[S,M],t.get("inverse")&&y.reverse(),{viewRect:o,mainLength:l,orient:n,rotation:s[n],labelRotation:p,labelPosOpt:i,labelAlign:t.get("label.align")||a[n],labelBaseline:t.get("label.verticalAlign")||t.get("label.baseline")||r[n],playPosition:g,prevBtnPosition:m,nextBtnPosition:v,axisExtent:y,controlSize:c,controlGap:d}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var a=this._mainGroup,r=this._labelGroup,s=t.viewRect;if("vertical"===t.orient){var l=xt(),u=s.x,h=s.y+s.height;St(l,l,[-u,-h]),Mt(l,l,-oE/2),St(l,l,[u,h]),(s=s.clone()).applyTransform(l)}var c=n(s),d=n(a.getBoundingRect()),f=n(r.getBoundingRect()),p=a.position,g=r.position;g[0]=p[0]=c[0][0];var m=t.labelPosOpt;if(isNaN(m))o(p,d,c,1,v="+"===m?0:1),o(g,f,c,1,1-v);else{var v=m>=0?0:1;o(p,d,c,1,v),g[1]=p[1]+m}a.attr("position",p),r.attr("position",g),a.rotation=r.rotation=t.rotation,i(a),i(r)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),o=Hl(e,n);o.getTicks=function(){return i.mapArray(["value"],function(t){return t})};var a=i.getDataExtent("value");o.setExtent(a[0],a[1]),o.niceTicks();var r=new eE("value",o,t.axisExtent,n);return r.model=e,r},_createGroup:function(t){var e=this["_"+t]=new tb;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get("lineStyle.show")&&e.add(new _M({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:a({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();nE(a,function(t){var a=i.dataToCoord(t),r=o.getItemModel(t),s=r.getModel("itemStyle"),l=r.getModel("emphasis.itemStyle"),u={position:[a,0],onclick:iE(this._changeTimeline,this,t)},h=zx(r,s,e,u);fo(h,l.getItemStyle()),r.get("tooltip")?(h.dataIndex=t,h.dataModel=n):h.dataIndex=h.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){if(i.getLabelModel().get("show")){var o=n.getData(),a=i.getViewLabels();nE(a,function(n){var a=n.tickValue,r=o.getItemModel(a),s=r.getModel("label"),l=r.getModel("emphasis.label"),u=i.dataToCoord(n.tickValue),h=new rM({position:[u,0],rotation:t.labelRotation-t.rotation,onclick:iE(this._changeTimeline,this,a),silent:!1});mo(h.style,s,{text:n.formattedLabel,textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(h),fo(h,mo({},l))},this)}},_renderControl:function(t,e,i,n){function o(t,i,o,h){if(t){var c=Rx(n,i,u,{position:t,origin:[a/2,0],rotation:h?-r:0,rectHover:!0,style:s,onclick:o});e.add(c),fo(c,l)}}var a=t.controlSize,r=t.rotation,s=n.getModel("controlStyle").getItemStyle(),l=n.getModel("emphasis.controlStyle").getItemStyle(),u=[0,-a/2,a,a],h=n.getPlayState(),c=n.get("inverse",!0);o(t.nextBtnPosition,"controlStyle.nextIcon",iE(this._changeTimeline,this,c?"-":"+")),o(t.prevBtnPosition,"controlStyle.prevIcon",iE(this._changeTimeline,this,c?"+":"-")),o(t.playPosition,"controlStyle."+(h?"stopIcon":"playIcon"),iE(this._handlePlayClick,this,!h),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),a=n.getCurrentIndex(),r=o.getItemModel(a).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=iE(s._handlePointerDrag,s),t.ondragend=iE(s._handlePointerDragend,s),Bx(t,a,i,n,!0)},onUpdate:function(t){Bx(t,a,i,n)}};this._currentPointer=zx(r,r,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=Fo(this._axis.getExtent().slice());i>n[1]&&(i=n[1]),ii.getHeight()&&(n.textPosition="top",l=!0);var u=l?-5-o.height:s+8;a+o.width/2>i.getWidth()?(n.textPosition=["100%",u],n.textAlign="right"):a-o.width/2<0&&(n.textPosition=[0,u],n.textAlign="left")}})}},updateView:function(t,e,i,n){d(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},remove:function(t,e){d(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){d(this._features,function(i){i.dispose&&i.dispose(t,e)})}});var rE=rT.toolbox.saveAsImage;Gx.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:rE.title,type:"png",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:rE.lang.slice()},Gx.prototype.unusable=!U_.canvasSupported,Gx.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=document.createElement("a"),a=i.get("type",!0)||"png";o.download=n+"."+a,o.target="_blank";var r=e.getConnectedDataURL({type:a,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if(o.href=r,"function"!=typeof MouseEvent||U_.browser.ie||U_.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var s=atob(r.split(",")[1]),l=s.length,u=new Uint8Array(l);l--;)u[l]=s.charCodeAt(l);var h=new Blob([u]);window.navigator.msSaveOrOpenBlob(h,n+"."+a)}else{var c=i.get("lang"),d='';window.open().document.write(d)}else{var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(f)}},Ty("saveAsImage",Gx);var sE=rT.toolbox.magicType;Fx.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:i(sE.title),option:{},seriesIndex:{}};var lE=Fx.prototype;lE.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return d(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var uE={line:function(t,e,i,o){if("bar"===t)return n({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.line")||{},!0)},bar:function(t,e,i,o){if("line"===t)return n({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.bar")||{},!0)},stack:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:"__ec_magicType_stack__"},o.get("option.stack")||{},!0)},tiled:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:""},o.get("option.tiled")||{},!0)}},hE=[["line","bar"],["stack","tiled"]];lE.onclick=function(t,e,i){var n=this.model,o=n.get("seriesIndex."+i);if(uE[i]){var a={series:[]};d(hE,function(t){l(t,i)>=0&&d(t,function(t){n.setIconStatus(t,"normal")})}),n.setIconStatus(i,"emphasis"),t.eachComponent({mainType:"series",query:null==o?null:{seriesIndex:o}},function(e){var o=e.subType,s=e.id,l=uE[i](o,s,e,n);l&&(r(l,e.option),a.series.push(l));var u=e.coordinateSystem;if(u&&"cartesian2d"===u.type&&("line"===i||"bar"===i)){var h=u.getAxesByScale("ordinal")[0];if(h){var c=h.dim+"Axis",d=t.queryComponents({mainType:c,index:e.get(name+"Index"),id:e.get(name+"Id")})[0].componentIndex;a[c]=a[c]||[];for(var f=0;f<=d;f++)a[c][d]=a[c][d]||{};a[c][d].boundaryGap="bar"===i}}}),e.dispatchAction({type:"changeMagicType",currentType:i,newOption:a})}},Es({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),Ty("magicType",Fx);var cE=rT.toolbox.dataView,dE=new Array(60).join("-"),fE="\t",pE=new RegExp("["+fE+"]+","g");$x.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",title:i(cE.title),lang:i(cE.lang),backgroundColor:"#fff",textColor:"#000",textareaColor:"#fff",textareaBorderColor:"#333",buttonColor:"#c23531",buttonTextColor:"#fff"},$x.prototype.onclick=function(t,e){function i(){n.removeChild(a),x._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var a=document.createElement("div");a.style.cssText="position:absolute;left:5px;top:5px;bottom:5px;right:5px;",a.style.backgroundColor=o.get("backgroundColor")||"#fff";var r=document.createElement("h4"),s=o.get("lang")||[];r.innerHTML=s[0]||o.get("title"),r.style.cssText="margin: 10px 20px;",r.style.color=o.get("textColor");var l=document.createElement("div"),u=document.createElement("textarea");l.style.cssText="display:block;width:100%;overflow:auto;";var h=o.get("optionToContent"),c=o.get("contentToOption"),d=Ux(t);if("function"==typeof h){var f=h(e.getOption());"string"==typeof f?l.innerHTML=f:M(f)&&l.appendChild(f)}else l.appendChild(u),u.readOnly=o.get("readOnly"),u.style.cssText="width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",u.style.color=o.get("textColor"),u.style.borderColor=o.get("textareaBorderColor"),u.style.backgroundColor=o.get("textareaColor"),u.value=d.value;var p=d.meta,g=document.createElement("div");g.style.cssText="position:absolute;bottom:0;left:0;right:0;";var m="float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",v=document.createElement("div"),y=document.createElement("div");m+=";background-color:"+o.get("buttonColor"),m+=";color:"+o.get("buttonTextColor");var x=this;ht(v,"click",i),ht(y,"click",function(){var t;try{t="function"==typeof c?c(l,e.getOption()):Kx(u.value,p)}catch(t){throw i(),new Error("Data view format error "+t)}t&&e.dispatchAction({type:"changeDataView",newOption:t}),i()}),v.innerHTML=s[1],y.innerHTML=s[2],y.style.cssText=m,v.style.cssText=m,!o.get("readOnly")&&g.appendChild(y),g.appendChild(v),ht(u,"keydown",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+fE+e.substring(n),this.selectionStart=this.selectionEnd=i+1,mw(t)}}),a.appendChild(r),a.appendChild(l),a.appendChild(g),l.style.height=n.clientHeight-80+"px",n.appendChild(a),this._dom=a},$x.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},$x.prototype.dispose=function(t,e){this.remove(t,e)},Ty("dataView",$x),Es({type:"changeDataView",event:"dataViewChanged",update:"prepareAndUpdate"},function(t,e){var i=[];d(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get("data");i.push({name:t.name,data:Jx(t.data,o)})}else i.push(a({type:"scatter"},t))}),e.mergeOption(r({series:i},t.newOption))});var gE=d,mE="\0_ec_hist_store";iO.extend({type:"dataZoom.select"}),nO.extend({type:"dataZoom.select"});var vE=rT.toolbox.dataZoom,yE=d,xE="\0_ec_\0toolbox-dataZoom_";o_.defaultOption={show:!0,icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:i(vE.title)};var _E=o_.prototype;_E.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,s_(t,e,this,n,i),r_(t,e)},_E.onclick=function(t,e,i){wE[i].call(this)},_E.remove=function(t,e){this._brushController.unmount()},_E.dispose=function(t,e){this._brushController.dispose()};var wE={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(t_(this.ecModel))}};_E._onBrush=function(t,e){function i(t,e,i){var r=e.getAxis(t),s=r.model,l=n(t,s,a),u=l.findRepresentativeAxisProxy(s).getMinMaxSpan();null==u.minValueSpan&&null==u.maxValueSpan||(i=QL(0,i.slice(),r.scale.getExtent(),0,u.minValueSpan,u.maxValueSpan)),l&&(o[l.id]={dataZoomId:l.id,startValue:i[0],endValue:i[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:"dataZoom",subType:"select"},function(i){i.getAxisModel(t,e.componentIndex)&&(n=i)}),n}if(e.isEnd&&t.length){var o={},a=this.ecModel;this._brushController.updateCovers([]),new hy(a_(this.model.option),a,{include:["grid"]}).matchOutputRanges(t,a,function(t,e,n){if("cartesian2d"===n.type){var o=t.brushType;"rect"===o?(i("x",n,e[0]),i("y",n,e[1])):i({lineX:"x",lineY:"y"}[o],n,e)}}),Qx(a,o),this._dispatchZoomAction(o)}},_E._dispatchZoomAction=function(t){var e=[];yE(t,function(t,n){e.push(i(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},Ty("dataZoom",o_),Ns(function(t){function e(t,e){if(e){var o=t+"Index",a=e[o];null==a||"all"===a||y(a)||(a=!1===a||"none"===a?[]:[a]),i(t,function(e,i){if(null==a||"all"===a||-1!==l(a,i)){var r={type:"select",$fromToolbox:!0,id:xE+t+i};r[o]=i,n.push(r)}})}}function i(e,i){var n=t[e];y(n)||(n=n?[n]:[]),yE(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);y(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(y(o)&&(o=o[0]),o&&o.feature)){var a=o.feature.dataZoom;e("xAxis",a),e("yAxis",a)}}});var bE=rT.toolbox.restore;l_.defaultOption={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:bE.title},l_.prototype.onclick=function(t,e,i){e_(t),e.dispatchAction({type:"restore",from:this.uid})},Ty("restore",l_),Es({type:"restore",event:"restore",update:"prepareAndUpdate"},function(t,e){e.resetOption("recreate")});var SE,ME="urn:schemas-microsoft-com:vml",IE="undefined"==typeof window?null:window,TE=!1,AE=IE&&IE.document;if(AE&&!U_.canvasSupported)try{!AE.namespaces.zrvml&&AE.namespaces.add("zrvml",ME),SE=function(t){return AE.createElement("')}}catch(t){SE=function(t){return AE.createElement("<"+t+' xmlns="'+ME+'" class="zrvml">')}}var DE=ES.CMD,CE=Math.round,LE=Math.sqrt,kE=Math.abs,PE=Math.cos,NE=Math.sin,OE=Math.max;if(!U_.canvasSupported){var EE=21600,RE=EE/2,zE=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=EE+","+EE,t.coordorigin="0,0"},BE=function(t){return String(t).replace(/&/g,"&").replace(/"/g,""")},VE=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},GE=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},FE=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},WE=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},HE=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},ZE=function(t,e,i){var n=Gt(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=VE(n[0],n[1],n[2]),t.opacity=i*n[3])},UE=function(t){var e=Gt(t);return[VE(e[0],e[1],e[2]),e[3]]},XE=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof IM){var o,a=0,r=[0,0],s=0,l=1,u=i.getBoundingRect(),h=u.width,c=u.height;if("linear"===n.type){o="gradient";var d=i.transform,f=[n.x*h,n.y*c],p=[n.x2*h,n.y2*c];d&&(Q(f,f,d),Q(p,p,d));var g=p[0]-f[0],m=p[1]-f[1];(a=180*Math.atan2(g,m)/Math.PI)<0&&(a+=360),a<1e-6&&(a=0)}else{o="gradientradial";var f=[n.x*h,n.y*c],d=i.transform,v=i.scale,y=h,x=c;r=[(f[0]-u.x)/y,(f[1]-u.y)/x],d&&Q(f,f,d),y/=v[0]*EE,x/=v[1]*EE;var _=OE(y,x);s=0/_,l=2*n.r/_-s}var w=n.colorStops.slice();w.sort(function(t,e){return t.offset-e.offset});for(var b=w.length,S=[],M=[],I=0;I=2){var D=S[0][0],C=S[1][0],L=S[0][1]*e.opacity,k=S[1][1]*e.opacity;t.type=o,t.method="none",t.focus="100%",t.angle=a,t.color=D,t.color2=C,t.colors=M.join(","),t.opacity=k,t.opacity2=L}"radial"===o&&(t.focusposition=r.join(","))}else ZE(t,n,e.opacity)},jE=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof IM||ZE(t,e.stroke,e.opacity)},YE=function(t,e,i,n){var o="fill"===e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof IM&&FE(t,a),a||(a=u_(e)),o?XE(a,i,n):jE(a,i),GE(t,a)):(t[o?"filled":"stroked"]="false",FE(t,a))},qE=[[],[],[]],KE=function(t,e){var i,n,o,a,r,s,l=DE.M,u=DE.C,h=DE.L,c=DE.A,d=DE.Q,f=[],p=t.data,g=t.len();for(a=0;a.01?N&&(O+=.0125):Math.abs(E-D)<1e-4?N&&OA?x-=.0125:x+=.0125:N&&ED?y+=.0125:y-=.0125),f.push(R,CE(((A-C)*M+b)*EE-RE),",",CE(((D-L)*I+S)*EE-RE),",",CE(((A+C)*M+b)*EE-RE),",",CE(((D+L)*I+S)*EE-RE),",",CE((O*M+b)*EE-RE),",",CE((E*I+S)*EE-RE),",",CE((y*M+b)*EE-RE),",",CE((x*I+S)*EE-RE)),r=y,s=x;break;case DE.R:var z=qE[0],B=qE[1];z[0]=p[a++],z[1]=p[a++],B[0]=z[0]+p[a++],B[1]=z[1]+p[a++],e&&(Q(z,z,e),Q(B,B,e)),z[0]=CE(z[0]*EE-RE),B[0]=CE(B[0]*EE-RE),z[1]=CE(z[1]*EE-RE),B[1]=CE(B[1]*EE-RE),f.push(" m ",z[0],",",z[1]," l ",B[0],",",z[1]," l ",B[0],",",B[1]," l ",z[0],",",B[1]);break;case DE.Z:f.push(" x ")}if(i>0){f.push(n);for(var V=0;V100&&(tR=0,QE={});var i,n=eR.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(t){}e={style:n.fontStyle||"normal",variant:n.fontVariant||"normal",weight:n.fontWeight||"normal",size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},QE[t]=e,tR++}return e};!function(t,e){bb[t]=e}("measureText",function(t,e){var i=AE;JE||((JE=i.createElement("div")).style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",AE.body.appendChild(JE));try{JE.style.font=e}catch(t){}return JE.innerHTML="",JE.appendChild(i.createTextNode(t)),{width:JE.offsetWidth}});for(var nR=new de,oR=[Db,di,fi,Pn,rM],aR=0;aR=o&&u+1>=a){for(var h=[],c=0;c=o&&c+1>=a)return T_(0,s.components);l[i]=s}else l[i]=void 0}r++}();if(d)return d}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},D_.prototype.update=function(t,e){if(t){var i=this.getDefs(!1);if(t[this._domName]&&i.contains(t[this._domName]))"function"==typeof e&&e(t);else{var n=this.add(t);n&&(t[this._domName]=n)}}},D_.prototype.addDom=function(t){this.getDefs(!0).appendChild(t)},D_.prototype.removeDom=function(t){var e=this.getDefs(!1);e&&t[this._domName]&&(e.removeChild(t[this._domName]),t[this._domName]=null)},D_.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return d(this._tagNames,function(i){var n=t.getElementsByTagName(i);e=e.concat([].slice.call(n))}),e},D_.prototype.markAllUnused=function(){var t=this;d(this.getDoms(),function(e){e[t._markLabel]="0"})},D_.prototype.markUsed=function(t){t&&(t[this._markLabel]="1")},D_.prototype.removeUnused=function(){var t=this.getDefs(!1);if(t){var e=this;d(this.getDoms(),function(i){"1"!==i[e._markLabel]&&t.removeChild(i)})}},D_.prototype.getSvgProxy=function(t){return t instanceof Pn?yR:t instanceof fi?xR:t instanceof rM?_R:yR},D_.prototype.getTextSvgElement=function(t){return t.__textSvgEl},D_.prototype.getSvgElement=function(t){return t.__svgEl},u(C_,D_),C_.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var i=this;d(["fill","stroke"],function(n){if(e.style[n]&&("linear"===e.style[n].type||"radial"===e.style[n].type)){var o,a=e.style[n],r=i.getDefs(!0);a._dom?(o=a._dom,r.contains(a._dom)||i.addDom(o)):o=i.add(a),i.markUsed(e);var s=o.getAttribute("id");t.setAttribute(n,"url(#"+s+")")}})}},C_.prototype.add=function(t){var e;if("linear"===t.type)e=this.createElement("linearGradient");else{if("radial"!==t.type)return Yw("Illegal gradient type."),null;e=this.createElement("radialGradient")}return t.id=t.id||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-gradient-"+t.id),this.updateDom(t,e),this.addDom(e),e},C_.prototype.update=function(t){var e=this;D_.prototype.update.call(this,t,function(){var i=t.type,n=t._dom.tagName;"linear"===i&&"linearGradient"===n||"radial"===i&&"radialGradient"===n?e.updateDom(t,t._dom):(e.removeDom(t),e.add(t))})},C_.prototype.updateDom=function(t,e){if("linear"===t.type)e.setAttribute("x1",t.x),e.setAttribute("y1",t.y),e.setAttribute("x2",t.x2),e.setAttribute("y2",t.y2);else{if("radial"!==t.type)return void Yw("Illegal gradient type.");e.setAttribute("cx",t.x),e.setAttribute("cy",t.y),e.setAttribute("r",t.r)}t.global?e.setAttribute("gradientUnits","userSpaceOnUse"):e.setAttribute("gradientUnits","objectBoundingBox"),e.innerHTML="";for(var i=t.colorStops,n=0,o=i.length;n0){var n,o,a=this.getDefs(!0),r=e[0],s=i?"_textDom":"_dom";r[s]?(o=r[s].getAttribute("id"),n=r[s],a.contains(n)||a.appendChild(n)):(o="zr"+this._zrId+"-clip-"+this.nextId,++this.nextId,(n=this.createElement("clipPath")).setAttribute("id",o),a.appendChild(n),r[s]=n);var l=this.getSvgProxy(r);if(r.transform&&r.parent.invTransform&&!i){var u=Array.prototype.slice.call(r.transform);bt(r.transform,r.parent.invTransform,r.transform),l.brush(r),r.transform=u}else l.brush(r);var h=this.getSvgElement(r);n.innerHTML="",n.appendChild(h.cloneNode()),t.setAttribute("clip-path","url(#"+o+")"),e.length>1&&this.updateDom(n,e.slice(1),i)}else t&&t.setAttribute("clip-path","none")},L_.prototype.markUsed=function(t){var e=this;t.__clipPaths&&t.__clipPaths.length>0&&d(t.__clipPaths,function(t){t._dom&&D_.prototype.markUsed.call(e,t._dom),t._textDom&&D_.prototype.markUsed.call(e,t._textDom)})},u(k_,D_),k_.prototype.addWithoutUpdate=function(t,e){if(e&&P_(e.style)){var i,n=e.style;n._shadowDom?(i=n._shadowDom,this.getDefs(!0).contains(n._shadowDom)||this.addDom(i)):i=this.add(e),this.markUsed(e);var o=i.getAttribute("id");t.style.filter="url(#"+o+")"}},k_.prototype.add=function(t){var e=this.createElement("filter"),i=t.style;return i._shadowDomId=i._shadowDomId||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-shadow-"+i._shadowDomId),this.updateDom(t,e),this.addDom(e),e},k_.prototype.update=function(t,e){var i=e.style;if(P_(i)){var n=this;D_.prototype.update.call(this,e,function(t){n.updateDom(e,t._shadowDom)})}else this.remove(t,i)},k_.prototype.remove=function(t,e){null!=e._shadowDomId&&(this.removeDom(e),t.style.filter="")},k_.prototype.updateDom=function(t,e){var i=e.getElementsByTagName("feDropShadow");i=0===i.length?this.createElement("feDropShadow"):i[0];var n,o,a,r,s=t.style,l=t.scale?t.scale[0]||1:1,u=t.scale?t.scale[1]||1:1;if(s.shadowBlur||s.shadowOffsetX||s.shadowOffsetY)n=s.shadowOffsetX||0,o=s.shadowOffsetY||0,a=s.shadowBlur,r=s.shadowColor;else{if(!s.textShadowBlur)return void this.removeDom(e,s);n=s.textShadowOffsetX||0,o=s.textShadowOffsetY||0,a=s.textShadowBlur,r=s.textShadowColor}i.setAttribute("dx",n/l),i.setAttribute("dy",o/u),i.setAttribute("flood-color",r);var h=a/2/l+" "+a/2/u;i.setAttribute("stdDeviation",h),e.setAttribute("x","-100%"),e.setAttribute("y","-100%"),e.setAttribute("width",Math.ceil(a/2*200)+"%"),e.setAttribute("height",Math.ceil(a/2*200)+"%"),e.appendChild(i),s._shadowDom=e},k_.prototype.markUsed=function(t){var e=t.style;e&&e._shadowDom&&D_.prototype.markUsed.call(this,e._shadowDom)};var IR=function(t,e,i,n){this.root=t,this.storage=e,this._opts=i=a({},i||{});var o=p_("svg");o.setAttribute("xmlns","http://www.w3.org/2000/svg"),o.setAttribute("version","1.1"),o.setAttribute("baseProfile","full"),o.style.cssText="user-select:none;position:absolute;left:0;top:0;",this.gradientManager=new C_(n,o),this.clipPathManager=new L_(n,o),this.shadowManager=new k_(n,o);var r=document.createElement("div");r.style.cssText="overflow:hidden;position:relative",this._svgRoot=o,this._viewport=r,t.appendChild(r),r.appendChild(o),this.resize(i.width,i.height),this._visibleList=[]};IR.prototype={constructor:IR,getType:function(){return"svg"},getViewportRoot:function(){return this._viewport},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},setBackgroundColor:function(t){this._viewport.style.background=t},_paintList:function(t){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused(),this.shadowManager.markAllUnused();var e,i=this._svgRoot,n=this._visibleList,o=t.length,a=[];for(e=0;e=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},resize:function(t,e){var i=this._viewport;i.style.display="none";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display="",this._width!==t||this._height!==e){this._width=t,this._height=e;var o=i.style;o.width=t+"px",o.height=e+"px";var a=this._svgRoot;a.setAttribute("width",t),a.setAttribute("height",e)}},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,i=["width","height"][t],n=["clientWidth","clientHeight"][t],o=["paddingLeft","paddingTop"][t],a=["paddingRight","paddingBottom"][t];if(null!=e[i]&&"auto"!==e[i])return parseFloat(e[i]);var r=this.root,s=document.defaultView.getComputedStyle(r);return(r[n]||N_(s[i])||N_(r.style[i]))-(N_(s[o])||0)-(N_(s[a])||0)|0},dispose:function(){this.root.innerHTML="",this._svgRoot=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},pathToDataUrl:function(){return this.refresh(),"data:image/svg+xml;charset=UTF-8,"+this._svgRoot.outerHTML}},d(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","toDataURL","pathToImage"],function(t){IR.prototype[t]=F_(t)}),Ti("svg",IR),t.version="4.2.1",t.dependencies=ET,t.PRIORITY=VT,t.init=function(t,e,i){var n=ks(t);if(n)return n;var o=new us(t,e,i);return o.id="ec_"+iA++,tA[o.id]=o,Fi(t,oA,o.id),Cs(o),o},t.connect=function(t){if(y(t)){var e=t;t=null,kT(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+nA++,kT(e,function(e){e.group=t})}return eA[t]=!0,t},t.disConnect=Ls,t.disconnect=aA,t.dispose=function(t){"string"==typeof t?t=tA[t]:t instanceof us||(t=ks(t)),t instanceof us&&!t.isDisposed()&&t.dispose()},t.getInstanceByDom=ks,t.getInstanceById=function(t){return tA[t]},t.registerTheme=Ps,t.registerPreprocessor=Ns,t.registerProcessor=Os,t.registerPostUpdate=function(t){KT.push(t)},t.registerAction=Es,t.registerCoordinateSystem=Rs,t.getCoordinateSystemDimensions=function(t){var e=Fa.get(t);if(e)return e.getDimensionsInfo?e.getDimensionsInfo():e.dimensions.slice()},t.registerLayout=zs,t.registerVisual=Bs,t.registerLoading=Gs,t.extendComponentModel=Fs,t.extendComponentView=Ws,t.extendSeriesModel=Hs,t.extendChartView=Zs,t.setCanvasCreator=function(t){e("createCanvas",t)},t.registerMap=function(t,e,i){DT.registerMap(t,e,i)},t.getMap=function(t){var e=DT.retrieveMap(t);return e&&e[0]&&{geoJson:e[0].geoJSON,specialAreas:e[0].specialAreas}},t.dataTool=rA,t.zrender=Hb,t.number=YM,t.format=eI,t.throttle=Pr,t.helper=tD,t.matrix=Sw,t.vector=cw,t.color=Ww,t.parseGeoJSON=iD,t.parseGeoJson=rD,t.util=sD,t.graphic=lD,t.List=vA,t.Model=No,t.Axis=aD,t.env=U_}); \ No newline at end of file diff --git a/uni_modules/qiun-data-charts/static/h5/echarts.min.js b/uni_modules/qiun-data-charts/static/h5/echarts.min.js new file mode 100644 index 0000000..5396a03 --- /dev/null +++ b/uni_modules/qiun-data-charts/static/h5/echarts.min.js @@ -0,0 +1,23 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* 版本为4.2.1,修改一处源码:this.el.hide() 改为 this.el?this.el.hide():true +*/ + + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";function e(t,e){"createCanvas"===t&&(nw=null),ew[t]=e}function i(t){if(null==t||"object"!=typeof t)return t;var e=t,n=Y_.call(t);if("[object Array]"===n){if(!O(t)){e=[];for(var o=0,a=t.length;o=0){var o="touchend"!==n?e.targetTouches[0]:e.changedTouches[0];o&&st(t,o,e,i)}else st(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&gw.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function ht(t,e,i){pw?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function ct(t,e,i){pw?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}function dt(t){return 2===t.which||3===t.which}function ft(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}function pt(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function gt(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:mt}}function mt(t){mw(this.event)}function vt(){}function yt(t,e,i){if(t[t.rectHover?"rectContain":"contain"](e,i)){for(var n,o=t;o;){if(o.clipPath&&!o.clipPath.contain(e,i))return!1;o.silent&&(n=!0),o=o.parent}return!n||xw}return!1}function xt(){var t=new bw(6);return _t(t),t}function _t(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function wt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function bt(t,e,i){var n=e[0]*i[0]+e[2]*i[1],o=e[1]*i[0]+e[3]*i[1],a=e[0]*i[2]+e[2]*i[3],r=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=o,t[2]=a,t[3]=r,t[4]=s,t[5]=l,t}function St(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t}function Mt(t,e,i){var n=e[0],o=e[2],a=e[4],r=e[1],s=e[3],l=e[5],u=Math.sin(i),h=Math.cos(i);return t[0]=n*h+r*u,t[1]=-n*u+r*h,t[2]=o*h+s*u,t[3]=-o*u+h*s,t[4]=h*a+u*l,t[5]=h*l-u*a,t}function It(t,e,i){var n=i[0],o=i[1];return t[0]=e[0]*n,t[1]=e[1]*o,t[2]=e[2]*n,t[3]=e[3]*o,t[4]=e[4]*n,t[5]=e[5]*o,t}function Tt(t,e){var i=e[0],n=e[2],o=e[4],a=e[1],r=e[3],s=e[5],l=i*r-a*n;return l?(l=1/l,t[0]=r*l,t[1]=-a*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-r*o)*l,t[5]=(a*o-i*s)*l,t):null}function At(t){var e=xt();return wt(e,t),e}function Dt(t){return t>Iw||t<-Iw}function Ct(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function Lt(t){return(t=Math.round(t))<0?0:t>255?255:t}function kt(t){return(t=Math.round(t))<0?0:t>360?360:t}function Pt(t){return t<0?0:t>1?1:t}function Nt(t){return Lt(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function Ot(t){return Pt(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function Et(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function Rt(t,e,i){return t+(e-t)*i}function zt(t,e,i,n,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=o,t}function Bt(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Vt(t,e){Vw&&Bt(Vw,e),Vw=Bw.put(t,Vw||e.slice())}function Gt(t,e){if(t){e=e||[];var i=Bw.get(t);if(i)return Bt(e,i);var n=(t+="").replace(/ /g,"").toLowerCase();if(n in zw)return Bt(e,zw[n]),Vt(t,e),e;if("#"!==n.charAt(0)){var o=n.indexOf("("),a=n.indexOf(")");if(-1!==o&&a+1===n.length){var r=n.substr(0,o),s=n.substr(o+1,a-(o+1)).split(","),l=1;switch(r){case"rgba":if(4!==s.length)return void zt(e,0,0,0,1);l=Ot(s.pop());case"rgb":return 3!==s.length?void zt(e,0,0,0,1):(zt(e,Nt(s[0]),Nt(s[1]),Nt(s[2]),l),Vt(t,e),e);case"hsla":return 4!==s.length?void zt(e,0,0,0,1):(s[3]=Ot(s[3]),Ft(s,e),Vt(t,e),e);case"hsl":return 3!==s.length?void zt(e,0,0,0,1):(Ft(s,e),Vt(t,e),e);default:return}}zt(e,0,0,0,1)}else{if(4===n.length)return(u=parseInt(n.substr(1),16))>=0&&u<=4095?(zt(e,(3840&u)>>4|(3840&u)>>8,240&u|(240&u)>>4,15&u|(15&u)<<4,1),Vt(t,e),e):void zt(e,0,0,0,1);if(7===n.length){var u=parseInt(n.substr(1),16);return u>=0&&u<=16777215?(zt(e,(16711680&u)>>16,(65280&u)>>8,255&u,1),Vt(t,e),e):void zt(e,0,0,0,1)}}}}function Ft(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=Ot(t[1]),o=Ot(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return e=e||[],zt(e,Lt(255*Et(r,a,i+1/3)),Lt(255*Et(r,a,i)),Lt(255*Et(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Wt(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,a=t[2]/255,r=Math.min(n,o,a),s=Math.max(n,o,a),l=s-r,u=(s+r)/2;if(0===l)e=0,i=0;else{i=u<.5?l/(s+r):l/(2-s-r);var h=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-a)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+h-d:a===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,u];return null!=t[3]&&f.push(t[3]),f}}function Ht(t,e){var i=Gt(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,i[n]>255?i[n]=255:t[n]<0&&(i[n]=0);return qt(i,4===i.length?"rgba":"rgb")}}function Zt(t){var e=Gt(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Ut(t,e,i){if(e&&e.length&&t>=0&&t<=1){i=i||[];var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=e[o],s=e[a],l=n-o;return i[0]=Lt(Rt(r[0],s[0],l)),i[1]=Lt(Rt(r[1],s[1],l)),i[2]=Lt(Rt(r[2],s[2],l)),i[3]=Pt(Rt(r[3],s[3],l)),i}}function Xt(t,e,i){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),o=Math.floor(n),a=Math.ceil(n),r=Gt(e[o]),s=Gt(e[a]),l=n-o,u=qt([Lt(Rt(r[0],s[0],l)),Lt(Rt(r[1],s[1],l)),Lt(Rt(r[2],s[2],l)),Pt(Rt(r[3],s[3],l))],"rgba");return i?{color:u,leftIndex:o,rightIndex:a,value:n}:u}}function jt(t,e,i,n){if(t=Gt(t))return t=Wt(t),null!=e&&(t[0]=kt(e)),null!=i&&(t[1]=Ot(i)),null!=n&&(t[2]=Ot(n)),qt(Ft(t),"rgba")}function Yt(t,e){if((t=Gt(t))&&null!=e)return t[3]=Pt(e),qt(t,"rgba")}function qt(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}}function Kt(t,e){return t[e]}function $t(t,e,i){t[e]=i}function Jt(t,e,i){return(e-t)*i+t}function Qt(t,e,i){return i>.5?e:t}function te(t,e,i,n,o){var a=t.length;if(1===o)for(s=0;so)t.length=o;else for(r=n;r=0&&!(m[i]<=e);i--);i=Math.min(i,u-2)}else{for(i=L;ie);i++);i=Math.min(i-1,u-2)}L=i,k=e;var n=m[i+1]-m[i];if(0!==n)if(I=(e-m[i])/n,l)if(A=v[i],T=v[0===i?i:i-1],D=v[i>u-2?u-1:i+1],C=v[i>u-3?u-1:i+2],d)ne(T,A,D,C,I,I*I,I*I*I,r(t,o),g);else{if(f)a=ne(T,A,D,C,I,I*I,I*I*I,P,1),a=re(P);else{if(p)return Qt(A,D,I);a=oe(T,A,D,C,I,I*I,I*I*I)}s(t,o,a)}else if(d)te(v[i],v[i+1],I,r(t,o),g);else{var a;if(f)te(v[i],v[i+1],I,P,1),a=re(P);else{if(p)return Qt(v[i],v[i+1],I);a=Jt(v[i],v[i+1],I)}s(t,o,a)}},ondestroy:i});return e&&"spline"!==e&&(N.easing=e),N}}}function ue(t,e,i,n,o,a,r,s){_(n)?(a=o,o=n,n=0):x(o)?(a=o,o="linear",n=0):x(n)?(a=n,n=0):x(i)?(a=i,i=500):i||(i=500),t.stopAnimation(),he(t,"",t,e,i,n,s);var l=t.animators.slice(),u=l.length;u||a&&a();for(var h=0;h0&&t.animate(e,!1).when(null==o?500:o,s).delay(a||0)}function ce(t,e,i,n){if(e){var o={};o[e]={},o[e][i]=n,t.attr(o)}else t.attr(i,n)}function de(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}function fe(t){for(var e=0;t>=eb;)e|=1&t,t>>=1;return t+e}function pe(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o=0;)o++;return o-e}function ge(t,e,i){for(i--;e>>1])<0?l=a:s=a+1;var u=n-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=r}}function ve(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])>0){for(s=n-o;l0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}else{for(s=o+1;ls&&(l=s);var u=r;r=o-l,l=o-u}for(r++;r>>1);a(t,e[i+h])>0?r=h+1:l=h}return l}function ye(t,e,i,n,o,a){var r=0,s=0,l=1;if(a(t,e[i+o])<0){for(s=o+1;ls&&(l=s);var u=r;r=o-l,l=o-u}else{for(s=n-o;l=0;)r=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),r+=o,l+=o}for(r++;r>>1);a(t,e[i+h])<0?l=h:r=h+1}return l}function xe(t,e){function i(i){var s=a[i],u=r[i],h=a[i+1],c=r[i+1];r[i]=u+c,i===l-3&&(a[i+1]=a[i+2],r[i+1]=r[i+2]),l--;var d=ye(t[h],t,s,u,0,e);s+=d,0!==(u-=d)&&0!==(c=ve(t[s+u-1],t,h,c,c-1,e))&&(u<=c?n(s,u,h,c):o(s,u,h,c))}function n(i,n,o,a){var r=0;for(r=0;r=ib||f>=ib);if(p)break;g<0&&(g=0),g+=2}if((s=g)<1&&(s=1),1===n){for(r=0;r=0;r--)t[f+r]=t[d+r];if(0===n){v=!0;break}}if(t[c--]=u[h--],1==--a){v=!0;break}if(0!=(m=a-ve(t[l],u,0,a,a-1,e))){for(a-=m,f=(c-=m)+1,d=(h-=m)+1,r=0;r=ib||m>=ib);if(v)break;p<0&&(p=0),p+=2}if((s=p)<1&&(s=1),1===a){for(f=(c-=n)+1,d=(l-=n)+1,r=n-1;r>=0;r--)t[f+r]=t[d+r];t[c]=u[h]}else{if(0===a)throw new Error;for(d=c-(a-1),r=0;r=0;r--)t[f+r]=t[d+r];t[c]=u[h]}else for(d=c-(a-1),r=0;r1;){var t=l-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]r[t+1])break;i(t)}},this.forceMergeRuns=function(){for(;l>1;){var t=l-2;t>0&&r[t-1]s&&(l=s),me(t,i,i+l,i+a,e),a=l}r.pushRun(i,a),r.mergeRuns(),o-=a,i+=a}while(0!==o);r.forceMergeRuns()}}function we(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function be(t,e,i){var n=null==e.x?0:e.x,o=null==e.x2?1:e.x2,a=null==e.y?0:e.y,r=null==e.y2?0:e.y2;return e.global||(n=n*i.width+i.x,o=o*i.width+i.x,a=a*i.height+i.y,r=r*i.height+i.y),n=isNaN(n)?0:n,o=isNaN(o)?1:o,a=isNaN(a)?0:a,r=isNaN(r)?0:r,t.createLinearGradient(n,a,o,r)}function Se(t,e,i){var n=i.width,o=i.height,a=Math.min(n,o),r=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;return e.global||(r=r*n+i.x,s=s*o+i.y,l*=a),t.createRadialGradient(r,s,0,r,s,l)}function Me(){return!1}function Ie(t,e,i){var n=iw(),o=e.getWidth(),a=e.getHeight(),r=n.style;return r&&(r.position="absolute",r.left=0,r.top=0,r.width=o+"px",r.height=a+"px",n.setAttribute("data-zr-dom-id",t)),n.width=o*i,n.height=a*i,n}function Te(t){if("string"==typeof t){var e=mb.get(t);return e&&e.image}return t}function Ae(t,e,i,n,o){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!i)return e;var a=mb.get(t),r={hostEl:i,cb:n,cbPayload:o};return a?!Ce(e=a.image)&&a.pending.push(r):((e=new Image).onload=e.onerror=De,mb.put(t,e.__cachedImgObj={image:e,pending:[r]}),e.src=e.__zrImageSrc=t),e}return t}return e}function De(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;exb&&(yb=0,vb={}),yb++,vb[i]=o,o}function ke(t,e,i,n,o,a,r,s){return r?Ne(t,e,i,n,o,a,r,s):Pe(t,e,i,n,o,a,s)}function Pe(t,e,i,n,o,a,r){var s=He(t,e,o,a,r),l=Le(t,e);o&&(l+=o[1]+o[3]);var u=s.outerHeight,h=new de(Oe(0,l,i),Ee(0,u,n),l,u);return h.lineHeight=s.lineHeight,h}function Ne(t,e,i,n,o,a,r,s){var l=Ze(t,{rich:r,truncate:s,font:e,textAlign:i,textPadding:o,textLineHeight:a}),u=l.outerWidth,h=l.outerHeight;return new de(Oe(0,u,i),Ee(0,h,n),u,h)}function Oe(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function Ee(t,e,i){return"middle"===i?t-=e/2:"bottom"===i&&(t-=e),t}function Re(t,e,i){var n=e.x,o=e.y,a=e.height,r=e.width,s=a/2,l="left",u="top";switch(t){case"left":n-=i,o+=s,l="right",u="middle";break;case"right":n+=i+r,o+=s,u="middle";break;case"top":n+=r/2,o-=i,l="center",u="bottom";break;case"bottom":n+=r/2,o+=a+i,l="center";break;case"inside":n+=r/2,o+=s,l="center",u="middle";break;case"insideLeft":n+=i,o+=s,u="middle";break;case"insideRight":n+=r-i,o+=s,l="right",u="middle";break;case"insideTop":n+=r/2,o+=i,l="center";break;case"insideBottom":n+=r/2,o+=a-i,l="center",u="bottom";break;case"insideTopLeft":n+=i,o+=i;break;case"insideTopRight":n+=r-i,o+=i,l="right";break;case"insideBottomLeft":n+=i,o+=a-i,u="bottom";break;case"insideBottomRight":n+=r-i,o+=a-i,l="right",u="bottom"}return{x:n,y:o,textAlign:l,textVerticalAlign:u}}function ze(t,e,i,n,o){if(!e)return"";var a=(t+"").split("\n");o=Be(e,i,n,o);for(var r=0,s=a.length;r=r;l++)s-=r;var u=Le(i,e);return u>s&&(i="",u=0),s=t-u,n.ellipsis=i,n.ellipsisWidth=u,n.contentWidth=s,n.containerWidth=t,n}function Ve(t,e){var i=e.containerWidth,n=e.font,o=e.contentWidth;if(!i)return"";var a=Le(t,n);if(a<=i)return t;for(var r=0;;r++){if(a<=o||r>=e.maxIterations){t+=e.ellipsis;break}var s=0===r?Ge(t,o,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*o/a):0;a=Le(t=t.substr(0,s),n)}return""===t&&(t=e.placeholder),t}function Ge(t,e,i,n){for(var o=0,a=0,r=t.length;au)t="",r=[];else if(null!=h)for(var c=Be(h-(i?i[1]+i[3]:0),e,o.ellipsis,{minChar:o.minChar,placeholder:o.placeholder}),d=0,f=r.length;do&&Ue(i,t.substring(o,a)),Ue(i,n[2],n[1]),o=_b.lastIndex}of)return{lines:[],width:0,height:0};k.textWidth=Le(k.text,_);var b=y.textWidth,S=null==b||"auto"===b;if("string"==typeof b&&"%"===b.charAt(b.length-1))k.percentWidth=b,u.push(k),b=0;else{if(S){b=k.textWidth;var M=y.textBackgroundColor,I=M&&M.image;I&&Ce(I=Te(I))&&(b=Math.max(b,I.width*w/I.height))}var T=x?x[1]+x[3]:0;b+=T;var C=null!=d?d-m:null;null!=C&&Cl&&(i*=l/(c=i+n),n*=l/c),o+a>l&&(o*=l/(c=o+a),a*=l/c),n+o>u&&(n*=u/(c=n+o),o*=u/c),i+a>u&&(i*=u/(c=i+a),a*=u/c),t.moveTo(r+i,s),t.lineTo(r+l-n,s),0!==n&&t.arc(r+l-n,s+n,n,-Math.PI/2,0),t.lineTo(r+l,s+u-o),0!==o&&t.arc(r+l-o,s+u-o,o,0,Math.PI/2),t.lineTo(r+a,s+u),0!==a&&t.arc(r+a,s+u-a,a,Math.PI/2,Math.PI),t.lineTo(r,s+i),0!==i&&t.arc(r+i,s+i,i,Math.PI,1.5*Math.PI)}function Ye(t){return qe(t),d(t.rich,qe),t}function qe(t){if(t){t.font=Xe(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||Mb[e]?e:"left";var i=t.textVerticalAlign||t.textBaseline;"center"===i&&(i="middle"),t.textVerticalAlign=null==i||Ib[i]?i:"top",t.textPadding&&(t.textPadding=L(t.textPadding))}}function Ke(t,e,i,n,o,a){n.rich?Je(t,e,i,n,o,a):$e(t,e,i,n,o,a)}function $e(t,e,i,n,o,a){var r,s=ii(n),l=!1,u=e.__attrCachedBy===rb.PLAIN_TEXT;a!==sb?(a&&(r=a.style,l=!s&&u&&r),e.__attrCachedBy=s?rb.NONE:rb.PLAIN_TEXT):u&&(e.__attrCachedBy=rb.NONE);var h=n.font||Sb;l&&h===(r.font||Sb)||(e.font=h);var c=t.__computedFont;t.__styleFont!==h&&(t.__styleFont=h,c=t.__computedFont=e.font);var d=n.textPadding,f=n.textLineHeight,p=t.__textCotentBlock;p&&!t.__dirtyText||(p=t.__textCotentBlock=He(i,c,d,f,n.truncate));var g=p.outerHeight,m=p.lines,v=p.lineHeight,y=ai(g,n,o),x=y.baseX,_=y.baseY,w=y.textAlign||"left",b=y.textVerticalAlign;ti(e,n,o,x,_);var S=Ee(_,g,b),M=x,I=S;if(s||d){var T=Le(i,c);d&&(T+=d[1]+d[3]);var A=Oe(x,T,w);s&&ni(t,e,n,A,S,T,g),d&&(M=hi(x,w,d),I+=d[0])}e.textAlign=w,e.textBaseline="middle",e.globalAlpha=n.opacity||1;for(B=0;B=0&&"right"===(_=b[C]).textAlign;)ei(t,e,_,n,M,v,D,"right"),I-=_.width,D-=_.width,C--;for(A+=(a-(A-m)-(y-D)-I)/2;T<=C;)ei(t,e,_=b[T],n,M,v,A+_.width/2,"center"),A+=_.width,T++;v+=M}}function ti(t,e,i,n,o){if(i&&e.textRotation){var a=e.textOrigin;"center"===a?(n=i.width/2+i.x,o=i.height/2+i.y):a&&(n=a[0]+i.x,o=a[1]+i.y),t.translate(n,o),t.rotate(-e.textRotation),t.translate(-n,-o)}}function ei(t,e,i,n,o,a,r,s){var l=n.rich[i.styleName]||{};l.text=i.text;var u=i.textVerticalAlign,h=a+o/2;"top"===u?h=a+i.height/2:"bottom"===u&&(h=a+o-i.height/2),!i.isLineHolder&&ii(l)&&ni(t,e,l,"right"===s?r-i.width:"center"===s?r-i.width/2:r,h-i.height/2,i.width,i.height);var c=i.textPadding;c&&(r=hi(r,s,c),h-=i.height/2-c[2]-i.textHeight/2),ri(e,"shadowBlur",D(l.textShadowBlur,n.textShadowBlur,0)),ri(e,"shadowColor",l.textShadowColor||n.textShadowColor||"transparent"),ri(e,"shadowOffsetX",D(l.textShadowOffsetX,n.textShadowOffsetX,0)),ri(e,"shadowOffsetY",D(l.textShadowOffsetY,n.textShadowOffsetY,0)),ri(e,"textAlign",s),ri(e,"textBaseline","middle"),ri(e,"font",i.font||Sb);var d=si(l.textStroke||n.textStroke,p),f=li(l.textFill||n.textFill),p=A(l.textStrokeWidth,n.textStrokeWidth);d&&(ri(e,"lineWidth",p),ri(e,"strokeStyle",d),e.strokeText(i.text,r,h)),f&&(ri(e,"fillStyle",f),e.fillText(i.text,r,h))}function ii(t){return!!(t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor)}function ni(t,e,i,n,o,a,r){var s=i.textBackgroundColor,l=i.textBorderWidth,u=i.textBorderColor,h=_(s);if(ri(e,"shadowBlur",i.textBoxShadowBlur||0),ri(e,"shadowColor",i.textBoxShadowColor||"transparent"),ri(e,"shadowOffsetX",i.textBoxShadowOffsetX||0),ri(e,"shadowOffsetY",i.textBoxShadowOffsetY||0),h||l&&u){e.beginPath();var c=i.textBorderRadius;c?je(e,{x:n,y:o,width:a,height:r,r:c}):e.rect(n,o,a,r),e.closePath()}if(h)if(ri(e,"fillStyle",s),null!=i.fillOpacity){f=e.globalAlpha;e.globalAlpha=i.fillOpacity*i.opacity,e.fill(),e.globalAlpha=f}else e.fill();else if(w(s)){var d=s.image;(d=Ae(d,null,t,oi,s))&&Ce(d)&&e.drawImage(d,n,o,a,r)}if(l&&u)if(ri(e,"lineWidth",l),ri(e,"strokeStyle",u),null!=i.strokeOpacity){var f=e.globalAlpha;e.globalAlpha=i.strokeOpacity*i.opacity,e.stroke(),e.globalAlpha=f}else e.stroke()}function oi(t,e){e.image=t}function ai(t,e,i){var n=e.x||0,o=e.y||0,a=e.textAlign,r=e.textVerticalAlign;if(i){var s=e.textPosition;if(s instanceof Array)n=i.x+ui(s[0],i.width),o=i.y+ui(s[1],i.height);else{var l=Re(s,i,e.textDistance);n=l.x,o=l.y,a=a||l.textAlign,r=r||l.textVerticalAlign}var u=e.textOffset;u&&(n+=u[0],o+=u[1])}return{baseX:n,baseY:o,textAlign:a,textVerticalAlign:r}}function ri(t,e,i){return t[e]=ab(t,e,i),t[e]}function si(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function li(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function ui(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function hi(t,e,i){return"right"===e?t-i[1]:"center"===e?t+i[3]/2-i[1]/2:t+i[3]}function ci(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function di(t){t=t||{},Kw.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new ub(t.style,this),this._rect=null,this.__clipPaths=[]}function fi(t){di.call(this,t)}function pi(t){return parseInt(t,10)}function gi(t){return!!t&&(!!t.__builtin__||"function"==typeof t.resize&&"function"==typeof t.refresh)}function mi(t,e,i){return Cb.copy(t.getBoundingRect()),t.transform&&Cb.applyTransform(t.transform),Lb.width=e,Lb.height=i,!Cb.intersect(Lb)}function vi(t,e){if(t===e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i=i.length&&i.push({option:t})}}),i}function Ni(t){var e=R();Zb(t,function(t,i){var n=t.exist;n&&e.set(n.id,t)}),Zb(t,function(t,i){var n=t.option;k(!n||null==n.id||!e.get(n.id)||e.get(n.id)===t,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&e.set(n.id,t),!t.keyInfo&&(t.keyInfo={})}),Zb(t,function(t,i){var n=t.exist,o=t.option,a=t.keyInfo;if(Ub(o)){if(a.name=null!=o.name?o.name+"":n?n.name:jb+i,n)a.id=n.id;else if(null!=o.id)a.id=o.id+"";else{var r=0;do{a.id="\0"+a.name+"\0"+r++}while(e.get(a.id))}e.set(a.id,t)}})}function Oi(t){var e=t.name;return!(!e||!e.indexOf(jb))}function Ei(t){return Ub(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Ri(t,e){function i(t,e,i){for(var n=0,o=t.length;n-rS&&trS||t<-rS}function tn(t,e,i,n,o){var a=1-o;return a*a*(a*t+3*o*e)+o*o*(o*n+3*a*i)}function en(t,e,i,n,o){var a=1-o;return 3*(((e-t)*a+2*(i-e)*o)*a+(n-i)*o*o)}function nn(t,e,i,n,o,a){var r=n+3*(e-i)-t,s=3*(i-2*e+t),l=3*(e-t),u=t-o,h=s*s-3*r*l,c=s*l-9*r*u,d=l*l-3*s*u,f=0;if(Ji(h)&&Ji(c))Ji(s)?a[0]=0:(M=-l/s)>=0&&M<=1&&(a[f++]=M);else{var p=c*c-4*h*d;if(Ji(p)){var g=c/h,m=-g/2;(M=-s/r+g)>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m)}else if(p>0){var v=aS(p),y=h*s+1.5*r*(-c+v),x=h*s+1.5*r*(-c-v);(M=(-s-((y=y<0?-oS(-y,uS):oS(y,uS))+(x=x<0?-oS(-x,uS):oS(x,uS))))/(3*r))>=0&&M<=1&&(a[f++]=M)}else{var _=(2*h*s-3*r*c)/(2*aS(h*h*h)),w=Math.acos(_)/3,b=aS(h),S=Math.cos(w),M=(-s-2*b*S)/(3*r),m=(-s+b*(S+lS*Math.sin(w)))/(3*r),I=(-s+b*(S-lS*Math.sin(w)))/(3*r);M>=0&&M<=1&&(a[f++]=M),m>=0&&m<=1&&(a[f++]=m),I>=0&&I<=1&&(a[f++]=I)}}return f}function on(t,e,i,n,o){var a=6*i-12*e+6*t,r=9*e+3*n-3*t-9*i,s=3*e-3*t,l=0;if(Ji(r))Qi(a)&&(c=-s/a)>=0&&c<=1&&(o[l++]=c);else{var u=a*a-4*r*s;if(Ji(u))o[0]=-a/(2*r);else if(u>0){var h=aS(u),c=(-a+h)/(2*r),d=(-a-h)/(2*r);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function an(t,e,i,n,o,a){var r=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,u=(s-r)*o+r,h=(l-s)*o+s,c=(h-u)*o+u;a[0]=t,a[1]=r,a[2]=u,a[3]=c,a[4]=c,a[5]=h,a[6]=l,a[7]=n}function rn(t,e,i,n,o,a,r,s,l,u,h){var c,d,f,p,g,m=.005,v=1/0;hS[0]=l,hS[1]=u;for(var y=0;y<1;y+=.05)cS[0]=tn(t,i,o,r,y),cS[1]=tn(e,n,a,s,y),(p=hw(hS,cS))=0&&p=0&&c<=1&&(o[l++]=c);else{var u=r*r-4*a*s;if(Ji(u))(c=-r/(2*a))>=0&&c<=1&&(o[l++]=c);else if(u>0){var h=aS(u),c=(-r+h)/(2*a),d=(-r-h)/(2*a);c>=0&&c<=1&&(o[l++]=c),d>=0&&d<=1&&(o[l++]=d)}}return l}function hn(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function cn(t,e,i,n,o){var a=(e-t)*n+t,r=(i-e)*n+e,s=(r-a)*n+a;o[0]=t,o[1]=a,o[2]=s,o[3]=s,o[4]=r,o[5]=i}function dn(t,e,i,n,o,a,r,s,l){var u,h=.005,c=1/0;hS[0]=r,hS[1]=s;for(var d=0;d<1;d+=.05)cS[0]=sn(t,i,o,d),cS[1]=sn(e,n,a,d),(m=hw(hS,cS))=0&&m1e-4)return s[0]=t-i,s[1]=e-n,l[0]=t+i,void(l[1]=e+n);if(yS[0]=mS(o)*i+t,yS[1]=gS(o)*n+e,xS[0]=mS(a)*i+t,xS[1]=gS(a)*n+e,u(s,yS,xS),h(l,yS,xS),(o%=vS)<0&&(o+=vS),(a%=vS)<0&&(a+=vS),o>a&&!r?a+=vS:oo&&(_S[0]=mS(f)*i+t,_S[1]=gS(f)*n+e,u(s,_S,s),h(l,_S,l))}function yn(t,e,i,n,o,a,r){if(0===o)return!1;var s=o,l=0,u=t;if(r>e+s&&r>n+s||rt+s&&a>i+s||ae+c&&h>n+c&&h>a+c&&h>s+c||ht+c&&u>i+c&&u>o+c&&u>r+c||ue+u&&l>n+u&&l>a+u||lt+u&&s>i+u&&s>o+u||si||h+uo&&(o+=zS);var d=Math.atan2(l,s);return d<0&&(d+=zS),d>=n&&d<=o||d+zS>=n&&d+zS<=o}function Sn(t,e,i,n,o,a){if(a>e&&a>n||ao?r:0}function Mn(t,e){return Math.abs(t-e)e&&u>n&&u>a&&u>s||u1&&In(),c=tn(e,n,a,s,WS[0]),p>1&&(d=tn(e,n,a,s,WS[1]))),2===p?me&&s>n&&s>a||s=0&&u<=1){for(var h=0,c=sn(e,n,a,u),d=0;di||s<-i)return 0;u=Math.sqrt(i*i-s*s);FS[0]=-u,FS[1]=u;var l=Math.abs(n-o);if(l<1e-4)return 0;if(l%VS<1e-4){n=0,o=VS;p=a?1:-1;return r>=FS[0]+t&&r<=FS[1]+t?p:0}if(a){var u=n;n=wn(o),o=wn(u)}else n=wn(n),o=wn(o);n>o&&(o+=VS);for(var h=0,c=0;c<2;c++){var d=FS[c];if(d+t>r){var f=Math.atan2(s,d),p=a?1:-1;f<0&&(f=VS+f),(f>=n&&f<=o||f+VS>=n&&f+VS<=o)&&(f>Math.PI/2&&f<1.5*Math.PI&&(p=-p),h+=p)}}return h}function Cn(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,u=0,h=0;h1&&(i||(a+=Sn(r,s,l,u,n,o))),1===h&&(l=r=t[h],u=s=t[h+1]),c){case BS.M:r=l=t[h++],s=u=t[h++];break;case BS.L:if(i){if(yn(r,s,t[h],t[h+1],e,n,o))return!0}else a+=Sn(r,s,t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case BS.C:if(i){if(xn(r,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],e,n,o))return!0}else a+=Tn(r,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case BS.Q:if(i){if(_n(r,s,t[h++],t[h++],t[h],t[h+1],e,n,o))return!0}else a+=An(r,s,t[h++],t[h++],t[h],t[h+1],n,o)||0;r=t[h++],s=t[h++];break;case BS.A:var d=t[h++],f=t[h++],p=t[h++],g=t[h++],m=t[h++],v=t[h++];h+=1;var y=1-t[h++],x=Math.cos(m)*p+d,_=Math.sin(m)*g+f;h>1?a+=Sn(r,s,x,_,n,o):(l=x,u=_);var w=(n-d)*g/p+d;if(i){if(bn(d,f,g,m,m+v,y,e,w,o))return!0}else a+=Dn(d,f,g,m,m+v,y,w,o);r=Math.cos(m+v)*p+d,s=Math.sin(m+v)*g+f;break;case BS.R:l=r=t[h++],u=s=t[h++];var x=l+t[h++],_=u+t[h++];if(i){if(yn(l,u,x,u,e,n,o)||yn(x,u,x,_,e,n,o)||yn(x,_,l,_,e,n,o)||yn(l,_,l,u,e,n,o))return!0}else a+=Sn(x,u,x,_,n,o),a+=Sn(l,_,l,u,n,o);break;case BS.Z:if(i){if(yn(r,s,l,u,e,n,o))return!0}else a+=Sn(r,s,l,u,n,o);r=l,s=u}}return i||Mn(s,u)||(a+=Sn(r,s,l,u,n,o)||0),0!==a}function Ln(t,e,i){return Cn(t,0,!1,e,i)}function kn(t,e,i,n){return Cn(t,e,!0,i,n)}function Pn(t){di.call(this,t),this.path=null}function Nn(t,e,i,n,o,a,r,s,l,u,h){var c=l*(tM/180),d=QS(c)*(t-i)/2+JS(c)*(e-n)/2,f=-1*JS(c)*(t-i)/2+QS(c)*(e-n)/2,p=d*d/(r*r)+f*f/(s*s);p>1&&(r*=$S(p),s*=$S(p));var g=(o===a?-1:1)*$S((r*r*(s*s)-r*r*(f*f)-s*s*(d*d))/(r*r*(f*f)+s*s*(d*d)))||0,m=g*r*f/s,v=g*-s*d/r,y=(t+i)/2+QS(c)*m-JS(c)*v,x=(e+n)/2+JS(c)*m+QS(c)*v,_=nM([1,0],[(d-m)/r,(f-v)/s]),w=[(d-m)/r,(f-v)/s],b=[(-1*d-m)/r,(-1*f-v)/s],S=nM(w,b);iM(w,b)<=-1&&(S=tM),iM(w,b)>=1&&(S=0),0===a&&S>0&&(S-=2*tM),1===a&&S<0&&(S+=2*tM),h.addData(u,y,x,r,s,_,S,c,a)}function On(t){if(!t)return new ES;for(var e,i=0,n=0,o=i,a=n,r=new ES,s=ES.CMD,l=t.match(oM),u=0;u=2){if(o&&"spline"!==o){var a=fM(n,o,i,e.smoothConstraint);t.moveTo(n[0][0],n[0][1]);for(var r=n.length,s=0;s<(i?r:r-1);s++){var l=a[2*s],u=a[2*s+1],h=n[(s+1)%r];t.bezierCurveTo(l[0],l[1],u[0],u[1],h[0],h[1])}}else{"spline"===o&&(n=dM(n,i)),t.moveTo(n[0][0],n[0][1]);for(var s=1,c=n.length;s=0)?(i={textFill:null,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth},t.textFill="#fff",null==t.textStroke&&(t.textStroke=a,null==t.textStrokeWidth&&(t.textStrokeWidth=2))):null!=a&&(i={textFill:null},t.textFill=a),i&&(t.insideRollback=i)}}function bo(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth,t.insideRollback=null)}function So(t,e){var i=e||e.getModel("textStyle");return P([t.fontStyle||i&&i.getShallow("fontStyle")||"",t.fontWeight||i&&i.getShallow("fontWeight")||"",(t.fontSize||i&&i.getShallow("fontSize")||12)+"px",t.fontFamily||i&&i.getShallow("fontFamily")||"sans-serif"].join(" "))}function Mo(t,e,i,n,o,a){if("function"==typeof o&&(a=o,o=null),n&&n.isAnimationEnabled()){var r=t?"Update":"",s=n.getShallow("animationDuration"+r),l=n.getShallow("animationEasing"+r),u=n.getShallow("animationDelay"+r);"function"==typeof u&&(u=u(o,n.getAnimationDelayParams?n.getAnimationDelayParams(e,o):null)),"function"==typeof s&&(s=s(o)),s>0?e.animateTo(i,s,u||0,l,a,!!a):(e.stopAnimation(),e.attr(i),a&&a())}else e.stopAnimation(),e.attr(i),a&&a()}function Io(t,e,i,n,o){Mo(!0,t,e,i,n,o)}function To(t,e,i,n,o){Mo(!1,t,e,i,n,o)}function Ao(t,e){for(var i=_t([]);t&&t!==e;)bt(i,t.getLocalTransform(),i),t=t.parent;return i}function Do(t,e,i){return e&&!c(e)&&(e=Tw.getLocalTransform(e)),i&&(e=Tt([],e)),Q([],t,e)}function Co(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=["left"===t?-n:"right"===t?n:0,"top"===t?-o:"bottom"===t?o:0];return a=Do(a,e,i),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function Lo(t,e,i,n){function o(t){var e={position:F(t.position),rotation:t.rotation};return t.shape&&(e.shape=a({},t.shape)),e}if(t&&e){var r=function(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=r[t.anid];if(e){var n=o(t);t.attr(o(e)),Io(t,n,i,t.dataIndex)}}})}}function ko(t,e){return f(t,function(t){var i=t[0];i=LM(i,e.x),i=kM(i,e.x+e.width);var n=t[1];return n=LM(n,e.y),n=kM(n,e.y+e.height),[i,n]})}function Po(t,e,i){var n=(e=a({rectHover:!0},e)).style={strokeNoScale:!0};if(i=i||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(n.image=t.slice(8),r(n,i),new fi(e)):Xn(t.replace("path://",""),e,i,"center")}function No(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}function Oo(t,e,i){for(var n=0;n0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function Vo(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?zo(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function Go(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Fo(t){return t.sort(function(t,e){return t-e}),t}function Wo(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Ho(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var o=e.indexOf(".");return o<0?0:e.length-1-o}function Zo(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),a=Math.round(i(Math.abs(e[1]-e[0]))/n),r=Math.min(Math.max(-o+a,0),20);return isFinite(r)?r:20}function Uo(t,e,i){if(!t[e])return 0;var n=p(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return 0;for(var o=Math.pow(10,i),a=f(t,function(t){return(isNaN(t)?0:t)/n*o*100}),r=100*o,s=f(a,function(t){return Math.floor(t)}),l=p(s,function(t,e){return t+e},0),u=f(a,function(t,e){return t-s[e]});lh&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/o}function Xo(t){var e=2*Math.PI;return(t%e+e)%e}function jo(t){return t>-UM&&t=-20?+t.toFixed(n<0?-n:0):t}function Jo(t){function e(t,i,n){return t.interval[n]=0}function ta(t){return isNaN(t)?"-":(t=(t+"").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function ea(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function ia(t){return null==t?"":(t+"").replace(KM,function(t,e){return $M[e]})}function na(t,e,i){y(e)||(e=[e]);var n=e.length;if(!n)return"";for(var o=e[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:i}}:""}function ra(t,e){return t+="","0000".substr(0,e-t.length)+t}function sa(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Yo(e),o=i?"UTC":"",a=n["get"+o+"FullYear"](),r=n["get"+o+"Month"]()+1,s=n["get"+o+"Date"](),l=n["get"+o+"Hours"](),u=n["get"+o+"Minutes"](),h=n["get"+o+"Seconds"](),c=n["get"+o+"Milliseconds"]();return t=t.replace("MM",ra(r,2)).replace("M",r).replace("yyyy",a).replace("yy",a%100).replace("dd",ra(s,2)).replace("d",s).replace("hh",ra(l,2)).replace("h",l).replace("mm",ra(u,2)).replace("m",u).replace("ss",ra(h,2)).replace("s",h).replace("SSS",ra(c,3))}function la(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function ua(t,e,i,n,o){var a=0,r=0;null==n&&(n=1/0),null==o&&(o=1/0);var s=0;e.eachChild(function(l,u){var h,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===t){var m=f.width+(g?-g.x+f.x:0);(h=a+m)>n||l.newline?(a=0,h=m,r+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(g?-g.y+f.y:0);(c=r+v)>o||l.newline?(a+=s+i,r=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=r,"horizontal"===t?a=h+i:r=c+i)})}function ha(t,e,i){var n=e.width,o=e.height,a=Vo(t.x,n),r=Vo(t.y,o),s=Vo(t.x2,n),l=Vo(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=qM(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}function ca(t,e,i){i=qM(i||0);var n=e.width,o=e.height,a=Vo(t.left,n),r=Vo(t.top,o),s=Vo(t.right,n),l=Vo(t.bottom,o),u=Vo(t.width,n),h=Vo(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(u)&&(u=n-s-d-a),isNaN(h)&&(h=o-l-c-r),null!=f&&(isNaN(u)&&isNaN(h)&&(f>n/o?u=.8*n:h=.8*o),isNaN(u)&&(u=f*h),isNaN(h)&&(h=u/f)),isNaN(a)&&(a=n-s-u-d),isNaN(r)&&(r=o-l-h-c),t.left||t.right){case"center":a=n/2-u/2-i[3];break;case"right":a=n-u-d}switch(t.top||t.bottom){case"middle":case"center":r=o/2-h/2-i[0];break;case"bottom":r=o-h-c}a=a||0,r=r||0,isNaN(u)&&(u=n-d-a-(s||0)),isNaN(h)&&(h=o-c-r-(l||0));var p=new de(a+i[3],r+i[0],u,h);return p.margin=i,p}function da(t,e,i,n,o){var a=!o||!o.hv||o.hv[0],s=!o||!o.hv||o.hv[1],l=o&&o.boundingMode||"all";if(a||s){var u;if("raw"===l)u="group"===t.type?new de(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(u=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();(u=u.clone()).applyTransform(h)}e=ca(r({width:u.width,height:u.height},e),i,n);var c=t.position,d=a?e.x-u.x:0,f=s?e.y-u.y:0;t.attr("position","raw"===l?[d,f]:[c[0]+d,c[1]+f])}}function fa(t,e){return null!=t[oI[e][0]]||null!=t[oI[e][1]]&&null!=t[oI[e][2]]}function pa(t,e,i){function n(i,n){var r={},l=0,u={},h=0;if(iI(i,function(e){u[e]=t[e]}),iI(i,function(t){o(e,t)&&(r[t]=u[t]=e[t]),a(r,t)&&l++,a(u,t)&&h++}),s[n])return a(e,i[1])?u[i[2]]=null:a(e,i[2])&&(u[i[1]]=null),u;if(2!==h&&l){if(l>=2)return r;for(var c=0;ce)return t[n];return t[i-1]}function ya(t){var e=t.get("coordinateSystem"),i={coordSysName:e,coordSysDims:[],axisMap:R(),categoryAxisMap:R()},n=fI[e];if(n)return n(t,i,i.axisMap,i.categoryAxisMap),i}function xa(t){return"category"===t.get("type")}function _a(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===vI?{}:[]),this.sourceFormat=t.sourceFormat||yI,this.seriesLayoutBy=t.seriesLayoutBy||_I,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&R(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}function wa(t){var e=t.option.source,i=yI;if(S(e))i=xI;else if(y(e)){0===e.length&&(i=gI);for(var n=0,o=e.length;n=e:"max"===i?t<=e:t===e}function Xa(t,e){return t.join(",")===e.join(",")}function ja(t,e){AI(e=e||{},function(e,i){if(null!=e){var n=t[i];if(lI.hasClass(i)){e=Di(e);var o=Pi(n=Di(n),e);t[i]=CI(o,function(t){return t.option&&t.exist?LI(t.exist,t.option,!0):t.exist||t.option})}else t[i]=LI(n,e,!0)}})}function Ya(t){var e=t&&t.itemStyle;if(e)for(var i=0,o=OI.length;i=0;p--){var g=t[p];if(s||(d=g.data.rawIndexOf(g.stackedByDimension,c)),d>=0){var m=g.data.getByRawIndex(g.stackResultDimension,d);if(h>=0&&m>0||h<=0&&m<0){h+=m,f=m;break}}}return n[0]=h,n[1]=f,n});r.hostModel.setData(l),e.data=l})}function rr(t,e){_a.isInstance(t)||(t=_a.seriesDataToSource(t)),this._source=t;var i=this._data=t.data,n=t.sourceFormat;n===xI&&(this._offset=0,this._dimSize=e,this._data=i),a(this,GI[n===gI?n+"_"+t.seriesLayoutBy:n])}function sr(){return this._data.length}function lr(t){return this._data[t]}function ur(t){for(var e=0;ee.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Mr(t,e){d(t.CHANGABLE_METHODS,function(i){t.wrapMethod(i,v(Ir,e))})}function Ir(t){var e=Tr(t);e&&e.setOutputEnd(this.count())}function Tr(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var o=n.agentStubMap;o&&(n=o.get(t.uid))}return n}}function Ar(){this.group=new tb,this.uid=Ro("viewChart"),this.renderTask=gr({plan:Lr,reset:kr}),this.renderTask.context={view:this}}function Dr(t,e){if(t&&(t.trigger(e),"group"===t.type))for(var i=0;i=0?n():c=setTimeout(n,-a),u=o};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function Nr(t,e,i,n){var o=t[e];if(o){var a=o[iT]||o,r=o[oT];if(o[nT]!==i||r!==n){if(null==i||!n)return t[e]=a;(o=t[e]=Pr(a,i,"debounce"===n))[iT]=a,o[oT]=n,o[nT]=i}return o}}function Or(t,e){var i=t[e];i&&i[iT]&&(t[e]=i[iT])}function Er(t,e,i,n){this.ecInstance=t,this.api=e,this.unfinished;var i=this._dataProcessorHandlers=i.slice(),n=this._visualHandlers=n.slice();this._allHandlers=i.concat(n),this._stageTaskMap=R()}function Rr(t,e,i,n,o){function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}o=o||{};var r;d(e,function(e,s){if(!o.visualType||o.visualType===e.visualType){var l=t._stageTaskMap.get(e.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,d=h.agentStubMap;d.each(function(t){a(o,t)&&(t.dirty(),c=!0)}),c&&h.dirty(),hT(h,n);var f=t.getPerformArgs(h,o.block);d.each(function(t){t.perform(f)}),r|=h.perform(f)}else u&&u.each(function(s,l){a(o,s)&&s.dirty();var u=t.getPerformArgs(s,o.block);u.skip=!e.performRawSeries&&i.isSeriesFiltered(s.context.model),hT(s,n),r|=s.perform(u)})}}),t.unfinished|=r}function zr(t,e,i,n,o){function a(i){var a=i.uid,s=r.get(a)||r.set(a,gr({plan:Hr,reset:Zr,count:Xr}));s.context={model:i,ecModel:n,api:o,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:t},jr(t,i,s)}var r=i.seriesTaskMap||(i.seriesTaskMap=R()),s=e.seriesType,l=e.getTargetSeries;e.createOnAllSeries?n.eachRawSeries(a):s?n.eachRawSeriesByType(s,a):l&&l(n,o).each(a);var u=t._pipelineMap;r.each(function(t,e){u.get(e)||(t.dispose(),r.removeKey(e))})}function Br(t,e,i,n,o){function a(e){var i=e.uid,n=s.get(i);n||(n=s.set(i,gr({reset:Gr,onDirty:Wr})),r.dirty()),n.context={model:e,overallProgress:h,modifyOutputEnd:c},n.agent=r,n.__block=h,jr(t,e,n)}var r=i.overallTask=i.overallTask||gr({reset:Vr});r.context={ecModel:n,api:o,overallReset:e.overallReset,scheduler:t};var s=r.agentStubMap=r.agentStubMap||R(),l=e.seriesType,u=e.getTargetSeries,h=!0,c=e.modifyOutputEnd;l?n.eachRawSeriesByType(l,a):u?u(n,o).each(a):(h=!1,d(n.getSeries(),a));var f=t._pipelineMap;s.each(function(t,e){f.get(e)||(t.dispose(),r.dirty(),s.removeKey(e))})}function Vr(t){t.overallReset(t.ecModel,t.api,t.payload)}function Gr(t,e){return t.overallProgress&&Fr}function Fr(){this.agent.dirty(),this.getDownstream().dirty()}function Wr(){this.agent&&this.agent.dirty()}function Hr(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Zr(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Di(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?f(e,function(t,e){return Ur(e)}):cT}function Ur(t){return function(e,i){var n=i.data,o=i.resetDefines[t];if(o&&o.dataEach)for(var a=e.start;a0?parseInt(n,10)/100:n?parseFloat(n):0;var o=i.getAttribute("stop-color")||"#000000";e.addColorStop(n,o)}i=i.nextSibling}}function Qr(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),r(e.__inheritedStyle,t.__inheritedStyle))}function ts(t){for(var e=P(t).split(_T),i=[],n=0;n0;a-=2){var r=o[a],s=o[a-1];switch(n=n||xt(),s){case"translate":r=P(r).split(_T),St(n,n,[parseFloat(r[0]),parseFloat(r[1]||0)]);break;case"scale":r=P(r).split(_T),It(n,n,[parseFloat(r[0]),parseFloat(r[1]||r[0])]);break;case"rotate":r=P(r).split(_T),Mt(n,n,parseFloat(r[0]));break;case"skew":r=P(r).split(_T),console.warn("Skew transform is not supported yet");break;case"matrix":r=P(r).split(_T);n[0]=parseFloat(r[0]),n[1]=parseFloat(r[1]),n[2]=parseFloat(r[2]),n[3]=parseFloat(r[3]),n[4]=parseFloat(r[4]),n[5]=parseFloat(r[5])}}e.setLocalTransform(n)}}function os(t){var e=t.getAttribute("style"),i={};if(!e)return i;var n={};TT.lastIndex=0;for(var o;null!=(o=TT.exec(e));)n[o[1]]=o[2];for(var a in ST)ST.hasOwnProperty(a)&&null!=n[a]&&(i[ST[a]]=n[a]);return i}function as(t,e,i){var n=e/t.width,o=i/t.height,a=Math.min(n,o);return{scale:[a,a],position:[-(t.x+t.width/2)*a+e/2,-(t.y+t.height/2)*a+i/2]}}function rs(t,e){return(new $r).parse(t,e)}function ss(t){return function(e,i,n){e=e&&e.toLowerCase(),fw.prototype[t].call(this,e,i,n)}}function ls(){fw.call(this)}function us(t,e,n){function o(t,e){return t.__prio-e.__prio}n=n||{},"string"==typeof e&&(e=JT[e]),this.id,this.group,this._dom=t;var a=this._zr=Ii(t,{renderer:n.renderer||"canvas",devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=Pr(m(a.flush,a),17),(e=i(e))&&BI(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new Fa;var r=this._api=As(this);_e($T,o),_e(YT,o),this._scheduler=new Er(this,r,YT,$T),fw.call(this,this._ecEventProcessor=new Ds),this._messageCenter=new ls,this._initEvents(),this.resize=m(this.resize,this),this._pendingActions=[],a.animation.on("frame",this._onframe,this),vs(a,this),N(this)}function hs(t,e,i){var n,o=this._model,a=this._coordSysMgr.getCoordinateSystems();e=Vi(o,e);for(var r=0;re.get("hoverLayerThreshold")&&!U_.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function Is(t,e){var i=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.style.blend!==i&&t.setStyle("blend",i),t.eachPendingDisplayable&&t.eachPendingDisplayable(function(t){t.setStyle("blend",i)})})}function Ts(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function As(t){var e=t._coordSysMgr;return a(new Ga(t),{getCoordinateSystems:m(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e.parent}}})}function Ds(){this.eventInfo}function Cs(t){function e(t,e){for(var n=0;n65535?dA:pA}function Js(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function Qs(t,e){d(gA.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods,d(mA,function(n){t[n]=i(e[n])}),t._calculationInfo=a(e._calculationInfo)}function tl(t,e,i,n,o){var a=cA[e.type],r=n-1,s=e.name,l=t[s][r];if(l&&l.length=0?this._indices[t]:-1}function al(t,e){var i=t._idList[e];return null==i&&(i=il(t,t._idDimIdx,e)),null==i&&(i=hA+e),i}function rl(t){return y(t)||(t=[t]),t}function sl(t,e){var i=t.dimensions,n=new vA(f(i,t.getDimensionInfo,t),t.hostModel);Qs(n,t);for(var o=n._storage={},a=t._storage,r=0;r=0?(o[s]=ll(a[s]),n._rawExtent[s]=ul(),n._extent[s]=null):o[s]=a[s])}return n}function ll(t){for(var e=new Array(t.length),i=0;in&&(r=o.interval=n);var s=o.intervalPrecision=Ml(r);return Tl(o.niceTickExtent=[MA(Math.ceil(t[0]/r)*r,s),MA(Math.floor(t[1]/r)*r,s)],t),o}function Ml(t){return Ho(t)+2}function Il(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function Tl(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Il(t,0,e),Il(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Al(t,e,i,n){var o=[];if(!t)return o;e[0]1e4)return[];return e[1]>(o.length?o[o.length-1]:i[1])&&o.push(e[1]),o}function Dl(t){return t.get("stack")||AA+t.seriesIndex}function Cl(t){return t.dim+t.index}function Ll(t){var e=[],i=t.axis;if("category"===i.type){for(var n=i.getBandWidth(),o=0;o=0?"p":"n",b=m;p&&(o[r][_]||(o[r][_]={p:m,n:m}),b=o[r][_][w]);var S,M,I,T;if(g)S=b,M=(A=i.dataToPoint([x,_]))[1]+l,I=A[0]-m,T=u,Math.abs(I)a[1]?(n=a[1],o=a[0]):(n=a[0],o=a[1]);var r=e.toGlobalCoord(e.dataToCoord(0));return ro&&(r=o),r}function Vl(t,e){return VA(t,BA(e))}function Gl(t,e){var i,n,o,a=t.type,r=e.getMin(),s=e.getMax(),l=null!=r,u=null!=s,h=t.getExtent();"ordinal"===a?i=e.getCategories().length:(y(n=e.get("boundaryGap"))||(n=[n||0,n||0]),"boolean"==typeof n[0]&&(n=[0,0]),n[0]=Vo(n[0],1),n[1]=Vo(n[1],1),o=h[1]-h[0]||Math.abs(h[0])),null==r&&(r="ordinal"===a?i?0:NaN:h[0]-n[0]*o),null==s&&(s="ordinal"===a?i?i-1:NaN:h[1]+n[1]*o),"dataMin"===r?r=h[0]:"function"==typeof r&&(r=r({min:h[0],max:h[1]})),"dataMax"===s?s=h[1]:"function"==typeof s&&(s=s({min:h[0],max:h[1]})),(null==r||!isFinite(r))&&(r=NaN),(null==s||!isFinite(s))&&(s=NaN),t.setBlank(I(r)||I(s)||"ordinal"===a&&!t.getOrdinalMeta().categories.length),e.getNeedCrossZero()&&(r>0&&s>0&&!l&&(r=0),r<0&&s<0&&!u&&(s=0));var c=e.ecModel;if(c&&"time"===a){var f,p=kl("bar",c);if(d(p,function(t){f|=t.getBaseAxis()===e.axis}),f){var g=Pl(p),m=Fl(r,s,e,g);r=m.min,s=m.max}}return[r,s]}function Fl(t,e,i,n){var o=i.axis.getExtent(),a=o[1]-o[0],r=Ol(n,i.axis);if(void 0===r)return{min:t,max:e};var s=1/0;d(r,function(t){s=Math.min(t.offset,s)});var l=-1/0;d(r,function(t){l=Math.max(t.offset+t.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/a)-h;return e+=c*(l/u),t-=c*(s/u),{min:t,max:e}}function Wl(t,e){var i=Gl(t,e),n=null!=e.getMin(),o=null!=e.getMax(),a=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var r=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:a,fixMin:n,fixMax:o,minInterval:"interval"===r||"time"===r?e.get("minInterval"):null,maxInterval:"interval"===r||"time"===r?e.get("maxInterval"):null});var s=e.get("interval");null!=s&&t.setInterval&&t.setInterval(s)}function Hl(t,e){if(e=e||t.get("type"))switch(e){case"category":return new SA(t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),[1/0,-1/0]);case"value":return new TA;default:return(xl.getClass(e)||TA).create(t)}}function Zl(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)}function Ul(t){var e=t.getLabelModel().get("formatter"),i="category"===t.type?t.scale.getExtent()[0]:null;return"string"==typeof e?e=function(e){return function(i){return i=t.scale.getLabel(i),e.replace("{value}",null!=i?i:"")}}(e):"function"==typeof e?function(n,o){return null!=i&&(o=n-i),e(Xl(t,n),o)}:function(e){return t.scale.getLabel(e)}}function Xl(t,e){return"category"===t.type?t.scale.getLabel(e):e}function jl(t){var e=t.model,i=t.scale;if(e.get("axisLabel.show")&&!i.isBlank()){var n,o,a="category"===t.type,r=i.getExtent();o=a?i.count():(n=i.getTicks()).length;var s,l=t.getLabelModel(),u=Ul(t),h=1;o>40&&(h=Math.ceil(o/40));for(var c=0;c>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}function ou(t){return"category"===t.type?ru(t):uu(t)}function au(t,e){return"category"===t.type?lu(t,e):{ticks:t.scale.getTicks()}}function ru(t){var e=t.getLabelModel(),i=su(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:i.labelCategoryInterval}:i}function su(t,e){var i=hu(t,"labels"),n=ql(e),o=cu(i,n);if(o)return o;var a,r;return a=x(n)?vu(t,n):mu(t,r="auto"===n?fu(t):n),du(i,n,{labels:a,labelCategoryInterval:r})}function lu(t,e){var i=hu(t,"ticks"),n=ql(e),o=cu(i,n);if(o)return o;var a,r;if(e.get("show")&&!t.scale.isBlank()||(a=[]),x(n))a=vu(t,n,!0);else if("auto"===n){var s=su(t,t.getLabelModel());r=s.labelCategoryInterval,a=f(s.labels,function(t){return t.tickValue})}else a=mu(t,r=n,!0);return du(i,n,{ticks:a,tickCategoryInterval:r})}function uu(t){var e=t.scale.getTicks(),i=Ul(t);return{labels:f(e,function(e,n){return{formattedLabel:i(e,n),rawLabel:t.scale.getLabel(e),tickValue:e}})}}function hu(t,e){return nD(t)[e]||(nD(t)[e]=[])}function cu(t,e){for(var i=0;i40&&(s=Math.max(1,Math.floor(r/40)));for(var l=a[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(n)),c=Math.abs(u*Math.sin(n)),d=0,f=0;l<=a[1];l+=s){var p=0,g=0,m=ke(i(l),e.font,"center","top");p=1.3*m.width,g=1.3*m.height,d=Math.max(d,p,7),f=Math.max(f,g,7)}var v=d/h,y=f/c;isNaN(v)&&(v=1/0),isNaN(y)&&(y=1/0);var x=Math.max(0,Math.floor(Math.min(v,y))),_=nD(t.model),w=_.lastAutoInterval,b=_.lastTickCount;return null!=w&&null!=b&&Math.abs(w-x)<=1&&Math.abs(b-r)<=1&&w>x?x=w:(_.lastTickCount=r,_.lastAutoInterval=x),x}function gu(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function mu(t,e,i){function n(t){l.push(i?t:{formattedLabel:o(t),rawLabel:a.getLabel(t),tickValue:t})}var o=Ul(t),a=t.scale,r=a.getExtent(),s=t.getLabelModel(),l=[],u=Math.max((e||0)+1,1),h=r[0],c=a.count();0!==h&&u>1&&c/u>2&&(h=Math.round(Math.ceil(h/u)*u));var d=Kl(t),f=s.get("showMinLabel")||d,p=s.get("showMaxLabel")||d;f&&h!==r[0]&&n(r[0]);for(var g=h;g<=r[1];g+=u)n(g);return p&&g!==r[1]&&n(r[1]),l}function vu(t,e,i){var n=t.scale,o=Ul(t),a=[];return d(n.getTicks(),function(t){var r=n.getLabel(t);e(t,r)&&a.push(i?t:{formattedLabel:o(t),rawLabel:r,tickValue:t})}),a}function yu(t,e){var i=(t[1]-t[0])/e/2;t[0]+=i,t[1]-=i}function xu(t,e,i,n,o){function a(t,e){return h?t>e:t0&&(t.coord-=u/(2*(e+1)))}),s={coord:e[r-1].coord+u},e.push(s)}var h=l[0]>l[1];a(e[0].coord,l[0])&&(o?e[0].coord=l[0]:e.shift()),o&&a(l[0],e[0].coord)&&e.unshift({coord:l[0]}),a(l[1],s.coord)&&(o?s.coord=l[1]:e.pop()),o&&a(s.coord,l[1])&&e.push({coord:l[1]})}}function _u(t,e){var i=t.mapDimension("defaultedLabel",!0),n=i.length;if(1===n)return fr(t,e,i[0]);if(n){for(var o=[],a=0;a0?i=n[0]:n[1]<0&&(i=n[1]),i}function Ou(t,e,i,n){var o=NaN;t.stacked&&(o=i.get(i.getCalculationInfo("stackedOverDimension"),n)),isNaN(o)&&(o=t.valueStart);var a=t.baseDataOffset,r=[];return r[a]=i.get(t.baseDim,n),r[1-a]=o,e.dataToPoint(r)}function Eu(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}function Ru(t){return isNaN(t[0])||isNaN(t[1])}function zu(t,e,i,n,o,a,r,s,l,u,h){return"none"!==u&&u?Bu.apply(this,arguments):Vu.apply(this,arguments)}function Bu(t,e,i,n,o,a,r,s,l,u,h){for(var c=0,d=i,f=0;f=o||d<0)break;if(Ru(p)){if(h){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]);else if(l>0){var g=e[c],m="y"===u?1:0,v=(p[m]-g[m])*l;_D(bD,g),bD[m]=g[m]+v,_D(SD,p),SD[m]=p[m]-v,t.bezierCurveTo(bD[0],bD[1],SD[0],SD[1],p[0],p[1])}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Vu(t,e,i,n,o,a,r,s,l,u,h){for(var c=0,d=i,f=0;f=o||d<0)break;if(Ru(p)){if(h){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]),_D(bD,p);else if(l>0){var g=d+a,m=e[g];if(h)for(;m&&Ru(e[g]);)m=e[g+=a];var v=.5,y=e[c];if(!(m=e[g])||Ru(m))_D(SD,p);else{Ru(m)&&!h&&(m=p),U(wD,m,y);var x,_;if("x"===u||"y"===u){var w="x"===u?0:1;x=Math.abs(p[w]-y[w]),_=Math.abs(p[w]-m[w])}else x=uw(p,y),_=uw(p,m);xD(SD,p,wD,-l*(1-(v=_/(_+x))))}vD(bD,bD,s),yD(bD,bD,r),vD(SD,SD,s),yD(SD,SD,r),t.bezierCurveTo(bD[0],bD[1],SD[0],SD[1],p[0],p[1]),xD(bD,p,wD,l*v)}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Gu(t,e){var i=[1/0,1/0],n=[-1/0,-1/0];if(e)for(var o=0;on[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}function Fu(t,e){if(t.length===e.length){for(var i=0;ie[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function Zu(t,e,i){if(!i.valueDim)return[];for(var n=[],o=0,a=e.count();oa[1]&&a.reverse();var r=o.getExtent(),s=Math.PI/180;i&&(a[0]-=.5,a[1]+=.5);var l=new hM({shape:{cx:Go(t.cx,1),cy:Go(t.cy,1),r0:Go(a[0],1),r:Go(a[1],1),startAngle:-r[0]*s,endAngle:-r[1]*s,clockwise:o.inverse}});return e&&(l.shape.endAngle=-r[0]*s,To(l,{shape:{endAngle:-r[1]*s}},n)),l}function ju(t,e,i,n){return"polar"===t.type?Xu(t,e,i,n):Uu(t,e,i,n)}function Yu(t,e,i){for(var n=e.getBaseAxis(),o="x"===n.dim||"radius"===n.dim?0:1,a=[],r=0;r=0;a--){var r=i[a].dimension,s=t.dimensions[r],l=t.getDimensionInfo(s);if("x"===(n=l&&l.coordDim)||"y"===n){o=i[a];break}}if(o){var u=e.getAxis(n),h=f(o.stops,function(t){return{coord:u.toGlobalCoord(u.dataToCoord(t.value)),color:t.color}}),c=h.length,p=o.outerColors.slice();c&&h[0].coord>h[c-1].coord&&(h.reverse(),p.reverse());var g=h[0].coord-10,m=h[c-1].coord+10,v=m-g;if(v<.001)return"transparent";d(h,function(t){t.offset=(t.coord-g)/v}),h.push({offset:c?h[c-1].offset:.5,color:p[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:p[0]||"transparent"});var y=new TM(0,0,0,0,h,!0);return y[n]=g,y[n+"2"]=m,y}}}function Ku(t,e,i){var n=t.get("showAllSymbol"),o="auto"===n;if(!n||o){var a=i.getAxesByScale("ordinal")[0];if(a&&(!o||!$u(a,e))){var r=e.mapDimension(a.dim),s={};return d(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(r,t))}}}}function $u(t,e){var i=t.getExtent(),n=Math.abs(i[1]-i[0])/t.scale.count();isNaN(n)&&(n=0);for(var o=e.count(),a=Math.max(1,Math.round(o/5)),r=0;rn)return!1;return!0}function Ju(t){return this._axes[t]}function Qu(t){LD.call(this,t)}function th(t,e){return e.type||(e.data?"category":"value")}function eh(t,e,i){return t.getCoordSysModel()===e}function ih(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}function nh(t,e,i,n){function o(t){return t.dim+"_"+t.index}i.getAxesOnZeroOf=function(){return a?[a]:[]};var a,r=t[e],s=i.model,l=s.get("axisLine.onZero"),u=s.get("axisLine.onZeroAxisIndex");if(l){if(null!=u)oh(r[u])&&(a=r[u]);else for(var h in r)if(r.hasOwnProperty(h)&&oh(r[h])&&!n[o(r[h])]){a=r[h];break}a&&(n[o(a)]=!0)}}function oh(t){return t&&"category"!==t.type&&"time"!==t.type&&Zl(t)}function ah(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function rh(t,e){return f(VD,function(e){return t.getReferringComponents(e)[0]})}function sh(t){return"cartesian2d"===t.get("coordinateSystem")}function lh(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e}function uh(t,e,i,n){var o,a,r=Xo(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;return jo(r-GD/2)?(a=l?"bottom":"top",o="center"):jo(r-1.5*GD)?(a=l?"top":"bottom",o="center"):(a="middle",o=r<1.5*GD&&r>GD/2?l?"left":"right":l?"right":"left"),{rotation:r,textAlign:o,textVerticalAlign:a}}function hh(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}function ch(t,e,i){if(!Kl(t.axis)){var n=t.get("axisLabel.showMinLabel"),o=t.get("axisLabel.showMaxLabel");e=e||[],i=i||[];var a=e[0],r=e[1],s=e[e.length-1],l=e[e.length-2],u=i[0],h=i[1],c=i[i.length-1],d=i[i.length-2];!1===n?(dh(a),dh(u)):fh(a,r)&&(n?(dh(r),dh(h)):(dh(a),dh(u))),!1===o?(dh(s),dh(c)):fh(l,s)&&(o?(dh(l),dh(d)):(dh(s),dh(c)))}}function dh(t){t&&(t.ignore=!0)}function fh(t,e,i){var n=t&&t.getBoundingRect().clone(),o=e&&e.getBoundingRect().clone();if(n&&o){var a=_t([]);return Mt(a,a,-t.rotation),n.applyTransform(bt([],a,t.getLocalTransform())),o.applyTransform(bt([],a,e.getLocalTransform())),n.intersect(o)}}function ph(t){return"middle"===t||"center"===t}function gh(t,e,i){var n=e.axis;if(e.get("axisTick.show")&&!n.scale.isBlank()){for(var o=e.getModel("axisTick"),a=o.getModel("lineStyle"),s=o.get("length"),l=n.getTicksCoords(),u=[],h=[],c=t._transform,d=[],f=0;f=0||t===e}function Sh(t){var e=Mh(t);if(e){var i=e.axisPointerModel,n=e.axis.scale,o=i.option,a=i.get("status"),r=i.get("value");null!=r&&(r=n.parse(r));var s=Th(i);null==a&&(o.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r0?"bottom":"top":o.width>0?"left":"right";l||kh(t.style,d,n,u,a,i,p),fo(t,d)}function Rh(t,e){var i=t.get(tC)||0;return Math.min(i,Math.abs(e.width),Math.abs(e.height))}function zh(t,e,i){var n=t.getData(),o=[],a=n.getLayout("valueAxisHorizontal")?1:0;o[1-a]=n.getLayout("valueAxisStart");var r=new nC({shape:{points:n.getLayout("largePoints")},incremental:!!i,__startPoint:o,__valueIdx:a});e.add(r),Bh(r,t,n)}function Bh(t,e,i){var n=i.getVisual("borderColor")||i.getVisual("color"),o=e.getModel("itemStyle").getItemStyle(["color","borderColor"]);t.useStyle(o),t.style.fill=null,t.style.stroke=n,t.style.lineWidth=i.getLayout("barWidth")}function Vh(t,e,i,n){var o=e.getData(),a=this.dataIndex,r=o.getName(a),s=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:r,seriesId:e.id}),o.each(function(t){Gh(o.getItemGraphicEl(t),o.getItemLayout(t),e.isSelected(o.getName(t)),s,i)})}function Gh(t,e,i,n,o){var a=(e.startAngle+e.endAngle)/2,r=Math.cos(a),s=Math.sin(a),l=i?n:0,u=[r*l,s*l];o?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function Fh(t,e){function i(){a.ignore=a.hoverIgnore,r.ignore=r.hoverIgnore}function n(){a.ignore=a.normalIgnore,r.ignore=r.normalIgnore}tb.call(this);var o=new hM({z2:2}),a=new gM,r=new rM;this.add(o),this.add(a),this.add(r),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function Wh(t,e,i,n,o,a,r){function s(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function l(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=r&&(d=r-10),!e&&d<=r&&(d=r+10),t[s].x=i+d*a,r=d}}t.sort(function(t,e){return t.y-e.y});for(var u,h=0,c=t.length,d=[],f=[],p=0;pe&&a+1t[a].y+t[a].height)return void s(a,n/2);s(i-1,n/2)}(p,c,-u),h=t[p].y+t[p].height;r-h<0&&s(c-1,h-r);for(p=0;p=i?f.push(t[p]):d.push(t[p]);l(d,!1,e,i,n,o),l(f,!0,e,i,n,o)}function Hh(t,e,i,n,o,a){for(var r=[],s=[],l=0;l3?1.4:o>1?1.2:1.1;hc(this,"zoom","zoomOnMouseWheel",t,{scale:n>0?s:1/s,originX:a,originY:r})}if(i){var l=Math.abs(n);hc(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(n>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:a,originY:r})}}}function uc(t){ic(this._zr,"globalPan")||hc(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY})}function hc(t,e,i,n,o){t.pointerChecker&&t.pointerChecker(n,o.originX,o.originY)&&(mw(n.event),cc(t,e,i,n,o))}function cc(t,e,i,n,o){o.isAvailableBehavior=m(dc,null,i,n),t.trigger(e,o)}function dc(t,e,i){var n=i[t];return!t||n&&(!_(n)||e.event[n+"Key"])}function fc(t,e,i){var n=t.target,o=n.position;o[0]+=e,o[1]+=i,n.dirty()}function pc(t,e,i,n){var o=t.target,a=t.zoomLimit,r=o.position,s=o.scale,l=t.zoom=t.zoom||1;if(l*=e,a){var u=a.min||0,h=a.max||1/0;l=Math.max(Math.min(h,l),u)}var c=l/t.zoom;t.zoom=l,r[0]-=(i-r[0])*(c-1),r[1]-=(n-r[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}function gc(t,e,i){var n=e.getComponentByElement(t.topTarget),o=n&&n.coordinateSystem;return n&&n!==i&&!RC[n.mainType]&&o&&o.model!==i}function mc(t,e){var i=t.getItemStyle(),n=t.get("areaColor");return null!=n&&(i.fill=n),i}function vc(t,e,i,n,o){i.off("click"),i.off("mousedown"),e.get("selectedMode")&&(i.on("mousedown",function(){t._mouseDownFlag=!0}),i.on("click",function(a){if(t._mouseDownFlag){t._mouseDownFlag=!1;for(var r=a.target;!r.__regions;)r=r.parent;if(r){var s={type:("geo"===e.mainType?"geo":"map")+"ToggleSelect",batch:f(r.__regions,function(t){return{name:t.name,from:o.uid}})};s[e.mainType+"Id"]=e.id,n.dispatchAction(s),yc(e,i)}}}))}function yc(t,e){e.eachChild(function(e){d(e.__regions,function(i){e.trigger(t.isSelected(i.name)?"emphasis":"normal")})})}function xc(t,e){var i=new tb;this.uid=Ro("ec_map_draw"),this._controller=new oc(t.getZr()),this._controllerHost={target:e?i:null},this.group=i,this._updateGroup=e,this._mouseDownFlag,this._mapName,this._initialized,i.add(this._regionsGroup=new tb),i.add(this._backgroundGroup=new tb)}function _c(t){var e=this[zC];e&&e.recordVersion===this[BC]&&wc(e,t)}function wc(t,e){var i=t.circle,n=t.labelModel,o=t.hoverLabelModel,a=t.emphasisText,r=t.normalText;e?(i.style.extendFrom(mo({},o,{text:o.get("show")?a:null},{isRectText:!0,useInsideStyle:!1},!0)),i.__mapOriginalZ2=i.z2,i.z2+=NM):(mo(i.style,n,{text:n.get("show")?r:null,textPosition:n.getShallow("position")||"bottom"},{isRectText:!0,useInsideStyle:!1}),i.dirty(!1),null!=i.__mapOriginalZ2&&(i.z2=i.__mapOriginalZ2,i.__mapOriginalZ2=null))}function bc(t,e,i){var n=t.getZoom(),o=t.getCenter(),a=e.zoom,r=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){r[0]-=e.dx,r[1]-=e.dy;o=t.pointToData(r);t.setCenter(o)}if(null!=a){if(i){var s=i.min||0,l=i.max||1/0;a=Math.max(Math.min(n*a,l),s)/n}t.scale[0]*=a,t.scale[1]*=a;var u=t.position,h=(e.originX-u[0])*(a-1),c=(e.originY-u[1])*(a-1);u[0]-=h,u[1]-=c,t.updateTransform();o=t.pointToData(r);t.setCenter(o),t.setZoom(a*n)}return{center:t.getCenter(),zoom:t.getZoom()}}function Sc(){Tw.call(this)}function Mc(t){this.name=t,this.zoomLimit,Tw.call(this),this._roamTransformable=new Sc,this._rawTransformable=new Sc,this._center,this._zoom}function Ic(t,e,i,n){var o=i.seriesModel,a=o?o.coordinateSystem:null;return a===this?a[t](n):null}function Tc(t,e,i,n){Mc.call(this,t),this.map=e;var o=OC.load(e,i);this._nameCoordMap=o.nameCoordMap,this._regionsMap=o.regionsMap,this._invertLongitute=null==n||n,this.regions=o.regions,this._rect=o.boundingRect}function Ac(t,e,i,n){var o=i.geoModel,a=i.seriesModel,r=o?o.coordinateSystem:a?a.coordinateSystem||(a.getReferringComponents("geo")[0]||{}).coordinateSystem:null;return r===this?r[t](n):null}function Dc(t,e){var i=t.get("boundingCoords");if(null!=i){var n=i[0],o=i[1];isNaN(n[0])||isNaN(n[1])||isNaN(o[0])||isNaN(o[1])||this.setBoundingRect(n[0],n[1],o[0]-n[0],o[1]-n[1])}var a,r=this.getBoundingRect(),s=t.get("layoutCenter"),l=t.get("layoutSize"),u=e.getWidth(),h=e.getHeight(),c=r.width/r.height*this.aspectScale,d=!1;s&&l&&(s=[Vo(s[0],u),Vo(s[1],h)],l=Vo(l,Math.min(u,h)),isNaN(s[0])||isNaN(s[1])||isNaN(l)||(d=!0));if(d){var f={};c>1?(f.width=l,f.height=l/c):(f.height=l,f.width=l*c),f.y=s[1]-f.height/2,f.x=s[0]-f.width/2}else(a=t.getBoxLayoutParams()).aspect=c,f=ca(a,{width:u,height:h});this.setViewRect(f.x,f.y,f.width,f.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function Cc(t,e){d(e.get("geoCoord"),function(e,i){t.addGeoCoord(i,e)})}function Lc(t,e){var i={};return d(t,function(t){t.each(t.mapDimension("value"),function(e,n){var o="ec-"+t.getName(n);i[o]=i[o]||[],isNaN(e)||i[o].push(e)})}),t[0].map(t[0].mapDimension("value"),function(n,o){for(var a="ec-"+t[0].getName(o),r=0,s=1/0,l=-1/0,u=i[a].length,h=0;h=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},n.push(a)}}function Wc(t,e){var i=t.isExpand?t.children:[],n=t.parentNode.children,o=t.hierNode.i?n[t.hierNode.i-1]:null;if(i.length){jc(t);var a=(i[0].hierNode.prelim+i[i.length-1].hierNode.prelim)/2;o?(t.hierNode.prelim=o.hierNode.prelim+e(t,o),t.hierNode.modifier=t.hierNode.prelim-a):t.hierNode.prelim=a}else o&&(t.hierNode.prelim=o.hierNode.prelim+e(t,o));t.parentNode.hierNode.defaultAncestor=Yc(t,o,t.parentNode.hierNode.defaultAncestor||n[0],e)}function Hc(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function Zc(t){return arguments.length?t:Qc}function Uc(t,e){var i={};return t-=Math.PI/2,i.x=e*Math.cos(t),i.y=e*Math.sin(t),i}function Xc(t,e){return ca(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function jc(t){for(var e=t.children,i=e.length,n=0,o=0;--i>=0;){var a=e[i];a.hierNode.prelim+=n,a.hierNode.modifier+=n,o+=a.hierNode.change,n+=a.hierNode.shift+o}}function Yc(t,e,i,n){if(e){for(var o=t,a=t,r=a.parentNode.children[0],s=e,l=o.hierNode.modifier,u=a.hierNode.modifier,h=r.hierNode.modifier,c=s.hierNode.modifier;s=qc(s),a=Kc(a),s&&a;){o=qc(o),r=Kc(r),o.hierNode.ancestor=t;var d=s.hierNode.prelim+c-a.hierNode.prelim-u+n(s,a);d>0&&(Jc($c(s,t,i),t,d),u+=d,l+=d),c+=s.hierNode.modifier,u+=a.hierNode.modifier,l+=o.hierNode.modifier,h+=r.hierNode.modifier}s&&!qc(o)&&(o.hierNode.thread=s,o.hierNode.modifier+=c-l),a&&!Kc(r)&&(r.hierNode.thread=a,r.hierNode.modifier+=u-h,i=t)}return i}function qc(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function Kc(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function $c(t,e,i){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:i}function Jc(t,e,i){var n=i/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=n,e.hierNode.shift+=i,e.hierNode.modifier+=i,e.hierNode.prelim+=i,t.hierNode.change+=n}function Qc(t,e){return t.parentNode===e.parentNode?1:2}function td(t,e){var i=t.getItemLayout(e);return i&&!isNaN(i.x)&&!isNaN(i.y)&&"none"!==t.getItemVisual(e,"symbol")}function ed(t,e,i){return i.itemModel=e,i.itemStyle=e.getModel("itemStyle").getItemStyle(),i.hoverItemStyle=e.getModel("emphasis.itemStyle").getItemStyle(),i.lineStyle=e.getModel("lineStyle").getLineStyle(),i.labelModel=e.getModel("label"),i.hoverLabelModel=e.getModel("emphasis.label"),!1===t.isExpand&&0!==t.children.length?i.symbolInnerColor=i.itemStyle.fill:i.symbolInnerColor="#fff",i}function id(t,e,i,n,o,a){var s=!i,l=t.tree.getNodeByDataIndex(e),a=ed(l,l.getModel(),a),u=t.tree.root,h=l.parentNode===u?l:l.parentNode||l,c=t.getItemGraphicEl(h.dataIndex),d=h.getLayout(),f=c?{x:c.position[0],y:c.position[1],rawX:c.__radialOldRawX,rawY:c.__radialOldRawY}:d,p=l.getLayout();s?(i=new wu(t,e,a)).attr("position",[f.x,f.y]):i.updateData(t,e,a),i.__radialOldRawX=i.__radialRawX,i.__radialOldRawY=i.__radialRawY,i.__radialRawX=p.rawX,i.__radialRawY=p.rawY,n.add(i),t.setItemGraphicEl(e,i),Io(i,{position:[p.x,p.y]},o);var g=i.getSymbolPath();if("radial"===a.layout){var m,v,y=u.children[0],x=y.getLayout(),_=y.children.length;if(p.x===x.x&&!0===l.isExpand){var w={};w.x=(y.children[0].getLayout().x+y.children[_-1].getLayout().x)/2,w.y=(y.children[0].getLayout().y+y.children[_-1].getLayout().y)/2,(m=Math.atan2(w.y-x.y,w.x-x.x))<0&&(m=2*Math.PI+m),(v=w.xx.x)||(m-=Math.PI);var b=v?"left":"right";g.setStyle({textPosition:b,textRotation:-m,textOrigin:"center",verticalAlign:"middle"})}if(l.parentNode&&l.parentNode!==u){var S=i.__edge;S||(S=i.__edge=new bM({shape:od(a,f,f),style:r({opacity:0,strokeNoScale:!0},a.lineStyle)})),Io(S,{shape:od(a,d,p),style:{opacity:1}},o),n.add(S)}}function nd(t,e,i,n,o,a){for(var r,s=t.tree.getNodeByDataIndex(e),l=t.tree.root,a=ed(s,s.getModel(),a),u=s.parentNode===l?s:s.parentNode||s;null==(r=u.getLayout());)u=u.parentNode===l?u:u.parentNode||u;Io(i,{position:[r.x+1,r.y+1]},o,function(){n.remove(i),t.setItemGraphicEl(e,null)}),i.fadeOut(null,{keepLabel:!0});var h=i.__edge;h&&Io(h,{shape:od(a,r,r),style:{opacity:0}},o,function(){n.remove(h)})}function od(t,e,i){var n,o,a,r,s,l,u,h,c=t.orient;if("radial"===t.layout){s=e.rawX,u=e.rawY,l=i.rawX,h=i.rawY;var d=Uc(s,u),f=Uc(s,u+(h-u)*t.curvature),p=Uc(l,h+(u-h)*t.curvature),g=Uc(l,h);return{x1:d.x,y1:d.y,x2:g.x,y2:g.y,cpx1:f.x,cpy1:f.y,cpx2:p.x,cpy2:p.y}}return s=e.x,u=e.y,l=i.x,h=i.y,"LR"!==c&&"RL"!==c||(n=s+(l-s)*t.curvature,o=u,a=l+(s-l)*t.curvature,r=h),"TB"!==c&&"BT"!==c||(n=s,o=u+(h-u)*t.curvature,a=l,r=h+(u-h)*t.curvature),{x1:s,y1:u,x2:l,y2:h,cpx1:n,cpy1:o,cpx2:a,cpy2:r}}function ad(t,e,i){for(var n,o=[t],a=[];n=o.pop();)if(a.push(n),n.isExpand){var r=n.children;if(r.length)for(var s=0;s=0;a--)n.push(o[a])}}function sd(t,e){var i=Xc(t,e);t.layoutInfo=i;var n=t.get("layout"),o=0,a=0,r=null;"radial"===n?(o=2*Math.PI,a=Math.min(i.height,i.width)/2,r=Zc(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(o=i.width,a=i.height,r=Zc());var s=t.getData().tree.root,l=s.children[0];if(l){Fc(s),ad(l,Wc,r),s.hierNode.modifier=-l.hierNode.prelim,rd(l,Hc);var u=l,h=l,c=l;rd(l,function(t){var e=t.getLayout().x;eh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)});var d=u===h?1:r(u,h)/2,f=d-u.getLayout().x,p=0,g=0,m=0,v=0;if("radial"===n)p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),rd(l,function(t){m=(t.getLayout().x+f)*p,v=(t.depth-1)*g;var e=Uc(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)});else{var y=t.getOrient();"RL"===y||"LR"===y?(g=a/(h.getLayout().x+d+f),p=o/(c.depth-1||1),rd(l,function(t){v=(t.getLayout().x+f)*g,m="LR"===y?(t.depth-1)*p:o-(t.depth-1)*p,t.setLayout({x:m,y:v},!0)})):"TB"!==y&&"BT"!==y||(p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),rd(l,function(t){m=(t.getLayout().x+f)*p,v="TB"===y?(t.depth-1)*g:a-(t.depth-1)*g,t.setLayout({x:m,y:v},!0)}))}}}function ld(t,e,i){if(t&&l(e,t.type)>=0){var n=i.getData().tree.root,o=t.targetNode;if("string"==typeof o&&(o=n.getNodeById(o)),o&&n.contains(o))return{node:o};var a=t.targetNodeId;if(null!=a&&(o=n.getNodeById(a)))return{node:o}}}function ud(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function hd(t,e){return l(ud(t),e)>=0}function cd(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}function dd(t){var e=0;d(t.children,function(t){dd(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function fd(t,e){var i=e.get("color");if(i){var n;return d(t=t||[],function(t){var e=new No(t),i=e.get("color");(e.get("itemStyle.color")||i&&"none"!==i)&&(n=!0)}),n||((t[0]||(t[0]={})).color=i.slice()),t}}function pd(t){this.group=new tb,t.add(this.group)}function gd(t,e,i,n,o,a){var r=[[o?t:t-UC,e],[t+i,e],[t+i,e+n],[o?t:t-UC,e+n]];return!a&&r.splice(2,0,[t+i+UC,e+n/2]),!o&&r.push([t,e+n/2]),r}function md(t,e,i){t.eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&cd(i,e)}}function vd(){var t,e=[],i={};return{add:function(t,n,o,a,r){return _(a)&&(r=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:o,delay:a,easing:r}),!0)},done:function(e){return t=e,this},start:function(){for(var n=e.length,o=0,a=e.length;o=0;a--)null==i[a]&&(delete n[e[a]],e.pop())}function bd(t,e){var i=t.visual,n=[];w(i)?sL(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),Ld(t,n)}function Sd(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n("color",t(i("color"),e))},_doMap:Dd([0,1])}}function Md(t){var e=this.option.visual;return e[Math.round(Bo(t,[0,1],[0,e.length-1],!0))]||{}}function Id(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function Td(t){var e=this.option.visual;return e[this.option.loop&&t!==uL?t%e.length:t]}function Ad(){return this.option.visual[0]}function Dd(t){return{linear:function(e){return Bo(e,t,this.option.visual,!0)},category:Td,piecewise:function(e,i){var n=Cd.call(this,i);return null==n&&(n=Bo(e,t,this.option.visual,!0)),n},fixed:Ad}}function Cd(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=i[hL.findPieceIndex(t,i)];if(n&&n.visual)return n.visual[this.type]}}function Ld(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=f(e,function(t){return Gt(t)})),e}function kd(t,e,i){return t?e<=i:e=o.length||t===o[t.depth])&&Pd(t,Vd(r,h,t,e,g,a),i,n,o,a)})}else l=Od(h),t.setVisual("color",l)}}function Nd(t,e,i,n){var o=a({},e);return d(["color","colorAlpha","colorSaturation"],function(a){var r=t.get(a,!0);null==r&&i&&(r=i[a]),null==r&&(r=e[a]),null==r&&(r=n.get(a)),null!=r&&(o[a]=r)}),o}function Od(t){var e=Rd(t,"color");if(e){var i=Rd(t,"colorAlpha"),n=Rd(t,"colorSaturation");return n&&(e=jt(e,null,null,n)),i&&(e=Yt(e,i)),e}}function Ed(t,e){return null!=e?jt(e,null,null,t):null}function Rd(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function zd(t,e,i,n,o,a){if(a&&a.length){var r=Bd(e,"color")||null!=o.color&&"none"!==o.color&&(Bd(e,"colorAlpha")||Bd(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),u=i.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:r.name,dataExtent:u,visual:r.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new hL(c);return d.__drColorMappingBy=h,d}}}function Bd(t,e){var i=t.get(e);return fL(i)&&i.length?{name:e,range:i}:null}function Vd(t,e,i,n,o,r){var s=a({},e);if(o){var l=o.type,u="color"===l&&o.__drColorMappingBy,h="index"===u?n:"id"===u?r.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));s[l]=o.mapValueToVisual(h)}return s}function Gd(t,e,i,n){var o,a;if(!t.isRemoved()){var r=t.getLayout();o=r.width,a=r.height;var s=(f=t.getModel()).get(_L),l=f.get(wL)/2,u=Kd(f),h=Math.max(s,u),c=s-l,d=h-l,f=t.getModel();t.setLayout({borderWidth:s,upperHeight:h,upperLabelHeight:u},!0);var p=(o=mL(o-2*c,0))*(a=mL(a-c-d,0)),g=Fd(t,f,p,e,i,n);if(g.length){var m={x:c,y:d,width:o,height:a},v=vL(o,a),y=1/0,x=[];x.area=0;for(var _=0,w=g.length;_=0;l--){var u=o["asc"===n?r-l-1:l].getValue();u/i*es[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}function Ud(t,e,i){for(var n,o=0,a=1/0,r=0,s=t.length;ro&&(o=n));var l=t.area*t.area,u=e*e*i;return l?mL(u*o/l,l/(u*a)):1/0}function Xd(t,e,i,n,o){var a=e===i.width?0:1,r=1-a,s=["x","y"],l=["width","height"],u=i[s[a]],h=e?t.area/e:0;(o||h>i[l[r]])&&(h=i[l[r]]);for(var c=0,d=t.length;cXM&&(u=XM),a=s}u=0?n+=u:n-=u:p>=0?n-=u:n+=u}return n}function pf(t,e){return t.getVisual("opacity")||t.getModel().get(e)}function gf(t,e,i){var n=t.getGraphicEl(),o=pf(t,e);null!=i&&(null==o&&(o=1),o*=i),n.downplay&&n.downplay(),n.traverse(function(t){if("group"!==t.type){var e=t.lineLabelOriginalOpacity;null!=e&&null==i||(e=o),t.setStyle("opacity",e)}})}function mf(t,e){var i=pf(t,e),n=t.getGraphicEl();n.highlight&&n.highlight(),n.traverse(function(t){"group"!==t.type&&t.setStyle("opacity",i)})}function vf(t){return t instanceof Array||(t=[t,t]),t}function yf(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),xf(i)}}function xf(t){t.eachEdge(function(t){var e=t.getModel().get("lineStyle.curveness")||0,i=F(t.node1.getLayout()),n=F(t.node2.getLayout()),o=[i,n];+e&&o.push([(i[0]+n[0])/2-(i[1]-n[1])*e,(i[1]+n[1])/2-(n[0]-i[0])*e]),t.setLayout(o)})}function _f(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=e.getBoundingRect(),n=t.getData(),o=n.graph,a=0,r=n.getSum("value"),s=2*Math.PI/(r||n.count()),l=i.width/2+i.x,u=i.height/2+i.y,h=Math.min(i.width,i.height)/2;o.eachNode(function(t){var e=t.getValue("value");a+=s*(r?e:1)/2,t.setLayout([h*Math.cos(a)+l,h*Math.sin(a)+u]),a+=s*(r?e:1)/2}),n.setLayout({cx:l,cy:u}),o.eachEdge(function(t){var e,i=t.getModel().get("lineStyle.curveness")||0,n=F(t.node1.getLayout()),o=F(t.node2.getLayout()),a=(n[0]+o[0])/2,r=(n[1]+o[1])/2;+i&&(e=[l*(i*=3)+a*(1-i),u*i+r*(1-i)]),t.setLayout([n,o,e])})}}function wf(t,e,i){for(var n=i.rect,o=n.width,a=n.height,r=[n.x+o/2,n.y+a/2],s=null==i.gravity?.1:i.gravity,l=0;l0?-1:i<0?1:e?-1:1}}function Pf(t,e){return Math.min(e[1],Math.max(e[0],t))}function Nf(t,e,i){this._axesMap=R(),this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}function Of(t,e){return ek(ik(t,e[0]),e[1])}function Ef(t,e){var i=e.layoutLength/(e.axisCount-1);return{position:i*t,axisNameAvailableWidth:i,axisLabelShow:!0}}function Rf(t,e){var i,n,o=e.layoutLength,a=e.axisExpandWidth,r=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,h=!1;return tmk}function $f(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function Jf(t,e,i,n){var o=new tb;return o.add(new yM({name:"main",style:ip(i),silent:!0,draggable:!0,cursor:"move",drift:uk(t,e,o,"nswe"),ondragend:uk(qf,e,{isEnd:!0})})),hk(n,function(i){o.add(new yM({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:uk(t,e,o,i),ondragend:uk(qf,e,{isEnd:!0})}))}),o}function Qf(t,e,i,n){var o=n.brushStyle.lineWidth||0,a=fk(o,vk),r=i[0][0],s=i[1][0],l=r-o/2,u=s-o/2,h=i[0][1],c=i[1][1],d=h-a+o/2,f=c-a+o/2,p=h-r,g=c-s,m=p+o,v=g+o;ep(t,e,"main",r,s,p,g),n.transformable&&(ep(t,e,"w",l,u,a,v),ep(t,e,"e",d,u,a,v),ep(t,e,"n",l,u,m,a),ep(t,e,"s",l,f,m,a),ep(t,e,"nw",l,u,a,a),ep(t,e,"ne",d,u,a,a),ep(t,e,"sw",l,f,a,a),ep(t,e,"se",d,f,a,a))}function tp(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(ip(i)),o.attr({silent:!n,cursor:n?"move":"default"}),hk(["w","e","n","s","se","sw","ne","nw"],function(i){var o=e.childOfName(i),a=ap(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?_k[a]+"-resize":null})})}function ep(t,e,i,n,o,a,r){var s=e.childOfName(i);s&&s.setShape(hp(up(t,e,[[n,o],[n+a,o+r]])))}function ip(t){return r({strokeNoScale:!0},t.brushStyle)}function np(t,e,i,n){var o=[dk(t,i),dk(e,n)],a=[fk(t,i),fk(e,n)];return[[o[0],a[0]],[o[1],a[1]]]}function op(t){return Ao(t.group)}function ap(t,e){if(e.length>1)return("e"===(n=[ap(t,(e=e.split(""))[0]),ap(t,e[1])])[0]||"w"===n[0])&&n.reverse(),n.join("");var i={left:"w",right:"e",top:"n",bottom:"s"},n=Co({w:"left",e:"right",n:"top",s:"bottom"}[e],op(t));return i[n]}function rp(t,e,i,n,o,a,r,s){var l=n.__brushOption,u=t(l.range),h=lp(i,a,r);hk(o.split(""),function(t){var e=xk[t];u[e[0]][e[1]]+=h[e[0]]}),l.range=e(np(u[0][0],u[1][0],u[0][1],u[1][1])),Zf(i,n),qf(i,{isEnd:!1})}function sp(t,e,i,n,o){var a=e.__brushOption.range,r=lp(t,i,n);hk(a,function(t){t[0]+=r[0],t[1]+=r[1]}),Zf(t,e),qf(t,{isEnd:!1})}function lp(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),a=n.transformCoordToLocal(0,0);return[o[0]-a[0],o[1]-a[1]]}function up(t,e,n){var o=jf(t,e);return o&&!0!==o?o.clipPath(n,t._transform):i(n)}function hp(t){var e=dk(t[0][0],t[1][0]),i=dk(t[0][1],t[1][1]);return{x:e,y:i,width:fk(t[0][0],t[1][0])-e,height:fk(t[0][1],t[1][1])-i}}function cp(t,e,i){if(t._brushType){var n=t._zr,o=t._covers,a=Xf(t,e,i);if(!t._dragging)for(var r=0;r0;a--)Yp(s,l*=.99,r),jp(s,o,i,n,r),tg(s,l,r),jp(s,o,i,n,r)}function Up(t,e){var i=[],n="vertical"===e?"y":"x",o=Zi(t,function(t){return t.getLayout()[n]});return o.keys.sort(function(t,e){return t-e}),d(o.keys,function(t){i.push(o.buckets.get(t))}),i}function Xp(t,e,i,n,o,a,r){var s=[];d(e,function(t){var e=t.length,i=0,l=0;d(t,function(t){i+=t.getLayout().value}),l="vertical"===r?(o-(e-1)*a)/i:(n-(e-1)*a)/i,s.push(l)}),s.sort(function(t,e){return t-e});var l=s[0];d(e,function(t){d(t,function(t,e){var i=t.getLayout().value*l;"vertical"===r?(t.setLayout({x:e},!0),t.setLayout({dx:i},!0)):(t.setLayout({y:e},!0),t.setLayout({dy:i},!0))})}),d(i,function(t){var e=+t.getValue()*l;t.setLayout({dy:e},!0)})}function jp(t,e,i,n,o){d(t,function(t){var a,r,s,l=0,u=t.length;if("vertical"===o){var h;for(t.sort(function(t,e){return t.getLayout().x-e.getLayout().x}),s=0;s0&&(h=a.getLayout().x+r,a.setLayout({x:h},!0)),l=a.getLayout().x+a.getLayout().dx+e;if((r=l-e-n)>0)for(h=a.getLayout().x-r,a.setLayout({x:h},!0),l=h,s=u-2;s>=0;--s)(r=(a=t[s]).getLayout().x+a.getLayout().dx+e-l)>0&&(h=a.getLayout().x-r,a.setLayout({x:h},!0)),l=a.getLayout().x}else{var c;for(t.sort(function(t,e){return t.getLayout().y-e.getLayout().y}),s=0;s0&&(c=a.getLayout().y+r,a.setLayout({y:c},!0)),l=a.getLayout().y+a.getLayout().dy+e;if((r=l-e-i)>0)for(c=a.getLayout().y-r,a.setLayout({y:c},!0),l=c,s=u-2;s>=0;--s)(r=(a=t[s]).getLayout().y+a.getLayout().dy+e-l)>0&&(c=a.getLayout().y-r,a.setLayout({y:c},!0)),l=a.getLayout().y}})}function Yp(t,e,i){d(t.slice().reverse(),function(t){d(t,function(t){if(t.outEdges.length){var n=Qp(t.outEdges,qp,i)/Qp(t.outEdges,Jp,i);if("vertical"===i){var o=t.getLayout().x+(n-$p(t,i))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(n-$p(t,i))*e;t.setLayout({y:a},!0)}}})})}function qp(t,e){return $p(t.node2,e)*t.getValue()}function Kp(t,e){return $p(t.node1,e)*t.getValue()}function $p(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function Jp(t){return t.getValue()}function Qp(t,e,i){for(var n=0,o=t.length,a=-1;++a0?"P":"N",a=n.getVisual("borderColor"+o)||n.getVisual("color"+o),r=i.getModel(Gk).getItemStyle(Wk);e.useStyle(r),e.style.fill=null,e.style.stroke=a}function fg(t,e,i,n,o){return i>n?-1:i0?t.get(o,e-1)<=n?1:-1:1}function pg(t,e){var i,n=t.getBaseAxis(),o="category"===n.type?n.getBandWidth():(i=n.getExtent(),Math.abs(i[1]-i[0])/e.count()),a=Vo(A(t.get("barMaxWidth"),o),o),r=Vo(A(t.get("barMinWidth"),1),o),s=t.get("barWidth");return null!=s?Vo(s,o):Math.max(Math.min(o/2,a),r)}function gg(t){return y(t)||(t=[+t,+t]),t}function mg(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?e.color:null,fill:"fill"===e.brushType?e.color:null}})})}function vg(t,e){tb.call(this);var i=new wu(t,e),n=new tb;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}function yg(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=f(e,function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),o([e,t[0],t[1]])}))}function xg(t,e,i){tb.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}function _g(t,e,i){tb.call(this),this._createPolyline(t,e,i)}function wg(t,e,i){xg.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}function bg(){this.group=new tb}function Sg(t){return t instanceof Array||(t=[t,t]),t}function Mg(){var t=iw();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}function Ig(t,e,i){var n=t[1]-t[0],o=(e=f(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}})).length,a=0;return function(t){for(n=a;n=0;n--){var r=e[n].interval;if(r[0]<=t&&t<=r[1]){a=n;break}}return n>=0&&n=e[0]&&t<=e[1]}}function Ag(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}function Dg(t,e,i,n){var o=t.getItemLayout(e),a=i.get("symbolRepeat"),r=i.get("symbolClip"),s=i.get("symbolPosition")||"start",l=(i.get("symbolRotate")||0)*Math.PI/180||0,u=i.get("symbolPatternSize")||2,h=i.isAnimationEnabled(),c={dataIndex:e,layout:o,itemModel:i,symbolType:t.getItemVisual(e,"symbol")||"circle",color:t.getItemVisual(e,"color"),symbolClip:r,symbolRepeat:a,symbolRepeatDirection:i.get("symbolRepeatDirection"),symbolPatternSize:u,rotation:l,animationModel:h?i:null,hoverAnimation:h&&i.get("hoverAnimation"),z2:i.getShallow("z",!0)||0};Cg(i,a,o,n,c),kg(t,e,o,a,r,c.boundingLength,c.pxSign,u,n,c),Pg(i,c.symbolScale,l,n,c);var d=c.symbolSize,f=i.get("symbolOffset");return y(f)&&(f=[Vo(f[0],d[0]),Vo(f[1],d[1])]),Ng(i,d,o,a,r,f,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,n,c),c}function Cg(t,e,i,n,o){var a,r=n.valueDim,s=t.get("symbolBoundingData"),l=n.coordSys.getOtherAxis(n.coordSys.getBaseAxis()),u=l.toGlobalCoord(l.dataToCoord(0)),h=1-+(i[r.wh]<=0);if(y(s)){var c=[Lg(l,s[0])-u,Lg(l,s[1])-u];c[1]0?1:a<0?-1:0}function Lg(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function kg(t,e,i,n,o,a,r,s,l,u){var h=l.valueDim,c=l.categoryDim,d=Math.abs(i[c.wh]),f=t.getItemVisual(e,"symbolSize");y(f)?f=f.slice():(null==f&&(f="100%"),f=[f,f]),f[c.index]=Vo(f[c.index],d),f[h.index]=Vo(f[h.index],n?d:Math.abs(a)),u.symbolSize=f,(u.symbolScale=[f[0]/s,f[1]/s])[h.index]*=(l.isHorizontal?-1:1)*r}function Pg(t,e,i,n,o){var a=t.get(cP)||0;a&&(fP.attr({scale:e.slice(),rotation:i}),fP.updateTransform(),a/=fP.getLineScale(),a*=e[n.valueDim.index]),o.valueLineWidth=a}function Ng(t,e,i,n,o,r,s,l,u,h,c,d){var f=c.categoryDim,p=c.valueDim,g=d.pxSign,m=Math.max(e[p.index]+l,0),v=m;if(n){var y=Math.abs(u),x=T(t.get("symbolMargin"),"15%")+"",_=!1;x.lastIndexOf("!")===x.length-1&&(_=!0,x=x.slice(0,x.length-1)),x=Vo(x,e[p.index]);var w=Math.max(m+2*x,0),b=_?0:2*x,S=Qo(n),M=S?n:Kg((y+b)/w);w=m+2*(x=(y-M*m)/2/(_?M:M-1)),b=_?0:2*x,S||"fixed"===n||(M=h?Kg((Math.abs(h)+b)/w):0),v=M*w-b,d.repeatTimes=M,d.symbolMargin=x}var I=g*(v/2),A=d.pathPosition=[];A[f.index]=i[f.wh]/2,A[p.index]="start"===s?I:"end"===s?u-I:u/2,r&&(A[0]+=r[0],A[1]+=r[1]);var D=d.bundlePosition=[];D[f.index]=i[f.xy],D[p.index]=i[p.xy];var C=d.barRectShape=a({},i);C[p.wh]=g*Math.max(Math.abs(i[p.wh]),Math.abs(A[p.index]+I)),C[f.wh]=i[f.wh];var L=d.clipShape={};L[f.xy]=-i[f.xy],L[f.wh]=c.ecSize[f.wh],L[p.xy]=0,L[p.wh]=i[p.wh]}function Og(t){var e=t.symbolPatternSize,i=Jl(t.symbolType,-e/2,-e/2,e,e,t.color);return i.attr({culling:!0}),"image"!==i.type&&i.setStyle({strokeNoScale:!0}),i}function Eg(t,e,i,n){function o(t){var e=l.slice(),n=i.pxSign,o=t;return("start"===i.symbolRepeatDirection?n>0:n<0)&&(o=h-1-t),e[u.index]=d*(o-h/2+.5)+l[u.index],{position:e,scale:i.symbolScale.slice(),rotation:i.rotation}}var a=t.__pictorialBundle,r=i.symbolSize,s=i.valueLineWidth,l=i.pathPosition,u=e.valueDim,h=i.repeatTimes||0,c=0,d=r[e.valueDim.index]+s+2*i.symbolMargin;for(jg(t,function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=h,c0)],d=t.__pictorialBarRect;kh(d.style,h,a,n,e.seriesModel,o,c),fo(d,h)}function Kg(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}function $g(t,e,i){this.dimension="single",this.dimensions=["single"],this._axis=null,this._rect,this._init(t,e,i),this.model=t}function Jg(t,e){e=e||{};var i=t.coordinateSystem,n=t.axis,o={},a=n.position,r=n.orient,s=i.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],u={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};o.position=["vertical"===r?u.vertical[a]:l[0],"horizontal"===r?u.horizontal[a]:l[3]];var h={horizontal:0,vertical:1};o.rotation=Math.PI/2*h[r];var c={top:-1,bottom:1,right:1,left:-1};o.labelDirection=o.tickDirection=o.nameDirection=c[a],t.get("axisTick.inside")&&(o.tickDirection=-o.tickDirection),T(e.labelInside,t.get("axisLabel.inside"))&&(o.labelDirection=-o.labelDirection);var d=e.rotate;return null==d&&(d=t.get("axisLabel.rotate")),o.labelRotation="top"===a?-d:d,o.z2=1,o}function Qg(t,e,i,n,o){var r=t.axis;if(!r.scale.isBlank()&&r.containData(e))if(t.involveSeries){var s=tm(e,t),l=s.payloadBatch,u=s.snapToValue;l[0]&&null==o.seriesIndex&&a(o,l[0]),!n&&t.snap&&r.containData(u)&&null!=u&&(e=u),i.showPointer(t,e,l,o),i.showTooltip(t,s,u)}else i.showPointer(t,e)}function tm(t,e){var i=e.axis,n=i.dim,o=t,a=[],r=Number.MAX_VALUE,s=-1;return _P(e.seriesModels,function(e,l){var u,h,c=e.getData().mapDimension(n,!0);if(e.getAxisTooltipData){var d=e.getAxisTooltipData(c,t,i);h=d.dataIndices,u=d.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===i.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var f=t-u,p=Math.abs(f);p<=r&&((p=0&&s<0)&&(r=p,s=f,o=u,a.length=0),_P(h,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:o}}function em(t,e,i,n){t[e.key]={value:i,payloadBatch:n}}function im(t,e,i,n){var o=i.payloadBatch,a=e.axis,r=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&o.length){var l=e.coordSys.model,u=Ah(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:a.dim,axisIndex:r.componentIndex,axisType:r.type,axisId:r.id,value:n,valueLabelOpt:{precision:s.get("label.precision"),formatter:s.get("label.formatter")},seriesDataIndices:o.slice()})}}function nm(t,e,i){var n=i.axesInfo=[];_P(e,function(e,i){var o=e.axisPointerModel.option,a=t[i];a?(!e.useHandle&&(o.status="show"),o.value=a.value,o.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(o.status="hide"),"show"===o.status&&n.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:o.value})})}function om(t,e,i,n){if(!lm(e)&&t.list.length){var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}else n({type:"hideTip"})}function am(t,e,i){var n=i.getZr(),o=bP(n).axisPointerLastHighlights||{},a=bP(n).axisPointerLastHighlights={};_P(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&_P(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t})});var r=[],s=[];d(o,function(t,e){!a[e]&&s.push(t)}),d(a,function(t,e){!o[e]&&r.push(t)}),s.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:s}),r.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:r})}function rm(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}function sm(t){var e=t.axis.model,i={},n=i.axisDim=t.axis.dim;return i.axisIndex=i[n+"AxisIndex"]=e.componentIndex,i.axisName=i[n+"AxisName"]=e.name,i.axisId=i[n+"AxisId"]=e.id,i}function lm(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function um(t,e,i){if(!U_.node){var n=e.getZr();SP(n).records||(SP(n).records={}),hm(n,e),(SP(n).records[t]||(SP(n).records[t]={})).handler=i}}function hm(t,e){function i(i,n){t.on(i,function(i){var o=pm(e);MP(SP(t).records,function(t){t&&n(t,i,o.dispatchAction)}),cm(o.pendings,e)})}SP(t).initialized||(SP(t).initialized=!0,i("click",v(fm,"click")),i("mousemove",v(fm,"mousemove")),i("globalout",dm))}function cm(t,e){var i,n=t.showTip.length,o=t.hideTip.length;n?i=t.showTip[n-1]:o&&(i=t.hideTip[o-1]),i&&(i.dispatchAction=null,e.dispatchAction(i))}function dm(t,e,i){t.handler("leave",null,i)}function fm(t,e,i,n){e.handler(t,i,n)}function pm(t){var e={showTip:[],hideTip:[]},i=function(n){var o=e[n.type];o?o.push(n):(n.dispatchAction=i,t.dispatchAction(n))};return{dispatchAction:i,pendings:e}}function gm(t,e){if(!U_.node){var i=e.getZr();(SP(i).records||{})[t]&&(SP(i).records[t]=null)}}function mm(){}function vm(t,e,i,n){ym(TP(i).lastProp,n)||(TP(i).lastProp=n,e?Io(i,n,t):(i.stopAnimation(),i.attr(n)))}function ym(t,e){if(w(t)&&w(e)){var i=!0;return d(e,function(e,n){i=i&&ym(t[n],e)}),!!i}return t===e}function xm(t,e){t[e.get("label.show")?"show":"hide"]()}function _m(t){return{position:t.position.slice(),rotation:t.rotation||0}}function wm(t,e,i){var n=e.get("z"),o=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=o&&(t.zlevel=o),t.silent=i)})}function bm(t){var e,i=t.get("type"),n=t.getModel(i+"Style");return"line"===i?(e=n.getLineStyle()).fill=null:"shadow"===i&&((e=n.getAreaStyle()).stroke=null),e}function Sm(t,e,i,n,o){var a=Im(i.get("value"),e.axis,e.ecModel,i.get("seriesDataIndices"),{precision:i.get("label.precision"),formatter:i.get("label.formatter")}),r=i.getModel("label"),s=qM(r.get("padding")||0),l=r.getFont(),u=ke(a,l),h=o.position,c=u.width+s[1]+s[3],d=u.height+s[0]+s[2],f=o.align;"right"===f&&(h[0]-=c),"center"===f&&(h[0]-=c/2);var p=o.verticalAlign;"bottom"===p&&(h[1]-=d),"middle"===p&&(h[1]-=d/2),Mm(h,c,d,n);var g=r.get("backgroundColor");g&&"auto"!==g||(g=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:c,height:d,r:r.get("borderRadius")},position:h.slice(),style:{text:a,textFont:l,textFill:r.getTextColor(),textPosition:"inside",fill:g,stroke:r.get("borderColor")||"transparent",lineWidth:r.get("borderWidth")||0,shadowBlur:r.get("shadowBlur"),shadowColor:r.get("shadowColor"),shadowOffsetX:r.get("shadowOffsetX"),shadowOffsetY:r.get("shadowOffsetY")},z2:10}}function Mm(t,e,i,n){var o=n.getWidth(),a=n.getHeight();t[0]=Math.min(t[0]+e,o)-e,t[1]=Math.min(t[1]+i,a)-i,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function Im(t,e,i,n,o){t=e.scale.parse(t);var a=e.scale.getLabel(t,{precision:o.precision}),r=o.formatter;if(r){var s={value:Xl(e,t),seriesData:[]};d(n,function(t){var e=i.getSeriesByIndex(t.seriesIndex),n=t.dataIndexInside,o=e&&e.getDataParams(n);o&&s.seriesData.push(o)}),_(r)?a=r.replace("{value}",a):x(r)&&(a=r(s))}return a}function Tm(t,e,i){var n=xt();return Mt(n,n,i.rotation),St(n,n,i.position),Do([t.dataToCoord(e),(i.labelOffset||0)+(i.labelDirection||1)*(i.labelMargin||0)],n)}function Am(t,e,i,n,o,a){var r=FD.innerTextLayout(i.rotation,0,i.labelDirection);i.labelMargin=o.get("label.margin"),Sm(e,n,o,a,{position:Tm(n.axis,t,i),align:r.textAlign,verticalAlign:r.textVerticalAlign})}function Dm(t,e,i){return i=i||0,{x1:t[i],y1:t[1-i],x2:e[i],y2:e[1-i]}}function Cm(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}function Lm(t,e,i,n,o,a){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:a,clockwise:!0}}function km(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}function Pm(t){return"x"===t.dim?0:1}function Nm(t){return t.isHorizontal()?0:1}function Om(t,e){var i=t.getRect();return[i[kP[e]],i[kP[e]]+i[PP[e]]]}function Em(t,e,i){var n=new yM({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return To(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}function Rm(t,e,i){if(t.count())for(var n,o=e.coordinateSystem,a=e.getLayerSeries(),r=t.mapDimension("single"),s=t.mapDimension("value"),l=f(a,function(e){return f(e.indices,function(e){var i=o.dataToPoint(t.get(r,e));return i[1]=t.get(s,e),i})}),u=zm(l),h=u.y0,c=i/u.max,d=a.length,p=a[0].indices.length,g=0;ga&&(a=u),n.push(u)}for(var h=0;ha&&(a=d)}return r.y0=o,r.max=a,r}function Bm(t){var e=0;d(t.children,function(t){Bm(t);var i=t.value;y(i)&&(i=i[0]),e+=i});var i=t.value;y(i)&&(i=i[0]),(null==i||isNaN(i))&&(i=e),i<0&&(i=0),y(t.value)?t.value[0]=i:t.value=i}function Vm(t,e,i){function n(){r.ignore=r.hoverIgnore}function o(){r.ignore=r.normalIgnore}tb.call(this);var a=new hM({z2:zP});a.seriesIndex=e.seriesIndex;var r=new rM({z2:BP,silent:t.getModel("label").get("silent")});this.add(a),this.add(r),this.updateData(!0,t,"normal",e,i),this.on("emphasis",n).on("normal",o).on("mouseover",n).on("mouseout",o)}function Gm(t,e,i){var n=t.getVisual("color"),o=t.getVisual("visualMeta");o&&0!==o.length||(n=null);var a=t.getModel("itemStyle").get("color");if(a)return a;if(n)return n;if(0===t.depth)return i.option.color[0];var r=i.option.color.length;return a=i.option.color[Fm(t)%r]}function Fm(t){for(var e=t;e.depth>1;)e=e.parentNode;return l(t.getAncestors()[0].children,e)}function Wm(t,e,i){return i!==RP.NONE&&(i===RP.SELF?t===e:i===RP.ANCESTOR?t===e||t.isAncestorOf(e):t===e||t.isDescendantOf(e))}function Hm(t,e,i){e.getData().setItemVisual(t.dataIndex,"color",i)}function Zm(t,e){var i=t.children||[];t.children=Um(i,e),i.length&&d(t.children,function(t){Zm(t,e)})}function Um(t,e){if("function"==typeof e)return t.sort(e);var i="asc"===e;return t.sort(function(t,e){var n=(t.getValue()-e.getValue())*(i?1:-1);return 0===n?(t.dataIndex-e.dataIndex)*(i?-1:1):n})}function Xm(t,e){return e=e||[0,0],f(["x","y"],function(i,n){var o=this.getAxis(i),a=e[n],r=t[n]/2;return"category"===o.type?o.getBandWidth():Math.abs(o.dataToCoord(a-r)-o.dataToCoord(a+r))},this)}function jm(t,e){return e=e||[0,0],f([0,1],function(i){var n=e[i],o=t[i]/2,a=[],r=[];return a[i]=n-o,r[i]=n+o,a[1-i]=r[1-i]=e[1-i],Math.abs(this.dataToPoint(a)[i]-this.dataToPoint(r)[i])},this)}function Ym(t,e){var i=this.getAxis(),n=e instanceof Array?e[0]:e,o=(t instanceof Array?t[0]:t)/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))}function qm(t,e){return f(["Radius","Angle"],function(i,n){var o=this["get"+i+"Axis"](),a=e[n],r=t[n]/2,s="dataTo"+i,l="category"===o.type?o.getBandWidth():Math.abs(o[s](a-r)-o[s](a+r));return"Angle"===i&&(l=l*Math.PI/180),l},this)}function Km(t){var e,i=t.type;if("path"===i){var n=t.shape,o=null!=n.width&&null!=n.height?{x:n.x||0,y:n.y||0,width:n.width,height:n.height}:null,a=lv(n);(e=Xn(a,null,o,n.layout||"center")).__customPathData=a}else"image"===i?(e=new fi({})).__customImagePath=t.style.image:"text"===i?(e=new rM({})).__customText=t.style.text:e=new(0,zM[i.charAt(0).toUpperCase()+i.slice(1)]);return e.__customGraphicType=i,e.name=t.name,e}function $m(t,e,n,o,a,r,s){var l={},u=n.style||{};if(n.shape&&(l.shape=i(n.shape)),n.position&&(l.position=n.position.slice()),n.scale&&(l.scale=n.scale.slice()),n.origin&&(l.origin=n.origin.slice()),n.rotation&&(l.rotation=n.rotation),"image"===t.type&&n.style){h=l.style={};d(["x","y","width","height"],function(e){Jm(e,h,u,t.style,r)})}if("text"===t.type&&n.style){var h=l.style={};d(["x","y"],function(e){Jm(e,h,u,t.style,r)}),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke)}if("group"!==t.type&&(t.useStyle(u),r)){t.style.opacity=0;var c=u.opacity;null==c&&(c=1),To(t,{style:{opacity:c}},o,e)}r?t.attr(l):Io(t,l,o,e),n.hasOwnProperty("z2")&&t.attr("z2",n.z2||0),n.hasOwnProperty("silent")&&t.attr("silent",n.silent),n.hasOwnProperty("invisible")&&t.attr("invisible",n.invisible),n.hasOwnProperty("ignore")&&t.attr("ignore",n.ignore),n.hasOwnProperty("info")&&t.attr("info",n.info);var f=n.styleEmphasis,p=!1===f;t.__cusHasEmphStl&&null==f||!t.__cusHasEmphStl&&p||(ro(t,f),t.__cusHasEmphStl=!p),s&&po(t,!p)}function Jm(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function Qm(t,e,i,n){function o(t){null==t&&(t=h),v&&(c=e.getItemModel(t),d=c.getModel(UP),f=c.getModel(XP),p=e.getItemVisual(t,"color"),v=!1)}var s=t.get("renderItem"),l=t.coordinateSystem,u={};l&&(u=l.prepareCustoms?l.prepareCustoms():YP[l.type](l));var h,c,d,f,p,g=r({getWidth:n.getWidth,getHeight:n.getHeight,getZr:n.getZr,getDevicePixelRatio:n.getDevicePixelRatio,value:function(t,i){return null==i&&(i=h),e.get(e.getDimension(t||0),i)},style:function(i,n){null==n&&(n=h),o(n);var r=c.getModel(HP).getItemStyle();null!=p&&(r.fill=p);var s=e.getItemVisual(n,"opacity");return null!=s&&(r.opacity=s),mo(r,d,null,{autoColor:p,isRectText:!0}),r.text=d.getShallow("show")?A(t.getFormattedLabel(n,"normal"),_u(e,n)):null,i&&a(r,i),r},styleEmphasis:function(i,n){null==n&&(n=h),o(n);var r=c.getModel(ZP).getItemStyle();return mo(r,f,null,{isRectText:!0},!0),r.text=f.getShallow("show")?D(t.getFormattedLabel(n,"emphasis"),t.getFormattedLabel(n,"normal"),_u(e,n)):null,i&&a(r,i),r},visual:function(t,i){return null==i&&(i=h),e.getItemVisual(i,t)},barLayout:function(t){if(l.getBaseAxis)return Ll(r({axis:l.getBaseAxis()},t),n)},currentSeriesIndices:function(){return i.getCurrentSeriesIndices()},font:function(t){return So(t,i)}},u.api||{}),m={context:{},seriesId:t.id,seriesName:t.name,seriesIndex:t.seriesIndex,coordSys:u.coordSys,dataInsideLength:e.count(),encode:tv(t.getData())},v=!0;return function(t,i){return h=t,v=!0,s&&s(r({dataIndexInside:t,dataIndex:e.getRawIndex(t),actionType:i?i.type:null},m),g)}}function tv(t){var e={};return d(t.dimensions,function(i,n){var o=t.getDimensionInfo(i);if(!o.isExtraCoord){var a=o.coordDim;(e[a]=e[a]||[])[o.coordDimIndex]=n}}),e}function ev(t,e,i,n,o,a){return(t=iv(t,e,i,n,o,a,!0))&&a.setItemGraphicEl(e,t),t}function iv(t,e,i,n,o,a,r){var s=!i,l=(i=i||{}).type,u=i.shape,h=i.style;if(t&&(s||null!=l&&l!==t.__customGraphicType||"path"===l&&uv(u)&&lv(u)!==t.__customPathData||"image"===l&&hv(h,"image")&&h.image!==t.__customImagePath||"text"===l&&hv(u,"text")&&h.text!==t.__customText)&&(o.remove(t),t=null),!s){var c=!t;return!t&&(t=Km(i)),$m(t,e,i,n,a,c,r),"group"===l&&nv(t,e,i,n,a),o.add(t),t}}function nv(t,e,i,n,o){var a=i.children,r=a?a.length:0,s=i.$mergeChildren,l="byName"===s||i.diffChildrenByName,u=!1===s;if(r||l||u)if(l)ov({oldChildren:t.children()||[],newChildren:a||[],dataIndex:e,animatableModel:n,group:t,data:o});else{u&&t.removeAll();for(var h=0;hn?t-=l+a:t+=a),null!=r&&(e+u+r>o?e-=u+r:e+=r),[t,e]}function Ov(t,e,i,n,o){var a=i.getOuterSize(),r=a.width,s=a.height;return t=Math.min(t+r,n)-r,e=Math.min(e+s,o)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function Ev(t,e,i){var n=i[0],o=i[1],a=0,r=0,s=e.width,l=e.height;switch(t){case"inside":a=e.x+s/2-n/2,r=e.y+l/2-o/2;break;case"top":a=e.x+s/2-n/2,r=e.y-o-5;break;case"bottom":a=e.x+s/2-n/2,r=e.y+l+5;break;case"left":a=e.x-n-5,r=e.y+l/2-o/2;break;case"right":a=e.x+s+5,r=e.y+l/2-o/2}return[a,r]}function Rv(t){return"center"===t||"middle"===t}function zv(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}function Bv(t){return t.dim}function Vv(t,e){var i={};d(t,function(t,e){var n=t.getData(),o=t.coordinateSystem.getBaseAxis(),a=o.getExtent(),r="category"===o.type?o.getBandWidth():Math.abs(a[1]-a[0])/n.count(),s=i[Bv(o)]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},l=s.stacks;i[Bv(o)]=s;var u=zv(t);l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var h=Vo(t.get("barWidth"),r),c=Vo(t.get("barMaxWidth"),r),d=t.get("barGap"),f=t.get("barCategoryGap");h&&!l[u].width&&(h=Math.min(s.remainedWidth,h),l[u].width=h,s.remainedWidth-=h),c&&(l[u].maxWidth=c),null!=d&&(s.gap=d),null!=f&&(s.categoryGap=f)});var n={};return d(i,function(t,e){n[e]={};var i=t.stacks,o=t.bandWidth,a=Vo(t.categoryGap,o),r=Vo(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,u=(s-a)/(l+(l-1)*r);u=Math.max(u,0),d(i,function(t,e){var i=t.maxWidth;i&&ie[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function jv(t){return t.getRadiusAxis().inverse?0:1}function Yv(t){var e=t[0],i=t[t.length-1];e&&i&&Math.abs(Math.abs(e.coord-i.coord)-360)<1e-4&&t.pop()}function qv(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotate:e.getModel("axisLabel").get("rotate"),z2:1}}function Kv(t,e,i,n,o){var a=e.axis,r=a.dataToCoord(t),s=n.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,h,c=n.getRadiusAxis().getExtent();if("radius"===a.dim){var d=xt();Mt(d,d,s),St(d,d,[n.cx,n.cy]),l=Do([r,-o],d);var f=e.getModel("axisLabel").get("rotate")||0,p=FD.innerTextLayout(s,f*Math.PI/180,-1);u=p.textAlign,h=p.textVerticalAlign}else{var g=c[1];l=n.coordToPoint([g+o,r]);var m=n.cx,v=n.cy;u=Math.abs(l[0]-m)/g<.3?"center":l[0]>m?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}function $v(t,e){e.update="updateView",Es(e,function(e,i){var n={};return i.eachComponent({mainType:"geo",query:e},function(i){i[t](e.name),d(i.coordinateSystem.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}function Jv(t){var e={};d(t,function(t){e[t]=1}),t.length=0,d(e,function(e,i){t.push(i)})}function Qv(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function ty(t,e,n){function o(){var t=function(){};return t.prototype.__hidden=t.prototype,new t}var a={};return MN(e,function(e){var r=a[e]=o();MN(t[e],function(t,o){if(hL.isValidType(o)){var a={type:o,visual:t};n&&n(a,e),r[o]=new hL(a),"opacity"===o&&((a=i(a)).type="colorAlpha",r.__hidden.__alphaForOpacity=new hL(a))}})}),a}function ey(t,e,n){var o;d(n,function(t){e.hasOwnProperty(t)&&Qv(e[t])&&(o=!0)}),o&&d(n,function(n){e.hasOwnProperty(n)&&Qv(e[n])?t[n]=i(e[n]):delete t[n]})}function iy(t,e,i,n,o,a){function r(t){return i.getItemVisual(h,t)}function s(t,e){i.setItemVisual(h,t,e)}function l(t,l){h=null==a?t:l;var c=i.getRawDataItem(h);if(!c||!1!==c.visualMap)for(var d=n.call(o,t),f=e[d],p=u[d],g=0,m=p.length;g1)return!1;var h=uy(i-t,o-t,n-e,a-e)/l;return!(h<0||h>1)}function ly(t){return t<=1e-6&&t>=-1e-6}function uy(t,e,i,n){return t*n-e*i}function hy(t,e,i){var n=this._targetInfoList=[],o={},a=dy(e,t);TN(PN,function(t,e){(!i||!i.include||AN(i.include,e)>=0)&&t(a,n,o)})}function cy(t){return t[0]>t[1]&&t.reverse(),t}function dy(t,e){return Vi(t,e,{includeMainTypes:LN})}function fy(t,e,i,n){var o=i.getAxis(["x","y"][t]),a=cy(f([0,1],function(t){return e?o.coordToData(o.toLocalCoord(n[t])):o.toGlobalCoord(o.dataToCoord(n[t]))})),r=[];return r[t]=a,r[1-t]=[NaN,NaN],{values:a,xyMinMax:r}}function py(t,e,i,n){return[e[0]-n[t]*i[0],e[1]-n[t]*i[1]]}function gy(t,e){var i=my(t),n=my(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}function my(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}function vy(t,e,i,n,o){if(o){var a=t.getZr();a[VN]||(a[BN]||(a[BN]=yy),Nr(a,BN,i,e)(t,n))}}function yy(t,e){if(!t.isDisposed()){var i=t.getZr();i[VN]=!0,t.dispatchAction({type:"brushSelect",batch:e}),i[VN]=!1}}function xy(t,e,i,n){for(var o=0,a=e.length;o=0}function Ny(t,e,i){function n(t,e){return l(e.nodes,t)>=0}function o(t,n){var o=!1;return e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]&&(o=!0)})}),o}function a(t,n){n.nodes.push(t),e(function(e){d(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){var r={nodes:[],records:{}};if(e(function(t){r.records[t.name]={}}),!i)return r;a(i,r);var s;do{s=!1,t(function(t){!n(t,r)&&o(t,r)&&(a(t,r),s=!0)})}while(s);return r}}function Oy(t,e,i){var n=[1/0,-1/0];return $N(i,function(t){var i=t.getData();i&&$N(i.mapDimension(e,!0),function(t){var e=i.getApproximateExtent(t);e[0]n[1]&&(n[1]=e[1])})}),n[1]0?0:NaN);var r=i.getMax(!0);return null!=r&&"dataMax"!==r&&"function"!=typeof r?e[1]=r:o&&(e[1]=a>0?a-1:NaN),i.get("scale",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function Ry(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var a=Zo(o,[0,500]);a=Math.min(a,20);var r=e||0===n[0]&&100===n[1];i.setRange(r?null:+o[0].toFixed(a),r?null:+o[1].toFixed(a))}}function zy(t){var e=t._minMaxSpan={},i=t._dataZoomModel;$N(["min","max"],function(n){e[n+"Span"]=i.get(n+"Span");var o=i.get(n+"ValueSpan");if(null!=o&&(e[n+"ValueSpan"]=o,null!=(o=t.getAxisModel().axis.scale.parse(o)))){var a=t._dataExtent;e[n+"Span"]=Bo(a[0]+o,a,[0,100],!0)}})}function By(t){var e={};return tO(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function Vy(t,e){var i=t._rangePropMode,n=t.get("rangeMode");tO([["start","startValue"],["end","endValue"]],function(t,o){var a=null!=e[t[0]],r=null!=e[t[1]];a&&!r?i[o]="percent":!a&&r?i[o]="value":n?i[o]=n[o]:a&&(i[o]="percent")})}function Gy(t){return{x:"y",y:"x",radius:"angle",angle:"radius"}[t]}function Fy(t){return"vertical"===t?"ns-resize":"ew-resize"}function Wy(t,e){var i=Uy(t),n=e.dataZoomId,o=e.coordId;d(i,function(t,i){var a=t.dataZoomInfos;a[n]&&l(e.allCoordIds,o)<0&&(delete a[n],t.count--)}),jy(i);var a=i[o];a||((a=i[o]={coordId:o,dataZoomInfos:{},count:0}).controller=Xy(t,a),a.dispatchAction=v(Yy,t)),!a.dataZoomInfos[n]&&a.count++,a.dataZoomInfos[n]=e;var r=qy(a.dataZoomInfos);a.controller.enable(r.controlType,r.opt),a.controller.setPointerChecker(e.containsPoint),Nr(a,"dispatchAction",e.dataZoomModel.get("throttle",!0),"fixRate")}function Hy(t,e){var i=Uy(t);d(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),jy(i)}function Zy(t){return t.type+"\0_"+t.id}function Uy(t){var e=t.getZr();return e[fO]||(e[fO]={})}function Xy(t,e){var i=new oc(t.getZr());return d(["pan","zoom","scrollMove"],function(t){i.on(t,function(i){var n=[];d(e.dataZoomInfos,function(o){if(i.isAvailableBehavior(o.dataZoomModel.option)){var a=(o.getRange||{})[t],r=a&&a(e.controller,i);!o.dataZoomModel.get("disabled",!0)&&r&&n.push({dataZoomId:o.dataZoomId,start:r[0],end:r[1]})}}),n.length&&e.dispatchAction(n)})}),i}function jy(t){d(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function Yy(t,e){t.dispatchAction({type:"dataZoom",batch:e})}function qy(t){var e,i={type_true:2,type_move:1,type_false:0,type_undefined:-1},n=!0;return d(t,function(t){var o=t.dataZoomModel,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i["type_"+a]>i["type_"+e]&&(e=a),n&=o.get("preventDefaultMouseMove",!0)}),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!n}}}function Ky(t){return function(e,i,n,o){var a=this._range,r=a.slice(),s=e.axisModels[0];if(s){var l=t(r,s,e,i,n,o);return QL(l,r,[0,100],"all"),this._range=r,a[0]!==r[0]||a[1]!==r[1]?r:void 0}}}function $y(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}function Jy(t,e,i,n){for(var o=e.targetVisuals[n],a=hL.prepareVisualTypes(o),r={color:t.getData().getVisual("color")},s=0,l=a.length;s=0&&(r[a]=+r[a].toFixed(h)),r}function fx(t,e){var n=t.getData(),o=t.coordinateSystem;if(e&&!cx(e)&&!y(e.coord)&&o){var a=o.dimensions,r=px(e,n,o,t);if((e=i(e)).type&&YO[e.type]&&r.baseAxis&&r.valueAxis){var s=XO(a,r.baseAxis.dim),l=XO(a,r.valueAxis.dim);e.coord=YO[e.type](n,r.baseDataDim,r.valueDataDim,s,l),e.value=e.coord[l]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)YO[u[h]]&&(u[h]=yx(n,n.mapDimension(a[h]),u[h]));e.coord=u}}return e}function px(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(gx(n,o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=e.mapDimension(o.baseAxis.dim)):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=e.mapDimension(o.baseAxis.dim),o.valueDataDim=e.mapDimension(o.valueAxis.dim)),o}function gx(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var o=0;o=0)return!0}function Yx(t){for(var e=t.split(/\n+/g),i=[],n=f(Xx(e.shift()).split(pE),function(t){return{name:t,data:[]}}),o=0;o=0&&!i[o][n];o--);if(o<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(a){var r=a.getPercentRange();i[0][n]={dataZoomId:n,start:r[0],end:r[1]}}}}),i.push(e)}function t_(t){var e=n_(t),i=e[e.length-1];e.length>1&&e.pop();var n={};return gE(i,function(t,i){for(var o=e.length-1;o>=0;o--)if(t=e[o][i]){n[i]=t;break}}),n}function e_(t){t[mE]=null}function i_(t){return n_(t).length}function n_(t){var e=t[mE];return e||(e=t[mE]=[{}]),e}function o_(t,e,i){(this._brushController=new zf(i.getZr())).on("brush",m(this._onBrush,this)).mount(),this._isZoomActive}function a_(t){var e={};return d(["xAxisIndex","yAxisIndex"],function(i){e[i]=t[i],null==e[i]&&(e[i]="all"),(!1===e[i]||"none"===e[i])&&(e[i]=[])}),e}function r_(t,e){t.setIconStatus("back",i_(e)>1?"emphasis":"normal")}function s_(t,e,i,n,o){var a=i._isZoomActive;n&&"takeGlobalCursor"===n.type&&(a="dataZoomSelect"===n.key&&n.dataZoomSelectActive),i._isZoomActive=a,t.setIconStatus("zoom",a?"emphasis":"normal");var r=new hy(a_(t.option),e,{include:["grid"]});i._brushController.setPanels(r.makePanelOpts(o,function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"})).enableBrush(!!a&&{brushType:"auto",brushStyle:{lineWidth:0,fill:"rgba(0,0,0,0.2)"}})}function l_(t){this.model=t}function u_(t){return SE(t)}function h_(){if(!TE&&AE){TE=!0;var t=AE.styleSheets;t.length<31?AE.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}}function c_(t){return parseInt(t,10)}function d_(t,e){h_(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromStorage,a=e.addToStorage;e.delFromStorage=function(t){o.call(e,t),t&&t.onRemove&&t.onRemove(n)},e.addToStorage=function(t){t.onAdd&&t.onAdd(n),a.call(e,t)},this._firstPaint=!0}function f_(t){return function(){Yw('In IE8.0 VML mode painter not support method "'+t+'"')}}function p_(t){return document.createElementNS(sR,t)}function g_(t){return cR(1e4*t)/1e4}function m_(t){return t-vR}function v_(t,e){var i=e?t.textFill:t.fill;return null!=i&&i!==hR}function y_(t,e){var i=e?t.textStroke:t.stroke;return null!=i&&i!==hR}function x_(t,e){e&&__(t,"transform","matrix("+uR.call(e,",")+")")}function __(t,e,i){(!i||"linear"!==i.type&&"radial"!==i.type)&&t.setAttribute(e,i)}function w_(t,e,i){t.setAttributeNS("http://www.w3.org/1999/xlink",e,i)}function b_(t,e,i,n){if(v_(e,i)){var o=i?e.textFill:e.fill;o="transparent"===o?hR:o,"none"!==t.getAttribute("clip-path")&&o===hR&&(o="rgba(0, 0, 0, 0.002)"),__(t,"fill",o),__(t,"fill-opacity",null!=e.fillOpacity?e.fillOpacity*e.opacity:e.opacity)}else __(t,"fill",hR);if(y_(e,i)){var a=i?e.textStroke:e.stroke;__(t,"stroke",a="transparent"===a?hR:a),__(t,"stroke-width",(i?e.textStrokeWidth:e.lineWidth)/(!i&&e.strokeNoScale?n.getLineScale():1)),__(t,"paint-order",i?"stroke":"fill"),__(t,"stroke-opacity",null!=e.strokeOpacity?e.strokeOpacity:e.opacity),e.lineDash?(__(t,"stroke-dasharray",e.lineDash.join(",")),__(t,"stroke-dashoffset",cR(e.lineDashOffset||0))):__(t,"stroke-dasharray",""),e.lineCap&&__(t,"stroke-linecap",e.lineCap),e.lineJoin&&__(t,"stroke-linejoin",e.lineJoin),e.miterLimit&&__(t,"stroke-miterlimit",e.miterLimit)}else __(t,"stroke",hR)}function S_(t){for(var e=[],i=t.data,n=t.len(),o=0;o=gR||!m_(g)&&(d>-pR&&d<0||d>pR)==!!p;var y=g_(s+u*fR(c)),x=g_(l+h*dR(c));m&&(d=p?gR-1e-4:1e-4-gR,v=!0,9===o&&e.push("M",y,x));var _=g_(s+u*fR(c+d)),w=g_(l+h*dR(c+d));e.push("A",g_(u),g_(h),cR(f*mR),+v,+p,_,w);break;case lR.Z:a="Z";break;case lR.R:var _=g_(i[o++]),w=g_(i[o++]),b=g_(i[o++]),S=g_(i[o++]);e.push("M",_,w,"L",_+b,w,"L",_+b,w+S,"L",_,w+S,"L",_,w)}a&&e.push(a);for(var M=0;M=11),domSupported:"undefined"!=typeof document}}(navigator.userAgent),X_={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},j_={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},Y_=Object.prototype.toString,q_=Array.prototype,K_=q_.forEach,$_=q_.filter,J_=q_.slice,Q_=q_.map,tw=q_.reduce,ew={},iw=function(){return ew.createCanvas()};ew.createCanvas=function(){return document.createElement("canvas")};var nw,ow="__ec_primitive__";E.prototype={constructor:E,get:function(t){return this.data.hasOwnProperty(t)?this.data[t]:null},set:function(t,e){return this.data[t]=e},each:function(t,e){void 0!==e&&(t=m(t,e));for(var i in this.data)this.data.hasOwnProperty(i)&&t(this.data[i],i)},removeKey:function(t){delete this.data[t]}};var aw=(Object.freeze||Object)({$override:e,clone:i,merge:n,mergeAll:o,extend:a,defaults:r,createCanvas:iw,getContext:s,indexOf:l,inherits:u,mixin:h,isArrayLike:c,each:d,map:f,reduce:p,filter:g,find:function(t,e,i){if(t&&e)for(var n=0,o=t.length;n3&&(n=dw.call(n,1));for(var a=e.length,r=0;r4&&(n=dw.call(n,1,n.length-1));for(var a=n[n.length-1],r=e.length,s=0;s1&&n&&n.length>1){var a=ft(n)/ft(o);!isFinite(a)&&(a=1),e.pinchScale=a;var r=pt(n);return e.pinchX=r[0],e.pinchY=r[1],{type:"pinch",target:t[0].target,event:e}}}}},xw="silent";vt.prototype.dispose=function(){};var _w=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],ww=function(t,e,i,n){fw.call(this),this.storage=t,this.painter=e,this.painterRoot=n,i=i||new vt,this.proxy=null,this._hovered={},this._lastTouchMoment,this._lastX,this._lastY,this._gestureMgr,it.call(this),this.setHandlerProxy(i)};ww.prototype={constructor:ww,setHandlerProxy:function(t){this.proxy&&this.proxy.dispose(),t&&(d(_w,function(e){t.on&&t.on(e,this[e],this)},this),t.handler=this),this.proxy=t},mousemove:function(t){var e=t.zrX,i=t.zrY,n=this._hovered,o=n.target;o&&!o.__zr&&(o=(n=this.findHover(n.x,n.y)).target);var a=this._hovered=this.findHover(e,i),r=a.target,s=this.proxy;s.setCursor&&s.setCursor(r?r.cursor:"default"),o&&r!==o&&this.dispatchToElement(n,"mouseout",t),this.dispatchToElement(a,"mousemove",t),r&&r!==o&&this.dispatchToElement(a,"mouseover",t)},mouseout:function(t){this.dispatchToElement(this._hovered,"mouseout",t);var e,i=t.toElement||t.relatedTarget;do{i=i&&i.parentNode}while(i&&9!==i.nodeType&&!(e=i===this.painterRoot));!e&&this.trigger("globalout",{event:t})},resize:function(t){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){var n=(t=t||{}).target;if(!n||!n.silent){for(var o="on"+e,a=gt(e,t,i);n&&(n[o]&&(a.cancelBubble=n[o].call(n,a)),n.trigger(e,a),n=n.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[o]&&t[o].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o={x:t,y:e},a=n.length-1;a>=0;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=yt(n[a],t,e))&&(!o.topTarget&&(o.topTarget=n[a]),r!==xw)){o.target=n[a];break}}return o},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new vw);var i=this._gestureMgr;"start"===e&&i.clear();var n=i.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&i.clear(),n){var o=n.type;t.gestureEvent=o,this.dispatchToElement({target:n.target},o,n.event)}}},d(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){ww.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY),n=i.target;if("mousedown"===t)this._downEl=n,this._downPoint=[e.zrX,e.zrY],this._upEl=n;else if("mouseup"===t)this._upEl=n;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||uw(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(i,t,e)}}),h(ww,fw),h(ww,it);var bw="undefined"==typeof Float32Array?Array:Float32Array,Sw=(Object.freeze||Object)({create:xt,identity:_t,copy:wt,mul:bt,translate:St,rotate:Mt,scale:It,invert:Tt,clone:At}),Mw=_t,Iw=5e-5,Tw=function(t){(t=t||{}).position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},Aw=Tw.prototype;Aw.transform=null,Aw.needLocalTransform=function(){return Dt(this.rotation)||Dt(this.position[0])||Dt(this.position[1])||Dt(this.scale[0]-1)||Dt(this.scale[1]-1)};var Dw=[];Aw.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;if(i||e){n=n||xt(),i?this.getLocalTransform(n):Mw(n),e&&(i?bt(n,t.transform,n):wt(n,t.transform)),this.transform=n;var o=this.globalScaleRatio;if(null!=o&&1!==o){this.getGlobalScale(Dw);var a=Dw[0]<0?-1:1,r=Dw[1]<0?-1:1,s=((Dw[0]-a)*o+a)/Dw[0]||0,l=((Dw[1]-r)*o+r)/Dw[1]||0;n[0]*=s,n[1]*=s,n[2]*=l,n[3]*=l}this.invTransform=this.invTransform||xt(),Tt(this.invTransform,n)}else n&&Mw(n)},Aw.getLocalTransform=function(t){return Tw.getLocalTransform(this,t)},Aw.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},Aw.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var Cw=[],Lw=xt();Aw.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],i=t[2]*t[2]+t[3]*t[3],n=this.position,o=this.scale;Dt(e-1)&&(e=Math.sqrt(e)),Dt(i-1)&&(i=Math.sqrt(i)),t[0]<0&&(e=-e),t[3]<0&&(i=-i),n[0]=t[4],n[1]=t[5],o[0]=e,o[1]=i,this.rotation=Math.atan2(-t[1]/i,t[0]/e)}},Aw.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(bt(Cw,t.invTransform,e),e=Cw);var i=this.origin;i&&(i[0]||i[1])&&(Lw[4]=i[0],Lw[5]=i[1],bt(Cw,e,Lw),Cw[4]-=i[0],Cw[5]-=i[1],e=Cw),this.setLocalTransform(e)}},Aw.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},Aw.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&Q(i,i,n),i},Aw.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&Q(i,i,n),i},Tw.getLocalTransform=function(t,e){Mw(e=e||[]);var i=t.origin,n=t.scale||[1,1],o=t.rotation||0,a=t.position||[0,0];return i&&(e[4]-=i[0],e[5]-=i[1]),It(e,e,n),o&&Mt(e,e,o),i&&(e[4]+=i[0],e[5]+=i[1]),e[4]+=a[0],e[5]+=a[1],e};var kw={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,i=.1;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=.1):e=.4*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-kw.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*kw.bounceIn(2*t):.5*kw.bounceOut(2*t-1)+.5}};Ct.prototype={constructor:Ct,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)this._pausedTime+=e;else{var i=(t-this._startTime-this._pausedTime)/this._life;if(!(i<0)){i=Math.min(i,1);var n=this.easing,o="string"==typeof n?kw[n]:n,a="function"==typeof o?o(i):i;return this.fire("frame",a),1===i?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){this[t="on"+t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var Pw=function(){this.head=null,this.tail=null,this._len=0},Nw=Pw.prototype;Nw.insert=function(t){var e=new Ow(t);return this.insertEntry(e),e},Nw.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Nw.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Nw.len=function(){return this._len},Nw.clear=function(){this.head=this.tail=null,this._len=0};var Ow=function(t){this.value=t,this.next,this.prev},Ew=function(t){this._list=new Pw,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Rw=Ew.prototype;Rw.put=function(t,e){var i=this._list,n=this._map,o=null;if(null==n[t]){var a=i.len(),r=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=i.head;i.remove(s),delete n[s.key],o=s.value,this._lastRemovedEntry=s}r?r.value=e:r=new Ow(e),r.key=t,i.insertEntry(r),n[t]=r}return o},Rw.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},Rw.clear=function(){this._list.clear(),this._map={}};var zw={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},Bw=new Ew(20),Vw=null,Gw=Ut,Fw=Xt,Ww=(Object.freeze||Object)({parse:Gt,lift:Ht,toHex:Zt,fastLerp:Ut,fastMapToColor:Gw,lerp:Xt,mapToColor:Fw,modifyHSL:jt,modifyAlpha:Yt,stringify:qt}),Hw=Array.prototype.slice,Zw=function(t,e,i,n){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||Kt,this._setter=n||$t,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Zw.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:ae(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;t=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new de(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},de.create=function(t){return new de(t.x,t.y,t.width,t.height)};var tb=function(t){t=t||{},Kw.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};tb.prototype={constructor:tb,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof tb&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,n=this._children,o=l(n,t);return o<0?this:(n.splice(o,1),t.parent=null,i&&(i.delFromStorage(t),t instanceof tb&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e=0&&(this.delFromStorage(t),this._roots.splice(o,1),t instanceof tb&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t&&(t.__storage=this,t.dirty(!1)),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:we};var ob={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1},ab=function(t,e,i){return ob.hasOwnProperty(e)?i*=t.dpr:i},rb={NONE:0,STYLE_BIND:1,PLAIN_TEXT:2},sb=9,lb=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],ub=function(t){this.extendFrom(t,!1)};ub.prototype={constructor:ub,fill:"#000",stroke:null,opacity:1,fillOpacity:null,strokeOpacity:null,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,i){var n=this,o=i&&i.style,a=!o||t.__attrCachedBy!==rb.STYLE_BIND;t.__attrCachedBy=rb.STYLE_BIND;for(var r=0;r0},extendFrom:function(t,e){if(t)for(var i in t)!t.hasOwnProperty(i)||!0!==e&&(!1===e?this.hasOwnProperty(i):null==t[i])||(this[i]=t[i])},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,i){for(var n=("radial"===e.type?Se:be)(t,e,i),o=e.colorStops,a=0;a=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i15)break}s.__drawIndex=m,s.__drawIndex0&&t>n[0]){for(r=0;rt);r++);a=i[n[r]]}if(n.splice(r+1,0,t),i[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else Yw("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n0?.01:0),this._needsManuallyCompositing),a.__builtin__||Yw("ZLevel "+s+" has been used by unkown layer "+a.id),a!==i&&(a.__used=!0,a.__startIndex!==o&&(a.__dirty=!0),a.__startIndex=o,a.incremental?a.__drawIndex=-1:a.__drawIndex=o,e(o),i=a),r.__dirty&&(a.__dirty=!0,a.incremental&&a.__drawIndex<0&&(a.__drawIndex=o))}e(o),this.eachBuiltinLayer(function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},setBackgroundColor:function(t){this._backgroundColor=t},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?n(i[t],e,!0):i[t]=e;for(var o=0;o=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i=0||n&&l(n,r)<0)){var s=e.getShallow(r);null!=s&&(o[t[a][0]]=s)}}return o}},tS=Qb([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),eS={getLineStyle:function(t){var e=tS(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}},iS=Qb([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),nS={getAreaStyle:function(t,e){return iS(this,t,e)}},oS=Math.pow,aS=Math.sqrt,rS=1e-8,sS=1e-4,lS=aS(3),uS=1/3,hS=V(),cS=V(),dS=V(),fS=Math.min,pS=Math.max,gS=Math.sin,mS=Math.cos,vS=2*Math.PI,yS=V(),xS=V(),_S=V(),wS=[],bS=[],SS={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},MS=[],IS=[],TS=[],AS=[],DS=Math.min,CS=Math.max,LS=Math.cos,kS=Math.sin,PS=Math.sqrt,NS=Math.abs,OS="undefined"!=typeof Float32Array,ES=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};ES.prototype={constructor:ES,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=NS(1/Xw/t)||0,this._uy=NS(1/Xw/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(SS.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=NS(t-this._xi)>this._ux||NS(e-this._yi)>this._uy||this._len<5;return this.addData(SS.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(SS.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(SS.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(SS.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=LS(o)*i+t,this._yi=kS(o)*i+e,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(SS.R,t,e,i,n),this},closePath:function(){this.addData(SS.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;i0&&f<=t||h<0&&f>=t||0===h&&(c>0&&p<=e||c<0&&p>=e);)f+=h*(i=r[n=this._dashIdx]),p+=c*i,this._dashIdx=(n+1)%g,h>0&&fl||c>0&&pu||s[n%2?"moveTo":"lineTo"](h>=0?DS(f,t):CS(f,t),c>=0?DS(p,e):CS(p,e));h=f-t,c=p-e,this._dashOffset=-PS(h*h+c*c)},_dashedBezierTo:function(t,e,i,n,o,a){var r,s,l,u,h,c=this._dashSum,d=this._dashOffset,f=this._lineDash,p=this._ctx,g=this._xi,m=this._yi,v=tn,y=0,x=this._dashIdx,_=f.length,w=0;for(d<0&&(d=c+d),d%=c,r=0;r<1;r+=.1)s=v(g,t,i,o,r+.1)-v(g,t,i,o,r),l=v(m,e,n,a,r+.1)-v(m,e,n,a,r),y+=PS(s*s+l*l);for(;x<_&&!((w+=f[x])>d);x++);for(r=(w-d)/y;r<=1;)u=v(g,t,i,o,r),h=v(m,e,n,a,r),x%2?p.moveTo(u,h):p.lineTo(u,h),r+=f[x]/y,x=(x+1)%_;x%2!=0&&p.lineTo(o,a),s=o-u,l=a-h,this._dashOffset=-PS(s*s+l*l)},_dashedQuadraticTo:function(t,e,i,n){var o=i,a=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,OS&&(this.data=new Float32Array(t)))},getBoundingRect:function(){MS[0]=MS[1]=TS[0]=TS[1]=Number.MAX_VALUE,IS[0]=IS[1]=AS[0]=AS[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,o=0,a=0;al||NS(r-o)>u||c===h-1)&&(t.lineTo(a,r),n=a,o=r);break;case SS.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case SS.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case SS.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],w=g>m?g:m,b=g>m?1:g/m,S=g>m?m/g:1,M=v+y;Math.abs(g-m)>.001?(t.translate(f,p),t.rotate(x),t.scale(b,S),t.arc(0,0,w,v,M,1-_),t.scale(1/b,1/S),t.rotate(-x),t.translate(-f,-p)):t.arc(f,p,w,v,M,1-_),1===c&&(e=LS(v)*g+f,i=kS(v)*m+p),n=LS(M)*g+f,o=kS(M)*m+p;break;case SS.R:e=n=s[c],i=o=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case SS.Z:t.closePath(),n=e,o=i}}}},ES.CMD=SS;var RS=2*Math.PI,zS=2*Math.PI,BS=ES.CMD,VS=2*Math.PI,GS=1e-4,FS=[-1,-1,-1],WS=[-1,-1],HS=fb.prototype.getCanvasPattern,ZS=Math.abs,US=new ES(!0);Pn.prototype={constructor:Pn,type:"path",__dirtyPath:!0,strokeContainThreshold:5,subPixelOptimize:!1,brush:function(t,e){var i=this.style,n=this.path||US,o=i.hasStroke(),a=i.hasFill(),r=i.fill,s=i.stroke,l=a&&!!r.colorStops,u=o&&!!s.colorStops,h=a&&!!r.image,c=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=i.getGradient(t,r,d)),u&&(d=d||this.getBoundingRect(),this._strokeGradient=i.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:h&&(t.fillStyle=HS.call(r,t)),u?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=HS.call(s,t));var f=i.lineDash,p=i.lineDashOffset,g=!!t.setLineDash,m=this.getGlobalScale();if(n.setScale(m[0],m[1]),this.__dirtyPath||f&&!g&&o?(n.beginPath(t),f&&!g&&(n.setLineDash(f),n.setLineDashOffset(p)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a)if(null!=i.fillOpacity){v=t.globalAlpha;t.globalAlpha=i.fillOpacity*i.opacity,n.fill(t),t.globalAlpha=v}else n.fill(t);if(f&&g&&(t.setLineDash(f),t.lineDashOffset=p),o)if(null!=i.strokeOpacity){var v=t.globalAlpha;t.globalAlpha=i.strokeOpacity*i.opacity,n.stroke(t),t.globalAlpha=v}else n.stroke(t);f&&g&&t.setLineDash([]),null!=i.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))},buildPath:function(t,e,i){},createPathProxy:function(){this.path=new ES},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;n||(n=this.path=new ES),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var a=e.lineWidth,r=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),r>1e-10&&(o.width+=a/r,o.height+=a/r,o.x-=a/r/2,o.y-=a/r/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var a=this.path.data;if(o.hasStroke()){var r=o.lineWidth,s=o.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(o.hasFill()||(r=Math.max(r,this.strokeContainThreshold)),kn(a,r/s,t,e)))return!0}if(o.hasFill())return Ln(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):di.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(w(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&ZS(t[0]-1)>1e-10&&ZS(t[3]-1)>1e-10?Math.sqrt(ZS(t[0]*t[3]-t[2]*t[1])):1}},Pn.extend=function(t){var e=function(e){Pn.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var n=this.shape;for(var o in i)!n.hasOwnProperty(o)&&i.hasOwnProperty(o)&&(n[o]=i[o])}t.init&&t.init.call(this,e)};u(e,Pn);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},u(Pn,di);var XS=ES.CMD,jS=[[],[],[]],YS=Math.sqrt,qS=Math.atan2,KS=function(t,e){var i,n,o,a,r,s,l=t.data,u=XS.M,h=XS.C,c=XS.L,d=XS.R,f=XS.A,p=XS.Q;for(o=0,a=0;o=11?function(){var e,i=this.__clipPaths,n=this.style;if(i)for(var o=0;oi-2?i-1:c+1],u=t[c>i-3?i-1:c+2]);var p=d*d,g=d*p;n.push([Bn(s[0],f[0],l[0],u[0],d,p,g),Bn(s[1],f[1],l[1],u[1],d,p,g)])}return n},fM=function(t,e,i,n){var o,a,r,s,l=[],u=[],h=[],c=[];if(n){r=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;d=i&&a>=o)return{x:i,y:o,width:n-i,height:a-o}},createIcon:Po,Group:tb,Image:fi,Text:rM,Circle:sM,Sector:hM,Ring:cM,Polygon:pM,Polyline:gM,Rect:yM,Line:_M,BezierCurve:bM,Arc:SM,IncrementalDisplayable:Zn,CompoundPath:MM,LinearGradient:TM,RadialGradient:AM,BoundingRect:de}),BM=["textStyle","color"],VM={getTextColor:function(t){var e=this.ecModel;return this.getShallow("color")||(!t&&e?e.get(BM):null)},getFont:function(){return So({fontStyle:this.getShallow("fontStyle"),fontWeight:this.getShallow("fontWeight"),fontSize:this.getShallow("fontSize"),fontFamily:this.getShallow("fontFamily")},this.ecModel)},getTextRect:function(t){return ke(t,this.getFont(),this.getShallow("align"),this.getShallow("verticalAlign")||this.getShallow("baseline"),this.getShallow("padding"),this.getShallow("lineHeight"),this.getShallow("rich"),this.getShallow("truncateText"))}},GM=Qb([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]),FM={getItemStyle:function(t,e){var i=GM(this,t,e),n=this.getBorderLineDash();return n&&(i.lineDash=n),i},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}},WM=h,HM=Bi();No.prototype={constructor:No,init:null,mergeOption:function(t){n(this.option,t,!0)},get:function(t,e){return null==t?this.option:Oo(this.option,this.parsePath(t),!e&&Eo(this,t))},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=!e&&Eo(this,t);return null==n&&o&&(n=o.getShallow(t)),n},getModel:function(t,e){var i,n=null==t?this.option:Oo(this.option,t=this.parsePath(t));return e=e||(i=Eo(this,t))&&i.getModel(t),new No(n,e,this.ecModel)},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){return new(0,this.constructor)(i(this.option))},setReadOnly:function(t){},parsePath:function(t){return"string"==typeof t&&(t=t.split(".")),t},customizeGetParent:function(t){HM(this).getParent=t},isAnimationEnabled:function(){if(!U_.node){if(null!=this.option.animation)return!!this.option.animation;if(this.parentModel)return this.parentModel.isAnimationEnabled()}}},ji(No),Yi(No),WM(No,eS),WM(No,nS),WM(No,VM),WM(No,FM);var ZM=0,UM=1e-4,XM=9007199254740991,jM=/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,YM=(Object.freeze||Object)({linearMap:Bo,parsePercent:Vo,round:Go,asc:Fo,getPrecision:Wo,getPrecisionSafe:Ho,getPixelPrecision:Zo,getPercentWithPrecision:Uo,MAX_SAFE_INTEGER:XM,remRadian:Xo,isRadianAroundZero:jo,parseDate:Yo,quantity:qo,nice:$o,quantile:function(t,e){var i=(t.length-1)*e+1,n=Math.floor(i),o=+t[n-1],a=i-n;return a?o+a*(t[n]-o):o},reformIntervals:Jo,isNumeric:Qo}),qM=L,KM=/([&<>"'])/g,$M={"&":"&","<":"<",">":">",'"':""","'":"'"},JM=["a","b","c","d","e","f","g"],QM=function(t,e){return"{"+t+(null==e?"":e)+"}"},tI=ze,eI=(Object.freeze||Object)({addCommas:ta,toCamelCase:ea,normalizeCssArray:qM,encodeHTML:ia,formatTpl:na,formatTplSimple:oa,getTooltipMarker:aa,formatTime:sa,capitalFirst:la,truncateText:tI,getTextBoundingRect:function(t){return ke(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)},getTextRect:function(t,e,i,n,o,a,r,s){return ke(t,e,i,n,o,s,a,r)}}),iI=d,nI=["left","right","top","bottom","width","height"],oI=[["width","left","right"],["height","top","bottom"]],aI=ua,rI=(v(ua,"vertical"),v(ua,"horizontal"),{getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}),sI=Bi(),lI=No.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){No.call(this,t,e,i,n),this.uid=Ro("ec_cpt_model")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,o=i?ga(t):{};n(t,e.getTheme().get(this.mainType)),n(t,this.getDefaultOption()),i&&pa(t,o,i)},mergeOption:function(t,e){n(this.option,t,!0);var i=this.layoutMode;i&&pa(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){var t=sI(this);if(!t.defaultOption){for(var e=[],i=this.constructor;i;){var o=i.prototype.defaultOption;o&&e.push(o),i=i.superClass}for(var a={},r=e.length-1;r>=0;r--)a=n(a,e[r],!0);t.defaultOption=a}return t.defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});$i(lI,{registerWhenExtend:!0}),function(t){var e={};t.registerSubTypeDefaulter=function(t,i){t=Ui(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=Ui(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o}}(lI),function(t,e){function i(t){var i={},a=[];return d(t,function(r){var s=n(i,r),u=o(s.originalDeps=e(r),t);s.entryCount=u.length,0===s.entryCount&&a.push(r),d(u,function(t){l(s.predecessor,t)<0&&s.predecessor.push(t);var e=n(i,t);l(e.successor,t)<0&&e.successor.push(r)})}),{graph:i,noEntryList:a}}function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function o(t,e){var i=[];return d(t,function(t){l(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,n,o){function a(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}if(t.length){var r=i(e),s=r.graph,l=r.noEntryList,u={};for(d(t,function(t){u[t]=!0});l.length;){var h=l.pop(),c=s[h],f=!!u[h];f&&(n.call(o,h,c.originalDeps.slice()),delete u[h]),d(c.successor,f?function(t){u[t]=!0,a(t)}:a)}d(u,function(){throw new Error("Circle dependency may exists")})}}}(lI,function(t){var e=[];return d(lI.getClassesByMainType(t),function(t){e=e.concat(t.prototype.dependencies||[])}),e=f(e,function(t){return Ui(t).main}),"dataset"!==t&&l(e,"dataset")<=0&&e.unshift("dataset"),e}),h(lI,rI);var uI="";"undefined"!=typeof navigator&&(uI=navigator.platform||"");var hI={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],gradientColor:["#f6efa6","#d88273","#bf444c"],textStyle:{fontFamily:uI.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},cI=Bi(),dI={clearColorPalette:function(){cI(this).colorIdx=0,cI(this).colorNameMap={}},getColorFromPalette:function(t,e,i){var n=cI(e=e||this),o=n.colorIdx||0,a=n.colorNameMap=n.colorNameMap||{};if(a.hasOwnProperty(t))return a[t];var r=Di(this.get("color",!0)),s=this.get("colorLayer",!0),l=null!=i&&s?va(s,i):r;if((l=l||r)&&l.length){var u=l[o];return t&&(a[t]=u),n.colorIdx=(o+1)%l.length,u}}},fI={cartesian2d:function(t,e,i,n){var o=t.getReferringComponents("xAxis")[0],a=t.getReferringComponents("yAxis")[0];e.coordSysDims=["x","y"],i.set("x",o),i.set("y",a),xa(o)&&(n.set("x",o),e.firstCategoryDimIndex=0),xa(a)&&(n.set("y",a),e.firstCategoryDimIndex=1)},singleAxis:function(t,e,i,n){var o=t.getReferringComponents("singleAxis")[0];e.coordSysDims=["single"],i.set("single",o),xa(o)&&(n.set("single",o),e.firstCategoryDimIndex=0)},polar:function(t,e,i,n){var o=t.getReferringComponents("polar")[0],a=o.findAxisModel("radiusAxis"),r=o.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],i.set("radius",a),i.set("angle",r),xa(a)&&(n.set("radius",a),e.firstCategoryDimIndex=0),xa(r)&&(n.set("angle",r),e.firstCategoryDimIndex=1)},geo:function(t,e,i,n){e.coordSysDims=["lng","lat"]},parallel:function(t,e,i,n){var o=t.ecModel,a=o.getComponent("parallel",t.get("parallelIndex")),r=e.coordSysDims=a.dimensions.slice();d(a.parallelAxisIndex,function(t,a){var s=o.getComponent("parallelAxis",t),l=r[a];i.set(l,s),xa(s)&&null==e.firstCategoryDimIndex&&(n.set(l,s),e.firstCategoryDimIndex=a)})}},pI="original",gI="arrayRows",mI="objectRows",vI="keyedColumns",yI="unknown",xI="typedArray",_I="column",wI="row";_a.seriesDataToSource=function(t){return new _a({data:t,sourceFormat:S(t)?xI:pI,fromDataset:!1})},Yi(_a);var bI=Bi(),SI="\0_ec_inner",MI=No.extend({init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new No(i),this._optionManager=n},setOption:function(t,e){k(!(SI in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):Ea.call(this,n),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(this.mergeOption(o),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&d(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){var e=this.option,o=this._componentsMap,r=[];Sa(this),d(t,function(t,o){null!=t&&(lI.hasClass(o)?o&&r.push(o):e[o]=null==e[o]?i(t):n(e[o],t,!0))}),lI.topologicalTravel(r,lI.getAllClassMainTypes(),function(i,n){var r=Di(t[i]),s=Pi(o.get(i),r);Ni(s),d(s,function(t,e){var n=t.option;w(n)&&(t.keyInfo.mainType=i,t.keyInfo.subType=za(i,n,t.exist))});var l=Ra(o,n);e[i]=[],o.set(i,[]),d(s,function(t,n){var r=t.exist,s=t.option;if(k(w(s)||r,"Empty component definition"),s){var u=lI.getClass(i,t.keyInfo.subType,!0);if(r&&r instanceof u)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var h=a({dependentModels:l,componentIndex:n},t.keyInfo);a(r=new u(s,this,this,h),h),r.init(s,this,this,h),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);o.get(i)[n]=r,e[i][n]=r.option},this),"series"===i&&Ba(this,o.get("series"))},this),this._seriesIndicesMap=R(this._seriesIndices=this._seriesIndices||[])},getOption:function(){var t=i(this.option);return d(t,function(e,i){if(lI.hasClass(i)){for(var n=(e=Di(e)).length-1;n>=0;n--)Ei(e[n])&&e.splice(n,1);t[i]=e}}),delete t[SI],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap.get(t);if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var r;if(null!=i)y(i)||(i=[i]),r=g(f(i,function(t){return a[t]}),function(t){return!!t});else if(null!=n){var s=y(n);r=g(a,function(t){return s&&l(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var u=y(o);r=g(a,function(t){return u&&l(o,t.name)>=0||!u&&t.name===o})}else r=a.slice();return Va(r,t)},findComponents:function(t){var e=t.query,i=t.mainType,n=function(t){var e=i+"Index",n=i+"Id",o=i+"Name";return!t||null==t[e]&&null==t[n]&&null==t[o]?null:{mainType:i,index:t[e],id:t[n],name:t[o]}}(e);return function(e){return t.filter?g(e,t.filter):e}(Va(n?this.queryComponents(n):this._componentsMap.get(i),t))},eachComponent:function(t,e,i){var n=this._componentsMap;"function"==typeof t?(i=e,e=t,n.each(function(t,n){d(t,function(t,o){e.call(i,n,t,o)})})):_(t)?d(n.get(t),e,i):w(t)&&d(this.findComponents(t),e,i)},getSeriesByName:function(t){return g(this._componentsMap.get("series"),function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){return g(this._componentsMap.get("series"),function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get("series").slice()},getSeriesCount:function(){return this._componentsMap.get("series").length},eachSeries:function(t,e){d(this._seriesIndices,function(i){var n=this._componentsMap.get("series")[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){d(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,i){d(this._seriesIndices,function(n){var o=this._componentsMap.get("series")[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return d(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return null==this._seriesIndicesMap.get(t.componentIndex)},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){Ba(this,g(this._componentsMap.get("series"),t,e))},restoreData:function(t){var e=this._componentsMap;Ba(this,e.get("series"));var i=[];e.each(function(t,e){i.push(e)}),lI.topologicalTravel(i,lI.getAllClassMainTypes(),function(i,n){d(e.get(i),function(e){("series"!==i||!Na(e,t))&&e.restoreData()})})}});h(MI,dI);var II=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"],TI={};Fa.prototype={constructor:Fa,create:function(t,e){var i=[];d(TI,function(n,o){var a=n.create(t,e);i=i.concat(a||[])}),this._coordinateSystems=i},update:function(t,e){d(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},Fa.register=function(t,e){TI[t]=e},Fa.get=function(t){return TI[t]};var AI=d,DI=i,CI=f,LI=n,kI=/^(min|max)?(.+)$/;Wa.prototype={constructor:Wa,setOption:function(t,e){t&&d(Di(t.series),function(t){t&&t.data&&S(t.data)&&N(t.data)}),t=DI(t,!0);var i=this._optionBackup,n=Ha.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(ja(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=CI(e.timelineOptions,DI),this._mediaList=CI(e.mediaList,DI),this._mediaDefault=DI(e.mediaDefault),this._currentMediaIndices=[],DI(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=DI(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],r=[];if(!n.length&&!o)return r;for(var s=0,l=n.length;s=1)&&(t=1),t}var i=this._upstream,n=t&&t.skip;if(this._dirty&&i){var o=this.context;o.data=o.outputData=i.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!n&&(a=this._plan(this.context));var r=e(this._modBy),s=this._modDataCount||0,l=e(t&&t.modBy),u=t&&t.modDataCount||0;r===l&&s===u||(a="reset");var h;(this._dirty||"reset"===a)&&(this._dirty=!1,h=yr(this,n)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=i?i._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,f=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!n&&(h||d=i?null:t1&&a>0?e:t}};return s}();UI.dirty=function(){this._dirty=!0,this._onDirty&&this._onDirty(this.context)},UI.unfinished=function(){return this._progress&&this._dueIndex":"\n",s="richText"===n,l={},u=0,h=this.getData(),c=h.mapDimension("defaultedTooltip",!0),f=c.length,g=this.getRawValue(t),m=y(g),v=h.getItemVisual(t,"color");w(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var x=(f>1||m&&!f?function(i){function o(t,i){var o=h.getDimensionInfo(i);if(o&&!1!==o.otherDims.tooltip){var c=o.type,d="sub"+a.seriesIndex+"at"+u,p=aa({color:v,type:"subItem",renderMode:n,markerId:d}),g="string"==typeof p?p:p.content,m=(r?g+ia(o.displayName||"-")+": ":"")+ia("ordinal"===c?t+"":"time"===c?e?"":sa("yyyy/MM/dd hh:mm:ss",t):ta(t));m&&f.push(m),s&&(l[d]=v,++u)}}var r=p(i,function(t,e,i){var n=h.getDimensionInfo(i);return t|=n&&!1!==n.tooltip&&null!=n.displayName},0),f=[];c.length?d(c,function(e){o(fr(h,t,e),e)}):d(i,o);var g=r?s?"\n":"
":"",m=g+f.join(g||", ");return{renderMode:n,content:m,style:l}}(g):o(f?fr(h,t,c[0]):m?g[0]:g)).content,_=a.seriesIndex+"at"+u,b=aa({color:v,type:"item",renderMode:n,markerId:_});l[_]=v,++u;var S=h.getName(t),M=this.name;Oi(this)||(M=""),M=M?ia(M)+(e?": ":r):"";var I="string"==typeof b?b:b.content;return{html:e?I+M+x:M+I+(S?ia(S)+": "+x:x),markers:l}},isAnimationEnabled:function(){if(U_.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,o=dI.getColorFromPalette.call(this,t,e,i);return o||(o=n.getColorFromPalette(t,e,i)),o},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});h(YI,ZI),h(YI,dI);var qI=function(){this.group=new tb,this.uid=Ro("viewComponent")};qI.prototype={constructor:qI,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){},filterForExposedEvent:null};var KI=qI.prototype;KI.updateView=KI.updateLayout=KI.updateVisual=function(t,e,i,n){},ji(qI),$i(qI,{registerWhenExtend:!0});var $I=function(){var t=Bi();return function(e){var i=t(e),n=e.pipelineContext,o=i.large,a=i.progressiveRender,r=i.large=n.large,s=i.progressiveRender=n.progressiveRender;return!!(o^r||a^s)&&"reset"}},JI=Bi(),QI=$I();Ar.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){Cr(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){Cr(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};var tT=Ar.prototype;tT.updateView=tT.updateLayout=tT.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},ji(Ar),$i(Ar,{registerWhenExtend:!0}),Ar.markUpdateMethod=function(t,e){JI(t).updateMethod=e};var eT={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},iT="\0__throttleOriginMethod",nT="\0__throttleRate",oT="\0__throttleType",aT={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var i=t.getData(),n=(t.visualColorAccessPath||"itemStyle.color").split("."),o=t.get(n)||t.getColorFromPalette(t.name,null,e.getSeriesCount());if(i.setVisual("color",o),!e.isSeriesFiltered(t)){"function"!=typeof o||o instanceof IM||i.each(function(e){i.setItemVisual(e,"color",o(t.getDataParams(e)))});return{dataEach:i.hasItemOption?function(t,e){var i=t.getItemModel(e).get(n,!0);null!=i&&t.setItemVisual(e,"color",i)}:null}}}},rT={toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}},sT=function(t,e){function i(t,e){if("string"!=typeof t)return t;var i=t;return d(e,function(t,e){i=i.replace(new RegExp("\\{\\s*"+e+"\\s*\\}","g"),t)}),i}function n(t){var e=a.get(t);if(null==e){for(var i=t.split("."),n=rT.aria,o=0;o1?"series.multiple.prefix":"series.single.prefix"),{seriesCount:r}),e.eachSeries(function(t,e){if(e1?"multiple":"single")+".";a=i(a=n(s?u+"withName":u+"withoutName"),{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:o(t.subType)});var c=t.getData();window.data=c,c.count()>l?a+=i(n("data.partialData"),{displayCnt:l}):a+=n("data.allData");for(var d=[],p=0;pi.blockIndex?i.step:null,a=n&&n.modDataCount;return{step:o,modBy:null!=a?Math.ceil(a/o):null,modDataCount:a}}},uT.getPipeline=function(t){return this._pipelineMap.get(t)},uT.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData().count(),o=i.progressiveEnabled&&e.incrementalPrepareRender&&n>=i.threshold,a=t.get("large")&&n>=t.get("largeThreshold"),r="mod"===t.get("progressiveChunkMode")?n:null;t.pipelineContext=i.context={progressiveRender:o,modDataCount:r,large:a}},uT.restorePipelines=function(t){var e=this,i=e._pipelineMap=R();t.eachSeries(function(t){var n=t.getProgressive(),o=t.uid;i.set(o,{id:o,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:n&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(n||700),count:0}),jr(e,t,t.dataTask)})},uT.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.ecInstance.getModel(),i=this.api;d(this._allHandlers,function(n){var o=t.get(n.uid)||t.set(n.uid,[]);n.reset&&zr(this,n,o,e,i),n.overallReset&&Br(this,n,o,e,i)},this)},uT.prepareView=function(t,e,i,n){var o=t.renderTask,a=o.context;a.model=e,a.ecModel=i,a.api=n,o.__block=!t.incrementalPrepareRender,jr(this,e,o)},uT.performDataProcessorTasks=function(t,e){Rr(this,this._dataProcessorHandlers,t,e,{block:!0})},uT.performVisualTasks=function(t,e,i){Rr(this,this._visualHandlers,t,e,i)},uT.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},uT.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var hT=uT.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},cT=Ur(0);Er.wrapStageHandler=function(t,e){return x(t)&&(t={overallReset:t,seriesType:Yr(t)}),t.uid=Ro("stageHandler"),e&&(t.visualType=e),t};var dT,fT={},pT={};qr(fT,MI),qr(pT,Ga),fT.eachSeriesByType=fT.eachRawSeriesByType=function(t){dT=t},fT.eachComponent=function(t){"series"===t.mainType&&t.subType&&(dT=t.subType)};var gT=["#37A2DA","#32C5E9","#67E0E3","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#E062AE","#E690D1","#e7bcf3","#9d96f5","#8378EA","#96BFFF"],mT={color:gT,colorLayer:[["#37A2DA","#ffd85c","#fd7b5f"],["#37A2DA","#67E0E3","#FFDB5C","#ff9f7f","#E062AE","#9d96f5"],["#37A2DA","#32C5E9","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#e7bcf3","#8378EA","#96BFFF"],gT]},vT=["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78","#73a373","#73b9bc","#7289ab","#91ca8c","#f49f42"],yT={color:vT,backgroundColor:"#333",tooltip:{axisPointer:{lineStyle:{color:"#eee"},crossStyle:{color:"#eee"}}},legend:{textStyle:{color:"#eee"}},textStyle:{color:"#eee"},title:{textStyle:{color:"#eee"}},toolbox:{iconStyle:{normal:{borderColor:"#eee"}}},dataZoom:{textStyle:{color:"#eee"}},visualMap:{textStyle:{color:"#eee"}},timeline:{lineStyle:{color:"#eee"},itemStyle:{normal:{color:vT[1]}},label:{normal:{textStyle:{color:"#eee"}}},controlStyle:{normal:{color:"#eee",borderColor:"#eee"}}},timeAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},logAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},valueAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},categoryAxis:{axisLine:{lineStyle:{color:"#eee"}},axisTick:{lineStyle:{color:"#eee"}},axisLabel:{textStyle:{color:"#eee"}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:"#eee"}}},line:{symbol:"circle"},graph:{color:vT},gauge:{title:{textStyle:{color:"#eee"}}},candlestick:{itemStyle:{normal:{color:"#FD1050",color0:"#0CF49B",borderColor:"#FD1050",borderColor0:"#0CF49B"}}}};yT.categoryAxis.splitLine.show=!1,lI.extend({type:"dataset",defaultOption:{seriesLayoutBy:_I,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){wa(this)}}),qI.extend({type:"dataset"});var xT=Pn.extend({type:"ellipse",shape:{cx:0,cy:0,rx:0,ry:0},buildPath:function(t,e){var i=.5522848,n=e.cx,o=e.cy,a=e.rx,r=e.ry,s=a*i,l=r*i;t.moveTo(n-a,o),t.bezierCurveTo(n-a,o-l,n-s,o-r,n,o-r),t.bezierCurveTo(n+s,o-r,n+a,o-l,n+a,o),t.bezierCurveTo(n+a,o+l,n+s,o+r,n,o+r),t.bezierCurveTo(n-s,o+r,n-a,o+l,n-a,o),t.closePath()}}),_T=/[\s,]+/;$r.prototype.parse=function(t,e){e=e||{};var i=Kr(t);if(!i)throw new Error("Illegal svg");var n=new tb;this._root=n;var o=i.getAttribute("viewBox")||"",a=parseFloat(i.getAttribute("width")||e.width),r=parseFloat(i.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(r)&&(r=null),es(i,n,null,!0);for(var s=i.firstChild;s;)this._parseNode(s,n),s=s.nextSibling;var l,u;if(o){var h=P(o).split(_T);h.length>=4&&(l={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(l&&null!=a&&null!=r&&(u=as(l,a,r),!e.ignoreViewBox)){var c=n;(n=new tb).add(c),c.scale=u.scale.slice(),c.position=u.position.slice()}return e.ignoreRootClip||null==a||null==r||n.setClipPath(new yM({shape:{x:0,y:0,width:a,height:r}})),{root:n,width:a,height:r,viewBoxRect:l,viewBoxTransform:u}},$r.prototype._parseNode=function(t,e){var i=t.nodeName.toLowerCase();"defs"===i?this._isDefine=!0:"text"===i&&(this._isText=!0);var n;if(this._isDefine){if(r=bT[i]){var o=r.call(this,t),a=t.getAttribute("id");a&&(this._defs[a]=o)}}else{var r=wT[i];r&&(n=r.call(this,t,e),e.add(n))}for(var s=t.firstChild;s;)1===s.nodeType&&this._parseNode(s,n),3===s.nodeType&&this._isText&&this._parseText(s,n),s=s.nextSibling;"defs"===i?this._isDefine=!1:"text"===i&&(this._isText=!1)},$r.prototype._parseText=function(t,e){if(1===t.nodeType){var i=t.getAttribute("dx")||0,n=t.getAttribute("dy")||0;this._textX+=parseFloat(i),this._textY+=parseFloat(n)}var o=new rM({style:{text:t.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});Qr(e,o),es(t,o,this._defs);var a=o.style.fontSize;a&&a<9&&(o.style.fontSize=9,o.scale=o.scale||[1,1],o.scale[0]*=a/9,o.scale[1]*=a/9);var r=o.getBoundingRect();return this._textX+=r.width,e.add(o),o};var wT={g:function(t,e){var i=new tb;return Qr(e,i),es(t,i,this._defs),i},rect:function(t,e){var i=new yM;return Qr(e,i),es(t,i,this._defs),i.setShape({x:parseFloat(t.getAttribute("x")||0),y:parseFloat(t.getAttribute("y")||0),width:parseFloat(t.getAttribute("width")||0),height:parseFloat(t.getAttribute("height")||0)}),i},circle:function(t,e){var i=new sM;return Qr(e,i),es(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),r:parseFloat(t.getAttribute("r")||0)}),i},line:function(t,e){var i=new _M;return Qr(e,i),es(t,i,this._defs),i.setShape({x1:parseFloat(t.getAttribute("x1")||0),y1:parseFloat(t.getAttribute("y1")||0),x2:parseFloat(t.getAttribute("x2")||0),y2:parseFloat(t.getAttribute("y2")||0)}),i},ellipse:function(t,e){var i=new xT;return Qr(e,i),es(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),rx:parseFloat(t.getAttribute("rx")||0),ry:parseFloat(t.getAttribute("ry")||0)}),i},polygon:function(t,e){var i=t.getAttribute("points");i&&(i=ts(i));var n=new pM({shape:{points:i||[]}});return Qr(e,n),es(t,n,this._defs),n},polyline:function(t,e){var i=new Pn;Qr(e,i),es(t,i,this._defs);var n=t.getAttribute("points");return n&&(n=ts(n)),new gM({shape:{points:n||[]}})},image:function(t,e){var i=new fi;return Qr(e,i),es(t,i,this._defs),i.setStyle({image:t.getAttribute("xlink:href"),x:t.getAttribute("x"),y:t.getAttribute("y"),width:t.getAttribute("width"),height:t.getAttribute("height")}),i},text:function(t,e){var i=t.getAttribute("x")||0,n=t.getAttribute("y")||0,o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0;this._textX=parseFloat(i)+parseFloat(o),this._textY=parseFloat(n)+parseFloat(a);var r=new tb;return Qr(e,r),es(t,r,this._defs),r},tspan:function(t,e){var i=t.getAttribute("x"),n=t.getAttribute("y");null!=i&&(this._textX=parseFloat(i)),null!=n&&(this._textY=parseFloat(n));var o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0,r=new tb;return Qr(e,r),es(t,r,this._defs),this._textX+=o,this._textY+=a,r},path:function(t,e){var i=Rn(t.getAttribute("d")||"");return Qr(e,i),es(t,i,this._defs),i}},bT={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||0,10),i=parseInt(t.getAttribute("y1")||0,10),n=parseInt(t.getAttribute("x2")||10,10),o=parseInt(t.getAttribute("y2")||0,10),a=new TM(e,i,n,o);return Jr(t,a),a},radialgradient:function(t){}},ST={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-align":"textAlign","alignment-baseline":"textBaseline"},MT=/url\(\s*#(.*?)\)/,IT=/(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,TT=/([^\s:;]+)\s*:\s*([^:;]+)/g,AT=R(),DT={registerMap:function(t,e,i){var n;return y(e)?n=e:e.svg?n=[{type:"svg",source:e.svg,specialAreas:e.specialAreas}]:(e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),n=[{type:"geoJSON",source:e,specialAreas:i}]),d(n,function(t){var e=t.type;"geoJson"===e&&(e=t.type="geoJSON"),(0,CT[e])(t)}),AT.set(t,n)},retrieveMap:function(t){return AT.get(t)}},CT={geoJSON:function(t){var e=t.source;t.geoJSON=_(e)?"undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")():e},svg:function(t){t.svgXML=Kr(t.source)}},LT=k,kT=d,PT=x,NT=w,OT=lI.parseClassType,ET={zrender:"4.0.6"},RT=1e3,zT=1e3,BT=3e3,VT={PROCESSOR:{FILTER:RT,STATISTIC:5e3},VISUAL:{LAYOUT:zT,GLOBAL:2e3,CHART:BT,COMPONENT:4e3,BRUSH:5e3}},GT="__flagInMainProcess",FT="__optionUpdated",WT=/^[a-zA-Z0-9_]+$/;ls.prototype.on=ss("on"),ls.prototype.off=ss("off"),ls.prototype.one=ss("one"),h(ls,fw);var HT=us.prototype;HT._onframe=function(){if(!this._disposed){var t=this._scheduler;if(this[FT]){var e=this[FT].silent;this[GT]=!0,cs(this),ZT.update.call(this),this[GT]=!1,this[FT]=!1,gs.call(this,e),ms.call(this,e)}else if(t.unfinished){var i=1,n=this._model;this._api;t.unfinished=!1;do{var o=+new Date;t.performSeriesTasks(n),t.performDataProcessorTasks(n),fs(this,n),t.performVisualTasks(n),bs(this,this._model,0,"remain"),i-=+new Date-o}while(i>0&&t.unfinished);t.unfinished||this._zr.flush()}}},HT.getDom=function(){return this._dom},HT.getZr=function(){return this._zr},HT.setOption=function(t,e,i){var n;if(NT(e)&&(i=e.lazyUpdate,n=e.silent,e=e.notMerge),this[GT]=!0,!this._model||e){var o=new Wa(this._api),a=this._theme,r=this._model=new MI(null,null,a,o);r.scheduler=this._scheduler,r.init(null,null,a,o)}this._model.setOption(t,qT),i?(this[FT]={silent:n},this[GT]=!1):(cs(this),ZT.update.call(this),this._zr.flush(),this[FT]=!1,this[GT]=!1,gs.call(this,n),ms.call(this,n))},HT.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},HT.getModel=function(){return this._model},HT.getOption=function(){return this._model&&this._model.getOption()},HT.getWidth=function(){return this._zr.getWidth()},HT.getHeight=function(){return this._zr.getHeight()},HT.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},HT.getRenderedCanvas=function(t){if(U_.canvasSupported)return(t=t||{}).pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor"),this._zr.painter.getRenderedCanvas(t)},HT.getSvgDataUrl=function(){if(U_.svgSupported){var t=this._zr;return d(t.storage.getDisplayList(),function(t){t.stopAnimation(!0)}),t.painter.pathToDataUrl()}},HT.getDataURL=function(t){var e=(t=t||{}).excludeComponents,i=this._model,n=[],o=this;kT(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var a="svg"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return kT(n,function(t){t.group.ignore=!1}),a},HT.getConnectedDataURL=function(t){if(U_.canvasSupported){var e=this.group,n=Math.min,o=Math.max;if(eA[e]){var a=1/0,r=1/0,s=-1/0,l=-1/0,u=[],h=t&&t.pixelRatio||1;d(tA,function(h,c){if(h.group===e){var d=h.getRenderedCanvas(i(t)),f=h.getDom().getBoundingClientRect();a=n(f.left,a),r=n(f.top,r),s=o(f.right,s),l=o(f.bottom,l),u.push({dom:d,left:f.left,top:f.top})}});var c=(s*=h)-(a*=h),f=(l*=h)-(r*=h),p=iw();p.width=c,p.height=f;var g=Ii(p);return kT(u,function(t){var e=new fi({style:{x:t.left*h-a,y:t.top*h-r,image:t.dom}});g.add(e)}),g.refreshImmediately(),p.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},HT.convertToPixel=v(hs,"convertToPixel"),HT.convertFromPixel=v(hs,"convertFromPixel"),HT.containPixel=function(t,e){var i;return t=Vi(this._model,t),d(t,function(t,n){n.indexOf("Models")>=0&&d(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if("seriesModels"===n){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(i|=a.containPoint(e,t))}},this)},this),!!i},HT.getVisual=function(t,e){var i=(t=Vi(this._model,t,{defaultMainType:"series"})).seriesModel.getData(),n=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?i.indexOfRawIndex(t.dataIndex):null;return null!=n?i.getItemVisual(n,e):i.getVisual(e)},HT.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},HT.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var ZT={prepareAndUpdate:function(t){cs(this),ZT.update.call(this,t)},update:function(t){var e=this._model,i=this._api,n=this._zr,o=this._coordSysMgr,a=this._scheduler;if(e){a.restoreData(e,t),a.performSeriesTasks(e),o.create(e,i),a.performDataProcessorTasks(e,t),fs(this,e),o.update(e,i),xs(e),a.performVisualTasks(e,t),_s(this,e,i,t);var r=e.get("backgroundColor")||"transparent";if(U_.canvasSupported)n.setBackgroundColor(r);else{var s=Gt(r);r=qt(s,"rgb"),0===s[3]&&(r="transparent")}Ss(e,i)}},updateTransform:function(t){var e=this._model,i=this,n=this._api;if(e){var o=[];e.eachComponent(function(a,r){var s=i.getViewOfComponentModel(r);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(r,e,n,t);l&&l.update&&o.push(s)}else o.push(s)});var a=R();e.eachSeries(function(o){var r=i._chartsMap[o.__viewId];if(r.updateTransform){var s=r.updateTransform(o,e,n,t);s&&s.update&&a.set(o.uid,1)}else a.set(o.uid,1)}),xs(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0,dirtyMap:a}),bs(i,e,0,t,a),Ss(e,this._api)}},updateView:function(t){var e=this._model;e&&(Ar.markUpdateMethod(t,"updateView"),xs(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),_s(this,this._model,this._api,t),Ss(e,this._api))},updateVisual:function(t){ZT.update.call(this,t)},updateLayout:function(t){ZT.update.call(this,t)}};HT.resize=function(t){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[GT]=!0,i&&cs(this),ZT.update.call(this),this[GT]=!1,gs.call(this,n),ms.call(this,n)}},HT.showLoading=function(t,e){if(NT(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),QT[t]){var i=QT[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},HT.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},HT.makeActionFromEvent=function(t){var e=a({},t);return e.type=jT[t.type],e},HT.dispatchAction=function(t,e){NT(e)||(e={silent:!!e}),XT[t.type]&&this._model&&(this[GT]?this._pendingActions.push(t):(ps.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&U_.browser.weChat&&this._throttledZrFlush(),gs.call(this,e.silent),ms.call(this,e.silent)))},HT.appendData=function(t){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0},HT.on=ss("on"),HT.off=ss("off"),HT.one=ss("one");var UT=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];HT._initEvents=function(){kT(UT,function(t){var e=function(e){var i,n=this.getModel(),o=e.target;if("globalout"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType,o)||{}}else o&&o.eventData&&(i=a({},o.eventData));if(i){var s=i.componentType,l=i.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=i.seriesIndex);var u=s&&null!=l&&n.getComponent(s,l),h=u&&this["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];i.event=e,i.type=t,this._ecEventProcessor.eventInfo={targetEl:o,packedEvent:i,model:u,view:h},this.trigger(t,i)}};e.zrEventfulCallAtLast=!0,this._zr.on(t,e,this)},this),kT(jT,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},HT.isDisposed=function(){return this._disposed},HT.clear=function(){this.setOption({series:[]},!0)},HT.dispose=function(){if(!this._disposed){this._disposed=!0,Fi(this.getDom(),oA,"");var t=this._api,e=this._model;kT(this._componentsViews,function(i){i.dispose(e,t)}),kT(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete tA[this.id]}},h(us,fw),Ds.prototype={constructor:Ds,normalizeQuery:function(t){var e={},i={},n={};if(_(t)){var o=OT(t);e.mainType=o.main||null,e.subType=o.sub||null}else{var a=["Index","Name","Id"],r={name:1,dataIndex:1,dataType:1};d(t,function(t,o){for(var s=!1,l=0;l0&&h===o.length-u.length){var c=o.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}r.hasOwnProperty(o)&&(i[o]=t,s=!0),s||(n[o]=t)})}return{cptQuery:e,dataQuery:i,otherQuery:n}},filter:function(t,e,i){function n(t,e,i,n){return null==t[i]||e[n||i]===t[i]}var o=this.eventInfo;if(!o)return!0;var a=o.targetEl,r=o.packedEvent,s=o.model,l=o.view;if(!s||!l)return!0;var u=e.cptQuery,h=e.dataQuery;return n(u,s,"mainType")&&n(u,s,"subType")&&n(u,s,"index","componentIndex")&&n(u,s,"name")&&n(u,s,"id")&&n(h,r,"name")&&n(h,r,"dataIndex")&&n(h,r,"dataType")&&(!l.filterForExposedEvent||l.filterForExposedEvent(t,e.otherQuery,a,r))},afterTrigger:function(){this.eventInfo=null}};var XT={},jT={},YT=[],qT=[],KT=[],$T=[],JT={},QT={},tA={},eA={},iA=new Date-0,nA=new Date-0,oA="_echarts_instance_",aA=Ls;Bs(2e3,aT),Ns(BI),Os(5e3,function(t){var e=R();t.eachSeries(function(t){var i=t.get("stack");if(i){var n=e.get(i)||e.set(i,[]),o=t.getData(),a={stackResultDimension:o.getCalculationInfo("stackResultDimension"),stackedOverDimension:o.getCalculationInfo("stackedOverDimension"),stackedDimension:o.getCalculationInfo("stackedDimension"),stackedByDimension:o.getCalculationInfo("stackedByDimension"),isStackedByIndex:o.getCalculationInfo("isStackedByIndex"),data:o,seriesModel:t};if(!a.stackedDimension||!a.isStackedByIndex&&!a.stackedByDimension)return;n.length&&o.setCalculationInfo("stackedOnSeries",n[n.length-1].seriesModel),n.push(a)}}),e.each(ar)}),Gs("default",function(t,e){r(e=e||{},{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new yM({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),n=new SM({shape:{startAngle:-lT/2,endAngle:-lT/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),o=new yM({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});n.animateShape(!0).when(1e3,{endAngle:3*lT/2}).start("circularInOut"),n.animateShape(!0).when(1e3,{startAngle:3*lT/2}).delay(300).start("circularInOut");var a=new tb;return a.add(n),a.add(o),a.add(i),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;n.setShape({cx:e,cy:a});var r=n.shape.r;o.setShape({x:e-r,y:a-r,width:2*r,height:2*r}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a}),Es({type:"highlight",event:"highlight",update:"highlight"},B),Es({type:"downplay",event:"downplay",update:"downplay"},B),Ps("light",mT),Ps("dark",yT);var rA={};Xs.prototype={constructor:Xs,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t=this._old,e=this._new,i={},n=[],o=[];for(js(t,{},n,"_oldKeyGetter",this),js(e,i,o,"_newKeyGetter",this),a=0;ax[1]&&(x[1]=y)}e&&(this._nameList[d]=e[f])}this._rawCount=this._count=l,this._extent={},el(this)},yA._initDataFromProvider=function(t,e){if(!(t>=e)){for(var i,n=this._chunkSize,o=this._rawData,a=this._storage,r=this.dimensions,s=r.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!o.pure){var I=u[v];if(m&&null==I)if(null!=m.name)u[v]=I=m.name;else if(null!=i){var T=r[i],A=a[T][y];if(A){I=A[x];var D=l[T].ordinalMeta;D&&D.categories.length&&(I=D.categories[I])}}var C=null==m?null:m.id;null==C&&null!=I&&(d[I]=d[I]||0,C=I,d[I]>0&&(C+="__ec__"+d[I]),d[I]++),null!=C&&(h[v]=C)}}!o.persistent&&o.clean&&o.clean(),this._rawCount=this._count=e,this._extent={},el(this)}},yA.count=function(){return this._count},yA.getIndices=function(){var t=this._indices;if(t){var e=t.constructor,i=this._count;if(e===Array){n=new e(i);for(o=0;o=0&&e=0&&ea&&(a=s)}return i=[o,a],this._extent[t]=i,i},yA.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},yA.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},yA.getCalculationInfo=function(t){return this._calculationInfo[t]},yA.setCalculationInfo=function(t,e){lA(t)?a(this._calculationInfo,t):this._calculationInfo[t]=e},yA.getSum=function(t){var e=0;if(this._storage[t])for(var i=0,n=this.count();i=this._rawCount||t<0)return-1;var e=this._indices,i=e[t];if(null!=i&&it))return a;o=a-1}}return-1},yA.indicesOfNearest=function(t,e,i){var n=[];if(!this._storage[t])return n;null==i&&(i=1/0);for(var o=Number.MAX_VALUE,a=-1,r=0,s=this.count();r=0&&a<0)&&(o=u,a=l,n.length=0),n.push(r))}return n},yA.getRawIndex=nl,yA.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],i=0;i=l&&w<=u||isNaN(w))&&(a[r++]=c),c++;h=!0}else if(2===n){for(var d=this._storage[s],v=this._storage[e[1]],y=t[e[1]][0],x=t[e[1]][1],f=0;f=l&&w<=u||isNaN(w))&&(b>=y&&b<=x||isNaN(b))&&(a[r++]=c),c++}h=!0}}if(!h)if(1===n)for(m=0;m=l&&w<=u||isNaN(w))&&(a[r++]=M)}else for(m=0;mt[I][1])&&(S=!1)}S&&(a[r++]=this.getRawIndex(m))}return rb[1]&&(b[1]=w)}}}return o},yA.downSample=function(t,e,i,n){for(var o=sl(this,[t]),a=o._storage,r=[],s=Math.floor(1/e),l=a[t],u=this.count(),h=this._chunkSize,c=o._rawExtent[t],d=new($s(this))(u),f=0,p=0;pu-p&&(s=u-p,r.length=s);for(var g=0;gc[1]&&(c[1]=x),d[f++]=_}return o._count=f,o._indices=d,o.getRawIndex=ol,o},yA.getItemModel=function(t){var e=this.hostModel;return new No(this.getRawDataItem(t),e,e&&e.ecModel)},yA.diff=function(t){var e=this;return new Xs(t?t.getIndices():[],this.getIndices(),function(e){return al(t,e)},function(t){return al(e,t)})},yA.getVisual=function(t){var e=this._visual;return e&&e[t]},yA.setVisual=function(t,e){if(lA(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},yA.setLayout=function(t,e){if(lA(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},yA.getLayout=function(t){return this._layout[t]},yA.getItemLayout=function(t){return this._itemLayouts[t]},yA.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?a(this._itemLayouts[t]||{},e):e},yA.clearItemLayouts=function(){this._itemLayouts.length=0},yA.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},yA.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},o=this.hasItemVisual;if(this._itemVisuals[t]=n,lA(e))for(var a in e)e.hasOwnProperty(a)&&(n[a]=e[a],o[a]=!0);else n[e]=i,o[e]=!0},yA.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};var xA=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};yA.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,"group"===e.type&&e.traverse(xA,e)),this._graphicEls[t]=e},yA.getItemGraphicEl=function(t){return this._graphicEls[t]},yA.eachItemGraphicEl=function(t,e){d(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},yA.cloneShallow=function(t){if(!t){var e=f(this.dimensions,this.getDimensionInfo,this);t=new vA(e,this.hostModel)}if(t._storage=this._storage,Qs(t,this),this._indices){var i=this._indices.constructor;t._indices=new i(this._indices)}else t._indices=null;return t.getRawIndex=t._indices?ol:nl,t},yA.wrapMethod=function(t,e){var i=this[t];"function"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(C(arguments)))})},yA.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],yA.CHANGABLE_METHODS=["filterSelf","selectRange"];var _A=function(t,e){return e=e||{},hl(e.coordDimensions||[],t,{dimsDef:e.dimensionsDefine||t.dimensionsDefine,encodeDef:e.encodeDefine||t.encodeDefine,dimCount:e.dimensionsCount,generateCoord:e.generateCoord,generateCoordCount:e.generateCoordCount})};xl.prototype.parse=function(t){return t},xl.prototype.getSetting=function(t){return this._setting[t]},xl.prototype.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},xl.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},xl.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},xl.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},xl.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},xl.prototype.getExtent=function(){return this._extent.slice()},xl.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},xl.prototype.isBlank=function(){return this._isBlank},xl.prototype.setBlank=function(t){this._isBlank=t},xl.prototype.getLabel=null,ji(xl),$i(xl,{registerWhenExtend:!0}),_l.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&f(i,bl);return new _l({categories:n,needCollect:!n,deduplication:!1!==e.dedplication})};var wA=_l.prototype;wA.getOrdinal=function(t){return wl(this).get(t)},wA.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=wl(this);return null==(e=n.get(t))&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=NaN),e};var bA=xl.prototype,SA=xl.extend({type:"ordinal",init:function(t,e){t&&!y(t)||(t=new _l({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),bA.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return bA.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(bA.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:B,niceExtent:B});SA.create=function(){return new SA};var MA=Go,IA=Go,TA=xl.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),TA.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Ml(t)},getTicks:function(){return Al(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getLabel:function(t,e){if(null==t)return"";var i=e&&e.precision;return null==i?i=Ho(t)||0:"auto"===i&&(i=this._intervalPrecision),t=IA(t,i,!0),ta(t)},niceTicks:function(t,e,i){t=t||5;var n=this._extent,o=n[1]-n[0];if(isFinite(o)){o<0&&(o=-o,n.reverse());var a=Sl(n,t,e,i);this._intervalPrecision=a.intervalPrecision,this._interval=a.interval,this._niceExtent=a.niceTickExtent}},niceExtent:function(t){var e=this._extent;if(e[0]===e[1])if(0!==e[0]){var i=e[0];t.fixMax?e[0]-=i/2:(e[1]+=i/2,e[0]-=i/2)}else e[1]=1;var n=e[1]-e[0];isFinite(n)||(e[0]=0,e[1]=1),this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var o=this._interval;t.fixMin||(e[0]=IA(Math.floor(e[0]/o)*o)),t.fixMax||(e[1]=IA(Math.ceil(e[1]/o)*o))}});TA.create=function(){return new TA};var AA="__ec_stack_",DA="undefined"!=typeof Float32Array?Float32Array:Array,CA={seriesType:"bar",plan:$I(),reset:function(t){if(Rl(t)&&zl(t)){var e=t.getData(),i=t.coordinateSystem,n=i.getBaseAxis(),o=i.getOtherAxis(n),a=e.mapDimension(o.dim),r=e.mapDimension(n.dim),s=o.isHorizontal(),l=s?0:1,u=Ol(Pl([t]),n,t).width;return u>.5||(u=.5),{progress:function(t,e){for(var n,h=new DA(2*t.count),c=[],d=[],f=0;null!=(n=t.next());)d[l]=e.get(a,n),d[1-l]=e.get(r,n),c=i.dataToPoint(d,null,c),h[f++]=c[0],h[f++]=c[1];e.setLayout({largePoints:h,barWidth:u,valueAxisStart:Bl(0,o),valueAxisHorizontal:s})}}}}},LA=TA.prototype,kA=Math.ceil,PA=Math.floor,NA=function(t,e,i,n){for(;i>>1;t[o][1]i&&(a=i);var r=EA.length,s=NA(EA,a,0,r),l=EA[Math.min(s,r-1)],u=l[1];"year"===l[0]&&(u*=$o(o/u/t,!0));var h=this.getSetting("useUTC")?0:60*new Date(+n[0]||+n[1]).getTimezoneOffset()*1e3,c=[Math.round(kA((n[0]-h)/u)*u+h),Math.round(PA((n[1]-h)/u)*u+h)];Tl(c,n),this._stepLvl=l,this._interval=u,this._niceExtent=c},parse:function(t){return+Yo(t)}});d(["contain","normalize"],function(t){OA.prototype[t]=function(e){return LA[t].call(this,this.parse(e))}});var EA=[["hh:mm:ss",1e3],["hh:mm:ss",5e3],["hh:mm:ss",1e4],["hh:mm:ss",15e3],["hh:mm:ss",3e4],["hh:mm\nMM-dd",6e4],["hh:mm\nMM-dd",3e5],["hh:mm\nMM-dd",6e5],["hh:mm\nMM-dd",9e5],["hh:mm\nMM-dd",18e5],["hh:mm\nMM-dd",36e5],["hh:mm\nMM-dd",72e5],["hh:mm\nMM-dd",216e5],["hh:mm\nMM-dd",432e5],["MM-dd\nyyyy",864e5],["MM-dd\nyyyy",1728e5],["MM-dd\nyyyy",2592e5],["MM-dd\nyyyy",3456e5],["MM-dd\nyyyy",432e6],["MM-dd\nyyyy",5184e5],["week",6048e5],["MM-dd\nyyyy",864e6],["week",12096e5],["week",18144e5],["month",26784e5],["week",36288e5],["month",53568e5],["week",6048e6],["quarter",8208e6],["month",107136e5],["month",13392e6],["half-year",16416e6],["month",214272e5],["month",26784e6],["year",32832e6]];OA.create=function(t){return new OA({useUTC:t.ecModel.get("useUTC")})};var RA=xl.prototype,zA=TA.prototype,BA=Ho,VA=Go,GA=Math.floor,FA=Math.ceil,WA=Math.pow,HA=Math.log,ZA=xl.extend({type:"log",base:10,$constructor:function(){xl.apply(this,arguments),this._originalScale=new TA},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return f(zA.getTicks.call(this),function(n){var o=Go(WA(this.base,n));return o=n===e[0]&&t.__fixMin?Vl(o,i[0]):o,o=n===e[1]&&t.__fixMax?Vl(o,i[1]):o},this)},getLabel:zA.getLabel,scale:function(t){return t=RA.scale.call(this,t),WA(this.base,t)},setExtent:function(t,e){var i=this.base;t=HA(t)/HA(i),e=HA(e)/HA(i),zA.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=RA.getExtent.call(this);e[0]=WA(t,e[0]),e[1]=WA(t,e[1]);var i=this._originalScale,n=i.getExtent();return i.__fixMin&&(e[0]=Vl(e[0],n[0])),i.__fixMax&&(e[1]=Vl(e[1],n[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=HA(t[0])/HA(e),t[1]=HA(t[1])/HA(e),RA.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=qo(i);for(t/i*n<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var o=[Go(FA(e[0]/n)*n),Go(GA(e[1]/n)*n)];this._interval=n,this._niceExtent=o}},niceExtent:function(t){zA.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});d(["contain","normalize"],function(t){ZA.prototype[t]=function(e){return e=HA(e)/HA(this.base),RA[t].call(this,e)}}),ZA.create=function(){return new ZA};var UA={getMin:function(t){var e=this.option,i=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=i&&"dataMin"!==i&&"function"!=typeof i&&!I(i)&&(i=this.axis.scale.parse(i)),i},getMax:function(t){var e=this.option,i=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=i&&"dataMax"!==i&&"function"!=typeof i&&!I(i)&&(i=this.axis.scale.parse(i)),i},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},getCoordSysModel:B,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},XA=Un({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n+a),t.lineTo(i-o,n+a),t.closePath()}}),jA=Un({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+o,n),t.lineTo(i,n+a),t.lineTo(i-o,n),t.closePath()}}),YA=Un({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,a=Math.max(o,e.height),r=o/2,s=r*r/(a-r),l=n-a+r+s,u=Math.asin(s/r),h=Math.cos(u)*r,c=Math.sin(u),d=Math.cos(u),f=.6*r,p=.7*r;t.moveTo(i-h,l+s),t.arc(i,l,r,Math.PI-u,2*Math.PI+u),t.bezierCurveTo(i+h-c*f,l+s+d*f,i,n-p,i,n),t.bezierCurveTo(i,n-p,i-h+c*f,l+s+d*f,i-h,l+s),t.closePath()}}),qA=Un({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,a=e.y,r=n/3*2;t.moveTo(o,a),t.lineTo(o+r,a+i),t.lineTo(o,a+i/4*3),t.lineTo(o-r,a+i),t.lineTo(o,a),t.closePath()}}),KA={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var a=Math.min(i,n);o.x=t,o.y=e,o.width=a,o.height=a},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},$A={};d({line:_M,rect:yM,roundRect:yM,square:yM,circle:sM,diamond:jA,pin:YA,arrow:qA,triangle:XA},function(t,e){$A[e]=new t});var JA=Un({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style;"pin"===this.shape.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,o=$A[n];"none"!==e.symbolType&&(o||(o=$A[n="rect"]),KA[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),QA={isDimensionStacked:pl,enableDataStack:fl,getStackedDimension:gl},tD=(Object.freeze||Object)({createList:function(t){return ml(t.getSource(),t)},getLayoutRect:ca,dataStack:QA,createScale:function(t,e){var i=e;No.isInstance(e)||h(i=new No(e),UA);var n=Hl(i);return n.setExtent(t[0],t[1]),Wl(n,i),n},mixinAxisModelCommonMethods:function(t){h(t,UA)},completeDimensions:hl,createDimensions:_A,createSymbol:Jl}),eD=1e-8;eu.prototype={constructor:eu,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],a=[],r=this.geometries,s=0;s0}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates,o=[];"Polygon"===i.type&&o.push({type:"polygon",exterior:n[0],interiors:n.slice(1)}),"MultiPolygon"===i.type&&d(n,function(t){t[0]&&o.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})});var a=new eu(e.name,o,e.cp);return a.properties=e,a})},nD=Bi(),oD=[0,1],aD=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1};aD.prototype={constructor:aD,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return Zo(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,n=this.scale;return t=n.normalize(t),this.onBand&&"ordinal"===n.type&&yu(i=i.slice(),n.count()),Bo(t,oD,i,e)},coordToData:function(t,e){var i=this._extent,n=this.scale;this.onBand&&"ordinal"===n.type&&yu(i=i.slice(),n.count());var o=Bo(t,i,oD,e);return this.scale.scale(o)},pointToData:function(t,e){},getTicksCoords:function(t){var e=(t=t||{}).tickModel||this.getTickModel(),i=au(this,e),n=f(i.ticks,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this),o=e.get("alignWithLabel");return xu(this,n,i.tickCategoryInterval,o,t.clamp),n},getViewLabels:function(){return ou(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return pu(this)}};var rD=iD,sD={};d(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],function(t){sD[t]=aw[t]});var lD={};d(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],function(t){lD[t]=zM[t]}),YI.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return ml(this.getSource(),this)},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{position:"top"},lineStyle:{width:2,type:"solid"},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});var uD=wu.prototype,hD=wu.getSymbolSize=function(t,e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array?i.slice():[+i,+i]};uD._createSymbol=function(t,e,i,n,o){this.removeAll();var a=Jl(t,-1,-1,2,2,e.getItemVisual(i,"color"),o);a.attr({z2:100,culling:!0,scale:bu(n)}),a.drift=Su,this._symbolType=t,this.add(a)},uD.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},uD.getSymbolPath=function(){return this.childAt(0)},uD.getScale=function(){return this.childAt(0).scale},uD.highlight=function(){this.childAt(0).trigger("emphasis")},uD.downplay=function(){this.childAt(0).trigger("normal")},uD.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},uD.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":"pointer"},uD.updateData=function(t,e,i){this.silent=!1;var n=t.getItemVisual(e,"symbol")||"circle",o=t.hostModel,a=hD(t,e),r=n!==this._symbolType;if(r){var s=t.getItemVisual(e,"symbolKeepAspect");this._createSymbol(n,t,e,a,s)}else(l=this.childAt(0)).silent=!1,Io(l,{scale:bu(a)},o,e);if(this._updateCommon(t,e,a,i),r){var l=this.childAt(0),u=i&&i.fadeIn,h={scale:l.scale.slice()};u&&(h.style={opacity:l.style.opacity}),l.scale=[0,0],u&&(l.style.opacity=0),To(l,h,o,e)}this._seriesModel=o};var cD=["itemStyle"],dD=["emphasis","itemStyle"],fD=["label"],pD=["emphasis","label"];uD._updateCommon=function(t,e,i,n){var o=this.childAt(0),r=t.hostModel,s=t.getItemVisual(e,"color");"image"!==o.type&&o.useStyle({strokeNoScale:!0});var l=n&&n.itemStyle,u=n&&n.hoverItemStyle,h=n&&n.symbolRotate,c=n&&n.symbolOffset,d=n&&n.labelModel,f=n&&n.hoverLabelModel,p=n&&n.hoverAnimation,g=n&&n.cursorStyle;if(!n||t.hasItemOption){var m=n&&n.itemModel?n.itemModel:t.getItemModel(e);l=m.getModel(cD).getItemStyle(["color"]),u=m.getModel(dD).getItemStyle(),h=m.getShallow("symbolRotate"),c=m.getShallow("symbolOffset"),d=m.getModel(fD),f=m.getModel(pD),p=m.getShallow("hoverAnimation"),g=m.getShallow("cursor")}else u=a({},u);var v=o.style;o.attr("rotation",(h||0)*Math.PI/180||0),c&&o.attr("position",[Vo(c[0],i[0]),Vo(c[1],i[1])]),g&&o.attr("cursor",g),o.setColor(s,n&&n.symbolInnerColor),o.setStyle(l);var y=t.getItemVisual(e,"opacity");null!=y&&(v.opacity=y);var x=t.getItemVisual(e,"liftZ"),_=o.__z2Origin;null!=x?null==_&&(o.__z2Origin=o.z2,o.z2+=x):null!=_&&(o.z2=_,o.__z2Origin=null);var w=n&&n.useNameLabel;go(v,u,d,f,{labelFetcher:r,labelDataIndex:e,defaultText:function(e,i){return w?t.getName(e):_u(t,e)},isRectText:!0,autoColor:s}),o.off("mouseover").off("mouseout").off("emphasis").off("normal"),o.hoverStyle=u,fo(o),o.__symbolOriginalScale=bu(i),p&&r.isAnimationEnabled()&&o.on("mouseover",Mu).on("mouseout",Iu).on("emphasis",Tu).on("normal",Au)},uD.fadeOut=function(t,e){var i=this.childAt(0);this.silent=i.silent=!0,!(e&&e.keepLabel)&&(i.style.text=null),Io(i,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},u(wu,tb);var gD=Du.prototype;gD.updateData=function(t,e){e=Lu(e);var i=this.group,n=t.hostModel,o=this._data,a=this._symbolCtor,r=ku(t);o||i.removeAll(),t.diff(o).add(function(n){var o=t.getItemLayout(n);if(Cu(t,o,n,e)){var s=new a(t,n,r);s.attr("position",o),t.setItemGraphicEl(n,s),i.add(s)}}).update(function(s,l){var u=o.getItemGraphicEl(l),h=t.getItemLayout(s);Cu(t,h,s,e)?(u?(u.updateData(t,s,r),Io(u,{position:h},n)):(u=new a(t,s)).attr("position",h),i.add(u),t.setItemGraphicEl(s,u)):i.remove(u)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},gD.isPersistent=function(){return!0},gD.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr("position",n)})},gD.incrementalPrepareUpdate=function(t){this._seriesScope=ku(t),this._data=null,this.group.removeAll()},gD.incrementalUpdate=function(t,e,i){i=Lu(i);for(var n=t.start;n0&&Ru(i[o-1]);o--);for(;n0&&Ru(i[a-1]);a--);for(;o=0){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;(r=new wu(o,a)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else Ar.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=zi(o,n);if(null!=a&&a>=0){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else Ar.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new MD({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new ID({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_updateAnimation:function(t,e,i,n,o,a){var r=this._polyline,s=this._polygon,l=t.hostModel,u=mD(this._data,t,this._stackedOnPoints,e,this._coordSys,i,this._valueOrigin,a),h=u.current,c=u.stackedOnCurrent,d=u.next,f=u.stackedOnNext;o&&(h=Yu(u.current,i,o),c=Yu(u.stackedOnCurrent,i,o),d=Yu(u.next,i,o),f=Yu(u.stackedOnNext,i,o)),r.shape.__points=u.current,r.shape.points=h,Io(r,{shape:{points:d}},l),s&&(s.setShape({points:h,stackedOnPoints:c}),Io(s,{shape:{points:d,stackedOnPoints:f}},l));for(var p=[],g=u.status,m=0;me&&(e=t[i]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},u(kD,aD);var PD={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},ND={};ND.categoryAxis=n({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},PD),ND.valueAxis=n({boundaryGap:[0,0],splitNumber:5},PD),ND.timeAxis=r({scale:!0,min:"dataMin",max:"dataMax"},ND.valueAxis),ND.logAxis=r({scale:!0,logBase:10},ND.valueAxis);var OD=["value","category","time","log"],ED=function(t,e,i,a){d(OD,function(r){e.extend({type:t+"Axis."+r,mergeDefaultAndTheme:function(e,o){var a=this.layoutMode,s=a?ga(e):{};n(e,o.getTheme().get(r+"Axis")),n(e,this.getDefaultOption()),e.type=i(t,e),a&&pa(e,s,a)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=_l.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:o([{},ND[r+"Axis"],a],!0)})}),lI.registerSubTypeDefaulter(t+"Axis",v(i,t))},RD=lI.extend({type:"cartesian2dAxis",axis:null,init:function(){RD.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){RD.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){RD.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});n(RD.prototype,UA);var zD={offset:0};ED("x",RD,th,zD),ED("y",RD,th,zD),lI.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var BD=ih.prototype;BD.type="grid",BD.axisPointerEnabled=!0,BD.getRect=function(){return this._rect},BD.update=function(t,e){var i=this._axesMap;this._updateScale(t,this.model),d(i.x,function(t){Wl(t.scale,t.model)}),d(i.y,function(t){Wl(t.scale,t.model)});var n={};d(i.x,function(t){nh(i,"y",t,n)}),d(i.y,function(t){nh(i,"x",t,n)}),this.resize(this.model,e)},BD.resize=function(t,e,i){function n(){d(a,function(t){var e=t.isHorizontal(),i=e?[0,o.width]:[0,o.height],n=t.inverse?1:0;t.setExtent(i[n],i[1-n]),ah(t,e?o.x:o.y)})}var o=ca(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;n(),!i&&t.get("containLabel")&&(d(a,function(t){if(!t.model.get("axisLabel.inside")){var e=jl(t);if(e){var i=t.isHorizontal()?"height":"width",n=t.model.get("axisLabel.margin");o[i]-=e[i]+n,"top"===t.position?o.y+=e.height+n:"left"===t.position&&(o.x+=e.width+n)}}}),n())},BD.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},BD.getAxes=function(){return this._axesList.slice()},BD.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}w(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,o=this._coordsList;nu[1]?-1:1,c=["start"===o?u[0]-h*l:"end"===o?u[1]+h*l:(u[0]+u[1])/2,ph(o)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*GD/180);var f;ph(o)?n=HD(t.rotation,null!=d?d:t.rotation,r):(n=uh(t,o,d||0,u),null!=(f=t.axisNameAvailableWidth)&&(f=Math.abs(f/Math.sin(n.rotation)),!isFinite(f)&&(f=null)));var p=s.getFont(),g=e.get("nameTruncate",!0)||{},m=g.ellipsis,v=T(t.nameTruncateMaxWidth,g.maxWidth,f),y=null!=m&&null!=v?tI(i,v,p,m,{minChar:2,placeholder:g.placeholder}):i,x=e.get("tooltip",!0),_=e.mainType,w={componentType:_,name:i,$vars:["name"]};w[_+"Index"]=e.componentIndex;var b=new rM({anid:"name",__fullText:i,__truncatedText:y,position:c,rotation:n.rotation,silent:hh(e),z2:1,tooltip:x&&x.show?a({content:i,formatter:function(){return i},formatterParams:w},x):null});mo(b.style,s,{text:y,textFont:p,textFill:s.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:n.textAlign,textVerticalAlign:n.textVerticalAlign}),e.get("triggerEvent")&&(b.eventData=lh(e),b.eventData.targetType="axisName",b.eventData.name=i),this._dumbGroup.add(b),b.updateTransform(),this.group.add(b),b.decomposeTransform()}}},HD=FD.innerTextLayout=function(t,e,i){var n,o,a=Xo(e-t);return jo(a)?(o=i>0?"top":"bottom",n="center"):jo(a-GD)?(o=i>0?"bottom":"top",n="center"):(o="middle",n=a>0&&a0?"right":"left":i>0?"left":"right"),{rotation:a,textAlign:n,textVerticalAlign:o}},ZD=d,UD=v,XD=Ws({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,i,n){this.axisPointerClass&&Sh(t),XD.superApply(this,"render",arguments),Dh(this,t,0,i,0,!0)},updateAxisPointer:function(t,e,i,n,o){Dh(this,t,0,i,0,!1)},remove:function(t,e){var i=this._axisPointer;i&&i.remove(e),XD.superApply(this,"remove",arguments)},dispose:function(t,e){Ch(this,e),XD.superApply(this,"dispose",arguments)}}),jD=[];XD.registerAxisPointerClass=function(t,e){jD[t]=e},XD.getAxisPointerClass=function(t){return t&&jD[t]};var YD=["axisLine","axisTickLabel","axisName"],qD=["splitArea","splitLine"],KD=XD.extend({type:"cartesianAxis",axisPointerClass:"CartesianAxisPointer",render:function(t,e,i,n){this.group.removeAll();var o=this._axisGroup;if(this._axisGroup=new tb,this.group.add(this._axisGroup),t.get("show")){var a=t.getCoordSysModel(),r=Lh(a,t),s=new FD(t,r);d(YD,s.add,s),this._axisGroup.add(s.getGroup()),d(qD,function(e){t.get(e+".show")&&this["_"+e](t,a)},this),Lo(o,this._axisGroup,t),KD.superCall(this,"render",t,e,i,n)}},remove:function(){this._splitAreaColors=null},_splitLine:function(t,e){var i=t.axis;if(!i.scale.isBlank()){var n=t.getModel("splitLine"),o=n.getModel("lineStyle"),a=o.get("color");a=y(a)?a:[a];for(var s=e.coordinateSystem.getRect(),l=i.isHorizontal(),u=0,h=i.getTicksCoords({tickModel:n}),c=[],d=[],f=o.getLineStyle(),p=0;p1){var c;"string"==typeof o?c=DD[o]:"function"==typeof o&&(c=o),c&&t.setData(n.downSample(n.mapDimension(s.dim),1/h,c,CD))}}}}}("line"));var $D=YI.extend({type:"series.__base_bar__",getInitialData:function(t,e){return ml(this.getSource(),this)},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var i=e.dataToPoint(e.clampData(t)),n=this.getData(),o=n.getLayout("offset"),a=n.getLayout("size");return i[e.getBaseAxis().isHorizontal()?0:1]+=o+a/2,i}return[NaN,NaN]},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",itemStyle:{},emphasis:{}}});$D.extend({type:"series.bar",dependencies:["grid","polar"],brushSelector:"rect",getProgressive:function(){return!!this.get("large")&&this.get("progressive")},getProgressiveThreshold:function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t}});var JD=Qb([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),QD={getBarItemStyle:function(t){var e=JD(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}},tC=["itemStyle","barBorderWidth"];a(No.prototype,QD),Zs({type:"bar",render:function(t,e,i){this._updateDrawMode(t);var n=t.get("coordinateSystem");return"cartesian2d"!==n&&"polar"!==n||(this._isLargeDraw?this._renderLarge(t,e,i):this._renderNormal(t,e,i)),this.group},incrementalPrepareRender:function(t,e,i){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e,i,n){this._incrementalRenderLarge(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t,e,i){var n,o=this.group,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.getBaseAxis();"cartesian2d"===s.type?n=l.isHorizontal():"polar"===s.type&&(n="angle"===l.dim);var u=t.isAnimationEnabled()?t:null;a.diff(r).add(function(e){if(a.hasValue(e)){var i=a.getItemModel(e),r=iC[s.type](a,e,i),l=eC[s.type](a,e,i,r,n,u);a.setItemGraphicEl(e,l),o.add(l),Eh(l,a,e,i,r,t,n,"polar"===s.type)}}).update(function(e,i){var l=r.getItemGraphicEl(i);if(a.hasValue(e)){var h=a.getItemModel(e),c=iC[s.type](a,e,h);l?Io(l,{shape:c},u,e):l=eC[s.type](a,e,h,c,n,u,!0),a.setItemGraphicEl(e,l),o.add(l),Eh(l,a,e,h,c,t,n,"polar"===s.type)}else o.remove(l)}).remove(function(t){var e=r.getItemGraphicEl(t);"cartesian2d"===s.type?e&&Nh(t,u,e):e&&Oh(t,u,e)}).execute(),this._data=a},_renderLarge:function(t,e,i){this._clear(),zh(t,this.group)},_incrementalRenderLarge:function(t,e){zh(e,this.group,!0)},dispose:B,remove:function(t){this._clear(t)},_clear:function(t){var e=this.group,i=this._data;t&&t.get("animation")&&i&&!this._isLargeDraw?i.eachItemGraphicEl(function(e){"sector"===e.type?Oh(e.dataIndex,t,e):Nh(e.dataIndex,t,e)}):e.removeAll(),this._data=null}});var eC={cartesian2d:function(t,e,i,n,o,r,s){var l=new yM({shape:a({},n)});if(r){var u=l.shape,h=o?"height":"width",c={};u[h]=0,c[h]=n[h],zM[s?"updateProps":"initProps"](l,{shape:c},r,e)}return l},polar:function(t,e,i,n,o,a,s){var l=n.startAngle0?1:-1,r=n.height>0?1:-1;return{x:n.x+a*o/2,y:n.y+r*o/2,width:n.width-a*o,height:n.height-r*o}},polar:function(t,e,i){var n=t.getItemLayout(e);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle}}},nC=Pn.extend({type:"largeBar",shape:{points:[]},buildPath:function(t,e){for(var i=e.points,n=this.__startPoint,o=this.__valueIdx,a=0;a0&&"scale"!==u){var d=o.getItemLayout(0),f=Math.max(i.getWidth(),i.getHeight())/2,p=m(r.removeClipPath,r);r.setClipPath(this._createClipPath(d.cx,d.cy,f,d.startAngle,d.clockwise,p,t))}else r.removeClipPath();this._data=o}},dispose:function(){},_createClipPath:function(t,e,i,n,o,a,r){var s=new hM({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return To(s,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},r,a),s},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var lC=function(t,e){d(e,function(e){e.update="updateView",Es(e,function(i,n){var o={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name,i.dataIndex);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})},uC=function(t){return{getTargetSeries:function(e){var i={},n=R();return e.eachSeriesByType(t,function(t){t.__paletteScope=i,n.set(t.uid,t)}),n},reset:function(t,e){var i=t.getRawData(),n={},o=t.getData();o.each(function(t){var e=o.getRawIndex(t);n[e]=t}),i.each(function(e){var a=n[e],r=null!=a&&o.getItemVisual(a,"color",!0);if(r)i.setItemVisual(e,"color",r);else{var s=i.getItemModel(e).get("itemStyle.color")||t.getColorFromPalette(i.getName(e)||e+"",t.__paletteScope,i.count());i.setItemVisual(e,"color",s),null!=a&&o.setItemVisual(a,"color",s)}})}}},hC=function(t,e,i,n){var o,a,r=t.getData(),s=[],l=!1;r.each(function(i){var n,u,h,c,d=r.getItemLayout(i),f=r.getItemModel(i),p=f.getModel("label"),g=p.get("position")||f.get("emphasis.label.position"),m=f.getModel("labelLine"),v=m.get("length"),y=m.get("length2"),x=(d.startAngle+d.endAngle)/2,_=Math.cos(x),w=Math.sin(x);o=d.cx,a=d.cy;var b="inside"===g||"inner"===g;if("center"===g)n=d.cx,u=d.cy,c="center";else{var S=(b?(d.r+d.r0)/2*_:d.r*_)+o,M=(b?(d.r+d.r0)/2*w:d.r*w)+a;if(n=S+3*_,u=M+3*w,!b){var I=S+_*(v+e-d.r),T=M+w*(v+e-d.r),A=I+(_<0?-1:1)*y,D=T;n=A+(_<0?-5:5),u=D,h=[[S,M],[I,T],[A,D]]}c=b?"center":_>0?"left":"right"}var C=p.getFont(),L=p.get("rotate")?_<0?-x+Math.PI:-x:0,k=ke(t.getFormattedLabel(i,"normal")||r.getName(i),C,c,"top");l=!!L,d.label={x:n,y:u,position:g,height:k.height,len:v,len2:y,linePoints:h,textAlign:c,verticalAlign:"middle",rotation:L,inside:b},b||s.push(d.label)}),!l&&t.get("avoidLabelOverlap")&&Hh(s,o,a,e,i,n)},cC=2*Math.PI,dC=Math.PI/180,fC=function(t){return{seriesType:t,reset:function(t,e){var i=e.findComponents({mainType:"legend"});if(i&&i.length){var n=t.getData();n.filterSelf(function(t){for(var e=n.getName(t),o=0;o=0;s--){var l=2*s,u=n[l]-a/2,h=n[l+1]-r/2;if(t>=u&&e>=h&&t<=u+a&&e<=h+r)return s}return-1}}),gC=Uh.prototype;gC.isPersistent=function(){return!this._incremental},gC.updateData=function(t){this.group.removeAll();var e=new pC({rectHover:!0,cursor:"default"});e.setShape({points:t.getLayout("symbolPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},gC.updateLayout=function(t){if(!this._incremental){var e=t.getLayout("symbolPoints");this.group.eachChild(function(t){if(null!=t.startIndex){var i=2*(t.endIndex-t.startIndex),n=4*t.startIndex*2;e=new Float32Array(e.buffer,n,i)}t.setShape("points",e)})}},gC.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>2e6?(this._incremental||(this._incremental=new Zn({silent:!0})),this.group.add(this._incremental)):this._incremental=null},gC.incrementalUpdate=function(t,e){var i;this._incremental?(i=new pC,this._incremental.addDisplayable(i,!0)):((i=new pC({rectHover:!0,cursor:"default",startIndex:t.start,endIndex:t.end})).incremental=!0,this.group.add(i)),i.setShape({points:e.getLayout("symbolPoints")}),this._setCommon(i,e,!!this._incremental)},gC._setCommon=function(t,e,i){var n=e.hostModel,o=e.getVisual("symbolSize");t.setShape("size",o instanceof Array?o:[o,o]),t.symbolProxy=Jl(e.getVisual("symbol"),0,0,0,0),t.setColor=t.symbolProxy.setColor;var a=t.shape.size[0]<4;t.useStyle(n.getModel("itemStyle").getItemStyle(a?["color","shadowBlur","shadowColor"]:["color"]));var r=e.getVisual("color");r&&t.setColor(r),i||(t.seriesIndex=n.seriesIndex,t.on("mousemove",function(e){t.dataIndex=null;var i=t.findDataIndex(e.offsetX,e.offsetY);i>=0&&(t.dataIndex=i+(t.startIndex||0))}))},gC.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},gC._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()},Zs({type:"scatter",render:function(t,e,i){var n=t.getData();this._updateSymbolDraw(n,t).updateData(n),this._finished=!0},incrementalPrepareRender:function(t,e,i){var n=t.getData();this._updateSymbolDraw(n,t).incrementalPrepareUpdate(n),this._finished=!1},incrementalRender:function(t,e,i){this._symbolDraw.incrementalUpdate(t,e.getData()),this._finished=t.end===e.getData().count()},updateTransform:function(t,e,i){var n=t.getData();if(this.group.dirty(),!this._finished||n.count()>1e4||!this._symbolDraw.isPersistent())return{update:!0};var o=AD().reset(t);o.progress&&o.progress({start:0,end:n.count()},n),this._symbolDraw.updateLayout(n)},_updateSymbolDraw:function(t,e){var i=this._symbolDraw,n=e.pipelineContext.large;return i&&n===this._isLargeDraw||(i&&i.remove(),i=this._symbolDraw=n?new Uh:new Du,this._isLargeDraw=n,this.group.removeAll()),this.group.add(i.group),i},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},dispose:function(){}}),Bs(TD("scatter","circle")),zs(AD("scatter")),u(Xh,aD),jh.prototype.getIndicatorAxes=function(){return this._indicatorAxes},jh.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},jh.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e].angle;return[this.cx+t*Math.cos(i),this.cy-t*Math.sin(i)]},jh.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,a=Math.atan2(-i,e),r=1/0,s=-1,l=0;ln[0]&&isFinite(c)&&isFinite(n[0]))}else{r.getTicks().length-1>a&&(u=i(u));var d=Math.round((n[0]+n[1])/2/u)*u,f=Math.round(a/2);r.setExtent(Go(d-f*u),Go(d+(a-f)*u)),r.setInterval(u)}})},jh.dimensions=[],jh.create=function(t,e){var i=[];return t.eachComponent("radar",function(n){var o=new jh(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeriesByType("radar",function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])}),i},Fa.register("radar",jh);var mC=ND.valueAxis,vC=(Fs({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),o=this.get("scale"),s=this.get("axisLine"),l=this.get("axisTick"),u=this.get("axisLabel"),h=this.get("name"),c=this.get("name.show"),d=this.get("name.formatter"),p=this.get("nameGap"),g=this.get("triggerEvent"),m=f(this.get("indicator")||[],function(f){null!=f.max&&f.max>0&&!f.min?f.min=0:null!=f.min&&f.min<0&&!f.max&&(f.max=0);var m=h;if(null!=f.color&&(m=r({color:f.color},h)),f=n(i(f),{boundaryGap:t,splitNumber:e,scale:o,axisLine:s,axisTick:l,axisLabel:u,name:f.text,nameLocation:"end",nameGap:p,nameTextStyle:m,triggerEvent:g},!1),c||(f.name=""),"string"==typeof d){var v=f.name;f.name=d.replace("{value}",null!=v?v:"")}else"function"==typeof d&&(f.name=d(f.name,f));var y=a(new No(f,null,this.ecModel),UA);return y.mainType="radar",y.componentIndex=this.componentIndex,y},this);this.getIndicatorModels=function(){return m}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:n({lineStyle:{color:"#bbb"}},mC.axisLine),axisLabel:Yh(mC.axisLabel,!1),axisTick:Yh(mC.axisTick,!1),splitLine:Yh(mC.splitLine,!0),splitArea:Yh(mC.splitArea,!0),indicator:[]}}),["axisLine","axisTickLabel","axisName"]);Ws({type:"radar",render:function(t,e,i){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem;d(f(e.getIndicatorAxes(),function(t){return new FD(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})}),function(t){d(vC,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=i.getIndicatorAxes();if(n.length){var o=t.get("shape"),a=t.getModel("splitLine"),s=t.getModel("splitArea"),l=a.getModel("lineStyle"),u=s.getModel("areaStyle"),h=a.get("show"),c=s.get("show"),p=l.get("color"),g=u.get("color");p=y(p)?p:[p],g=y(g)?g:[g];var m=[],v=[];if("circle"===o)for(var x=n[0].getTicksCoords(),_=i.cx,w=i.cy,b=0;b"+f(i,function(i,n){var o=e.get(e.mapDimension(i.dim),t);return ia(i.name+" : "+o)}).join("
")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{width:2,type:"solid"},label:{position:"top"},symbol:"emptyCircle",symbolSize:4}});Zs({type:"radar",render:function(t,e,n){function o(t,e){var i=t.getItemVisual(e,"symbol")||"circle",n=t.getItemVisual(e,"color");if("none"!==i){var o=qh(t.getItemVisual(e,"symbolSize")),a=Jl(i,-1,-1,2,2,n);return a.attr({style:{strokeNoScale:!0},z2:100,scale:[o[0]/2,o[1]/2]}),a}}function a(e,i,n,a,r,s){n.removeAll();for(var l=0;l"+ia(n+" : "+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}}}}),aC);var EC="\0_ec_interaction_mutex";Es({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),h(oc,fw);var RC={axisPointer:1,tooltip:1,brush:1};xc.prototype={constructor:xc,draw:function(t,e,i,n,o){var a="geo"===t.mainType,r=t.getData&&t.getData();a&&e.eachComponent({mainType:"series",subType:"map"},function(e){r||e.getHostGeoModel()!==t||(r=e.getData())});var s=t.coordinateSystem;this._updateBackground(s);var l=this._regionsGroup,u=this.group,h=s.scale,c={position:s.position,scale:h};!l.childAt(0)||o?u.attr(c):Io(u,c,t),l.removeAll();var f=["itemStyle"],p=["emphasis","itemStyle"],g=["label"],m=["emphasis","label"],v=R();d(s.regions,function(e){var i=v.get(e.name)||v.set(e.name,new tb),n=new MM({shape:{paths:[]}});i.add(n);var o,s=(C=t.getRegionModel(e.name)||t).getModel(f),u=C.getModel(p),c=mc(s),y=mc(u),x=C.getModel(g),_=C.getModel(m);if(r){o=r.indexOfName(e.name);var w=r.getItemVisual(o,"color",!0);w&&(c.fill=w)}d(e.geometries,function(t){if("polygon"===t.type){n.shape.paths.push(new pM({shape:{points:t.exterior}}));for(var e=0;e<(t.interiors?t.interiors.length:0);e++)n.shape.paths.push(new pM({shape:{points:t.interiors[e]}}))}}),n.setStyle(c),n.style.strokeNoScale=!0,n.culling=!0;var b=x.get("show"),S=_.get("show"),M=r&&isNaN(r.get(r.mapDimension("value"),o)),I=r&&r.getItemLayout(o);if(a||M&&(b||S)||I&&I.showLabel){var T,A=a?e.name:o;(!r||o>=0)&&(T=t);var D=new rM({position:e.center.slice(),scale:[1/h[0],1/h[1]],z2:10,silent:!0});go(D.style,D.hoverStyle={},x,_,{labelFetcher:T,labelDataIndex:A,defaultText:e.name,useInsideStyle:!1},{textAlign:"center",textVerticalAlign:"middle"}),i.add(D)}if(r)r.setItemGraphicEl(o,i);else{var C=t.getRegionModel(e.name);n.eventData={componentType:"geo",componentIndex:t.componentIndex,geoIndex:t.componentIndex,name:e.name,region:C&&C.option||{}}}(i.__regions||(i.__regions=[])).push(e),fo(i,y,{hoverSilentOnTouch:!!t.get("selectedMode")}),l.add(i)}),this._updateController(t,e,i),vc(this,t,l,i,n),yc(t,l)},remove:function(){this._regionsGroup.removeAll(),this._backgroundGroup.removeAll(),this._controller.dispose(),this._mapName&&OC.removeGraphic(this._mapName,this.uid),this._mapName=null,this._controllerHost={}},_updateBackground:function(t){var e=t.map;this._mapName!==e&&d(OC.makeGraphic(e,this.uid),function(t){this._backgroundGroup.add(t)},this),this._mapName=e},_updateController:function(t,e,i){function n(){var e={type:"geoRoam",componentType:l};return e[l+"Id"]=t.id,e}var o=t.coordinateSystem,r=this._controller,s=this._controllerHost;s.zoomLimit=t.get("scaleLimit"),s.zoom=o.getZoom(),r.enable(t.get("roam")||!1);var l=t.mainType;r.off("pan").on("pan",function(t){this._mouseDownFlag=!1,fc(s,t.dx,t.dy),i.dispatchAction(a(n(),{dx:t.dx,dy:t.dy}))},this),r.off("zoom").on("zoom",function(t){if(this._mouseDownFlag=!1,pc(s,t.scale,t.originX,t.originY),i.dispatchAction(a(n(),{zoom:t.scale,originX:t.originX,originY:t.originY})),this._updateGroup){var e=this.group.scale;this._regionsGroup.traverse(function(t){"text"===t.type&&t.attr("scale",[1/e[0],1/e[1]])})}},this),r.setPointerChecker(function(e,n,a){return o.getViewRectAfterRoam().contain(n,a)&&!gc(e,i,t)})}};var zC="__seriesMapHighDown",BC="__seriesMapCallKey";Zs({type:"map",render:function(t,e,i,n){if(!n||"mapToggleSelect"!==n.type||n.from!==this.uid){var o=this.group;if(o.removeAll(),!t.getHostGeoModel()){if(n&&"geoRoam"===n.type&&"series"===n.componentType&&n.seriesId===t.id)(a=this._mapDraw)&&o.add(a.group);else if(t.needsDrawMap){var a=this._mapDraw||new xc(i,!0);o.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,i)}}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var n=t.originalData,o=this.group;n.each(n.mapDimension("value"),function(e,i){if(!isNaN(e)){var r=n.getItemLayout(i);if(r&&r.point){var s=r.point,l=r.offset,u=new sM({style:{fill:t.getData().getVisual("color")},shape:{cx:s[0]+9*l,cy:s[1],r:3},silent:!0,z2:8+(l?0:NM+1)});if(!l){var h=t.mainSeries.getData(),c=n.getName(i),d=h.indexOfName(c),f=n.getItemModel(i),p=f.getModel("label"),g=f.getModel("emphasis.label"),m=h.getItemGraphicEl(d),y=A(t.getFormattedLabel(d,"normal"),c),x=A(t.getFormattedLabel(d,"emphasis"),y),_=m[zC],w=Math.random();if(!_){_=m[zC]={};var b=v(_c,!0),S=v(_c,!1);m.on("mouseover",b).on("mouseout",S).on("emphasis",b).on("normal",S)}m[BC]=w,a(_,{recordVersion:w,circle:u,labelModel:p,hoverLabelModel:g,emphasisText:x,normalText:y}),wc(_,!1)}o.add(u)}}})}}),Es({type:"geoRoam",event:"geoRoam",update:"updateTransform"},function(t,e){var i=t.componentType||"series";e.eachComponent({mainType:i,query:t},function(e){var n=e.coordinateSystem;if("geo"===n.type){var o=bc(n,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(o.center),e.setZoom&&e.setZoom(o.zoom),"series"===i&&d(e.seriesGroup,function(t){t.setCenter(o.center),t.setZoom(o.zoom)})}})});var VC=Q;h(Sc,Tw),Mc.prototype={constructor:Mc,type:"view",dimensions:["x","y"],setBoundingRect:function(t,e,i,n){return this._rect=new de(t,e,i,n),this._rect},getBoundingRect:function(){return this._rect},setViewRect:function(t,e,i,n){this.transformTo(t,e,i,n),this._viewRect=new de(t,e,i,n)},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),a=this._rawTransformable;a.transform=o.calculateTransform(new de(t,e,i,n)),a.decomposeTransform(),this._updateTransform()},setCenter:function(t){t&&(this._center=t,this._updateCenterAndZoom())},setZoom:function(t){t=t||1;var e=this.zoomLimit;e&&(null!=e.max&&(t=Math.min(e.max,t)),null!=e.min&&(t=Math.max(e.min,t))),this._zoom=t,this._updateCenterAndZoom()},getDefaultCenter:function(){var t=this.getBoundingRect();return[t.x+t.width/2,t.y+t.height/2]},getCenter:function(){return this._center||this.getDefaultCenter()},getZoom:function(){return this._zoom||1},getRoamTransform:function(){return this._roamTransformable.getLocalTransform()},_updateCenterAndZoom:function(){var t=this._rawTransformable.getLocalTransform(),e=this._roamTransformable,i=this.getDefaultCenter(),n=this.getCenter(),o=this.getZoom();n=Q([],n,t),i=Q([],i,t),e.origin=n,e.position=[i[0]-n[0],i[1]-n[1]],e.scale=[o,o],this._updateTransform()},_updateTransform:function(){var t=this._roamTransformable,e=this._rawTransformable;e.parent=t,t.updateTransform(),e.updateTransform(),wt(this.transform||(this.transform=[]),e.transform||xt()),this._rawTransform=e.getLocalTransform(),this.invTransform=this.invTransform||[],Tt(this.invTransform,this.transform),this.decomposeTransform()},getViewRect:function(){return this._viewRect},getViewRectAfterRoam:function(){var t=this.getBoundingRect().clone();return t.applyTransform(this.transform),t},dataToPoint:function(t,e,i){var n=e?this._rawTransform:this.transform;return i=i||[],n?VC(i,t,n):G(i,t)},pointToData:function(t){var e=this.invTransform;return e?VC([],t,e):[t[0],t[1]]},convertToPixel:v(Ic,"dataToPoint"),convertFromPixel:v(Ic,"pointToData"),containPoint:function(t){return this.getViewRectAfterRoam().contain(t[0],t[1])}},h(Mc,Tw),Tc.prototype={constructor:Tc,type:"geo",dimensions:["lng","lat"],containCoord:function(t){for(var e=this.regions,i=0;ie&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e,i=this.hostTree,n=i.data.getItemModel(this.dataIndex),o=this.getLevelModel();return o||0!==this.children.length&&(0===this.children.length||!1!==this.isExpand)||(e=this.getLeavesModel()),n.getModel(t,(o||e||i.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},getLeavesModel:function(){return this.hostTree.leavesModel},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)},isAncestorOf:function(t){for(var e=t.parentNode;e;){if(e===this)return!0;e=e.parentNode}return!1},isDescendantOf:function(t){return t!==this&&t.isAncestorOf(this)}},Vc.prototype={constructor:Vc,type:"tree",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;ia&&(a=t.depth)});var r=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:a;return o.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),o.data},getOrient:function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+"."+a,n=n.parentNode;return ia(a+(isNaN(o)||null==o?"":" : "+o))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5},label:{show:!0,color:"#555"},leaves:{label:{show:!0}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}}),Zs({type:"tree",init:function(t,e){this._oldTree,this._mainGroup=new tb,this._controller=new oc(e.getZr()),this._controllerHost={target:this.group},this.group.add(this._mainGroup)},render:function(t,e,i,n){var o=t.getData(),a=t.layoutInfo,r=this._mainGroup,s=t.get("layout");"radial"===s?r.attr("position",[a.x+a.width/2,a.y+a.height/2]):r.attr("position",[a.x,a.y]),this._updateViewCoordSys(t),this._updateController(t,e,i);var l=this._data,u={expandAndCollapse:t.get("expandAndCollapse"),layout:s,orient:t.getOrient(),curvature:t.get("lineStyle.curveness"),symbolRotate:t.get("symbolRotate"),symbolOffset:t.get("symbolOffset"),hoverAnimation:t.get("hoverAnimation"),useNameLabel:!0,fadeIn:!0};o.diff(l).add(function(e){td(o,e)&&id(o,e,null,r,t,u)}).update(function(e,i){var n=l.getItemGraphicEl(i);td(o,e)?id(o,e,n,r,t,u):n&&nd(l,i,n,r,t,u)}).remove(function(e){var i=l.getItemGraphicEl(e);i&&nd(l,e,i,r,t,u)}).execute(),this._nodeScaleRatio=t.get("nodeScaleRatio"),this._updateNodeAndLinkScale(t),!0===u.expandAndCollapse&&o.eachItemGraphicEl(function(e,n){e.off("click").on("click",function(){i.dispatchAction({type:"treeExpandAndCollapse",seriesId:t.id,dataIndex:n})})}),this._data=o},_updateViewCoordSys:function(t){var e=t.getData(),i=[];e.each(function(t){var n=e.getItemLayout(t);!n||isNaN(n.x)||isNaN(n.y)||i.push([+n.x,+n.y])});var n=[],o=[];fn(i,n,o),o[0]-n[0]==0&&(o[0]+=1,n[0]-=1),o[1]-n[1]==0&&(o[1]+=1,n[1]-=1);var a=t.coordinateSystem=new Mc;a.zoomLimit=t.get("scaleLimit"),a.setBoundingRect(n[0],n[1],o[0]-n[0],o[1]-n[1]),a.setCenter(t.get("center")),a.setZoom(t.get("zoom")),this.group.attr({position:a.position,scale:a.scale}),this._viewCoordSys=a},_updateController:function(t,e,i){var n=this._controller,o=this._controllerHost,a=this.group;n.setPointerChecker(function(e,n,o){var r=a.getBoundingRect();return r.applyTransform(a.transform),r.contain(n,o)&&!gc(e,i,t)}),n.enable(t.get("roam")),o.zoomLimit=t.get("scaleLimit"),o.zoom=t.coordinateSystem.getZoom(),n.off("pan").off("zoom").on("pan",function(e){fc(o,e.dx,e.dy),i.dispatchAction({seriesId:t.id,type:"treeRoam",dx:e.dx,dy:e.dy})},this).on("zoom",function(e){pc(o,e.scale,e.originX,e.originY),i.dispatchAction({seriesId:t.id,type:"treeRoam",zoom:e.scale,originX:e.originX,originY:e.originY}),this._updateNodeAndLinkScale(t)},this)},_updateNodeAndLinkScale:function(t){var e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr("scale",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,o=n&&n[0]||1;return((e.getZoom()-1)*i+1)/o},dispose:function(){this._controller&&this._controller.dispose(),this._controllerHost={}},remove:function(){this._mainGroup.removeAll(),this._data=null}}),Es({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=t.dataIndex,n=e.getData().tree.getNodeByDataIndex(i);n.isExpand=!n.isExpand})}),Es({type:"treeRoam",event:"treeRoam",update:"none"},function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},function(e){var i=bc(e.coordinateSystem,t);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)})});Bs(TD("tree","circle")),zs(function(t,e){t.eachSeriesByType("tree",function(t){sd(t,e)})}),YI.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};dd(i);var n=t.levels||[];n=t.levels=fd(n,e);var o={};return o.levels=n,Vc.createTree(i,this,o).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=ta(y(i)?i[0]:i);return ia(e.getName(t)+": "+n)},getDataParams:function(t){var e=YI.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=cd(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},a(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=R(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var UC=5;pd.prototype={constructor:pd,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&i){var r=o.getModel("itemStyle"),s=r.getModel("textStyle"),l={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),da(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a=0,s=e.emptyItemWidth,l=t.get("breadcrumb.height"),u=ha(e.pos,e.box),h=e.totalWidth,c=e.renderList,d=c.length-1;d>=0;d--){var f=c[d],p=f.node,g=f.width,m=f.text;h>u.width&&(h-=g-s,g=s,m=null);var y=new pM({shape:{points:gd(a,0,g,l,d===c.length-1,0===d)},style:r(i.getItemStyle(),{lineJoin:"bevel",text:m,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:v(o,p)});this.group.add(y),md(y,t,p),a+=g+8}},remove:function(){this.group.removeAll()}};var XC=m,jC=tb,YC=yM,qC=d,KC=["label"],$C=["emphasis","label"],JC=["upperLabel"],QC=["emphasis","upperLabel"],tL=10,eL=1,iL=2,nL=Qb([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),oL=function(t){var e=nL(t);return e.stroke=e.fill=e.lineWidth=null,e};Zs({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(l(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=ld(n,["treemapZoomToNode","treemapRootToNode"],t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,u=this._storage,h="treemapRootToNode"===a&&o&&u?{rootNodeGroup:u.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,c=this._giveContainerGroup(r),d=this._doRender(c,t,h);s||a&&"treemapZoomToNode"!==a&&"treemapRootToNode"!==a?d.renderFinally():this._doAnimation(c,d,t,h),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new jC,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){function n(t,e,i,o,a){function r(t){return t.getId()}function s(r,s){var l=null!=r?t[r]:null,u=null!=s?e[s]:null,c=h(l,u,i,a);c&&n(l&&l.viewChildren||[],u&&u.viewChildren||[],c,o,a+1)}o?(e=t,qC(t,function(t,e){!t.isRemoved()&&s(e,e)})):new Xs(e,t,r,r).add(s).update(s).remove(v(s,null)).execute()}var o=e.getData().tree,a=this._oldTree,r={nodeGroup:[],background:[],content:[]},s={nodeGroup:[],background:[],content:[]},l=this._storage,u=[],h=v(yd,e,s,l,i,r,u);n(o.root?[o.root]:[],a&&a.root?[a.root]:[],t,o===a||!a,0);var c=function(t){var e={nodeGroup:[],background:[],content:[]};return t&&qC(t,function(t,i){var n=e[i];qC(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}(l);return this._oldTree=o,this._storage=s,{lastsForAnimation:r,willDeleteEls:c,renderFinally:function(){qC(c,function(t){qC(t,function(t){t.parent&&t.parent.remove(t)})}),qC(u,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,e,i,n){if(i.get("animation")){var o=i.get("animationDurationUpdate"),r=i.get("animationEasing"),s=vd();qC(e.willDeleteEls,function(t,e){qC(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&"drillDown"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var u=0,h=0;l.__tmWillDelete||(u=l.__tmNodeWidth/2,h=l.__tmNodeHeight/2),a="nodeGroup"===e?{position:[u,h],style:{opacity:0}}:{shape:{x:u,y:h,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),qC(this._storage,function(t,i){qC(t,function(t,n){var l=e.lastsForAnimation[i][n],u={};l&&("nodeGroup"===i?l.old&&(u.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(u.shape=a({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),u.style={opacity:1}):1!==t.style.opacity&&(u.style={opacity:1})),s.add(t,u,o,r))})},this),this._state="animating",s.done(XC(function(){this._state="ready",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||((e=this._controller=new oc(t.getZr())).enable(this.seriesModel.get("roam")),e.on("pan",XC(this._onPan,this)),e.on("zoom",XC(this._onZoom,this)));var i=new de(0,0,t.getWidth(),t.getHeight());e.setPointerChecker(function(t,e,n){return i.contain(e,n)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t){if("animating"!==this._state&&(Math.abs(t.dx)>3||Math.abs(t.dy)>3)){var e=this.seriesModel.getData().tree.root;if(!e)return;var i=e.getLayout();if(!i)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:i.x+t.dx,y:i.y+t.dy,width:i.width,height:i.height}})}},_onZoom:function(t){var e=t.originX,i=t.originY;if("animating"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var a=new de(o.x,o.y,o.width,o.height),r=this.seriesModel.layoutInfo;e-=r.x,i-=r.y;var s=xt();St(s,s,[-e,-i]),It(s,s,[t.scale,t.scale]),St(s,s,[e,i]),a.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:a.x,y:a.y,width:a.width,height:a.height}})}},_initEvents:function(t){t.on("click",function(t){if("ready"===this._state){var e=this.seriesModel.get("nodeClick",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if("zoomToNode"===e)this._zoomToNode(i);else if("link"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),a=o.get("link",!0),r=o.get("target",!0)||"blank";a&&window.open(a,r)}}}}},this)},_renderBreadcrumb:function(t,e,i){i||(i=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(i={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new pd(this.group))).render(t,e,i.node,XC(function(e){"animating"!==this._state&&(hd(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))},this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var a=o.transformCoordToLocal(t,e),r=o.shape;if(!(r.x<=a[0]&&a[0]<=r.x+r.width&&r.y<=a[1]&&a[1]<=r.y+r.height))return!1;i={node:n,offsetX:a[0],offsetY:a[1]}}},this),i}});for(var aL=["treemapZoomToNode","treemapRender","treemapMove"],rL=0;rL=0&&t.call(e,i[o],o)},TL.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},TL.breadthFirstTraverse=function(t,e,i,n){if(Jd.isInstance(e)||(e=this._nodesMap[$d(e)]),e){for(var o="out"===i?"outEdges":"in"===i?"inEdges":"edges",a=0;a=0&&i.node2.dataIndex>=0});for(var o=0,a=n.length;o=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};h(Jd,AL("hostGraph","data")),h(Qd,AL("hostGraph","edgeData")),IL.Node=Jd,IL.Edge=Qd,Yi(Jd),Yi(Qd);var DL=function(t,e,i,n,o){for(var a=new IL(n),r=0;r "+f)),h++)}var p,g=i.get("coordinateSystem");if("cartesian2d"===g||"polar"===g)p=ml(t,i);else{var m=Fa.get(g),v=m&&"view"!==m.type?m.dimensions||[]:[];l(v,"value")<0&&v.concat(["value"]);var y=_A(t,{coordDimensions:v});(p=new vA(y,i)).initData(t)}var x=new vA(["value"],i);return x.initData(u,s),o&&o(p,x),kc({mainData:p,struct:a,structAttr:"graph",datas:{node:p,edge:x},datasAttr:{node:"data",edge:"edgeData"}}),a.update(),a},CL=Hs({type:"series.graph",init:function(t){CL.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){CL.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){CL.superApply(this,"mergeDefaultAndTheme",arguments),Ci(t,["edgeLabel"],["show"])},getInitialData:function(t,e){var i=t.edges||t.links||[],n=t.data||t.nodes||[],o=this;if(n&&i)return DL(n,i,this,!0,function(t,i){function n(t){return(t=this.parsePath(t))&&"label"===t[0]?r:t&&"emphasis"===t[0]&&"label"===t[1]?l:this.parentModel}t.wrapMethod("getItemModel",function(t){var e=o._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var a=o.getModel("edgeLabel"),r=new No({label:a.option},a.parentModel,e),s=o.getModel("emphasis.edgeLabel"),l=new No({emphasis:{label:s.option}},s.parentModel,e);i.wrapMethod("getItemModel",function(t){return t.customizeGetParent(n),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getData(),o=this.getDataParams(t,i),a=n.graph.getEdgeByIndex(t),r=n.getName(a.node1.dataIndex),s=n.getName(a.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=ia(l.join(" > ")),o.value&&(l+=" : "+ia(o.value)),l}return CL.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=f(this.option.categories||[],function(t){return null!=t.value?t:a({value:0},t)}),e=new vA(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return CL.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle"},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{label:{show:!0}}}}),LL=_M.prototype,kL=bM.prototype,PL=Un({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){(tf(e)?LL:kL).buildPath(t,e)},pointAt:function(t){return tf(this.shape)?LL.pointAt.call(this,t):kL.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=tf(e)?[e.x2-e.x1,e.y2-e.y1]:kL.tangentAt.call(this,t);return q(i,i)}}),NL=["fromSymbol","toSymbol"],OL=rf.prototype;OL.beforeUpdate=function(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var o=1,a=this.parent;a;)a.scale&&(o/=a.scale[0]),a=a.parent;var r=t.childOfName("line");if(this.__dirty||r.__dirty){var s=r.shape.percent,l=r.pointAt(0),u=r.pointAt(s),h=U([],u,l);if(q(h,h),e&&(e.attr("position",l),c=r.tangentAt(0),e.attr("rotation",Math.PI/2-Math.atan2(c[1],c[0])),e.attr("scale",[o*s,o*s])),i){i.attr("position",u);var c=r.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(c[1],c[0])),i.attr("scale",[o*s,o*s])}if(!n.ignore){n.attr("position",u);var d,f,p,g=5*o;if("end"===n.__position)d=[h[0]*g+u[0],h[1]*g+u[1]],f=h[0]>.8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var m=s/2,v=[(c=r.tangentAt(m))[1],-c[0]],y=r.pointAt(m);v[1]>0&&(v[0]=-v[0],v[1]=-v[1]),d=[y[0]+v[0]*g,y[1]+v[1]*g],f="center",p="bottom";var x=-Math.atan2(c[1],c[0]);u[0].8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||p,textAlign:n.__textAlign||f},position:d,scale:[o,o]})}}}},OL._createLine=function(t,e,i){var n=t.hostModel,o=of(t.getItemLayout(e));o.shape.percent=0,To(o,{shape:{percent:1}},n,e),this.add(o);var a=new rM({name:"label",lineLabelOriginalOpacity:1});this.add(a),d(NL,function(i){var n=nf(i,t,e);this.add(n),this[ef(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},OL.updateData=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=t.getItemLayout(e),r={shape:{}};af(r.shape,a),Io(o,r,n,e),d(NL,function(i){var n=t.getItemVisual(e,i),o=ef(i);if(this[o]!==n){this.remove(this.childOfName(i));var a=nf(i,t,e);this.add(a)}this[o]=n},this),this._updateCommonStl(t,e,i)},OL._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),a=i&&i.lineStyle,s=i&&i.hoverLineStyle,l=i&&i.labelModel,u=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var h=t.getItemModel(e);a=h.getModel("lineStyle").getLineStyle(),s=h.getModel("emphasis.lineStyle").getLineStyle(),l=h.getModel("label"),u=h.getModel("emphasis.label")}var c=t.getItemVisual(e,"color"),f=D(t.getItemVisual(e,"opacity"),a.opacity,1);o.useStyle(r({strokeNoScale:!0,fill:"none",stroke:c,opacity:f},a)),o.hoverStyle=s,d(NL,function(t){var e=this.childOfName(t);e&&(e.setColor(c),e.setStyle({opacity:f}))},this);var p,g,m=l.getShallow("show"),v=u.getShallow("show"),y=this.childOfName("label");if((m||v)&&(p=c||"#000",null==(g=n.getFormattedLabel(e,"normal",t.dataType)))){var x=n.getRawValue(e);g=null==x?t.getName(e):isFinite(x)?Go(x):x}var _=m?g:null,w=v?A(n.getFormattedLabel(e,"emphasis",t.dataType),g):null,b=y.style;null==_&&null==w||(mo(y.style,l,{text:_},{autoColor:p}),y.__textAlign=b.textAlign,y.__verticalAlign=b.textVerticalAlign,y.__position=l.get("position")||"middle"),y.hoverStyle=null!=w?{text:w,textFill:u.getTextColor(!0),fontStyle:u.getShallow("fontStyle"),fontWeight:u.getShallow("fontWeight"),fontSize:u.getShallow("fontSize"),fontFamily:u.getShallow("fontFamily")}:{text:null},y.ignore=!m&&!v,fo(this)},OL.highlight=function(){this.trigger("emphasis")},OL.downplay=function(){this.trigger("normal")},OL.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},OL.setLinePoints=function(t){var e=this.childOfName("line");af(e.shape,t),e.dirty()},u(rf,tb);var EL=sf.prototype;EL.isPersistent=function(){return!0},EL.updateData=function(t){var e=this,i=e.group,n=e._lineData;e._lineData=t,n||i.removeAll();var o=hf(t);t.diff(n).add(function(i){lf(e,t,i,o)}).update(function(i,a){uf(e,n,t,a,i,o)}).remove(function(t){i.remove(n.getItemGraphicEl(t))}).execute()},EL.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},EL.incrementalPrepareUpdate=function(t){this._seriesScope=hf(t),this._lineData=null,this.group.removeAll()},EL.incrementalUpdate=function(t,e){for(var i=t.start;i=o/3?1:2),l=e.y-n(r)*a*(a>=o/3?1:2);r=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(r)*a,e.y+n(r)*a),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(r)*a,e.y-n(r)*a),t.lineTo(s,l)}}),YL=2*Math.PI,qL=(Ar.extend({type:"gauge",render:function(t,e,i){this.group.removeAll();var n=t.get("axisLine.lineStyle.color"),o=Sf(t,i);this._renderMain(t,e,i,n,o)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var a=this.group,r=t.getModel("axisLine").getModel("lineStyle"),s=t.get("clockwise"),l=-t.get("startAngle")/180*Math.PI,u=-t.get("endAngle")/180*Math.PI,h=(u-l)%YL,c=l,d=r.get("width"),f=0;f=t&&(0===e?0:n[e-1][0]).4?"bottom":"middle",textAlign:A<-.4?"left":A>.4?"right":"center"},{autoColor:P}),silent:!0}))}if(g.get("show")&&T!==v){for(var N=0;N<=y;N++){var A=Math.cos(w),D=Math.sin(w),O=new _M({shape:{x1:A*c+u,y1:D*c+h,x2:A*(c-_)+u,y2:D*(c-_)+h},silent:!0,style:I});"auto"===I.stroke&&O.setStyle({stroke:n((T+N/y)/v)}),l.add(O),w+=S}w-=S}else w+=b}},_renderPointer:function(t,e,i,n,o,a,r,s){var l=this.group,u=this._data;if(t.get("pointer.show")){var h=[+t.get("min"),+t.get("max")],c=[a,r],d=t.getData(),f=d.mapDimension("value");d.diff(u).add(function(e){var i=new jL({shape:{angle:a}});To(i,{shape:{angle:Bo(d.get(f,e),h,c,!0)}},t),l.add(i),d.setItemGraphicEl(e,i)}).update(function(e,i){var n=u.getItemGraphicEl(i);Io(n,{shape:{angle:Bo(d.get(f,e),h,c,!0)}},t),l.add(n),d.setItemGraphicEl(e,n)}).remove(function(t){var e=u.getItemGraphicEl(t);l.remove(e)}).execute(),d.eachItemGraphicEl(function(t,e){var i=d.getItemModel(e),a=i.getModel("pointer");t.setShape({x:o.cx,y:o.cy,width:Vo(a.get("width"),o.r),r:Vo(a.get("length"),o.r)}),t.useStyle(i.getModel("itemStyle").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",n(Bo(d.get(f,e),h,[0,1],!0))),fo(t,i.getModel("emphasis.itemStyle").getItemStyle())}),this._data=d}else u&&u.eachItemGraphicEl(function(t){l.remove(t)})},_renderTitle:function(t,e,i,n,o){var a=t.getData(),r=a.mapDimension("value"),s=t.getModel("title");if(s.get("show")){var l=s.get("offsetCenter"),u=o.cx+Vo(l[0],o.r),h=o.cy+Vo(l[1],o.r),c=+t.get("min"),d=+t.get("max"),f=n(Bo(t.getData().get(r,0),[c,d],[0,1],!0));this.group.add(new rM({silent:!0,style:mo({},s,{x:u,y:h,text:a.getName(0),textAlign:"center",textVerticalAlign:"middle"},{autoColor:f,forceRich:!0})}))}},_renderDetail:function(t,e,i,n,o){var a=t.getModel("detail"),r=+t.get("min"),s=+t.get("max");if(a.get("show")){var l=a.get("offsetCenter"),u=o.cx+Vo(l[0],o.r),h=o.cy+Vo(l[1],o.r),c=Vo(a.get("width"),o.r),d=Vo(a.get("height"),o.r),f=t.getData(),p=f.get(f.mapDimension("value"),0),g=n(Bo(p,[r,s],[0,1],!0));this.group.add(new rM({silent:!0,style:mo({},a,{x:u,y:h,text:Mf(p,a.get("formatter")),textWidth:isNaN(c)?null:c,textHeight:isNaN(d)?null:d,textAlign:"center",textVerticalAlign:"middle"},{autoColor:g,forceRich:!0})}))}}}),Hs({type:"series.funnel",init:function(t){qL.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()},this._defaultLabelLine(t)},getInitialData:function(t,e){return oC(this,["value"])},_defaultLabelLine:function(t){Ci(t,"labelLine",["show"]);var e=t.labelLine,i=t.emphasis.labelLine;e.show=e.show&&t.label.show,i.show=i.show&&t.emphasis.label.show},getDataParams:function(t){var e=this.getData(),i=qL.superCall(this,"getDataParams",t),n=e.mapDimension("value"),o=e.getSum(n);return i.percent=o?+(e.get(n,t)/o*100).toFixed(2):0,i.$vars.push("percent"),i},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}}}})),KL=If.prototype,$L=["itemStyle","opacity"];KL.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=t.getItemModel(e).get($L);l=null==l?1:l,n.useStyle({}),i?(n.setShape({points:s.points}),n.setStyle({opacity:0}),To(n,{style:{opacity:l}},o,e)):Io(n,{style:{opacity:l},shape:{points:s.points}},o,e);var u=a.getModel("itemStyle"),h=t.getItemVisual(e,"color");n.setStyle(r({lineJoin:"round",fill:h},u.getItemStyle(["opacity"]))),n.hoverStyle=u.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),fo(this)},KL._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),r=t.getItemLayout(e).label,s=t.getItemVisual(e,"color");Io(i,{shape:{points:r.linePoints||r.linePoints}},o,e),Io(n,{style:{x:r.x,y:r.y}},o,e),n.attr({rotation:r.rotation,origin:[r.x,r.y],z2:10});var l=a.getModel("label"),u=a.getModel("emphasis.label"),h=a.getModel("labelLine"),c=a.getModel("emphasis.labelLine"),s=t.getItemVisual(e,"color");go(n.style,n.hoverStyle={},l,u,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:s,useInsideStyle:!!r.inside},{textAlign:r.textAlign,textVerticalAlign:r.verticalAlign}),n.ignore=n.normalIgnore=!l.get("show"),n.hoverIgnore=!u.get("show"),i.ignore=i.normalIgnore=!h.get("show"),i.hoverIgnore=!c.get("show"),i.setStyle({stroke:s}),i.setStyle(h.getModel("lineStyle").getLineStyle()),i.hoverStyle=c.getModel("lineStyle").getLineStyle()},u(If,tb);Ar.extend({type:"funnel",render:function(t,e,i){var n=t.getData(),o=this._data,a=this.group;n.diff(o).add(function(t){var e=new If(n,t);n.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=o.getItemGraphicEl(e);i.updateData(n,t),a.add(i),n.setItemGraphicEl(t,i)}).remove(function(t){var e=o.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=n},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});Bs(uC("funnel")),zs(function(t,e,i){t.eachSeriesByType("funnel",function(t){var i=t.getData(),n=i.mapDimension("value"),o=t.get("sort"),a=Tf(t,e),r=Af(i,o),s=[Vo(t.get("minSize"),a.width),Vo(t.get("maxSize"),a.width)],l=i.getDataExtent(n),u=t.get("min"),h=t.get("max");null==u&&(u=Math.min(l[0],0)),null==h&&(h=l[1]);var c=t.get("funnelAlign"),d=t.get("gap"),f=(a.height-d*(i.count()-1))/i.count(),p=a.y,g=function(t,e){var o,r=Bo(i.get(n,t)||0,[u,h],s,!0);switch(c){case"left":o=a.x;break;case"center":o=a.x+(a.width-r)/2;break;case"right":o=a.x+a.width-r}return[[o,e],[o+r,e]]};"ascending"===o&&(f=-f,d=-d,p+=a.height,r=r.reverse());for(var m=0;ma&&(e[1-n]=e[n]+h.sign*a),e},tk=d,ek=Math.min,ik=Math.max,nk=Math.floor,ok=Math.ceil,ak=Go,rk=Math.PI;Nf.prototype={type:"parallel",constructor:Nf,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;tk(n,function(t,i){var n=o[i],a=e.getComponent("parallelAxis",n),r=this._axesMap.set(t,new JL(t,Hl(a),[0,0],a.get("type"),n)),s="category"===r.type;r.onBand=s&&a.get("boundaryGap"),r.inverse=a.get("inverse"),a.axis=r,r.model=a,r.coordinateSystem=a.coordinateSystem=this},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},containPoint:function(t){var e=this._makeLayoutInfo(),i=e.axisBase,n=e.layoutBase,o=e.pixelDimIndex,a=t[1-o],r=t[o];return a>=i&&a<=i+e.axisLength&&r>=n&&r<=n+e.layoutLength},getModel:function(){return this._model},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();tk(this.dimensions,function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(n,n.mapDimension(t)),Wl(e.scale,e.model)},this)}},this)},resize:function(t,e){this._rect=ca(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},getRect:function(){return this._rect},_makeLayoutInfo:function(){var t,e=this._model,i=this._rect,n=["x","y"],o=["width","height"],a=e.get("layout"),r="horizontal"===a?0:1,s=i[o[r]],l=[0,s],u=this.dimensions.length,h=Of(e.get("axisExpandWidth"),l),c=Of(e.get("axisExpandCount")||0,[0,u]),d=e.get("axisExpandable")&&u>3&&u>c&&c>1&&h>0&&s>0,f=e.get("axisExpandWindow");f?(t=Of(f[1]-f[0],l),f[1]=f[0]+t):(t=Of(h*(c-1),l),(f=[h*(e.get("axisExpandCenter")||nk(u/2))-t/2])[1]=f[0]+t);var p=(s-t)/(u-c);p<3&&(p=0);var g=[nk(ak(f[0]/h,1))+1,ok(ak(f[1]/h,1))-1],m=p/h*f[0];return{layout:a,pixelDimIndex:r,layoutBase:i[n[r]],layoutLength:s,axisBase:i[n[1-r]],axisLength:i[o[1-r]],axisExpandable:d,axisExpandWidth:h,axisCollapseWidth:p,axisExpandWindow:f,axisCount:u,winInnerIndices:g,axisExpandWindow0Pos:m}},_layoutAxes:function(){var t=this._rect,e=this._axesMap,i=this.dimensions,n=this._makeLayoutInfo(),o=n.layout;e.each(function(t){var e=[0,n.axisLength],i=t.inverse?1:0;t.setExtent(e[i],e[1-i])}),tk(i,function(e,i){var a=(n.axisExpandable?Rf:Ef)(i,n),r={horizontal:{x:a.position,y:n.axisLength},vertical:{x:0,y:a.position}},s={horizontal:rk/2,vertical:0},l=[r[o].x+t.x,r[o].y+t.y],u=s[o],h=xt();Mt(h,h,u),St(h,h,l),this._axesLayout[e]={position:l,rotation:u,transform:h,axisNameAvailableWidth:a.axisNameAvailableWidth,axisLabelShow:a.axisLabelShow,nameTruncateMaxWidth:a.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}},this)},getAxis:function(t){return this._axesMap.get(t)},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},eachActiveState:function(t,e,i,n){null==i&&(i=0),null==n&&(n=t.count());var o=this._axesMap,a=this.dimensions,r=[],s=[];d(a,function(e){r.push(t.mapDimension(e)),s.push(o.get(e).model)});for(var l=this.hasAxisBrushed(),u=i;uo*(1-h[0])?(l="jump",r=s-o*(1-h[2])):(r=s-o*h[1])>=0&&(r=s-o*(1-h[1]))<=0&&(r=0),(r*=e.axisExpandWidth/u)?QL(r,n,a,"all"):l="none";else{o=n[1]-n[0];(n=[ik(0,a[1]*s/o-o/2)])[1]=ek(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},Fa.register("parallel",{create:function(t,e){var i=[];return t.eachComponent("parallel",function(n,o){var a=new Nf(n,t,e);a.name="parallel_"+o,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if("parallel"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}});var sk=lI.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return Qb([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=i(t);if(e)for(var n=e.length-1;n>=0;n--)Fo(e[n])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var i=e[0];if(i[0]<=t&&t<=i[1])return"active"}else for(var n=0,o=e.length;n5)return;var n=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==n.behavior&&this._dispatchExpand({axisExpandWindow:n.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&Ip(this,"mousemove")){var e=this._model,i=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),n=i.behavior;"jump"===n&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===n?null:{axisExpandWindow:i.axisExpandWindow,animation:"jump"===n&&null})}}};Ns(function(t){Cf(t),Lf(t)}),YI.extend({type:"series.parallel",dependencies:["parallel"],visualColorAccessPath:"lineStyle.color",getInitialData:function(t,e){var i=this.getSource();return Tp(i,this),ml(i,this)},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:"parallel",parallelIndex:0,label:{show:!1},inactiveOpacity:.05,activeOpacity:1,lineStyle:{width:1,opacity:.45,type:"solid"},emphasis:{label:{show:!1}},progressive:500,smooth:!1,animationEasing:"linear"}});var Dk=.3,Ck=(Ar.extend({type:"parallel",init:function(){this._dataGroup=new tb,this.group.add(this._dataGroup),this._data,this._initialized},render:function(t,e,i,n){var o=this._dataGroup,a=t.getData(),r=this._data,s=t.coordinateSystem,l=s.dimensions,u=kp(t);if(a.diff(r).add(function(t){Pp(Lp(a,o,t,l,s),a,t,u)}).update(function(e,i){var o=r.getItemGraphicEl(i),h=Cp(a,e,l,s);a.setItemGraphicEl(e,o),Io(o,{shape:{points:h}},n&&!1===n.animation?null:t,e),Pp(o,a,e,u)}).remove(function(t){var e=r.getItemGraphicEl(t);o.remove(e)}).execute(),!this._initialized){this._initialized=!0;var h=Dp(s,t,function(){setTimeout(function(){o.removeClipPath()})});o.setClipPath(h)}this._data=a},incrementalPrepareRender:function(t,e,i){this._initialized=!0,this._data=null,this._dataGroup.removeAll()},incrementalRender:function(t,e,i){for(var n=e.getData(),o=e.coordinateSystem,a=o.dimensions,r=kp(e),s=t.start;sn&&(n=e)}),d(e,function(e){var o=new hL({type:"color",mappingMethod:"linear",dataExtent:[i,n],visual:t.get("color")}).mapValueToVisual(e.getLayout().value);e.setVisual("color",o);var a=e.getModel().get("itemStyle.color");null!=a&&e.setVisual("color",a)})}})});var Ok={_baseAxisDim:null,getInitialData:function(t,e){var i,n,o=e.getComponent("xAxis",this.get("xAxisIndex")),a=e.getComponent("yAxis",this.get("yAxisIndex")),r=o.get("type"),s=a.get("type");"category"===r?(t.layout="horizontal",i=o.getOrdinalMeta(),n=!0):"category"===s?(t.layout="vertical",i=a.getOrdinalMeta(),n=!0):t.layout=t.layout||"horizontal";var l=["x","y"],u="horizontal"===t.layout?0:1,h=this._baseAxisDim=l[u],c=l[1-u],f=[o,a],p=f[u].get("type"),g=f[1-u].get("type"),m=t.data;if(m&&n){var v=[];d(m,function(t,e){var i;t.value&&y(t.value)?(i=t.value.slice(),t.value.unshift(e)):y(t)?(i=t.slice(),t.unshift(e)):i=t,v.push(i)}),t.data=v}var x=this.defaultValueDimensions;return oC(this,{coordDimensions:[{name:h,type:qs(p),ordinalMeta:i,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:c,type:qs(g),dimsDef:x.slice()}],dimensionsCount:x.length+1})},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}};h(YI.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}}),Ok,!0);var Ek=["itemStyle"],Rk=["emphasis","itemStyle"],zk=(Ar.extend({type:"boxplot",render:function(t,e,i){var n=t.getData(),o=this.group,a=this._data;this._data||o.removeAll();var r="horizontal"===t.get("layout")?1:0;n.diff(a).add(function(t){if(n.hasValue(t)){var e=ig(n.getItemLayout(t),n,t,r,!0);n.setItemGraphicEl(t,e),o.add(e)}}).update(function(t,e){var i=a.getItemGraphicEl(e);if(n.hasValue(t)){var s=n.getItemLayout(t);i?ng(s,i,n,t):i=ig(s,n,t,r),o.add(i),n.setItemGraphicEl(t,i)}else o.remove(i)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&o.remove(e)}).execute(),this._data=n},remove:function(t){var e=this.group,i=this._data;this._data=null,i&&i.eachItemGraphicEl(function(t){t&&e.remove(t)})},dispose:B}),Pn.extend({type:"boxplotBoxPath",shape:{},buildPath:function(t,e){var i=e.points,n=0;for(t.moveTo(i[n][0],i[n][1]),n++;n<4;n++)t.lineTo(i[n][0],i[n][1]);for(t.closePath();n0?jk:Yk)}function n(t,e){return e.get(t>0?Uk:Xk)}var o=t.getData(),a=t.pipelineContext.large;if(o.setVisual({legendSymbol:"roundRect",colorP:i(1,t),colorN:i(-1,t),borderColorP:n(1,t),borderColorN:n(-1,t)}),!e.isSeriesFiltered(t))return!a&&{progress:function(t,e){for(var o;null!=(o=t.next());){var a=e.getItemModel(o),r=e.getItemLayout(o).sign;e.setItemVisual(o,{color:i(r,a),borderColor:n(r,a)})}}}}},Kk="undefined"!=typeof Float32Array?Float32Array:Array,$k={seriesType:"candlestick",plan:$I(),reset:function(t){var e=t.coordinateSystem,i=t.getData(),n=pg(t,i),o=0,a=1,r=["x","y"],s=i.mapDimension(r[o]),l=i.mapDimension(r[a],!0),u=l[0],h=l[1],c=l[2],d=l[3];if(i.setLayout({candleWidth:n,isSimpleBox:n<=1.3}),!(null==s||l.length<4))return{progress:t.pipelineContext.large?function(t,i){for(var n,r,l=new Kk(5*t.count),f=0,p=[],g=[];null!=(r=t.next());){var m=i.get(s,r),v=i.get(u,r),y=i.get(h,r),x=i.get(c,r),_=i.get(d,r);isNaN(m)||isNaN(x)||isNaN(_)?(l[f++]=NaN,f+=4):(l[f++]=fg(i,r,v,y,h),p[o]=m,p[a]=x,n=e.dataToPoint(p,null,g),l[f++]=n?n[0]:NaN,l[f++]=n?n[1]:NaN,p[a]=_,n=e.dataToPoint(p,null,g),l[f++]=n?n[1]:NaN)}i.setLayout("largePoints",l)}:function(t,i){function r(t,i){var n=[];return n[o]=i,n[a]=t,isNaN(i)||isNaN(t)?[NaN,NaN]:e.dataToPoint(n)}function l(t,e,i){var a=e.slice(),r=e.slice();a[o]=Jn(a[o]+n/2,1,!1),r[o]=Jn(r[o]-n/2,1,!0),i?t.push(a,r):t.push(r,a)}function f(t){return t[o]=Jn(t[o],1),t}for(var p;null!=(p=t.next());){var g=i.get(s,p),m=i.get(u,p),v=i.get(h,p),y=i.get(c,p),x=i.get(d,p),_=Math.min(m,v),w=Math.max(m,v),b=r(_,g),S=r(w,g),M=r(y,g),I=r(x,g),T=[];l(T,S,0),l(T,b,1),T.push(f(I),f(S),f(M),f(b)),i.setItemLayout(p,{sign:fg(i,p,m,v,h),initBaseline:m>v?S[a]:b[a],ends:T,brushRect:function(t,e,i){var s=r(t,i),l=r(e,i);return s[o]-=n/2,l[o]-=n/2,{x:s[0],y:s[1],width:a?n:l[0]-s[0],height:a?l[1]-s[1]:n}}(y,x,g)})}}}}};Ns(function(t){t&&y(t.series)&&d(t.series,function(t){w(t)&&"k"===t.type&&(t.type="candlestick")})}),Bs(qk),zs($k),YI.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){return ml(this.getSource(),this)},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}});var Jk=vg.prototype;Jk.stopEffectAnimation=function(){this.childAt(1).removeAll()},Jk.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),o=0;o<3;o++){var a=Jl(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var r=-o/3*t.period+t.effectOffset;a.animate("",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(r).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(r).start(),n.add(a)}mg(n,t)},Jk.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=["symbolType","period","rippleScale"],o=0;o "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}}),iP=xg.prototype;iP.createLine=function(t,e,i){return new rf(t,e,i)},iP._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),o=i.get("symbol");y(n)||(n=[n,n]);var a=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=Jl(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",a),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(a),r.attr("scale",n),this._symbolType=o,this._updateEffectAnimation(t,i,e))},iP._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,a=t.getItemLayout(i),r=1e3*e.get("period"),s=e.get("loop"),l=e.get("constantSpeed"),u=T(e.get("delay"),function(e){return e/t.count()*r/3}),h="function"==typeof u;if(n.ignore=!0,this.updateAnimationPoints(n,a),l>0&&(r=this.getLineLength(n)/l*1e3),r!==this._period||s!==this._loop){n.stopAnimation();var c=u;h&&(c=u(i)),n.__t>0&&(c=-r*n.__t),n.__t=0;var d=n.animate("",s).when(r,{__t:1}).delay(c).during(function(){o.updateSymbolPosition(n)});s||d.done(function(){o.remove(n)}),d.start()}this._period=r,this._loop=s}},iP.getLineLength=function(t){return uw(t.__p1,t.__cp1)+uw(t.__cp1,t.__p2)},iP.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},iP.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},iP.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,a=t.position,r=sn,s=ln;a[0]=r(e[0],n[0],i[0],o),a[1]=r(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),u=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(u,l)-Math.PI/2,t.ignore=!1},iP.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel("effect");this._updateEffectAnimation(t,i,e)},u(xg,tb);var nP=_g.prototype;nP._createPolyline=function(t,e,i){var n=t.getItemLayout(e),o=new gM({shape:{points:n}});this.add(o),this._updateCommonStl(t,e,i)},nP.updateData=function(t,e,i){var n=t.hostModel;Io(this.childAt(0),{shape:{points:t.getItemLayout(e)}},n,e),this._updateCommonStl(t,e,i)},nP._updateCommonStl=function(t,e,i){var n=this.childAt(0),o=t.getItemModel(e),a=t.getItemVisual(e,"color"),s=i&&i.lineStyle,l=i&&i.hoverLineStyle;i&&!t.hasItemOption||(s=o.getModel("lineStyle").getLineStyle(),l=o.getModel("emphasis.lineStyle").getLineStyle()),n.useStyle(r({strokeNoScale:!0,fill:"none",stroke:a},s)),n.hoverStyle=l,fo(this)},nP.updateLayout=function(t,e){this.childAt(0).setShape("points",t.getItemLayout(e))},u(_g,tb);var oP=wg.prototype;oP.createLine=function(t,e,i){return new _g(t,e,i)},oP.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;re);r++);r=Math.min(r-1,o-2)}J(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},u(wg,xg);var aP=Un({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var i=e.segs,n=e.curveness;if(e.polyline)for(r=0;r0){t.moveTo(i[r++],i[r++]);for(var a=1;a0){var c=(s+u)/2-(l-h)*n,d=(l+h)/2-(u-s)*n;t.quadraticCurveTo(c,d,u,h)}else t.lineTo(u,h)}},findDataIndex:function(t,e){var i=this.shape,n=i.segs,o=i.curveness;if(i.polyline)for(var a=0,r=0;r0)for(var l=n[r++],u=n[r++],h=1;h0){if(_n(l,u,(l+c)/2-(u-d)*o,(u+d)/2-(c-l)*o,c,d))return a}else if(yn(l,u,c,d))return a;a++}return-1}}),rP=bg.prototype;rP.isPersistent=function(){return!this._incremental},rP.updateData=function(t){this.group.removeAll();var e=new aP({rectHover:!0,cursor:"default"});e.setShape({segs:t.getLayout("linesPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},rP.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>5e5?(this._incremental||(this._incremental=new Zn({silent:!0})),this.group.add(this._incremental)):this._incremental=null},rP.incrementalUpdate=function(t,e){var i=new aP;i.setShape({segs:e.getLayout("linesPoints")}),this._setCommon(i,e,!!this._incremental),this._incremental?this._incremental.addDisplayable(i,!0):(i.rectHover=!0,i.cursor="default",i.__startIndex=t.start,this.group.add(i))},rP.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},rP._setCommon=function(t,e,i){var n=e.hostModel;t.setShape({polyline:n.get("polyline"),curveness:n.get("lineStyle.curveness")}),t.useStyle(n.getModel("lineStyle").getLineStyle()),t.style.strokeNoScale=!0;var o=e.getVisual("color");o&&t.setStyle("stroke",o),t.setStyle("fill"),i||(t.seriesIndex=n.seriesIndex,t.on("mousemove",function(e){t.dataIndex=null;var i=t.findDataIndex(e.offsetX,e.offsetY);i>0&&(t.dataIndex=i+t.__startIndex)}))},rP._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()};var sP={seriesType:"lines",plan:$I(),reset:function(t){var e=t.coordinateSystem,i=t.get("polyline"),n=t.pipelineContext.large;return{progress:function(o,a){var r=[];if(n){var s,l=o.end-o.start;if(i){for(var u=0,h=o.start;h0){var I=a(v)?s:l;v>0&&(v=v*S+b),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*v*256}else _+=4}return c.putImageData(y,0,0),h},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=iw()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext("2d");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),a=[0,0,0,0],r=0,s=0;s<256;s++)e[i](s/255,!0,a),o[r++]=a[0],o[r++]=a[1],o[r++]=a[2],o[r++]=a[3];return o}},Zs({type:"heatmap",render:function(t,e,i){var n;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll(),this._incrementalDisplayable=null;var o=t.coordinateSystem;"cartesian2d"===o.type||"calendar"===o.type?this._renderOnCartesianAndCalendar(t,i,0,t.getData().count()):Ag(o)&&this._renderOnGeo(o,t,n,i)},incrementalPrepareRender:function(t,e,i){this.group.removeAll()},incrementalRender:function(t,e,i,n){e.coordinateSystem&&this._renderOnCartesianAndCalendar(e,n,t.start,t.end,!0)},_renderOnCartesianAndCalendar:function(t,e,i,n,o){var r,s,l=t.coordinateSystem;if("cartesian2d"===l.type){var u=l.getAxis("x"),h=l.getAxis("y");r=u.getBandWidth(),s=h.getBandWidth()}for(var c=this.group,d=t.getData(),f=t.getModel("itemStyle").getItemStyle(["color"]),p=t.getModel("emphasis.itemStyle").getItemStyle(),g=t.getModel("label"),m=t.getModel("emphasis.label"),v=l.type,y="cartesian2d"===v?[d.mapDimension("x"),d.mapDimension("y"),d.mapDimension("value")]:[d.mapDimension("time"),d.mapDimension("value")],x=i;x=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},Fa.register("single",{create:function(t,e){var i=[];return t.eachComponent("singleAxis",function(n,o){var a=new $g(n,t,e);a.name="single_"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if("singleAxis"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"singleAxis",index:e.get("singleAxisIndex"),id:e.get("singleAxisId")})[0];e.coordinateSystem=i&&i.coordinateSystem}}),i},dimensions:$g.prototype.dimensions});var gP=["axisLine","axisTickLabel","axisName"],mP=XD.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(t,e,i,n){var o=this.group;o.removeAll();var a=Jg(t),r=new FD(t,a);d(gP,r.add,r),o.add(r.getGroup()),t.get("splitLine.show")&&this._splitLine(t),mP.superCall(this,"render",t,e,i,n)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var i=t.getModel("splitLine"),n=i.getModel("lineStyle"),o=n.get("width"),a=n.get("color");a=a instanceof Array?a:[a];for(var r=t.coordinateSystem.getRect(),s=e.isHorizontal(),l=[],u=0,h=e.getTicksCoords({tickModel:i}),c=[],d=[],f=0;f=0)&&i({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){gm(e.getZr(),"axisPointer"),IP.superApply(this._model,"remove",arguments)},dispose:function(t,e){gm("axisPointer",e),IP.superApply(this._model,"dispose",arguments)}}),TP=Bi(),AP=i,DP=m;(mm.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,i,n){var o=e.get("value"),a=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=i,n||this._lastValue!==o||this._lastStatus!==a){this._lastValue=o,this._lastStatus=a;var r=this._group,s=this._handle;if(!a||"hide"===a)return r&&r.hide(),void(s&&s.hide());r&&r.show(),s&&s.show();var l={};this.makeElOption(l,o,t,e,i);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(i),this._lastGraphicKey=u;var h=this._moveAnimation=this.determineAnimation(t,e);if(r){var c=v(vm,e,h);this.updatePointerEl(r,l,c,e),this.updateLabelEl(r,l,c,e)}else r=this._group=new tb,this.createPointerEl(r,l,t,e),this.createLabelEl(r,l,t,e),i.getZr().add(r);wm(r,e,!0),this._renderHandle(o)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var i=e.get("animation"),n=t.axis,o="category"===n.type,a=e.get("snap");if(!a&&!o)return!1;if("auto"===i||null==i){var r=this.animationThreshold;if(o&&n.getBandWidth()>r)return!0;if(a){var s=Mh(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1}return!0===i},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=TP(t).pointerEl=new zM[o.type](AP(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=TP(t).labelEl=new yM(AP(e.label));t.add(o),xm(o,n)}},updatePointerEl:function(t,e,i){var n=TP(t).pointerEl;n&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=TP(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),xm(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,i=this._api.getZr(),n=this._handle,o=e.getModel("handle"),a=e.get("status");if(!o.get("show")||!a||"hide"===a)return n&&i.remove(n),void(this._handle=null);var r;this._handle||(r=!0,n=this._handle=Po(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){mw(t.event)},onmousedown:DP(this._onHandleDragMove,this,0,0),drift:DP(this._onHandleDragMove,this),ondragend:DP(this._onHandleDragEnd,this)}),i.add(n)),wm(n,e,!1);var s=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];n.setStyle(o.getItemStyle(null,s));var l=o.get("size");y(l)||(l=[l,l]),n.attr("scale",[l[0]/2,l[1]/2]),Nr(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,r)}},_moveHandleToValue:function(t,e){vm(this._axisPointerModel,!e&&this._moveAnimation,this._handle,_m(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(_m(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(_m(n)),TP(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=mm,ji(mm);var CP=mm.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get("type"),l=km(r,a).getOtherAxis(a).getGlobalExtent(),u=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var h=bm(n),c=LP[s](a,u,l,h);c.style=h,t.graphicKey=c.type,t.pointer=c}Am(e,t,Lh(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=Lh(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:Tm(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=km(a,o).getOtherAxis(o).getGlobalExtent(),l="x"===o.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(r[1],u[l]),u[l]=Math.max(r[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];var d=[{verticalAlign:"middle"},{align:"center"}];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:d[l]}}}),LP={line:function(t,e,i,n){var o=Dm([e,i[0]],[e,i[1]],Pm(t));return Kn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=Math.max(1,t.getBandWidth()),a=i[1]-i[0];return{type:"Rect",shape:Cm([e-o/2,i[0]],[o,a],Pm(t))}}};XD.registerAxisPointerClass("CartesianAxisPointer",CP),Ns(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!y(e)&&(t.axisPointer.link=[e])}}),Os(VT.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=vh(t,e)}),Es({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,o=[t.x,t.y],a=t,r=t.dispatchAction||m(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){lm(o)&&(o=xP({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=lm(o),u=a.axesInfo,h=s.axesInfo,c="leave"===n||lm(o),d={},f={},p={list:[],map:{}},g={showPointer:wP(em,f),showTooltip:wP(im,p)};_P(s.coordSysMap,function(t,e){var i=l||t.containPoint(o);_P(s.coordSysAxesInfo[e],function(t,e){var n=t.axis,a=rm(u,t);if(!c&&i&&(!u||a)){var r=a&&a.value;null!=r||l||(r=n.pointToData(o)),null!=r&&Qg(t,r,g,!1,d)}})});var v={};return _P(h,function(t,e){var i=t.linkGroup;i&&!f[e]&&_P(i.axesInfo,function(e,n){var o=f[n];if(e!==t&&o){var a=o.value;i.mapper&&(a=t.axis.scale.parse(i.mapper(a,sm(e),sm(t)))),v[t.key]=a}})}),_P(v,function(t,e){Qg(h[e],t,g,!0,d)}),nm(f,h,d),om(p,o,t,r),am(h,0,i),d}});var kP=["x","y"],PP=["width","height"],NP=mm.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=Om(r,1-Nm(a)),l=r.dataToPoint(e)[0],u=n.get("type");if(u&&"none"!==u){var h=bm(n),c=OP[u](a,l,s,h);c.style=h,t.graphicKey=c.type,t.pointer=c}Am(e,t,Jg(i),i,n,o)},getHandleTransform:function(t,e,i){var n=Jg(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:Tm(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=Nm(o),s=Om(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var u=Om(a,1-r),h=(u[1]+u[0])/2,c=[h,h];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),OP={line:function(t,e,i,n){var o=Dm([e,i[0]],[e,i[1]],Nm(t));return Kn({shape:o,style:n}),{type:"Line",shape:o}},shadow:function(t,e,i,n){var o=t.getBandWidth(),a=i[1]-i[0];return{type:"Rect",shape:Cm([e-o/2,i[0]],[o,a],Nm(t))}}};XD.registerAxisPointerClass("SingleAxisPointer",NP),Ws({type:"single"});var EP=YI.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){EP.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()}},fixData:function(t){var e=t.length,i=[];Zi(t,function(t){return t[2]}).buckets.each(function(t,e){i.push({name:e,dataList:t})});for(var n=i.length,o=-1,a=-1,r=0;ro&&(o=s,a=r)}for(var l=0;lMath.PI/2?"right":"left"):x&&"center"!==x?"left"===x?(f=u.r0+y,p>Math.PI/2&&(x="right")):"right"===x&&(f=u.r-y,p>Math.PI/2&&(x="left")):(f=(u.r+u.r0)/2,x="center"),d.attr("style",{text:l,textAlign:x,textVerticalAlign:n("verticalAlign")||"middle",opacity:n("opacity")});var _=f*g+u.cx,w=f*m+u.cy;d.attr("position",[_,w]);var b=n("rotate"),S=0;"radial"===b?(S=-p)<-Math.PI/2&&(S+=Math.PI):"tangential"===b?(S=Math.PI/2-p)>Math.PI/2?S-=Math.PI:S<-Math.PI/2&&(S+=Math.PI):"number"==typeof b&&(S=b*Math.PI/180),d.attr("rotation",S)},VP._initEvents=function(t,e,i,n){t.off("mouseover").off("mouseout").off("emphasis").off("normal");var o=this,a=function(){o.onEmphasis(n)},r=function(){o.onNormal()};i.isAnimationEnabled()&&t.on("mouseover",a).on("mouseout",r).on("emphasis",a).on("normal",r).on("downplay",function(){o.onDownplay()}).on("highlight",function(){o.onHighlight()})},u(Vm,tb);Ar.extend({type:"sunburst",init:function(){},render:function(t,e,i,n){function o(i,n){if(c||!i||i.getValue()||(i=null),i!==l&&n!==l)if(n&&n.piece)i?(n.piece.updateData(!1,i,"normal",t,e),s.setItemGraphicEl(i.dataIndex,n.piece)):a(n);else if(i){var o=new Vm(i,t,e);h.add(o),s.setItemGraphicEl(i.dataIndex,o)}}function a(t){t&&t.piece&&(h.remove(t.piece),t.piece=null)}var r=this;this.seriesModel=t,this.api=i,this.ecModel=e;var s=t.getData(),l=s.tree.root,u=t.getViewRoot(),h=this.group,c=t.get("renderLabelForZeroData"),d=[];u.eachNode(function(t){d.push(t)});var f=this._oldChildren||[];if(function(t,e){function i(t){return t.getId()}function n(i,n){o(null==i?null:t[i],null==n?null:e[n])}0===t.length&&0===e.length||new Xs(e,t,i,i).add(n).update(n).remove(v(n,null)).execute()}(d,f),function(i,n){if(n.depth>0){r.virtualPiece?r.virtualPiece.updateData(!1,i,"normal",t,e):(r.virtualPiece=new Vm(i,t,e),h.add(r.virtualPiece)),n.piece._onclickEvent&&n.piece.off("click",n.piece._onclickEvent);var o=function(t){r._rootToNode(n.parentNode)};n.piece._onclickEvent=o,r.virtualPiece.on("click",o)}else r.virtualPiece&&(h.remove(r.virtualPiece),r.virtualPiece=null)}(l,u),n&&n.highlight&&n.highlight.piece){var p=t.getShallow("highlightPolicy");n.highlight.piece.onEmphasis(p)}else if(n&&n.unhighlight){var g=this.virtualPiece;!g&&l.children.length&&(g=l.children[0].piece),g&&g.onNormal()}this._initEvents(),this._oldChildren=d},dispose:function(){},_initEvents:function(){var t=this,e=function(e){var i=!1;t.seriesModel.getViewRoot().eachNode(function(n){if(!i&&n.piece&&n.piece.childAt(0)===e.target){var o=n.getModel().get("nodeClick");if("rootToNode"===o)t._rootToNode(n);else if("link"===o){var a=n.getModel(),r=a.get("link");if(r){var s=a.get("target",!0)||"_blank";window.open(r,s)}}i=!0}})};this.group._onclickEvent&&this.group.off("click",this.group._onclickEvent),this.group.on("click",e),this.group._onclickEvent=e},_rootToNode:function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:"sunburstRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},containPoint:function(t,e){var i=e.getData().getItemLayout(0);if(i){var n=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(n*n+o*o);return a<=i.r&&a>=i.r0}}});var GP="sunburstRootToNode";Es({type:GP,update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){var n=ld(t,[GP],e);if(n){var o=e.getViewRoot();o&&(t.direction=hd(o,n.node)?"rollUp":"drillDown"),e.resetViewRoot(n.node)}})});var FP="sunburstHighlight";Es({type:FP,update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){var n=ld(t,[FP],e);n&&(t.highlight=n.node)})});Es({type:"sunburstUnhighlight",update:"updateView"},function(t,e){e.eachComponent({mainType:"series",subType:"sunburst",query:t},function(e,i){t.unhighlight=!0})});var WP=Math.PI/180;Bs(v(uC,"sunburst")),zs(v(function(t,e,i,n){e.eachSeriesByType(t,function(t){var e=t.get("center"),n=t.get("radius");y(n)||(n=[0,n]),y(e)||(e=[e,e]);var o=i.getWidth(),a=i.getHeight(),r=Math.min(o,a),s=Vo(e[0],o),l=Vo(e[1],a),u=Vo(n[0],r/2),h=Vo(n[1],r/2),c=-t.get("startAngle")*WP,f=t.get("minAngle")*WP,p=t.getData().tree.root,g=t.getViewRoot(),m=g.depth,v=t.get("sort");null!=v&&Zm(g,v);var x=0;d(g.children,function(t){!isNaN(t.getValue())&&x++});var _=g.getValue(),w=Math.PI/(_||x)*2,b=g.depth>0,S=g.height-(b?-1:1),M=(h-u)/(S||1),I=t.get("clockwise"),T=t.get("stillShowZeroSum"),A=I?1:-1,D=function(t,e){if(t){var i=e;if(t!==p){var n=t.getValue(),o=0===_&&T?w:n*w;on[1]&&n.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:n[1],r0:n[0]},api:{coord:m(function(n){var o=e.dataToRadius(n[0]),a=i.dataToAngle(n[1]),r=t.coordToPoint([o,a]);return r.push(o,a*Math.PI/180),r}),size:m(qm,t)}}},calendar:function(t){var e=t.getRect(),i=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:i.start,end:i.end,weeks:i.weeks,dayCount:i.allDay}},api:{coord:function(e,i){return t.dataToPoint(e,i)}}}}};YI.extend({type:"series.custom",dependencies:["grid","polar","geo","singleAxis","calendar"],defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,useTransform:!0},getInitialData:function(t,e){return ml(this.getSource(),this)},getDataParams:function(t,e,i){var n=YI.prototype.getDataParams.apply(this,arguments);return i&&(n.info=i.info),n}}),Ar.extend({type:"custom",_data:null,render:function(t,e,i,n){var o=this._data,a=t.getData(),r=this.group,s=Qm(t,a,e,i);a.diff(o).add(function(e){ev(null,e,s(e,n),t,r,a)}).update(function(e,i){ev(o.getItemGraphicEl(i),e,s(e,n),t,r,a)}).remove(function(t){var e=o.getItemGraphicEl(t);e&&r.remove(e)}).execute(),this._data=a},incrementalPrepareRender:function(t,e,i){this.group.removeAll(),this._data=null},incrementalRender:function(t,e,i,n,o){for(var a=e.getData(),r=Qm(e,a,i,n),s=t.start;s=0;l--)null==o[l]?o.splice(l,1):delete o[l].$action},_flatten:function(t,e,i){d(t,function(t){if(t){i&&(t.parentOption=i),e.push(t);var n=t.children;"group"===t.type&&n&&this._flatten(n,e,t),delete t.children}},this)},useElOptionsToUpdate:function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t}});Ws({type:"graphic",init:function(t,e){this._elMap=R(),this._lastGraphicModel},render:function(t,e,i){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t),this._relocate(t,i)},_updateElements:function(t){var e=t.useElOptionsToUpdate();if(e){var i=this._elMap,n=this.group;d(e,function(e){var o=e.$action,a=e.id,r=i.get(a),s=e.parentId,l=null!=s?i.get(s):n,u=e.style;"text"===e.type&&u&&(e.hv&&e.hv[1]&&(u.textVerticalAlign=u.textBaseline=null),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke));var h=fv(e);o&&"merge"!==o?"replace"===o?(dv(r,i),cv(a,l,h,i)):"remove"===o&&dv(r,i):r?r.attr(h):cv(a,l,h,i);var c=i.get(a);c&&(c.__ecGraphicWidth=e.width,c.__ecGraphicHeight=e.height,yv(c,t))})}},_relocate:function(t,e){for(var i=t.option.elements,n=this.group,o=this._elMap,a=i.length-1;a>=0;a--){var r=i[a],s=o.get(r.id);if(s){var l=s.parent;da(s,r,l===n?{width:e.getWidth(),height:e.getHeight()}:{width:l.__ecGraphicWidth||0,height:l.__ecGraphicHeight||0},null,{hv:r.hv,boundingMode:r.bounding})}}},_clear:function(){var t=this._elMap;t.each(function(e){dv(e,t)}),this._elMap=R()},dispose:function(){this._clear()}});var KP=Fs({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){KP.superCall(this,"mergeOption",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,i=0;i=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});Es("legendToggleSelect","legendselectchanged",v(xv,"toggleSelected")),Es("legendSelect","legendselected",v(xv,"select")),Es("legendUnSelect","legendunselected",v(xv,"unSelect"));var $P=v,JP=d,QP=tb,tN=Ws({type:"legend.plain",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new QP),this._backgroundEl,this._isFirstRender=!0},getContentGroup:function(){return this._contentGroup},render:function(t,e,i){var n=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var o=t.get("align");o&&"auto"!==o||(o="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left"),this.renderInner(o,t,e,i);var a=t.getBoxLayoutParams(),s={width:i.getWidth(),height:i.getHeight()},l=t.get("padding"),u=ca(a,s,l),h=this.layoutInner(t,o,u,n),c=ca(r({width:h.width,height:h.height},a),s,l);this.group.attr("position",[c.x-h.x,c.y-h.y]),this.group.add(this._backgroundEl=wv(h,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl)},renderInner:function(t,e,i,n){var o=this.getContentGroup(),a=R(),r=e.get("selectedMode"),s=[];i.eachRawSeries(function(t){!t.get("legendHoverLink")&&s.push(t.id)}),JP(e.getData(),function(l,u){var h=l.get("name");if(this.newlineDisabled||""!==h&&"\n"!==h){var c=i.getSeriesByName(h)[0];if(!a.get(h))if(c){var d=c.getData(),f=d.getVisual("color");"function"==typeof f&&(f=f(c.getDataParams(0)));var p=d.getVisual("legendSymbol")||"roundRect",g=d.getVisual("symbol");this._createItem(h,u,l,e,p,g,t,f,r).on("click",$P(bv,h,n)).on("mouseover",$P(Sv,c.name,null,n,s)).on("mouseout",$P(Mv,c.name,null,n,s)),a.set(h,!0)}else i.eachRawSeries(function(i){if(!a.get(h)&&i.legendDataProvider){var o=i.legendDataProvider(),c=o.indexOfName(h);if(c<0)return;var d=o.getItemVisual(c,"color");this._createItem(h,u,l,e,"roundRect",null,t,d,r).on("click",$P(bv,h,n)).on("mouseover",$P(Sv,null,h,n,s)).on("mouseout",$P(Mv,null,h,n,s)),a.set(h,!0)}},this)}else o.add(new QP({newline:!0}))},this)},_createItem:function(t,e,i,n,o,r,s,l,u){var h=n.get("itemWidth"),c=n.get("itemHeight"),d=n.get("inactiveColor"),f=n.get("symbolKeepAspect"),p=n.isSelected(t),g=new QP,m=i.getModel("textStyle"),v=i.get("icon"),y=i.getModel("tooltip"),x=y.parentModel;if(o=v||o,g.add(Jl(o,0,0,h,c,p?l:d,null==f||f)),!v&&r&&(r!==o||"none"===r)){var _=.8*c;"none"===r&&(r="circle"),g.add(Jl(r,(h-_)/2,(c-_)/2,_,_,p?l:d,null==f||f))}var w="left"===s?h+5:-5,b=s,S=n.get("formatter"),M=t;"string"==typeof S&&S?M=S.replace("{name}",null!=t?t:""):"function"==typeof S&&(M=S(t)),g.add(new rM({style:mo({},m,{text:M,x:w,y:c/2,textFill:p?m.getTextColor():d,textAlign:b,textVerticalAlign:"middle"})}));var I=new yM({shape:g.getBoundingRect(),invisible:!0,tooltip:y.get("show")?a({content:t,formatter:x.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:n.componentIndex,name:t,$vars:["name"]}},y.option):null});return g.add(I),g.eachChild(function(t){t.silent=!0}),I.silent=!u,this.getContentGroup().add(g),fo(g),g.__legendDataIndex=e,g},layoutInner:function(t,e,i){var n=this.getContentGroup();aI(t.get("orient"),n,t.get("itemGap"),i.width,i.height);var o=n.getBoundingRect();return n.attr("position",[-o.x,-o.y]),this.group.getBoundingRect()},remove:function(){this.getContentGroup().removeAll(),this._isFirstRender=!0}});Os(function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;ii[l],p=[-c.x,-c.y];n||(p[s]=o.position[s]);var g=[0,0],m=[-d.x,-d.y],v=A(t.get("pageButtonGap",!0),t.get("itemGap",!0));f&&("end"===t.get("pageButtonPosition",!0)?m[s]+=i[l]-d[l]:g[s]+=d[l]+v),m[1-s]+=c[u]/2-d[u]/2,o.attr("position",p),a.attr("position",g),r.attr("position",m);var y=this.group.getBoundingRect();if((y={x:0,y:0})[l]=f?i[l]:c[l],y[u]=Math.max(c[u],d[u]),y[h]=Math.min(0,d[h]+m[1-s]),a.__rectSize=i[l],f){var x={x:0,y:0};x[l]=Math.max(i[l]-d[l]-v,0),x[u]=y[u],a.setClipPath(new yM({shape:x})),a.__rectSize=x[l]}else r.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var _=this._getPageInfo(t);return null!=_.pageIndex&&Io(o,{position:_.contentPosition},!!f&&t),this._updatePageInfoView(t,_),y},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(t,e){var i=this._controllerGroup;d(["pagePrev","pageNext"],function(n){var o=null!=e[n+"DataIndex"],a=i.childOfName(n);a&&(a.setStyle("fill",o?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=o?"pointer":"default")});var n=i.childOfName("pageText"),o=t.get("pageFormatter"),a=e.pageIndex,r=null!=a?a+1:0,s=e.pageCount;n&&o&&n.setStyle("text",_(o)?o.replace("{current}",r).replace("{total}",s):o({current:r,total:s}))},_getPageInfo:function(t){function e(t){if(t){var e=t.getBoundingRect(),i=e[l]+t.position[r];return{s:i,e:i+e[s],i:t.__legendDataIndex}}}function i(t,e){return t.e>=e&&t.s<=e+a}var n=t.get("scrollDataIndex",!0),o=this.getContentGroup(),a=this._containerGroup.__rectSize,r=t.getOrient().index,s=nN[r],l=oN[r],u=this._findTargetItemIndex(n),h=o.children(),c=h[u],d=h.length,f=d?1:0,p={contentPosition:o.position.slice(),pageCount:f,pageIndex:f-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!c)return p;var g=e(c);p.contentPosition[r]=-g.s;for(var m=u+1,v=g,y=g,x=null;m<=d;++m)(!(x=e(h[m]))&&y.e>v.s+a||x&&!i(x,v.s))&&(v=y.i>v.i?y:x)&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=v.i),++p.pageCount),y=x;for(var m=u-1,v=g,y=g,x=null;m>=-1;--m)(x=e(h[m]))&&i(y,x.s)||!(v.i=0;){var r=o.indexOf("|}"),s=o.substr(a+"{marker".length,r-a-"{marker".length);s.indexOf("sub")>-1?n["marker"+s]={textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:e[s],textOffset:[3,0]}:n["marker"+s]={textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:e[s]},a=(o=o.substr(r+1)).indexOf("{marker")}this.el=new rM({style:{rich:n,text:t,textLineHeight:20,textBackgroundColor:i.get("backgroundColor"),textBorderRadius:i.get("borderRadius"),textFill:i.get("textStyle.color"),textPadding:i.get("padding")},z:i.get("z")}),this._zr.add(this.el);var l=this;this.el.on("mouseover",function(){l._enterable&&(clearTimeout(l._hideTimeout),l._show=!0),l._inContent=!0}),this.el.on("mouseout",function(){l._enterable&&l._show&&l.hideLater(l._hideDelay),l._inContent=!1})},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el.getBoundingRect();return[t.width,t.height]},moveTo:function(t,e){this.el&&this.el.attr("position",[t,e])},hide:function(){this.el?this.el.hide():true,this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(m(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){return this.getSize()}};var uN=m,hN=d,cN=Vo,dN=new yM({shape:{x:-1,y:-1,width:2,height:2}});Ws({type:"tooltip",init:function(t,e){if(!U_.node){var i=t.getComponent("tooltip").get("renderMode");this._renderMode=Hi(i);var n;"html"===this._renderMode?(n=new Cv(e.getDom(),e),this._newLine="
"):(n=new Lv(e),this._newLine="\n"),this._tooltipContent=n}},render:function(t,e,i){if(!U_.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var n=this._tooltipContent;n.update(),n.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel.get("triggerOn");um("itemTooltip",this._api,uN(function(e,i,n){"none"!==t&&(t.indexOf(e)>=0?this._tryShow(i,n):"leave"===e&&this._hide(n))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,i=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var n=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){n.manuallyShowTip(t,e,i,{x:n._lastX,y:n._lastY})})}},manuallyShowTip:function(t,e,i,n){if(n.from!==this.uid&&!U_.node){var o=Pv(n,i);this._ticket="";var a=n.dataByCoordSys;if(n.tooltip&&null!=n.x&&null!=n.y){var r=dN;r.position=[n.x,n.y],r.update(),r.tooltip=n.tooltip,this._tryShow({offsetX:n.x,offsetY:n.y,target:r},o)}else if(a)this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,event:{},dataByCoordSys:n.dataByCoordSys,tooltipOption:n.tooltipOption},o);else if(null!=n.seriesIndex){if(this._manuallyAxisShowTip(t,e,i,n))return;var s=xP(n,e),l=s.point[0],u=s.point[1];null!=l&&null!=u&&this._tryShow({offsetX:l,offsetY:u,position:n.position,target:s.el,event:{}},o)}else null!=n.x&&null!=n.y&&(i.dispatchAction({type:"updateAxisPointer",x:n.x,y:n.y}),this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,target:i.getZr().findHover(n.x,n.y).target,event:{}},o))}},manuallyHideTip:function(t,e,i,n){var o=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,n.from!==this.uid&&this._hide(Pv(n,i))},_manuallyAxisShowTip:function(t,e,i,n){var o=n.seriesIndex,a=n.dataIndex,r=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=o&&null!=a&&null!=r){var s=e.getSeriesByIndex(o);if(s&&"axis"===(t=kv([s.getData().getItemModel(a),s,(s.coordinateSystem||{}).model,t])).get("trigger"))return i.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:a,position:n.position}),!0}},_tryShow:function(t,e){var i=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var n=t.dataByCoordSys;n&&n.length?this._showAxisTooltip(n,t):i&&null!=i.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,i,e)):i&&i.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,i,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var i=t.get("showDelay");e=m(e,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(e,i):e()},_showAxisTooltip:function(t,e){var i=this._ecModel,o=this._tooltipModel,a=[e.offsetX,e.offsetY],r=[],s=[],l=kv([e.tooltipOption,o]),u=this._renderMode,h=this._newLine,c={};hN(t,function(t){hN(t.dataByAxis,function(t){var e=i.getComponent(t.axisDim+"Axis",t.axisIndex),o=t.value,a=[];if(e&&null!=o){var l=Im(o,e.axis,i,t.seriesDataIndices,t.valueLabelOpt);d(t.seriesDataIndices,function(r){var h=i.getSeriesByIndex(r.seriesIndex),d=r.dataIndexInside,f=h&&h.getDataParams(d);if(f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=Xl(e.axis,o),f.axisValueLabel=l,f){s.push(f);var p,g=h.formatTooltip(d,!0,null,u);if(w(g)){p=g.html;var m=g.markers;n(c,m)}else p=g;a.push(p)}});var f=l;"html"!==u?r.push(a.join(h)):r.push((f?ia(f)+h:"")+a.join(h))}})},this),r.reverse(),r=r.join(this._newLine+this._newLine);var f=e.position;this._showOrMove(l,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(l,f,a[0],a[1],this._tooltipContent,s):this._showTooltipContent(l,r,s,Math.random(),a[0],a[1],f,void 0,c)})},_showSeriesItemTooltip:function(t,e,i){var n=this._ecModel,o=e.seriesIndex,a=n.getSeriesByIndex(o),r=e.dataModel||a,s=e.dataIndex,l=e.dataType,u=r.getData(),h=kv([u.getItemModel(s),r,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=h.get("trigger");if(null==c||"item"===c){var d,f,p=r.getDataParams(s,l),g=r.formatTooltip(s,!1,l,this._renderMode);w(g)?(d=g.html,f=g.markers):(d=g,f=null);var m="item_"+r.name+"_"+s;this._showOrMove(h,function(){this._showTooltipContent(h,d,p,m,t.offsetX,t.offsetY,t.position,t.target,f)}),i({type:"showTip",dataIndexInside:s,dataIndex:u.getRawIndex(s),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(t,e,i){var n=e.tooltip;if("string"==typeof n){var o=n;n={content:o,formatter:o}}var a=new No(n,this._tooltipModel,this._ecModel),r=a.get("content"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,r,a.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)}),i({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,i,n,o,a,r,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent,h=t.get("formatter");r=r||t.get("position");var c=e;if(h&&"string"==typeof h)c=na(h,i,!0);else if("function"==typeof h){var d=uN(function(e,n){e===this._ticket&&(u.setContent(n,l,t),this._updatePosition(t,r,o,a,u,i,s))},this);this._ticket=n,c=h(i,n,d)}u.setContent(c,l,t),u.show(t),this._updatePosition(t,r,o,a,u,i,s)}},_updatePosition:function(t,e,i,n,o,a,r){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=o.getSize(),h=t.get("align"),c=t.get("verticalAlign"),d=r&&r.getBoundingRect().clone();if(r&&d.applyTransform(r.transform),"function"==typeof e&&(e=e([i,n],a,o.el,d,{viewSize:[s,l],contentSize:u.slice()})),y(e))i=cN(e[0],s),n=cN(e[1],l);else if(w(e)){e.width=u[0],e.height=u[1];var f=ca(e,{width:s,height:l});i=f.x,n=f.y,h=null,c=null}else"string"==typeof e&&r?(i=(p=Ev(e,d,u))[0],n=p[1]):(i=(p=Nv(i,n,o,s,l,h?null:20,c?null:20))[0],n=p[1]);if(h&&(i-=Rv(h)?u[0]/2:"right"===h?u[0]:0),c&&(n-=Rv(c)?u[1]/2:"bottom"===c?u[1]:0),t.get("confine")){var p=Ov(i,n,o,s,l);i=p[0],n=p[1]}o.moveTo(i,n)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,i=!!e&&e.length===t.length;return i&&hN(e,function(e,n){var o=e.dataByAxis||{},a=(t[n]||{}).dataByAxis||[];(i&=o.length===a.length)&&hN(o,function(t,e){var n=a[e]||{},o=t.seriesDataIndices||[],r=n.seriesDataIndices||[];(i&=t.value===n.value&&t.axisType===n.axisType&&t.axisId===n.axisId&&o.length===r.length)&&hN(o,function(t,e){var n=r[e];i&=t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})})}),this._lastDataByCoordSys=t,!!i},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){U_.node||(this._tooltipContent.hide(),gm("itemTooltip",e))}}),Es({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},function(){}),Es({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},function(){}),Gv.prototype={constructor:Gv,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToRadius:aD.prototype.dataToCoord,radiusToData:aD.prototype.coordToData},u(Gv,aD);var fN=Bi();Fv.prototype={constructor:Fv,pointToData:function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},dataToAngle:aD.prototype.dataToCoord,angleToData:aD.prototype.coordToData,calculateCategoryInterval:function(){var t=this,e=t.getLabelModel(),i=t.scale,n=i.getExtent(),o=i.count();if(n[1]-n[0]<1)return 0;var a=n[0],r=t.dataToCoord(a+1)-t.dataToCoord(a),s=Math.abs(r),l=ke(a,e.getFont(),"center","top"),u=Math.max(l.height,7)/s;isNaN(u)&&(u=1/0);var h=Math.max(0,Math.floor(u)),c=fN(t.model),d=c.lastAutoInterval,f=c.lastTickCount;return null!=d&&null!=f&&Math.abs(d-h)<=1&&Math.abs(f-o)<=1&&d>h?h=d:(c.lastTickCount=o,c.lastAutoInterval=h),h}},u(Fv,aD);var pN=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new Gv,this._angleAxis=new Fv,this._radiusAxis.polar=this._angleAxis.polar=this};pN.prototype={type:"polar",axisPointerEnabled:!0,constructor:pN,dimensions:["radius","angle"],model:null,containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxes:function(){return[this._radiusAxis,this._angleAxis]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},getTooltipAxes:function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),a=Math.min(o[0],o[1]),r=Math.max(o[0],o[1]);n.inverse?a=r-360:r=a+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,u=lr;)l+=360*u;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI;return[Math.cos(i)*e+this.cx,-Math.sin(i)*e+this.cy]}};var gN=lI.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});n(gN.prototype,UA);var mN={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};ED("angle",gN,Wv,mN.angle),ED("radius",gN,Wv,mN.radius),Fs({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}});var vN={dimensions:pN.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent("polar",function(t,n){var o=new pN(n);o.update=Zv;var a=o.getRadiusAxis(),r=o.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");Uv(a,s),Uv(r,l),Hv(o,t,e),i.push(o),t.coordinateSystem=o,o.model=t}),t.eachSeries(function(e){if("polar"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};Fa.register("polar",vN);var yN=["axisLine","axisLabel","axisTick","splitLine","splitArea"];XD.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,o=n.polar,a=o.getRadiusAxis().getExtent(),r=n.getTicksCoords(),s=f(n.getViewLabels(),function(t){return(t=i(t)).coord=n.dataToCoord(t.tickValue),t});Yv(s),Yv(r),d(yN,function(e){!t.get(e+".show")||n.scale.isBlank()&&"axisLine"!==e||this["_"+e](t,o,r,a,s)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel("axisLine.lineStyle"),a=new sM({shape:{cx:e.cx,cy:e.cy,r:n[jv(e)]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n){var o=t.getModel("axisTick"),a=(o.get("inside")?-1:1)*o.get("length"),s=n[jv(e)],l=f(i,function(t){return new _M({shape:Xv(e,[s,s+a],t.coord)})});this.group.add(OM(l,{style:r(o.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(t,e,i,n,o){var a=t.getCategories(!0),r=t.getModel("axisLabel"),s=r.get("margin");d(o,function(i,o){var l=r,u=i.tickValue,h=n[jv(e)],c=e.coordToPoint([h+s,i.coord]),d=e.cx,f=e.cy,p=Math.abs(c[0]-d)/h<.3?"center":c[0]>d?"left":"right",g=Math.abs(c[1]-f)/h<.3?"middle":c[1]>f?"top":"bottom";a&&a[u]&&a[u].textStyle&&(l=new No(a[u].textStyle,r,r.ecModel));var m=new rM({silent:!0});this.group.add(m),mo(m.style,l,{x:c[0],y:c[1],textFill:l.getTextColor()||t.get("axisLine.lineStyle.color"),text:i.formattedLabel,textAlign:p,textVerticalAlign:g})},this)},_splitLine:function(t,e,i,n){var o=t.getModel("splitLine").getModel("lineStyle"),a=o.get("color"),s=0;a=a instanceof Array?a:[a];for(var l=[],u=0;u=0?"p":"n",M=y;v&&(n[r][b]||(n[r][b]={p:y,n:y}),M=n[r][b][S]);var I,T,A,D;if("radius"===h.dim){var C=h.dataToRadius(w)-y,L=a.dataToAngle(b);Math.abs(C)=0},kN.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=dy(e,t),o=0;o=0||AN(n,t.getAxis("y").model)>=0)&&a.push(t)}),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:a[0],coordSyses:a,getPanelRect:ON.grid,xAxisDeclared:r[t.id],yAxisDeclared:s[t.id]})}))},geo:function(t,e){TN(t.geoModels,function(t){var i=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:i,coordSyses:[i],getPanelRect:ON.geo})})}},NN=[function(t,e){var i=t.xAxisModel,n=t.yAxisModel,o=t.gridModel;return!o&&i&&(o=i.axis.grid.model),!o&&n&&(o=n.axis.grid.model),o&&o===e.gridModel},function(t,e){var i=t.geoModel;return i&&i===e.geoModel}],ON={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Ao(t)),e}},EN={lineX:DN(fy,0),lineY:DN(fy,1),rect:function(t,e,i){var n=e[CN[t]]([i[0][0],i[1][0]]),o=e[CN[t]]([i[0][1],i[1][1]]),a=[cy([n[0],o[0]]),cy([n[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,i){var n=[[1/0,-1/0],[1/0,-1/0]];return{values:f(i,function(i){var o=e[CN[t]](i);return n[0][0]=Math.min(n[0][0],o[0]),n[1][0]=Math.min(n[1][0],o[1]),n[0][1]=Math.max(n[0][1],o[0]),n[1][1]=Math.max(n[1][1],o[1]),o}),xyMinMax:n}}},RN={lineX:DN(py,0),lineY:DN(py,1),rect:function(t,e,i){return[[t[0][0]-i[0]*e[0][0],t[0][1]-i[0]*e[0][1]],[t[1][0]-i[1]*e[1][0],t[1][1]-i[1]*e[1][1]]]},polygon:function(t,e,i){return f(t,function(t,n){return[t[0]-i[0]*e[n][0],t[1]-i[1]*e[n][1]]})}},zN=["inBrush","outOfBrush"],BN="__ecBrushSelect",VN="__ecInBrushSelectEvent",GN=VT.VISUAL.BRUSH;zs(GN,function(t,e,i){t.eachComponent({mainType:"brush"},function(e){i&&"takeGlobalCursor"===i.type&&e.setBrushOption("brush"===i.key?i.brushOption:{brushType:!1}),(e.brushTargetManager=new hy(e.option,t)).setInputRanges(e.areas,t)})}),Bs(GN,function(t,e,n){var o,a,s=[];t.eachComponent({mainType:"brush"},function(e,n){function l(t){return"all"===m||v[t]}function u(t){return!!t.length}function h(t,e){var i=t.coordinateSystem;w|=i.hasAxisBrushed(),l(e)&&i.eachActiveState(t.getData(),function(t,e){"active"===t&&(x[e]=1)})}function c(i,n,o){var a=_y(i);if(a&&!wy(e,n)&&(d(b,function(n){a[n.brushType]&&e.brushTargetManager.controlSeries(n,i,t)&&o.push(n),w|=u(o)}),l(n)&&u(o))){var r=i.getData();r.each(function(t){xy(a,o,r,t)&&(x[t]=1)})}}var p={brushId:e.id,brushIndex:n,brushName:e.name,areas:i(e.areas),selected:[]};s.push(p);var g=e.option,m=g.brushLink,v=[],x=[],_=[],w=0;n||(o=g.throttleType,a=g.throttleDelay);var b=f(e.areas,function(t){return by(r({boundingRect:FN[t.brushType](t)},t))}),S=ty(e.option,zN,function(t){t.mappingMethod="fixed"});y(m)&&d(m,function(t){v[t]=1}),t.eachSeries(function(t,e){var i=_[e]=[];"parallel"===t.subType?h(t,e):c(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};p.selected.push(i);var n=_y(t),o=_[e],a=t.getData(),r=l(e)?function(t){return x[t]?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"}:function(t){return xy(n,o,a,t)?(i.dataIndex.push(a.getRawIndex(t)),"inBrush"):"outOfBrush"};(l(e)?w:u(o))&&iy(zN,S,a,r)})}),vy(e,o,a,s,n)});var FN={lineX:B,lineY:B,rect:function(t){return Sy(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;ne[0][1]&&(e[0][1]=a[0]),a[1]e[1][1]&&(e[1][1]=a[1])}return e&&Sy(e)}},WN=["#ddd"];Fs({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&ey(i,t,["inBrush","outOfBrush"]);var n=i.inBrush=i.inBrush||{};i.outOfBrush=i.outOfBrush||{color:WN},n.hasOwnProperty("liftZ")||(n.liftZ=5)},setAreas:function(t){t&&(this.areas=f(t,function(t){return My(this.option,t)},this))},setBrushOption:function(t){this.brushOption=My(this.option,t),this.brushType=this.brushOption.brushType}});Ws({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new zf(e.getZr())).on("brush",m(this._onBrush,this)).mount()},render:function(t){return this.model=t,Iy.apply(this,arguments)},updateTransform:Iy,updateView:Iy,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:n,areas:i(t),$from:n})}}),Es({type:"brush",event:"brush"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(e){e.setAreas(t.areas)})}),Es({type:"brushSelect",event:"brushSelected",update:"none"},function(){});var HN={},ZN=rT.toolbox.brush;Dy.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:i(ZN.title)};var UN=Dy.prototype;UN.render=UN.updateView=function(t,e,i){var n,o,a;e.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,d(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===n)?"emphasis":"normal")})},UN.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return d(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},UN.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},Ty("brush",Dy),Ns(function(t,e){var i=t&&t.brush;if(y(i)||(i=i?[i]:[]),i.length){var n=[];d(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;y(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),Jv(s),e&&!s.length&&s.push.apply(s,SN)}});Cy.prototype={constructor:Cy,type:"calendar",dimensions:["time","value"],getDimensionsInfo:function(){return[{name:"time",type:"time"},"value"]},getRangeInfo:function(){return this._rangeInfo},getModel:function(){return this._model},getRect:function(){return this._rect},getCellWidth:function(){return this._sw},getCellHeight:function(){return this._sh},getOrient:function(){return this._orient},getFirstDayOfWeek:function(){return this._firstDayOfWeek},getDateInfo:function(t){var e=(t=Yo(t)).getFullYear(),i=t.getMonth()+1;i=i<10?"0"+i:i;var n=t.getDate();n=n<10?"0"+n:n;var o=t.getDay();return o=Math.abs((o+7-this.getFirstDayOfWeek())%7),{y:e,m:i,d:n,day:o,time:t.getTime(),formatedDate:e+"-"+i+"-"+n,date:t}},getNextNDay:function(t,e){return 0===(e=e||0)?this.getDateInfo(t):((t=new Date(this.getDateInfo(t).time)).setDate(t.getDate()+e),this.getDateInfo(t))},update:function(t,e){function i(t,e){return null!=t[e]&&"auto"!==t[e]}this._firstDayOfWeek=+this._model.getModel("dayLabel").get("firstDay"),this._orient=this._model.get("orient"),this._lineWidth=this._model.getModel("itemStyle").getItemStyle().lineWidth||0,this._rangeInfo=this._getRangeInfo(this._initRangeOption());var n=this._rangeInfo.weeks||1,o=["width","height"],a=this._model.get("cellSize").slice(),r=this._model.getBoxLayoutParams(),s="horizontal"===this._orient?[n,7]:[7,n];d([0,1],function(t){i(a,t)&&(r[o[t]]=a[t]*s[t])});var l={width:e.getWidth(),height:e.getHeight()},u=this._rect=ca(r,l);d([0,1],function(t){i(a,t)||(a[t]=u[o[t]]/s[t])}),this._sw=a[0],this._sh=a[1]},dataToPoint:function(t,e){y(t)&&(t=t[0]),null==e&&(e=!0);var i=this.getDateInfo(t),n=this._rangeInfo,o=i.formatedDate;if(e&&!(i.time>=n.start.time&&i.timea.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();if(n.setDate(o+i-1),n.getDate()!==a)for(var r=n.getTime()-t[1].time>0?1:-1;n.getDate()!==a&&(n.getTime()-t[1].time)*r>0;)i-=r,n.setDate(o+i-1);var s=Math.floor((i+t[0].day+6)/7),l=e?1-s:s-1;return e&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:i,weeks:s,nthWeek:l,fweek:t[0].day,lweek:t[1].day}},_getDateByWeeksAndDay:function(t,e,i){var n=this._getRangeInfo(i);if(t>n.weeks||0===t&&en.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},Cy.dimensions=Cy.prototype.dimensions,Cy.getDimensionsInfo=Cy.prototype.getDimensionsInfo,Cy.create=function(t,e){var i=[];return t.eachComponent("calendar",function(n){var o=new Cy(n,t,e);i.push(o),n.coordinateSystem=o}),t.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("calendarIndex")||0])}),i},Fa.register("calendar",Cy);var XN=lI.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var o=ga(t);XN.superApply(this,"init",arguments),ky(t,o)},mergeOption:function(t,e){XN.superApply(this,"mergeOption",arguments),ky(this.option,t)}}),jN={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},YN={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};Ws({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel("itemStyle").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,u=new yM({shape:{x:l[0],y:l[1],width:a,height:r},cursor:"default",style:o});i.add(u)}},_renderLines:function(t,e,i,n){function o(e){a._firstDayOfMonth.push(r.getDateInfo(e)),a._firstDayPoints.push(r.dataToRect([e],!1).tl);var o=a._getLinePointsOfOneWeek(t,e,i);a._tlpoints.push(o[0]),a._blpoints.push(o[o.length-1]),l&&a._drawSplitline(o,s,n)}var a=this,r=t.coordinateSystem,s=t.getModel("splitLine.lineStyle").getLineStyle(),l=t.get("splitLine.show"),u=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var h=e.start,c=0;h.time<=e.end.time;c++){o(h.formatedDate),0===c&&(h=r.getDateInfo(e.start.y+"-"+e.start.m));var d=h.date;d.setMonth(d.getMonth()+1),h=r.getDateInfo(d)}o(r.getNextNDay(e.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,u,i),s,n),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,u,i),s,n)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o="horizontal"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new gM({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return o},_formatterLabel:function(t,e){return"string"==typeof t&&t?oa(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=["center","bottom"];"bottom"===n?(e[1]+=o,a=["center","top"]):"left"===n?e[0]-=o:"right"===n?(e[0]+=o,a=["center","top"]):e[1]-=o;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel("yearLabel");if(o.get("show")){var a=o.get("margin"),r=o.get("position");r||(r="horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===i?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=o.get("formatter"),p={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(f,p),m=new rM({z2:30});mo(m.style,o,{text:g}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=o,e&&(a="center"),"start"===n&&(r="bottom")):(s+=o,e&&(r="middle"),"start"===n&&(a="right")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var o=n.get("nameMap"),r=n.get("margin"),s=n.get("position"),l=n.get("align"),u=[this._tlpoints,this._blpoints];_(o)&&(o=jN[o.toUpperCase()]||[]);var h="start"===s?0:1,c="horizontal"===e?0:1;r="start"===s?-r:r;for(var d="center"===l,f=0;f=r[0]&&t<=r[1]}if(t===this._dataZoomModel){var n=this._dimName,o=this.getTargetSeriesModels(),a=t.get("filterMode"),r=this._valueWindow;"none"!==a&&$N(o,function(t){var e=t.getData(),o=e.mapDimension(n,!0);o.length&&("weakFilter"===a?e.filterSelf(function(t){for(var i,n,a,s=0;sr[1];if(u&&!h&&!c)return!0;u&&(a=!0),h&&(i=!0),c&&(n=!0)}return a&&i&&n}):$N(o,function(n){if("empty"===a)t.setData(e.map(n,function(t){return i(t)?t:NaN}));else{var o={};o[n]=r,e.selectRange(o)}}),$N(o,function(t){e.setApproximateExtent(r,t)}))})}}};var tO=d,eO=KN,iO=Fs({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=By(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=By(t);n(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;U_.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),Vy(this,t),tO([["start","startValue"],["end","endValue"]],function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var a=this.dependentModels[e.axis][i],r=a.__dzAxisProxy||(a.__dzAxisProxy=new QN(e.name,i,this,o));t[e.name+"_"+i]=r},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();eO(function(e){var i=e.axisIndex;t[i]=Di(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;eO(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option,n=this.dependentModels;if(t){var o="vertical"===e?"y":"x";n[o+"Axis"].length?(i[o+"AxisIndex"]=[0],t=!1):tO(n.singleAxis,function(n){t&&n.get("orient",!0)===e&&(i.singleAxisIndex=[n.componentIndex],t=!1)})}t&&eO(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var a=0,r=o.length;a0?100:20}},getFirstTargetAxisModel:function(){var t;return eO(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;eO(function(n){tO(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},getAxisModel:function(t,e){var i=this.getAxisProxy(t,e);return i&&i.getAxisModel()},setRawRange:function(t,e){var i=this.option;tO([["start","startValue"],["end","endValue"]],function(e){null==t[e[0]]&&null==t[e[1]]||(i[e[0]]=t[e[0]],i[e[1]]=t[e[1]])},this),!e&&Vy(this,t)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var i in e)if(e.hasOwnProperty(i)&&e[i].hostedBy(this))return e[i];for(var i in e)if(e.hasOwnProperty(i)&&!e[i].hostedBy(this))return e[i]},getRangePropMode:function(){return this._rangePropMode.slice()}}),nO=qI.extend({type:"dataZoom",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetCoordInfo:function(){function t(t,e,i,n){for(var o,a=0;a0&&e%g)p+=f;else{var i=null==t||isNaN(t)||""===t,n=i?0:aO(t,a,u,!0);i&&!l&&e?(c.push([c[c.length-1][0],0]),d.push([d[d.length-1][0],0])):!i&&l&&(c.push([p,0]),d.push([p,0])),c.push([p,n]),d.push([p,n]),p+=f,l=i}});var m=this.dataZoomModel;this._displayables.barGroup.add(new pM({shape:{points:c},style:r({fill:m.get("dataBackgroundColor")},m.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new gM({shape:{points:d},style:m.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var i,n=this.ecModel;return t.eachTargetAxis(function(o,a){d(t.getAxisProxy(o.name,a).getTargetSeriesModels(),function(t){if(!(i||!0!==e&&l(cO,t.get("type"))<0)){var r,s=n.getComponent(o.axis,a).axis,u=Gy(o.name),h=t.coordinateSystem;null!=u&&h.getOtherAxis&&(r=h.getOtherAxis(s).inverse),u=t.getData().mapDimension(u),i={thisAxis:s,series:t,thisDim:o.name,otherDim:u,otherAxisInverse:r}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new oO({draggable:!0,cursor:Fy(this._orient),drift:sO(this._onDragMove,this,"all"),onmousemove:function(t){mw(t.event)},ondragstart:sO(this._showDataInfo,this,!0),ondragend:sO(this._onDragEnd,this),onmouseover:sO(this._showDataInfo,this,!0),onmouseout:sO(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new oO($n({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}}))),lO([0,1],function(t){var o=Po(a.get("handleIcon"),{cursor:Fy(this._orient),draggable:!0,drift:sO(this._onDragMove,this,t),onmousemove:function(t){mw(t.event)},ondragend:sO(this._onDragEnd,this),onmouseover:sO(this._showDataInfo,this,!0),onmouseout:sO(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),r=o.getBoundingRect();this._handleHeight=Vo(a.get("handleSize"),this._size[1]),this._handleWidth=r.width/r.height*this._handleHeight,o.setStyle(a.getModel("handleStyle").getItemStyle());var s=a.get("handleColor");null!=s&&(o.style.fill=s),n.add(e[t]=o);var l=a.textStyleModel;this.group.add(i[t]=new rM({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:l.getTextColor(),textFont:l.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[aO(t[0],[0,100],e,!0),aO(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this.dataZoomModel,n=this._handleEnds,o=this._getViewExtent(),a=i.findRepresentativeAxisProxy().getMinMaxSpan(),r=[0,100];QL(e,n,o,i.get("zoomLock")?"all":t,null!=a.minSpan?aO(a.minSpan,r,o,!0):null,null!=a.maxSpan?aO(a.maxSpan,r,o,!0):null);var s=this._range,l=this._range=rO([aO(n[0],o,r,!0),aO(n[1],o,r,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},_updateView:function(t){var e=this._displayables,i=this._handleEnds,n=rO(i.slice()),o=this._size;lO([0,1],function(t){var n=e.handles[t],a=this._handleHeight;n.attr({scale:[a/2,a/2],position:[i[t],o[1]/2-a/2]})},this),e.filler.setShape({x:n[0],y:0,width:n[1]-n[0],height:o[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){function e(t){var e=Ao(n.handles[t].parent,this.group),i=Co(0===t?"right":"left",e),s=this._handleWidth/2+hO,l=Do([c[t]+(0===t?-s:s),this._size[1]/2],e);o[t].setStyle({x:l[0],y:l[1],textVerticalAlign:a===uO?"middle":i,textAlign:a===uO?i:"center",text:r[t]})}var i=this.dataZoomModel,n=this._displayables,o=n.handleLabels,a=this._orient,r=["",""];if(i.get("showDetail")){var s=i.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,u=this._range,h=t?s.calculateDataWindow({start:u[0],end:u[1]}).valueWindow:s.getDataValueWindow();r=[this._formatLabel(h[0],l),this._formatLabel(h[1],l)]}}var c=rO(this._handleEnds.slice());e.call(this,0),e.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),o=i.get("labelPrecision");null!=o&&"auto"!==o||(o=e.getPixelPrecision());var a=null==t||isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(o,20));return x(n)?n(t,a):_(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=Do([e,i],this._displayables.barGroup.getLocalTransform(),!0),o=this._updateInterval(t,n[0]),a=this.dataZoomModel.get("realtime");this._updateView(!a),o&&a&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),!this.dataZoomModel.get("realtime")&&this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,i=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(i[0]<0||i[0]>e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2,a=this._updateInterval("all",i[0]-o);this._updateView(),a&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var t;if(lO(this.getTargetCoordInfo(),function(e){if(!t&&e.length){var i=e[0].model.coordinateSystem;t=i.getRect&&i.getRect()}}),!t){var e=this.api.getWidth(),i=this.api.getHeight();t={x:.2*e,y:.2*i,width:.6*e,height:.6*i}}return t}});iO.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var fO="\0_ec_dataZoom_roams",pO=m,gO=nO.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,i,n){gO.superApply(this,"render",arguments),this._range=t.getPercentRange(),d(this.getTargetCoordInfo(),function(e,n){var o=f(e,function(t){return Zy(t.model)});d(e,function(e){var a=e.model,r={};d(["pan","zoom","scrollMove"],function(t){r[t]=pO(mO[t],this,e,n)},this),Wy(i,{coordId:Zy(a),allCoordIds:o,containsPoint:function(t,e,i){return a.coordinateSystem.containPoint([e,i])},dataZoomId:t.id,dataZoomModel:t,getRange:r})},this)},this)},dispose:function(){Hy(this.api,this.dataZoomModel.id),gO.superApply(this,"dispose",arguments),this._range=null}}),mO={zoom:function(t,e,i,n){var o=this._range,a=o.slice(),r=t.axisModels[0];if(r){var s=vO[e](null,[n.originX,n.originY],r,i,t),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(a[1]-a[0])+a[0],u=Math.max(1/n.scale,0);a[0]=(a[0]-l)*u+l,a[1]=(a[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return QL(0,a,[0,100],0,h.minSpan,h.maxSpan),this._range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}},pan:Ky(function(t,e,i,n,o,a){var r=vO[n]([a.oldX,a.oldY],[a.newX,a.newY],e,o,i);return r.signal*(t[1]-t[0])*r.pixel/r.pixelLength}),scrollMove:Ky(function(t,e,i,n,o,a){return vO[n]([0,0],[a.scrollDelta,a.scrollDelta],e,o,i).signal*(t[1]-t[0])*a.scrollDelta})},vO={grid:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],"x"===a.dim?(r.pixel=e[0]-t[0],r.pixelLength=s.width,r.pixelStart=s.x,r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=s.height,r.pixelStart=s.y,r.signal=a.inverse?-1:1),r},polar:function(t,e,i,n,o){var a=i.axis,r={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(r.pixel=e[0]-t[0],r.pixelLength=l[1]-l[0],r.pixelStart=l[0],r.signal=a.inverse?1:-1):(r.pixel=e[1]-t[1],r.pixelLength=u[1]-u[0],r.pixelStart=u[0],r.signal=a.inverse?-1:1),r},singleAxis:function(t,e,i,n,o){var a=i.axis,r=o.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===a.orient?(s.pixel=e[0]-t[0],s.pixelLength=r.width,s.pixelStart=r.x,s.signal=a.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=r.height,s.pixelStart=r.y,s.signal=a.inverse?-1:1),s}};Os({getTargetSeries:function(t){var e=R();return t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){d(n.getAxisProxy(t.name,i).getTargetSeriesModels(),function(t){e.set(t.uid,t)})})}),e},modifyOutputEnd:!0,overallReset:function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).reset(n,e)}),t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).filterData(n,e)})}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]},!0)})}}),Es("dataZoom",function(t,e){var i=Ny(m(e.eachComponent,e,"dataZoom"),KN,function(t,e){return t.get(e.axisIndex)}),n=[];e.eachComponent({mainType:"dataZoom",query:t},function(t,e){n.push.apply(n,i(t).nodes)}),d(n,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})});var yO=d,xO=function(t){var e=t&&t.visualMap;y(e)||(e=e?[e]:[]),yO(e,function(t){if(t){$y(t,"splitList")&&!$y(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&y(e)&&yO(e,function(t){w(t)&&($y(t,"start")&&!$y(t,"min")&&(t.min=t.start),$y(t,"end")&&!$y(t,"max")&&(t.max=t.end))})}})};lI.registerSubTypeDefaulter("visualMap",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"});var _O=VT.VISUAL.COMPONENT;Bs(_O,{createOnAllSeries:!0,reset:function(t,e){var i=[];return e.eachComponent("visualMap",function(e){var n=t.pipelineContext;!e.isTargetSeries(t)||n&&n.large||i.push(ny(e.stateList,e.targetVisuals,m(e.getValueState,e),e.getDataDimension(t.getData())))}),i}}),Bs(_O,{createOnAllSeries:!0,reset:function(t,e){var i=t.getData(),n=[];e.eachComponent("visualMap",function(e){if(e.isTargetSeries(t)){var o=e.getVisualMeta(m(Jy,null,t,e))||{stops:[],outerColors:[]},a=e.getDataDimension(i),r=i.getDimensionInfo(a);null!=r&&(o.dimension=r.index,n.push(o))}}),t.getData().setVisual("visualMeta",n)}});var wO={get:function(t,e,n){var o=i((bO[t]||{})[e]);return n&&y(o)?o[o.length-1]:o}},bO={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},SO=hL.mapVisual,MO=hL.eachVisual,IO=y,TO=d,AO=Fo,DO=Bo,CO=B,LO=Fs({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-1/0,1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:"all",min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;U_.canvasSupported||(i.realtime=!1),!e&&ey(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=m(t,this),this.controllerVisuals=ty(this.option.controller,e,t),this.targetVisuals=ty(this.option.target,e,t)},getTargetSeriesIndices:function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries(function(t,i){e.push(i)}):e=Di(t),e},eachTargetSeries:function(t,e){d(this.getTargetSeriesIndices(),function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===l[0]?"min":t===l[1]?"max":(+t).toFixed(Math.min(s,20))}var o,a,r=this.option,s=r.precision,l=this.dataBound,u=r.formatter;return i=i||["<",">"],y(t)&&(t=t.slice(),o=!0),a=e?t:o?[n(t[0]),n(t[1])]:n(t),_(u)?u.replace("{value}",o?a[0]:a).replace("{value2}",o?a[1]:a):x(u)?o?u(t[0],t[1]):u(t):o?t[0]===l[0]?i[0]+" "+a[1]:t[1]===l[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a},resetExtent:function(){var t=this.option,e=AO([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,i=t.dimensions;if(null!=e||i.length){if(null!=e)return t.getDimension(e);for(var n=t.dimensions,o=n.length-1;o>=0;o--){var a=n[o];if(!t.getDimensionInfo(a).isCalculationCoord)return a}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){IO(o.color)&&!t.inRange&&(t.inRange={color:o.color.slice().reverse()}),t.inRange=t.inRange||{color:e.get("gradientColor")},TO(this.stateList,function(e){var i=t[e];if(_(i)){var n=wO.get(i,"active",l);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}var e=this.ecModel,o=this.option,a={inRange:o.inRange,outOfRange:o.outOfRange},r=o.target||(o.target={}),s=o.controller||(o.controller={});n(r,a),n(s,a);var l=this.isCategory();t.call(this,r),t.call(this,s),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},TO(n,function(t,e){if(hL.isValidType(e)){var i=wO.get(e,"inactive",l);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}.call(this,r,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,o=this.get("inactiveColor");TO(this.stateList,function(a){var r=this.itemSize,s=t[a];s||(s=t[a]={color:l?o:[o]}),null==s.symbol&&(s.symbol=e&&i(e)||(l?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=n&&i(n)||(l?r[0]:[r[0],r[0]])),s.symbol=SO(s.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var u=s.symbolSize;if(null!=u){var h=-1/0;MO(u,function(t){t>h&&(h=t)}),s.symbolSize=SO(u,function(t){return DO(t,[0,h],[0,r[0]],!0)})}},this)}.call(this,s)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:CO,getValueState:CO,getVisualMeta:CO}),kO=[20,140],PO=LO.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:null},optionUpdated:function(t,e){PO.superApply(this,"optionUpdated",arguments),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){PO.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=kO[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=kO[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):y(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){LO.prototype.completeVisualOption.apply(this,arguments),d(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Fo((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},this),e.push({seriesId:i.id,dataIndex:n})},this),e},getVisualMeta:function(t){function e(e,i){o.push({value:e,color:t(e,i)})}for(var i=Qy(0,0,this.getExtent()),n=Qy(0,0,this.option.range.slice()),o=[],a=0,r=0,s=n.length,l=i.length;rt[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new tb("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,a=i.handleLabels;EO([0,1],function(r){var s=o[r];s.setStyle("fill",e.handlesColor[r]),s.position[1]=t[r];var l=Do(i.handleLabelPoints[r],Ao(s,this.group));a[r].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[r]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===r?"bottom":"top":"left",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=OO(t,a,s,!0),u=this._shapes,h=u.indicator;if(h){h.position[1]=l,h.attr("invisible",!1),h.setShape("points",ox(!!i,n,l,r[1]));var c={convertOpacityToAlpha:!0},d=this.getControllerVisual(t,"color",c);h.setStyle("fill",d);var f=Do(u.indicatorLabelPoint,Ao(h,this.group)),p=u.indicatorLabel;p.attr("invisible",!1);var g=this._applyTransform("left",u.barGroup),m=this._orient;p.setStyle({text:(i||"")+o.formatValueText(e),textVerticalAlign:"horizontal"===m?g:"middle",textAlign:"horizontal"===m?"center":g,x:f[0],y:f[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=RO(zO(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on("mouseout",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=RO(zO(o[0],t),o[1]);var r=ax(i,a,o),s=[t-r,t+r],l=OO(t,o,a,!0),u=[OO(s[0],o,a,!0),OO(s[1],o,a,!0)];s[0]o[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",r):u[1]===1/0?this._showIndicator(l,u[0],"> ",r):this._showIndicator(l,l,"≈ ",r));var h=this._hoverLinkDataIndices,c=[];(e||rx(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(u));var d=Ri(h,c);this._dispatchHighDown("downplay",ex(d[0])),this._dispatchHighDown("highlight",ex(d[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target,i=this.visualMapModel;if(e&&null!=e.dataIndex){var n=this.ecModel.getSeriesByIndex(e.seriesIndex);if(i.isTargetSeries(n)){var o=n.getData(e.dataType),a=o.get(i.getDataDimension(o),e.dataIndex,!0);isNaN(a)||this._showIndicator(a,a)}}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",ex(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=Ao(e,n?null:this.group);return zM[y(t)?"applyTransform":"transformDirection"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});Es({type:"selectDataRange",event:"dataRangeSelected",update:"update"},function(t,e){e.eachComponent({mainType:"visualMap",query:t},function(e){e.setSelected(t.selected)})}),Ns(xO);var FO=LO.extend({type:"visualMap.piecewise",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieceList:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0,showLabel:null},optionUpdated:function(t,e){FO.superApply(this,"optionUpdated",arguments),this._pieceList=[],this.resetExtent();var n=this._mode=this._determineMode();WO[this._mode].call(this),this._resetSelected(t,e);var o=this.option.categories;this.resetVisual(function(t,e){"categories"===n?(t.mappingMethod="category",t.categories=i(o)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=f(this._pieceList,function(t){var t=i(t);return"inRange"!==e&&(t.visual=null),t}))})},completeVisualOption:function(){function t(t,e,i){return t&&t[e]&&(w(t[e])?t[e].hasOwnProperty(i):t[e]===i)}var e=this.option,i={},n=hL.listVisualTypes(),o=this.isCategory();d(e.pieces,function(t){d(n,function(e){t.hasOwnProperty(e)&&(i[e]=1)})}),d(i,function(i,n){var a=0;d(this.stateList,function(i){a|=t(e,i,n)||t(e.target,i,n)},this),!a&&d(this.stateList,function(t){(e[t]||(e[t]={}))[n]=wO.get(n,"inRange"===t?"active":"inactive",o)})},this),LO.prototype.completeVisualOption.apply(this,arguments)},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,d(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),"single"===i.selectedMode){var a=!1;d(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(a?o[i]=!1:a=!0)},this)}},getSelectedMapKey:function(t){return"categories"===this._mode?t.value+"":t.index+""},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=i(t)},getValueState:function(t){var e=hL.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){hL.findPieceIndex(e,this._pieceList)===t&&n.push(i)},this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=i[0]===-1/0&&i[1]===1/0?0:(i[0]+i[1])/2}return e},getVisualMeta:function(t){function e(e,a){var r=o.getRepresentValue({interval:e});a||(a=o.getValueState(r));var s=t(r,a);e[0]===-1/0?n[0]=s:e[1]===1/0?n[1]=s:i.push({value:e[0],color:s},{value:e[1],color:s})}if(!this.isCategory()){var i=[],n=[],o=this,a=this._pieceList.slice();if(a.length){var r=a[0].interval[0];r!==-1/0&&a.unshift({interval:[-1/0,r]}),(r=a[a.length-1].interval[1])!==1/0&&a.push({interval:[r,1/0]})}else a.push({interval:[-1/0,1/0]});var s=-1/0;return d(a,function(t){var i=t.interval;i&&(i[0]>s&&e([s,i[0]],"outOfRange"),e(i.slice()),s=i[1])},this),{stops:i,outerColors:n}}}}),WO={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+o;r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};NO.extend({type:"visualMap.piecewise",doRender:function(){var t=this.group;t.removeAll();var e=this.visualMapModel,i=e.get("textGap"),n=e.textStyleModel,o=n.getFont(),a=n.getTextColor(),r=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),u=l.endsText,h=T(e.get("showLabel",!0),!u);u&&this._renderEndsText(t,u[0],s,h,r),d(l.viewPieceList,function(n){var l=n.piece,u=new tb;u.onclick=m(this._onItemClick,this,l),this._enableHoverLink(u,n.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(u,c,[0,0,s[0],s[1]]),h){var d=this.visualMapModel.getValueState(c);u.add(new rM({style:{x:"right"===r?-i:s[0]+i,y:s[1]/2,text:l.text,textVerticalAlign:"middle",textAlign:r,textFont:o,textFill:a,opacity:"outOfRange"===d?.5:1}}))}t.add(u)},this),u&&this._renderEndsText(t,u[1],s,h,r),aI(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:ex(i.findTargetDataIndices(e))})}t.on("mouseover",m(i,this,"highlight")).on("mouseout",m(i,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return tx(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new tb,r=this.visualMapModel.textStyleModel;a.add(new rM({style:{x:n?"right"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?o:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=f(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),o=t.get("inverse");return("horizontal"===n?o:!o)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(Jl(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,n=e.option,o=i(n.selected),a=e.getSelectedMapKey(t);"single"===n.selectedMode?(o[a]=!0,d(o,function(t,e){o[e]=e===a})):o[a]=!o[a],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:o})}});Ns(xO);var HO=ta,ZO=ia,UO=Fs({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},isAnimationEnabled:function(){if(U_.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e,i,n){var o=this.constructor,r=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType,!0),s=t[r];i&&i.data?(s?s.mergeOption(i,e,!0):(n&&ux(i),d(i.data,function(t){t instanceof Array?(ux(t[0]),ux(t[1])):ux(t)}),a(s=new o(i,this,e),{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),t[r]=s):t[r]=null},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=y(i)?f(i,HO).join(", "):HO(i),o=e.getName(t),a=ZO(this.name);return(null!=i||o)&&(a+="
"),o&&(a+=ZO(o),null!=i&&(a+=" : ")),null!=i&&(a+=ZO(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});h(UO,ZI),UO.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var XO=l,jO=v,YO={min:jO(dx,"min"),max:jO(dx,"max"),average:jO(dx,"average")},qO=Ws({type:"marker",init:function(){this.markerGroupMap=R()},render:function(t,e,i){var n=this.markerGroupMap;n.each(function(t){t.__keep=!1});var o=this.type+"Model";e.eachSeries(function(t){var n=t[o];n&&this.renderSeries(t,n,e,i)},this),n.each(function(t){!t.__keep&&this.group.remove(t.group)},this)},renderSeries:function(){}});qO.extend({type:"markPoint",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(xx(e.getData(),t,i),this.markerGroupMap.get(t.id).updateLayout(e))},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,r=t.getData(),s=this.markerGroupMap,l=s.get(a)||s.set(a,new Du),u=_x(o,t,e);e.setData(u),xx(e.getData(),t,n),u.each(function(t){var i=u.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),u.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.color")||r.getVisual("color"),symbol:i.getShallow("symbol")})}),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),l.__keep=!0,l.group.silent=e.get("silent")||t.get("silent")}}),Ns(function(t){t.markPoint=t.markPoint||{}}),UO.extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end"},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"}});var KO=function(t,e,o,r){var s=t.getData(),l=r.type;if(!y(r)&&("min"===l||"max"===l||"average"===l||"median"===l||null!=r.xAxis||null!=r.yAxis)){var u,h;if(null!=r.yAxis||null!=r.xAxis)u=null!=r.yAxis?"y":"x",e.getAxis(u),h=T(r.yAxis,r.xAxis);else{var c=px(r,s,e,t);u=c.valueDataDim,c.valueAxis,h=yx(s,u,l)}var d="x"===u?0:1,f=1-d,p=i(r),g={};p.type=null,p.coord=[],g.coord=[],p.coord[f]=-1/0,g.coord[f]=1/0;var m=o.get("precision");m>=0&&"number"==typeof h&&(h=+h.toFixed(Math.min(m,20))),p.coord[d]=g.coord[d]=h,r=[p,g,{type:l,valueIndex:r.valueIndex,value:h}]}return r=[fx(t,r[0]),fx(t,r[1]),a({},r[2])],r[2].type=r[2].type||"",n(r[2],r[0]),n(r[2],r[1]),r};qO.extend({type:"markLine",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,a=e.__to;o.each(function(e){Ix(o,e,!0,t,i),Ix(a,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),a.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var a=e.getItemModel(i);Ix(e,i,o,t,n),e.setItemVisual(i,{symbolSize:a.get("symbolSize")||g[o?0:1],symbol:a.get("symbol",!0)||p[o?0:1],color:a.get("itemStyle.color")||s.getVisual("color")})}var a=t.coordinateSystem,r=t.id,s=t.getData(),l=this.markerGroupMap,u=l.get(r)||l.set(r,new sf);this.group.add(u.group);var h=Tx(a,t,e),c=h.from,d=h.to,f=h.line;e.__from=c,e.__to=d,e.setData(f);var p=e.get("symbol"),g=e.get("symbolSize");y(p)||(p=[p,p]),"number"==typeof g&&(g=[g,g]),h.from.each(function(t){o(c,t,!0),o(d,t,!1)}),f.each(function(t){var e=f.getItemModel(t).get("lineStyle.color");f.setItemVisual(t,{color:e||c.getItemVisual(t,"color")}),f.setItemLayout(t,[c.getItemLayout(t),d.getItemLayout(t)]),f.setItemVisual(t,{fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolSize:d.getItemVisual(t,"symbolSize"),toSymbol:d.getItemVisual(t,"symbol")})}),u.updateData(f),h.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),u.__keep=!0,u.group.silent=e.get("silent")||t.get("silent")}}),Ns(function(t){t.markLine=t.markLine||{}}),UO.extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}}});var $O=function(t,e,i,n){var a=fx(t,n[0]),r=fx(t,n[1]),s=T,l=a.coord,u=r.coord;l[0]=s(l[0],-1/0),l[1]=s(l[1],-1/0),u[0]=s(u[0],1/0),u[1]=s(u[1],1/0);var h=o([{},a,r]);return h.coord=[a.coord,r.coord],h.x0=a.x,h.y0=a.y,h.x1=r.x,h.y1=r.y,h},JO=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];qO.extend({type:"markArea",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=f(JO,function(o){return Lx(n,e,o,t,i)});n.setItemLayout(e,o),n.getItemGraphicEl(e).setShape("points",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,a=t.id,s=t.getData(),l=this.markerGroupMap,u=l.get(a)||l.set(a,{group:new tb});this.group.add(u.group),u.__keep=!0;var h=kx(o,t,e);e.setData(h),h.each(function(e){h.setItemLayout(e,f(JO,function(i){return Lx(h,e,i,t,n)})),h.setItemVisual(e,{color:s.getVisual("color")})}),h.diff(u.__data).add(function(t){var e=new pM({shape:{points:h.getItemLayout(t)}});h.setItemGraphicEl(t,e),u.group.add(e)}).update(function(t,i){var n=u.__data.getItemGraphicEl(i);Io(n,{shape:{points:h.getItemLayout(t)}},e,t),u.group.add(n),h.setItemGraphicEl(t,n)}).remove(function(t){var e=u.__data.getItemGraphicEl(t);u.group.remove(e)}).execute(),h.eachItemGraphicEl(function(t,i){var n=h.getItemModel(i),o=n.getModel("label"),a=n.getModel("emphasis.label"),s=h.getItemVisual(i,"color");t.useStyle(r(n.getModel("itemStyle").getItemStyle(),{fill:Yt(s,.4),stroke:s})),t.hoverStyle=n.getModel("emphasis.itemStyle").getItemStyle(),go(t.style,t.hoverStyle,o,a,{labelFetcher:e,labelDataIndex:i,defaultText:h.getName(i)||"",isRectText:!0,autoColor:s}),fo(t,{}),t.dataModel=e}),u.__data=h,u.group.silent=e.get("silent")||t.get("silent")}}),Ns(function(t){t.markArea=t.markArea||{}});lI.registerSubTypeDefaulter("timeline",function(){return"slider"}),Es({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),r({currentIndex:i.option.currentIndex},t)}),Es({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var QO=lI.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){QO.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],n=t.axisType,o=this._names=[];if("category"===n){var a=[];d(e,function(t,e){var n,r=Li(t);w(t)?(n=i(t)).value=e:n=e,a.push(n),_(r)||null!=r&&!isNaN(r)||(r=""),o.push(r+"")}),e=a}var r={category:"ordinal",time:"time"}[n]||"number";(this._data=new vA([{name:"value",type:r}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});h(QO.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),ZI);var tE=qI.extend({type:"timeline"}),eE=function(t,e,i,n){aD.call(this,t,e,i),this.type=n||"value",this.model=null};eE.prototype={constructor:eE,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},u(eE,aD);var iE=m,nE=d,oE=Math.PI;tE.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var o=this._layout(t,i),a=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return ia(s.scale.getLabel(t))},nE(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](o,a,s,t)},this),this._renderAxisLabel(o,r,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),o=Ex(t,e);null==i||"auto"===i?i="horizontal"===n?o.y+o.height/2=0||"+"===i?"left":"right"},r={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},s={horizontal:0,vertical:oE/2},l="vertical"===n?o.height:o.width,u=t.getModel("controlStyle"),h=u.get("show",!0),c=h?u.get("itemSize"):0,d=h?u.get("itemGap"):0,f=c+d,p=t.get("label.rotate")||0;p=p*oE/180;var g,m,v,y,x=u.get("position",!0),_=h&&u.get("showPlayBtn",!0),w=h&&u.get("showPrevBtn",!0),b=h&&u.get("showNextBtn",!0),S=0,M=l;return"left"===x||"bottom"===x?(_&&(g=[0,0],S+=f),w&&(m=[S,0],S+=f),b&&(v=[M-c,0],M-=f)):(_&&(g=[M-c,0],M-=f),w&&(m=[0,0],S+=f),b&&(v=[M-c,0],M-=f)),y=[S,M],t.get("inverse")&&y.reverse(),{viewRect:o,mainLength:l,orient:n,rotation:s[n],labelRotation:p,labelPosOpt:i,labelAlign:t.get("label.align")||a[n],labelBaseline:t.get("label.verticalAlign")||t.get("label.baseline")||r[n],playPosition:g,prevBtnPosition:m,nextBtnPosition:v,axisExtent:y,controlSize:c,controlGap:d}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var a=this._mainGroup,r=this._labelGroup,s=t.viewRect;if("vertical"===t.orient){var l=xt(),u=s.x,h=s.y+s.height;St(l,l,[-u,-h]),Mt(l,l,-oE/2),St(l,l,[u,h]),(s=s.clone()).applyTransform(l)}var c=n(s),d=n(a.getBoundingRect()),f=n(r.getBoundingRect()),p=a.position,g=r.position;g[0]=p[0]=c[0][0];var m=t.labelPosOpt;if(isNaN(m))o(p,d,c,1,v="+"===m?0:1),o(g,f,c,1,1-v);else{var v=m>=0?0:1;o(p,d,c,1,v),g[1]=p[1]+m}a.attr("position",p),r.attr("position",g),a.rotation=r.rotation=t.rotation,i(a),i(r)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),o=Hl(e,n);o.getTicks=function(){return i.mapArray(["value"],function(t){return t})};var a=i.getDataExtent("value");o.setExtent(a[0],a[1]),o.niceTicks();var r=new eE("value",o,t.axisExtent,n);return r.model=e,r},_createGroup:function(t){var e=this["_"+t]=new tb;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get("lineStyle.show")&&e.add(new _M({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:a({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();nE(a,function(t){var a=i.dataToCoord(t),r=o.getItemModel(t),s=r.getModel("itemStyle"),l=r.getModel("emphasis.itemStyle"),u={position:[a,0],onclick:iE(this._changeTimeline,this,t)},h=zx(r,s,e,u);fo(h,l.getItemStyle()),r.get("tooltip")?(h.dataIndex=t,h.dataModel=n):h.dataIndex=h.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){if(i.getLabelModel().get("show")){var o=n.getData(),a=i.getViewLabels();nE(a,function(n){var a=n.tickValue,r=o.getItemModel(a),s=r.getModel("label"),l=r.getModel("emphasis.label"),u=i.dataToCoord(n.tickValue),h=new rM({position:[u,0],rotation:t.labelRotation-t.rotation,onclick:iE(this._changeTimeline,this,a),silent:!1});mo(h.style,s,{text:n.formattedLabel,textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(h),fo(h,mo({},l))},this)}},_renderControl:function(t,e,i,n){function o(t,i,o,h){if(t){var c=Rx(n,i,u,{position:t,origin:[a/2,0],rotation:h?-r:0,rectHover:!0,style:s,onclick:o});e.add(c),fo(c,l)}}var a=t.controlSize,r=t.rotation,s=n.getModel("controlStyle").getItemStyle(),l=n.getModel("emphasis.controlStyle").getItemStyle(),u=[0,-a/2,a,a],h=n.getPlayState(),c=n.get("inverse",!0);o(t.nextBtnPosition,"controlStyle.nextIcon",iE(this._changeTimeline,this,c?"-":"+")),o(t.prevBtnPosition,"controlStyle.prevIcon",iE(this._changeTimeline,this,c?"+":"-")),o(t.playPosition,"controlStyle."+(h?"stopIcon":"playIcon"),iE(this._handlePlayClick,this,!h),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),a=n.getCurrentIndex(),r=o.getItemModel(a).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=iE(s._handlePointerDrag,s),t.ondragend=iE(s._handlePointerDragend,s),Bx(t,a,i,n,!0)},onUpdate:function(t){Bx(t,a,i,n)}};this._currentPointer=zx(r,r,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=Fo(this._axis.getExtent().slice());i>n[1]&&(i=n[1]),ii.getHeight()&&(n.textPosition="top",l=!0);var u=l?-5-o.height:s+8;a+o.width/2>i.getWidth()?(n.textPosition=["100%",u],n.textAlign="right"):a-o.width/2<0&&(n.textPosition=[0,u],n.textAlign="left")}})}},updateView:function(t,e,i,n){d(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},remove:function(t,e){d(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){d(this._features,function(i){i.dispose&&i.dispose(t,e)})}});var rE=rT.toolbox.saveAsImage;Gx.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:rE.title,type:"png",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:rE.lang.slice()},Gx.prototype.unusable=!U_.canvasSupported,Gx.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=document.createElement("a"),a=i.get("type",!0)||"png";o.download=n+"."+a,o.target="_blank";var r=e.getConnectedDataURL({type:a,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if(o.href=r,"function"!=typeof MouseEvent||U_.browser.ie||U_.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var s=atob(r.split(",")[1]),l=s.length,u=new Uint8Array(l);l--;)u[l]=s.charCodeAt(l);var h=new Blob([u]);window.navigator.msSaveOrOpenBlob(h,n+"."+a)}else{var c=i.get("lang"),d='';window.open().document.write(d)}else{var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(f)}},Ty("saveAsImage",Gx);var sE=rT.toolbox.magicType;Fx.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:i(sE.title),option:{},seriesIndex:{}};var lE=Fx.prototype;lE.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return d(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var uE={line:function(t,e,i,o){if("bar"===t)return n({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.line")||{},!0)},bar:function(t,e,i,o){if("line"===t)return n({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},o.get("option.bar")||{},!0)},stack:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:"__ec_magicType_stack__"},o.get("option.stack")||{},!0)},tiled:function(t,e,i,o){if("line"===t||"bar"===t)return n({id:e,stack:""},o.get("option.tiled")||{},!0)}},hE=[["line","bar"],["stack","tiled"]];lE.onclick=function(t,e,i){var n=this.model,o=n.get("seriesIndex."+i);if(uE[i]){var a={series:[]};d(hE,function(t){l(t,i)>=0&&d(t,function(t){n.setIconStatus(t,"normal")})}),n.setIconStatus(i,"emphasis"),t.eachComponent({mainType:"series",query:null==o?null:{seriesIndex:o}},function(e){var o=e.subType,s=e.id,l=uE[i](o,s,e,n);l&&(r(l,e.option),a.series.push(l));var u=e.coordinateSystem;if(u&&"cartesian2d"===u.type&&("line"===i||"bar"===i)){var h=u.getAxesByScale("ordinal")[0];if(h){var c=h.dim+"Axis",d=t.queryComponents({mainType:c,index:e.get(name+"Index"),id:e.get(name+"Id")})[0].componentIndex;a[c]=a[c]||[];for(var f=0;f<=d;f++)a[c][d]=a[c][d]||{};a[c][d].boundaryGap="bar"===i}}}),e.dispatchAction({type:"changeMagicType",currentType:i,newOption:a})}},Es({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),Ty("magicType",Fx);var cE=rT.toolbox.dataView,dE=new Array(60).join("-"),fE="\t",pE=new RegExp("["+fE+"]+","g");$x.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",title:i(cE.title),lang:i(cE.lang),backgroundColor:"#fff",textColor:"#000",textareaColor:"#fff",textareaBorderColor:"#333",buttonColor:"#c23531",buttonTextColor:"#fff"},$x.prototype.onclick=function(t,e){function i(){n.removeChild(a),x._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var a=document.createElement("div");a.style.cssText="position:absolute;left:5px;top:5px;bottom:5px;right:5px;",a.style.backgroundColor=o.get("backgroundColor")||"#fff";var r=document.createElement("h4"),s=o.get("lang")||[];r.innerHTML=s[0]||o.get("title"),r.style.cssText="margin: 10px 20px;",r.style.color=o.get("textColor");var l=document.createElement("div"),u=document.createElement("textarea");l.style.cssText="display:block;width:100%;overflow:auto;";var h=o.get("optionToContent"),c=o.get("contentToOption"),d=Ux(t);if("function"==typeof h){var f=h(e.getOption());"string"==typeof f?l.innerHTML=f:M(f)&&l.appendChild(f)}else l.appendChild(u),u.readOnly=o.get("readOnly"),u.style.cssText="width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",u.style.color=o.get("textColor"),u.style.borderColor=o.get("textareaBorderColor"),u.style.backgroundColor=o.get("textareaColor"),u.value=d.value;var p=d.meta,g=document.createElement("div");g.style.cssText="position:absolute;bottom:0;left:0;right:0;";var m="float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",v=document.createElement("div"),y=document.createElement("div");m+=";background-color:"+o.get("buttonColor"),m+=";color:"+o.get("buttonTextColor");var x=this;ht(v,"click",i),ht(y,"click",function(){var t;try{t="function"==typeof c?c(l,e.getOption()):Kx(u.value,p)}catch(t){throw i(),new Error("Data view format error "+t)}t&&e.dispatchAction({type:"changeDataView",newOption:t}),i()}),v.innerHTML=s[1],y.innerHTML=s[2],y.style.cssText=m,v.style.cssText=m,!o.get("readOnly")&&g.appendChild(y),g.appendChild(v),ht(u,"keydown",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+fE+e.substring(n),this.selectionStart=this.selectionEnd=i+1,mw(t)}}),a.appendChild(r),a.appendChild(l),a.appendChild(g),l.style.height=n.clientHeight-80+"px",n.appendChild(a),this._dom=a},$x.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},$x.prototype.dispose=function(t,e){this.remove(t,e)},Ty("dataView",$x),Es({type:"changeDataView",event:"dataViewChanged",update:"prepareAndUpdate"},function(t,e){var i=[];d(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get("data");i.push({name:t.name,data:Jx(t.data,o)})}else i.push(a({type:"scatter"},t))}),e.mergeOption(r({series:i},t.newOption))});var gE=d,mE="\0_ec_hist_store";iO.extend({type:"dataZoom.select"}),nO.extend({type:"dataZoom.select"});var vE=rT.toolbox.dataZoom,yE=d,xE="\0_ec_\0toolbox-dataZoom_";o_.defaultOption={show:!0,icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:i(vE.title)};var _E=o_.prototype;_E.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,s_(t,e,this,n,i),r_(t,e)},_E.onclick=function(t,e,i){wE[i].call(this)},_E.remove=function(t,e){this._brushController.unmount()},_E.dispose=function(t,e){this._brushController.dispose()};var wE={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(t_(this.ecModel))}};_E._onBrush=function(t,e){function i(t,e,i){var r=e.getAxis(t),s=r.model,l=n(t,s,a),u=l.findRepresentativeAxisProxy(s).getMinMaxSpan();null==u.minValueSpan&&null==u.maxValueSpan||(i=QL(0,i.slice(),r.scale.getExtent(),0,u.minValueSpan,u.maxValueSpan)),l&&(o[l.id]={dataZoomId:l.id,startValue:i[0],endValue:i[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:"dataZoom",subType:"select"},function(i){i.getAxisModel(t,e.componentIndex)&&(n=i)}),n}if(e.isEnd&&t.length){var o={},a=this.ecModel;this._brushController.updateCovers([]),new hy(a_(this.model.option),a,{include:["grid"]}).matchOutputRanges(t,a,function(t,e,n){if("cartesian2d"===n.type){var o=t.brushType;"rect"===o?(i("x",n,e[0]),i("y",n,e[1])):i({lineX:"x",lineY:"y"}[o],n,e)}}),Qx(a,o),this._dispatchZoomAction(o)}},_E._dispatchZoomAction=function(t){var e=[];yE(t,function(t,n){e.push(i(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},Ty("dataZoom",o_),Ns(function(t){function e(t,e){if(e){var o=t+"Index",a=e[o];null==a||"all"===a||y(a)||(a=!1===a||"none"===a?[]:[a]),i(t,function(e,i){if(null==a||"all"===a||-1!==l(a,i)){var r={type:"select",$fromToolbox:!0,id:xE+t+i};r[o]=i,n.push(r)}})}}function i(e,i){var n=t[e];y(n)||(n=n?[n]:[]),yE(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);y(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(y(o)&&(o=o[0]),o&&o.feature)){var a=o.feature.dataZoom;e("xAxis",a),e("yAxis",a)}}});var bE=rT.toolbox.restore;l_.defaultOption={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:bE.title},l_.prototype.onclick=function(t,e,i){e_(t),e.dispatchAction({type:"restore",from:this.uid})},Ty("restore",l_),Es({type:"restore",event:"restore",update:"prepareAndUpdate"},function(t,e){e.resetOption("recreate")});var SE,ME="urn:schemas-microsoft-com:vml",IE="undefined"==typeof window?null:window,TE=!1,AE=IE&&IE.document;if(AE&&!U_.canvasSupported)try{!AE.namespaces.zrvml&&AE.namespaces.add("zrvml",ME),SE=function(t){return AE.createElement("')}}catch(t){SE=function(t){return AE.createElement("<"+t+' xmlns="'+ME+'" class="zrvml">')}}var DE=ES.CMD,CE=Math.round,LE=Math.sqrt,kE=Math.abs,PE=Math.cos,NE=Math.sin,OE=Math.max;if(!U_.canvasSupported){var EE=21600,RE=EE/2,zE=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=EE+","+EE,t.coordorigin="0,0"},BE=function(t){return String(t).replace(/&/g,"&").replace(/"/g,""")},VE=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},GE=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},FE=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},WE=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},HE=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},ZE=function(t,e,i){var n=Gt(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=VE(n[0],n[1],n[2]),t.opacity=i*n[3])},UE=function(t){var e=Gt(t);return[VE(e[0],e[1],e[2]),e[3]]},XE=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof IM){var o,a=0,r=[0,0],s=0,l=1,u=i.getBoundingRect(),h=u.width,c=u.height;if("linear"===n.type){o="gradient";var d=i.transform,f=[n.x*h,n.y*c],p=[n.x2*h,n.y2*c];d&&(Q(f,f,d),Q(p,p,d));var g=p[0]-f[0],m=p[1]-f[1];(a=180*Math.atan2(g,m)/Math.PI)<0&&(a+=360),a<1e-6&&(a=0)}else{o="gradientradial";var f=[n.x*h,n.y*c],d=i.transform,v=i.scale,y=h,x=c;r=[(f[0]-u.x)/y,(f[1]-u.y)/x],d&&Q(f,f,d),y/=v[0]*EE,x/=v[1]*EE;var _=OE(y,x);s=0/_,l=2*n.r/_-s}var w=n.colorStops.slice();w.sort(function(t,e){return t.offset-e.offset});for(var b=w.length,S=[],M=[],I=0;I=2){var D=S[0][0],C=S[1][0],L=S[0][1]*e.opacity,k=S[1][1]*e.opacity;t.type=o,t.method="none",t.focus="100%",t.angle=a,t.color=D,t.color2=C,t.colors=M.join(","),t.opacity=k,t.opacity2=L}"radial"===o&&(t.focusposition=r.join(","))}else ZE(t,n,e.opacity)},jE=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof IM||ZE(t,e.stroke,e.opacity)},YE=function(t,e,i,n){var o="fill"===e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof IM&&FE(t,a),a||(a=u_(e)),o?XE(a,i,n):jE(a,i),GE(t,a)):(t[o?"filled":"stroked"]="false",FE(t,a))},qE=[[],[],[]],KE=function(t,e){var i,n,o,a,r,s,l=DE.M,u=DE.C,h=DE.L,c=DE.A,d=DE.Q,f=[],p=t.data,g=t.len();for(a=0;a.01?N&&(O+=.0125):Math.abs(E-D)<1e-4?N&&OA?x-=.0125:x+=.0125:N&&ED?y+=.0125:y-=.0125),f.push(R,CE(((A-C)*M+b)*EE-RE),",",CE(((D-L)*I+S)*EE-RE),",",CE(((A+C)*M+b)*EE-RE),",",CE(((D+L)*I+S)*EE-RE),",",CE((O*M+b)*EE-RE),",",CE((E*I+S)*EE-RE),",",CE((y*M+b)*EE-RE),",",CE((x*I+S)*EE-RE)),r=y,s=x;break;case DE.R:var z=qE[0],B=qE[1];z[0]=p[a++],z[1]=p[a++],B[0]=z[0]+p[a++],B[1]=z[1]+p[a++],e&&(Q(z,z,e),Q(B,B,e)),z[0]=CE(z[0]*EE-RE),B[0]=CE(B[0]*EE-RE),z[1]=CE(z[1]*EE-RE),B[1]=CE(B[1]*EE-RE),f.push(" m ",z[0],",",z[1]," l ",B[0],",",z[1]," l ",B[0],",",B[1]," l ",z[0],",",B[1]);break;case DE.Z:f.push(" x ")}if(i>0){f.push(n);for(var V=0;V100&&(tR=0,QE={});var i,n=eR.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(t){}e={style:n.fontStyle||"normal",variant:n.fontVariant||"normal",weight:n.fontWeight||"normal",size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},QE[t]=e,tR++}return e};!function(t,e){bb[t]=e}("measureText",function(t,e){var i=AE;JE||((JE=i.createElement("div")).style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",AE.body.appendChild(JE));try{JE.style.font=e}catch(t){}return JE.innerHTML="",JE.appendChild(i.createTextNode(t)),{width:JE.offsetWidth}});for(var nR=new de,oR=[Db,di,fi,Pn,rM],aR=0;aR=o&&u+1>=a){for(var h=[],c=0;c=o&&c+1>=a)return T_(0,s.components);l[i]=s}else l[i]=void 0}r++}();if(d)return d}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},D_.prototype.update=function(t,e){if(t){var i=this.getDefs(!1);if(t[this._domName]&&i.contains(t[this._domName]))"function"==typeof e&&e(t);else{var n=this.add(t);n&&(t[this._domName]=n)}}},D_.prototype.addDom=function(t){this.getDefs(!0).appendChild(t)},D_.prototype.removeDom=function(t){var e=this.getDefs(!1);e&&t[this._domName]&&(e.removeChild(t[this._domName]),t[this._domName]=null)},D_.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return d(this._tagNames,function(i){var n=t.getElementsByTagName(i);e=e.concat([].slice.call(n))}),e},D_.prototype.markAllUnused=function(){var t=this;d(this.getDoms(),function(e){e[t._markLabel]="0"})},D_.prototype.markUsed=function(t){t&&(t[this._markLabel]="1")},D_.prototype.removeUnused=function(){var t=this.getDefs(!1);if(t){var e=this;d(this.getDoms(),function(i){"1"!==i[e._markLabel]&&t.removeChild(i)})}},D_.prototype.getSvgProxy=function(t){return t instanceof Pn?yR:t instanceof fi?xR:t instanceof rM?_R:yR},D_.prototype.getTextSvgElement=function(t){return t.__textSvgEl},D_.prototype.getSvgElement=function(t){return t.__svgEl},u(C_,D_),C_.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var i=this;d(["fill","stroke"],function(n){if(e.style[n]&&("linear"===e.style[n].type||"radial"===e.style[n].type)){var o,a=e.style[n],r=i.getDefs(!0);a._dom?(o=a._dom,r.contains(a._dom)||i.addDom(o)):o=i.add(a),i.markUsed(e);var s=o.getAttribute("id");t.setAttribute(n,"url(#"+s+")")}})}},C_.prototype.add=function(t){var e;if("linear"===t.type)e=this.createElement("linearGradient");else{if("radial"!==t.type)return Yw("Illegal gradient type."),null;e=this.createElement("radialGradient")}return t.id=t.id||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-gradient-"+t.id),this.updateDom(t,e),this.addDom(e),e},C_.prototype.update=function(t){var e=this;D_.prototype.update.call(this,t,function(){var i=t.type,n=t._dom.tagName;"linear"===i&&"linearGradient"===n||"radial"===i&&"radialGradient"===n?e.updateDom(t,t._dom):(e.removeDom(t),e.add(t))})},C_.prototype.updateDom=function(t,e){if("linear"===t.type)e.setAttribute("x1",t.x),e.setAttribute("y1",t.y),e.setAttribute("x2",t.x2),e.setAttribute("y2",t.y2);else{if("radial"!==t.type)return void Yw("Illegal gradient type.");e.setAttribute("cx",t.x),e.setAttribute("cy",t.y),e.setAttribute("r",t.r)}t.global?e.setAttribute("gradientUnits","userSpaceOnUse"):e.setAttribute("gradientUnits","objectBoundingBox"),e.innerHTML="";for(var i=t.colorStops,n=0,o=i.length;n0){var n,o,a=this.getDefs(!0),r=e[0],s=i?"_textDom":"_dom";r[s]?(o=r[s].getAttribute("id"),n=r[s],a.contains(n)||a.appendChild(n)):(o="zr"+this._zrId+"-clip-"+this.nextId,++this.nextId,(n=this.createElement("clipPath")).setAttribute("id",o),a.appendChild(n),r[s]=n);var l=this.getSvgProxy(r);if(r.transform&&r.parent.invTransform&&!i){var u=Array.prototype.slice.call(r.transform);bt(r.transform,r.parent.invTransform,r.transform),l.brush(r),r.transform=u}else l.brush(r);var h=this.getSvgElement(r);n.innerHTML="",n.appendChild(h.cloneNode()),t.setAttribute("clip-path","url(#"+o+")"),e.length>1&&this.updateDom(n,e.slice(1),i)}else t&&t.setAttribute("clip-path","none")},L_.prototype.markUsed=function(t){var e=this;t.__clipPaths&&t.__clipPaths.length>0&&d(t.__clipPaths,function(t){t._dom&&D_.prototype.markUsed.call(e,t._dom),t._textDom&&D_.prototype.markUsed.call(e,t._textDom)})},u(k_,D_),k_.prototype.addWithoutUpdate=function(t,e){if(e&&P_(e.style)){var i,n=e.style;n._shadowDom?(i=n._shadowDom,this.getDefs(!0).contains(n._shadowDom)||this.addDom(i)):i=this.add(e),this.markUsed(e);var o=i.getAttribute("id");t.style.filter="url(#"+o+")"}},k_.prototype.add=function(t){var e=this.createElement("filter"),i=t.style;return i._shadowDomId=i._shadowDomId||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-shadow-"+i._shadowDomId),this.updateDom(t,e),this.addDom(e),e},k_.prototype.update=function(t,e){var i=e.style;if(P_(i)){var n=this;D_.prototype.update.call(this,e,function(t){n.updateDom(e,t._shadowDom)})}else this.remove(t,i)},k_.prototype.remove=function(t,e){null!=e._shadowDomId&&(this.removeDom(e),t.style.filter="")},k_.prototype.updateDom=function(t,e){var i=e.getElementsByTagName("feDropShadow");i=0===i.length?this.createElement("feDropShadow"):i[0];var n,o,a,r,s=t.style,l=t.scale?t.scale[0]||1:1,u=t.scale?t.scale[1]||1:1;if(s.shadowBlur||s.shadowOffsetX||s.shadowOffsetY)n=s.shadowOffsetX||0,o=s.shadowOffsetY||0,a=s.shadowBlur,r=s.shadowColor;else{if(!s.textShadowBlur)return void this.removeDom(e,s);n=s.textShadowOffsetX||0,o=s.textShadowOffsetY||0,a=s.textShadowBlur,r=s.textShadowColor}i.setAttribute("dx",n/l),i.setAttribute("dy",o/u),i.setAttribute("flood-color",r);var h=a/2/l+" "+a/2/u;i.setAttribute("stdDeviation",h),e.setAttribute("x","-100%"),e.setAttribute("y","-100%"),e.setAttribute("width",Math.ceil(a/2*200)+"%"),e.setAttribute("height",Math.ceil(a/2*200)+"%"),e.appendChild(i),s._shadowDom=e},k_.prototype.markUsed=function(t){var e=t.style;e&&e._shadowDom&&D_.prototype.markUsed.call(this,e._shadowDom)};var IR=function(t,e,i,n){this.root=t,this.storage=e,this._opts=i=a({},i||{});var o=p_("svg");o.setAttribute("xmlns","http://www.w3.org/2000/svg"),o.setAttribute("version","1.1"),o.setAttribute("baseProfile","full"),o.style.cssText="user-select:none;position:absolute;left:0;top:0;",this.gradientManager=new C_(n,o),this.clipPathManager=new L_(n,o),this.shadowManager=new k_(n,o);var r=document.createElement("div");r.style.cssText="overflow:hidden;position:relative",this._svgRoot=o,this._viewport=r,t.appendChild(r),r.appendChild(o),this.resize(i.width,i.height),this._visibleList=[]};IR.prototype={constructor:IR,getType:function(){return"svg"},getViewportRoot:function(){return this._viewport},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},setBackgroundColor:function(t){this._viewport.style.background=t},_paintList:function(t){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused(),this.shadowManager.markAllUnused();var e,i=this._svgRoot,n=this._visibleList,o=t.length,a=[];for(e=0;e=0;--n)if(e[n]===t)return!0;return!1}),i):null:i[0]},resize:function(t,e){var i=this._viewport;i.style.display="none";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display="",this._width!==t||this._height!==e){this._width=t,this._height=e;var o=i.style;o.width=t+"px",o.height=e+"px";var a=this._svgRoot;a.setAttribute("width",t),a.setAttribute("height",e)}},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,i=["width","height"][t],n=["clientWidth","clientHeight"][t],o=["paddingLeft","paddingTop"][t],a=["paddingRight","paddingBottom"][t];if(null!=e[i]&&"auto"!==e[i])return parseFloat(e[i]);var r=this.root,s=document.defaultView.getComputedStyle(r);return(r[n]||N_(s[i])||N_(r.style[i]))-(N_(s[o])||0)-(N_(s[a])||0)|0},dispose:function(){this.root.innerHTML="",this._svgRoot=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},pathToDataUrl:function(){return this.refresh(),"data:image/svg+xml;charset=UTF-8,"+this._svgRoot.outerHTML}},d(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","toDataURL","pathToImage"],function(t){IR.prototype[t]=F_(t)}),Ti("svg",IR),t.version="4.2.1",t.dependencies=ET,t.PRIORITY=VT,t.init=function(t,e,i){var n=ks(t);if(n)return n;var o=new us(t,e,i);return o.id="ec_"+iA++,tA[o.id]=o,Fi(t,oA,o.id),Cs(o),o},t.connect=function(t){if(y(t)){var e=t;t=null,kT(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+nA++,kT(e,function(e){e.group=t})}return eA[t]=!0,t},t.disConnect=Ls,t.disconnect=aA,t.dispose=function(t){"string"==typeof t?t=tA[t]:t instanceof us||(t=ks(t)),t instanceof us&&!t.isDisposed()&&t.dispose()},t.getInstanceByDom=ks,t.getInstanceById=function(t){return tA[t]},t.registerTheme=Ps,t.registerPreprocessor=Ns,t.registerProcessor=Os,t.registerPostUpdate=function(t){KT.push(t)},t.registerAction=Es,t.registerCoordinateSystem=Rs,t.getCoordinateSystemDimensions=function(t){var e=Fa.get(t);if(e)return e.getDimensionsInfo?e.getDimensionsInfo():e.dimensions.slice()},t.registerLayout=zs,t.registerVisual=Bs,t.registerLoading=Gs,t.extendComponentModel=Fs,t.extendComponentView=Ws,t.extendSeriesModel=Hs,t.extendChartView=Zs,t.setCanvasCreator=function(t){e("createCanvas",t)},t.registerMap=function(t,e,i){DT.registerMap(t,e,i)},t.getMap=function(t){var e=DT.retrieveMap(t);return e&&e[0]&&{geoJson:e[0].geoJSON,specialAreas:e[0].specialAreas}},t.dataTool=rA,t.zrender=Hb,t.number=YM,t.format=eI,t.throttle=Pr,t.helper=tD,t.matrix=Sw,t.vector=cw,t.color=Ww,t.parseGeoJSON=iD,t.parseGeoJson=rD,t.util=sD,t.graphic=lD,t.List=vA,t.Model=No,t.Axis=aD,t.env=U_}); \ No newline at end of file diff --git a/uni_modules/srh-convertPath/changelog.md b/uni_modules/srh-convertPath/changelog.md new file mode 100644 index 0000000..54b106a --- /dev/null +++ b/uni_modules/srh-convertPath/changelog.md @@ -0,0 +1,2 @@ +## 1.0.0(2025-08-21) +1.0.0 diff --git a/uni_modules/srh-convertPath/package.json b/uni_modules/srh-convertPath/package.json new file mode 100644 index 0000000..fe9663c --- /dev/null +++ b/uni_modules/srh-convertPath/package.json @@ -0,0 +1,97 @@ +{ + "id": "srh-convertPath", + "displayName": "路径转换", + "version": "1.0.0", + "description": "将本地URL路径转换成平台绝对路径", + "keywords": [ + "路径转换", + "将本地URL路径转换成平台绝对路径" +], + "repository": "", +"engines": { + "uni-app": "^4.62", + "uni-app-x": "^4.72" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "√" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "-", + "vue3": "-" + }, + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": "√", + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "-", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "√", + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "-" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/srh-convertPath/readme.md b/uni_modules/srh-convertPath/readme.md new file mode 100644 index 0000000..5b5f272 --- /dev/null +++ b/uni_modules/srh-convertPath/readme.md @@ -0,0 +1,7 @@ +# srh-convertLocalFileSystemURL +### 开发文档 +[UTS 语法](https://uniapp.dcloud.net.cn/tutorial/syntax-uts.html) +[UTS API插件](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html) +[UTS uni-app兼容模式组件](https://uniapp.dcloud.net.cn/plugin/uts-component.html) +[UTS 标准模式组件](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-vue-component.html) +[Hello UTS](https://gitcode.net/dcloud/hello-uts) \ No newline at end of file diff --git a/uni_modules/srh-convertPath/utssdk/app-android/index.uts b/uni_modules/srh-convertPath/utssdk/app-android/index.uts new file mode 100644 index 0000000..cbb6fdc --- /dev/null +++ b/uni_modules/srh-convertPath/utssdk/app-android/index.uts @@ -0,0 +1,4 @@ +export async function convertLocalFileSystemURL(filePath?: string):Promise { + if(!filePath) return null; + return UTSAndroid.convert2AbsFullPath(filePath) +} \ No newline at end of file diff --git a/uni_modules/srh-convertPath/utssdk/app-harmony/index.uts b/uni_modules/srh-convertPath/utssdk/app-harmony/index.uts new file mode 100644 index 0000000..3a31c01 --- /dev/null +++ b/uni_modules/srh-convertPath/utssdk/app-harmony/index.uts @@ -0,0 +1,4 @@ +export async function convertLocalFileSystemURL(filePath?:string):Promise { + if(!filePath) return null; + return UTSHarmony.convert2AbsFullPath(filePath) +} \ No newline at end of file diff --git a/uni_modules/srh-convertPath/utssdk/app-ios/index.uts b/uni_modules/srh-convertPath/utssdk/app-ios/index.uts new file mode 100644 index 0000000..ef91a03 --- /dev/null +++ b/uni_modules/srh-convertPath/utssdk/app-ios/index.uts @@ -0,0 +1,4 @@ +export async function convertLocalFileSystemURL(filePath?: string):Promise { + if(!filePath) return null; + return UTSiOS.convert2AbsFullPath(filePath) +} \ No newline at end of file diff --git a/uni_modules/srh-convertPath/utssdk/interface.uts b/uni_modules/srh-convertPath/utssdk/interface.uts new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/srh-convertPath/utssdk/unierror.uts b/uni_modules/srh-convertPath/utssdk/unierror.uts new file mode 100644 index 0000000..ee086ef --- /dev/null +++ b/uni_modules/srh-convertPath/utssdk/unierror.uts @@ -0,0 +1,39 @@ +/* 此规范为 uni 规范,可以按照自己的需要选择是否实现 */ +import { MyApiErrorCode, MyApiFail } from "./interface.uts" +/** + * 错误主题 + * 注意:错误主题一般为插件名称,每个组件不同,需要使用时请更改。 + * [可选实现] + */ +export const UniErrorSubject = 'uts-api'; + + +/** + * 错误信息 + * @UniError + * [可选实现] + */ +export const MyAPIErrors : Map = new Map([ + /** + * 错误码及对应的错误信息 + */ + [9010001, 'custom error mseeage1'], + [9010002, 'custom error mseeage2'], +]); + + +/** + * 错误对象实现 + */ +export class MyApiFailImpl extends UniError implements MyApiFail { + + /** + * 错误对象构造函数 + */ + constructor(errCode : MyApiErrorCode) { + super(); + this.errSubject = UniErrorSubject; + this.errCode = errCode; + this.errMsg = MyAPIErrors.get(errCode) ?? ""; + } +} diff --git a/uni_modules/srh-convertPath/使用说明.md b/uni_modules/srh-convertPath/使用说明.md new file mode 100644 index 0000000..6a3d2af --- /dev/null +++ b/uni_modules/srh-convertPath/使用说明.md @@ -0,0 +1,6 @@ + +```javascript +import { convertLocalFileSystemURL } from '@/uni_modules/srh-convertPath'; +convertLocalFileSystemURL(filePath); + +``` \ No newline at end of file diff --git a/uni_modules/uni-badge/changelog.md b/uni_modules/uni-badge/changelog.md new file mode 100644 index 0000000..e352c60 --- /dev/null +++ b/uni_modules/uni-badge/changelog.md @@ -0,0 +1,33 @@ +## 1.2.2(2023-01-28) +- 修复 运行/打包 控制台警告问题 +## 1.2.1(2022-09-05) +- 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473) +## 1.2.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-badge](https://uniapp.dcloud.io/component/uniui/uni-badge) +## 1.1.7(2021-11-08) +- 优化 升级ui +- 修改 size 属性默认值调整为 small +- 修改 type 属性,默认值调整为 error,info 替换 default +## 1.1.6(2021-09-22) +- 修复 在字节小程序上样式不生效的 bug +## 1.1.5(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.4(2021-07-29) +- 修复 去掉 nvue 不支持css 的 align-self 属性,nvue 下不暂支持 absolute 属性 +## 1.1.3(2021-06-24) +- 优化 示例项目 +## 1.1.1(2021-05-12) +- 新增 组件示例地址 +## 1.1.0(2021-05-12) +- 新增 uni-badge 的 absolute 属性,支持定位 +- 新增 uni-badge 的 offset 属性,支持定位偏移 +- 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点 +- 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+ +- 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式 +## 1.0.7(2021-05-07) +- 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug +- 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug +- 新增 uni-badge 属性 custom-style, 支持自定义样式 +## 1.0.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-badge/components/uni-badge/uni-badge.vue b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue new file mode 100644 index 0000000..956354b --- /dev/null +++ b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/uni_modules/uni-badge/package.json b/uni_modules/uni-badge/package.json new file mode 100644 index 0000000..b0bac93 --- /dev/null +++ b/uni_modules/uni-badge/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-badge", + "displayName": "uni-badge 数字角标", + "version": "1.2.2", + "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。", + "keywords": [ + "", + "badge", + "uni-ui", + "uniui", + "数字角标", + "徽章" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-badge/readme.md b/uni_modules/uni-badge/readme.md new file mode 100644 index 0000000..bdf175d --- /dev/null +++ b/uni_modules/uni-badge/readme.md @@ -0,0 +1,10 @@ +## Badge 数字角标 +> **组件名:uni-badge** +> 代码块: `uBadge` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-badge) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-breadcrumb/changelog.md b/uni_modules/uni-breadcrumb/changelog.md new file mode 100644 index 0000000..209e5c5 --- /dev/null +++ b/uni_modules/uni-breadcrumb/changelog.md @@ -0,0 +1,6 @@ +## 0.1.2(2022-06-08) +- 修复 微信小程序 separator 不显示的Bug +## 0.1.1(2022-06-02) +- 新增 支持 uni.scss 修改颜色 +## 0.1.0(2022-04-21) +- 初始化 diff --git a/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue b/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue new file mode 100644 index 0000000..b9edbd6 --- /dev/null +++ b/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue @@ -0,0 +1,121 @@ + + + diff --git a/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue b/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue new file mode 100644 index 0000000..94493a2 --- /dev/null +++ b/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue @@ -0,0 +1,41 @@ + + + diff --git a/uni_modules/uni-breadcrumb/package.json b/uni_modules/uni-breadcrumb/package.json new file mode 100644 index 0000000..0a04e50 --- /dev/null +++ b/uni_modules/uni-breadcrumb/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-breadcrumb", + "displayName": "uni-breadcrumb 面包屑", + "version": "0.1.2", + "description": "Breadcrumb 面包屑", + "keywords": [ + "uni-breadcrumb", + "breadcrumb", + "uni-ui", + "面包屑导航", + "面包屑" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} diff --git a/uni_modules/uni-breadcrumb/readme.md b/uni_modules/uni-breadcrumb/readme.md new file mode 100644 index 0000000..6976b8d --- /dev/null +++ b/uni_modules/uni-breadcrumb/readme.md @@ -0,0 +1,66 @@ + +## breadcrumb 面包屑导航 +> **组件名:uni-breadcrumb** +> 代码块: `ubreadcrumb` + +显示当前页面的路径,快速返回之前的任意页面。 + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + {{route.name}} + +``` + +```js +export default { + name: "uni-stat-breadcrumb", + data() { + return { + routes: [{ + to: '/A', + name: 'A页面' + }, { + to: '/B', + name: 'B页面' + }, { + to: '/C', + name: 'C页面' + }] + }; + } + } +``` + + +## API + +### Breadcrumb Props + +|属性名 |类型 |默认值 |说明 | +|:-: |:-: |:-: |:-: | +|separator |String |斜杠'/' |分隔符 | +|separatorClass |String | |图标分隔符 class | + +### Breadcrumb Item Props + +|属性名 |类型 |默认值 |说明 | +|:-: |:-: |:-: |:-: | +|to |String | |路由跳转页面路径 | +|replace|Boolean | |在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持) | + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb](https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb) \ No newline at end of file diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md new file mode 100644 index 0000000..f291eec --- /dev/null +++ b/uni_modules/uni-calendar/changelog.md @@ -0,0 +1,26 @@ +## 1.4.10(2023-04-10) +- 修复 某些情况 monthSwitch 未触发的Bug +## 1.4.9(2023-02-02) +- 修复 某些情况切换月份错误的Bug +## 1.4.8(2023-01-30) +- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/161964) +## 1.4.7(2022-09-16) +- 优化 支持使用 uni-scss 控制主题色 +## 1.4.6(2022-09-08) +- 修复 表头年月切换,导致改变当前日期为选择月1号,且未触发change事件的Bug +## 1.4.5(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式的Bug +## 1.4.4(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式的Bug +## 1.4.3(2021-09-22) +- 修复 startDate、 endDate 属性失效的Bug +## 1.4.2(2021-08-24) +- 新增 支持国际化 +## 1.4.1(2021-08-05) +- 修复 弹出层被 tabbar 遮盖的Bug +## 1.4.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.3.16(2021-05-12) +- 新增 组件示例地址 +## 1.3.15(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-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/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json new file mode 100644 index 0000000..fcbd13c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "ok", + "uni-calender.cancel": "cancel", + "uni-calender.today": "today", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/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/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json new file mode 100644 index 0000000..1ca43de --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "确定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json new file mode 100644 index 0000000..e0fe33b --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "確定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..7e5865e --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..17c958d --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,566 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js new file mode 100644 index 0000000..5ec8a92 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/util.js @@ -0,0 +1,360 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + 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 multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + 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() + } + 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 + } + } + + + /** + * 获取日期范围内所有日期 + * @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) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.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 diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json new file mode 100644 index 0000000..fad841f --- /dev/null +++ b/uni_modules/uni-calendar/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-calendar", + "displayName": "uni-calendar 日历", + "version": "1.4.10", + "description": "日历组件", + "keywords": [ + "uni-ui", + "uniui", + "日历", + "", + "打卡", + "日历选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-calendar/readme.md b/uni_modules/uni-calendar/readme.md new file mode 100644 index 0000000..4e1748c --- /dev/null +++ b/uni_modules/uni-calendar/readme.md @@ -0,0 +1,103 @@ + + +## Calendar 日历 +> **组件名:uni-calendar** +> 代码块: `uCalendar` + + +日历组件 + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js) +> - 仅支持自定义组件模式 +> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date() +> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意 +> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动 + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + + +``` + +### 通过方法打开日历 + +需要设置 `insert` 为 `false` + +```html + + + + +``` + +```javascript + +export default { + data() { + return {}; + }, + methods: { + open(){ + this.$refs.calendar.open(); + }, + confirm(e) { + console.log(e); + } + } +}; + +``` + + +## API + +### Calendar Props + +| 属性名 | 类型 | 默认值| 说明 | +| - | - | - | - | +| date | String |- | 自定义当前时间,默认为今天 | +| lunar | Boolean | false | 显示农历 | +| startDate | String |- | 日期选择范围-开始日期 | +| endDate | String |- | 日期选择范围-结束日期 | +| range | Boolean | false | 范围选择 | +| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 | +|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 | +| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] | +|showMonth | Boolean | true | 是否显示月份为背景 | + +### Calendar Events + +| 事件名 | 说明 |返回值| +| - | - | - | +| open | 弹出日历组件,`insert :false` 时生效|- | + + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) diff --git a/uni_modules/uni-card/changelog.md b/uni_modules/uni-card/changelog.md new file mode 100644 index 0000000..c3cd8c4 --- /dev/null +++ b/uni_modules/uni-card/changelog.md @@ -0,0 +1,26 @@ +## 1.3.1(2021-12-20) +- 修复 在vue页面下略缩图显示不正常的bug +## 1.3.0(2021-11-19) +- 重构插槽的用法 ,header 替换为 title +- 新增 actions 插槽 +- 新增 cover 封面图属性和插槽 +- 新增 padding 内容默认内边距离 +- 新增 margin 卡片默认外边距离 +- 新增 spacing 卡片默认内边距 +- 新增 shadow 卡片阴影属性 +- 取消 mode 属性,可使用组合插槽代替 +- 取消 note 属性 ,使用actions插槽代替 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-card](https://uniapp.dcloud.io/component/uniui/uni-card) +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-07-01) +- 优化 图文卡片无图片加载时,提供占位图标 +- 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持) +- 修复 thumbnail 不存在仍然占位的 bug +## 1.1.7(2021-05-12) +- 新增 组件示例地址 +## 1.1.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-card/components/uni-card/uni-card.vue b/uni_modules/uni-card/components/uni-card/uni-card.vue new file mode 100644 index 0000000..88d8342 --- /dev/null +++ b/uni_modules/uni-card/components/uni-card/uni-card.vue @@ -0,0 +1,272 @@ + + + + + diff --git a/uni_modules/uni-card/package.json b/uni_modules/uni-card/package.json new file mode 100644 index 0000000..f16224d --- /dev/null +++ b/uni_modules/uni-card/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-card", + "displayName": "uni-card 卡片", + "version": "1.3.1", + "description": "Card 组件,提供常见的卡片样式。", + "keywords": [ + "uni-ui", + "uniui", + "card", + "", + "卡片" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-icons", + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-card/readme.md b/uni_modules/uni-card/readme.md new file mode 100644 index 0000000..7434e71 --- /dev/null +++ b/uni_modules/uni-card/readme.md @@ -0,0 +1,12 @@ + + +## Card 卡片 +> **组件名:uni-card** +> 代码块: `uCard` + +卡片视图组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-collapse/changelog.md b/uni_modules/uni-collapse/changelog.md new file mode 100644 index 0000000..292e4c7 --- /dev/null +++ b/uni_modules/uni-collapse/changelog.md @@ -0,0 +1,36 @@ +## 1.4.3(2022-01-25) +- 修复 初始化的时候 ,open 属性失效的bug +## 1.4.2(2022-01-21) +- 修复 微信小程序resize后组件收起的bug +## 1.4.1(2021-11-22) +- 修复 vue3中个别scss变量无法找到的问题 +## 1.4.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-collapse](https://uniapp.dcloud.io/component/uniui/uni-collapse) +## 1.3.3(2021-08-17) +- 优化 show-arrow 属性默认为true +## 1.3.2(2021-08-17) +- 新增 show-arrow 属性,控制是否显示右侧箭头 +## 1.3.1(2021-07-30) +- 优化 vue3下小程序事件警告的问题 +## 1.3.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.2(2021-07-21) +- 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug +## 1.2.1(2021-07-21) +- 优化 组件示例 +## 1.2.0(2021-07-21) +- 新增 组件折叠动画 +- 新增 value\v-model 属性 ,动态修改面板折叠状态 +- 新增 title 插槽 ,可定义面板标题 +- 新增 border 属性 ,显示隐藏面板内容分隔线 +- 新增 title-border 属性 ,显示隐藏面板标题分隔线 +- 修复 resize 方法失效的Bug +- 修复 change 事件返回参数不正确的Bug +- 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法 +## 1.1.7(2021-05-12) +- 新增 组件示例地址 +## 1.1.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.1.5(2021-02-05) +- 调整为uni_modules目录规范 \ No newline at end of file diff --git a/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue b/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue new file mode 100644 index 0000000..d62a6a7 --- /dev/null +++ b/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue @@ -0,0 +1,402 @@ + + + + + diff --git a/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue b/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue new file mode 100644 index 0000000..384c39a --- /dev/null +++ b/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue @@ -0,0 +1,147 @@ + + + diff --git a/uni_modules/uni-collapse/package.json b/uni_modules/uni-collapse/package.json new file mode 100644 index 0000000..65349cf --- /dev/null +++ b/uni_modules/uni-collapse/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-collapse", + "displayName": "uni-collapse 折叠面板", + "version": "1.4.3", + "description": "Collapse 组件,可以折叠 / 展开的内容区域。", + "keywords": [ + "uni-ui", + "折叠", + "折叠面板", + "手风琴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-collapse/readme.md b/uni_modules/uni-collapse/readme.md new file mode 100644 index 0000000..bc758eb --- /dev/null +++ b/uni_modules/uni-collapse/readme.md @@ -0,0 +1,12 @@ + + +## Collapse 折叠面板 +> **组件名:uni-collapse** +> 代码块: `uCollapse` +> 关联组件:`uni-collapse-item`、`uni-icons`。 + + +折叠面板用来折叠/显示过长的内容或者是列表。通常是在多内容分类项使用,折叠不重要的内容,显示重要内容。点击可以展开折叠部分。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-collapse) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-combox/changelog.md b/uni_modules/uni-combox/changelog.md new file mode 100644 index 0000000..23c2748 --- /dev/null +++ b/uni_modules/uni-combox/changelog.md @@ -0,0 +1,15 @@ +## 1.0.1(2021-11-23) +- 优化 label、label-width 属性 +## 1.0.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-combox](https://uniapp.dcloud.io/component/uniui/uni-combox) +## 0.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.6(2021-05-12) +- 新增 组件示例地址 +## 0.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 0.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 0.0.3(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-combox/components/uni-combox/uni-combox.vue b/uni_modules/uni-combox/components/uni-combox/uni-combox.vue new file mode 100644 index 0000000..83454e5 --- /dev/null +++ b/uni_modules/uni-combox/components/uni-combox/uni-combox.vue @@ -0,0 +1,294 @@ + + + + + diff --git a/uni_modules/uni-combox/package.json b/uni_modules/uni-combox/package.json new file mode 100644 index 0000000..4a05c3f --- /dev/null +++ b/uni_modules/uni-combox/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-combox", + "displayName": "uni-combox 组合框", + "version": "1.0.1", + "description": "可以选择也可以输入的表单项 ", + "keywords": [ + "uni-ui", + "uniui", + "combox", + "组合框", + "select" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-combox/readme.md b/uni_modules/uni-combox/readme.md new file mode 100644 index 0000000..ffa2cc8 --- /dev/null +++ b/uni_modules/uni-combox/readme.md @@ -0,0 +1,11 @@ + + +## Combox 组合框 +> **组件名:uni-combox** +> 代码块: `uCombox` + + +组合框组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-combox) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-countdown/changelog.md b/uni_modules/uni-countdown/changelog.md new file mode 100644 index 0000000..f25beef --- /dev/null +++ b/uni_modules/uni-countdown/changelog.md @@ -0,0 +1,24 @@ +## 1.2.2(2022-01-19) +- 修复 在微信小程序中样式不生效的bug +## 1.2.1(2022-01-18) +- 新增 update 方法 ,在动态更新时间后,刷新组件 +## 1.2.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-countdown](https://uniapp.dcloud.io/component/uniui/uni-countdown) +## 1.1.3(2021-10-18) +- 重构 +- 新增 font-size 支持自定义字体大小 +## 1.1.2(2021-08-24) +- 新增 支持国际化 +## 1.1.1(2021-07-30) +- 优化 vue3下小程序事件警告的问题 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-06-18) +- 修复 uni-countdown 重复赋值跳两秒的 bug +## 1.0.4(2021-05-12) +- 新增 组件示例地址 +## 1.0.3(2021-05-08) +- 修复 uni-countdown 不能控制倒计时的 bug +## 1.0.2(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json new file mode 100644 index 0000000..06309cb --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "day", + "uni-countdown.h": "h", + "uni-countdown.m": "m", + "uni-countdown.s": "s" +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js b/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/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/uni-countdown/components/uni-countdown/i18n/zh-Hans.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json new file mode 100644 index 0000000..358cdd1 --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "天", + "uni-countdown.h": "时", + "uni-countdown.m": "分", + "uni-countdown.s": "秒" +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json new file mode 100644 index 0000000..e5a63de --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "天", + "uni-countdown.h": "時", + "uni-countdown.m": "分", + "uni-countdown.s": "秒" +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue b/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue new file mode 100644 index 0000000..81a8e76 --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue @@ -0,0 +1,271 @@ + + + diff --git a/uni_modules/uni-countdown/package.json b/uni_modules/uni-countdown/package.json new file mode 100644 index 0000000..70e99ee --- /dev/null +++ b/uni_modules/uni-countdown/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-countdown", + "displayName": "uni-countdown 倒计时", + "version": "1.2.2", + "description": "CountDown 倒计时组件", + "keywords": [ + "uni-ui", + "uniui", + "countdown", + "倒计时" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-countdown/readme.md b/uni_modules/uni-countdown/readme.md new file mode 100644 index 0000000..4bcb1aa --- /dev/null +++ b/uni_modules/uni-countdown/readme.md @@ -0,0 +1,10 @@ + + +## CountDown 倒计时 +> **组件名:uni-countdown** +> 代码块: `uCountDown` + +倒计时组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-countdown) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-data-checkbox/changelog.md b/uni_modules/uni-data-checkbox/changelog.md new file mode 100644 index 0000000..c7a468a --- /dev/null +++ b/uni_modules/uni-data-checkbox/changelog.md @@ -0,0 +1,45 @@ +## 1.0.3(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 1.0.2(2022-06-30) +- 优化 在 uni-forms 中的依赖注入方式 +## 1.0.1(2022-02-07) +- 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug +## 1.0.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-data-checkbox](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox) +## 0.2.5(2021-08-23) +- 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 +## 0.2.4(2021-08-17) +- 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +## 0.2.3(2021-08-11) +- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +## 0.2.2(2021-07-30) +- 优化 在uni-forms组件,与label不对齐的问题 +## 0.2.1(2021-07-27) +- 修复 单选默认值为0不能选中的Bug +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.11(2021-07-06) +- 优化 删除无用日志 +## 0.1.10(2021-07-05) +- 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题 +## 0.1.9(2021-07-05) +- 修复 nvue 黑框样式问题 +## 0.1.8(2021-06-28) +- 修复 selectedTextColor 属性不生效的Bug +## 0.1.7(2021-06-02) +- 新增 map 属性,可以方便映射text/value属性 +## 0.1.6(2021-05-26) +- 修复 不关联服务空间的情况下组件报错的Bug +## 0.1.5(2021-05-12) +- 新增 组件示例地址 +## 0.1.4(2021-04-09) +- 修复 nvue 下无法选中的问题 +## 0.1.3(2021-03-22) +- 新增 disabled属性 +## 0.1.2(2021-02-24) +- 优化 默认颜色显示 +## 0.1.1(2021-02-24) +- 新增 支持nvue +## 0.1.0(2021-02-18) +- “暂无数据”显示居中 diff --git a/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue b/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue new file mode 100644 index 0000000..3c75d9f --- /dev/null +++ b/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue @@ -0,0 +1,821 @@ + + + + + diff --git a/uni_modules/uni-data-checkbox/package.json b/uni_modules/uni-data-checkbox/package.json new file mode 100644 index 0000000..113c350 --- /dev/null +++ b/uni_modules/uni-data-checkbox/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-data-checkbox", + "displayName": "uni-data-checkbox 数据选择器", + "version": "1.0.3", + "description": "通过数据驱动的单选框和复选框", + "keywords": [ + "uni-ui", + "checkbox", + "单选", + "多选", + "单选多选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "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-load-more","uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-data-checkbox/readme.md b/uni_modules/uni-data-checkbox/readme.md new file mode 100644 index 0000000..6eb253d --- /dev/null +++ b/uni_modules/uni-data-checkbox/readme.md @@ -0,0 +1,18 @@ + + +## DataCheckbox 数据驱动的单选复选框 +> **组件名:uni-data-checkbox** +> 代码块: `uDataCheckbox` + + +本组件是基于uni-app基础组件checkbox的封装。本组件要解决问题包括: + +1. 数据绑定型组件:给本组件绑定一个data,会自动渲染一组候选内容。再以往,开发者需要编写不少代码实现类似功能 +2. 自动的表单校验:组件绑定了data,且符合[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)组件的表单校验规范,搭配使用会自动实现表单校验 +3. 本组件合并了单选多选 +4. 本组件有若干风格选择,如普通的单选多选框、并列button风格、tag风格。开发者可以快速选择需要的风格。但作为一个封装组件,样式代码虽然不用自己写了,却会牺牲一定的样式自定义性 + +在uniCloud开发中,`DB Schema`中配置了enum枚举等类型后,在web控制台的[自动生成表单](https://uniapp.dcloud.io/uniCloud/schema?id=autocode)功能中,会自动生成``uni-data-checkbox``组件并绑定好data + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-data-picker/changelog.md b/uni_modules/uni-data-picker/changelog.md new file mode 100644 index 0000000..1dd79f7 --- /dev/null +++ b/uni_modules/uni-data-picker/changelog.md @@ -0,0 +1,75 @@ +## 1.1.2(2023-04-11) +- 修复 更改 modelValue 报错的 bug +- 修复 v-for 未使用 key 值控制台 warning +## 1.1.1(2023-02-21) +- 修复代码合并时引发 value 属性为空时不渲染数据的问题 +## 1.1.0(2023-02-15) +- 修复 localdata 不支持动态更新的bug +## 1.0.9(2023-02-15) +- 修复 localdata 不支持动态更新的bug +## 1.0.8(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 1.0.7(2022-07-06) +- 优化 pc端图标位置不正确的问题 +## 1.0.6(2022-07-05) +- 优化 显示样式 +## 1.0.5(2022-07-04) +- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +## 1.0.4(2022-04-19) +- 修复 字节小程序 本地数据无法选择下一级的Bug +## 1.0.3(2022-02-25) +- 修复 nvue 不支持的 v-show 的 bug +## 1.0.2(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.0.1(2021-11-23) +- 修复 由上个版本引发的map、v-model等属性不生效的bug +## 1.0.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-data-picker](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +## 0.4.9(2021-10-28) +- 修复 VUE2 v-model 概率无效的 bug +## 0.4.8(2021-10-27) +- 修复 v-model 概率无效的 bug +## 0.4.7(2021-10-25) +- 新增 属性 spaceInfo 服务空间配置 HBuilderX 3.2.11+ +- 修复 树型 uniCloud 数据类型为 int 时报错的 bug +## 0.4.6(2021-10-19) +- 修复 非 VUE3 v-model 为 0 时无法选中的 bug +## 0.4.5(2021-09-26) +- 新增 清除已选项的功能(通过 clearIcon 属性配置是否显示按钮),同时提供 clear 方法以供调用,二者等效 +- 修复 readonly 为 true 时报错的 bug +## 0.4.4(2021-09-26) +- 修复 上一版本造成的 map 属性失效的 bug +- 新增 ellipsis 属性,支持配置 tab 选项长度过长时是否自动省略 +## 0.4.3(2021-09-24) +- 修复 某些情况下级联未触发的 bug +## 0.4.2(2021-09-23) +- 新增 提供 show 和 hide 方法,开发者可以通过 ref 调用 +- 新增 选项内容过长自动添加省略号 +## 0.4.1(2021-09-15) +- 新增 map 属性 字段映射,将 text/value 映射到数据中的其他字段 +## 0.4.0(2021-07-13) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.3.5(2021-06-04) +- 修复 无法加载云端数据的问题 +## 0.3.4(2021-05-28) +- 修复 v-model 无效问题 +- 修复 loaddata 为空数据组时加载时间过长问题 +- 修复 上个版本引出的本地数据无法选择带有 children 的 2 级节点 +## 0.3.3(2021-05-12) +- 新增 组件示例地址 +## 0.3.2(2021-04-22) +- 修复 非树形数据有 where 属性查询报错的问题 +## 0.3.1(2021-04-15) +- 修复 本地数据概率无法回显时问题 +## 0.3.0(2021-04-07) +- 新增 支持云端非树形表结构数据 +- 修复 根节点 parent_field 字段等于 null 时选择界面错乱问题 +## 0.2.0(2021-03-15) +- 修复 nodeclick、popupopened、popupclosed 事件无法触发的问题 +## 0.1.9(2021-03-09) +- 修复 微信小程序某些情况下无法选择的问题 +## 0.1.8(2021-02-05) +- 优化 部分样式在 nvue 上的兼容表现 +## 0.1.7(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js b/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue new file mode 100644 index 0000000..179a4e0 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue @@ -0,0 +1,551 @@ + + + + + diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js new file mode 100644 index 0000000..cfae22a --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js @@ -0,0 +1,622 @@ +export default { + props: { + localdata: { + type: [Array, Object], + default () { + return [] + } + }, + spaceInfo: { + type: Object, + default () { + return {} + } + }, + collection: { + type: String, + default: '' + }, + action: { + type: String, + default: '' + }, + field: { + type: String, + default: '' + }, + orderby: { + type: String, + default: '' + }, + where: { + type: [String, Object], + default: '' + }, + pageData: { + type: String, + default: 'add' + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 500 + }, + getcount: { + type: [Boolean, String], + default: false + }, + getone: { + type: [Boolean, String], + default: false + }, + gettree: { + type: [Boolean, String], + default: false + }, + manual: { + type: Boolean, + default: false + }, + value: { + type: [Array, String, Number], + default () { + return [] + } + }, + modelValue: { + type: [Array, String, Number], + default () { + return [] + } + }, + preload: { + type: Boolean, + default: false + }, + stepSearh: { + type: Boolean, + default: true + }, + selfField: { + type: String, + default: '' + }, + parentField: { + type: String, + default: '' + }, + multiple: { + type: Boolean, + default: false + }, + map: { + type: Object, + default () { + return { + text: "text", + value: "value" + } + } + } + }, + data() { + return { + loading: false, + errorMessage: '', + loadMore: { + contentdown: '', + contentrefresh: '', + contentnomore: '' + }, + dataList: [], + selected: [], + selectedIndex: 0, + page: { + current: this.pageCurrent, + size: this.pageSize, + count: 0 + } + } + }, + computed: { + isLocalData() { + return !this.collection.length; + }, + isCloudData() { + return this.collection.length > 0; + }, + isCloudDataList() { + return (this.isCloudData && (!this.parentField && !this.selfField)); + }, + isCloudDataTree() { + return (this.isCloudData && this.parentField && this.selfField); + }, + dataValue() { + let isModelValue = Array.isArray(this.modelValue) ? (this.modelValue.length > 0) : (this.modelValue !== null || + this.modelValue !== undefined); + return isModelValue ? this.modelValue : this.value; + }, + hasValue() { + if (typeof this.dataValue === 'number') { + return true + } + return (this.dataValue != null) && (this.dataValue.length > 0) + } + }, + created() { + this.$watch(() => { + var al = []; + ['pageCurrent', + 'pageSize', + 'spaceInfo', + 'value', + 'modelValue', + 'localdata', + 'collection', + 'action', + 'field', + 'orderby', + 'where', + 'getont', + 'getcount', + 'gettree' + ].forEach(key => { + al.push(this[key]) + }); + return al + }, (newValue, oldValue) => { + let needReset = false + for (let i = 2; i < newValue.length; i++) { + if (newValue[i] != oldValue[i]) { + needReset = true + break + } + } + if (newValue[0] != oldValue[0]) { + this.page.current = this.pageCurrent + } + this.page.size = this.pageSize + + this.onPropsChange() + }) + this._treeData = [] + }, + methods: { + onPropsChange() { + this._treeData = []; + }, + + // 填充 pickview 数据 + async loadData() { + if (this.isLocalData) { + this.loadLocalData(); + } else if (this.isCloudDataList) { + this.loadCloudDataList(); + } else if (this.isCloudDataTree) { + this.loadCloudDataTree(); + } + }, + + // 加载本地数据 + async loadLocalData() { + this._treeData = []; + this._extractTree(this.localdata, this._treeData); + + let inputValue = this.dataValue; + if (inputValue === undefined) { + return; + } + + if (Array.isArray(inputValue)) { + inputValue = inputValue[inputValue.length - 1]; + if (typeof inputValue === 'object' && inputValue[this.map.value]) { + inputValue = inputValue[this.map.value]; + } + } + + this.selected = this._findNodePath(inputValue, this.localdata); + }, + + // 加载 Cloud 数据 (单列) + async loadCloudDataList() { + if (this.loading) { + return; + } + this.loading = true; + + try { + let response = await this.getCommand(); + let responseData = response.result.data; + + this._treeData = responseData; + + this._updateBindData(); + this._updateSelected(); + + this.onDataChange(); + } catch (e) { + this.errorMessage = e; + } finally { + this.loading = false; + } + }, + + // 加载 Cloud 数据 (树形) + async loadCloudDataTree() { + if (this.loading) { + return; + } + this.loading = true; + + try { + let commandOptions = { + field: this._cloudDataPostField(), + where: this._cloudDataTreeWhere() + }; + if (this.gettree) { + commandOptions.startwith = `${this.selfField}=='${this.dataValue}'`; + } + + let response = await this.getCommand(commandOptions); + let responseData = response.result.data; + + this._treeData = responseData; + this._updateBindData(); + this._updateSelected(); + + this.onDataChange(); + } catch (e) { + this.errorMessage = e; + } finally { + this.loading = false; + } + }, + + // 加载 Cloud 数据 (节点) + async loadCloudDataNode(callback) { + if (this.loading) { + return; + } + this.loading = true; + + try { + let commandOptions = { + field: this._cloudDataPostField(), + where: this._cloudDataNodeWhere() + }; + + let response = await this.getCommand(commandOptions); + let responseData = response.result.data; + + callback(responseData); + } catch (e) { + this.errorMessage = e; + } finally { + this.loading = false; + } + }, + + // 回显 Cloud 数据 + getCloudDataValue() { + if (this.isCloudDataList) { + return this.getCloudDataListValue(); + } + + if (this.isCloudDataTree) { + return this.getCloudDataTreeValue(); + } + }, + + // 回显 Cloud 数据 (单列) + getCloudDataListValue() { + // 根据 field's as value标识匹配 where 条件 + let where = []; + let whereField = this._getForeignKeyByField(); + if (whereField) { + where.push(`${whereField} == '${this.dataValue}'`) + } + + where = where.join(' || '); + + if (this.where) { + where = `(${this.where}) && (${where})` + } + + return this.getCommand({ + field: this._cloudDataPostField(), + where + }).then((res) => { + this.selected = res.result.data; + return res.result.data; + }); + }, + + // 回显 Cloud 数据 (树形) + getCloudDataTreeValue() { + return this.getCommand({ + field: this._cloudDataPostField(), + getTreePath: { + startWith: `${this.selfField}=='${this.dataValue}'` + } + }).then((res) => { + let treePath = []; + this._extractTreePath(res.result.data, treePath); + this.selected = treePath; + return treePath; + }); + }, + + getCommand(options = {}) { + /* eslint-disable no-undef */ + let db = uniCloud.database(this.spaceInfo) + + const action = options.action || this.action + if (action) { + db = db.action(action) + } + + const collection = options.collection || this.collection + db = db.collection(collection) + + const where = options.where || this.where + if (!(!where || !Object.keys(where).length)) { + db = db.where(where) + } + + const field = options.field || this.field + if (field) { + db = db.field(field) + } + + const orderby = options.orderby || this.orderby + if (orderby) { + db = db.orderBy(orderby) + } + + const current = options.pageCurrent !== undefined ? options.pageCurrent : this.page.current + const size = options.pageSize !== undefined ? options.pageSize : this.page.size + const getCount = options.getcount !== undefined ? options.getcount : this.getcount + const getTree = options.gettree !== undefined ? options.gettree : this.gettree + + const getOptions = { + getCount, + getTree + } + if (options.getTreePath) { + getOptions.getTreePath = options.getTreePath + } + + db = db.skip(size * (current - 1)).limit(size).get(getOptions) + + return db + }, + + _cloudDataPostField() { + let fields = [this.field]; + if (this.parentField) { + fields.push(`${this.parentField} as parent_value`); + } + return fields.join(','); + }, + + _cloudDataTreeWhere() { + let result = [] + let selected = this.selected + let parentField = this.parentField + if (parentField) { + result.push(`${parentField} == null || ${parentField} == ""`) + } + if (selected.length) { + for (var i = 0; i < selected.length - 1; i++) { + result.push(`${parentField} == '${selected[i].value}'`) + } + } + + let where = [] + if (this.where) { + where.push(`(${this.where})`) + } + + if (result.length) { + where.push(`(${result.join(' || ')})`) + } + + return where.join(' && ') + }, + + _cloudDataNodeWhere() { + let where = [] + let selected = this.selected; + if (selected.length) { + where.push(`${this.parentField} == '${selected[selected.length - 1].value}'`); + } + + where = where.join(' || '); + + if (this.where) { + return `(${this.where}) && (${where})` + } + + return where + }, + + _getWhereByForeignKey() { + let result = [] + let whereField = this._getForeignKeyByField(); + if (whereField) { + result.push(`${whereField} == '${this.dataValue}'`) + } + + if (this.where) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + + _getForeignKeyByField() { + let fields = this.field.split(','); + let whereField = null; + for (let i = 0; i < fields.length; i++) { + const items = fields[i].split('as'); + if (items.length < 2) { + continue; + } + if (items[1].trim() === 'value') { + whereField = items[0].trim(); + break; + } + } + return whereField; + }, + + _updateBindData(node) { + const { + dataList, + hasNodes + } = this._filterData(this._treeData, this.selected) + + let isleaf = this._stepSearh === false && !hasNodes + + if (node) { + node.isleaf = isleaf + } + + this.dataList = dataList + this.selectedIndex = dataList.length - 1 + + if (!isleaf && this.selected.length < dataList.length) { + this.selected.push({ + value: null, + text: "请选择" + }) + } + + return { + isleaf, + hasNodes + } + }, + + _updateSelected() { + let dl = this.dataList + let sl = this.selected + let textField = this.map.text + let valueField = this.map.value + for (let i = 0; i < sl.length; i++) { + let value = sl[i].value + let dl2 = dl[i] + for (let j = 0; j < dl2.length; j++) { + let item2 = dl2[j] + if (item2[valueField] === value) { + sl[i].text = item2[textField] + break + } + } + } + }, + + _filterData(data, paths) { + let dataList = [] + let hasNodes = true + + dataList.push(data.filter((item) => { + return (item.parent_value === null || item.parent_value === undefined || item.parent_value === '') + })) + for (let i = 0; i < paths.length; i++) { + let value = paths[i].value + let nodes = data.filter((item) => { + return item.parent_value === value + }) + + if (nodes.length) { + dataList.push(nodes) + } else { + hasNodes = false + } + } + + return { + dataList, + hasNodes + } + }, + + _extractTree(nodes, result, parent_value) { + let list = result || [] + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + if (parent_value !== null && parent_value !== undefined && parent_value !== '') { + child.parent_value = parent_value + } + result.push(child) + + let children = node.children + if (children) { + this._extractTree(children, result, node[valueField]) + } + } + }, + + _extractTreePath(nodes, result) { + let list = result || [] + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + result.push(child) + + let children = node.children + if (children) { + this._extractTreePath(children, result) + } + } + }, + + _findNodePath(key, nodes, path = []) { + let textField = this.map.text + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + let children = node.children + let text = node[textField] + let value = node[valueField] + + path.push({ + value, + text + }) + + if (value === key) { + return path + } + + if (children) { + const p = this._findNodePath(key, children, path) + if (p.length) { + return p + } + } + + path.pop() + } + return [] + } + } +} diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue new file mode 100644 index 0000000..14dca89 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/uni_modules/uni-data-picker/package.json b/uni_modules/uni-data-picker/package.json new file mode 100644 index 0000000..038f9ce --- /dev/null +++ b/uni_modules/uni-data-picker/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-data-picker", + "displayName": "uni-data-picker 数据驱动的picker选择器", + "version": "1.1.2", + "description": "单列、多列级联选择器,常用于省市区城市选择、公司部门选择、多级分类等场景", + "keywords": [ + "uni-ui", + "uniui", + "picker", + "级联", + "省市区", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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-load-more", + "uni-icons", + "uni-scss" + ], + "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", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-data-picker/readme.md b/uni_modules/uni-data-picker/readme.md new file mode 100644 index 0000000..6cda224 --- /dev/null +++ b/uni_modules/uni-data-picker/readme.md @@ -0,0 +1,22 @@ +## DataPicker 级联选择 +> **组件名:uni-data-picker** +> 代码块: `uDataPicker` +> 关联组件:`uni-data-pickerview`、`uni-load-more`。 + + +`` 是一个选择类[datacom组件](https://uniapp.dcloud.net.cn/component/datacom)。 + +支持单列、和多列级联选择。列数没有限制,如果屏幕显示不全,顶部tab区域会左右滚动。 + +候选数据支持一次性加载完毕,也支持懒加载,比如示例图中,选择了“北京”后,动态加载北京的区县数据。 + +`` 组件尤其适用于地址选择、分类选择等选择类。 + +`` 支持本地数据、云端静态数据(json),uniCloud云数据库数据。 + +`` 可以通过JQL直连uniCloud云数据库,配套[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema),可在schema2code中自动生成前端页面,还支持服务器端校验。 + +在uniCloud数据表中新建表“uni-id-address”和“opendb-city-china”,这2个表的schema自带foreignKey关联。在“uni-id-address”表的表结构页面使用schema2code生成前端页面,会自动生成地址管理的维护页面,自动从“opendb-city-china”表包含的中国所有省市区信息里选择地址。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md new file mode 100644 index 0000000..eb3d1ce --- /dev/null +++ b/uni_modules/uni-data-select/changelog.md @@ -0,0 +1,35 @@ +## 1.0.6(2023-04-12) +- 修复 微信小程序点击时会改变背景颜色的 bug +## 1.0.5(2023-02-03) +- 修复 禁用时会显示清空按钮 +## 1.0.4(2023-02-02) +- 优化 查询条件短期内多次变更只查询最后一次变更后的结果 +- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue +## 1.0.3(2023-01-16) +- 修复 不关联服务空间报错的问题 +## 1.0.2(2023-01-14) +- 新增 属性 `format` 可用于格式化显示选项内容 +## 1.0.1(2022-12-06) +- 修复 当where变化时,数据不会自动更新的问题 +## 0.1.9(2022-09-05) +- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框 +## 0.1.8(2022-08-29) +- 修复 点击的位置不准确 +## 0.1.7(2022-08-12) +- 新增 支持 disabled 属性 +## 0.1.6(2022-07-06) +- 修复 pc端宽度异常的bug +## 0.1.5 +- 修复 pc端宽度异常的bug +## 0.1.4(2022-07-05) +- 优化 显示样式 +## 0.1.3(2022-06-02) +- 修复 localdata 赋值不生效的 bug +- 新增 支持 uni.scss 修改颜色 +- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用) +## 0.1.2(2022-05-08) +- 修复 当 value 为 0 时选择不生效的 bug +## 0.1.1(2022-05-07) +- 新增 记住上次的选项(仅 collection 存在时有效) +## 0.1.0(2022-04-22) +- 初始化 diff --git a/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue new file mode 100644 index 0000000..b20a89a --- /dev/null +++ b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue @@ -0,0 +1,517 @@ + + + + + diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json new file mode 100644 index 0000000..0187429 --- /dev/null +++ b/uni_modules/uni-data-select/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-data-select", + "displayName": "uni-data-select 下拉框选择器", + "version": "1.0.6", + "description": "通过数据驱动的下拉框选择器", + "keywords": [ + "uni-ui", + "select", + "uni-data-select", + "下拉框", + "下拉选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "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-load-more"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "n" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-data-select/readme.md b/uni_modules/uni-data-select/readme.md new file mode 100644 index 0000000..eb58de3 --- /dev/null +++ b/uni_modules/uni-data-select/readme.md @@ -0,0 +1,8 @@ +## DataSelect 下拉框选择器 +> **组件名:uni-data-select** +> 代码块: `uDataSelect` + +当选项过多时,使用下拉菜单展示并选择内容 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-dateformat/changelog.md b/uni_modules/uni-dateformat/changelog.md new file mode 100644 index 0000000..d551d7b --- /dev/null +++ b/uni_modules/uni-dateformat/changelog.md @@ -0,0 +1,10 @@ +## 1.0.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-dateformat](https://uniapp.dcloud.io/component/uniui/uni-dateformat) +## 0.0.5(2021-07-08) +- 调整 默认时间不再是当前时间,而是显示'-'字符 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-04) +- 调整为uni_modules目录规范 +- 修复 iOS 平台日期格式化出错的问题 diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js new file mode 100644 index 0000000..e00d559 --- /dev/null +++ b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js @@ -0,0 +1,200 @@ +// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型 +function pad(str, length = 2) { + str += '' + while (str.length < length) { + str = '0' + str + } + return str.slice(-length) +} + +const parser = { + yyyy: (dateObj) => { + return pad(dateObj.year, 4) + }, + yy: (dateObj) => { + return pad(dateObj.year) + }, + MM: (dateObj) => { + return pad(dateObj.month) + }, + M: (dateObj) => { + return dateObj.month + }, + dd: (dateObj) => { + return pad(dateObj.day) + }, + d: (dateObj) => { + return dateObj.day + }, + hh: (dateObj) => { + return pad(dateObj.hour) + }, + h: (dateObj) => { + return dateObj.hour + }, + mm: (dateObj) => { + return pad(dateObj.minute) + }, + m: (dateObj) => { + return dateObj.minute + }, + ss: (dateObj) => { + return pad(dateObj.second) + }, + s: (dateObj) => { + return dateObj.second + }, + SSS: (dateObj) => { + return pad(dateObj.millisecond, 3) + }, + S: (dateObj) => { + return dateObj.millisecond + }, +} + +// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12 +function getDate(time) { + if (time instanceof Date) { + return time + } + switch (typeof time) { + case 'string': + { + // 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000 + if (time.indexOf('T') > -1) { + return new Date(time) + } + return new Date(time.replace(/-/g, '/')) + } + default: + return new Date(time) + } +} + +export function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') { + if (!date && date !== 0) { + return '' + } + date = getDate(date) + const dateObj = { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate(), + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds(), + millisecond: date.getMilliseconds() + } + const tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/ + let flag = true + let result = format + while (flag) { + flag = false + result = result.replace(tokenRegExp, function(matched) { + flag = true + return parser[matched](dateObj) + }) + } + return result +} + +export function friendlyDate(time, { + locale = 'zh', + threshold = [60000, 3600000], + format = 'yyyy/MM/dd hh:mm:ss' +}) { + if (time === '-') { + return time + } + if (!time && time !== 0) { + return '' + } + const localeText = { + zh: { + year: '年', + month: '月', + day: '天', + hour: '小时', + minute: '分钟', + second: '秒', + ago: '前', + later: '后', + justNow: '刚刚', + soon: '马上', + template: '{num}{unit}{suffix}' + }, + en: { + year: 'year', + month: 'month', + day: 'day', + hour: 'hour', + minute: 'minute', + second: 'second', + ago: 'ago', + later: 'later', + justNow: 'just now', + soon: 'soon', + template: '{num} {unit} {suffix}' + } + } + const text = localeText[locale] || localeText.zh + let date = getDate(time) + let ms = date.getTime() - Date.now() + let absMs = Math.abs(ms) + if (absMs < threshold[0]) { + return ms < 0 ? text.justNow : text.soon + } + if (absMs >= threshold[1]) { + return formatDate(date, format) + } + let num + let unit + let suffix = text.later + if (ms < 0) { + suffix = text.ago + ms = -ms + } + const seconds = Math.floor((ms) / 1000) + const minutes = Math.floor(seconds / 60) + const hours = Math.floor(minutes / 60) + const days = Math.floor(hours / 24) + const months = Math.floor(days / 30) + const years = Math.floor(months / 12) + switch (true) { + case years > 0: + num = years + unit = text.year + break + case months > 0: + num = months + unit = text.month + break + case days > 0: + num = days + unit = text.day + break + case hours > 0: + num = hours + unit = text.hour + break + case minutes > 0: + num = minutes + unit = text.minute + break + default: + num = seconds + unit = text.second + break + } + + if (locale === 'en') { + if (num === 1) { + num = 'a' + } else { + unit += 's' + } + } + + return text.template.replace(/{\s*num\s*}/g, num + '').replace(/{\s*unit\s*}/g, unit).replace(/{\s*suffix\s*}/g, + suffix) +} diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue new file mode 100644 index 0000000..c5ed030 --- /dev/null +++ b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/uni_modules/uni-dateformat/package.json b/uni_modules/uni-dateformat/package.json new file mode 100644 index 0000000..786a670 --- /dev/null +++ b/uni_modules/uni-dateformat/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-dateformat", + "displayName": "uni-dateformat 日期格式化", + "version": "1.0.0", + "description": "日期格式化组件,可以将日期格式化为1分钟前、刚刚等形式", + "keywords": [ + "uni-ui", + "uniui", + "日期格式化", + "时间格式化", + "格式化时间", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-dateformat/readme.md b/uni_modules/uni-dateformat/readme.md new file mode 100644 index 0000000..37ddb6e --- /dev/null +++ b/uni_modules/uni-dateformat/readme.md @@ -0,0 +1,11 @@ + + +### DateFormat 日期格式化 +> **组件名:uni-dateformat** +> 代码块: `uDateformat` + + +日期格式化组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-dateformat) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..e606c4d --- /dev/null +++ b/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,169 @@ +## 2.2.40(2025-04-14) +- 修复 绑定字符串值的时,日历面板选中状态未重置到默认值的问题 +## 2.2.39(2025-04-14) +- 修复 在 iOS 微信小程序上type='daterange'时,传入'YYYY-MM-DD'格式不生效的问题 + +## 2.2.38(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 2.2.35(2024-09-21) +- 修复 没有选中日期时点击确定直接报错的Bug [详情](https://ask.dcloud.net.cn/question/198168) +## 2.2.34(2024-04-24) +- 新增 日期点击事件,在点击日期时会触发该事件。 +## 2.2.33(2024-04-15) +- 修复 抖音小程序事件传递失效bug +## 2.2.32(2024-02-20) +- 修复 日历的close事件触发异常的bug [详情](https://github.com/dcloudio/uni-ui/issues/844) +## 2.2.31(2024-02-20) +- 修复 h5平台 右边日历的月份默认+1的bug [详情](https://github.com/dcloudio/uni-ui/issues/841) +## 2.2.30(2024-01-31) +- 修复 隐藏“秒”时,在IOS15及以下版本时出现 结束时间在开始时间之前 的bug [详情](https://github.com/dcloudio/uni-ui/issues/788) +## 2.2.29(2024-01-20) +- 新增 show事件,弹窗弹出时触发该事件 [详情](https://github.com/dcloudio/uni-app/issues/4694) +## 2.2.28(2024-01-18) +- 去除 noChange事件,当进行日期范围选择时,若只选了一天,则开始结束日期都为同一天 [详情](https://github.com/dcloudio/uni-ui/issues/815) +## 2.2.27(2024-01-10) +- 优化 增加noChange事件,当进行日期范围选择时,若有空值,则触发该事件 [详情](https://github.com/dcloudio/uni-ui/issues/815) +## 2.2.26(2024-01-08) +- 修复 字节小程序时间选择范围器失效问题 [详情](https://github.com/dcloudio/uni-ui/issues/834) +## 2.2.25(2023-10-18) +- 修复 PC端初次修改时间,开始时间未更新的Bug [详情](https://github.com/dcloudio/uni-ui/issues/737) +## 2.2.24(2023-06-02) +- 修复 部分情况修改时间,开始、结束时间显示异常的Bug [详情](https://ask.dcloud.net.cn/question/171146) +- 优化 当前月可以选择上月、下月的日期的Bug +## 2.2.23(2023-05-02) +- 修复 部分情况修改时间,开始时间未更新的Bug [详情](https://github.com/dcloudio/uni-ui/issues/737) +- 修复 部分平台及设备第一次点击无法显示弹框的Bug +- 修复 ios 日期格式未补零显示及使用异常的Bug [详情](https://ask.dcloud.net.cn/question/162979) +## 2.2.22(2023-03-30) +- 修复 日历 picker 修改年月后,自动选中当月1日的Bug [详情](https://ask.dcloud.net.cn/question/165937) +- 修复 小程序端 低版本 ios NaN的Bug [详情](https://ask.dcloud.net.cn/question/162979) +## 2.2.21(2023-02-20) +- 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362) +## 2.2.20(2023-02-17) +- 优化 值为空依然选中当天问题 +- 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间 +- 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间 +- 优化 字节小程序日期时间范围选择,底部日期换行的Bug +## 2.2.19(2023-02-09) +- 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686) +## 2.2.18(2023-02-08) +- 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684) +- 优化 PC端输入日期格式错误时返回当前日期时间 +- 优化 PC端输入日期时间超出 start、end 限制的Bug +- 优化 移动端日期时间范围用法时间展示不完整问题 +## 2.2.17(2023-02-04) +- 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679) +- 修复 vue3 time-picker 无法显示绑定时分秒的Bug +## 2.2.16(2023-02-02) +- 修复 字节小程序报错的Bug +## 2.2.15(2023-02-02) +- 修复 某些情况切换月份错误的Bug +## 2.2.14(2023-01-30) +- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/162033) +## 2.2.13(2023-01-10) +- 修复 多次加载组件造成内存占用的Bug +## 2.2.12(2022-12-01) +- 修复 vue3 下 i18n 国际化初始值不正确的Bug +## 2.2.11(2022-09-19) +- 修复 支付宝小程序样式错乱的Bug [详情](https://github.com/dcloudio/uni-app/issues/3861) +## 2.2.10(2022-09-19) +- 修复 反向选择日期范围,日期显示异常的Bug [详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +## 2.2.9(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 2.2.8(2022-09-08) +- 修复 close事件无效的Bug +## 2.2.7(2022-09-05) +- 修复 移动端 maskClick 无效的Bug [详情](https://ask.dcloud.net.cn/question/140824) +## 2.2.6(2022-06-30) +- 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +## 2.2.5(2022-06-24) +- 修复 日历顶部年月及底部确认未国际化的Bug +## 2.2.4(2022-03-31) +- 修复 Vue3 下动态赋值,单选类型未响应的Bug +## 2.2.3(2022-03-28) +- 修复 Vue3 下动态赋值未响应的Bug +## 2.2.2(2021-12-10) +- 修复 clear-icon 属性在小程序平台不生效的Bug +## 2.2.1(2021-12-10) +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的Bug +## 2.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源 [详情](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移 [https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 2.1.4(2021-09-10) +- 修复 hide-second 在移动端的Bug +- 修复 单选赋默认值时,赋值日期未高亮的Bug +- 修复 赋默认值时,移动端未正确显示时间的Bug +## 2.1.3(2021-09-09) +- 新增 hide-second 属性,支持只使用时分,隐藏秒 +## 2.1.2(2021-09-03) +- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- 优化 调整字号大小,美化日历界面 +- 修复 因国际化导致的 placeholder 失效的Bug +## 2.1.1(2021-08-24) +- 新增 支持国际化 +- 优化 范围选择器在 pc 端过宽的问题 +## 2.1.0(2021-08-09) +- 新增 适配 vue3 +## 2.0.19(2021-08-09) +- 新增 支持作为 uni-forms 子组件相关功能 +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的Bug +## 2.0.18(2021-08-05) +- 修复 type 属性动态赋值无效的Bug +- 修复 ‘确认’按钮被 tabbar 遮盖 bug +- 修复 组件未赋值时范围选左、右日历相同的Bug +## 2.0.17(2021-08-04) +- 修复 范围选未正确显示当前值的Bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的Bug +## 2.0.16(2021-07-21) +- 新增 return-type 属性支持返回 date 日期对象 +## 2.0.15(2021-07-14) +- 修复 单选日期类型,初始赋值后不在当前日历的Bug +- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- 优化 移动端移除显示框的清空按钮,无实际用途 +## 2.0.14(2021-07-14) +- 修复 组件赋值为空,界面未更新的Bug +- 修复 start 和 end 不能动态赋值的Bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的Bug +## 2.0.13(2021-07-08) +- 修复 范围选择不能动态赋值的Bug +## 2.0.12(2021-07-08) +- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +## 2.0.11(2021-07-08) +- 优化 弹出层在超出视窗边缘定位不准确的问题 +## 2.0.10(2021-07-08) +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的Bug +- 优化 弹出层在超出视窗边缘被遮盖的问题 +## 2.0.9(2021-07-07) +- 新增 maskClick 事件 +- 修复 特殊情况日历 rpx 布局错误的Bug,rpx -> px +- 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +## 2.0.8(2021-07-07) +- 新增 日期时间显示框支持插槽 +## 2.0.7(2021-07-01) +- 优化 添加 uni-icons 依赖 +## 2.0.6(2021-05-22) +- 修复 图标在小程序上不显示的Bug +- 优化 重命名引用组件,避免潜在组件命名冲突 +## 2.0.5(2021-05-20) +- 优化 代码目录扁平化 +## 2.0.4(2021-05-12) +- 新增 组件示例地址 +## 2.0.3(2021-05-10) +- 修复 ios 下不识别 '-' 日期格式的Bug +- 优化 pc 下弹出层添加边框和阴影 +## 2.0.2(2021-05-08) +- 修复 在 admin 中获取弹出层定位错误的bug +## 2.0.1(2021-05-08) +- 修复 type 属性向下兼容,默认值从 date 变更为 datetime +## 2.0.0(2021-04-30) +- 支持日历形式的日期+时间的范围选择 + > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) +## 1.0.6(2021-03-18) +- 新增 hide-second 属性,时间支持仅选择时、分 +- 修复 选择跟显示的日期不一样的Bug +- 修复 chang事件触发2次的Bug +- 修复 分、秒 end 范围错误的Bug +- 优化 更好的 nvue 适配 diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..dba9887 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..0f9e121 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,947 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..024f22f --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select date and time", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-datetime-picker.year": "-", + "uni-datetime-picker.month": "", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN", + "uni-calender.confirm": "confirm" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/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/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..d2df5e7 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "选择日期", + "uni-datetime-picker.selectTime": "选择时间", + "uni-datetime-picker.selectDateTime": "选择日期时间", + "uni-datetime-picker.startDate": "开始日期", + "uni-datetime-picker.endDate": "结束日期", + "uni-datetime-picker.startTime": "开始时间", + "uni-datetime-picker.endTime": "结束时间", + "uni-datetime-picker.ok": "确定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "确认" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..d23fa3c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "選擇日期", + "uni-datetime-picker.selectTime": "選擇時間", + "uni-datetime-picker.selectDateTime": "選擇日期時間", + "uni-datetime-picker.startDate": "開始日期", + "uni-datetime-picker.endDate": "結束日期", + "uni-datetime-picker.startTime": "開始时间", + "uni-datetime-picker.endTime": "結束时间", + "uni-datetime-picker.ok": "確定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "確認" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..1817692 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,940 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..6cec558 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,1073 @@ + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..6e9f47d --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,421 @@ +class Calendar { + constructor({ + selected, + startDate, + endDate, + range, + } = {}) { + // 当前日期 + this.date = this.getDateObj(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 起始时间 + this.startDate = startDate + // 终止时间 + this.endDate = endDate + // 是否范围选择 + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + this.lastHover = false + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + const selectDate = this.getDateObj(date) + this.getWeeks(selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + setStartDate(startDate) { + this.startDate = startDate + } + + setEndDate(endDate) { + this.endDate = endDate + } + + getPreMonthObj(date) { + date = fixIosDateFormat(date) + date = new Date(date) + + const oldMonth = date.getMonth() + date.setMonth(oldMonth - 1) + const newMonth = date.getMonth() + if (oldMonth !== 0 && newMonth - oldMonth === 0) { + date.setMonth(newMonth - 1) + } + return this.getDateObj(date) + } + getNextMonthObj(date) { + date = fixIosDateFormat(date) + date = new Date(date) + + const oldMonth = date.getMonth() + date.setMonth(oldMonth + 1) + const newMonth = date.getMonth() + if (newMonth - oldMonth > 1) { + date.setMonth(newMonth - 1) + } + return this.getDateObj(date) + } + + /** + * 获取指定格式Date对象 + */ + getDateObj(date) { + date = fixIosDateFormat(date) + date = new Date(date) + + return { + fullDate: getDate(date), + year: date.getFullYear(), + month: addZero(date.getMonth() + 1), + date: addZero(date.getDate()), + day: date.getDay() + } + } + + /** + * 获取上一个月日期集合 + */ + getPreMonthDays(amount, dateObj) { + const result = [] + for (let i = amount - 1; i >= 0; i--) { + const month = dateObj.month - 1 + result.push({ + date: new Date(dateObj.year, month, -i).getDate(), + month, + disable: true + }) + } + return result + } + /** + * 获取本月日期集合 + */ + getCurrentMonthDays(amount, dateObj) { + const result = [] + const fullDate = this.date.fullDate + for (let i = 1; i <= amount; i++) { + const currentDate = `${dateObj.year}-${dateObj.month}-${addZero(i)}` + const isToday = fullDate === currentDate + // 获取打点信息 + const info = this.selected && this.selected.find((item) => { + if (this.dateEqual(currentDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + disableBefore = dateCompare(this.startDate, currentDate) + } + + if (this.endDate) { + disableAfter = dateCompare(currentDate, this.endDate) + } + + let multiples = this.multipleStatus.data + let multiplesStatus = -1 + if (this.range && multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, currentDate) + }) + } + const checked = multiplesStatus !== -1 + + result.push({ + fullDate: currentDate, + year: dateObj.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(currentDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(currentDate, this.multipleStatus.before, this.multipleStatus.after), + month: dateObj.month, + disable: (this.startDate && !dateCompare(this.startDate, currentDate)) || (this.endDate && !dateCompare( + currentDate, this.endDate)), + isToday, + userChecked: false, + extraInfo: info + }) + } + return result + } + /** + * 获取下一个月日期集合 + */ + _getNextMonthDays(amount, dateObj) { + const result = [] + const month = dateObj.month + 1 + for (let i = 1; i <= amount; i++) { + result.push({ + date: i, + month, + disable: true + }) + } + return result + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const res = this.calendar.find(item => item.fullDate === this.getDateObj(date).fullDate) + return res ? res : this.getDateObj(date) + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + before = new Date(fixIosDateFormat(before)) + after = new Date(fixIosDateFormat(after)) + return before.valueOf() === after.valueOf() + } + + /** + * 比较真实起始日期 + */ + + isLogicBefore(currentDate, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDate) + } + + isLogicAfter(currentDate, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDate) + } + + /** + * 获取日期范围内所有日期 + * @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.getDateObj(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + if (!this.range) return + + let { + before, + after + } = this.multipleStatus + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.multipleStatus.after = undefined; + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this.getWeeks(fullDate) + } + + /** + * 鼠标 hover 更新多选状态 + */ + setHoverMultiple(fullDate) { + //抖音小程序点击会触发hover事件,需要避免一下 + // #ifndef MP-TOUTIAO + if (!this.range || this.lastHover) return + const { + before + } = this.multipleStatus + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this.getWeeks(fullDate) + // #endif + + } + + /** + * 更新默认值多选状态 + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this.getWeeks(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this.getWeeks(before) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + getWeeks(dateData) { + const { + year, + month, + } = this.getDateObj(dateData) + + const preMonthDayAmount = new Date(year, month - 1, 1).getDay() + const preMonthDays = this.getPreMonthDays(preMonthDayAmount, this.getDateObj(dateData)) + + const currentMonthDayAmount = new Date(year, month, 0).getDate() + const currentMonthDays = this.getCurrentMonthDays(currentMonthDayAmount, this.getDateObj(dateData)) + + const nextMonthDayAmount = 42 - preMonthDayAmount - currentMonthDayAmount + const nextMonthDays = this._getNextMonthDays(nextMonthDayAmount, this.getDateObj(dateData)) + + const calendarDays = [...preMonthDays, ...currentMonthDays, ...nextMonthDays] + + const weeks = new Array(6) + for (let i = 0; i < calendarDays.length; i++) { + const index = Math.floor(i / 7) + if (!weeks[index]) { + weeks[index] = new Array(7) + } + weeks[index][i % 7] = calendarDays[i] + } + + this.calendar = calendarDays + this.weeks = weeks + } +} + +function getDateTime(date, hideSecond) { + return `${getDate(date)} ${getTime(date, hideSecond)}` +} + +function getDate(date) { + date = fixIosDateFormat(date) + date = new Date(date) + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + return `${year}-${addZero(month)}-${addZero(day)}` +} + +function getTime(date, hideSecond) { + date = fixIosDateFormat(date) + date = new Date(date) + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}` +} + +function addZero(num) { + if (num < 10) { + num = `0${num}` + } + return num +} + +function getDefaultSecond(hideSecond) { + return hideSecond ? '00:00' : '00:00:00' +} + +function dateCompare(startDate, endDate) { + startDate = new Date(fixIosDateFormat(startDate)) + endDate = new Date(fixIosDateFormat(endDate)) + return startDate <= endDate +} + +function checkDate(date) { + const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g + return date.match(dateReg) +} +//ios低版本15及以下,无法匹配 没有 ’秒‘ 时的情况,所以需要在末尾 秒 加上 问号 +const dateTimeReg = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])( [0-5]?[0-9]:[0-5]?[0-9](:[0-5]?[0-9])?)?$/; + +function fixIosDateFormat(value) { + if (typeof value === 'string' && dateTimeReg.test(value)) { + value = value.replace(/-/g, '/') + } + return value +} + +export { + Calendar, + getDateTime, + getDate, + getTime, + addZero, + getDefaultSecond, + dateCompare, + checkDate, + fixIosDateFormat +} diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..dc83890 --- /dev/null +++ b/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker 日期选择器", + "version": "2.2.40", + "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "日期时间选择器", + "日期时间" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n", + "app-harmony": "u", + "app-uvue": "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" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-datetime-picker/readme.md b/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护` + +## DatetimePicker 时间选择器 + +> **组件名:uni-datetime-picker** +> 代码块: `uDatetimePicker` + + +该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。 + +若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。 + +**_点击 picker 默认值规则:_** + +- 若设置初始值 value, 会显示在 picker 显示框中 +- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-drawer/changelog.md b/uni_modules/uni-drawer/changelog.md new file mode 100644 index 0000000..6d2488c --- /dev/null +++ b/uni_modules/uni-drawer/changelog.md @@ -0,0 +1,13 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中个别scss变量无法找到的问题 +## 1.2.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-drawer](https://uniapp.dcloud.io/component/uniui/uni-drawer) +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-drawer/components/uni-drawer/keypress.js b/uni_modules/uni-drawer/components/uni-drawer/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/uni_modules/uni-drawer/components/uni-drawer/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue b/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue new file mode 100644 index 0000000..82331a8 --- /dev/null +++ b/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/uni_modules/uni-drawer/package.json b/uni_modules/uni-drawer/package.json new file mode 100644 index 0000000..dd056e4 --- /dev/null +++ b/uni_modules/uni-drawer/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-drawer", + "displayName": "uni-drawer 抽屉", + "version": "1.2.1", + "description": "抽屉式导航,用于展示侧滑菜单,侧滑导航。", + "keywords": [ + "uni-ui", + "uniui", + "drawer", + "抽屉", + "侧滑导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-drawer/readme.md b/uni_modules/uni-drawer/readme.md new file mode 100644 index 0000000..dcf6e6b --- /dev/null +++ b/uni_modules/uni-drawer/readme.md @@ -0,0 +1,10 @@ + + +## Drawer 抽屉 +> **组件名:uni-drawer** +> 代码块: `uDrawer` + +抽屉侧滑菜单。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-drawer) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-easyinput/changelog.md b/uni_modules/uni-easyinput/changelog.md new file mode 100644 index 0000000..765401a --- /dev/null +++ b/uni_modules/uni-easyinput/changelog.md @@ -0,0 +1,97 @@ +## 1.1.9(2023-04-11) +- 修复 vue3 下 keyboardheightchange 事件报错的bug +## 1.1.8(2023-03-29) +- 优化 trim 属性默认值 +## 1.1.7(2023-03-29) +- 新增 cursor-spacing 属性 +## 1.1.6(2023-01-28) +- 新增 keyboardheightchange 事件,可监听键盘高度变化 +## 1.1.5(2022-11-29) +- 优化 主题样式 +## 1.1.4(2022-10-27) +- 修复 props 中背景颜色无默认值的bug +## 1.1.0(2022-06-30) + +- 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容 +- 新增 clear 事件,点击右侧叉号图标触发 +- 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发 +- 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等 + +## 1.0.5(2022-06-07) + +- 优化 clearable 显示策略 + +## 1.0.4(2022-06-07) + +- 优化 clearable 显示策略 + +## 1.0.3(2022-05-20) + +- 修复 关闭图标某些情况下无法取消的 bug + +## 1.0.2(2022-04-12) + +- 修复 默认值不生效的 bug + +## 1.0.1(2022-04-02) + +- 修复 value 不能为 0 的 bug + +## 1.0.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-easyinput](https://uniapp.dcloud.io/component/uniui/uni-easyinput) + +## 0.1.4(2021-08-20) + +- 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug + +## 0.1.3(2021-08-11) + +- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 + +## 0.1.2(2021-07-30) + +- 优化 vue3 下事件警告的问题 + +## 0.1.1 + +- 优化 errorMessage 属性支持 Boolean 类型 + +## 0.1.0(2021-07-13) + +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) + +## 0.0.16(2021-06-29) + +- 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug + +## 0.0.15(2021-06-21) + +- 修复 passwordIcon 属性拼写错误的 bug + +## 0.0.14(2021-06-18) + +- 新增 passwordIcon 属性,当 type=password 时是否显示小眼睛图标 +- 修复 confirmType 属性不生效的问题 + +## 0.0.13(2021-06-04) + +- 修复 disabled 状态可清出内容的 bug + +## 0.0.12(2021-05-12) + +- 新增 组件示例地址 + +## 0.0.11(2021-05-07) + +- 修复 input-border 属性不生效的问题 + +## 0.0.10(2021-04-30) + +- 修复 ios 遮挡文字、显示一半的问题 + +## 0.0.9(2021-02-05) + +- 调整为 uni_modules 目录规范 +- 优化 兼容 nvue 页面 diff --git a/uni_modules/uni-easyinput/components/uni-easyinput/common.js b/uni_modules/uni-easyinput/components/uni-easyinput/common.js new file mode 100644 index 0000000..df9abe1 --- /dev/null +++ b/uni_modules/uni-easyinput/components/uni-easyinput/common.js @@ -0,0 +1,56 @@ +/** + * @desc 函数防抖 + * @param func 目标函数 + * @param wait 延迟执行毫秒数 + * @param immediate true - 立即执行, false - 延迟执行 + */ +export const debounce = function(func, wait = 1000, immediate = true) { + let timer; + console.log(1); + return function() { + console.log(123); + let context = this, + args = arguments; + if (timer) clearTimeout(timer); + if (immediate) { + let callNow = !timer; + timer = setTimeout(() => { + timer = null; + }, wait); + if (callNow) func.apply(context, args); + } else { + timer = setTimeout(() => { + func.apply(context, args); + }, wait) + } + } +} +/** + * @desc 函数节流 + * @param func 函数 + * @param wait 延迟执行毫秒数 + * @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发 + */ +export const throttle = (func, wait = 1000, type = 1) => { + let previous = 0; + let timeout; + return function() { + let context = this; + let args = arguments; + if (type === 1) { + let now = Date.now(); + + if (now - previous > wait) { + func.apply(context, args); + previous = now; + } + } else if (type === 2) { + if (!timeout) { + timeout = setTimeout(() => { + timeout = null; + func.apply(context, args) + }, wait) + } + } + } +} diff --git a/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue b/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue new file mode 100644 index 0000000..2c7993a --- /dev/null +++ b/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue @@ -0,0 +1,657 @@ + + + + + diff --git a/uni_modules/uni-easyinput/package.json b/uni_modules/uni-easyinput/package.json new file mode 100644 index 0000000..bd128e1 --- /dev/null +++ b/uni_modules/uni-easyinput/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-easyinput", + "displayName": "uni-easyinput 增强输入框", + "version": "1.1.9", + "description": "Easyinput 组件是对原生input组件的增强", + "keywords": [ + "uni-ui", + "uniui", + "input", + "uni-easyinput", + "输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-easyinput/readme.md b/uni_modules/uni-easyinput/readme.md new file mode 100644 index 0000000..f1faf8f --- /dev/null +++ b/uni_modules/uni-easyinput/readme.md @@ -0,0 +1,11 @@ + + +### Easyinput 增强输入框 +> **组件名:uni-easyinput** +> 代码块: `uEasyinput` + + +easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)而设计的,easyinput 内置了边框,图标等,同时包含 input 所有功能 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-easyinput) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-fab/changelog.md b/uni_modules/uni-fab/changelog.md new file mode 100644 index 0000000..9bd4729 --- /dev/null +++ b/uni_modules/uni-fab/changelog.md @@ -0,0 +1,23 @@ +## 1.2.5(2023-03-29) +- 新增 pattern.icon 属性,可自定义图标 +## 1.2.4(2022-09-07) +小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false) +## 1.2.3(2022-09-05) +- 修复 nvue 环境下,具有 tabBar 时,fab 组件下部位置无法正常获取 --window-bottom 的bug,详见:[https://ask.dcloud.net.cn/question/110638?notification_id=826310](https://ask.dcloud.net.cn/question/110638?notification_id=826310) +## 1.2.2(2021-12-29) +- 更新 组件依赖 +## 1.2.1(2021-11-19) +- 修复 阴影颜色不正确的bug +## 1.2.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-fab](https://uniapp.dcloud.io/component/uniui/uni-fab) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 按钮背景色调整 +- 优化 兼容pc端 diff --git a/uni_modules/uni-fab/components/uni-fab/uni-fab.vue b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue new file mode 100644 index 0000000..dfa65c1 --- /dev/null +++ b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue @@ -0,0 +1,491 @@ + + + + + diff --git a/uni_modules/uni-fab/package.json b/uni_modules/uni-fab/package.json new file mode 100644 index 0000000..18c0810 --- /dev/null +++ b/uni_modules/uni-fab/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-fab", + "displayName": "uni-fab 悬浮按钮", + "version": "1.2.5", + "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。", + "keywords": [ + "uni-ui", + "uniui", + "按钮", + "悬浮按钮", + "fab" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-fab/readme.md b/uni_modules/uni-fab/readme.md new file mode 100644 index 0000000..9a444e8 --- /dev/null +++ b/uni_modules/uni-fab/readme.md @@ -0,0 +1,9 @@ +## Fab 悬浮按钮 +> **组件名:uni-fab** +> 代码块: `uFab` + + +点击可展开一个图形按钮菜单 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-fav/changelog.md b/uni_modules/uni-fav/changelog.md new file mode 100644 index 0000000..d8a08d4 --- /dev/null +++ b/uni_modules/uni-fav/changelog.md @@ -0,0 +1,19 @@ +## 1.2.1(2022-05-30) +- 新增 stat 属性 ,是否开启uni统计功能 +## 1.2.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-fav](https://uniapp.dcloud.io/component/uniui/uni-fav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 组件示例地址 +## 1.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.3(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/en.json b/uni_modules/uni-fav/components/uni-fav/i18n/en.json new file mode 100644 index 0000000..9a0759e --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "collect", + "uni-fav.collected": "collected" +} diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/index.js b/uni_modules/uni-fav/components/uni-fav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/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/uni-fav/components/uni-fav/i18n/zh-Hans.json b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/uni_modules/uni-fav/components/uni-fav/uni-fav.vue b/uni_modules/uni-fav/components/uni-fav/uni-fav.vue new file mode 100644 index 0000000..d2c58df --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/uni-fav.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/uni_modules/uni-fav/package.json b/uni_modules/uni-fav/package.json new file mode 100644 index 0000000..cc14697 --- /dev/null +++ b/uni_modules/uni-fav/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-fav", + "displayName": "uni-fav 收藏按钮", + "version": "1.2.1", + "description": " Fav 收藏组件,可自定义颜色、大小。", + "keywords": [ + "fav", + "uni-ui", + "uniui", + "收藏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-fav/readme.md b/uni_modules/uni-fav/readme.md new file mode 100644 index 0000000..4de125d --- /dev/null +++ b/uni_modules/uni-fav/readme.md @@ -0,0 +1,10 @@ + + +## Fav 收藏按钮 +> **组件名:uni-fav** +> 代码块: `uFav` + +用于收藏功能,可点击切换选中、不选中的状态。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-file-picker/changelog.md b/uni_modules/uni-file-picker/changelog.md new file mode 100644 index 0000000..b8230e9 --- /dev/null +++ b/uni_modules/uni-file-picker/changelog.md @@ -0,0 +1,67 @@ +## 1.0.4(2023-03-29) +- 修复 手动上传删除一个文件后不能再上传的bug +## 1.0.3(2022-12-19) +- 新增 sourceType 属性, 可以自定义图片和视频选择的来源 +## 1.0.2(2022-07-04) +- 修复 在uni-forms下样式不生效的bug +## 1.0.1(2021-11-23) +- 修复 参数为对象的情况下,url在某些情况显示错误的bug +## 1.0.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-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +## 0.2.16(2021-11-08) +- 修复 传入空对象 ,显示错误的Bug +## 0.2.15(2021-08-30) +- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug +## 0.2.14(2021-08-23) +- 新增 参数中返回 fileID 字段 +## 0.2.13(2021-08-23) +- 修复 腾讯云传入fileID 不能回显的bug +- 修复 选择图片后,不能放大的问题 +## 0.2.12(2021-08-17) +- 修复 由于 0.2.11 版本引起的不能回显图片的Bug +## 0.2.11(2021-08-16) +- 新增 clearFiles(index) 方法,可以手动删除指定文件 +- 修复 v-model 值设为 null 报错的Bug +## 0.2.10(2021-08-13) +- 修复 return-type="object" 时,无法删除文件的Bug +## 0.2.9(2021-08-03) +- 修复 auto-upload 属性失效的Bug +## 0.2.8(2021-07-31) +- 修复 fileExtname属性不指定值报错的Bug +## 0.2.7(2021-07-31) +- 修复 在某种场景下图片不回显的Bug +## 0.2.6(2021-07-30) +- 修复 return-type为object下,返回值不正确的Bug +## 0.2.5(2021-07-30) +- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +## 0.2.3(2021-07-28) +- 优化 调整示例代码 +## 0.2.2(2021-07-27) +- 修复 vue3 下赋值错误的Bug +- 优化 h5平台下上传文件导致页面卡死的问题 +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.1(2021-07-02) +- 修复 sourceType 缺少默认值导致 ios 无法选择文件 +## 0.1.0(2021-06-30) +- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +## 0.0.11(2021-06-30) +- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +## 0.0.10(2021-06-29) +- 优化 文件上传后进度条消失时机 +## 0.0.9(2021-06-29) +- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +## 0.0.8(2021-06-15) +- 修复 删除文件时无法触发 v-model 的Bug +## 0.0.7(2021-05-12) +- 新增 组件示例地址 +## 0.0.6(2021-04-09) +- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug +## 0.0.5(2021-04-09) +- 优化 更新组件示例 +## 0.0.4(2021-04-09) +- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js new file mode 100644 index 0000000..aff0864 --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js @@ -0,0 +1,224 @@ +'use strict'; + +const ERR_MSG_OK = 'chooseAndUploadFile:ok'; +const ERR_MSG_FAIL = 'chooseAndUploadFile:fail'; + +function chooseImage(opts) { + const { + count, + sizeType = ['original', 'compressed'], + sourceType, + extension + } = opts + return new Promise((resolve, reject) => { + uni.chooseImage({ + count, + sizeType, + sourceType, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res, 'image')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseVideo(opts) { + const { + camera, + compressed, + maxDuration, + sourceType, + extension + } = opts; + return new Promise((resolve, reject) => { + uni.chooseVideo({ + camera, + compressed, + maxDuration, + sourceType, + extension, + success(res) { + const { + tempFilePath, + duration, + size, + height, + width + } = res; + resolve(normalizeChooseAndUploadFileRes({ + errMsg: 'chooseVideo:ok', + tempFilePaths: [tempFilePath], + tempFiles: [ + { + name: (res.tempFile && res.tempFile.name) || '', + path: tempFilePath, + size, + type: (res.tempFile && res.tempFile.type) || '', + width, + height, + duration, + fileType: 'video', + cloudPath: '', + }, ], + }, 'video')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseAll(opts) { + const { + count, + extension + } = opts; + return new Promise((resolve, reject) => { + let chooseFile = uni.chooseFile; + if (typeof wx !== 'undefined' && + typeof wx.chooseMessageFile === 'function') { + chooseFile = wx.chooseMessageFile; + } + if (typeof chooseFile !== 'function') { + return reject({ + errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。', + }); + } + chooseFile({ + type: 'all', + count, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res)); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function normalizeChooseAndUploadFileRes(res, fileType) { + res.tempFiles.forEach((item, index) => { + if (!item.name) { + item.name = item.path.substring(item.path.lastIndexOf('/') + 1); + } + if (fileType) { + item.fileType = fileType; + } + item.cloudPath = + Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.')); + }); + if (!res.tempFilePaths) { + res.tempFilePaths = res.tempFiles.map((file) => file.path); + } + return res; +} + +function uploadCloudFiles(files, max = 5, onUploadProgress) { + files = JSON.parse(JSON.stringify(files)) + const len = files.length + let count = 0 + let self = this + return new Promise(resolve => { + while (count < max) { + next() + } + + function next() { + let cur = count++ + if (cur >= len) { + !files.find(item => !item.url && !item.errMsg) && resolve(files) + return + } + const fileItem = files[cur] + const index = self.files.findIndex(v => v.uuid === fileItem.uuid) + fileItem.url = '' + delete fileItem.errMsg + + uniCloud + .uploadFile({ + filePath: fileItem.path, + cloudPath: fileItem.cloudPath, + fileType: fileItem.fileType, + onUploadProgress: res => { + res.index = index + onUploadProgress && onUploadProgress(res) + } + }) + .then(res => { + fileItem.url = res.fileID + fileItem.index = index + if (cur < len) { + next() + } + }) + .catch(res => { + fileItem.errMsg = res.errMsg || res.message + fileItem.index = index + if (cur < len) { + next() + } + }) + } + }) +} + + + + + +function uploadFiles(choosePromise, { + onChooseFile, + onUploadProgress +}) { + return choosePromise + .then((res) => { + if (onChooseFile) { + const customChooseRes = onChooseFile(res); + if (typeof customChooseRes !== 'undefined') { + return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ? + res : chooseRes); + } + } + return res; + }) + .then((res) => { + if (res === false) { + return { + errMsg: ERR_MSG_OK, + tempFilePaths: [], + tempFiles: [], + }; + } + return res + }) +} + +function chooseAndUploadFile(opts = { + type: 'all' +}) { + if (opts.type === 'image') { + return uploadFiles(chooseImage(opts), opts); + } + else if (opts.type === 'video') { + return uploadFiles(chooseVideo(opts), opts); + } + return uploadFiles(chooseAll(opts), opts); +} + +export { + chooseAndUploadFile, + uploadCloudFiles +}; diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue new file mode 100644 index 0000000..186019c --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue @@ -0,0 +1,669 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue new file mode 100644 index 0000000..625d92e --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue new file mode 100644 index 0000000..2a29bc2 --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js new file mode 100644 index 0000000..60aaa3e --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js @@ -0,0 +1,109 @@ +/** + * 获取文件名和后缀 + * @param {String} name + */ +export const get_file_ext = (name) => { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } +} + +/** + * 获取扩展名 + * @param {Array} fileExtname + */ +export const get_extname = (fileExtname) => { + if (!Array.isArray(fileExtname)) { + let extname = fileExtname.replace(/(\[|\])/g, '') + return extname.split(',') + } else { + return fileExtname + } + return [] +} + +/** + * 获取文件和检测是否可选 + */ +export const get_files_and_is_max = (res, _extname) => { + let filePaths = [] + let files = [] + if(!_extname || _extname.length === 0){ + return { + filePaths, + files + } + } + res.tempFiles.forEach(v => { + let fileFullName = get_file_ext(v.name) + const extname = fileFullName.ext.toLowerCase() + if (_extname.indexOf(extname) !== -1) { + files.push(v) + filePaths.push(v.path) + } + }) + if (files.length !== res.tempFiles.length) { + uni.showToast({ + title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, + icon: 'none', + duration: 5000 + }) + } + + return { + filePaths, + files + } +} + + +/** + * 获取图片信息 + * @param {Object} filepath + */ +export const get_file_info = (filepath) => { + return new Promise((resolve, reject) => { + uni.getImageInfo({ + src: filepath, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }) +} +/** + * 获取封装数据 + */ +export const get_file_data = async (files, type = 'image') => { + // 最终需要上传数据库的数据 + let fileFullName = get_file_ext(files.name) + const extname = fileFullName.ext.toLowerCase() + let filedata = { + name: files.name, + uuid: files.uuid, + extname: extname || '', + cloudPath: files.cloudPath, + fileType: files.fileType, + url: files.path || files.path, + size: files.size, //单位是字节 + image: {}, + path: files.path, + video: {} + } + if (type === 'image') { + const imageinfo = await get_file_info(files.path) + delete filedata.video + filedata.image.width = imageinfo.width + filedata.image.height = imageinfo.height + filedata.image.location = imageinfo.path + } else { + delete filedata.image + } + return filedata +} diff --git a/uni_modules/uni-file-picker/package.json b/uni_modules/uni-file-picker/package.json new file mode 100644 index 0000000..35c926c --- /dev/null +++ b/uni_modules/uni-file-picker/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-file-picker", + "displayName": "uni-file-picker 文件选择上传", + "version": "1.0.4", + "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", + "keywords": [ + "uni-ui", + "uniui", + "图片上传", + "文件上传" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-file-picker/readme.md b/uni_modules/uni-file-picker/readme.md new file mode 100644 index 0000000..c8399a5 --- /dev/null +++ b/uni_modules/uni-file-picker/readme.md @@ -0,0 +1,11 @@ + +## FilePicker 文件选择上传 + +> **组件名:uni-file-picker** +> 代码块: `uFilePicker` + + +文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-forms/changelog.md b/uni_modules/uni-forms/changelog.md new file mode 100644 index 0000000..8218df5 --- /dev/null +++ b/uni_modules/uni-forms/changelog.md @@ -0,0 +1,92 @@ +## 1.4.9(2023-02-10) +- 修复 required 参数无法动态绑定 +## 1.4.8(2022-08-23) +- 优化 根据 rules 自动添加 required 的问题 +## 1.4.7(2022-08-22) +- 修复 item 未设置 require 属性,rules 设置 require 后,星号也显示的 bug,详见:[https://ask.dcloud.net.cn/question/151540](https://ask.dcloud.net.cn/question/151540) +## 1.4.6(2022-07-13) +- 修复 model 需要校验的值没有声明对应字段时,导致第一次不触发校验的bug +## 1.4.5(2022-07-05) +- 新增 更多表单示例 +- 优化 子表单组件过期提示的问题 +- 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式 +## 1.4.4(2022-07-04) +- 更新 删除组件日志 +## 1.4.3(2022-07-04) +- 修复 由 1.4.0 引发的 label 插槽不生效的bug +## 1.4.2(2022-07-04) +- 修复 子组件找不到 setValue 报错的bug +## 1.4.1(2022-07-04) +- 修复 uni-data-picker 在 uni-forms-item 中报错的bug +- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +## 1.4.0(2022-06-30) +- 【重要】组件逻辑重构,部分用法用旧版本不兼容,请注意兼容问题 +- 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力 +- 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃 +- 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效 +- 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法 +- 新增 子表单的 setRules 方法,配合自定义校验函数使用 +- 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则 +- 优化 动态表单校验方式,废弃拼接name的方式 +## 1.3.3(2022-06-22) +- 修复 表单校验顺序无序问题 +## 1.3.2(2021-12-09) +- +## 1.3.1(2021-11-19) +- 修复 label 插槽不生效的bug +## 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-forms](https://uniapp.dcloud.io/component/uniui/uni-forms) +## 1.2.7(2021-08-13) +- 修复 没有添加校验规则的字段依然报错的Bug +## 1.2.6(2021-08-11) +- 修复 重置表单错误信息无法清除的问题 +## 1.2.5(2021-08-11) +- 优化 组件文档 +## 1.2.4(2021-08-11) +- 修复 表单验证只生效一次的问题 +## 1.2.3(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.2(2021-07-26) +- 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- 修复 1.2.1 引起的示例在小程序平台报错的Bug +## 1.2.1(2021-07-22) +- 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- 修复 不指定name属性时,运行报错的Bug +- 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- 优化 组件示例,新增动态校验示例代码 +- 优化 组件文档,使用方式更清晰 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-06-25) +- 修复 pattern 属性在微信小程序平台无效的问题 +## 1.1.1(2021-06-22) +- 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +## 1.1.0(2021-06-22) +- 修复 只写setRules方法而导致校验不生效的Bug +- 修复 由上个办法引发的错误提示文字错位的Bug +## 1.0.48(2021-06-21) +- 修复 不设置 label 属性 ,无法设置label插槽的问题 +## 1.0.47(2021-06-21) +- 修复 不设置label属性,label-width属性不生效的bug +- 修复 setRules 方法与rules属性冲突的问题 +## 1.0.46(2021-06-04) +- 修复 动态删减数据导致报错的问题 +## 1.0.45(2021-06-04) +- 新增 modelValue 属性 ,value 即将废弃 +## 1.0.44(2021-06-02) +- 新增 uni-forms-item 可以设置单独的 rules +- 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- 优化 submit 事件重命名为 validate +## 1.0.43(2021-05-12) +- 新增 组件示例地址 +## 1.0.42(2021-04-30) +- 修复 自定义检验器失效的问题 +## 1.0.41(2021-03-05) +- 更新 校验器 +- 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug +## 1.0.40(2021-03-04) +- 修复 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +## 1.0.39(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 校验器传入 int 等类型 ,返回String类型的Bug diff --git a/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue b/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue new file mode 100644 index 0000000..91fe351 --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue @@ -0,0 +1,627 @@ + + + + + diff --git a/uni_modules/uni-forms/components/uni-forms/uni-forms.vue b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue new file mode 100644 index 0000000..ed2f6d9 --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue @@ -0,0 +1,397 @@ + + + + + diff --git a/uni_modules/uni-forms/components/uni-forms/utils.js b/uni_modules/uni-forms/components/uni-forms/utils.js new file mode 100644 index 0000000..6da2421 --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms/utils.js @@ -0,0 +1,293 @@ +/** + * 简单处理对象拷贝 + * @param {Obejct} 被拷贝对象 + * @@return {Object} 拷贝对象 + */ +export const deepCopy = (val) => { + return JSON.parse(JSON.stringify(val)) +} +/** + * 过滤数字类型 + * @param {String} format 数字类型 + * @@return {Boolean} 返回是否为数字类型 + */ +export const typeFilter = (format) => { + return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp'; +} + +/** + * 把 value 转换成指定的类型,用于处理初始值,原因是初始值需要入库不能为 undefined + * @param {String} key 字段名 + * @param {any} value 字段值 + * @param {Object} rules 表单校验规则 + */ +export const getValue = (key, value, rules) => { + const isRuleNumType = rules.find(val => val.format && typeFilter(val.format)); + const isRuleBoolType = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool'); + // 输入类型为 number + if (!!isRuleNumType) { + if (!value && value !== 0) { + value = null + } else { + value = isNumber(Number(value)) ? Number(value) : value + } + } + + // 输入类型为 boolean + if (!!isRuleBoolType) { + value = isBoolean(value) ? value : false + } + + return value; +} + +/** + * 获取表单数据 + * @param {String|Array} name 真实名称,需要使用 realName 获取 + * @param {Object} data 原始数据 + * @param {any} value 需要设置的值 + */ +export const setDataValue = (field, formdata, value) => { + formdata[field] = value + return value || '' +} + +/** + * 获取表单数据 + * @param {String|Array} field 真实名称,需要使用 realName 获取 + * @param {Object} data 原始数据 + */ +export const getDataValue = (field, data) => { + return objGet(data, field) +} + +/** + * 获取表单类型 + * @param {String|Array} field 真实名称,需要使用 realName 获取 + */ +export const getDataValueType = (field, data) => { + const value = getDataValue(field, data) + return { + type: type(value), + value + } +} + +/** + * 获取表单可用的真实name + * @param {String|Array} name 表单name + * @@return {String} 表单可用的真实name + */ +export const realName = (name, data = {}) => { + const base_name = _basePath(name) + if (typeof base_name === 'object' && Array.isArray(base_name) && base_name.length > 1) { + const realname = base_name.reduce((a, b) => a += `#${b}`, '_formdata_') + return realname + } + return base_name[0] || name +} + +/** + * 判断是否表单可用的真实name + * @param {String|Array} name 表单name + * @@return {String} 表单可用的真实name + */ +export const isRealName = (name) => { + const reg = /^_formdata_#*/ + return reg.test(name) +} + +/** + * 获取表单数据的原始格式 + * @@return {Object|Array} object 需要解析的数据 + */ +export const rawData = (object = {}, name) => { + let newData = JSON.parse(JSON.stringify(object)) + let formData = {} + for(let i in newData){ + let path = name2arr(i) + objSet(formData,path,newData[i]) + } + return formData +} + +/** + * 真实name还原为 array + * @param {*} name + */ +export const name2arr = (name) => { + let field = name.replace('_formdata_#', '') + field = field.split('#').map(v => (isNumber(v) ? Number(v) : v)) + return field +} + +/** + * 对象中设置值 + * @param {Object|Array} object 源数据 + * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c'] + * @param {String} value 需要设置的值 + */ +export const objSet = (object, path, value) => { + if (typeof object !== 'object') return object; + _basePath(path).reduce((o, k, i, _) => { + if (i === _.length - 1) { + // 若遍历结束直接赋值 + o[k] = value + return null + } else if (k in o) { + // 若存在对应路径,则返回找到的对象,进行下一次遍历 + return o[k] + } else { + // 若不存在对应路径,则创建对应对象,若下一路径是数字,新对象赋值为空数组,否则赋值为空对象 + o[k] = /^[0-9]{1,}$/.test(_[i + 1]) ? [] : {} + return o[k] + } + }, object) + // 返回object + return object; +} + +// 处理 path, path有三种形式:'a[0].b.c'、'a.0.b.c' 和 ['a','0','b','c'],需要统一处理成数组,便于后续使用 +function _basePath(path) { + // 若是数组,则直接返回 + if (Array.isArray(path)) return path + // 若有 '[',']',则替换成将 '[' 替换成 '.',去掉 ']' + return path.replace(/\[/g, '.').replace(/\]/g, '').split('.') +} + +/** + * 从对象中获取值 + * @param {Object|Array} object 源数据 + * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c'] + * @param {String} defaultVal 如果无法从调用链中获取值的默认值 + */ +export const objGet = (object, path, defaultVal = 'undefined') => { + // 先将path处理成统一格式 + let newPath = _basePath(path) + // 递归处理,返回最后结果 + let val = newPath.reduce((o, k) => { + return (o || {})[k] + }, object); + return !val || val !== undefined ? val : defaultVal +} + + +/** + * 是否为 number 类型 + * @param {any} num 需要判断的值 + * @return {Boolean} 是否为 number + */ +export const isNumber = (num) => { + return !isNaN(Number(num)) +} + +/** + * 是否为 boolean 类型 + * @param {any} bool 需要判断的值 + * @return {Boolean} 是否为 boolean + */ +export const isBoolean = (bool) => { + return (typeof bool === 'boolean') +} +/** + * 是否有必填字段 + * @param {Object} rules 规则 + * @return {Boolean} 是否有必填字段 + */ +export const isRequiredField = (rules) => { + let isNoField = false; + for (let i = 0; i < rules.length; i++) { + const ruleData = rules[i]; + if (ruleData.required) { + isNoField = true; + break; + } + } + return isNoField; +} + + +/** + * 获取数据类型 + * @param {Any} obj 需要获取数据类型的值 + */ +export const type = (obj) => { + var class2type = {}; + + // 生成class2type映射 + "Boolean Number String Function Array Date RegExp Object Error".split(" ").map(function(item, index) { + class2type["[object " + item + "]"] = item.toLowerCase(); + }) + if (obj == null) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[Object.prototype.toString.call(obj)] || "object" : + typeof obj; +} + +/** + * 判断两个值是否相等 + * @param {any} a 值 + * @param {any} b 值 + * @return {Boolean} 是否相等 + */ +export const isEqual = (a, b) => { + //如果a和b本来就全等 + if (a === b) { + //判断是否为0和-0 + return a !== 0 || 1 / a === 1 / b; + } + //判断是否为null和undefined + if (a == null || b == null) { + return a === b; + } + //接下来判断a和b的数据类型 + var classNameA = toString.call(a), + classNameB = toString.call(b); + //如果数据类型不相等,则返回false + if (classNameA !== classNameB) { + return false; + } + //如果数据类型相等,再根据不同数据类型分别判断 + switch (classNameA) { + case '[object RegExp]': + case '[object String]': + //进行字符串转换比较 + return '' + a === '' + b; + case '[object Number]': + //进行数字转换比较,判断是否为NaN + if (+a !== +a) { + return +b !== +b; + } + //判断是否为0或-0 + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + return +a === +b; + } + //如果是对象类型 + if (classNameA == '[object Object]') { + //获取a和b的属性长度 + var propsA = Object.getOwnPropertyNames(a), + propsB = Object.getOwnPropertyNames(b); + if (propsA.length != propsB.length) { + return false; + } + for (var i = 0; i < propsA.length; i++) { + var propName = propsA[i]; + //如果对应属性对应值不相等,则返回false + if (a[propName] !== b[propName]) { + return false; + } + } + return true; + } + //如果是数组类型 + if (classNameA == '[object Array]') { + if (a.toString() == b.toString()) { + return true; + } + return false; + } +} diff --git a/uni_modules/uni-forms/components/uni-forms/validate.js b/uni_modules/uni-forms/components/uni-forms/validate.js new file mode 100644 index 0000000..1834c6c --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms/validate.js @@ -0,0 +1,486 @@ +var pattern = { + email: /^\S+?@\S+?\.\S+?$/, + idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, + 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') +}; + +const FORMAT_MAPPING = { + "int": 'integer', + "bool": 'boolean', + "double": 'number', + "long": 'number', + "password": 'string' + // "fileurls": 'array' +} + +function formatMessage(args, resources = '') { + var defaultMessage = ['label'] + defaultMessage.forEach((item) => { + if (args[item] === undefined) { + args[item] = '' + } + }) + + let str = resources + for (let key in args) { + let reg = new RegExp('{' + key + '}') + str = str.replace(reg, args[key]) + } + return str +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (typeof value === 'string' && !value) { + return true; + } + + if (Array.isArray(value) && !value.length) { + return true; + } + + if (type === 'object' && !Object.keys(value).length) { + return true; + } + + return false; +} + +const types = { + integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + string(value) { + return typeof value === 'string'; + }, + number(value) { + if (isNaN(value)) { + return false; + } + return typeof value === 'number'; + }, + "boolean": function(value) { + return typeof value === 'boolean'; + }, + "float": function(value) { + return types.number(value) && !types.integer(value); + }, + array(value) { + return Array.isArray(value); + }, + object(value) { + return typeof value === 'object' && !types.array(value); + }, + date(value) { + return value instanceof Date; + }, + timestamp(value) { + if (!this.integer(value) || Math.abs(value).toString().length > 16) { + return false + } + return true; + }, + file(value) { + return typeof value.url === 'string'; + }, + email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + pattern(reg, value) { + try { + return new RegExp(reg).test(value); + } catch (e) { + return false; + } + }, + method(value) { + return typeof value === 'function'; + }, + idcard(value) { + return typeof value === 'string' && !!value.match(pattern.idcard); + }, + 'url-https'(value) { + return this.url(value) && value.startsWith('https://'); + }, + 'url-scheme'(value) { + return value.startsWith('://'); + }, + 'url-web'(value) { + return false; + } +} + +class RuleValidator { + + constructor(message) { + this._message = message + } + + async validateRule(fieldKey, fieldValue, value, data, allData) { + var result = null + + let rules = fieldValue.rules + + let hasRequired = rules.findIndex((item) => { + return item.required + }) + if (hasRequired < 0) { + if (value === null || value === undefined) { + return result + } + if (typeof value === 'string' && !value.length) { + return result + } + } + + var message = this._message + + if (rules === undefined) { + return message['default'] + } + + for (var i = 0; i < rules.length; i++) { + let rule = rules[i] + let vt = this._getValidateType(rule) + + Object.assign(rule, { + label: fieldValue.label || `["${fieldKey}"]` + }) + + if (RuleValidatorHelper[vt]) { + result = RuleValidatorHelper[vt](rule, value, message) + if (result != null) { + break + } + } + + if (rule.validateExpr) { + let now = Date.now() + let resultExpr = rule.validateExpr(value, allData, now) + if (resultExpr === false) { + result = this._getMessage(rule, rule.errorMessage || this._message['default']) + break + } + } + + if (rule.validateFunction) { + result = await this.validateFunction(rule, value, data, allData, vt) + if (result !== null) { + break + } + } + } + + if (result !== null) { + result = message.TAG + result + } + + return result + } + + async validateFunction(rule, value, data, allData, vt) { + let result = null + try { + let callbackMessage = null + const res = await rule.validateFunction(rule, value, allData || data, (message) => { + callbackMessage = message + }) + if (callbackMessage || (typeof res === 'string' && res) || res === false) { + result = this._getMessage(rule, callbackMessage || res, vt) + } + } catch (e) { + result = this._getMessage(rule, e.message, vt) + } + return result + } + + _getMessage(rule, message, vt) { + return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default']) + } + + _getValidateType(rule) { + var result = '' + if (rule.required) { + result = 'required' + } else if (rule.format) { + result = 'format' + } else if (rule.arrayType) { + result = 'arrayTypeFormat' + } else if (rule.range) { + result = 'range' + } else if (rule.maximum !== undefined || rule.minimum !== undefined) { + result = 'rangeNumber' + } else if (rule.maxLength !== undefined || rule.minLength !== undefined) { + result = 'rangeLength' + } else if (rule.pattern) { + result = 'pattern' + } else if (rule.validateFunction) { + result = 'validateFunction' + } + return result + } +} + +const RuleValidatorHelper = { + required(rule, value, message) { + if (rule.required && isEmptyValue(value, rule.format || typeof value)) { + return formatMessage(rule, rule.errorMessage || message.required); + } + + return null + }, + + range(rule, value, message) { + const { + range, + errorMessage + } = rule; + + let list = new Array(range.length); + for (let i = 0; i < range.length; i++) { + const item = range[i]; + if (types.object(item) && item.value !== undefined) { + list[i] = item.value; + } else { + list[i] = item; + } + } + + let result = false + if (Array.isArray(value)) { + result = (new Set(value.concat(list)).size === list.length); + } else { + if (list.indexOf(value) > -1) { + result = true; + } + } + + if (!result) { + return formatMessage(rule, errorMessage || message['enum']); + } + + return null + }, + + rangeNumber(rule, value, message) { + if (!types.number(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let { + minimum, + maximum, + exclusiveMinimum, + exclusiveMaximum + } = rule; + let min = exclusiveMinimum ? value <= minimum : value < minimum; + let max = exclusiveMaximum ? value >= maximum : value > maximum; + + if (minimum !== undefined && min) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ? + 'exclusiveMinimum' : 'minimum' + ]) + } else if (maximum !== undefined && max) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ? + 'exclusiveMaximum' : 'maximum' + ]) + } else if (minimum !== undefined && maximum !== undefined && (min || max)) { + return formatMessage(rule, rule.errorMessage || message['number'].range) + } + + return null + }, + + rangeLength(rule, value, message) { + if (!types.string(value) && !types.array(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let min = rule.minLength; + let max = rule.maxLength; + let val = value.length; + + if (min !== undefined && val < min) { + return formatMessage(rule, rule.errorMessage || message['length'].minLength) + } else if (max !== undefined && val > max) { + return formatMessage(rule, rule.errorMessage || message['length'].maxLength) + } else if (min !== undefined && max !== undefined && (val < min || val > max)) { + return formatMessage(rule, rule.errorMessage || message['length'].range) + } + + return null + }, + + pattern(rule, value, message) { + if (!types['pattern'](rule.pattern, value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + return null + }, + + format(rule, value, message) { + var customTypes = Object.keys(types); + var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : (rule.format || rule.arrayType); + + if (customTypes.indexOf(format) > -1) { + if (!types[format](value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + } + + return null + }, + + arrayTypeFormat(rule, value, message) { + if (!Array.isArray(value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + + for (let i = 0; i < value.length; i++) { + const element = value[i]; + let formatResult = this.format(rule, element, message) + if (formatResult !== null) { + return formatResult + } + } + + return null + } +} + +class SchemaValidator extends RuleValidator { + + constructor(schema, options) { + super(SchemaValidator.message); + + this._schema = schema + this._options = options || null + } + + updateSchema(schema) { + this._schema = schema + } + + async validate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, false, allData) + } + return result.length ? result[0] : null + } + + async validateAll(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, true, allData) + } + return result + } + + async validateUpdate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidateUpdate(data, false, allData) + } + return result.length ? result[0] : null + } + + async invokeValidate(data, all, allData) { + let result = [] + let schema = this._schema + for (let key in schema) { + let value = schema[key] + let errorMessage = await this.validateRule(key, value, data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + async invokeValidateUpdate(data, all, allData) { + let result = [] + for (let key in data) { + let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + _checkFieldInSchema(data) { + var keys = Object.keys(data) + var keys2 = Object.keys(this._schema) + if (new Set(keys.concat(keys2)).size === keys2.length) { + return '' + } + + var noExistFields = keys.filter((key) => { + return keys2.indexOf(key) < 0; + }) + var errorMessage = formatMessage({ + field: JSON.stringify(noExistFields) + }, SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid']) + return [{ + key: 'invalid', + errorMessage + }] + } +} + +function Message() { + return { + TAG: "", + default: '验证错误', + defaultInvalid: '提交的字段{field}在数据库中并不存在', + validateFunction: '验证无效', + required: '{label}必填', + 'enum': '{label}超出范围', + timestamp: '{label}格式无效', + whitespace: '{label}不能为空', + typeError: '{label}类型无效', + date: { + format: '{label}日期{value}格式无效', + parse: '{label}日期无法解析,{value}无效', + invalid: '{label}日期{value}无效' + }, + length: { + minLength: '{label}长度不能少于{minLength}', + maxLength: '{label}长度不能超过{maxLength}', + range: '{label}必须介于{minLength}和{maxLength}之间' + }, + number: { + minimum: '{label}不能小于{minimum}', + maximum: '{label}不能大于{maximum}', + exclusiveMinimum: '{label}不能小于等于{minimum}', + exclusiveMaximum: '{label}不能大于等于{maximum}', + range: '{label}必须介于{minimum}and{maximum}之间' + }, + pattern: { + mismatch: '{label}格式不匹配' + } + }; +} + + +SchemaValidator.message = new Message(); + +export default SchemaValidator diff --git a/uni_modules/uni-forms/package.json b/uni_modules/uni-forms/package.json new file mode 100644 index 0000000..1925611 --- /dev/null +++ b/uni_modules/uni-forms/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-forms", + "displayName": "uni-forms 表单", + "version": "1.4.9", + "description": "由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "keywords": [ + "uni-ui", + "表单", + "校验", + "表单校验", + "表单验证" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-forms/readme.md b/uni_modules/uni-forms/readme.md new file mode 100644 index 0000000..63d5a04 --- /dev/null +++ b/uni_modules/uni-forms/readme.md @@ -0,0 +1,23 @@ + + +## Forms 表单 + +> **组件名:uni-forms** +> 代码块: `uForms`、`uni-forms-item` +> 关联组件:`uni-forms-item`、`uni-easyinput`、`uni-data-checkbox`、`uni-group`。 + + +uni-app的内置组件已经有了 `

`组件,用于提交表单内容。 + +然而几乎每个表单都需要做表单验证,为了方便做表单验证,减少重复开发,`uni ui` 又基于 ``组件封装了 ``组件,内置了表单验证功能。 + +`` 提供了 `rules`属性来描述校验规则、``子组件来包裹具体的表单项,以及给原生或三方组件提供了 `binddata()` 来设置表单值。 + +每个要校验的表单项,不管input还是checkbox,都必须放在``组件中,且一个``组件只能放置一个表单项。 + +``组件内部预留了显示error message的区域,默认是在表单项的底部。 + +另外,``组件下面的各个表单项,可以通过``包裹为不同的分组。同一``下的不同表单项目将聚拢在一起,同其他group保持垂直间距。``仅影响视觉效果。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-forms) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-goods-nav/changelog.md b/uni_modules/uni-goods-nav/changelog.md new file mode 100644 index 0000000..c6264c6 --- /dev/null +++ b/uni_modules/uni-goods-nav/changelog.md @@ -0,0 +1,18 @@ +## 1.2.1(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.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-goods-nav](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json new file mode 100644 index 0000000..dcdba41 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "shop", + "uni-goods-nav.options.cart": "cart", + "uni-goods-nav.buttonGroup.addToCart": "add to cart", + "uni-goods-nav.buttonGroup.buyNow": "buy now" +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/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/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json new file mode 100644 index 0000000..48ee344 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店铺", + "uni-goods-nav.options.cart": "购物车", + "uni-goods-nav.buttonGroup.addToCart": "加入购物车", + "uni-goods-nav.buttonGroup.buyNow": "立即购买" +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json new file mode 100644 index 0000000..d0a0255 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店鋪", + "uni-goods-nav.options.cart": "購物車", + "uni-goods-nav.buttonGroup.addToCart": "加入購物車", + "uni-goods-nav.buttonGroup.buyNow": "立即購買" +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue b/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue new file mode 100644 index 0000000..8a16b17 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/uni_modules/uni-goods-nav/package.json b/uni_modules/uni-goods-nav/package.json new file mode 100644 index 0000000..636e45e --- /dev/null +++ b/uni_modules/uni-goods-nav/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-goods-nav", + "displayName": "uni-goods-nav 商品导航", + "version": "1.2.1", + "description": "商品导航组件主要用于电商类应用底部导航,可自定义加入购物车,购买等操作", + "keywords": [ + "uni-ui", + "uniui", + "商品导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-goods-nav/readme.md b/uni_modules/uni-goods-nav/readme.md new file mode 100644 index 0000000..07df93f --- /dev/null +++ b/uni_modules/uni-goods-nav/readme.md @@ -0,0 +1,10 @@ + + +## GoodsNav 商品导航 +> **组件名:uni-goods-nav** +> 代码块: `uGoodsNav` + +商品加入购物车,立即购买等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-grid/changelog.md b/uni_modules/uni-grid/changelog.md new file mode 100644 index 0000000..d301166 --- /dev/null +++ b/uni_modules/uni-grid/changelog.md @@ -0,0 +1,13 @@ +## 1.4.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-grid](https://uniapp.dcloud.io/component/uniui/uni-grid) +## 1.3.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.3.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.3.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.4(2021-05-12) +- 新增 组件示例地址 +## 1.2.3(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue new file mode 100644 index 0000000..20fd54e --- /dev/null +++ b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/uni_modules/uni-grid/components/uni-grid/uni-grid.vue b/uni_modules/uni-grid/components/uni-grid/uni-grid.vue new file mode 100644 index 0000000..96a412f --- /dev/null +++ b/uni_modules/uni-grid/components/uni-grid/uni-grid.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/uni_modules/uni-grid/package.json b/uni_modules/uni-grid/package.json new file mode 100644 index 0000000..ccb2c91 --- /dev/null +++ b/uni_modules/uni-grid/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-grid", + "displayName": "uni-grid 宫格", + "version": "1.4.0", + "description": "Grid 宫格组件,提供移动端常见的宫格布局,如九宫格。", + "keywords": [ + "uni-ui", + "uniui", + "九宫格", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-grid/readme.md b/uni_modules/uni-grid/readme.md new file mode 100644 index 0000000..0aa44cc --- /dev/null +++ b/uni_modules/uni-grid/readme.md @@ -0,0 +1,11 @@ + + +## Grid 宫格 +> **组件名:uni-grid** +> 代码块: `uGrid` + + +宫格组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-grid) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-group/changelog.md b/uni_modules/uni-group/changelog.md new file mode 100644 index 0000000..a7024fd --- /dev/null +++ b/uni_modules/uni-group/changelog.md @@ -0,0 +1,16 @@ +## 1.2.2(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.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-group](https://uniapp.dcloud.io/component/uniui/uni-group) +## 1.1.7(2021-11-08) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 优化 组件文档 +## 1.0.3(2021-05-12) +- 新增 组件示例地址 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 兼容 nvue 页面 diff --git a/uni_modules/uni-group/components/uni-group/uni-group.vue b/uni_modules/uni-group/components/uni-group/uni-group.vue new file mode 100644 index 0000000..3425ecd --- /dev/null +++ b/uni_modules/uni-group/components/uni-group/uni-group.vue @@ -0,0 +1,134 @@ + + + + diff --git a/uni_modules/uni-group/package.json b/uni_modules/uni-group/package.json new file mode 100644 index 0000000..ea00a08 --- /dev/null +++ b/uni_modules/uni-group/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-group", + "displayName": "uni-group 分组", + "version": "1.2.2", + "description": "分组组件可用于将组件用于分组,添加间隔,以产生明显的区块", + "keywords": [ + "uni-ui", + "uniui", + "group", + "分组", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-group/readme.md b/uni_modules/uni-group/readme.md new file mode 100644 index 0000000..bae67f4 --- /dev/null +++ b/uni_modules/uni-group/readme.md @@ -0,0 +1,9 @@ + +## Group 分组 +> **组件名:uni-group** +> 代码块: `uGroup` + +分组组件可用于将组件分组,添加间隔,以产生明显的区块。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-group) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file 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/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui图标库", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} 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 zcmeFacbp`3nLl2is_w3i)m>GcbC?b@J*lUsyC;X8*`1l4%{ea{*j?DXWCS+=x`1Rc zpd{rG^~9_Q2$&HOFdXOI8BR}IPdz;YC>~S$eLqz_vkNSWzx%yjzdwH8-F~X8D}KWB zdBXd7KA+(j$8iqs7$m|vZHHYVCsJSej9$Dvt$3ZLw|by z;14;@w1?yD*X`bS*{-|aee@R`=jrCS!}shtciYZf`HFYq+J6UC_uzo|LsJs_kAj-^ z?7#5RE3kv-{hH(WEA}1SvF%~|_jrzz{)l5E`?pUw>Y24^H?#cMO-kvNd>m;s2%o+Xnw%@Bmm3d<`kX zajga$@=qE3$-a!E#Hp?L#t6f46MGkad+;CEgR5KX<$7OzxIS8c{uIU^jb>;= z92uh{ulUFGJH1?#i*rr*&vEbO-o@R)y@z`*cPB>lJGpmow{tggH*q&}w{W*|w{dUh zZs6X`9p#R3$GI$bg1d^ln!AR33-?y;B$wi@<*wtd=ibI$!ClGidlPpacRrWq_HvuJ&D<7lD|ZgJjoZ%c;C6E7a=W-py8@VZNAvet};)>j2ZV9)PTZT4R&aL29a;v!2+ybtRo8Tt75pI;5$Bl90 z+O{&05{0_AbEzlcCG_5sKj+~Wv-j6a8<6x^>DphfotYkI4_sSfX{Imv_hOq za7iu(2^B%h1h^m<;#5xJ+-NNsqDA3sXnhCdoeMI_!infF>X+GT>3)upr27B+KV2h; zPc)k0KH^7%z-L^&#UOATS1%d_-s9@vdLnQkSMM+g{K(Zi4FYF!^^!s0QLf%)5V)1A zmkk2na`j$=z`NAdDBTK4}m}4p*Nt2xEw=FEj|FiK|Z=gmJ~y7a4>R z#?==agt5lep^b?!>bUw+gE0QM`Z9ws61nPmqHy(d4T5ap>bner zl;P^T4T8Mk>U#`=U#}>T;l3fPY@&&SEqV{Agj1K)e{7%#nq{v zAjmJSPW1#ql5usaCkQf)t5ZEekZxR^>Is6JePQANKmd${Re_9N zeC6uL41%QP>cpcU$Xu>|!XQXru1cp2INNKK4d&=Xw!?FK<(aP`{_g6`nz?=T2jgsZ>PAm|gW{w{-{ zS-ASU4T6s0>US6fZNt^yV-WNXSAVZT&_G=MPJ^I}xcXfNK`U|fyA6VV;_CMp1Wm=& z?==WIi>trSAZRbH{(gg?$GG}^20^27^?xu3x{a&fZxFN`SO0)P(05$@0fV6VxcUbT zf)3>BA2JBqkgI>#Am~M|{*MMhLvry<#|W8# zpsl(3BL+bibM;3Jf(Ga6pEn4)oU1=(5VSg1f7~GGcdq_~LD2ME{R;*`=X3Qh8U*dn z)xTsA>;SI*WrN5Ms(-~G*alqvs|LYJ;Obv9h^)2xlLo)$d+Z-;MVAEdX#cd!rA+u^&| z2kGtbPuK_P?f*RXLDc^GzYW}X*{$p^{Q3NoLc4Ia@SG`V+G(nr`^$h#Zt<|>1cFgu6+wbk&_QxE4$0o-ooH^%vo!@r#x!x-U zrB%{*-Rs;hdWJmD%T@WkieI@=`LlXN{k6Bpd(8WkZ=UZ)-*5Z_{`dO7A7~BSAC!U{ zf{%vgh29qW@9;qQxyXjdGts{26R}|28UJ!(AaPf+kldHNBl+!=HFaa^(X^C4l72E{ z&0LuIYEyU9eN8{fPG;}Qem~cqdwcHp`E~jG3)RBqh5MVO=AF&YwRl@@Yx1lBKJ=n!0v%-P83{Ia)ryT<`Ac zez5yrD=y{I%1*ZHB{6B&F%On+4ufLzEaaK-sRl9SU zR65teush7E75bTPXGNB__;6WQb&z%E=$Dy(bm!8R18)08HA{1rz1{A1JG2Yj3U6Vb z%{E)2OqOQ8Aqw8m<#zYWsrFPdzyc{Ymg-31!$0EiXjkW&CBIwsWLt8dwV7P*R-fv2 z%zP+7mj;u`U;tMplT=)cS(N!GuR+T6L-H*LOHr|EdJ#p5xfzO?5iQsaWF!`2aTbu{ zd^t5l*T}UYR>@ZTS(o2yDYAUIE5S19Tz8eFLzS*mNj}>}Z znJ>kgMYpHW!*FBokVj!mbT4ee^Dk49cI{8`QjGV>sTL*(_O$vJ*`M?;lKZjM9?-tT z2K)X2vXjOY>UNnuN992*X)Ra*+X+X>_@)1dBx&|&6KxS87VC|*dmY}wz~qYQ>G{=4EM>OT z_-JZm^iz>s1fPoWb$vJ=iR8oV4&&!yx?WcGkK7?qTW(Y5txPNW3A^mWfykzOU_`Rt8;j2@w(M~Hd?c@no94BT%v!4 zdyQXe&iKC3_(HQA{B~Smkiu=yPSD5Toq!KqrFt!*Ii1VP-PM{Xd;I}(SG88jq}y3H z`l5^>lTW4d=1kh+MVC~B6zv33be#Wc%dn6t@~po&^X=l0(BIM$Qu$Uj%3qtTCFAA9 z%^`K>yM8Z!;@VI;9=Q3KmiNYRg*&VYTz|3OUP)^Qi^Ft3-;Vpgsr9Kb#=`2#WOcZb zVoUKP+n3WFX`Wre*2VHszJwz>8|jl$L+D7nPE=(X-zE-&UKCZ^h1%{bOI#J976n_1EwEY}Tb2cb}_ zLPD^6TBnPx3)e4fZC&`BBU{+MZNpK8zjR>H*V-1fwl3PRsFk%X>RjhANv2VgiJ4rc z>Uy){wgBuU0QX%Qk!T4Q!yt{wiwrKsLHhpt!kHc&pGrMq;x#v8S9qQFURXE`! z|6N!qy=2v~&QiX+1N|bVauzr9S$tFj^j0m-FpRM+m;4y`V#Xr+Qk7iZN8LcO8Jq{9 zhJA=R;S$D=*xDjmU%1t_z?vUxHm3)D;YCXmcB_9Nolkcbrdd2R^QTlSqVfeba0Qmec=Sp$3q|HgQ4b$W)=%4BT~d>3rCp}+4F#8{`e;??tfMT0rk88 zse}}K2;`&+UCn(DPa9?-XC!J_)I z!&#@QI^*r_ablg8siGQCP2;yYecP86+Pl}EzoEOmdHFW4lkN9aW6k3QU&z}vucRd8 zjwS6*pU*k}LhTP;=c?;H9O2?{L^7>Uy7>7n#ui>BNl4SogG_?hsK$5Yc z3~Oo?(o#Q+&QPfWqOLY-?E7}{DnZy0EIS?M39;71KAfqEljeBX@7*o%$J}NAbuQWC z_%?0$$3@%20xLT`L9btXcc!f^!*)knEhc+66CU>2U0S;wl9>{eVJ7M2I(14o4mIs1 zn>y7+vb&q)cACVtmt=h{of|YX7)cy3ZH(#dTSNm|cy9NGwdG2symrGgvpc)o@)fer zt6U)`KwhtWh0@)9#`$O0ukG&svd?p|oRAr=^x=Ype33HOPRC&{1j%M+4TAu^B!e%( zZ0I~0y)0z#?zwXHqvubTDc!sOquy$m#n(hBht*3q3P+9+L zea6l+RMFqkQ{drK|05iSjSwNfiFA}c_%kVqhe4FrxwW4S@nBv^5Z(GQ&NL*&5YIl; zzro48lB!DDuWfxRi>3MYT`sTJwM%Rte;((~rBmnPOl#)?oAxU@#e6u&rWQhfdW)k` zn|*$#H=iRSb?-0HvOVMyYgN3SKAvcp4NxmVb%i=iG zwJxz$9_)mw1#}+ES8`SUN$p5!WeFd4V`*h4E3LeMKWYuwH`#el$iCowTUg<>pSTnT zUBVRB;#BoLrt;sxJ=!}P_nt>TJ|~>83gS{5^sG2=z$S;-UfH?JrM_x2D>IH^Y&Mf0 z%(`^b%jboK<;CF4cqIlypo4~Hg;Yun_A(9MvYH`&|_3TdH$e9MBC{8+)72&kSGZ&bW&<>dV4 zmYF*WJ#dd_^#{od67nGRSqS6wL)y=7WV!Dhmo4_D6+GSp0_`Fhj^u-`2`zsA@|)BPXPW%@FL7 z8c9EKkd@<1Xd92TN41|e_f#`&0v~Hx;NLs{kkbRBBSPE#?PUt2vK&(O z+SUwvMhh*LOz9KuNFZpkO6)!1lHFwUswQUfxZQ%?X7yff3I>`a=>UVXt_yNuKoAH8 zLfL(g+6f+l+vi0)WYQ$fE5sQ?VDJQwHbJGSviz{cuK05qsT@ibTW(psV!?Dvhui5j z!4);DW_#2Z>}*T5TJ8Kxg6wGO=*cCdQfX*%dSrMilO3Pl*)iJFYnLQ@%^7WSFS)y~ zB`&}zM|n=YAY8=1r1M9<2A!NkW0Io~@R$8)aB5o%H9r+ZcPVPZg+JfZc4BJH!pUNh z6LUv$TUyzcWm^UZT+-6H zOY==r%TDuZH_Aa)8jT=br&05eJEHRe3<4^KU|7^$amXf?C!>_iRi3Sy0P|0EuWrwH z+?n>(-BT@v1rsZ?gW2rh)KF8?P*b9%Ww2P}|4heMP3>Q{p))B-$<7T+4@|9^SWsxu z7B;S&8q7Xd9Hgrow!jYl8@m1YD%+7PM`|mw9eJT+X?y$9%}YBvmVPUm*s~`do7(B- zA9L?yM>=rWIM*cGFTU6=x4eDR#@k-HcyIl5uNpgY~I3nSPuIb>RdaA;9s1aqwm8)!O z#PJsgJ`vTn>Wby;HswwPjn$q{wDq z0>f~-56`E;mbbAQqLkCC0n~=4Yp52ODtsJPfeT540aT5^(YdoDVQ38@DI?cI}^8 zvz__f%2hmY=MV@`J5LvLz4 z>xXl%nti6QoiFLnOpCLRvO%Vj#>lfAJLPd`U&h0Dw}Yiw#u4{39B}d_r}iinlr?Mr z+$bns_Udw?s*Ok4W*dQ7SQX_m9)wyp+TingLGdaoC`z1WX=mI|ubTBg@8LfS`Jr-2 z!lbilA=h0~k}50%UPz1nWbIWl%>dB6exCiur>xdbv9HkfCy(8854+;-yB{lz6$)cZ z$MgB|e7aPcUn)&Ox5c60w4b?RF70Q0$4h_y^Gn*r`LU(*^7(m7$MVCS^E>gO{xvYZ zyY%vqq=m%M%aPQ}6qt2@$w3y*ltn!E6Dou@@JSnrQeNHFwR#tA%IV%zs&||={AaYf zEAG^OW)vrUMc3+c*K~EQId^rJ_Eh53Ua^xoud$34cniOO#ktxauW>la6I*zm4)E{hd2Q66h0)$Lw7 z*iQEiywzsIkqKFnI!tOYYGv=*JFlZ>%cU0u%LNv6gxP4G=l2)1Uj&1D=WXFd9zXea z@fJb5BU;IcW^=nLb`??!Q_J+50OWNj_U`7yc%mcP-DEa~wB9-Ib8|zwd!qvL4H61^+dd_7MwM>jMeV|57FX#R9AKt5 zLtlFl6CqpXv=4gPFBJ$>CC{&0hgf}iLLtc6;Mwl=Yr49-yVk6KW_D+hNhk;=eG`#` z!E`XlzeE>2yKYUnySuz*-LrJ%%+tKt%>SG&9HeW~!G=uS0GkSCZ&rW1VJS!q#zVuj zYFJj_4Il|5*vX@h!K)B~qR>_BsXtuj{Zl^{4k9bf2FXRJ&SJD38N(QQfb2+NLUus`1ynL^4Co!UaJ7~PNYc&- zXHSzP*3IR{4~rP6R>Zu|0=K)1->~|n5onKy^pa(PbSVj_{VHtI@#M~nYqg*hi&|wHYIGEnNov_5>(fU zg_d;foWac!{FKd87fxE%u_yHXV4$&VB3oBA=rbvbitM%XLx@I0Cbm51)G0f;j2 z9598B<-lo!*~6_6vmeI_F??oj4f>~xodpLoqX@~Y;83*}GqWLI34V#hdy^)Ex1G?!>T=sg#v&XQQ;c0$=Okv%Oc8?z!>&T9jy33`JT>IFOu`HR<4O_Zc zge@()6D2aAb-%NvdH&?esRK)4R`d6d9T_hz8k*`Ym3pU!7M1WM?Up9P4xb!qdbT)F z#Ai+)UB&+w_Hz_{&Z=;ec>o{hC@<@Lh4}P5CQ`d49-8sa7L`EXxjvo zHUFj0Sz^k=%dM$g%DVhvCFZnBCli8{@+t23y-!lSDYq$cQnC);V72lolZk)8;S@yg zm|1mv!NhynQ*uCv+(#JLeGws$&PdmMPD%T%t5;k7Y2|a*xSA~2S$&Qtc!906uubgv zTkR5yGIPU6pgLqJk01-MP}IljFvXsR*f8I4=6E290kC-{4@4Owy#k*Kq6kqnf(CSZ z)~H$>RkY|f9seaodjGv1+1Dt$^Q;y0e#z;0fH#>^yw!RG&zrvBP|d4&8(ZZFe$mA9 zH(EtL#mrP;AG5AmgZiisy~UNu_|L3wlk1v?)U^LS=JibApK$oC*D*8dCpkVOm_Fn) zN0^zv&gyqO&YReJgn1#hXd_U)n^0?X#$T`X8?4G~d!u~mSM&$UNBv>Q&{@o=fHAOu zGB6nYL7z;Gn}U=C?g({gCL{^Y0YoK%kuc+de2Guv;5D7ZILhJ$@Qsy7CP{OT&rogmzo9@vsAU82>}yOSWrH<4x?LSHVpB z&snU=z!1oC`a4hrk+AH5pPW{b86B*l{K~U}7i_4DlQ#@ED19N5>bBUN?u?x9d0duY zzG<*$bpAl!{D7P-L_GnQZ25aIiDi9DT>ay6%H=d!fg;A;D{HF;Yq4lNwzIF+md-av z)kri-@qTzz;J@SiPkYKS9VPH`X+syYm1*;R-lQ+)) z7`Riul(DoFMm@u8YI?tiYlo?peR&Uj9Zzlie7d4N!xT1LA`D!!!$;xqB~^}b!AycsMHh;yncoNJ_W{@(Y>&vvMHY)3PT@e z;8y4{&XgW@>IX-#tNnR*SDTdcyYoF}VRgKfSKQ`UDXw*3u=5@-Ux;t?#G2glK}|~s zpJW4?_M|_>YhTfRWpy~L%*U2$zhXY@e`+@Hul?GJ@V{qcha_;aXQ)T^@;!Nv+ggZU zrluT%HWR~>qu^JYEva6HH#RNwh)g^9QXtK`v}fS1KIgDrV0FCv-TK#Cl>R^>fX{%e z+gI3poFCWm{V}vt1H^~KgS?wfXh8Eo5T?p_37U&+aorNv1E9t)F{Ov!^wGikk5QoS zSZ*Yn9myH{wavBKX148EZA-Pfx#!jApJW`}af-J5xEfZoBQR;yh*I5rfNngnxvBvF z*AIr(4`Uza^kJ)SX7O?z`O*!QH;kB*aU<%CKw&3HYd~;s3`E~L@6b4}$a(&%l;UM< z?8qBO)%jH;2j-m!b*R~-(iXgG{0Is@+ZR_O4weGnu0~%Nw%=cgZf0L$9ZI|r^+Z>p zqZ<2QYQg9>qZ9v1*i-vSYiDii;VnI-V(;n>U)Vpi@A$r9U)a~aruRtGNH#OPWVk6e z{Q9v_Ikuszhx)6hYeOusa&N!O=W`A28N`S7`uDE%v##v$W}{(Ujj+%c)cw@2XFq~MdZ)sml|gt5YQ`Z}bmdDFRX zJi=P}oY(0n!=&N0cO$$lvE3$wmK+Z6!zMx7emeSU;3miU=V5oZQ>Ljdmr~SSB#6#1 zIs)i+9Me5Fm?4xl1*IAwEt3JyLNw_ejBo|PJn-zgb8L$rAy8JvGJ0`D_r3KIX94tt|B`O~w4<>2Z$i{+wz)nF12dJt5^kJ$m*6`4-KxKnrLa^ z<*>@Lbn>F<=BzUjUdkS_TEArtSogx{v#xs77Sygt_odT)^J&AsTwc>vTpS4xdIR<_ zl(;Ilv?0(kwb~U?1=;16S4>Tw7fNi}QOM*qzb$C{mX(Qnts&XA@=+`MhsI;@EUGiF z$5@Xd7M!8HfrfNKu~9+jb5yjf$07~ivD^)Lnm1&QA%8ObrR|l0otNw!sI)J-G?lKk zwJu!z@x=>U+iL05rC)BFZfl!fPn$NjFSfn6|J;6jdbh`d`=%DHT)$|#*xp{8UbKGY zqN#mFTuG@ixO~~~=YlbfkG>;+O0Y$}FV*WDE zBdxCATb+5hU10+Ozjhhpv{P2WZ?&G%HuCe^743h5O^cg?+RMH&TkB^%s-k_(&%QJB zvOB9C&bd8Vc2idRAMNWhE|Gc$l zaG=nfQ8#!cTxhn3gTt|eVpS}0ci82RT^UuB+RD}EZQIiDE#Jh?AU?MUHd-V55^ts= z8Kr>$CC50IhgpM8wZ!?FMK7okH6s~IC*mfOwDuF49wbdWnq+G$@v33d-vXX+AqO~uyk4LLH5hJS0`LVf1mJj}VgaOQndN}U)Z%? z;(%RtyY@G(cG3N8=a~a;dewRwnEmIT*E&1W^mc^|K=~izzl4nRYJ-o!$ObYCpQzEc zhIRsirK>0Mhv)>*Mw|f3!U9&ebE8MJEuZ)o(_lqgR~;Ftmfbvaxs$Z3J<~HZT-$NT z;V#-7tDLew^UTCDXJ^k~O?$33Z-ZMdD$<5|wMT1%13iz{=IwGI?Od11$N@QlCiVhJ zM&7Y`4nc0mkZ)u*sU(wUalkojkX$*mYXd+HKoA33HgcQRt=DsxDBEfG^09$Lu2?Ki zF8t`isg~B3d}3g1c~gHn(?8LlVQJ(f897ni-FQ?Z`-ySkK(_V3z&g64wPkAIy1@g* zreJs^J6eEw3?sQP3eRO$ZX8GK4mlR;X;DgvA0#zOIohHBIU129K=Qd`-FV}-)*I(5K46vYvWsp-68lHv|2U~&(nGwhzV(^JLP*5cIkM`_1w7EK<-=CPaY?nE*t3y!wI zkp^#)@8mTk{8=-@R9(?Ytevj_ZDkPr$ep3`pe+fGU)x=&QX|Y3X-}p3W=6FpvhF-ymH9h*6!{Dz5QdK0gVYE>cQZz%r&4v~ztq}())L`+k7KiHE z8t>n>MG|dx$>RWDR@z2-wSztL=JjOV5vRSDYi`c5x8<5YTN^U(W}nz#lN_6x^7$s_ z$P@~hxXro6=3JFt<}#U8&)87){_2pgcLa~ndPf$?$_b~lkY`-JnX%@)cd&MUKshJA z%xcbO-%k&De>U%MHstmRJ+3^C8ds^Nupi)kB3n;ay$ROCGH8OT@CI3iok(Y5u?0N!?m-fZJ4q~NZyOq!#hi|T$09Uu2i~^@9i?{+`I?Xo zaJGkZzf*@e^?XC4gD7eN#nUAmtLA1to2yiE%hb3@T6e*EmpQJCb@XX>TFj=+4r49UCam?eRCeoz9h4%wKXd3F@LUd7JvBc1xfhFFg>P>hjK-l|Pt<=%ev-R-S9uqDpPNWNM zD`dZ-_+?|;&;>6D#{@g#V>0P}isc&C4pJxbPzQcNw*~;~p6WI~?(8z41gM&Xx^p2QTM85_N>^HXE}?wQ7p3t!NKSneEz- z2M5^4hqYT`NnH4FJTZKkHgXw?K=B=60z8IUa9InacZMcZpf_~!t{a9Bq!`&167nS7 zNv;kv{YzI>BJ~|zFAO+h$ZcRqVUDX&t99GTN@c}%5xE%goL7}RE=-f)1(VtB%D9A3 zxYB!nZzUWO@XKvB3H)1G!RyWCTaz}j8Y~v4TXxuzt@)fUDESz3EAd=s%i8#+1&f;7 zTAQaQHYe9Kcjn@XhxC+T102(Bn7=WG&9HH+dZsRoZo*UbkVIM^!w=1lVb}T#)=4H~ z4DY@cnHH}a!uz$~>O)x0RsBkJVxp?}D|U=+-*s-E&vUIW?zk3n&1mi!VudGAE-U&x z3>{X)SYC{*fGue6v?T%awwB8KNP^~b78n8nKa@t!OyG5`n#3GdsU(LR00k~R6ABgj=M0coPv(GBAq`KzcWDL}(kgUugjS)}jj8mFBgYaoDNPQRJZ2waHv zK|_&8Q0~Ieshz$S+G+M;_Gj7emz{R2`#pkrdj|iun}zqde5_#iiK(Whl;~3hYb23~ zSOx80c;QyNbU;-Phz`rG0&jl6>K9eNU$p`i6|9mhOIBf--@{9C&|-F7D>UV<$~Fnt zJM3d{f!Z&6^F{4;lgn>!K6me~yu)u2uC}RfQw7V_f?4Y^uSHgTcyjS%1m2VwaHu_f zJzj^u;V<-ocM`BJs+bdt2;A(PwVHYwV=>wW;uO-cW~3v)noyy_RFa=MD1{$_{sU8a zY9wCC?!Y-__w&e-D5bKzzuAG=Y_}9MCo;vG9h3s~1+V8KkN5N6vb)?81~7B}*6u}Rsi?{O;94T5=V zx(WJYt68|g>0_fdpP0y`lcG-%#7I0I5rs>vK2i1gRMBg*qdS4XOQNt5X<(;30lVuO zA=`9CQ&xD3!#;|xYCZC%!)-Q`)91)If?3&QA)c-0$O%z(O%q3(e2=n(MF6(winHzIQ3pdHk&O>wOHuo{j#acXvkqYR10@~*g)B#y$3MgnlFV7mNV+7z z0%qe7W@wSPGBO3LSv_IU$Vs%ADRQ0zq>4MMS>tNsPBY;lB=s7j0a6a>i)bx>z$l7Q zES^K=t5=eqvYE{T7FD*G2hA$G#HLyX%x0TS#ZU9hFU=O~c{bHyww-75^0!-5e4Fk1 zw!>||j8dvEv%6Hlqf3DxUpW-0VZK@Hl*Z!>Ep;*M_c} zd;9I?GwNbIwNd8Y(-lJ(&(1e}60^-quz^-_+Yo8J0KH4CNTN=f+>sQa!!@2y_dOaI(mgWNV!zd$R;}@jYE4_5qTqCiCid@2 zN*4W5leKBA$!+#&heP4^uA%Y;2a_?rr=nO{C>$-@ML{j(wzjl}qCajKO}M(3tkSpa zOXg(Q%VpK2rD6rAx3#yLl|02>#o~-5BxgJk;Z2w@W`^fDtLIPf zcfb;=V#eYkv~-*g_-a++^n~tvL5urna?Md8Zv@ECyRu|Zl&n9SOu02dZd1Fs%+6dm>bFSm{`ZwX%8kl`L-lmlkDJGTk?mi z*lO+Bqjs;^XLL;O}5f!&y_-VRDNuw?+G}P}*AHyB3&Ob|}ZjpfxQZ;PlLE^5n=LgWQH! zXYs-kgeWH;?hMPHVkl?v;aKPWau?h&HEKJiM%82R%hb8kvzIt7w*@( zH^!d$2L)aqd2nnOvZTF|b_cm|&l@h>n{^lN#GDKF=7tM*0{)y4OCb!4Fqme<0AZV* z6@{tkW8_s1KQtG05IGH${5BVT(7iawcA6Zb4{lea>T#Iq$>)Oa3vlrd59n;X{XJL}tR4&i!RR(zY_P%KxPt>!B&C^XVX8xWel^SA>M^c{Y` zcBj>1bKo*u)xh;HMBmKLA;1tJWV2xvq;#V&C0o#@o*>J3fl37DuiWsO?0QBZ9$S%PIWlF+j zzfQFbq=)j|Q&!gB!uIP4tmoOnvh_ASf%OP&-?I=2tYd@cRF!}-uz!LT<$z)?N!qWP zVuyrp}p_HYH@^-$~n%JyaUs19a{oOW-XnRJH>n=IJ9J5Q@X)J!~Em0zquNQA4MAoSwcc04M;3A zL8CIko^b}7Tra%fYzn#l_(xZ$$@#(yuBM>#h3j#|`QnRC{fIM*BQH3ES?3F<Ip#3-^!ezNO^7}&K^cfhsorJa-UMGa#?0=wx>Wn2LpCL1 zJ$%F#Qf-G1*;Uw~hY#5pX8Eq4n+1%))7||&{nTM=M6n+_Y*)i{by&3@J`4{8g`30Z zn`xHjX^b9tCWMooL;X6^jnF@6F4*4Pc>$LTZ(Mx+-fq4MWBr6hbqF`xa<-cV2O;!2 zv|pLq86kKcvWjqeLsqq3VL4&OZ4R5o&JIB!+-#L$vNrsvSvieJ$XQ41S?fW#6G;tS z4b6?KGp0)KUW*bGG1<)sGLYE(4Quy!RayHs2Ak)#gAL`LoPLmGY-0yg0Nv*Q1Rb3 z=xgH*5>tIRaKRBYu zwX25JvC@?J1|Gn46ELP3jI7TFFsrawG2NoOmW43|{uVICFf3`$BJzuy{QqtDHHBxc z4@w@{m0;FIcDrly%T|&7##abRt@3d}Sp2fD#ifXk2&O*%a3tfi{|*p=8j$R^#oGU* zkR*D=VnGxhv8oP7lV|2%tS`Ter3$iMO%VY&(s%HGG$))eO#M6- z0ayn`fH2pyvw^ZbjTjfk4wz97cKwUXx^FKD;JwIDa5ATD-##1C3+NYLDI>PF0RbcI zYGsMzVgFrH`)D~-C*+;lJELDR2OHvrKox>eY}`*ZV;u=|#Osm04oM9}RgcvUaMo#a#8hu6+K~#%0k^~H zF*`kn1LH z;Nve(^k7O1=Ed|Rv~TFP#3fEeb=*05U;wLYRJXrryKYV#m}E!cyif{GR{IIQQ~lZ( z4Rc|gW%8oQEp+Rafo-+gwgK!T6Ke~OTGq|V>h~hX=>S*1T2{}-XkeKQLW~ev0|lNy z0*)o~9KYqjftmLmU}96bJW(z`5{m5&gd%~l4}^z8_r^m5``AD3+o!GC$9n1XL|Ho( z3;VYC`~z53)_ItRQl7RO=HmT1 z;k19GqXxR;Gq(^G<<_A~fdf(ifF^yvb{g64HB*Kbp8ChxoukG?vBBBtWu~)EESsd6 z>>pk@+1#qnY5(xTiIyV!mN66UkV*JCk_7dMXL{b;%fc{nazYs4d78C?7B`slHBFv1 z+BU{g$Vg7<9e~E4>j3!d-2uUZsMw(`Jv~_0EWo?4)fP3+Up~K}eV5%i^9SDbZI`WR zb2?p8x--orr-}V^x(AnU>6wNbaxLA(E(xZl3-hs5L}6N6#xBu*YXd%Mof1QCI_(Zw zSrFo(5kq(jR%4FAC##TzfK`!~t56e!rsWB2BOFoB76$KR&vae@mlNBd3oIgqOG~IU z%uhY$_zS+ehp|12F+##F$rCye^0=fh2F&zscA~VRvvb9E+B{-3=uBoHGy7S)i>=#b zb;Tu7v|6ON%eqT@VApxbm#4ILY?uj-7u+yU@Y|XGCjG7j19LoeoUiNiu39KAt!EZM zhUxGqEHz?&J>e3FzESqTYj)T&$p1J0YVnE{i?xv@D^@J=$PDDC#2J=+{&W03bWg;;PB;7hvvWm9$MS91tmynD9AGr~zhwH;>HY<@$!y%o zR`0YqS!3BReY$a%uv2omw2U+DddB6FoEhgeAog}=hQH5^J)Chq>r6Wl zRKLba$LIQ=c+-%{qm(0^)d8Keu_vu@0=_{1L!qI!v2PLchBXgvF3;{EABNnIt}0va zblT)gf4F4%@+I0Rv83!xI;EC9d)Q;UcmLQe+ef3hNHiO{E0T@k>u&ste-X4}16`_mqa{kIA(k46FRobffQ-zfis`s?rVn0oX@%LGh8_Go7RpV8XG%w)uDOw4pq>>bC>Enr@bb+RPV_}^A2527h^NaTO<4r zFhg<*qmIxu!(@al00dDtDfRe?F|~9Kaf7hH5{i(4`VsjR_sB3lf8_AElz6(WGkSis zttAi4s@dnUD4omOBj?9D+i)PzEVF;h7sFjWajY(wH2K517X4&vt$-hKxASXelW4c3 z%yyH>uC%eel5BS1w?+TmI`a{S=NC4MTNdpuw%l&D+bv1a?$kbx-3G6Y>h*g4TIC_W zX~OK8wfdp6QSjLLk@n_7qu^@Cingd;@E~g9iF#%WXR(|0!tFyi^NiB9&3wd3eyM?Z zVU;uB0KleGltxBz7kujhoGLO^C;)?Rte`NAR9>3HsekLi8gMpH{RGT;6w@Ns=J+Fy zHKztDJPWo)S`!|unIw6$QmhvPvJ}j%pS{Jzz1v({k^(B2nzi?vZK{WV z*rVF2Kk8Z4^CLEj|IZ`gls9Sr<}qtWJgVwpH=1Sb(tBEZdRp#f=Q5l2r-qEY54q|I znqhB)%TF!?sRWr8M4Zj)-JKCR_zLl$>OqA@h&NlXTPNg zQ*_YkGMlux;O=aZE$nJ`4_hsY+5={f$EN*GatA$OlSK-(GY@a`xIc!aZQL%CFQM03&~Oqt9bOIiiHT}ZB7mozJkZ(Z7HMaoVnltG3K z*6V5Govy^HRUZM*@uA|GJl7Q|hIsH?3OpqzdrQO^Vd6Q8=!e~@w9b>&!GKIWhY1Xf zW+-45LZmoAP zOFGP^RM3A8v1}16+0_e{?Ud6son^!2sFbBQXFQ2k{mqsB5OI58h(=2>Vz8{s%lJky zP?l1o7|X_ym8$!se*u=HL4KbdyCYm+*72PM2+X>J|BAzS7L+zN$N66%GU%ll?^y(B z@<_DHQq~>$=`<+J82NKyYJU4?tj^EbwB?fg9*6xw*sC)Z^AkzGSMt1H{+j z!rkCRIl)w!Mh42|=K0Hgo-g3lF8Rw}mkSD&!lgX&O|P~IGl-n`-Op|nEFW;*H*mj+ zH#^_u;%x_%EYG17``=`@?^m-Lf-v@Tk2p43*whKlVB{jsW+d+*NL%x<--}86N;VW~Y@Ho|?pi(e*wuu$wuRINm;8G@Bz9 zm*29`!o-DEuS?9D>`8KWM`{TV5;WSDVEw6vMWjO;gx&z!INY|RH6r>Xaa#0?3q{Fi z$+9H!_!7x#5@`{3TG0xypV8lMZs>kEyJW|_2BAJXW@-S1I-EdjnHYl=B8reGJ<3OM zdcw`~TAHtwUxbts*6{qD7hY3V4#gS6flK?hpv;*E>j+&*^#tJ~6AkanR-ba}-o zi)B*uxhxTT%fdEbIj@cm=^-sVMK=K#>Hq|5Z(q{Zwz!=VLXs4K!2?;7=#}s=G^ohj zsx`upfDe{Of1)uShmUX5XS@Y!c`;BE%XyXZG$Hixp%qz?H%B?I6wpIWy9u#^e+_vZ zV*n?`Ho?B3EIF?ibEg;C`WIt1-pP}Rp+YhoNhmf` zEV60G`badQWMfFU3Ps{4PxfrCme;ec>Ec~?wJ!Sg1bcJ$ijHJr?>z6md6>;NQ5YH; z@%l`*gss$4=xEC~mu$9BV7ic=9|)Njh{HQB*a0B_%zBYOi+R8(JeUrJrV2pB#(8v| zm?4plD%Uar_L-ACTdIo&tc&{w=J%erM5(Utu5Rf$d33V*oww)}Sy0_l8{6ldw=bUT zSkaAlUATQjd}_Mo?z>wT|JTHs@6_8eOD(BCI{UwCOZMxzA|M;`?{3U58zubpf_wiT zH05dj`0MQ`%rVaEwPWubL!7l8Sm!jPuVW?POPa?< z1D3i|_l0YOtmG35Omz>B_G%>8pqs<6Q;0C$XW)<^7Okza2?xKU= z@<+@TPye_iU9W_ens0D67Z#XITPIewm7TZng7A`HF}(;uW8^rVM4U}R%%O=QO~}tH z1EMm*9!P(h4T6X=61#M#9tH;RUqaUO*$f1(HFgMK`|0QiyJ@pFw0X1pE$j=MH*3S2 z8QXLu+T7ezV9mF9{e!Ai3b}2*%#N7T3#&7_2unTx+wiEkX_NNk#+x>={*4>8uWWj` zxd*p2Kkf4cYYNhXENWt1#EN{b@Z_KmE1Na!^ApffO?pqzyao(*vefj@7X?KK$;Qx! z$fM=O*bkJTeX^^zEMaxoV!m~oAF&5jr$bbJ( z80q=iOG>k%z34@lO~PtdVBto-y5i;nBi z3c)$dfSE>)KJ&%n&GEQT`?qYRvanLg;&)3NQ_Jvky1P5)i^cGhy+G#{R^CQGT4HZI z^H=*MwiddRA1KUP(iaQh`~ z21|Vlg1`&T(#1>0({U^;lU%X-Xvt|7mV}h+C273hEtD2 zohx22iQs&Jzr|T@TRE}SWLi*YcHThP(dluZf}3jG2>jTx&kKtm7yH;D8N{9gk#_$N%{|KjG&H5vd^(_itvM#_oQ#%X>{lEvQTG z#o*{|Zhp4B3CzE#lg7cO&Om^b1HoXRZPWLj$K8QH?N*eFJ7sz7cynJfKDv$hlCWN| z(kkm%+z*Rr@ED1}vXK0R$%;I|TE_eg%3;Khb|j(Fbzm!9ZsjceZ?!+Cn)8bX{B}p0 z?MW{0vm~^8oG~ABzG!7`zx7X%U}Q4Fwx|5wzUd_??Hxt86km2;cTbVovD^YXto=Fd zu=@uV<(qMT!qUGisomq^eNoqoR-fDUVst7L#;P{klS>x%`TQyE_F}F3yk&7oqWb|d zqU{@FN?#K{tD|?j=Sv-n=)#CacIEv3* zuUun)8h=wjiG*`u?H8|FY`=rv6k_3Qq%jt+gfx#5wnsXt5s##adW5c!2%OCr&{wE{ zl>rljJzUyUcwEYdT#qGE#pVT54@@p-!M_EQt40ak(ea?$;?c*YNZ$2W;hgSOQwy4l za~F;^uE1rlk;Q*oEAmaG@vvOIR+pjil%V60&Fg&7c-F-7YS*MAu+f3+UkG0O#SW7g zR^EES{-^z6D7D^sZr4c#=(@o-Z{`0H7PE*rkQ)*isA87>j0pZ?4W|k#S2C3bu?>9d z%y$iXSv#)(TfOGPs~KCfX6A#~`S2RuPCE4$TY)Nn#>3O{0Fxj~_)AZ;RV%^V%)QVKSQ^`H|J7YCrc&N=9+}wVx}}4!*1G z)xPB~`m|@|?jJm4ahU5)li4h|>Sm|;p&v+Dwk?|S{HrY5Y@+Wx3J3FDUR^(ND zhyKbS{t1`Ew@lODccOWDG~)}74aAZUGoi!`<^Gb}e#Rq!wJAV@ukx zhF(-`6~~*|yW}9IC(6EJzNxKJYU^cIiBh zTz+1#i!Q4J>*p~R4F`IY>Cg`Rp&Ql|J{fFHE5k)=x*QgjUD2+D$#GE3vA=BI$OI05 z!vg5cDQDR4a;jdlZMdm95wMzAL@8#+!+|KzR)jNH65_!~R!z5sTH1#B!m|CvXlGxT zalY`7_A$1sQE!^_pVH_2>oujQ4g{1w%b{HJqnc#q!!tq8m>XR|f4+pehW~n-EkB4Z zv5qxsd(b5T+24}SqDNY(N3>p}E6^)exX8J&{GXb882(Vf!B_T3e{fLm3!C0Av;A=l z>jLWik;NQB6d?t5pjO*?opTIJRR>{3J=~{vP@{N_2#KCsf^t@=`{1MC557n&Tb45d z{{>A$e>eeny?%e3?v2;$3(c~5BcG-f;<0WTU;*k3uWGT*c1Bp$J0l`!4~CjBePCrc zt7h7QMRZ1Uqcf1+5E)|2w2u=XLa!h$|33K8VOX?!vXp_{Q3Q>|p>D8CZ2O+=pT(cD z_{@$yL;J>hJKAFLwvOJheMp!-arKoKIUE;VdG(2@3r0hsVlfyVy+F^=`yJ$i8@Vhw zpoHBNjWkT;+^b|l*+?0h6CUXD3N4(9d}1+Q^RskDk4a~K!)Ny^VeOATx6-7zz1kl_ z>VCEKzDuR8qXj;GGNH0PTttljskQy)Duad6}2VUpCg-o9k47+aIF)5%LX zzTL=-x{vSbM^=4lTUF%^QeR(6Qa6ok+H5k}(H^AFruM0rQ$C_|%yYn~N@Dw_4KE%z zb@YX3bSRxn_o{X}5gUy$wV0p}ME{8~2{YwTHV+S5`Dpa-Z`^o;9;ZJp4=@_0bNV;w zRkY{8U(YtSn;B+9FU+_x3vGF2I}CCPAB##2 z>(}$U3u8;#SmD{i&6`-)_TRh-a4dTE`t|>PIQw>9LjP%SB z)X@90(Ui80d`i`zx-Eb3v{HPei{7duLNKIAzcwNINU>3c&p;N zP<-DKC`zm>tX4#HkhQUseQ}~0Tq5YErP=AzOcr>0`rWf`<{(Djqua z=F!6pIDFK6Urs46E6Sj(%BSC!Q}Upqg7oaW4<(M?e<;zLESrD54_`)?kZe#5`cTJXaiYmW!4=>AM zD+XH*Q!ADg-eJ11%YOhR$=BeKDW@pY_WMiTz zC^7mgTg+hfJ{IM>FgSLIt%0;33qRqDiK(r?Iy>e(wl?}ezL=WbJyLfeT`I+twdgeI zEv0m!TPbW+XrGdzyRoFSmy&C7EcAbSY&w+e%IwGj#Z*&i0SWajg@mN@*OJapFSem>jX(*;D~r-{2$SN89} zGIcl6uD*4Ca^mF4iOKVCsqJ6M=k7d_&t~s|zUy8#n}6a?F5jx>8?fJ1!0qCl%%|#b z*g;Ws0NG&z>#w}bBYYE=g@gu`3S2h0HU?c6MDTPBplfuS367U9v}dErigUx?v_*TE zb3=GQ+^KA&zpRxyGt1)xSo{sGfmJS=#skg{f16=G4htLC1wIaYy9mO1_&(f77k|*% z_3NeI`@zlza29`rKlY3x6u?pJJRTRY1ia8(M>~&0-zT6^us7K% z;27|`1)KzD_6azJ936~yBq#8O5!~ksVCIGWM*@yQM)z|8OThn1z%t<930T3pw;L6^;Wry51HI!$wP|T?7!3bU8LnsAjog#P zEg@>Z(JrLi=D z0|deq3c~d%9Ov{B{B;tf0+`_YF-0>w%{dw(XaNy=HGDLzBgkM0hBXMj^RP535gazr zR!rtk(RSJan-4o_7d?YBm1i;e@4>cmFAmS2qvz=b+DGF!GI@~>&_SA@NjgM_=?ERA zV|1KO5H79J6rG~ebcW8-Gz>PM!(Q!Ube=TkO@qofWv@_`YGl$Z&5=cQYLHD1T_Be{ z@~KJlaF=+I7U|>k3Hl^`iarhX&`WfgUZE>EHvbIz|7YoQ^m)2YU!WWGMfwuGN;m1t z@IZTuzDl=YSO07Db@~QebcenhN$HyFk5){}GRmo{SqWi9w=LU^Eog}F zGoIo5W~1tbgj&W;sdvFwNQ zaL{{OId%l0mGY%E*R>b?n%S_7il1tQn$Aj0*9`t97)X@T*LWM*@zyhGlEzbR9!ei|?7b=8QUK zV-!P)>3Bw)2*<;(j-!^`nr2mG2Bg?SobIyJjh!3qy3JU-E4dxu`r{2BYA5jL4N47|Rk`<*UWB;hWs9T1DH_h1bkR~3!My?r_lWA!4W)+i! zNSa_Bg}2d^S4Y>=O&3|Hb+ggxKe3>)le&d+b5aE)ni~(ZQaH6@*0ri3fjH@CV69_m z4Fi-&lwxldFYH{26d0KmA&GP%tn!RRAdNOOXN0_zSyPM!s5HJG)19D8G4=~M7R1DY zZ)w+ShCWx<+&Nx$nGvRgC_yh*EUlVik1(?;J}-={*>!vX9wCB7cCBKTz$aO&4~8`f zV7uu50@WshDj3o%j|Od`CkTWUBuLvI#%5Qi5G1l|l$v(;DSbR$f7tXd&7;)C^hB zCW2}WS%(#qXyvDHv~1b76L*@H#j=z=U1LL<>&1DMp+jauAS@Ld`jbdo=Ka`{*<2Ed 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-indexed-list/changelog.md b/uni_modules/uni-indexed-list/changelog.md new file mode 100644 index 0000000..08fa71c --- /dev/null +++ b/uni_modules/uni-indexed-list/changelog.md @@ -0,0 +1,17 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.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-indexed-list](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 diff --git a/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue new file mode 100644 index 0000000..89a30fb --- /dev/null +++ b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue new file mode 100644 index 0000000..66189a3 --- /dev/null +++ b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue @@ -0,0 +1,369 @@ + + + diff --git a/uni_modules/uni-indexed-list/package.json b/uni_modules/uni-indexed-list/package.json new file mode 100644 index 0000000..125c0e7 --- /dev/null +++ b/uni_modules/uni-indexed-list/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-indexed-list", + "displayName": "uni-indexed-list 索引列表", + "version": "1.2.1", + "description": "索引列表组件,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景", + "keywords": [ + "uni-ui", + "索引列表", + "索引", + "列表" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-indexed-list/readme.md b/uni_modules/uni-indexed-list/readme.md new file mode 100644 index 0000000..44ad84b --- /dev/null +++ b/uni_modules/uni-indexed-list/readme.md @@ -0,0 +1,11 @@ + + +## IndexedList 索引列表 +> **组件名:uni-indexed-list** +> 代码块: `uIndexedList` + + +用于展示索引列表。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-link/changelog.md b/uni_modules/uni-link/changelog.md new file mode 100644 index 0000000..2cfbf59 --- /dev/null +++ b/uni_modules/uni-link/changelog.md @@ -0,0 +1,17 @@ +## 1.0.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-link](https://uniapp.dcloud.io/component/uniui/uni-link) +## 1.1.7(2021-11-08) +## 0.0.7(2021-09-03) +- 修复 在 nvue 下不显示的 bug +## 0.0.6(2021-07-30) +- 新增 支持自定义插槽 +## 0.0.5(2021-06-21) +- 新增 download 属性,H5平台下载文件名 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-03-09) +- 新增 href 属性支持 tel:|mailto: + +## 0.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-link/components/uni-link/uni-link.vue b/uni_modules/uni-link/components/uni-link/uni-link.vue new file mode 100644 index 0000000..27c5468 --- /dev/null +++ b/uni_modules/uni-link/components/uni-link/uni-link.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/uni_modules/uni-link/package.json b/uni_modules/uni-link/package.json new file mode 100644 index 0000000..77b1986 --- /dev/null +++ b/uni_modules/uni-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-link", + "displayName": "uni-link 超链接", + "version": "1.0.0", + "description": "uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打", + "keywords": [ + "uni-ui", + "uniui", + "link", + "超链接", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-link/readme.md b/uni_modules/uni-link/readme.md new file mode 100644 index 0000000..7f09e94 --- /dev/null +++ b/uni_modules/uni-link/readme.md @@ -0,0 +1,11 @@ + + +## Link 链接 +> **组件名:uni-link** +> 代码块: `uLink` + + +uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-link) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-list/changelog.md b/uni_modules/uni-list/changelog.md new file mode 100644 index 0000000..8254a18 --- /dev/null +++ b/uni_modules/uni-list/changelog.md @@ -0,0 +1,46 @@ +## 1.2.14(2023-04-14) +- 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改 +## 1.2.13(2023-03-03) +- uni-list-chat 新增 支持具名插槽`header` +## 1.2.12(2023-02-01) +- 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props) +## 1.2.11(2023-01-31) +- 修复 无反馈效果呈现的bug +## 1.2.9(2022-11-22) +- 修复 uni-list-chat 在vue3下跳转报错的bug +## 1.2.8(2022-11-21) +- 修复 uni-list-chat avatar属性 值为本地路径时错误的问题 +## 1.2.7(2022-11-21) +- 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题 +## 1.2.6(2022-11-18) +- 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题 +## 1.2.5(2022-11-15) +- 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug +## 1.2.4(2022-11-15) +- 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug +## 1.2.3(2022-11-14) +- uni-list-chat 新增 avatar 支持 fileId +## 1.2.2(2022-11-11) +- uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html) +- uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im) +- uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor +## 1.2.1(2022-03-30) +- 删除无用文件 +## 1.2.0(2021-11-23) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-list](https://uniapp.dcloud.io/component/uniui/uni-list) +## 1.1.3(2021-08-30) +- 修复 在vue3中to属性在发行应用的时候报错的bug +## 1.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.1(2021-07-21) +- 修复 与其他组件嵌套使用时,点击失效的Bug +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.17(2021-05-12) +- 新增 组件示例地址 +## 1.0.16(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.15(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 uni-list-chat 角标显示不正常的问题 diff --git a/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue b/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue new file mode 100644 index 0000000..b9349c2 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss new file mode 100644 index 0000000..311f8d9 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss @@ -0,0 +1,58 @@ +/** + * 这里是 uni-list 组件内置的常用样式变量 + * 如果需要覆盖样式,这里提供了基本的组件样式变量,您可以尝试修改这里的变量,去完成样式替换,而不用去修改源码 + * + */ + +// 背景色 +$background-color : #fff; +// 分割线颜色 +$divide-line-color : #e5e5e5; + +// 默认头像大小,如需要修改此值,注意同步修改 js 中的值 const avatarWidth = xx ,目前只支持方形头像 +// nvue 页面不支持修改头像大小 +$avatar-width : 45px ; + +// 头像边框 +$avatar-border-radius: 5px; +$avatar-border-color: #eee; +$avatar-border-width: 1px; + +// 标题文字样式 +$title-size : 16px; +$title-color : #3b4144; +$title-weight : normal; + +// 描述文字样式 +$note-size : 12px; +$note-color : #999; +$note-weight : normal; + +// 右侧额外内容默认样式 +$right-text-size : 12px; +$right-text-color : #999; +$right-text-weight : normal; + +// 角标样式 +// nvue 页面不支持修改圆点位置以及大小 +// 角标在左侧时,角标的位置,默认为 0 ,负数左/下移动,正数右/上移动 +$badge-left: 0px; +$badge-top: 0px; + +// 显示圆点时,圆点大小 +$dot-width: 10px; +$dot-height: 10px; + +// 显示角标时,角标大小和字体大小 +$badge-size : 18px; +$badge-font : 12px; +// 显示角标时,角标前景色 +$badge-color : #fff; +// 显示角标时,角标背景色 +$badge-background-color : #ff5a5f; +// 显示角标时,角标左右间距 +$badge-space : 6px; + +// 状态样式 +// 选中颜色 +$hover : #f5f5f5; diff --git a/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue new file mode 100644 index 0000000..d49fd7c --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue @@ -0,0 +1,593 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue b/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue new file mode 100644 index 0000000..a274ac8 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,534 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uni-list/components/uni-list/uni-list.vue b/uni_modules/uni-list/components/uni-list/uni-list.vue new file mode 100644 index 0000000..6ef5972 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-list.vue @@ -0,0 +1,123 @@ + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-refresh.vue b/uni_modules/uni-list/components/uni-list/uni-refresh.vue new file mode 100644 index 0000000..3b4c5a2 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-refresh.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-refresh.wxs b/uni_modules/uni-list/components/uni-list/uni-refresh.wxs new file mode 100644 index 0000000..818a6b7 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-refresh.wxs @@ -0,0 +1,87 @@ +var pullDown = { + threshold: 95, + maxHeight: 200, + callRefresh: 'onrefresh', + callPullingDown: 'onpullingdown', + refreshSelector: '.uni-refresh' +}; + +function ready(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.canPullDown = newValue; + // console.log(newValue); +} + +function touchStart(e, instance) { + var state = instance.getState(); + state.refreshInstance = instance.selectComponent(pullDown.refreshSelector); + state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined); + if (!state.canPullDown) { + return + } + + // console.log("touchStart"); + + state.height = 0; + state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY; + state.refreshInstance.setStyle({ + 'height': 0 + }); + state.refreshInstance.callMethod("onchange", true); +} + +function touchMove(e, ownerInstance) { + var instance = e.instance; + var state = instance.getState(); + if (!state.canPullDown) { + return + } + + var oldHeight = state.height; + var endY = e.touches[0].pageY || e.changedTouches[0].pageY; + var height = endY - state.touchStartY; + if (height > pullDown.maxHeight) { + return; + } + + var refreshInstance = state.refreshInstance; + refreshInstance.setStyle({ + 'height': height + 'px' + }); + + height = height < pullDown.maxHeight ? height : pullDown.maxHeight; + state.height = height; + refreshInstance.callMethod(pullDown.callPullingDown, { + height: height + }); +} + +function touchEnd(e, ownerInstance) { + var state = e.instance.getState(); + if (!state.canPullDown) { + return + } + + state.refreshInstance.callMethod("onchange", false); + + var refreshInstance = state.refreshInstance; + if (state.height > pullDown.threshold) { + refreshInstance.callMethod(pullDown.callRefresh); + return; + } + + refreshInstance.setStyle({ + 'height': 0 + }); +} + +function propObserver(newValue, oldValue, instance) { + pullDown = newValue; +} + +module.exports = { + touchmove: touchMove, + touchstart: touchStart, + touchend: touchEnd, + propObserver: propObserver +} diff --git a/uni_modules/uni-list/package.json b/uni_modules/uni-list/package.json new file mode 100644 index 0000000..8350efc --- /dev/null +++ b/uni_modules/uni-list/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-list", + "displayName": "uni-list 列表", + "version": "1.2.14", + "description": "List 组件 ,帮助使用者快速构建列表。", + "keywords": [ + "", + "uni-ui", + "uniui", + "列表", + "", + "list" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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-badge", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-list/readme.md b/uni_modules/uni-list/readme.md new file mode 100644 index 0000000..32c2865 --- /dev/null +++ b/uni_modules/uni-list/readme.md @@ -0,0 +1,346 @@ +## List 列表 +> **组件名:uni-list** +> 代码块: `uList`、`uListItem` +> 关联组件:`uni-list-item`、`uni-badge`、`uni-icons`、`uni-list-chat`、`uni-list-ad` + + +List 列表组件,包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动。在app-nvue页面里,它默认使用原生list组件滚动。这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uni-list组件是父容器,里面的核心是uni-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uni-list-item有很多风格,uni-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表、通信录列表、聊天记录列表。 + +涉及很多大图或丰富内容的列表,比如类今日头条的新闻列表、类淘宝的电商列表,需要通过扩展插槽实现。 + +下文均有样例给出。 + +uni-list不包含下拉刷新和上拉翻页。上拉翻页另见组件:[uni-load-more](https://ext.dcloud.net.cn/plugin?id=29) + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 组件需要依赖 `sass` 插件 ,请自行手动安装 +> - 组件内部依赖 `'uni-icons'` 、`uni-badge` 组件 +> - `uni-list` 和 `uni-list-item` 需要配套使用,暂不支持单独使用 `uni-list-item` +> - 只有开启点击反馈后,会有点击选中效果 +> - 使用插槽时,可以完全自定义内容 +> - note 、rightText 属性暂时没做限制,不支持文字溢出隐藏,使用时应该控制长度显示或通过默认插槽自行扩展 +> - 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: 详情 --> 项目配置 --> 启用 component2 编译 +> - 如果需要修改 `switch`、`badge` 样式,请使用插槽自定义 +> - 在 `HBuilderX` 低版本中,可能会出现组件显示 `undefined` 的问题,请升级最新的 `HBuilderX` 或者 `cli` +> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + +### 基本用法 + +- 设置 `title` 属性,可以显示列表标题 +- 设置 `disabled` 属性,可以禁用当前项 + +```html + + + + + +``` + +### 多行内容显示 + +- 设置 `note` 属性 ,可以在第二行显示描述文本信息 + +```html + + + + + +``` + +### 右侧显示角标、switch + +- 设置 `show-badge` 属性 ,可以显示角标内容 +- 设置 `show-switch` 属性,可以显示 switch 开关 + +```html + + + + + +``` + +### 左侧显示略缩图、图标 + +- 设置 `thumb` 属性 ,可以在列表左侧显示略缩图 +- 设置 `show-extra-icon` 属性,并指定 `extra-icon` 可以在左侧显示图标 + +```html + + + + +``` + +### 开启点击反馈和右侧箭头 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,并给列表右侧添加一个箭头 +- 设置 `to` 属性,可以跳转页面,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` + +```html + + + + + + + +``` + + +### 聊天列表示例 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` +- 设置 `to` 属性,可以跳转页面 +- `time` 属性,通常会设置成时间显示,但是这个属性不仅仅可以设置时间,你可以传入任何文本,注意文本长度可能会影响显示 +- `avatar` 和 `avatarList` 属性同时只会有一个生效,同时设置的话,`avatarList` 属性的长度大于1 ,`avatar` 属性将失效 +- 可以通过默认插槽自定义列表右侧内容 + +```html + + + + + + + + + + + + + + + + + 刚刚 + + + + + + + +``` + +```javascript + +export default { + components: {}, + data() { + return { + avatarList: [{ + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }] + } + } +} + +``` + + +```css + +.chat-custom-right { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: space-between; + align-items: flex-end; +} + +.chat-custom-text { + font-size: 12px; + color: #999; +} + +``` + +## API + +### List Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +border |Boolean |true | 是否显示边框 + + +### ListItem Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +ellipsis |Number |0 | title 是否溢出隐藏,可选值,0:默认; 1:显示一行; 2:显示两行;【nvue 暂不支持】 +thumb |String |- | 左侧缩略图,若thumb有值,则不会显示扩展图标 +thumbSize |String |medium | 略缩图尺寸,可选值,lg:大图; medium:一般; sm:小图; +showBadge |Boolean |false | 是否显示数字角标 +badgeText |String |- | 数字角标内容 +badgeType |String |- | 数字角标类型,参考[uni-icons](https://ext.dcloud.net.cn/plugin?id=21) +badgeStyle |Object |- | 数字角标样式,使用uni-badge的custom-style参数 +rightText |String |- | 右侧文字内容 +disabled |Boolean |false | 是否禁用 +showArrow |Boolean |true | 是否显示箭头图标 +link |String |navigateTo | 新页面跳转方式,可选值见下表 +to |String |- | 新页面跳转地址,如填写此属性,click 会返回页面是否跳转成功 +clickable |Boolean |false | 是否开启点击反馈 +showSwitch |Boolean |false | 是否显示Switch +switchChecked |Boolean |false | Switch是否被选中 +showExtraIcon |Boolean |false | 左侧是否显示扩展图标 +extraIcon |Object |- | 扩展图标参数,格式为 ``{color: '#4cd964',size: '22',type: 'spinner'}``,参考 [uni-icons](https://ext.dcloud.net.cn/plugin?id=28) +direction | String |row | 排版方向,可选值,row:水平排列; column:垂直排列; 3个插槽是水平排还是垂直排,也受此属性控制 + + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItem Events + +事件称名 |说明 |返回参数 +:-: |:-: |:-: +click |点击 uniListItem 触发事件,需开启点击反馈 |- +switchChange |点击切换 Switch 时触发,需显示 switch |e={value:checked} + + + +### ListItem Slots + +名称 | 说明 +:-: | :-: +header | 左/上内容插槽,可完全自定义默认显示 +body | 中间内容插槽,可完全自定义中间内容 +footer | 右/下内容插槽,可完全自定义右侧内容 + + +> **通过插槽扩展** +> 需要注意的是当使用插槽时,内置样式将会失效,只保留排版样式,此时的样式需要开发者自己实现 +> 如果 `uni-list-item` 组件内置属性样式无法满足需求,可以使用插槽来自定义uni-list-item里的内容。 +> uni-list-item提供了3个可扩展的插槽:`header`、`body`、`footer` +> - 当 `direction` 属性为 `row` 时表示水平排列,此时 `header` 表示列表的左边部分,`body` 表示列表的中间部分,`footer` 表示列表的右边部分 +> - 当 `direction` 属性为 `column` 时表示垂直排列,此时 `header` 表示列表的上边部分,`body` 表示列表的中间部分,`footer` 表示列表的下边部分 +> 开发者可以只用1个插槽,也可以3个一起使用。在插槽中可自主编写view标签,实现自己所需的效果。 + + +**示例** + +```html + + + + + + + + + 自定义插槽 + + + + +``` + + + + + +### ListItemChat Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +clickable |Boolean |false | 是否开启点击反馈 +badgeText |String |- | 数字角标内容,设置为 `dot` 将显示圆点 +badgePositon |String |right | 角标位置 +link |String |navigateTo | 是否展示右侧箭头并开启点击反馈,可选值见下表 +clickable |Boolean |false | 是否开启点击反馈 +to |String |- | 跳转页面地址,如填写此属性,click 会返回页面是否跳转成功 +time |String |- | 右侧时间显示 +avatarCircle |Boolean |false | 是否显示圆形头像 +avatar |String |- | 头像地址,avatarCircle 不填时生效 +avatarList |Array |- | 头像组,格式为 [{url:''}] + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItemChat Slots + +名称 | 说明 +:- | :- +default | 自定义列表右侧内容(包括时间和角标显示) + +### ListItemChat Events +事件称名 | 说明 | 返回参数 +:-: | :-: | :-: +@click | 点击 uniListChat 触发事件 | {data:{}} ,如有 to 属性,会返回页面跳转信息 + + + + + + +## 基于uni-list扩展的页面模板 + +通过扩展插槽,可实现多种常见样式的列表 + +**新闻列表类** + +1. 云端一体混合布局:[https://ext.dcloud.net.cn/plugin?id=2546](https://ext.dcloud.net.cn/plugin?id=2546) +2. 云端一体垂直布局,大图模式:[https://ext.dcloud.net.cn/plugin?id=2583](https://ext.dcloud.net.cn/plugin?id=2583) +3. 云端一体垂直布局,多行图文混排:[https://ext.dcloud.net.cn/plugin?id=2584](https://ext.dcloud.net.cn/plugin?id=2584) +4. 云端一体垂直布局,多图模式:[https://ext.dcloud.net.cn/plugin?id=2585](https://ext.dcloud.net.cn/plugin?id=2585) +5. 云端一体水平布局,左图右文:[https://ext.dcloud.net.cn/plugin?id=2586](https://ext.dcloud.net.cn/plugin?id=2586) +6. 云端一体水平布局,左文右图:[https://ext.dcloud.net.cn/plugin?id=2587](https://ext.dcloud.net.cn/plugin?id=2587) +7. 云端一体垂直布局,无图模式,主标题+副标题:[https://ext.dcloud.net.cn/plugin?id=2588](https://ext.dcloud.net.cn/plugin?id=2588) + +**商品列表类** + +1. 云端一体列表/宫格视图互切:[https://ext.dcloud.net.cn/plugin?id=2651](https://ext.dcloud.net.cn/plugin?id=2651) +2. 云端一体列表(宫格模式):[https://ext.dcloud.net.cn/plugin?id=2671](https://ext.dcloud.net.cn/plugin?id=2671) +3. 云端一体列表(列表模式):[https://ext.dcloud.net.cn/plugin?id=2672](https://ext.dcloud.net.cn/plugin?id=2672) + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/list/list](https://hellouniapp.dcloud.net.cn/pages/extUI/list/list) \ No newline at end of file diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md new file mode 100644 index 0000000..8f03f1d --- /dev/null +++ b/uni_modules/uni-load-more/changelog.md @@ -0,0 +1,19 @@ +## 1.3.3(2022-01-20) +- 新增 showText属性 ,是否显示文本 +## 1.3.2(2022-01-19) +- 修复 nvue 平台下不显示文本的bug +## 1.3.1(2022-01-19) +- 修复 微信小程序平台样式选择器报警告的问题 +## 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-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more) +## 1.2.1(2021-08-24) +- 新增 支持国际化 +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-05-12) +- 新增 组件示例地址 +## 1.1.7(2021-03-30) +- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +## 1.1.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json new file mode 100644 index 0000000..a4f14a5 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "Pull up to show more", + "uni-load-more.contentrefresh": "loading...", + "uni-load-more.contentnomore": "No more data" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/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/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json new file mode 100644 index 0000000..f15d510 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉显示更多", + "uni-load-more.contentrefresh": "正在加载...", + "uni-load-more.contentnomore": "没有更多数据了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json new file mode 100644 index 0000000..a255c6d --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉顯示更多", + "uni-load-more.contentrefresh": "正在加載...", + "uni-load-more.contentnomore": "沒有更多數據了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..e5eff4d --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json new file mode 100644 index 0000000..2fa6f04 --- /dev/null +++ b/uni_modules/uni-load-more/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-load-more", + "displayName": "uni-load-more 加载更多", + "version": "1.3.3", + "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。", + "keywords": [ + "uni-ui", + "uniui", + "加载更多", + "load-more" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md new file mode 100644 index 0000000..54dc1fa --- /dev/null +++ b/uni_modules/uni-load-more/readme.md @@ -0,0 +1,14 @@ + + +### LoadMore 加载更多 +> **组件名:uni-load-more** +> 代码块: `uLoadMore` + + +用于列表中,做滚动加载使用,展示 loading 的各种状态。 + + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-nav-bar/changelog.md b/uni_modules/uni-nav-bar/changelog.md new file mode 100644 index 0000000..0f9a2f1 --- /dev/null +++ b/uni_modules/uni-nav-bar/changelog.md @@ -0,0 +1,51 @@ +## 1.3.11(2023-03-29) +- 修复 自定义状态栏高度闪动BUG +## 1.3.10(2023-03-29) +- 修复 暗黑模式下边线颜色错误的bug +## 1.3.9(2022-10-13) +- 修复 条件编译错误的bug +## 1.3.8(2022-10-12) +- 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug +## 1.3.7(2022-08-11) +- 修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug +## 1.3.6(2022-06-30) +- 修复 组件示例中插槽用法无法显示内容的bug +## 1.3.5(2022-05-24) +- 新增 stat 属性 ,可开启统计title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +## 1.3.4(2022-01-24) +- 更新 组件示例 +## 1.3.3(2022-01-24) +- 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +## 1.3.2(2022-01-18) +- 修复 在vue下,标题不垂直居中的bug +## 1.3.1(2022-01-18) +- 修复 height 属性类型错误 +## 1.3.0(2022-01-18) +- 新增 height 属性,可修改组件高度 +- 新增 dark 属性可可开启暗黑模式 +- 优化 标题字数过多显示省略号 +- 优化 插槽,插入内容可完全覆盖 +## 1.2.1(2022-01-10) +- 修复 color 属性不生效的bug +## 1.2.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-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-30) +- 修复 在nvue下fixed为true,宽度不能撑满的Bug +## 1.0.9(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.8(2021-04-14) +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug + +## 1.0.7(2021-02-25) +- 修复 easycom 下,找不到 uni-status-bar 的bug + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 0000000..c890860 --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,357 @@ + + + + + diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue new file mode 100644 index 0000000..4ac73ae --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/uni_modules/uni-nav-bar/package.json b/uni_modules/uni-nav-bar/package.json new file mode 100644 index 0000000..240ae95 --- /dev/null +++ b/uni_modules/uni-nav-bar/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-nav-bar", + "displayName": "uni-nav-bar 自定义导航栏", + "version": "1.3.11", + "description": "自定义导航栏组件,主要用于头部导航。", + "keywords": [ + "uni-ui", + "导航", + "导航栏", + "自定义导航栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-nav-bar/readme.md b/uni_modules/uni-nav-bar/readme.md new file mode 100644 index 0000000..3934b32 --- /dev/null +++ b/uni_modules/uni-nav-bar/readme.md @@ -0,0 +1,15 @@ + + +## NavBar 导航栏 +> **组件名:uni-nav-bar** +> 代码块: `uNavBar` + +导航栏组件,主要用于头部导航。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/uni_modules/uni-notice-bar/changelog.md b/uni_modules/uni-notice-bar/changelog.md new file mode 100644 index 0000000..d526811 --- /dev/null +++ b/uni_modules/uni-notice-bar/changelog.md @@ -0,0 +1,18 @@ +## 1.2.1(2022-09-05) +- 新增 属性 fontSize,可修改文字大小。 +## 1.2.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-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 组件示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue new file mode 100644 index 0000000..98d4720 --- /dev/null +++ b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue @@ -0,0 +1,426 @@ + + + + + diff --git a/uni_modules/uni-notice-bar/package.json b/uni_modules/uni-notice-bar/package.json new file mode 100644 index 0000000..8d9b13c --- /dev/null +++ b/uni_modules/uni-notice-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-notice-bar", + "displayName": "uni-notice-bar 通告栏", + "version": "1.2.1", + "description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告", + "keywords": [ + "uni-ui", + "uniui", + "通告栏", + "公告", + "跑马灯" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-notice-bar/readme.md b/uni_modules/uni-notice-bar/readme.md new file mode 100644 index 0000000..fb2ede2 --- /dev/null +++ b/uni_modules/uni-notice-bar/readme.md @@ -0,0 +1,13 @@ + + +## NoticeBar 通告栏 +> **组件名:uni-notice-bar** +> 代码块: `uNoticeBar` + + +通告栏组件 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-number-box/changelog.md b/uni_modules/uni-number-box/changelog.md new file mode 100644 index 0000000..5925c32 --- /dev/null +++ b/uni_modules/uni-number-box/changelog.md @@ -0,0 +1,25 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.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-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box) +## 1.1.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-20) +- 修复 uni-number-box 浮点数运算不精确的 bug +- 修复 uni-number-box change 事件触发不正确的 bug +- 新增 uni-number-box v-model 双向绑定 +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 + +## 1.0.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 v-model +- 新增 支持 focus、blur 事件 +- 新增 支持 PC 端 diff --git a/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue new file mode 100644 index 0000000..e91c032 --- /dev/null +++ b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,221 @@ + + + diff --git a/uni_modules/uni-number-box/package.json b/uni_modules/uni-number-box/package.json new file mode 100644 index 0000000..ad82336 --- /dev/null +++ b/uni_modules/uni-number-box/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-number-box", + "displayName": "uni-number-box 数字输入框", + "version": "1.2.1", + "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。", + "keywords": [ + "uni-ui", + "uniui", + "数字输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-number-box/readme.md b/uni_modules/uni-number-box/readme.md new file mode 100644 index 0000000..affc56f --- /dev/null +++ b/uni_modules/uni-number-box/readme.md @@ -0,0 +1,13 @@ + + +## NumberBox 数字输入框 +> **组件名:uni-number-box** +> 代码块: `uNumberBox` + + +带加减按钮的数字输入框。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-pagination/changelog.md b/uni_modules/uni-pagination/changelog.md new file mode 100644 index 0000000..2e94adc --- /dev/null +++ b/uni_modules/uni-pagination/changelog.md @@ -0,0 +1,27 @@ +## 1.2.4(2022-09-19) +- 修复,未对主题色设置默认色,导致未引入 uni-scss 变量文件报错。 +- 修复,未对移动端当前页文字做主题色适配。 +## 1.2.3(2022-09-15) +- 修复未使用 uni-scss 主题色的 bug。 +## 1.2.2(2022-07-06) +- 修复 es 语言 i18n 错误 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.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-pagination](https://uniapp.dcloud.io/component/uniui/uni-pagination) +## 1.1.2(2021-10-08) +- 修复 current 、value 属性未监听,导致高亮样式失效的 bug +## 1.1.1(2021-08-20) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-12) +- 新增 PC 和 移动端适配不同的 ui +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json new file mode 100644 index 0000000..d6e2897 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "prev", + "uni-pagination.nextText": "next", + "uni-pagination.piecePerPage": "piece/page" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json new file mode 100644 index 0000000..604a113 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "anterior", + "uni-pagination.nextText": "prxima", + "uni-pagination.piecePerPage": "Artculo/Pgina" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json new file mode 100644 index 0000000..a7a0c77 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "précédente", + "uni-pagination.nextText": "suivante", + "uni-pagination.piecePerPage": "Articles/Pages" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js b/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json new file mode 100644 index 0000000..782bbe4 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一页", + "uni-pagination.nextText": "下一页", + "uni-pagination.piecePerPage": "条/页" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json new file mode 100644 index 0000000..180fddb --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一頁", + "uni-pagination.nextText": "下一頁", + "uni-pagination.piecePerPage": "條/頁" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue b/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..5305b5f --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/uni_modules/uni-pagination/package.json b/uni_modules/uni-pagination/package.json new file mode 100644 index 0000000..862d5ab --- /dev/null +++ b/uni_modules/uni-pagination/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-pagination", + "displayName": "uni-pagination 分页器", + "version": "1.2.4", + "description": "Pagination 分页器组件,用于展示页码、请求数据等。", + "keywords": [ + "uni-ui", + "uniui", + "分页器", + "页码" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-pagination/readme.md b/uni_modules/uni-pagination/readme.md new file mode 100644 index 0000000..97ea1d6 --- /dev/null +++ b/uni_modules/uni-pagination/readme.md @@ -0,0 +1,11 @@ + + +## Pagination 分页器 +> **组件名:uni-pagination** +> 代码块: `uPagination` + + +分页器组件,用于展示页码、请求数据等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-pagination) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md new file mode 100644 index 0000000..bc59f07 --- /dev/null +++ b/uni_modules/uni-popup/changelog.md @@ -0,0 +1,68 @@ +## 1.8.3(2023-04-17) +- 修复 uni-popup 重复打开时的 bug +## 1.8.2(2023-02-02) +- uni-popup-dialog 组件新增 inputType 属性 +## 1.8.1(2022-12-01) +- 修复 nvue 下 v-show 报错 +## 1.8.0(2022-11-29) +- 优化 主题样式 +## 1.7.9(2022-04-02) +- 修复 弹出层内部无法滚动的bug +## 1.7.8(2022-03-28) +- 修复 小程序中高度错误的bug +## 1.7.7(2022-03-17) +- 修复 快速调用open出现问题的Bug +## 1.7.6(2022-02-14) +- 修复 safeArea 属性不能设置为false的bug +## 1.7.5(2022-01-19) +- 修复 isMaskClick 失效的bug +## 1.7.4(2022-01-19) +- 新增 cancelText \ confirmText 属性 ,可自定义文本 +- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 +## 1.7.3(2022-01-13) +- 修复 设置 safeArea 属性不生效的bug +## 1.7.2(2021-11-26) +- 优化 组件示例 +## 1.7.1(2021-11-26) +- 修复 vuedoc 文字错误 +## 1.7.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-popup](https://uniapp.dcloud.io/component/uniui/uni-popup) +## 1.6.2(2021-08-24) +- 新增 支持国际化 +## 1.6.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.6.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.5.0(2021-06-23) +- 新增 mask-click 遮罩层点击事件 +## 1.4.5(2021-06-22) +- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.4(2021-06-18) +- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.3(2021-06-08) +- 修复 错误的 watch 字段 +- 修复 safeArea 属性不生效的问题 +- 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.4.2(2021-05-12) +- 新增 组件示例地址 +## 1.4.1(2021-04-29) +- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +## 1.4.0 (2021-04-29) +- 新增 type 属性的 left\right 值,支持左右弹出 +- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- 新增 safeArea 属性,是否适配底部安全区 +- 修复 App\h5\微信小程序底部安全区占位不对的Bug +- 修复 App 端弹出等待的Bug +- 优化 提升低配设备性能,优化动画卡顿问题 +- 优化 更简单的组件自定义方式 +## 1.2.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.2.8(2021-02-05) +- 调整为uni_modules目录规范 +## 1.2.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 +- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端 diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..b5eee79 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..91370a8 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ + + + + diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..5be7624 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ + + + + diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..7f1bd06 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/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/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..5e3003c --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "确定", + "uni-popup.placeholder": "请输入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..13e39eb --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "確定", + "uni-popup.placeholder": "請輸入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..c4e5781 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,26 @@ + +export default { + data() { + return { + + } + }, + created(){ + this.popup = this.getParent() + }, + methods:{ + /** + * 获取父元素实例 + */ + getParent(name = 'uniPopup') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false + parentName = parent.$options.name; + } + return parent; + }, + } +} diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..54afee2 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,473 @@ + + + + diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json new file mode 100644 index 0000000..f40556b --- /dev/null +++ b/uni_modules/uni-popup/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 弹出层", + "version": "1.8.3", + "description": " Popup 组件,提供常用的弹层", + "keywords": [ + "uni-ui", + "弹出层", + "弹窗", + "popup", + "弹框" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md new file mode 100644 index 0000000..fdad4b3 --- /dev/null +++ b/uni_modules/uni-popup/readme.md @@ -0,0 +1,17 @@ + + +## Popup 弹出层 +> **组件名:uni-popup** +> 代码块: `uPopup` +> 关联组件:`uni-transition` + + +弹出层组件,在应用中弹出一个消息提示窗口、提示框等 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/uni_modules/uni-rate/changelog.md b/uni_modules/uni-rate/changelog.md new file mode 100644 index 0000000..8a98a61 --- /dev/null +++ b/uni_modules/uni-rate/changelog.md @@ -0,0 +1,25 @@ +## 1.3.1(2022-02-25) +- 修复 条件判断 `NaN` 错误的 bug +## 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-rate](https://uniapp.dcloud.io/component/uniui/uni-rate) +## 1.2.2(2021-09-10) +- 优化 默认值修改为 0 颗星 +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-05-12) +- 新增 组件示例地址 +## 1.1.1(2021-04-21) +- 修复 布局变化后 uni-rate 星星计算不准确的 bug +- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +## 1.1.0(2021-04-16) +- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug + +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 支持 pc 端 diff --git a/uni_modules/uni-rate/components/uni-rate/uni-rate.vue b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue new file mode 100644 index 0000000..9802dfc --- /dev/null +++ b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/uni_modules/uni-rate/package.json b/uni_modules/uni-rate/package.json new file mode 100644 index 0000000..64e8e33 --- /dev/null +++ b/uni_modules/uni-rate/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-rate", + "displayName": "uni-rate 评分", + "version": "1.3.1", + "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。", + "keywords": [ + "uni-ui", + "uniui", + "评分" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-rate/readme.md b/uni_modules/uni-rate/readme.md new file mode 100644 index 0000000..eae7b5c --- /dev/null +++ b/uni_modules/uni-rate/readme.md @@ -0,0 +1,12 @@ + + +## Rate 评分 +> **组件名:uni-rate** +> 代码块: `uRate` +> 关联组件:`uni-icons` + + +评分组件,多用于购买商品后,对商品进行评价等场景 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-row/changelog.md b/uni_modules/uni-row/changelog.md new file mode 100644 index 0000000..5b465bc --- /dev/null +++ b/uni_modules/uni-row/changelog.md @@ -0,0 +1,10 @@ +## 1.0.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-row](https://uniapp.dcloud.io/component/uniui/uni-row) +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 新增uni-row组件 diff --git a/uni_modules/uni-row/components/uni-col/uni-col.vue b/uni_modules/uni-row/components/uni-col/uni-col.vue new file mode 100644 index 0000000..d5f3728 --- /dev/null +++ b/uni_modules/uni-row/components/uni-col/uni-col.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/uni_modules/uni-row/components/uni-row/uni-row.vue b/uni_modules/uni-row/components/uni-row/uni-row.vue new file mode 100644 index 0000000..c7d9370 --- /dev/null +++ b/uni_modules/uni-row/components/uni-row/uni-row.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/uni_modules/uni-row/package.json b/uni_modules/uni-row/package.json new file mode 100644 index 0000000..3f52fa6 --- /dev/null +++ b/uni_modules/uni-row/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-row", + "displayName": "uni-row 布局-行", + "version": "1.0.0", + "description": "流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。", + "keywords": [ + "uni-ui", + "uniui", + "栅格", + "布局", + "layout" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-row/readme.md b/uni_modules/uni-row/readme.md new file mode 100644 index 0000000..3c9c8b9 --- /dev/null +++ b/uni_modules/uni-row/readme.md @@ -0,0 +1,10 @@ +## Layout 布局 + +> **组件名 uni-row、uni-col** +> 代码块: `uRow`、`uCol` + + +流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-row) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file 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/uni-search-bar/changelog.md b/uni_modules/uni-search-bar/changelog.md new file mode 100644 index 0000000..b41fdd3 --- /dev/null +++ b/uni_modules/uni-search-bar/changelog.md @@ -0,0 +1,33 @@ +## 1.2.3(2022-05-24) +- 新增 readonly 属性,组件只读 +## 1.2.2(2022-05-06) +- 修复 vue3 input 事件不生效的bug +## 1.2.1(2022-05-06) +- 修复 多余代码导致的bug +## 1.2.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-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +## 1.1.2(2021-08-30) +- 修复 value 属性与 modelValue 属性不兼容的Bug +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 项目示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-04-15) +- uni-ui 新增 uni-search-bar 的 focus 事件 + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持双向绑定 +- 更改 input 事件的返回值,e={value:Number} --> e=value +- 新增 支持图标插槽 +- 新增 支持 clear、blur 事件 +- 新增 支持 focus 属性 +- 去掉组件背景色 diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json new file mode 100644 index 0000000..dd083a5 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "Search enter content" +} \ No newline at end of file diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/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/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json new file mode 100644 index 0000000..d4e5c12 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "请输入搜索内容" +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json new file mode 100644 index 0000000..318b6ef --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "請輸入搜索內容" +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue new file mode 100644 index 0000000..5a518a8 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/uni_modules/uni-search-bar/package.json b/uni_modules/uni-search-bar/package.json new file mode 100644 index 0000000..9352c57 --- /dev/null +++ b/uni_modules/uni-search-bar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-search-bar", + "displayName": "uni-search-bar 搜索栏", + "version": "1.2.3", + "description": "搜索栏组件,通常用于搜索商品、文章等", + "keywords": [ + "uni-ui", + "uniui", + "搜索框", + "搜索栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-search-bar/readme.md b/uni_modules/uni-search-bar/readme.md new file mode 100644 index 0000000..253092f --- /dev/null +++ b/uni_modules/uni-search-bar/readme.md @@ -0,0 +1,14 @@ + + +## SearchBar 搜索栏 + +> **组件名:uni-search-bar** +> 代码块: `uSearchBar` + + +搜索栏组件 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-section/changelog.md b/uni_modules/uni-section/changelog.md new file mode 100644 index 0000000..738f2b3 --- /dev/null +++ b/uni_modules/uni-section/changelog.md @@ -0,0 +1,2 @@ +## 0.0.1(2022-07-22) +- 初始化 diff --git a/uni_modules/uni-section/components/uni-section/uni-section.vue b/uni_modules/uni-section/components/uni-section/uni-section.vue new file mode 100644 index 0000000..9a52e0b --- /dev/null +++ b/uni_modules/uni-section/components/uni-section/uni-section.vue @@ -0,0 +1,167 @@ + + + + diff --git a/uni_modules/uni-section/package.json b/uni_modules/uni-section/package.json new file mode 100644 index 0000000..0a31fb5 --- /dev/null +++ b/uni_modules/uni-section/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-section", + "displayName": "uni-section 标题栏", + "version": "0.0.1", + "description": "标题栏组件", + "keywords": [ + "uni-ui", + "uniui", + "标题栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-section/readme.md b/uni_modules/uni-section/readme.md new file mode 100644 index 0000000..d47faab --- /dev/null +++ b/uni_modules/uni-section/readme.md @@ -0,0 +1,8 @@ +## Section 标题栏 +> **组件名:uni-section** +> 代码块: `uSection` + +uni-section 组件主要用于文章、列表详情等标题展示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-section) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-segmented-control/changelog.md b/uni_modules/uni-segmented-control/changelog.md new file mode 100644 index 0000000..a44385d --- /dev/null +++ b/uni_modules/uni-segmented-control/changelog.md @@ -0,0 +1,9 @@ +## 1.2.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-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-05-12) +- 新增 项目示例地址 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue b/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue new file mode 100644 index 0000000..e8bb3e5 --- /dev/null +++ b/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/uni_modules/uni-segmented-control/package.json b/uni_modules/uni-segmented-control/package.json new file mode 100644 index 0000000..6cae41d --- /dev/null +++ b/uni_modules/uni-segmented-control/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-segmented-control", + "displayName": "uni-segmented-control 分段器", + "version": "1.2.0", + "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示", + "keywords": [ + "uni-ui", + "uniui", + "分段器", + "segement", + "顶部选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-segmented-control/readme.md b/uni_modules/uni-segmented-control/readme.md new file mode 100644 index 0000000..3527b03 --- /dev/null +++ b/uni_modules/uni-segmented-control/readme.md @@ -0,0 +1,13 @@ + + +## SegmentedControl 分段器 +> **组件名:uni-segmented-control** +> 代码块: `uSegmentedControl` + + +用作不同视图的显示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-steps/changelog.md b/uni_modules/uni-steps/changelog.md new file mode 100644 index 0000000..cb9d367 --- /dev/null +++ b/uni_modules/uni-steps/changelog.md @@ -0,0 +1,16 @@ +## 1.1.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.1.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-steps](https://uniapp.dcloud.io/component/uniui/uni-steps) +## 1.0.8(2021-05-12) +- 新增 项目示例地址 +## 1.0.7(2021-05-06) +- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-steps/components/uni-steps/uni-steps.vue b/uni_modules/uni-steps/components/uni-steps/uni-steps.vue new file mode 100644 index 0000000..a6c8f28 --- /dev/null +++ b/uni_modules/uni-steps/components/uni-steps/uni-steps.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/uni_modules/uni-steps/package.json b/uni_modules/uni-steps/package.json new file mode 100644 index 0000000..c687b40 --- /dev/null +++ b/uni_modules/uni-steps/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-steps", + "displayName": "uni-steps 步骤条", + "version": "1.1.1", + "description": "步骤条组件,提供横向和纵向两种布局格式。", + "keywords": [ + "uni-ui", + "uniui", + "步骤条", + "时间轴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-steps/readme.md b/uni_modules/uni-steps/readme.md new file mode 100644 index 0000000..da7a4bf --- /dev/null +++ b/uni_modules/uni-steps/readme.md @@ -0,0 +1,13 @@ + + +## Steps 步骤条 +> **组件名:uni-steps** +> 代码块: `uSteps` + + +步骤条,常用于显示进度 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-swipe-action/changelog.md b/uni_modules/uni-swipe-action/changelog.md new file mode 100644 index 0000000..c916427 --- /dev/null +++ b/uni_modules/uni-swipe-action/changelog.md @@ -0,0 +1,43 @@ +## 1.3.8(2023-04-13) +- 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug +## 1.3.7(2022-06-06) +- 修复 vue3 下使用组件不能正常运行的Bug +## 1.3.6(2022-05-31) +- 修复 h5端点击click触发两次的Bug +## 1.3.5(2022-05-23) +- 修复 isPC 找不到的Bug +## 1.3.4(2022-05-19) +- 修复 在 nvue 下 disabled 失效的bug +## 1.3.3(2022-03-31) +- 修复 按钮字体大小不能设置的bug +## 1.3.2(2022-03-16) +- 修复 h5和app端下报el错误的bug +## 1.3.1(2022-03-07) +- 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 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-swipe-action](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +## 1.2.4(2021-08-20) +- 优化 close-all 方法 +## 1.2.3(2021-08-20) +- 新增 close-all 方法,关闭所有已打开的组件 +## 1.2.2(2021-08-17) +- 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.2.1(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.1.10(2021-06-17) +- 修复 按钮点击执行两次的bug +## 1.1.9(2021-05-12) +- 新增 项目示例地址 +## 1.1.8(2021-03-26) +- 修复 微信小程序 nv_navigator is not defined 报错的bug +## 1.1.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 左侧滑动 +- 新增 插槽使用方式 +- 新增 threshold 属性,可以控制滑动缺省值 +- 优化 长列表滚动性能 +- 修复 滚动页面时触发组件滑动的Bug diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 0000000..707e432 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,302 @@ +let bindIngXMixins = {} + +// #ifdef APP-NVUE +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +bindIngXMixins = { + data() { + return {} + }, + + watch: { + show(newVal) { + if (this.autoClose) return + if (this.stop) return + this.stop = true + if (newVal) { + this.open(newVal) + } else { + this.close() + } + }, + leftOptions() { + this.getSelectorQuery() + this.init() + }, + rightOptions(newVal) { + this.init() + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.box = this.getEl(this.$refs['selector-box--hock']) + this.selector = this.getEl(this.$refs['selector-content--hock']); + this.leftButton = this.getEl(this.$refs['selector-left-button--hock']); + this.rightButton = this.getEl(this.$refs['selector-right-button--hock']); + this.init() + }, + // beforeDestroy() { + // this.swipeaction.children.forEach((item, index) => { + // if (item === this) { + // this.swipeaction.children.splice(index, 1) + // } + // }) + // }, + methods: { + init() { + this.$nextTick(() => { + this.x = 0 + this.button = { + show: false + } + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }) + }, + onClick(index, item, position) { + this.$emit('click', { + content: item, + index, + position + }) + }, + touchstart(e) { + // fix by mehaotian 禁止滑动 + if (this.disabled) return + // 每次只触发一次,避免多次监听造成闪烁 + if (this.stop) return + this.stop = true + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + let expression = this.range(this.x, -rightWidth, leftWidth) + let leftExpression = this.range(this.x - leftWidth, -leftWidth, 0) + let rightExpression = this.range(this.x + rightWidth, 0, rightWidth) + + this.eventpan = BindingX.bind({ + anchor: this.box, + eventType: 'pan', + props: [{ + element: this.selector, + property: 'transform.translateX', + expression + }, { + element: this.leftButton, + property: 'transform.translateX', + expression: leftExpression + }, { + element: this.rightButton, + property: 'transform.translateX', + expression: rightExpression + }, ] + }, (e) => { + // nope + if (e.state === 'end') { + this.x = e.deltaX + this.x; + this.isclick = true + this.bindTiming(e.deltaX) + } + }); + }, + touchend(e) { + if (this.isopen !== 'none' && !this.isclick) { + this.open('none') + } + }, + bindTiming(x) { + const left = this.x + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + const threshold = this.threshold + if (!this.isopen || this.isopen === 'none') { + if (left > threshold) { + this.open('left') + } else if (left < -threshold) { + this.open('right') + } else { + this.open('none') + } + } else { + if ((x > -leftWidth && x < 0) || x > rightWidth) { + if ((x > -threshold && x < 0) || (x - rightWidth > threshold)) { + this.open('left') + } else { + this.open('none') + } + } else { + if ((x < threshold && x > 0) || (x + leftWidth < -threshold)) { + this.open('right') + } else { + this.open('none') + } + } + } + }, + + /** + * 移动范围 + * @param {Object} num + * @param {Object} mix + * @param {Object} max + */ + range(num, mix, max) { + return `min(max(x+${num}, ${mix}), ${max})` + }, + + /** + * 开启swipe + */ + open(type) { + this.animation(type) + }, + + /** + * 关闭swipe + */ + close() { + this.animation('none') + }, + + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + const time = 300 + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + if (this.eventpan && this.eventpan.token) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + + switch (type) { + case 'left': + Promise.all([ + this.move(this.selector, leftWidth), + this.move(this.leftButton, 0), + this.move(this.rightButton, rightWidth * 2) + ]).then(() => { + this.setEmit(leftWidth, type) + }) + break + case 'right': + Promise.all([ + this.move(this.selector, -rightWidth), + this.move(this.leftButton, -leftWidth * 2), + this.move(this.rightButton, 0) + ]).then(() => { + this.setEmit(-rightWidth, type) + }) + break + default: + Promise.all([ + this.move(this.selector, 0), + this.move(this.leftButton, -leftWidth), + this.move(this.rightButton, rightWidth) + ]).then(() => { + this.setEmit(0, type) + }) + + } + }, + setEmit(x, type) { + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + this.isopen = this.isopen || 'none' + this.stop = false + this.isclick = false + // 只有状态不一致才会返回结果 + if (this.isopen !== type && this.x !== x) { + if (type === 'left' && leftWidth > 0) { + this.$emit('change', 'left') + } + if (type === 'right' && rightWidth > 0) { + this.$emit('change', 'right') + } + if (type === 'none') { + this.$emit('change', 'none') + } + } + this.x = x + this.isopen = type + }, + move(ref, value) { + return new Promise((resolve, reject) => { + animation.transition(ref, { + styles: { + transform: `translateX(${value})`, + }, + duration: 150, //ms + timingFunction: 'linear', + needLayout: false, + delay: 0 //ms + }, function(res) { + resolve(res) + }) + }) + + }, + + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + Promise.all([ + this.getDom('left'), + this.getDom('right'), + ]).then((data) => { + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + + if (show === 'none') { + // this.close() + } else { + this.open(show) + } + + }) + + }, + getDom(str) { + return new Promise((resolve, reject) => { + dom.getComponentRect(this.$refs[`selector-${str}-button--hock`], (data) => { + if (data) { + this.button[str] = data.size + resolve(data) + } else { + reject() + } + }) + }) + } + } +} + +// #endif + +export default bindIngXMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js new file mode 100644 index 0000000..917cb48 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js @@ -0,0 +1,12 @@ +export function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (let v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 0000000..35c796b --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,195 @@ +export default { + data() { + return { + x: 0, + transition: false, + width: 0, + viewWidth: 0, + swipeShow: 0 + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal && newVal !== 'none') { + this.transition = true + this.open(newVal) + } else { + this.close() + } + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.isopen = false + setTimeout(() => { + this.getQuerySelect() + }, 50) + }, + methods: { + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + /** + * 移动触发 + * @param {Object} e + */ + onChange(e) { + this.moveX = e.detail.x + this.isclose = false + }, + touchstart(e) { + this.transition = false + this.isclose = true + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + touchmove(e) {}, + touchend(e) { + // 0的位置什么都不执行 + if (this.isclose && this.isopen === 'none') return + if (this.isclose && this.isopen !== 'none') { + this.transition = true + this.close() + } else { + this.move(this.moveX + this.leftWidth) + } + }, + + /** + * 移动 + * @param {Object} moveX + */ + move(moveX) { + // 打开关闭的处理逻辑不太一样 + this.transition = true + // 未打开状态 + if (!this.isopen || this.isopen === 'none') { + if (moveX > this.threshold) { + this.open('left') + } else if (moveX < -this.threshold) { + this.open('right') + } else { + this.close() + } + } else { + if (moveX < 0 && moveX < this.rightWidth) { + const rightX = this.rightWidth + moveX + if (rightX < this.threshold) { + this.open('right') + } else { + this.close() + } + } else if (moveX > 0 && moveX < this.leftWidth) { + const leftX = this.leftWidth - moveX + if (leftX < this.threshold) { + this.open('left') + } else { + this.close() + } + } + + } + + }, + + /** + * 打开 + */ + open(type) { + this.x = this.moveX + this.animation(type) + }, + + /** + * 关闭 + */ + close() { + this.x = this.moveX + // TODO 解决 x 值不更新的问题,所以会多触发一次 nextTick ,待优化 + this.$nextTick(() => { + this.x = -this.leftWidth + if (this.isopen !== 'none') { + this.$emit('change', 'none') + } + this.isopen = 'none' + }) + }, + + /** + * 执行结束动画 + * @param {Object} type + */ + animation(type) { + this.$nextTick(() => { + if (type === 'left') { + this.x = 0 + } else { + this.x = -this.rightWidth - this.leftWidth + } + + if (this.isopen !== type) { + this.$emit('change', type) + } + this.isopen = type + }) + + }, + getSlide(x) {}, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.movable-view--hock').boundingClientRect(data => { + this.leftWidth = data[1].width + this.rightWidth = data[2].width + this.width = data[0].width + this.viewWidth = this.width + this.rightWidth + this.leftWidth + if (this.leftWidth === 0) { + // TODO 疑似bug ,初始化的时候如果x 是0,会导致移动位置错误,所以让元素超出一点 + this.x = -0.1 + } else { + this.x = -this.leftWidth + } + this.moveX = this.x + this.$nextTick(() => { + this.swipeShow = 1 + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show !== 'none') { + this.transition = true + this.open(this.shows) + } + }).exec(); + + } + } +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js new file mode 100644 index 0000000..d389bce --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,260 @@ +let otherMixins = {} + +// #ifndef APP-PLUS|| MP-WEIXIN || H5 +const MIN_DISTANCE = 10; +otherMixins = { + data() { + // TODO 随机生生元素ID,解决百度小程序获取同一个元素位置信息的bug + const elClass = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + uniShow: false, + left: 0, + buttonShow: 'none', + ani: false, + moveLeft: '', + elClass + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + left() { + this.moveLeft = `translateX(${this.left}px)` + }, + buttonShow(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + leftOptions() { + this.init() + }, + rightOptions() { + this.init() + } + }, + mounted() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + this.init() + }, + methods: { + init() { + clearTimeout(this.timer) + this.timer = setTimeout(() => { + this.getSelectorQuery() + }, 100) + // 移动距离 + this.left = 0 + this.x = 0 + }, + + closeSwipe(e) { + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + touchstart(e) { + if (this.disabled) return + this.ani = false + this.x = this.left || 0 + this.stopTouchStart(e) + this.autoClose && this.closeSwipe() + }, + touchmove(e) { + if (this.disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e); + if (this.direction !== 'horizontal') { + return; + } + this.move(this.x + this.deltaX) + return false + }, + touchend() { + if (this.disabled) return + this.moveDirection(this.left) + }, + /** + * 设置移动距离 + * @param {Object} value + */ + move(value) { + value = value || 0 + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + // 获取可滑动范围 + this.left = this.range(value, -rightWidth, leftWidth); + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + */ + moveDirection(left) { + const threshold = this.threshold + const isopen = this.isopen || 'none' + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + if (this.deltaX === 0) { + this.openState('none') + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > + 0 && rightWidth + + left < threshold)) { + // right + this.openState('right') + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > + 0 && + leftWidth - left < threshold)) { + // left + this.openState('left') + } else { + // default + this.openState('none') + } + }, + + /** + * 开启状态 + * @param {Boolean} type + */ + openState(type) { + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + let left = '' + this.isopen = this.isopen ? this.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + + if (this.isopen !== type) { + this.throttle = true + this.$emit('change', type) + } + + this.isopen = type + // 添加动画类 + this.ani = true + this.$nextTick(() => { + this.move(left) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 + }, + close() { + this.openState('none') + }, + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus() { + this.direction = ''; + this.deltaX = 0; + this.deltaY = 0; + this.offsetX = 0; + this.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event) { + this.resetTouchStatus(); + const touch = event.touches[0]; + this.startX = touch.clientX; + this.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event) { + const touch = event.touches[0]; + this.deltaX = touch.clientX - this.startX; + this.deltaY = touch.clientY - this.startY; + this.offsetX = Math.abs(this.deltaX); + this.offsetY = Math.abs(this.deltaY); + this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY); + }, + + getSelectorQuery() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.' + this.elClass) + .boundingClientRect(data => { + if (data.length === 0) return + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + this.leftWidth = data[0].width || 0 + this.rightWidth = data[1].width || 0 + this.buttonShow = show + }) + .exec() + } + } +} + +// #endif + +export default otherMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 0000000..08de1c9 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,84 @@ +let mpMixins = {} +let is_pc = null +// #ifdef H5 +import { + isPC +} from "./isPC" +is_pc = isPC() +// #endif +// #ifdef APP-VUE|| MP-WEIXIN || H5 + +mpMixins = { + data() { + return { + is_show: 'none' + } + }, + watch: { + show(newVal) { + this.is_show = this.show + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.is_show = this.show + }, + methods: { + // wxs 中调用 + closeSwipe(e) { + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + + change(e) { + this.$emit('change', e.open) + if (this.is_show !== e.open) { + this.is_show = e.open + } + }, + + appTouchStart(e) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + onClickForPC(index, item, position) { + if (!is_pc) return + // #ifdef H5 + this.$emit('click', { + content: item, + index, + position + }) + // #endif + } + } +} + +// #endif +export default mpMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js new file mode 100644 index 0000000..78f0ec6 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js @@ -0,0 +1,270 @@ +const MIN_DISTANCE = 10; +export default { + showWatch(newVal, oldVal, ownerInstance, instance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + if (!$el) return + this.getDom(instance, ownerInstance, self) + if (newVal && newVal !== 'none') { + this.openState(newVal, instance, ownerInstance, self) + return + } + + if (state.left) { + this.openState('none', instance, ownerInstance, self) + } + this.resetTouchStatus(instance, self) + }, + + /** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ + touchstart(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state; + this.getDom(instance, ownerInstance, self) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + this.stopTouchStart(e, ownerInstance, self) + }, + + /** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchmove(e, ownerInstance, self) { + let instance = e.instance; + // 删除之后已经那不到实例了 + if (!instance) return; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e, self); + if (state.direction !== 'horizontal') { + return; + } + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + let x = state.x + state.deltaX + this.move(x, instance, ownerInstance, self) + }, + + /** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchend(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + this.moveDirection(state.left, instance, ownerInstance, self) + + }, + + /** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ + move(value, instance, ownerInstance, self) { + value = value || 0 + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = this.range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + + }, + + /** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ + getDom(instance, ownerInstance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + var leftDom = $el.querySelector('.button-group--left') + var rightDom = $el.querySelector('.button-group--right') + + state.leftWidth = leftDom.offsetWidth || 0 + state.rightWidth = rightDom.offsetWidth || 0 + state.threshold = instance.getDataset().threshold + }, + + getDisabledType(value) { + return (typeof(value) === 'string' ? JSON.parse(value) : value) || false; + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + + + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ + moveDirection(left, ins, ownerInstance, self) { + var state = self.state + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + this.openState('none', ins, ownerInstance, self) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + this.openState('right', ins, ownerInstance, self) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + this.openState('left', ins, ownerInstance, self) + } else { + // default + this.openState('none', ins, ownerInstance, self) + } + }, + + + /** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ + openState(type, ins, ownerInstance, self) { + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + let left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(() => { + ins.addClass('ani'); + this.move(left, ins, ownerInstance, self) + }) + }, + + + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus(instance, self) { + let state = self.state; + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event, ownerInstance, self) { + let instance = event.instance; + let state = self.state + this.resetTouchStatus(instance, self); + var touch = event.touches[0]; + state.startX = touch.clientX; + state.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event, self) { + let instance = event.instance; + let state = self.state; + let touch = event.touches[0]; + + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || this.getDirection(state.offsetX, state.offsetY); + } +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 0000000..d79c297 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,347 @@ + + + + + + diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs new file mode 100644 index 0000000..b394244 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs @@ -0,0 +1,341 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function showWatch(newVal, oldVal, ownerInstance, instance) { + var state = instance.getState() + getDom(instance, ownerInstance) + if (newVal && newVal !== 'none') { + openState(newVal, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + getDom(instance, ownerInstance) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ownerInstance) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ +function getDom(instance, ownerInstance) { + var state = instance.getState() + var leftDom = ownerInstance.selectComponent('.button-group--left') + var rightDom = ownerInstance.selectComponent('.button-group--right') + var leftStyles = { + width: 0 + } + var rightStyles = { + width: 0 + } + leftStyles = leftDom.getBoundingClientRect() + rightStyles = rightDom.getBoundingClientRect() + + state.leftWidth = leftStyles.width || 0 + state.rightWidth = rightStyles.width || 0 + state.threshold = instance.getDataset().threshold +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + showWatch: showWatch, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue b/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..4971782 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/uni_modules/uni-swipe-action/package.json b/uni_modules/uni-swipe-action/package.json new file mode 100644 index 0000000..47651a6 --- /dev/null +++ b/uni_modules/uni-swipe-action/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swipe-action", + "displayName": "uni-swipe-action 滑动操作", + "version": "1.3.8", + "description": "SwipeAction 滑动操作操作组件", + "keywords": [ + "", + "uni-ui", + "uniui", + "滑动删除", + "侧滑删除" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-swipe-action/readme.md b/uni_modules/uni-swipe-action/readme.md new file mode 100644 index 0000000..93a5cac --- /dev/null +++ b/uni_modules/uni-swipe-action/readme.md @@ -0,0 +1,11 @@ + + +## SwipeAction 滑动操作 +> **组件名:uni-swipe-action** +> 代码块: `uSwipeAction`、`uSwipeActionItem` + + +通过滑动触发选项的容器 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-swiper-dot/changelog.md b/uni_modules/uni-swiper-dot/changelog.md new file mode 100644 index 0000000..85cf54d --- /dev/null +++ b/uni_modules/uni-swiper-dot/changelog.md @@ -0,0 +1,12 @@ +## 1.2.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-swiper-dot](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 clickItem 事件,支持指示点控制轮播 +- 新增 支持 pc 可用 diff --git a/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue b/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue new file mode 100644 index 0000000..46eb8c1 --- /dev/null +++ b/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/uni_modules/uni-swiper-dot/package.json b/uni_modules/uni-swiper-dot/package.json new file mode 100644 index 0000000..f2dd8d2 --- /dev/null +++ b/uni_modules/uni-swiper-dot/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swiper-dot", + "displayName": "uni-swiper-dot 轮播图指示点", + "version": "1.2.0", + "description": "自定义轮播图指示点组件", + "keywords": [ + "uni-ui", + "uniui", + "轮播图指示点", + "dot", + "swiper" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-swiper-dot/readme.md b/uni_modules/uni-swiper-dot/readme.md new file mode 100644 index 0000000..7d397e2 --- /dev/null +++ b/uni_modules/uni-swiper-dot/readme.md @@ -0,0 +1,11 @@ + + +## SwiperDot 轮播图指示点 +> **组件名:uni-swiper-dot** +> 代码块: `uSwiperDot` + + +自定义轮播图指示点 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-table/changelog.md b/uni_modules/uni-table/changelog.md new file mode 100644 index 0000000..9f87c67 --- /dev/null +++ b/uni_modules/uni-table/changelog.md @@ -0,0 +1,27 @@ +## 1.2.3(2023-03-28) +- 修复 在vue3模式下可能会出现错误的问题 +## 1.2.2(2022-11-29) +- 优化 主题样式 +## 1.2.1(2022-06-06) +- 修复 微信小程序存在无使用组件的问题 +## 1.2.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-table](https://uniapp.dcloud.io/component/uniui/uni-table) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-07-08) +- 新增 uni-th 支持 date 日期筛选范围 +## 1.0.6(2021-07-05) +- 新增 uni-th 支持 range 筛选范围 +## 1.0.5(2021-06-28) +- 新增 uni-th 筛选功能 +## 1.0.4(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.3(2021-04-16) +- 新增 sortable 属性,是否开启单列排序 +- 优化 表格多选逻辑 +## 1.0.2(2021-03-22) +- uni-tr 添加 disabled 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-table/components/uni-table/uni-table.vue b/uni_modules/uni-table/components/uni-table/uni-table.vue new file mode 100644 index 0000000..21d9527 --- /dev/null +++ b/uni_modules/uni-table/components/uni-table/uni-table.vue @@ -0,0 +1,455 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue b/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue new file mode 100644 index 0000000..fbe1bdc --- /dev/null +++ b/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-td/uni-td.vue b/uni_modules/uni-table/components/uni-td/uni-td.vue new file mode 100644 index 0000000..9ce93e9 --- /dev/null +++ b/uni_modules/uni-table/components/uni-td/uni-td.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-th/filter-dropdown.vue b/uni_modules/uni-table/components/uni-th/filter-dropdown.vue new file mode 100644 index 0000000..df22a71 --- /dev/null +++ b/uni_modules/uni-table/components/uni-th/filter-dropdown.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-th/uni-th.vue b/uni_modules/uni-table/components/uni-th/uni-th.vue new file mode 100644 index 0000000..14889dd --- /dev/null +++ b/uni_modules/uni-table/components/uni-th/uni-th.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-thead/uni-thead.vue b/uni_modules/uni-table/components/uni-thead/uni-thead.vue new file mode 100644 index 0000000..0dd18cd --- /dev/null +++ b/uni_modules/uni-table/components/uni-thead/uni-thead.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tr/table-checkbox.vue b/uni_modules/uni-table/components/uni-tr/table-checkbox.vue new file mode 100644 index 0000000..1089187 --- /dev/null +++ b/uni_modules/uni-table/components/uni-tr/table-checkbox.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tr/uni-tr.vue b/uni_modules/uni-table/components/uni-tr/uni-tr.vue new file mode 100644 index 0000000..f9b9671 --- /dev/null +++ b/uni_modules/uni-table/components/uni-tr/uni-tr.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/uni_modules/uni-table/i18n/en.json b/uni_modules/uni-table/i18n/en.json new file mode 100644 index 0000000..e32023c --- /dev/null +++ b/uni_modules/uni-table/i18n/en.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reset", + "filter-dropdown.search": "Search", + "filter-dropdown.submit": "Submit", + "filter-dropdown.filter": "Filter", + "filter-dropdown.gt": "Greater or equal to", + "filter-dropdown.lt": "Less than or equal to", + "filter-dropdown.date": "Date" +} diff --git a/uni_modules/uni-table/i18n/es.json b/uni_modules/uni-table/i18n/es.json new file mode 100644 index 0000000..9afd04b --- /dev/null +++ b/uni_modules/uni-table/i18n/es.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reiniciar", + "filter-dropdown.search": "Búsqueda", + "filter-dropdown.submit": "Entregar", + "filter-dropdown.filter": "Filtrar", + "filter-dropdown.gt": "Mayor o igual a", + "filter-dropdown.lt": "Menos que o igual a", + "filter-dropdown.date": "Fecha" +} diff --git a/uni_modules/uni-table/i18n/fr.json b/uni_modules/uni-table/i18n/fr.json new file mode 100644 index 0000000..b006237 --- /dev/null +++ b/uni_modules/uni-table/i18n/fr.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Réinitialiser", + "filter-dropdown.search": "Chercher", + "filter-dropdown.submit": "Soumettre", + "filter-dropdown.filter": "Filtre", + "filter-dropdown.gt": "Supérieur ou égal à", + "filter-dropdown.lt": "Inférieur ou égal à", + "filter-dropdown.date": "Date" +} diff --git a/uni_modules/uni-table/i18n/index.js b/uni_modules/uni-table/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/uni_modules/uni-table/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-table/i18n/zh-Hans.json b/uni_modules/uni-table/i18n/zh-Hans.json new file mode 100644 index 0000000..862af17 --- /dev/null +++ b/uni_modules/uni-table/i18n/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "确定", + "filter-dropdown.filter": "筛选", + "filter-dropdown.gt": "大于等于", + "filter-dropdown.lt": "小于等于", + "filter-dropdown.date": "日期范围" +} diff --git a/uni_modules/uni-table/i18n/zh-Hant.json b/uni_modules/uni-table/i18n/zh-Hant.json new file mode 100644 index 0000000..64f8061 --- /dev/null +++ b/uni_modules/uni-table/i18n/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "確定", + "filter-dropdown.filter": "篩選", + "filter-dropdown.gt": "大於等於", + "filter-dropdown.lt": "小於等於", + "filter-dropdown.date": "日期範圍" +} diff --git a/uni_modules/uni-table/package.json b/uni_modules/uni-table/package.json new file mode 100644 index 0000000..7c2f91c --- /dev/null +++ b/uni_modules/uni-table/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-table", + "displayName": "uni-table 表格", + "version": "1.2.3", + "description": "表格组件,多用于展示多条结构类似的数据,如", + "keywords": [ + "uni-ui", + "uniui", + "table", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "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","uni-datetime-picker"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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", + "字节跳动": "n", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-table/readme.md b/uni_modules/uni-table/readme.md new file mode 100644 index 0000000..bb08c79 --- /dev/null +++ b/uni_modules/uni-table/readme.md @@ -0,0 +1,13 @@ + + +## Table 表单 +> 组件名:``uni-table``,代码块: `uTable`。 + +用于展示多条结构类似的数据 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-table) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + diff --git a/uni_modules/uni-tag/changelog.md b/uni_modules/uni-tag/changelog.md new file mode 100644 index 0000000..c0c5839 --- /dev/null +++ b/uni_modules/uni-tag/changelog.md @@ -0,0 +1,21 @@ +## 2.1.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-tag](https://uniapp.dcloud.io/component/uniui/uni-tag) +## 2.0.0(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +- 移除 插槽 +- 移除 type 属性的 royal 选项 +## 1.1.1(2021-08-11) +- type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-06-18) +- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.0.6(2021-06-04) +- 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.0.5(2021-05-10) +- 修复 royal 类型无效的bug +- 修复 uni-tag 宽度不自适应的bug +- 新增 uni-tag 支持属性 custom-style 自定义样式 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-tag/components/uni-tag/uni-tag.vue b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue new file mode 100644 index 0000000..6378a0b --- /dev/null +++ b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/uni_modules/uni-tag/package.json b/uni_modules/uni-tag/package.json new file mode 100644 index 0000000..1878088 --- /dev/null +++ b/uni_modules/uni-tag/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-tag", + "displayName": "uni-tag 标签", + "version": "2.1.0", + "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。", + "keywords": [ + "uni-ui", + "uniui", + "", + "tag", + "标签" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-tag/readme.md b/uni_modules/uni-tag/readme.md new file mode 100644 index 0000000..6e78ff5 --- /dev/null +++ b/uni_modules/uni-tag/readme.md @@ -0,0 +1,13 @@ + + +## Tag 标签 +> **组件名:uni-tag** +> 代码块: `uTag` + + +用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-test/changelog.md b/uni_modules/uni-test/changelog.md new file mode 100644 index 0000000..2f3b102 --- /dev/null +++ b/uni_modules/uni-test/changelog.md @@ -0,0 +1,39 @@ +## 2.0.13(2021-11-18) +邱 +## 2.0.12(2021-11-18) +123123 +## 2.0.11(2021-11-18) +0000 +## 2.0.10(2021-11-18) +111234 +## 2.0.9(2021-11-18) +3333 +## 2.0.8(2021-11-18) +=== +## 2.0.7(2021-11-18) +111 +## 2.0.6(2021-05-26) +- test +## 0.0.37(2021-03-23) +- uni-forms 更新 校验器 +- uni-forms 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug + + +## 0.0.36(2021-03-23) +- uni-forms 更新 校验器 +- uni-forms 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug + + +## 0.0.35(2021-03-23) +- uni-forms 更新 校验器 +- uni-forms 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug + + +## 0.0.34(2021-03-23) +- 测试新同步插件 +## 0.0.33(2021-03-09) +- test +## 0.0.32(2021-02-24) +- 更新 read 2 +## 0.0.31(2021-02-24) +- 同步 readme.md diff --git a/uni_modules/uni-test/components/uni-test/uni-test.vue b/uni_modules/uni-test/components/uni-test/uni-test.vue new file mode 100644 index 0000000..9ea8aaf --- /dev/null +++ b/uni_modules/uni-test/components/uni-test/uni-test.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/uni_modules/uni-test/package.json b/uni_modules/uni-test/package.json new file mode 100644 index 0000000..9a3c4c4 --- /dev/null +++ b/uni_modules/uni-test/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-test", + "displayName": "Test 测试插件", + "version": "2.0.13", + "description": "测试插件 ", + "keywords": [ + "test" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.3" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-test/readme.md b/uni_modules/uni-test/readme.md new file mode 100644 index 0000000..ddb24c6 --- /dev/null +++ b/uni_modules/uni-test/readme.md @@ -0,0 +1,10 @@ + + +## DataCheckbox 数据驱动的单选复选框 +> **组件名:uni-data-checkbox** +> 代码块: `uDataCheckbox` + + +本组件是基于uni-app基础组件checkbox的封装。本组件要解决问题包括: + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card) \ No newline at end of file diff --git a/uni_modules/uni-title/changelog.md b/uni_modules/uni-title/changelog.md new file mode 100644 index 0000000..7626216 --- /dev/null +++ b/uni_modules/uni-title/changelog.md @@ -0,0 +1,10 @@ +## 1.1.1(2022-05-19) +- 修改组件描述 +## 1.1.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-title](https://uniapp.dcloud.io/component/uniui/uni-title) +## 1.0.2(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-title/components/uni-title/uni-title.vue b/uni_modules/uni-title/components/uni-title/uni-title.vue new file mode 100644 index 0000000..bf4f926 --- /dev/null +++ b/uni_modules/uni-title/components/uni-title/uni-title.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/uni_modules/uni-title/package.json b/uni_modules/uni-title/package.json new file mode 100644 index 0000000..2249f5a --- /dev/null +++ b/uni_modules/uni-title/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-title", + "displayName": "uni-title 章节标题", + "version": "1.1.1", + "description": "章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题", + "keywords": [ + "uni-ui", + "uniui", + "标题", + "章节", + "章节标题", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-title/readme.md b/uni_modules/uni-title/readme.md new file mode 100644 index 0000000..0e60b1b --- /dev/null +++ b/uni_modules/uni-title/readme.md @@ -0,0 +1,14 @@ + + +## Title 标题 +> **组件名:uni-title** +> 代码块: `uTitle` + + +章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-title) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + diff --git a/uni_modules/uni-tooltip/changelog.md b/uni_modules/uni-tooltip/changelog.md new file mode 100644 index 0000000..00f1572 --- /dev/null +++ b/uni_modules/uni-tooltip/changelog.md @@ -0,0 +1,10 @@ +## 0.2.1(2022-05-09) +- 修复 content 为空时仍然弹出的bug +## 0.2.0(2022-05-07) +**注意:破坏性更新** +- 更新 text 属性变更为 content +- 更新 移除 width 属性 +## 0.1.1(2022-04-27) +- 修复 组件根 text 嵌套组件 warning +## 0.1.0(2022-04-21) +- 初始化 diff --git a/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue b/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue new file mode 100644 index 0000000..ffbb6fa --- /dev/null +++ b/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/uni_modules/uni-tooltip/package.json b/uni_modules/uni-tooltip/package.json new file mode 100644 index 0000000..e88ecf8 --- /dev/null +++ b/uni_modules/uni-tooltip/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-tooltip", + "displayName": "uni-tooltip 提示文字", + "version": "0.2.1", + "description": "Tooltip 提示文字", + "keywords": [ + "uni-tooltip", + "uni-ui", + "tooltip", + "tip", + "文字提示" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无 ", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-tooltip/readme.md b/uni_modules/uni-tooltip/readme.md new file mode 100644 index 0000000..faafa2e --- /dev/null +++ b/uni_modules/uni-tooltip/readme.md @@ -0,0 +1,8 @@ +## Badge 数字角标 +> **组件名:uni-tooltip** +> 代码块: `uTooltip` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tooltip) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-transition/changelog.md b/uni_modules/uni-transition/changelog.md new file mode 100644 index 0000000..b1a824b --- /dev/null +++ b/uni_modules/uni-transition/changelog.md @@ -0,0 +1,20 @@ +## 1.3.1(2021-11-23) +- 修复 init 方法初始化问题 +## 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-transition](https://uniapp.dcloud.io/component/uniui/uni-transition) +## 1.2.1(2021-09-27) +- 修复 init 方法不生效的 Bug +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.1(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的 Bug +## 1.1.0(2021-04-22) +- 新增 通过方法自定义动画 +- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- 优化 动画触发逻辑,使动画更流畅 +- 优化 支持单独的动画类型 +- 优化 文档示例 +## 1.0.2(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..8f89b18 --- /dev/null +++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,131 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误 + this.animation = uni.createAnimation({ + ...options + }) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {} + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if(type === 'rotate'){ + unit = 'deg' + } + styles.styles.transform += `${type}(${args+unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition(ref, { + styles, + ...config + }, res => { + resolve() + }) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { + styles, + config + } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if(!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + + +const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + MPAnimation.prototype[type] = function(...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if(!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..a2bf104 --- /dev/null +++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json new file mode 100644 index 0000000..d15fdf0 --- /dev/null +++ b/uni_modules/uni-transition/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-transition", + "displayName": "uni-transition 过渡动画", + "version": "1.3.1", + "description": "元素的简单过渡动画", + "keywords": [ + "uni-ui", + "uniui", + "动画", + "过渡", + "过渡动画" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md new file mode 100644 index 0000000..2f8a77e --- /dev/null +++ b/uni_modules/uni-transition/readme.md @@ -0,0 +1,11 @@ + + +## Transition 过渡动画 +> **组件名:uni-transition** +> 代码块: `uTransition` + + +元素过渡动画 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-ui/changelog.md b/uni_modules/uni-ui/changelog.md new file mode 100644 index 0000000..61b26d0 --- /dev/null +++ b/uni_modules/uni-ui/changelog.md @@ -0,0 +1,541 @@ +## 1.4.27(2023-04-23) +- uni-calendar 修复 某些情况 monthSwitch 未触发的Bug +- uni-calendar 修复 某些情况切换月份错误的Bug +- uni-data-picker 修复 更改 modelValue 报错的 bug +- uni-data-picker 修复 v-for 未使用 key 值控制台 warning +- uni-data-picker 修复代码合并时引发 value 属性为空时不渲染数据的问题 +- uni-data-picker 修复 localdata 不支持动态更新的bug +- uni-data-select 修复 微信小程序点击时会改变背景颜色的 bug +- uni-data-select 修复 禁用时会显示清空按钮 +- uni-data-select 优化 查询条件短期内多次变更只查询最后一次变更后的结果 +- uni-data-select 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue +- uni-datetime-picker 修复 日历 picker 修改年月后,自动选中当月1日 [详情](https://ask.dcloud.net.cn/question/165937) +- uni-datetime-picker 修复 小程序端 低版本 ios NaN [详情](https://ask.dcloud.net.cn/question/162979) +- uni-datetime-picker 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362) +- uni-datetime-picker 优化 值为空依然选中当天问题 +- uni-datetime-picker 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间 +- uni-datetime-picker 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间 +- uni-datetime-picker 优化 字节小程序日期时间范围选择,底部日期换行问题 +- uni-datetime-picker 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686) +- uni-datetime-picker 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684) +- uni-datetime-picker 优化 PC端输入日期格式错误时返回当前日期时间 +- uni-datetime-picker 优化 PC端输入日期时间超出 start、end 限制的Bug +- uni-datetime-picker 优化 移动端日期时间范围用法时间展示不完整问题 +- uni-datetime-picker 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679) +- uni-datetime-picker 修复 vue3 time-picker 无法显示绑定时分秒的Bug +- uni-datetime-picker 修复 字节小程序报错的Bug +- uni-datetime-picker 修复 某些情况切换月份错误的Bug +- uni-easyinput 修复 vue3 下 keyboardheightchange 事件报错的bug +- uni-easyinput 优化 trim 属性默认值 +- uni-easyinput 新增 cursor-spacing 属性 +- uni-fab 新增 pattern.icon 属性,可自定义图标 +- uni-file-picker 修复 手动上传删除一个文件后不能再上传的bug +- uni-forms 修复 required 参数无法动态绑定 +- uni-list 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改 +- uni-list uni-list-chat 新增 支持具名插槽`header` +- uni-list 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props) +- uni-nav-bar 修复 自定义状态栏高度闪动BUG +- uni-nav-bar 修复 暗黑模式下边线颜色错误的bug +- uni-popup 修复 uni-popup 重复打开时的 bug +- uni-popup uni-popup-dialog 组件新增 inputType 属性 +- uni-swipe-action 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug +- uni-table 修复 在vue3模式下可能会出现错误的问题 +## 1.4.26(2023-01-31) +- uni-badge 修复 运行/打包 控制台警告问题 +- uni-calendar 修复 某些情况切换月份错误问题 +- uni-data-select 修复 不关联服务空间报错的问题 +- uni-data-select 新增 属性 `format` 可用于格式化显示选项内容 +- uni-datetime-picker 修复 某些情况切换月份错误问题 +- uni-easyinput 新增 keyboardheightchange 事件,可监听键盘高度变化 +- uni-list 修复 无反馈效果呈现的bug +## 1.4.25(2023-01-11) +- uni-file-picker 新增 sourceType 属性, 可以自定义图片和视频选择的来源 +## 1.4.24(2023-01-11) +- uni-data-select 修复 当where变化时,数据不会自动更新的问题 +- uni-datetime-picker 修复 多次加载组件造成内存占用的 bug +- uni-datetime-picker 修复 vue3 下 i18n 国际化初始值不正确的 bug +- uni-easyinput 修复 props 中背景颜色无默认值的bug +- uni-list 修复 uni-list-chat 在vue3下跳转报错的bug +- uni-list 修复 uni-list-chat avatar属性 值为本地路径时错误的问题 +- uni-list 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题 +- uni-list 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题 +- uni-list 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug +- uni-list 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug +- uni-list uni-list-chat 新增 avatar 支持 fileId +- uni-list uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html) +- uni-list uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im) +- uni-list uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor +- uni-popup 修复 nvue 下 v-show 报错 +## 1.4.23(2022-10-25) +- uni-datetime-picker 修复,支付宝小程序样式错乱,[详情](https://github.com/dcloudio/uni-app/issues/3861) + +- uni-nav-bar 修复 条件编译错误的bug +- uni-nav-bar 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug +## 1.4.22(2022-09-19) +- 优化 部分组件适配 uni-scss 主题色 +- uni-badge 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473) +- uni-calendar 修复 表头年月切换,导致改变当前日期为选择月1号,且未触发change事件 +- uni-data-select 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框 +- uni-data-select 修复 点击的位置不准确 +- uni-data-select 新增 支持 disabled 属性 +- uni-datetime-picker 修复,反向选择日期范围,日期显示异常,[详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +- uni-datetime-picker 修复 close事件无效的 bug +- uni-datetime-picker 修复 移动端 maskClick 无效的 bug,详见:[https://ask.dcloud.net.cn/question/140824?item_id=209458&rf=false](https://ask.dcloud.net.cn/question/140824?item_id=209458&rf=false) +- uni-fab 修复 小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false) +- uni-fab 修复 nvue 环境下,具有 tabBar 时,fab 组件下部位置无法正常获取 --window-bottom 的bug,详见:[https://ask.dcloud.net.cn/question/110638?notification_id=826310](https://ask.dcloud.net.cn/question/110638?notification_id=826310) +- uni-forms 优化 根据 rules 自动添加 required 的问题 +- uni-forms 修复 item 未设置 require 属性,rules 设置 require 后,星号也显示的 bug,详见:[https://ask.dcloud.net.cn/question/151540](https://ask.dcloud.net.cn/question/151540) +- uni-nav-bar 修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug +- uni-notice-bar 新增 属性 fontSize,可修改文字大小。 +- uni-pagination 修复,未对主题色设置默认色,导致未引入 uni-scss 变量文件报错。 +- uni-pagination 修复,未对移动端当前页文字做主题色适配。 +- uni-pagination 修复 es 语言 i18n 错误 +## 1.4.21(2022-09-19) +- 修复,安装时未导入 uni-data-select 和 uni-tooltip 的问题。 +## 1.4.20(2022-07-25) +- uni-section 新增组件 +- uni-forms 修复 model 需要校验的值没有声明对应字段时,导致第一次不触发校验的bug + +## 1.4.19(2022-07-07) +- uni-data-picker 优化 pc端图标位置不正确的问题 +- uni-data-select 修复 pc端宽度异常的bug +## 1.4.18(2022-07-06) +- uni-forms 【重要】组件逻辑重构,部分用法旧版本不兼容,请注意兼容问题 +- uni-forms 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力 +- uni-forms 新增 更多表单示例 +- uni-forms 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃 +- uni-forms 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效 +- uni-forms 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法 +- uni-forms 新增 子表单的 setRules 方法,配合自定义校验函数使用 +- uni-forms 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则 +- uni-forms 修复 由 1.4.0 引发的 label 插槽不生效的bug +- uni-forms 修复 子组件找不到 setValue 报错的bug +- uni-forms 修复 uni-data-picker 在 uni-forms-item 中报错的bug +- uni-forms 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +- uni-forms 修复 表单校验顺序无序问题 +- uni-forms 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式 +- uni-forms 优化 动态表单校验方式,废弃拼接name的方式 +- uni-breadcrumb 修复 微信小程序 separator 不显示问题 +- uni-data-checkbox 优化 在 uni-forms 中的依赖注入方式 +- uni-data-picker 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +- uni-data-picker 优化 显示样式 +- uni-data-select 优化 显示样式 +- uni-datetime-picker 修复 日历顶部年月及底部确认未国际化 bug +- uni-datetime-picker 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +- uni-easyinput 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容 +- uni-easyinput 新增 clear 事件,点击右侧叉号图标触发 +- uni-easyinput 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发 +- uni-easyinput 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等 +- uni-easyinput 优化 clearable 显示策略 +- uni-file-picker 修复 在uni-forms下样式不生效的bug +- uni-nav-bar 修复 组件示例中插槽用法无法显示内容的bug +- uni-swipe-action 修复 vue3 下使用组件不能正常运行的Bug +- uni-swipe-action 修复 h5端点击click触发两次的Bug +- uni-table 修复 微信小程序存在无使用组件的问题 +## 1.4.17(2022-06-30) +- 支持 ios 安全区 +## 1.4.16(2022-06-06) +- uni-breadcrumb 新增 支持 uni.scss 修改颜色 +- uni-data-select 修复 localdata 赋值不生效的 bug +- uni-data-select 新增 支持选项禁用(数据选项设置 disabled: true 即禁用) +- uni-data-select 修复 当 value 为 0 时选择不生效的 bug +- uni-easyinput 修复 关闭图标某些情况下无法取消的bug +- uni-fav 新增 stat 属性 ,是否开启uni统计功能 +- uni-goods-nav 新增 stat属性,是否开启uni统计功能 +- uni-group 新增 stat属性,是否开启uni统计功能 +- uni-nav-bar 新增 stat 属性 ,可开启统计 title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +- uni-search-bar 新增 readonly 属性,组件只读 +- uni-swipe-action 修复 isPC 找不到的Bug +- uni-swipe-action 修复 在 nvue 下 disabled 失效的bug +- uni-tooltip 修复 content 为空时仍然弹出的bug +## 1.4.15(2022-05-07) +- uni-data-picker 修复 字节小程序 本地数据无法选择下一级的Bug +- uni-data-select 新增 记住上次的选项(仅 collection 存在时有效) +- uni-search-bar 修复 vue3 input 事件不生效的bug +- uni-search-bar 修复 多余代码导致的bug +- uni-tooltip 更新 text 属性变更为 content +- uni-tooltip 更新 移除 width 属性 +- uni-tooltip 修复 组件根 text 嵌套组件 warning +## 1.4.14(2022-04-18) +- uni-datetime-picker 修复 Vue3 下动态赋值,单选类型未响应的 bug +- uni-easyinput 修复 默认值不生效的bug +## 1.4.13(2022-04-02) +- uni-calendar 修复 条件编译 nvue 不支持的 css 样式 +- uni-calendar 修复 startDate、 endDate 属性失效的 bug +- uni-data-picker 修复 nvue 不支持的 v-show 的 bug +- uni-data-picker 修复 条件编译 nvue 不支持的 css 样式 +- uni-datetime-picker 修复 Vue3 下动态赋值未响应的 bug +- uni-easyinput 修复 value不能为0的bug +- uni-popup 修复 弹出层内部无法滚动的bug +- uni-popup 修复 小程序中高度错误的bug +- uni-popup 修复 快速调用open出现问题的Bug +- uni-rate 修复 条件判断 `NaN` 错误的 bug +- uni-swipe-action 修复 按钮字体大小不能设置的bug +- uni-swipe-action 修复 h5和app端下报el错误的bug +- uni-swipe-action 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 1.4.12(2022-02-19) +- uni-collapse 修复 初始化的时候 ,open 属性失效的bug +- uni-data-checkbox 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug +- uni-icons 优化 size 属性可以传入不带单位的字符串数值 +- uni-icons 优化 size 支持其他单位 +- uni-nav-bar 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +- uni-popup 修复 safeArea 属性不能设置为false的bug +## 1.4.11(2022-01-21) +- uni-collapse 修复 微信小程序resize后组件收起的bug +- uni-countdown 修复 在微信小程序中样式不生效的bug +- uni-countdown 新增 update 方法 ,在动态更新时间后,刷新组件 +- uni-load-more 新增 showText属性 ,是否显示文本 +- uni-load-more 修复 nvue 平台下不显示文本的bug +- uni-load-more 修复 微信小程序平台样式选择器报警告的问题 +- uni-nav-bar 修复 在vue下,标题不垂直居中的bug +- uni-nav-bar 修复 height 属性类型错误 +- uni-nav-bar 新增 height 属性,可修改组件高度 +- uni-nav-bar 新增 dark 属性可可开启暗黑模式 +- uni-nav-bar 优化 标题字数过多显示省略号 +- uni-nav-bar 优化 插槽,插入内容可完全覆盖 +- uni-popup 修复 isMaskClick 失效的bug +- uni-popup 新增 cancelText \ confirmText 属性 ,可自定义文本 +- uni-popup 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- uni-popup 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 + +## 1.4.10(2022-01-17) +- uni-card 修复 在vue页面下略缩图显示不正常的bug +- uni-datetime-picker 修复 clear-icon 属性在小程序平台不生效的 bug +- uni-datetime-picker 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +- uni-fab 更新 组件依赖 +- +- uni-icons 修复 nvue 有些图标不显示的bug,兼容老版本图标 +- uni-icons 优化 示例可复制图标名称 +- uni-nav-bar 修复 color 属性不生效的bug +- uni-popup 修复 设置 safeArea 属性不生效的bug +- uni-popup 优化 组件示例 +- uni-popup 修复 vuedoc 文字错误 +## 1.4.9(2021-11-23) +- uni-ui 修复 vue3中某些scss变量无法找到的问题 +- uni-combox 优化 label、label-width 属性 +- uni-data-picker 修复 由上个版本引发的map、v-model等属性不生效的bug +- uni-file-picker 修复 参数为对象的情况下,url在某些情况显示错误的bug +- uni-icons 优化 兼容旧组件 type 值 +- uni-list 修复 在vue3中to属性在发行应用的时候报错的bug +- uni-scss 修复 vue3中scss语法兼容问题 +- uni-transition 修复 init 方法初始化问题 +## 1.4.8(2021-11-19) +- uni-fab 修复 阴影颜色不正确的bug +## 1.4.7(2021-11-19) +- uni-ui 新增 支持国际化 +- uni-ui 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- uni-ui 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) +- uni-badge 修改 size 属性默认值调整为 small +- uni-badge 修改 type 属性,默认值调整为 error,info 替换 default +- uni-badge 修复 在字节小程序上样式不生效的 bug +- uni-calendar 修复 弹出层被 tabbar 遮盖 bug +- uni-card 重构插槽的用法 ,header 替换为 title +- uni-card 新增 actions 插槽 +- uni-card 新增 cover 封面图属性和插槽 +- uni-card 新增 padding 内容默认内边距离 +- uni-card 新增 margin 卡片默认外边距离 +- uni-card 新增 spacing 卡片默认内边距 +- uni-card 新增 shadow 卡片阴影属性 +- uni-card 取消 mode 属性,可使用组合插槽代替 +- uni-card 取消 note 属性 ,使用actions插槽代替 +- uni-collapse 优化 show-arrow 属性默认为true +- uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 +- uni-countdown 新增 font-size 支持自定义字体大小 +- uni-data-checkbox 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 +- uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +- uni-data-checkbox 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-dateformat 优化 默认时间不再是当前时间,而是显示'-'字符 +- uni-datetime-picker 修复 hide-second 在移动端的 bug +- uni-datetime-picker 修复 单选赋默认值时,赋值日期未高亮的 bug +- uni-datetime-picker 修复 赋默认值时,移动端未正确显示时间的 bug +- uni-datetime-picker 新增 hide-second 属性,支持只使用时分,隐藏秒 +- uni-datetime-picker 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- uni-datetime-picker 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- uni-datetime-picker 优化 调整字号大小,美化日历界面 +- uni-datetime-picker 优化 范围选择器在 pc 端过宽的问题 +- uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 +- uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- uni-datetime-picker 修复 type 属性动态赋值无效的 bug +- uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug +- uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug +- uni-datetime-picker 修复 范围选未正确显示当前值的 bug +- uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +- uni-easyinput 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-file-picker 新增 参数中返回 fileID 字段 +- uni-file-picker 修复 腾讯云传入fileID 不能回显的bug +- uni-file-picker 修复 选择图片后,不能放大的问题 +- uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug +- uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 +- uni-file-picker 修复 v-model 值设为 null 报错的Bug +- uni-file-picker 修复 return-type="object" 时,无法删除文件的Bug +- uni-file-picker 修复 auto-upload 属性失效的Bug +- uni-forms 修复 label 插槽不生效的bug +- uni-forms 修复 没有添加校验规则的字段依然报错的Bug +- uni-forms 修复 重置表单错误信息无法清除的问题 +- uni-forms 修复 表单验证只生效一次的问题 +- uni-icons 新增 更多图标 +- uni-icons 优化 自定义图标使用方式 +- uni-link 修复 在 nvue 下不显示的 bug +- uni-pagination 修复 current 、value 属性未监听,导致高亮样式失效的 bug +- uni-rate 优化 默认值修改为 0 颗星 +- uni-search-bar 修复 value 属性与 modelValue 属性不兼容的Bug +- uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 +- uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +- uni-tag 新增 提供组件设计资源,组件样式调整 +- uni-tag 移除 插槽 +- uni-tag 移除 type 属性的 royal 选项 +- uni-tag type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.4.2(2021-08-20) +- 新增 uni-ui 组件支持国际化 i18n +- uni-collapse 优化 show-arrow 属性默认为true +- uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 +- uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +- uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +- uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug +- uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 +- uni-file-picker 修复 v-model 值设为 null 报错的Bug +- uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 +- uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.4.0(2021-08-13) +- uni-calendar 修复 弹出层被 tabbar 遮盖 bug +- uni-data-checkbox 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-dateformat 调整 默认时间不再是当前时间,而是显示'-'字符 +- uni-datetime-picker 新增 适配 vue3 +- uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 +- uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- uni-datetime-picker 修复 type 属性动态赋值无效的 bug +- uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug +- uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug +- uni-datetime-picker 修复 范围选未正确显示当前值的 bug +- uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- uni-easyinput 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-file-picker 修复 return-type="object" 时,无法删除文件的Bug +- uni-file-picker 修复 auto-upload 属性失效的Bug +- uni-forms 修复 没有添加校验规则的字段依然报错的Bug +- uni-forms 修复 重置表单错误信息无法清除的问题 +- uni-forms 优化 组件文档 +- uni-forms 修复 表单验证只生效一次的问题 +- uni-tag type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.3.9(2021-08-02) +- uni-datetime-picker 新增 return-type 属性支持返回 date 日期对象 +- uni-file-picker 修复 fileExtname属性不指定值报错的Bug +- uni-file-picker 修复 在某种场景下图片不回显的Bug +- uni-link 支持自定义插槽 +## 1.3.8(2021-07-31) +- uni-ui 组件兼容 vue3 +- uni-collapse 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug +- uni-collapse 优化 组件示例 +- uni-collapse 新增 组件折叠动画 +- uni-collapse 新增 value\v-model 属性 ,动态修改面板折叠状态 +- uni-collapse 新增 title 插槽 ,可定义面板标题 +- uni-collapse 新增 border 属性 ,显示隐藏面板内容分隔线 +- uni-collapse 新增 title-border 属性 ,显示隐藏面板标题分隔线 +- uni-collapse 修复 resize 方法失效的Bug +- uni-collapse 修复 change 事件返回参数不正确的Bug +- uni-collapse 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法 +- uni-data-checkbox 优化 在uni-forms组件,与label不对齐的问题 +- uni-data-checkbox 修复 单选默认值为0不能选中的Bug +- uni-easyinput 优化 errorMessage 属性支持 Boolean 类型 +- uni-file-picker 修复 return-type为object下,返回值不正确的Bug +- uni-file-picker 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +- uni-file-picker 优化 h5平台下上传文件导致页面卡死的问题 +- uni-forms 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- uni-forms 修复 1.2.1 引起的示例在小程序平台报错的Bug +- uni-forms 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- uni-forms 修复 不指定name属性时,运行报错的Bug +- uni-forms 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- uni-forms 优化 组件示例,新增动态校验示例代码 +- uni-forms 优化 组件文档,使用方式更清晰 +- uni-list 修复 与其他组件嵌套使用时,点击失效的Bug +- uni-swipe-action 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.3.7(2021-07-16) +- uni-ui 兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- uni-datetime-picker 修复 单选日期类型,初始赋值后不在当前日历的 bug +- uni-datetime-picker 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- uni-datetime-picker 优化 移动端移除显示框的清空按钮,无实际用途 +- uni-datetime-picker 修复 组件赋值为空,界面未更新的 bug +- uni-datetime-picker 修复 start 和 end 不能动态赋值的 bug +- uni-datetime-picker 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +## 1.3.6(2021-07-09) +- uni-data-checkbox 优化 删除无用日志 +- uni-data-checkbox 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题 +- uni-data-checkbox 修复 nvue 黑框样式问题 +- uni-datetime-picker 修复 范围选择不能动态赋值的 bug +- uni-datetime-picker 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +- uni-datetime-picker 优化 弹出层在超出视窗边缘定位不准确的问题 +- uni-datetime-picker 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- uni-datetime-picker 优化 弹出层在超出视窗边缘被遮盖的问题 +- uni-datetime-picker 新增 maskClick 事件 +- uni-datetime-picker 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- uni-datetime-picker 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +- uni-datetime-picker 新增 日期时间显示框支持插槽 +- uni-file-picker 修复 sourceType 缺少默认值导致 ios 无法选择文件 +- uni-file-picker 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +- uni-table 新增 uni-th 支持 date 日期筛选范围 +- uni-table 新增 uni-th 支持 range 筛选范围 +- uni-table 新增 uni-th 筛选功能 +## 1.3.5(2021-07-02) +- uni-card 优化 图文卡片无图片加载时,提供占位图标 +- uni-card 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持) +- uni-card 修复 thumbnail 不存在仍然占位的 bug +- uni-data-checkbox 修复 selectedTextColor 属性不生效的Bug +- uni-datetime-picker 优化 添加 uni-icons 依赖 +- uni-easyinput 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug +- uni-file-picker 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +- uni-file-picker 优化 文件上传后进度条消失时机 +- uni-file-picker 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +- uni-forms 修复 pattern 属性在微信小程序平台无效的问题 +## 1.3.4(2021-06-25) +- uni-badge 优化 示例项目 +- uni-countdown 修复 uni-countdown 重复赋值跳两秒的 bug +- uni-easyinput 修复 passwordIcon 属性拼写错误的 bug +- uni-forms 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +- uni-forms 修复 只写setRules方法而导致校验不生效的Bug +- uni-forms 修复 由上个办法引发的错误提示文字错位的Bug +- uni-forms 修复 不设置 label 属性 ,无法设置label插槽的问题 +- uni-forms 修复 不设置label属性,label-width属性不生效的bug +- uni-forms 修复 setRules 方法与rules属性冲突的问题 +- uni-link 新增 download 属性,H5平台下载文件名 +- uni-popup 新增 mask-click 遮罩层点击事件 +- uni-popup 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +- uni-tag 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.3.3(2021-06-18) +- uni-easyinput 新增 passwordIcon 属性,当type=password时是否显示小眼睛图标 +- uni-easyinput 修复 confirmType 属性不生效的问题 +- uni-easyinput 修复 disabled 状态可清出内容的 bug +- uni-file-picker 修复 删除文件时无法触发 v-model 的Bug +- uni-popup 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +- uni-popup 修复 错误的 watch 字段 +- uni-popup 修复 safeArea 属性不生效的问题 +- uni-popup 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.3.2(2021-06-04) +- uni-data-checkbox 新增 map 属性,可以方便映射text/value属性 +- uni-data-checkbox 修复 不关联服务空间的情况下组件报错的Bug +- uni-data-picker 修复 上个版本引出的本地数据无法选择带有children的2级节点 +- uni-forms 修复 动态删减数据导致报错的问题 +- uni-forms 新增 modelValue 属性 ,value 即将废弃 +- uni-forms 新增 uni-forms-item 可以设置单独的 rules +- uni-forms 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- uni-forms 优化 submit 事件重命名为 validate +- uni-data-picker 修复 无法加载云端数据的问题 +- uni-data-picker 修复 v-model无效问题 +- uni-data-picker 修复 loaddata 为空数据组时加载时间过长问题 +- uni-datetime-picker 修复 图标在小程序上不显示的 bug +- uni-datetime-picker 优化 重命名引用组件,避免潜在组件命名冲突 +- uni-datetime-picker 优化 代码目录扁平化 +- uni-tag 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.3.1(2021-05-14) +- uni-badge 新增 uni-badge 的 absolute 属性,支持定位 +- uni-badge 新增 uni-badge 的 offset 属性,支持定位偏移 +- uni-badge 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点 +- uni-badge 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+ +- uni-badge 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式 +- uni-badge 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug +- uni-badge 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug +- uni-badge 新增 uni-badge 属性 custom-style, 支持自定义样式 +- uni-datetime-picker 修复 ios 下不识别 '-' 日期格式的 bug +- uni-datetime-picker 优化 pc 下弹出层添加边框和阴影 +- uni-datetime-picker 修复 在 admin 中获取弹出层定位错误的bug +- uni-datetime-picker 修复 type 属性向下兼容,默认值从 date 变更为 datetime +- uni-datetime-picker 支持日历形式的日期+时间的范围选择 +- uni-steps 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +- uni-countdown 修复 uni-countdown 不能控制倒计时的 bug +- uni-tag 修复 royal 类型无效的bug +- uni-tag 修复 uni-tag 宽度不自适应的bug +- uni-tag 新增 uni-tag 支持属性 custom-style 自定义样式 +- uni-link 新增 href 属性支持 tel:|mailto: +- uni-popup 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +- uni-popup 新增 type 属性的 left\right 值,支持左右弹出 +- uni-popup 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- uni-popup 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- uni-popup 新增 safeArea 属性,是否适配底部安全区 +- uni-popup 修复 App\h5\微信小程序底部安全区占位不对的Bug +- uni-popup 修复 App 端弹出等待的Bug +- uni-popup 优化 提升低配设备性能,优化动画卡顿问题 +- uni-popup 优化 更简单的组件自定义方式 +- uni-table 修复 示例项目缺少组件的Bug +- uni-forms 修复 自定义检验器失效的问题 +- uni-title 修复 示例项目缺少组件的Bug +- uni-transition 修复 示例项目缺少组件的Bug +- uni-swiper-dot 修复 示例项目缺少组件的Bug +- uni-ui 新增 组件示例地址 +## 1.3.0(2021-04-23) +- uni-combox 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-data-picker 修复 非树形数据有 where 属性查询报错的问题 +- uni-fav 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-goods-nav 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-nav-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-notice-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-number-box 修复 uni-number-box 浮点数运算不精确的 bug +- uni-number-box 修复 uni-number-box change 事件触发不正确的 bug +- uni-number-box 新增 uni-number-box v-model 双向绑定 +- uni-rate 修复 布局变化后 uni-rate 星星计算不准确的 bug +- uni-rate 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +- uni-search-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-steps 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-transition 新增 通过方法自定义动画 +- uni-transition 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- uni-transition 优化 动画触发逻辑,使动画更流畅 +- uni-transition 优化 支持单独的动画类型 +- uni-transition 优化 文档示例 +## 1.2.13(2021-04-16) +- uni-ui 新增 uni-data-picker 支持云端非树形表结构数据 +- uni-ui 修复 uni-data-checkbox nvue 下无法选中的问题 +- uni-ui 修复 uni-data-picker 根节点 parent_field 字段等于null时选择界面错乱问题 +- uni-ui 修复 uni-file-picker 选择的文件非 file-extname 字段指定的扩展名报错的Bug +- uni-ui 修复 uni-swipe-action 报错 nv_navigator is not defined 的bug +- uni-ui 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +- uni-ui 优化 uni-file-picker file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +- uni-ui 优化 uni-pagination PC 和 移动端适配不同的 ui +- uni-ui 更新 uni-file-picker 组件示例 +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug +- uni-ui 新增 uni-search-bar 的 focus 事件 +- uni-ui 修复 uni-rate 属性 margin 值为 string 组件失效的 bug +- uni-data-picker 修复 本地数据概率无法回显时问题 +- uni-table 新增 sortable 属性,是否开启单列排序 +- uni-table 优化 表格多选逻辑 +## 1.2.12(2021-03-23) +- uni-ui 新增 uni-datetime-picker 的 hide-second 属性、border 属性; +- uni-ui 修复 uni-datetime-picker 选择跟显示的日期不一样的 bug, +- uni-ui 修复 uni-datetime-picker change事件触发2次的 bug +- uni-ui 修复 uni-datetime-picker 分、秒 end 范围错误的 bug +- uni-ui 新增 uni-tr selectable 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +- uni-ui 新增 uni-data-checkbox 新增 disabled属性,支持nvue +- uni-ui 优化 uni-data-checkbox 无选项时提示“暂无数据” +- uni-ui 优化 uni-data-checkbox 默认颜色显示 +- uni-ui 新增 uni-link href 属性支持 tel:|mailto: +- uni-ui 新增 uni-table 示例demo +- uni-ui 修复 uni-data-picker 微信小程序某些情况下无法选择的问题,事件无法触发的问题 +- uni-ui 修复 uni-nav-bar easycom 下,找不到 uni-status-bar 的bug +- uni-ui 修复 uni-easyinput 示例在 qq 小程序上的bug +- uni-ui 修复 uni-forms 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +- uni-ui 调整 cli 项目 建议使用 easycom 方式引用组件,如使用按需引用,需手动维护组件内部引用 + +## 1.2.11(2021-02-24) +- 调整为uni_modules目录规范 +- uni-data-picker 新增 数据驱动的picker选择器 +- uni-file-picker 新增 文件选择上传 +- uni-row 新增 栅格系统 +- uni-data-checkbox 优化 支持 nvue +- uni-forms 修复 偶发性获取表单值错误的Bug +- uni-forms 修复 校验 uni-data-picker value 为 0 时,返回值错误的Bug +- uni-forms 修复 uni-forms-item 组件隐藏时依然触发校验的bug +- uni-forms 优化 实时校验 +- uni-forms 优化 兼容nvue页面 +- uni-easyinput 优化 兼容nvue页面 +- uni-group 优化 兼容nvue页面 +- uni-popup 优化 组件适配 PC +- uni-fab 优化 适配 PC +- uni-swiper-dot 优化 适配 PC +- uni-rate 优化 适配 PC +- uni-notice-bar 优化 适配 PC +- uni-indexed-list 优化 适配 PC +- uni-combox 优化 适配 PC +- uni-transition 优化 适配 PC +- uni-nav-bar 优化 适配 PC +- uni-swipe-action 优化 适配 PC diff --git a/uni_modules/uni-ui/components/uni-ui/uni-ui.vue b/uni_modules/uni-ui/components/uni-ui/uni-ui.vue new file mode 100644 index 0000000..0970892 --- /dev/null +++ b/uni_modules/uni-ui/components/uni-ui/uni-ui.vue @@ -0,0 +1,7 @@ + + + diff --git a/uni_modules/uni-ui/package.json b/uni_modules/uni-ui/package.json new file mode 100644 index 0000000..857ed51 --- /dev/null +++ b/uni_modules/uni-ui/package.json @@ -0,0 +1,129 @@ +{ + "id": "uni-ui", + "displayName": "uni-ui", + "version": "1.4.27", + "description": "uni-ui 是基于uni-app的、全端兼容的、高性能UI框架", + "keywords": [ + "uni-ui", + "uniui", + "UI组件库", + "ui框架", + "ui库" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.10" + }, + "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-badge", + "uni-calendar", + "uni-card", + "uni-collapse", + "uni-combox", + "uni-countdown", + "uni-data-checkbox", + "uni-data-picker", + "uni-data-select", + "uni-dateformat", + "uni-datetime-picker", + "uni-drawer", + "uni-easyinput", + "uni-fab", + "uni-fav", + "uni-file-picker", + "uni-forms", + "uni-goods-nav", + "uni-grid", + "uni-group", + "uni-icons", + "uni-indexed-list", + "uni-link", + "uni-list", + "uni-load-more", + "uni-nav-bar", + "uni-notice-bar", + "uni-number-box", + "uni-pagination", + "uni-popup", + "uni-rate", + "uni-row", + "uni-search-bar", + "uni-section", + "uni-segmented-control", + "uni-steps", + "uni-swipe-action", + "uni-swiper-dot", + "uni-table", + "uni-tag", + "uni-title", + "uni-tooltip", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-ui/readme.md b/uni_modules/uni-ui/readme.md new file mode 100644 index 0000000..23f8456 --- /dev/null +++ b/uni_modules/uni-ui/readme.md @@ -0,0 +1,247 @@ +> 当前插件不包含示例页面 ,如需示例请在 HBuiderX 中新建 `hello uni-app > 扩展组件` 中查看 +> +> 代码示例地址 :[https://ext.dcloud.net.cn/plugin?id=4941](https://ext.dcloud.net.cn/plugin?id=4941) +> +> 组件演示地址:[https://hellouniapp.dcloud.net.cn](https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge) +> +> 组件文档地址:[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) + +# uni-ui 介绍 + +## uni-ui产品特点 + +### 1. 高性能 + +目前为止,在小程序和混合app领域,暂时还没有比 `uni-ui` 更高性能的框架。 +- 自动差量更新数据 + +虽然uni-app支持小程序自定义组件,所有小程序的ui库都可以用。但小程序自定义组件的ui库都需要使用setData手动更新数据,在大数据量时、或高频更新数据时,很容易产生性能问题。 + +而 `uni-ui` 属于vue组件,uni-app引擎底层自动diff更新数据。当然其实插件市场里众多vue组件都具备这个特点。 +- 优化逻辑层和视图层通讯折损 + +非H5,不管是小程序还是App,不管是app的webview渲染还是原生渲染,全都是逻辑层和视图层分离的。这里就有一个逻辑层和视图层通讯的折损问题。 +比如在视图层拖动一个可跟手的组件,由于通讯的损耗,用js监听很难做到实时跟手。 + +这时就需要使用css动画以及平台底层提供的wxs、bindingx等技术。不过这些技术都比较复杂,所以 `uni-ui` 里做了封装,在需要跟手式操作的ui组件,比如swiperaction列表项左滑菜单,就在底层使用了这些技术,实现了高性能的交互体验 +- 背景停止 + +很多ui组件是会一直动的,比如轮播图、跑马灯。即便这个窗体被新窗体挡住,它在背景层仍然在消耗着硬件资源。在Android的webview版本为chrome66以上,背景操作ui会引发很严重的性能问题,造成前台界面明显卡顿。 + +而 `uni-ui` 的组件,会自动判断自己的显示状态,在组件不再可见时,不会再消耗硬件资源。 + +### 2. 全端 + + `uni-ui` 的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。 + +比如导航栏navbar组件,会自动处理不同端的状态栏。 +比如swiperaction组件,在app和微信小程序上会使用交互体验更好的wxs技术,但在不支持wxs的其他小程序端会使用js模拟类似效果。 + + `uni-ui` 还支持nvue原生渲染,[详见](https://github.com/dcloudio/uni-ui/tree/nvue-uni-ui) + +未来 `uni-ui` 还会支持pc等大屏设备。 + +### 3. 与uni统计自动集成实现免打点 + +uni统计是优秀的多端统计平台,见[tongji.dcloud.net.cn](https://tongji.dcloud.net.cn)。 + +除了一张报表看全端,它的另一个重要特点是免打点。 +比如使用 `uni-ui` 的navbar标题栏、收藏、购物车等组件,均可实现自动打点,统计页面标题等各种行为数据。 +当然你也可以关闭uni统计,这不是强制的。 + +### 4. 主题扩展 + + `uni-ui` 支持[uni.scss](https://uniapp.dcloud.io/collocation/uni-scss),可以方便的切换App的风格。 + +ui是一种需求非常发散的产品,DCloud官方也无意用 `uni-ui` 压制第三方ui插件的空间,但官方有义务在性能和多端方面提供一个开源的标杆给大家。 + +我们欢迎更多优秀的ui组件出现,也欢迎更多人贡献 `uni-ui` 的主题风格,满足更多用户的需求。 + + +## 快速开始 + +uni-ui支持 HBuilderX直接新建项目模板、npm安装和单独导入个别组件等多种使用方式 + +### 在HBuilderX 新建uni-app项目的模板中,选择uni-ui模板 +![HBuilderX内创建uni-ui项目](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/create-uni-ui-project.jpg) + +由于uni-app独特的[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)技术,可以免引用、注册,直接使用各种符合规则的vue组件。 + +在代码区键入`u`,拉出各种内置或uni-ui的组件列表,选择其中一个,即可使用该组件。 + +光标放在组件名称上,按F1,可以查阅组件的文档。 + +![uni-ui代码块](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/uni-ui-snippet.jpg) + +### 通过 uni_modules 单独安装组件 +如果你没有创建uni-ui项目模板,也可以在你的工程里,通过 uni_modules 单独安装需要的某个组件。下表为uni-ui的扩展组件清单,点击每个组件在详情页面可以导入组件到项目下,导入后直接使用即可,无需import和注册。 + +|组件名|组件说明| +|---|---| +|uni-badge|[数字角标](https://ext.dcloud.net.cn/plugin?name=uni-badge)| +|uni-calendar|[日历](https://ext.dcloud.net.cn/plugin?name=uni-calendar)| +|uni-card|[卡片](https://ext.dcloud.net.cn/plugin?name=uni-card)| +|uni-collapse|[折叠面板](https://ext.dcloud.net.cn/plugin?name=uni-collapse)| +|uni-combox|[组合框](https://ext.dcloud.net.cn/plugin?name=uni-combox)| +|uni-countdown|[倒计时](https://ext.dcloud.net.cn/plugin?name=uni-countdown)| +|uni-data-checkbox|[数据选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-checkbox)| +|uni-data-picker|[数据驱动的picker选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-picker)| +|uni-dateformat|[日期格式化](https://ext.dcloud.net.cn/plugin?name=uni-dateformat)| +|uni-datetime-picker|[日期选择器](https://ext.dcloud.net.cn/plugin?name=uni-datetime-picker)| +|uni-drawer|[抽屉](https://ext.dcloud.net.cn/plugin?name=uni-drawer)| +|uni-easyinput|[增强输入框](https://ext.dcloud.net.cn/plugin?name=uni-easyinput)| +|uni-fab|[悬浮按钮](https://ext.dcloud.net.cn/plugin?name=uni-fab)| +|uni-fav|[收藏按钮](https://ext.dcloud.net.cn/plugin?name=uni-fav)| +|uni-file-picker|[文件选择上传](https://ext.dcloud.net.cn/plugin?name=uni-file-picker)| +|uni-forms|[表单](https://ext.dcloud.net.cn/plugin?name=uni-forms)| +|uni-goods-nav|[商品导航](https://ext.dcloud.net.cn/plugin?name=uni-goods-nav)| +|uni-grid|[宫格](https://ext.dcloud.net.cn/plugin?name=uni-grid)| +|uni-group|[分组](https://ext.dcloud.net.cn/plugin?name=uni-group)| +|uni-icons|[图标](https://ext.dcloud.net.cn/plugin?name=uni-icons)| +|uni-indexed-list|[索引列表](https://ext.dcloud.net.cn/plugin?name=uni-indexed-list)| +|uni-link|[超链接](https://ext.dcloud.net.cn/plugin?name=uni-link)| +|uni-list|[列表](https://ext.dcloud.net.cn/plugin?name=uni-list)| +|uni-load-more|[加载更多](https://ext.dcloud.net.cn/plugin?name=uni-load-more)| +|uni-nav-bar|[自定义导航栏](https://ext.dcloud.net.cn/plugin?name=uni-nav-bar)| +|uni-notice-bar|[通告栏](https://ext.dcloud.net.cn/plugin?name=uni-notice-bar)| +|uni-number-box|[数字输入框](https://ext.dcloud.net.cn/plugin?name=uni-number-box)| +|uni-pagination|[分页器](https://ext.dcloud.net.cn/plugin?name=uni-pagination)| +|uni-popup|[弹出层](https://ext.dcloud.net.cn/plugin?name=uni-popup)| +|uni-rate|[评分](https://ext.dcloud.net.cn/plugin?name=uni-rate)| +|uni-row|[布局-行](https://ext.dcloud.net.cn/plugin?name=uni-row)| +|uni-search-bar|[搜索栏](https://ext.dcloud.net.cn/plugin?name=uni-search-bar)| +|uni-segmented-control|[分段器](https://ext.dcloud.net.cn/plugin?name=uni-segmented-control)| +|uni-steps|[步骤条](https://ext.dcloud.net.cn/plugin?name=uni-steps)| +|uni-swipe-action|[滑动操作](https://ext.dcloud.net.cn/plugin?name=uni-swipe-action)| +|uni-swiper-dot|[轮播图指示点](https://ext.dcloud.net.cn/plugin?name=uni-swiper-dot)| +|uni-table|[表格](https://ext.dcloud.net.cn/plugin?name=uni-table)| +|uni-tag|[标签](https://ext.dcloud.net.cn/plugin?name=uni-tag)| +|uni-title|[章节标题](https://ext.dcloud.net.cn/plugin?name=uni-title)| +|uni-transition|[过渡动画](https://ext.dcloud.net.cn/plugin?name=uni-transition)| + + +使用 `uni_modules` 方式安装组件库,可以直接通过插件市场导入,通过右键菜单快速更新组件,不需要引用、注册,直接在页面中使用 `uni-ui` 组件。[点击安装 uni-ui 组件库](https://ext.dcloud.net.cn/plugin?id=55) + +**注意:下载最新的组件目前仅支持 uni_modules ,非 uni_modules 版本最高支持到组件的1.2.10版本** + +如不能升级到 `uni_modules` 版本,可以使用 `uni_modules` 安装好对应组件,将组件拷贝到对应目录。 + +例如需更新 `uni-list`和`uni-badge` ,将 `uni_modules>uni-list>components`和`uni_modules>uni-badege>components`下所有目录拷贝到如下目录即可: + + +**目录示例** + +```json +┌─components 组件目录 +│ ├─uni-list list 列表目录 +│ │ └─uni-list.vue list 组件文件 +│ ├─uni-list-item list-item 列表目录 +│ │ └─uni-list-item.vue list 组件文件 +│ ├─uni-badge badge 角标目录 +│ │ └─uni-badge.vue badge 组件文件 +│ └─ //.... 更多组件文件 +├─pages 业务页面文件存放的目录 +│ ├─index +│ │ └─index.vue index示例页面 +├─main.js Vue初始化入口文件 +├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 +├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见 +└─pages.json 配置页 + +``` + +### 通过 `uni_modules` 导入全部组件 +如果想一次把所有uni-ui组件导入到项目中,只需要导入一个 `uni-ui` 组件即可 [点击去导入](https://ext.dcloud.net.cn/plugin?id=55)。 + +如果没有自动导入其他组件,可以在 uni-ui 组件目录上右键选择 `安装三方插件依赖` 即可。 + + + +### npm安装 +在 `vue-cli` 项目中可以使用 `npm` 安装 `uni-ui` 库 ,或者直接在 `HBuilderX` 项目中使用 `npm` 。 + +> **注意** +> cli 项目默认是不编译 `node_modules` 下的组件的,导致条件编译等功能失效 ,导致组件异常 +> 需要在根目录创建 `vue.config.js` 文件 ,增加 `@dcloudio/uni-ui` 包的编译即可正常 +> ```javascript +> // vue.config.js +> module.exports = { +> transpileDependencies:['@dcloudio/uni-ui'] +> } +> ``` + + + +**准备 sass** + +`vue-cli` 项目请先安装 sass 及 sass-loader,如在 HBuliderX 中使用,可跳过此步。 + +- 安装 sass +``` + npm i sass -D 或 yarn add sass -D +``` + +- 安装 sass-loader +``` +npm i sass-loader@10.1.1 -D 或 yarn add sass-loader@10.1.1 -D +``` + +> 如果 `node` 版本小于 16 ,sass-loader 请使用低于 @11.0.0 的版本,[sass-loader@11.0.0 不支持 vue@2.6.12 ](https://stackoverflow.com/questions/66082397/typeerror-this-getoptions-is-not-a-function) +> 如果 `node` 版本大于 16 , `sass-loader` 建议使用 `v8.x` 版本 + +**安装 uni-ui** + +``` +npm i @dcloudio/uni-ui 或 yarn add @dcloudio/uni-ui +``` + + + +**配置easycom** + +使用 `npm` 安装好 `uni-ui` 之后,需要配置 `easycom` 规则,让 `npm` 安装的组件支持 `easycom` + +打开项目根目录下的 `pages.json` 并添加 `easycom` 节点: + +```javascript +// pages.json +{ + "easycom": { + "autoscan": true, + "custom": { + // uni-ui 规则如下配置 + "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" + } + }, + + // 其他内容 + pages:[ + // ... + ] +} + +``` + +在 ``template`` 中使用组件: + +```html + + + +``` + + **注意** + - uni-ui 现在只推荐使用 `easycom` ,如自己引用组件,可能会出现组件找不到的问题 + - 使用 npm 安装的组件,默认情况下 babel-loader 会忽略所有 node_modules 中的文件 ,导致条件编译失效,需要通过配置 `vue.config.js` 解决: + ```javascript + // 在根目录创建 vue.config.js 文件,并配置如下 + module.exports = { + transpileDependencies: ['@dcloudio/uni-ui'] + } + ``` + - uni-ui 是uni-app内置组件的扩展。注意与web开发不同,uni-ui不包括基础组件,它是基础组件的补充。web开发中有的开发者习惯用一个ui库完成所有开发,但在uni-app体系中,推荐开发者首先使用性能更高的基础组件,然后按需引入必要的扩展组件。 + - `uni-ui` 不支持使用 `Vue.use()` 的方式安装 + + +### 贡献代码 +在使用 `uni-ui` 中,如遇到无法解决的问题,请提 [Issues](https://github.com/dcloudio/uni-ui/issues) 给我们,假如您有更好的点子或更好的实现方式,也欢迎给我们提交 [PR](https://github.com/dcloudio/uni-ui/pulls) \ No newline at end of file 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..ece5530 --- /dev/null +++ b/uni_modules/uv-album/changelog.md @@ -0,0 +1,8 @@ +## 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..44cdc2a --- /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..2a5d8a1 --- /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.3", + "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..19cd098 --- /dev/null +++ b/uni_modules/uv-avatar/changelog.md @@ -0,0 +1,5 @@ +## 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..09068a5 --- /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.1", + "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..6e12dfc --- /dev/null +++ b/uni_modules/uv-button/changelog.md @@ -0,0 +1,27 @@ +## 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..9c68034 --- /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..d99783e --- /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.12", + "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..055f6f8 --- /dev/null +++ b/uni_modules/uv-cell/changelog.md @@ -0,0 +1,11 @@ +## 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..d4278a6 --- /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..4af91bc --- /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.4", + "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..572eadc --- /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..dadfb3f --- /dev/null +++ b/uni_modules/uv-datetime-picker/changelog.md @@ -0,0 +1,26 @@ +## 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..5cee897 --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js @@ -0,0 +1,125 @@ +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 + }, + ...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..71afe74 --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue @@ -0,0 +1,353 @@ + + \ 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..97e5064 --- /dev/null +++ b/uni_modules/uv-datetime-picker/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-datetime-picker", + "displayName": "uv-datetime-picker 时间选择器 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.11", + "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" + }, + "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..cbc482c --- /dev/null +++ b/uni_modules/uv-divider/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-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..0d6901f --- /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.2", + "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..13b135f --- /dev/null +++ b/uni_modules/uv-drop-down/changelog.md @@ -0,0 +1,11 @@ +## 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..c6d045a --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue @@ -0,0 +1,167 @@ + + + \ 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..db073e9 --- /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..9f9cca8 --- /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.4", + "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..5e25b72 --- /dev/null +++ b/uni_modules/uv-empty/changelog.md @@ -0,0 +1,11 @@ +## 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..b018d24 --- /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..1b92d91 --- /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.4", + "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..dc9e52c --- /dev/null +++ b/uni_modules/uv-grid/changelog.md @@ -0,0 +1,17 @@ +## 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..dad9d1d --- /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.7", + "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..f641801 --- /dev/null +++ b/uni_modules/uv-icon/changelog.md @@ -0,0 +1,27 @@ +## 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..6bf40e9 --- /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.11", + "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..cd8e9b4 --- /dev/null +++ b/uni_modules/uv-image/changelog.md @@ -0,0 +1,30 @@ +## 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..a9f8be8 --- /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..0ea7dd8 --- /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.13", + "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..8f3ab22 --- /dev/null +++ b/uni_modules/uv-input/changelog.md @@ -0,0 +1,25 @@ +## 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..2d34d1d --- /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.11", + "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..9ecd08c --- /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..13c3fa5 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue @@ -0,0 +1,202 @@ + + + + + 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..4da3c0d --- /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..421a07d --- /dev/null +++ b/uni_modules/uv-loading-page/changelog.md @@ -0,0 +1,7 @@ +## 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..d6a8014 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/props.js @@ -0,0 +1,50 @@ +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: 18 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 28 + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: '#C8C8C8' + }, + ...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..bf4a512 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/uni_modules/uv-loading-page/package.json b/uni_modules/uv-loading-page/package.json new file mode 100644 index 0000000..7b88bb0 --- /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.2", + "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..fea1f13 --- /dev/null +++ b/uni_modules/uv-modal/changelog.md @@ -0,0 +1,22 @@ +## 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..66c9b99 --- /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, + 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..40c34e7 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue @@ -0,0 +1,242 @@ + + + + + diff --git a/uni_modules/uv-modal/package.json b/uni_modules/uv-modal/package.json new file mode 100644 index 0000000..3159b78 --- /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.8", + "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,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' + }, + ...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..ebbe555 --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue @@ -0,0 +1,397 @@ + + + + \ 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 @@ +